初始上传

This commit is contained in:
2026-04-04 17:27:12 +08:00
parent 4d80d28eb4
commit b7e11774ee
11191 changed files with 1588469 additions and 0 deletions

View File

@@ -0,0 +1,205 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace app\model\order\event;
use addon\cardservice\model\MemberCard;
use addon\coupon\model\Coupon;
use app\dict\goods\GoodsDict;
use app\dict\order\OrderDict;
use app\dict\order_refund\OrderRefundDict;
use app\model\BaseModel;
use app\model\goods\Goods;
use app\model\member\MemberAccount;
use app\model\message\Message;
use app\model\order\OrderCommon;
use app\model\order\OrderLog;
use app\model\order\OrderRefund;
use app\model\order\OrderStock;
use app\model\system\Pay;
use think\db\exception\DbException;
/**
* 订单交易设置
*/
class OrderClose extends BaseModel
{
/**
* 校验
* @param $data
* @return array
* @throws DbException
*/
public function check($data)
{
$order_info = $data['order_info'];
$order_id = $order_info['order_id'];
//尝试关闭支付
if ($order_info['pay_status'] == 0) {
$pay_model = new Pay();
$result = $pay_model->closePay($order_info['out_trade_no']);//关闭旧支付单据
if ($result['code'] < 0) {
return $result;
}
}
//订单关闭校验
event('OrderCloseCheck', []);
return $this->success();
}
public function event($data)
{
$order_info = $data['order_info'];
$order_id = $order_info['order_id'];
// $is_exist_refund = $data['is_exist_refund'];
// $refund_goods_card = $data['refund_goods_card'];
// $refund_point = $data['refund_point'];
/******************************************************* 库存相关 **********************************************************/
//库存处理
$condition = array(
['order_id', '=', $order_id]
);
//循环订单项 依次返还库存 并修改状态
$order_goods_list = model('order_goods')->getList($condition, '*');
$order_refund_model = new OrderRefund();
$goods_model = new Goods();
$is_exist_refund = false;//是否存在退款
$refund_goods_card = [];
$refund_point = 0;
$order_stock = new OrderStock();
//用于存放退款库存的数组
$stock_goods_sku_data = [];
foreach ($order_goods_list as $k => $v) {
//如果是已维权完毕的订单项, 库存不必再次返还(todo 收银台订单创建不再扣除库存了)
if ($v['refund_status'] != OrderRefundDict::REFUND_COMPLETE && $order_info['order_type'] != OrderDict::cashier) {
$goods_class = $v['goods_class'] ?? 0;
if (in_array($goods_class, [GoodsDict::real, GoodsDict::virtual, GoodsDict::virtualcard, GoodsDict::service, GoodsDict::card, GoodsDict::weigh])) {
$stock_goods_sku_data[] = [
'sku_id' => $v['sku_id'],
'num' => $v['num']
];
}
//返还积分
$refund_point += $v['use_point'];
// 是否有使用次卡
if ($v['card_item_id']) {
$refund_goods_card[] = ['type' => 'order', 'relation_id' => $v['order_goods_id']];
}
}
if ($v['refund_status'] == OrderRefundDict::REFUND_COMPLETE) {
$is_exist_refund = true;
}
//减少商品销量(必须支付过)
if ($order_info['pay_status'] > 0) {
$goods_model->decGoodsSaleNum($v['sku_id'], $v['num'], $order_info['store_id']);
}
}
/******************************************************* 返还库存 **********************************************************/
if($stock_goods_sku_data){
//返还销售库存
$order_stock->incOrderSaleStock([
'goods_sku_data' => $stock_goods_sku_data,
'store_id' => $order_info['store_id']
]);
}
/******************************************************* 优惠券相关 **********************************************************/
//返还店铺优惠券
$coupon_id = $order_info['coupon_id'];
if ($coupon_id > 0) {
$coupon_model = new Coupon();
$coupon_model->refundCoupon($coupon_id, $order_info['member_id']);
}
//平台优惠券
/******************************************************* 退还余额相关 **********************************************************/
//平台余额 退还余额
if (!$is_exist_refund) {//因为订单完成后 只有全部退款完毕订单才会关闭
$member_account_model = new MemberAccount();
if ($order_info['balance_money'] > 0) {
$result = $member_account_model->addMemberAccount($order_info['site_id'], $order_info['member_id'], 'balance', $order_info['balance_money'], 'refund', $order_id, '订单关闭返还');
}
// 订单关闭返还积分
if ($refund_point > 0) {
$result = $member_account_model->addMemberAccount($order_info['site_id'], $order_info['member_id'], 'point', $refund_point, 'refund', $order_id, '订单关闭返还');
}
}
/******************************************************* 关闭后各插件相关 **********************************************************/
//订单关闭后操作
$close_result = event('OrderClose', $order_info);
if (empty($close_result)) {
foreach ($close_result as $k => $v) {
if (!empty($v) && $v['code'] < 0) {
return $v;
}
}
}
return $this->success();
}
/**
* 后续事件
* @param $data
* @return array
*/
public function after($data)
{
$order_info = $data['order_info'];
$log_data = $data['log_data'];
$close_cause = $data['close_cause'] ?? '';
$order_common_model = new OrderCommon();
/******************************************************* 会员相关 **********************************************************/
/******************************************************* 日志相关 **********************************************************/
//记录订单日志 start
$close_status = OrderCommon::ORDER_CLOSE;
if (!empty($log_data)) {
if ($log_data['action_way'] == 1) {
$member_info = model('member')->getInfo(['member_id' => $log_data['uid']], 'nickname');
$buyer_name = empty($member_info['nickname']) ? '' : '【' . $member_info['nickname'] . '】';
$log_data['nick_name'] = $buyer_name;
$action = '买家关闭了订单';
} else {
$action = '商家关闭了订单';
}
} else {
$action = !empty($close_cause) ? $close_cause : '系统自动关闭了订单(长时间未支付)';
$log_data = [
'uid' => 0,
'nick_name' => '系统',
'action_way' => 2
];
}
$log_data = array_merge($log_data, [
'order_id' => $order_info['order_id'],
'action' => $action,
'order_status' => $close_status,
'order_status_name' => $order_common_model->order_status[$close_status]['name']
]);
OrderLog::addOrderLog($log_data, $order_common_model);
//记录订单日志 end
/******************************************************* 发送消息 **********************************************************/
//订单关闭消息
$message_model = new Message();
$res = $message_model->sendMessage(['keywords' => 'ORDER_CLOSE', 'order_id' => $order_info['order_id'], 'site_id' => $order_info['site_id']]);
return $this->success();
}
}

