dongxiaoqin 1 vuosi sitten
vanhempi
commit
43c2869952

+ 8 - 2
app/api/logic/GroupActivityLogic.php

@@ -151,7 +151,7 @@ class GroupActivityLogic extends BaseLogic
     {
         Db::startTrans();
         try {
-            $userOrder = GroupUserOrder::where(['group_activity_id' => $params['group_activity_id'], 'user_id' => $params['user_id'],'refund_status' => 0])->findOrEmpty()->toArray();
+            $userOrder = GroupUserOrder::where(['group_activity_id' => $params['group_activity_id'], 'user_id' => $params['user_id'],'refund_status' => 0])->where("pay_status","<>",1)->findOrEmpty()->toArray();
             if ($userOrder && $userOrder['pay_status'] == 1) {
                 throw new Exception('您已参加过该活动!');
             }
@@ -167,6 +167,11 @@ class GroupActivityLogic extends BaseLogic
             if (time() > $activity['end_time']) {
                 throw new Exception('拼团活动已结束!'); //拼团活动已结束
             }
+            //限制数量最大值:5
+            $num = isset($params['num']) && $params['num'] > 0 ? $params['num'] : 1;
+            if ($num > 5) {
+                throw new Exception('下单数量不能超过5个!'); 
+            }
             $order_amount = $activity['price'][0];
             
             //加入已开的拼团单
@@ -199,7 +204,8 @@ class GroupActivityLogic extends BaseLogic
                 'area'  => $params['area'],
                 'address' => $params['address'],
                 'remark' => isset($params['remark']) ? $params['remark'] : '',
-                'order_amount' => $order_amount,
+                'order_amount' => bcmul($order_amount,$num,2),
+                'num' => $num,
                 'order_terminal' => $params['terminal'],
             ];
             if ($userOrder) {

+ 126 - 1
app/common/command/GroupOrder.php

@@ -6,13 +6,17 @@ use think\facade\Log;
 use think\console\Input;
 use think\console\Output;
 use think\console\Command;
+use app\common\enum\WorkEnum;
 use app\common\enum\RefundEnum;
+use app\common\logic\RefundLogic;
 use app\common\model\equity\UserEquity;
 use app\common\model\equity\EquityConfig;
+use app\common\model\recharge\OrderGoods;
 use app\common\model\refund\RefundRecord;
+use app\common\model\equity\UserEquityLog;
+use app\common\model\works\GroupServiceWork;
 use app\common\model\group_activity\GroupUserOrder;
 use app\common\model\group_activity\GroupOrder as GroupOrderModel;
-use app\common\logic\RefundLogic;
 
 /*
 ** 拼团订单,活动结束,校验是否拼团成功, 如果成功,则给用户发放权益卡,失败批量退款
@@ -30,6 +34,127 @@ class GroupOrder extends Command
         //更新拼团结束的订单状态
         $this->updateGroupOrder();
 
+        //生成拼团工单
+        $this->createGroupServiceWork();
+
+    }
+
+    /**
+     * 生成拼团工单
+     */
+    public function createGroupServiceWork()
+    {
+        $list = GroupOrderModel::where(['status' => 1, 'work_status' => 1])->limit(100)->column('id');
+        foreach($list as $group_order_id) {
+            $goods = [];
+            $category = GroupOrderModel::alias('a')
+                        ->leftJoin('group_activity_category b','a.group_category_id=b.id')
+                        ->leftJoin('group_activity c','a.group_activity_id=c.id')
+                        ->where('a.id', $group_order_id)
+                        ->field('b.service_time,c.price,c.work_amount,c.settlement_amount')
+                        ->findOrEmpty()
+                        ->toArray(); 
+            try {
+                //查询拼团用户订单
+                $userOrder = GroupUserOrder::alias('a')
+                            ->leftJoin('user b','a.user_id=b.id')
+                            ->where('group_order_id', $group_order_id)
+                            ->where('pay_status', 1)
+                            ->where('refund_status', 0)
+                            ->field('a.*,b.mobile')
+                            ->select()
+                            ->toArray();
+                        
+                if (empty($userOrder)) {
+                    return true;
+                }
+
+                Db::startTrans();
+                foreach ($userOrder as $k => $item) {
+                    if (empty($goods)) {
+                        $goods = UserEquity::alias('a')->leftJoin('goods b','a.goods_id=b.id')
+                            ->where('a.id', $item['user_equity_id'])
+                            ->field('a.number,a.goods_id,b.*')
+                            ->findOrEmpty()
+                            ->toArray();
+                    }
+                    //生成拼团服务工单
+                    $work_data = [
+                        'work_sn' => generate_sn(GroupServiceWork::class, 'work_sn'),
+                        'real_name' => '',
+                        'mobile' => $item['mobile'],
+                        'address' => $item['area'].$item['address'],
+                        'title' => $goods['goods_name']."*".$item['num'],
+                        'category_type' => $goods['category_type'],
+                        'goods_category_ids' => $goods['goods_category_ids'],
+                        'goods_category_id' => $goods['goods_category_id'],
+                        'work_pay_status'=>WorkEnum::IS_PAY_STATUS,
+                        'appointment_time' => $category['service_time'],
+                        'user_id'=>$item['user_id'],
+                        'user_equity_id'=>0,
+                        'third_type'=>1,
+                        'work_total'=>$item['paid_amount'],
+                        'remark' => '拼团用户订单:'.$item['id'],
+                        'user_equity_id' => $item['user_equity_id'],
+                        'group_order_id' => $group_order_id,
+                        'group_user_order_id' => $item['id'],
+                        'work_total' => $category['price'],
+                        'work_amount' => $category['work_amount'],
+                        'settlement_amount' => $category['settlement_amount'],
+                        'work_pay_status' => 2,
+                    ];
+                    
+                    $service_work = GroupServiceWork::create($work_data);
+
+                    //生成订单服务详情
+                    OrderGoods::create([
+                        'sn' => $service_work['work_sn'],
+                        'goods_id' => $goods['goods_id'],
+                        'category_type' => $goods['category_type'],
+                        'goods_category_ids' => $goods['goods_category_ids'],
+                        'goods_category_id' => $goods['goods_category_id'],
+                        'goods_name' => $goods['goods_name'],
+                        'goods_image' => $goods['goods_image'],
+                        'goods_video' => $goods['goods_video'],
+                        'goods_number' => $goods['goods_number'],
+                        'good_unit' => $goods['good_unit'],
+                        'goods_size' => $goods['goods_size'],
+                        'goods_type' => $goods['goods_type'],
+                        'goods_brand' => $goods['goods_brand'],
+                        'install_guide' => $goods['install_guide'],
+                        'goods_payment_type'=>$goods['goods_payment_type'],
+                        'base_service_fee' => $goods['base_service_fee'],
+                        'service_total' => $goods['service_total'],
+                        'service_fee' => $goods['service_fee'],
+                        'service_image' => $goods['service_image'],
+                        'warranty_period'=>$goods['warranty_period'],
+                        'fee_schedule' => $goods['fee_schedule'],
+                        'goods_status' => $goods['goods_status'],
+                    ]);
+                    
+                    //更新用户的权益卡剩余次数
+                    UserEquity::where('id', $item['user_equity_id'])->update(['number' => 0, 'update_time' => time()]);
+
+                    //记录用户的权益卡使用记录
+                    UserEquityLog::create([
+                        'user_id' => $item['user_id'],
+                        'number' => $goods['number'],
+                        'user_equity_id' => $item['user_equity_id'],
+                        'create_time' => time(),
+                    ]);
+                }
+
+                GroupOrderModel::where('id', $group_order_id)->update(['work_status' => 2]);
+                Db::commit();
+            
+                return true;
+            } catch (\Exception $e) {
+                Db::rollback();
+                Log::write("拼团订单批量生成服务工单异常:".$e->getMessage());
+                return false;
+            }
+        }
+        
     }
 
     /**

+ 1 - 1
app/common/model/group_activity/GroupActivity.php

@@ -37,7 +37,7 @@ class GroupActivity extends BaseModel
     public static function getDetail($id) {
         $detail = GroupActivity::alias('a')->leftJoin('group_activity_category b','a.group_category_id=b.id')
                     ->where('a.id',$id)
-                    ->field('a.id,a.title,a.image,a.equity_id,a.origin_price,a.price,a.work_amount,a.group_category_id,b.start_time,b.end_time,b.service_time,b.area,b.participant_num,b.form_time_limit,b.is_simulate_form,b.simulate_num,b.type')
+                    ->field('a.id,a.title,a.image,a.equity_id,a.origin_price,a.price,a.work_amount,a.group_category_id,b.property_head_id,b.start_time,b.end_time,b.service_time,b.area,b.participant_num,b.form_time_limit,b.is_simulate_form,b.simulate_num,b.type')
                     ->findOrEmpty()
                     ->toArray();
         if(!empty($detail)){

+ 1 - 1
app/job/AddServiceWorkJob.php

@@ -37,7 +37,7 @@ class AddServiceWorkJob
                         ->field('a.*,b.mobile')
                         ->select()
                         ->toArray();
-                        
+                      
             if (empty($userOrder)) {
                 return true;
             }