初始上传
This commit is contained in:
205
app/model/order/event/OrderClose.php
Executable file
205
app/model/order/event/OrderClose.php
Executable 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();
|
||||
}
|
||||
}
|
||||
83
app/model/order/event/OrderComplete.php
Executable file
83
app/model/order/event/OrderComplete.php
Executable 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();
|
||||
}
|
||||
}
|
||||
54
app/model/order/event/OrderDelivery.php
Executable file
54
app/model/order/event/OrderDelivery.php
Executable 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();
|
||||
}
|
||||
}
|
||||
88
app/model/order/event/OrderPay.php
Executable file
88
app/model/order/event/OrderPay.php
Executable 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;
|
||||
}
|
||||
}
|
||||
117
app/model/order/event/OrderTake.php
Executable file
117
app/model/order/event/OrderTake.php
Executable 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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user