View File

@@ -0,0 +1,83 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace app\model\order\event;
use app\model\BaseModel;
use app\model\message\Message;
use app\model\order\OrderCommon;
use app\model\order\OrderLog;
/**
* 订单完成设置
*/
class OrderComplete extends BaseModel
{
/**
* 校验
* @param $data
* @return array
*/
public function check($data)
{
$order_info = $data['order_info'];
$order_id = $order_info['order_id'];
/******************************************************* 校验订单锁定相关 **********************************************************/
$lock_result = (new OrderCommon())->verifyOrderLock($order_id);
if ($lock_result['code'] < 0)
return $lock_result;
return $this->success();
}
public function event($data)
{
$order_info = $data['order_info'];
$order_id = $order_info['order_id'];
/******************************************************* 会员账户相关 **********************************************************/
//修改用户表order_complete_money和order_complete_num
model('member')->setInc([['member_id', '=', $order_info['member_id']]], 'order_complete_money', $order_info['order_money'] - $order_info['refund_money']);
model('member')->setInc([['member_id', '=', $order_info['member_id']]], 'order_complete_num');
/******************************************************* 插件相关 **********************************************************/
event('OrderComplete', ['order_id' => $order_id]);
return $this->success();
}
/**
* 后续事件
* @param $data
* @return array
*/
public function after($data)
{
$order_info = $data['order_info'];
$order_id = $order_info['order_id'];
$site_id = $order_info['site_id'];
/******************************************************* 日志相关 **********************************************************/
$log_data = array(
'order_id' => $order_id,
'action' => 'complete',
'site_id' => $site_id,
'is_auto' => 1,// todo 当前业务默认是系统任务完成订单
);
(new OrderLog())->addLog($log_data);
/******************************************************* 消息相关 **********************************************************/
$message_model = new Message();
//订单完成
$message_model->sendMessage(['keywords' => 'ORDER_COMPLETE', 'order_id' => $order_id, 'site_id' => $site_id]);
// 买家订单完成通知商家
$message_model->sendMessage(['keywords' => 'BUYER_ORDER_COMPLETE', 'order_id' => $order_id, 'site_id' => $site_id]);
return $this->success();
}
}

