|
|
@@ -13,6 +13,7 @@ namespace App\Services\Api;
|
|
|
|
|
|
use App\Models\CartModel;
|
|
|
use App\Models\GoodsModel;
|
|
|
+use App\Models\GoodsSkuModel;
|
|
|
use App\Models\MemberModel;
|
|
|
use App\Models\OrderGoodsModel;
|
|
|
use App\Models\OrderModel;
|
|
|
@@ -333,12 +334,35 @@ class OrderService extends BaseService
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ // 商品库存扣除
|
|
|
+ if($orderGoods){
|
|
|
+ foreach($orderGoods as $goods){
|
|
|
+ $id = isset($goods['goods_id'])?$goods['goods_id']:0;
|
|
|
+ $num = isset($goods['num'])?$goods['num']:0;
|
|
|
+ $skuId = isset($goods['sku_id'])?$goods['sku_id']:0;
|
|
|
+ if($id && !GoodsModel::where(['id'=>$id])->update(['stock'=>DB::raw("stock - {$num}"),'update_time'=>time()])){
|
|
|
+ DB::rollBack();
|
|
|
+ RedisService::clear($cacheLockKey);
|
|
|
+ $this->error = '商品库存处理失败';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if($skuId && !GoodsSkuModel::where(['id'=>$skuId])->update(['stock'=>DB::raw("stock - {$num}"),'update_time'=>time()])){
|
|
|
+ DB::rollBack();
|
|
|
+ RedisService::clear($cacheLockKey);
|
|
|
+ $this->error = '商品库存处理失败';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// 清空购物车结算商品
|
|
|
if($submitType == 'cart'){
|
|
|
CartModel::whereIn('goods_id',$ids)->whereIn('sku_id',$skuIds)->where(['user_id'=>$userId,'mark'=>1])->update(['mark'=>0,'num'=>0,'update_time'=>time()]);
|
|
|
RedisService::clear("caches:goods:cartCount:{$userId}");
|
|
|
}
|
|
|
|
|
|
+
|
|
|
// 用户操作记录
|
|
|
DB::commit();
|
|
|
$this->error = '订单创建成功,请前往支付~';
|
|
|
@@ -493,10 +517,35 @@ class OrderService extends BaseService
|
|
|
RedisService::clear($cacheLockKey);
|
|
|
return false;
|
|
|
}
|
|
|
+ $orderGoods = OrderGoodsModel::where(['order_no'=> $orderNo,'mark'])
|
|
|
+ ->select(['goods_id','num','sku_id'])
|
|
|
+ ->get();
|
|
|
+ DB::beginTransaction();
|
|
|
+ if($orderGoods){
|
|
|
+ foreach($orderGoods as $goods){
|
|
|
+ $id = isset($goods['goods_id'])?$goods['goods_id']:0;
|
|
|
+ $num = isset($goods['num'])?$goods['num']:0;
|
|
|
+ $skuId = isset($goods['sku_id'])?$goods['sku_id']:0;
|
|
|
+ if($id && !GoodsModel::where(['id'=>$id])->update(['stock'=>DB::raw("stock + {$num}"),'update_time'=>time()])){
|
|
|
+ DB::rollBack();
|
|
|
+ RedisService::clear($cacheLockKey);
|
|
|
+ $this->error = '商品库存处理失败';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if($skuId && !GoodsSkuModel::where(['id'=>$skuId])->update(['stock'=>DB::raw("stock + {$num}"),'update_time'=>time()])){
|
|
|
+ DB::rollBack();
|
|
|
+ RedisService::clear($cacheLockKey);
|
|
|
+ $this->error = '商品库存处理失败';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
$this->error = '取消订单成功';
|
|
|
$this->model->where(['user_id' => $userId, 'mark' => 0])->where('update_time', '<=', time() - 300)->delete();
|
|
|
$this->model->where(['id' => $id])->update(['mark' => 0, 'update_time' => time()]);
|
|
|
+ DB::commit();
|
|
|
return ['id' => $id];
|
|
|
}
|
|
|
|
|
|
@@ -506,7 +555,7 @@ class OrderService extends BaseService
|
|
|
* @param $id 订单ID
|
|
|
* @return array|false
|
|
|
*/
|
|
|
- public function complete($userId, $id)
|
|
|
+ public function complete($userId, $id, $check= true)
|
|
|
{
|
|
|
if ($id <= 0) {
|
|
|
$this->error = '请选择订单';
|
|
|
@@ -529,7 +578,7 @@ class OrderService extends BaseService
|
|
|
->first();
|
|
|
$status = isset($userInfo['status']) ? $userInfo['status'] : 0;
|
|
|
$parentId = isset($userInfo['parent_id']) ? $userInfo['parent_id'] : 0;
|
|
|
- if (empty($userInfo) || $status != 1) {
|
|
|
+ if ($check && (empty($userInfo) || $status != 1)) {
|
|
|
$this->error = 1045;
|
|
|
RedisService::clear($cacheLockKey);
|
|
|
return false;
|
|
|
@@ -542,7 +591,6 @@ class OrderService extends BaseService
|
|
|
$orderNo = isset($info['order_no']) ? $info['order_no'] : '';
|
|
|
$deliveryNo = isset($info['delivery_no']) ? $info['delivery_no'] : '';
|
|
|
$deliverCompany = isset($info['delivery_company']) ? $info['delivery_company'] : '';
|
|
|
- $deliverCode = isset($info['delivery_code']) ? $info['delivery_code'] : '';
|
|
|
$storeId = isset($info['store_id']) ? $info['store_id'] : 0;
|
|
|
$orderTotal = isset($info['pay_total']) ? $info['pay_total'] : 0;
|
|
|
$bonus = isset($info['bonus']) ? $info['bonus'] : 0;
|
|
|
@@ -563,12 +611,19 @@ class OrderService extends BaseService
|
|
|
|
|
|
if (empty($deliveryNo) || empty($deliverCompany)) {
|
|
|
$this->error = '订单发货信息错误,请联系客服';
|
|
|
+ $this->model->where(['id'=>$id])->update(['is_complete'=>1,'complete_remark'=>$this->error]);
|
|
|
+ RedisService::clear("caches:orders:completeList");
|
|
|
RedisService::clear($cacheLockKey);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
DB::beginTransaction();
|
|
|
- $this->model->where(['id' => $id])->update(['status' => 4, 'update_time' => time()]);
|
|
|
+ $updateData = ['status' => 4, 'update_time' => time()];
|
|
|
+ if(!$check){
|
|
|
+ $updateData['is_complete'] = 1;
|
|
|
+ $updateData['complete_remark'] = '自动收货';
|
|
|
+ }
|
|
|
+ $this->model->where(['id' => $id])->update($updateData);
|
|
|
|
|
|
// 商家订单数据统计
|
|
|
$updateData = ['order_count' => DB::raw('order_count+1'), 'order_total' => DB::raw("order_total + {$orderTotal}")];
|
|
|
@@ -610,6 +665,7 @@ class OrderService extends BaseService
|
|
|
DB::commit();
|
|
|
|
|
|
$this->error = '确认收货成功';
|
|
|
+ RedisService::clear("caches:orders:completeList");
|
|
|
return ['id' => $id];
|
|
|
}
|
|
|
|
|
|
@@ -893,4 +949,33 @@ class OrderService extends BaseService
|
|
|
return $data;
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 已发货待完成订单
|
|
|
+ * @return array|mixed
|
|
|
+ */
|
|
|
+ public function getCompleteOrders()
|
|
|
+ {
|
|
|
+ $cacheKey = "caches:orders:completeList";
|
|
|
+ $datas = RedisService::get($cacheKey);
|
|
|
+ if($datas){
|
|
|
+ return $datas;
|
|
|
+ }
|
|
|
+
|
|
|
+ $completeDay = ConfigService::make()->getConfigByCode('order_complete_day',7);
|
|
|
+ $limitNum = ConfigService::make()->getConfigByCode('order_complete_batch_num',300);
|
|
|
+ $limitNum = $limitNum>10 && $limitNum<2000? $limitNum : 300;
|
|
|
+ $completeDay = $completeDay>=1 && $completeDay<30? $completeDay : 7;
|
|
|
+ $datas = $this->model->where(['status'=>3,'is_complete'=>2,'mark'=>1])
|
|
|
+ ->select(['id','user_id','order_no','status'])
|
|
|
+ ->where('pay_at','<=', date('Y-m-d H:i:s', time() - $completeDay * 86400))
|
|
|
+ ->limit($limitNum)
|
|
|
+ ->get();
|
|
|
+ $datas = $datas?$datas->toArray() : [];
|
|
|
+ if($datas){
|
|
|
+ RedisService::set($cacheKey, $datas, rand(300, 600));
|
|
|
+ }
|
|
|
+
|
|
|
+ return $datas;
|
|
|
+ }
|
|
|
}
|