提交 2ae33c5a 编写于 作者: X xindan

订单收货分离

上级 1756182a
......@@ -937,12 +937,19 @@ class OrderService
// 虚拟商品自动触发发货操作
if($order['order_model'] == 3)
{
self::OrderDelivery([
$ret = self::OrderDeliveryHandle([
'id' => $order['id'],
'creator' => 0,
'creator_name' => '系统',
'user_id' => $order['user_id'],
'user_type' => 'admin',
]);
if($ret['code'] != 0)
{
// 事务回滚
Db::rollback();
return $ret;
}
}
}
......@@ -1269,7 +1276,7 @@ class OrderService
// 自提模式 添加订单取货码
if($v['order_model'] == 2)
{
$v['extraction_data'] = (!empty($extraction_data) && array_key_exists($v['id'], $extraction_data)) ? $extraction_data[$v['id']] : [];
$v['extraction_data'] = (isset($v['status']) && !in_array($v['status'], [0,1,5,6]) && !empty($extraction_data) && array_key_exists($v['id'], $extraction_data)) ? $extraction_data[$v['id']] : null;
}
}
......@@ -1426,7 +1433,7 @@ class OrderService
{
$result['is_confirm'] = ($data['status'] == 0) ? 1 : 0;
$result['is_pay'] = ($data['pay_status'] == 0 && !in_array($data['status'], [5,6])) ? 1 : 0;
$result['is_delivery'] = ($data['status'] == 2) ? 1 : 0;
$result['is_delivery'] = ($data['status'] == 2 || (isset($data['order_model']) && $data['order_model'] == 3)) ? 1 : 0;
$result['is_collect'] = ($data['status'] == 3) ? 1 : 0;
$result['is_cancel'] = (in_array($data['status'], [0,1]) || (in_array($data['status'], [2,3,4]) && $data['pay_status'] == 0)) ? 1 : 0;
$result['is_delete'] = (in_array($data['status'], [5,6]) && isset($data['is_delete_time']) && $data['is_delete_time'] == 0) ? 1 : 0;
......@@ -1639,7 +1646,7 @@ class OrderService
*/
private static function OrderAftersaleStatusBtnText($order_status, $orderaftersale)
{
$text = '';
$text = null;
if(in_array($order_status, [2,3,4,6]))
{
if(empty($orderaftersale))
......@@ -1746,7 +1753,7 @@ class OrderService
// 获取订单信息
$where = ['id'=>intval($params['id']), 'user_id'=>$params['user_id'], 'is_delete_time'=>0, 'user_is_delete_time'=>0];
$order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id')->find();
$order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id,order_model')->find();
if(empty($order))
{
return DataReturn('资源不存在或已被删除', -1);
......@@ -1806,112 +1813,136 @@ class OrderService
*/
public static function OrderDelivery($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'id',
'error_msg' => '订单id有误',
],
[
'checked_type' => 'empty',
'key_name' => 'user_id',
'error_msg' => '用户id有误',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
// 订单发货处理
Db::startTrans();
$ret = self::OrderDeliveryHandle($params);
if($ret['code'] == 0)
{
return DataReturn($ret, -1);
Db::commit();
} else {
Db::rollback();
}
return $ret;
}
// 用户类型
$user_type = empty($params['user_type']) ? 'user' : $params['user_type'];
/**
* 订单发货处理
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-30
* @desc description
* @param [array] $params [输入参数]
*/
public static function OrderDeliveryHandle($params = [])
{
// 捕获异常
try {
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'id',
'error_msg' => '订单id有误',
],
[
'checked_type' => 'empty',
'key_name' => 'user_id',
'error_msg' => '用户id有误',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
throw new \Exception($ret['msg']);
}
// 获取订单信息
$where = ['id'=>intval($params['id']), 'user_id'=>$params['user_id'], 'is_delete_time'=>0, 'user_is_delete_time'=>0];
$order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id,order_model')->find();
if(empty($order))
{
return DataReturn('资源不存在或已被删除', -1);
}
$operate = self::OrderOperateData($order, $user_type);
if($operate['is_delivery'] != 1)
{
$status_text = MyConst('common_order_status')[$order['status']]['name'];
return DataReturn('状态不可操作['.$status_text.']', -1);
}
// 用户类型
$user_type = empty($params['user_type']) ? 'user' : $params['user_type'];
// 订单模式
switch($order['order_model'])
{
// 销售模式- 订单快递信息校验
case 0 :
$p = [
[
'checked_type' => 'empty',
'key_name' => 'express_id',
'error_msg' => '快递id有误',
],
[
'checked_type' => 'empty',
'key_name' => 'express_number',
'error_msg' => '快递单号有误',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
break;
// 获取订单信息
$where = ['id'=>intval($params['id']), 'user_id'=>$params['user_id'], 'is_delete_time'=>0, 'user_is_delete_time'=>0];
$order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id,order_model')->find();
if(empty($order))
{
throw new \Exception('资源不存在或已被删除');
}
$operate = self::OrderOperateData($order, $user_type);
if($operate['is_delivery'] != 1)
{
$status_text = MyConst('common_order_status')[$order['status']]['name'];
throw new \Exception('状态不可操作['.$status_text.']');
}
// 订单模式
switch($order['order_model'])
{
// 销售模式- 订单快递信息校验
case 0 :
$p = [
[
'checked_type' => 'empty',
'key_name' => 'express_id',
'error_msg' => '快递id有误',
],
[
'checked_type' => 'empty',
'key_name' => 'express_number',
'error_msg' => '快递单号有误',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
throw new \Exception($ret['msg']);
}
break;
// 自提模式 - 验证取货码
case 2 :
$p = [
[
'checked_type' => 'empty',
'key_name' => 'extraction_code',
'error_msg' => '取货码有误',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 自提模式 - 验证取货码
case 2 :
$p = [
[
'checked_type' => 'empty',
'key_name' => 'extraction_code',
'error_msg' => '取货码有误',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
throw new \Exception($ret['msg']);
}
// 校验
$extraction_code = Db::name('OrderExtractionCode')->where(['order_id'=>$order['id']])->value('code');
if(empty($extraction_code))
{
return DataReturn('订单取货码不存在、请联系管理员', -10);
}
if($extraction_code != $params['extraction_code'])
{
return DataReturn('取货码不正确', -11);
}
break;
}
// 校验
$extraction_code = Db::name('OrderExtractionCode')->where(['order_id'=>$order['id']])->value('code');
if(empty($extraction_code))
{
throw new \Exception('订单取货码不存在、请联系管理员');
}
if($extraction_code != $params['extraction_code'])
{
throw new \Exception('取货码不正确');
}
break;
}
// 订单更新
$upd_data = [
'status' => 3,
'express_id' => isset($params['express_id']) ? intval($params['express_id']) : 0,
'express_number' => isset($params['express_number']) ? $params['express_number'] : '',
'delivery_time' => time(),
'upd_time' => time(),
];
if(!Db::name('Order')->where($where)->update($upd_data))
{
throw new \Exception('发货失败');
}
// 开启事务
Db::startTrans();
$upd_data = [
'status' => 3,
'express_id' => isset($params['express_id']) ? intval($params['express_id']) : 0,
'express_number' => isset($params['express_number']) ? $params['express_number'] : '',
'delivery_time' => time(),
'upd_time' => time(),
];
if(Db::name('Order')->where($where)->update($upd_data))
{
// 库存扣除
$ret = BuyService::OrderInventoryDeduct(['order_id'=>$order['id'], 'opt_type'=>'delivery']);
if($ret['code'] != 0)
{
// 事务回滚
Db::rollback();
return DataReturn($ret['msg'], -10);
throw new \Exception($ret['msg']);
}
// 用户消息
......@@ -1922,14 +1953,11 @@ class OrderService
$creator_name = isset($params['creator_name']) ? htmlentities($params['creator_name']) : '';
self::OrderHistoryAdd($order['id'], $upd_data['status'], $order['status'], '收货', $creator, $creator_name);
// 提交事务
Db::commit();
// 完成
return DataReturn('发货成功', 0);
} catch(\Exception $e) {
return DataReturn($e->getMessage(), -1);
}
// 事务回滚
Db::rollback();
return DataReturn('发货失败', -1);
}
/**
......@@ -1967,7 +1995,7 @@ class OrderService
// 获取订单信息
$where = ['id'=>intval($params['id']), 'user_id'=>$params['user_id'], 'is_delete_time'=>0, 'user_is_delete_time'=>0];
$order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id')->find();
$order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id,order_model')->find();
if(empty($order))
{
return DataReturn('资源不存在或已被删除', -1);
......@@ -2075,7 +2103,7 @@ class OrderService
// 获取订单信息
$where = ['id'=>intval($params['id']), 'user_id'=>$params['user_id'], 'is_delete_time'=>0, 'user_is_delete_time'=>0];
$order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id')->find();
$order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id,order_model')->find();
if(empty($order))
{
return DataReturn('资源不存在或已被删除', -1);
......@@ -2179,7 +2207,7 @@ class OrderService
// 获取订单信息
$where = ['id'=>intval($params['id']), 'user_id'=>$params['user_id'], $delete_field=>0];
$order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id,is_delete_time,user_is_delete_time')->find();
$order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id,order_model,is_delete_time,user_is_delete_time')->find();
if(empty($order))
{
return DataReturn('资源不存在或已被删除', -1);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册