View File

@@ -0,0 +1,54 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace app\model\order\event;
use app\model\BaseModel;
/**
* 订单发货设置
*/
class OrderDelivery extends BaseModel
{
/**
* 校验
* @param $data
* @return array
*/
public function check($data)
{
$order_info = $data['order_info'];
$order_id = $order_info['order_id'];
return $this->success();
}
public function event($data)
{
$order_info = $data['order_info'];
$order_id = $order_info['order_id'];
return $this->success();
}
/**
* 后续事件
* @param $data
* @return array
*/
public function after($data)
{
$order_info = $data['order_info'];
return $this->success();
}
}

View File

@@ -0,0 +1,88 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace app\model\order\event;
use app\model\BaseModel;
use app\model\goods\Goods;
use app\model\member\MemberAccount;
use app\model\message\Message;
use app\model\order\OrderCommon;
use Exception;
use app\model\system\Cron;
/**
* 订单交易设置
*/
class OrderPay extends BaseModel
{
public function check($data)
{
}
public function event($data)
{
$pay_info = $data['pay_info'];
$order_info = $data['order_info'];
//订单余额账户处理
if (($pay_info['balance'] || $pay_info['balance_money']) && $order_info['order_money']) {
//订单处理会员消费业务
$account_result = (new MemberAccount())->addMemberAccountInOrderPay($data);
if (!empty($account_result) && $account_result['code'] < 0) throw new Exception($account_result['message']);
}
//会员业务
$member_info = $data['member_info'];
$data_member = [
'order_money' => $member_info['order_money'] + $order_info['order_money'],
'order_num' => $member_info['order_num'] + 1,
'last_consum_time' => time()
];
model('member')->update($data_member, [['member_id', '=', $member_info['member_id']]]);
$order_info['pay_info'] = $pay_info;
event('OrderPay', $order_info);
return $this->success();
}
public function after($data)
{
$order_id = $data['order_id'];
$order_info = model('order')->getInfo([['order_id', '=', $order_id]], '*');
event('OrderPayAfter', $order_info);
//商品业务
$order_goods_list = model('order_goods')->getList([['order_id', '=', $order_id]], 'sku_id,num,goods_class,store_id');
$goods_model = new Goods();
foreach ($order_goods_list as $v) {
$goods_model->incGoodsSaleNum($v['sku_id'], $v['num']);
}
//发送消息
$message_model = new Message();
$param = ['keywords' => 'ORDER_PAY'];
$param = array_merge($param, $order_info);
$message_model->sendMessage($param);
$param = ['keywords' => 'BUYER_PAY'];
$param = array_merge($param, $order_info);
$message_model->sendMessage($param);
//删除定时任务
$cron = new Cron();
$cron->deleteCron([ [ 'event', '=', 'CronOrderClose' ], [ 'relate_id', '=', $order_id ] ]);
$cron->deleteCron([ [ 'event', '=', 'CronOrderUrgePayment' ], [ 'relate_id', '=', $order_id ] ]);
return true;
}
}

View File

@@ -0,0 +1,117 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace app\model\order\event;
use app\dict\order\OrderDict;
use app\model\BaseModel;
use app\model\order\OrderCommon;
use app\model\order\OrderCron;
use app\model\order\OrderLog;
use app\model\order\VirtualOrder;
use think\db\exception\DbException;
/**
* 订单交易设置
*/
class OrderTake extends BaseModel
{
/**
* 校验
* @param $data
* @return array|void
* @throws DbException
*/
public function check($data)
{
$order_info = $data['order_info'];
$order_id = $order_info['order_id'];
$order_info = model('order')->getInfo([['order_id', '=', $order_id]], '*');
if (empty($order_info))
return $this->error([], 'ORDER_EMPTY');
$order_common_model = new OrderCommon();
$order_info['goods_num'] = numberFormat($order_info['goods_num']);
$local_result = $this->verifyOrderLock($order_id);
if ($local_result['code'] < 0)
return $local_result;
$order_status = $order_info['order_status'];
$virtual_order_model = new VirtualOrder();
if ($order_status == $order_common_model::ORDER_TAKE_DELIVERY || $order_status == $virtual_order_model::ORDER_VERIFYED) {
// 虚拟商品无需确认收货
return $this->error('', '该订单已收货!');
}
return $this->success();
}
public function event($data)
{
$order_info = $data['order_info'];
$order_id = $order_info['order_id'];
$order_status = $data['order_status'];
//改变订单状态
$virtual_order_model = new VirtualOrder();
$order_common_model = new OrderCommon();
//todo 如果是虚拟商品并且有虚拟码的话, 订单状态应该为已使用
$order_model = $order_common_model->getOrderModel($order_info);
if ($order_status == $virtual_order_model::ORDER_WAIT_VERIFY) {
$order_action_array = $order_common_model->getOrderCommonAction($order_model, $virtual_order_model::ORDER_VERIFYED);
} else {
$order_action_array = $order_common_model->getOrderCommonAction($order_model, $order_model::ORDER_TAKE_DELIVERY);
}
$order_data = array(
'order_status' => $order_action_array['order_status'],
'order_status_name' => $order_action_array['order_status_name'],
'order_status_action' => $order_action_array['order_status_action'],
'is_evaluate' => 1,
'evaluate_status' => OrderDict::evaluate_wait,
'evaluate_status_name' => OrderDict::getEvaluateStatus(OrderDict::evaluate_wait),
'sign_time' => time()
);
model('order')->update($order_data, [['order_id', '=', $order_id]]);
OrderCron::complete(['order_id' => $order_id, 'site_id' => $order_info['site_id']]);
return $this->success();
}
/**
* 后续事件
* @param $data
* @return array
*/
public function after($data)
{
$order_info = $data['order_info'];
$order_action_array = $data['order_action_array'];
$log_data = $data['data'];
$order_common_model = new OrderCommon();
//记录订单日志 start
if ($log_data) {
$action = '商家对订单进行了确认收货';
if ($log_data['action_way'] == 1) {
$member_info = model('member')->getInfo(['member_id' => $log_data['uid']], 'nickname');
$buyer_name = empty($member_info['nickname']) ? '' : '【' . $member_info['nickname'] . '】';
$log_data['nick_name'] = $buyer_name;
$action = '买家确认收到货物';
}
$log_data = array_merge($log_data, [
'order_id' => $order_info['order_id'],
'action' => $action,
'order_status' => $order_action_array['order_status'],
'order_status_name' => $order_action_array['order_status_name'],
]);
OrderLog::addOrderLog($log_data, $order_common_model);
}
return $this->success();
}
}