Răsfoiți Sursa

Merge remote-tracking branch 'origin/master'

fang 1 an în urmă
părinte
comite
cb6efb436c

+ 21 - 0
app/adminapi/controller/group_activity/GroupUserOrderController.php

@@ -16,6 +16,8 @@
 namespace app\adminapi\controller\group_activity;
 
 
+use app\adminapi\logic\export\ExportLogic;
+use app\common\service\ExcelExportService;
 use app\adminapi\controller\BaseAdminController;
 use app\adminapi\lists\group_activity\GroupUserOrderLists;
 use app\adminapi\logic\group_activity\GroupUserOrderLogic;
@@ -53,4 +55,23 @@ class GroupUserOrderController extends BaseAdminController
         return $this->fail(GroupUserOrderLogic::getError());
     }
 
+    
+    public function download()
+    {
+        $params = $this->request->post();
+        $filename = "用户拼团订单列表";
+        $result = ExportLogic::add([
+            'download_type' => 11,
+            'params' => $params,
+            'name' => $filename,
+            'admin_id' => $this->adminId,
+        ]);
+        if (false === $result) {
+            return $this->fail(ExportLogic::getError());
+        }
+        
+        (new ExcelExportService)->download($result);
+        return $this->success('添加成功-'.$result, [], 1, 1);
+    }
+
 }

+ 12 - 0
app/adminapi/controller/master_worker/MasterWorkerController.php

@@ -19,6 +19,7 @@ namespace app\adminapi\controller\master_worker;
 use app\adminapi\controller\BaseAdminController;
 use app\adminapi\lists\master_worker\MasterWorkerLists;
 use app\adminapi\lists\master_worker\MoneyAnalysis;
+use app\adminapi\lists\master_worker\MasterWorkerOnlineLists;
 use app\adminapi\logic\master_worker\MasterWorkerLogic;
 use app\adminapi\validate\master_worker\MasterWorkerValidate;
 
@@ -41,6 +42,17 @@ class MasterWorkerController extends BaseAdminController
         return $this->dataLists(new MasterWorkerLists());
     }
 
+    /**
+     * @notes 在线工程师列表
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2024/07/10 18:17
+     */
+    public function onlineLists()
+    {
+        return $this->dataLists(new MasterWorkerOnlineLists());
+    }
+
 
     /**
      * @notes 添加

+ 13 - 1
app/adminapi/lists/group_activity/GroupUserOrderLists.php

@@ -50,7 +50,7 @@ class GroupUserOrderLists extends BaseAdminDataLists implements ListsSearchInter
         if(!empty($this->params['title'])){
             $where[] = ['b.title', 'like', '%'.$this->params['title'].'%'];
         }
-        if (isset($this->params['group_order_status'])) {
+        if (isset($this->params['group_order_status']) && $this->params['group_order_status'] !== '') {
             $where[] = ['c.status', '=', $this->params['group_order_status']];
         }
         return $where;
@@ -74,6 +74,7 @@ class GroupUserOrderLists extends BaseAdminDataLists implements ListsSearchInter
             ->where($this->searchWhere)
             ->where($this->queryWhere())
             ->field(['a.*', 'b.title','b.image','c.sn as group_order_sn','c.status as group_order_status','d.mobile'])
+            ->append(['group_order_status_text','status_text','pay_status_text','pay_way_text','refund_status_text'])
             ->limit($this->limitOffset, $this->limitLength)
             ->order(['a.id' => 'desc'])
             ->select()
@@ -99,4 +100,15 @@ class GroupUserOrderLists extends BaseAdminDataLists implements ListsSearchInter
         ->count();
     }
 
+    public function setExcelComplexFields(): array
+    {
+        $zh_cn_fields = [
+            '订单ID','活动标题', '拼团编号','拼团状态','用户ID','手机号','小区','详细地址','订单状态','应付金额','已付金额','支付方式','支付状态','支付时间','退款状态','下单时间'
+        ];
+        $data_fields = ['id','title','group_order_sn','group_order_status_text','user_id','mobile','area','address','status_text','order_amount','paid_amount','pay_way_text','pay_status_text','pay_time','refund_status_text','create_time'];
+        return [
+            'zh_cn_fields' => $zh_cn_fields,
+            'data_fields' => $data_fields
+        ];
+    }
 }

+ 141 - 0
app/adminapi/lists/master_worker/MasterWorkerOnlineLists.php

@@ -0,0 +1,141 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+namespace app\adminapi\lists\master_worker;
+
+
+use app\adminapi\lists\BaseAdminDataLists;
+use app\common\model\master_worker\MasterWorker;
+use app\common\lists\ListsSearchInterface;
+use app\common\model\works\ServiceWork;
+use think\facade\Db;
+use think\facade\Log;
+
+/**
+ * MasterWorker列表
+ * Class MasterWorkerOnlineLists
+ * @package app\adminapi\listsmaster_worker
+ */
+class MasterWorkerOnlineLists extends BaseAdminDataLists implements ListsSearchInterface
+{
+    public $count = 0;
+    public $lon = 0;
+    public $lat = 0;
+    /**
+     * @notes 设置搜索条件
+     * @return \string[][]
+     * @author likeadmin
+     * @date 2024/07/10 18:17
+     */
+    public function setSearch(): array
+    {
+        // 派单搜索条件 - 工程师接单状态
+        return [
+            '=' => ['mw.real_name', 'mw.mobile','mw.is_disable', 'mw.accept_order_status',  'mw.work_status'],
+            '%like%' => ['sa.service_name'],
+        ];
+    }
+    
+    public function queryWhere(){
+        $where = [];
+        
+        if(isset($this->params['category_ids']) && !empty($this->params['category_ids'])){
+            $sqls = [];
+            $category_ids =[];
+            foreach ($this->params['category_ids'] as $val){
+                ($val = json_decode($val,true))?($category_ids[] = end($val)):($category_ids[] = $val);
+            }
+            foreach ($category_ids as $item) {
+                $sqls[] = "FIND_IN_SET({$item}, category_ids) > 0";
+            }
+            $query_sql = implode(' OR ', $sqls);
+            $period_ids = MasterWorker::where('category_ids','<>', '')->whereRaw($query_sql)->column('id');
+            $where[] = [ 'mw.id','IN',$period_ids?:[0]];
+        }
+        if(isset($this->params['address']) && $this->params['address']){
+            $lon_lat = get_address_lat_lng($this->params['address']);;
+            $this->lon = $lon_lat['lon'];
+            $this->lat = $lon_lat['lat'];
+            
+        }
+        return $where;
+    }
+    /**
+     * @notes 获取列表
+     * @return array
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @author likeadmin
+     * @date 2024/07/10 18:17
+     */
+    public function lists(): array
+    {
+        $fields = ['mw.*,mws.comprehensive_score, mws.weight_score,sa.service_name'];
+        $orders = ['mw.id' => 'desc'];
+        $queryWhere = $this->queryWhere();
+        // 根据位置排序
+        $distanceWhereSql = 'mw.id > 0';
+        if ($this->lat && $this->lon) {
+            $user_distance = 'ROUND(6371 * 1000 * ACOS(COS(RADIANS('.$this->lat.')) * COS(RADIANS(mw.lat)) * COS(RADIANS(mw.lon) - RADIANS('.$this->lon.')) + SIN(RADIANS('.$this->lat.')) * SIN(RADIANS(mw.lat))))';
+            $fields[] = Db::raw($user_distance.' AS user_distance');
+            // 修改排序规则为按照距离正序排序
+            $orders = ['user_distance' => 'asc'];
+            $distanceWhereSql = '('.$user_distance.' ) <= 100000';
+        } 
+        
+        $list = MasterWorker::alias('mw')
+            ->join('master_worker_score mws', 'mws.worker_id = mw.id')
+            ->join('service_area sa', 'sa.id = mw.service_area_id')
+            ->where($this->searchWhere)
+            ->where($queryWhere)
+            ->whereRaw($distanceWhereSql)
+            ->field($fields)
+            ->limit($this->limitOffset, $this->limitLength)
+            ->order($orders)
+            ->select()->toArray();
+        foreach($list as &$item){
+            $item['order_num'] = ServiceWork::where('master_worker_id',$item['id'])
+                                    ->where('work_type','<>',2)
+                                    ->where('service_status','<',4)
+                                    ->whereBetween('appointment_time',[strtotime(date("Y-m-d")),strtotime(date("Y-m-d 23:59:59"))])
+                                    ->count();
+        }
+        return $list;
+    }
+
+
+    /**
+     * @notes 获取数量
+     * @return int
+     * @author likeadmin
+     * @date 2024/07/10 18:17
+     */
+    public function count(): int
+    {
+        $queryWhere = $this->queryWhere();
+        $distanceWhereSql = 'mw.id > 0';
+        if($this->lat && $this->lon){
+            $user_distance = 'ROUND(6371* 1000 * ACOS(COS(RADIANS('.$this->lat.')) * COS(RADIANS(mw.lat)) * COS(RADIANS(mw.lon) - RADIANS('.$this->lon.')) + SIN(RADIANS('.$this->lat.')) * SIN(RADIANS(mw.lat))))';
+            $fields[] = Db::raw($user_distance.' AS user_distance');
+            $distanceWhereSql = '('.$user_distance.' ) <= 100000';
+        }
+        return MasterWorker::alias('mw')
+            ->join('service_area sa', 'sa.id = mw.service_area_id')
+            ->where($this->searchWhere)
+            ->where($queryWhere)
+            ->whereRaw($distanceWhereSql)
+            ->count();
+    }
+}

+ 1 - 1
app/adminapi/lists/works/ServiceWorkLists.php

@@ -70,7 +70,7 @@ class ServiceWorkLists extends BaseAdminDataLists implements ListsSearchInterfac
     public function setSearch(): array
     {
         return [
-            '=' => ['id','category_type', 'base_service_fee', 'service_fee', 'work_status', 'service_status',  'data_type',  'finished_images', 'master_worker_id', 'work_amount','work_type','appoint_approval','refund_approval', 'city','tenant_id','third_type'],
+            '=' => ['id','category_type', 'base_service_fee', 'service_fee', 'work_status', 'service_status',  'data_type',  'finished_images', 'master_worker_id', 'work_amount','work_type','appoint_approval','refund_approval', 'city','tenant_id','third_type','group_order_id'],
             '%like%'=>[ 'work_sn','mobile','real_name', 'title', 'address']
         ];
     }

+ 4 - 1
app/adminapi/logic/group_activity/GroupActivityCategoryLogic.php

@@ -22,6 +22,7 @@ use app\common\logic\BaseLogic;
 use app\common\service\wechat\WeChatMnpService;
 use app\common\model\group_activity\GroupActivity;
 use app\common\model\group_activity\GroupActivityCategory;
+use app\common\model\master_worker\MasterWorker;
 
 /**
  * 拼团活动分类逻辑
@@ -62,6 +63,7 @@ class GroupActivityCategoryLogic extends BaseLogic
                 'start_time' => strtotime($params['start_time']),
                 'end_time' => strtotime($params['end_time']),
                 'service_time' => strtotime($params['service_time']),
+                'master_worker_id' => $params['master_worker_id'],
                 'participant_num' => $params['participant_num'],
                 'type' => $params['type'],
                 'form_time_limit' => $params['form_time_limit'],
@@ -163,6 +165,7 @@ class GroupActivityCategoryLogic extends BaseLogic
                 'start_time' => strtotime($params['start_time']),
                 'end_time' => strtotime($params['end_time']),
                 'service_time' => strtotime($params['service_time']),
+                'master_worker_id' => $params['master_worker_id'],
                 'participant_num' => $params['participant_num'],
                 'type' => $params['type'],
                 'form_time_limit' => $params['form_time_limit'],
@@ -217,7 +220,7 @@ class GroupActivityCategoryLogic extends BaseLogic
         $detail['area'] = explode(",",$detail['area']);
         $detail['images'] = $detail['images'] ? explode(",",$detail['images']) : [];
         $detail['block_data'] = json_decode($detail['block_data'],true);
-
+        $detail['master_worker_name'] = MasterWorker::where('id',$detail['master_worker_id'])->value('real_name');
         foreach($detail['block_data'] as $key => $item) {
             $detail['block_data'][$key]['activity'] = GroupActivity::where(['block_key' => $item['block_key'],'group_category_id' => $detail['id']])
                     ->field('id,id as data_id,title,image,equity_id,block_key,origin_price,price,work_amount')

+ 1 - 0
app/api/controller/notify/WeCallController.php

@@ -19,6 +19,7 @@ class WeCallController extends BaseApiController
     {
         $params = $this->request->param();
         if (!empty($params['dataType']) && $params['dataType'] == 'ROBOT_TASK_STATUS_CHANGE') {
+            \think\facade\Log::write("外呼回调:".json_encode($params));
             // 任务状态变更回调
             $weCallService = new WeCallService();
             $weCallService->notify($params);

+ 25 - 51
app/api/logic/GroupActivityLogic.php

@@ -92,9 +92,10 @@ class GroupActivityLogic extends BaseLogic
             }
             //如果开启了模拟成团,成团后,自动填补剩余人数
             if ($detail['status'] == 1 && $detail['num'] < $detail['activity']['participant_num']) {
-                $num = $detail['activity']['participant_num'] - $detail['num'];
+                $num = $detail['activity']['participant_num'][0] - $detail['num'];
                 $robot = self::getRobot($num,$url);
                 $detail['users'] = array_merge($detail['users'],$robot);
+                $detail['num'] = (int)$detail['activity']['participant_num'][0];
             }
             $detail['timestamp'] = time();
         }
@@ -113,7 +114,7 @@ class GroupActivityLogic extends BaseLogic
                 'id' => 0,
                 'user_id' => 0,
                 'status' => 1,
-                'avatar' => $url.'/uploads/group_activity/robot/0be648e5767f18d6af2dbb630c53ba28'.rand(1,33).'.jpg',
+                'avatar' => 'https://cdnweixiu.kyjlkj.com/resource/image/adminapi/default/default_avatar.png',
                 'nickname' => $nicknames[$i],
             ];
         }
@@ -124,7 +125,7 @@ class GroupActivityLogic extends BaseLogic
      * @notes 用户订单详情
      */
     public static function userOrderDetail($order_id,$userId){
-        $detail = GroupUserOrder::with('groupOrder')->where(['id'=>$order_id, 'user_id' => $userId])->field('id,sn,status,pay_way,pay_time,pay_status,refund_status,remark,create_time,group_order_id,group_activity_id,user_equity_id,area,address')->findOrEmpty()->toArray();
+        $detail = GroupUserOrder::with('groupOrder')->where(['id'=>$order_id, 'user_id' => $userId])->field('id,mobile,sn,status,pay_way,pay_time,pay_status,refund_status,remark,create_time,group_order_id,group_activity_id,user_equity_id,area,address')->findOrEmpty()->toArray();
         if ($detail) {
             $detail['is_refund'] = 0;
             if ($detail['pay_status'] == 1 && $detail['refund_status'] == 0) {
@@ -154,26 +155,27 @@ class GroupActivityLogic extends BaseLogic
             if ($userOrder && $userOrder['pay_status'] == 1) {
                 throw new Exception('您已参加过该活动!');
             }
+
+            $activity = GroupActivity::getDetail($params['group_activity_id']); //活动详情
+            if (!$activity) {
+                throw new Exception('拼团活动不存在!'); //拼团活动不存在
+            }
+            //校验活动时间
+            if (time() < strtotime($activity['start_time'])) {
+                throw new Exception('拼团活动未开始!'); //拼团活动未开始
+            }
+            if (time() > $activity['end_time']) {
+                throw new Exception('拼团活动已结束!'); //拼团活动已结束
+            }
+            $order_amount = $activity['price'][0];
             
-            //校验拼团活动
-            if (empty($params['order_id'])) {
-                //新开团
-                $activity = GroupActivity::getDetail($params['group_activity_id']); //活动详情
-                if (!$activity) {
-                    throw new Exception('拼团活动不存在!'); //拼团活动不存在
-                }
-                //校验活动时间
-                if (time() < strtotime($activity['start_time'])) {
-                    throw new Exception('拼团活动未开始!'); //拼团活动未开始
-                }
-                if (time() > $activity['end_time']) {
-                    throw new Exception('拼团活动已结束!'); //拼团活动已结束
-                }
-                    
-                $order_amount = $activity['price'][0];
+            //加入已开的拼团单
+            $groupOrder = GroupOrder::where(['group_activity_id' => $params['group_activity_id'], 'status' => 0])->where('num','<',100)->findOrEmpty()->toArray();
+            if (empty($groupOrder)) {
                 //生成拼团单
                 $data = [
                     'sn' => generate_sn(GroupOrder::class, 'sn'),
+                    'group_category_id' => $activity['group_category_id'],
                     'group_activity_id' => $params['group_activity_id'],
                     'equity_id' => $activity['equity_id'],
                     'goods_id' => EquityConfig::where('id', $activity['equity_id'])->value('goods_id'),
@@ -181,42 +183,15 @@ class GroupActivityLogic extends BaseLogic
                     'origin_price' => $activity['origin_price'],
                     'price' => $order_amount,
                     'create_time' => time(),
-                    'end_time'   => time() + $activity['form_time_limit'] * 60 * 60,
+                    'end_time'   => $activity['end_time'] //time() + $activity['form_time_limit'] * 60 * 60,
                 ];
-
-                //如果已有数据,直接覆盖
-                $groupOrder = GroupOrder::where(['group_activity_id' => $params['group_activity_id'],'user_id' => $params['user_id']])->findOrEmpty()->toArray();
-                if (!$groupOrder) {
-                    $groupOrder = GroupOrder::create($data);
-                } else {
-                    GroupOrder::where('id',$groupOrder['id'])->update($data); 
-                    $data['id'] = $groupOrder['id'];
-                    $groupOrder = $data;
-                }
-            } else {
-                //加入已开的拼团单
-                $groupOrder = GroupOrder::where(['group_activity_id' => $params['group_activity_id'], 'id' => $params['order_id']])->findOrEmpty()->toArray();
-                if (empty($groupOrder)) {
-                    throw new Exception('拼团订单不存在!'); //拼团活动不存在
-                }
-                if ($groupOrder['num'] >= 100) {
-                    throw new Exception('拼团人数已满!'); //拼团人数已满
-                }
-                if ($groupOrder['status'] == 1 ) {
-                    throw new Exception('活动已成团');
-                }
-                if ($groupOrder['status'] >= 1 ) {
-                    throw new Exception('拼团已取消!');
-                }
-                if ($groupOrder['end_time'] < time()) {
-                    throw new Exception('拼团活动已结束!'); //拼团活动已结束
-                }
-                $order_amount = $groupOrder['price'];
+                $groupOrder = GroupOrder::create($data);
             }
 
             //生成用户拼单订单
             $data = [
                 'sn' => generate_sn(groupUserOrder::class, 'sn'),
+                'mobile' => $params['mobile'],
                 'group_order_id' => $groupOrder['id'],
                 'group_activity_id' => $params['group_activity_id'],
                 'user_id' => $params['user_id'],
@@ -395,8 +370,7 @@ class GroupActivityLogic extends BaseLogic
             $response = (new WeChatMnpService())->getUnlimitedQRCode(
                 'page='.$scene_page.'&id='.$params['id'].'&oid='.$params['order_id']."&cid=".$params['category_id'],
                 $mnp_page,
-                'trial',
-                //env('miniprogram.mini_env_version', 'release'),
+                env('miniprogram.mini_env_version', 'release'),
                 false
             );
             $qrcode = $response->getContent();

+ 3 - 1
app/api/validate/GroupOrderValidate.php

@@ -19,6 +19,7 @@ class GroupOrderValidate extends BaseValidate
         'area' => 'require',
         'address' =>'require',
         'category_id' => 'require',
+        'mobile' => 'require',
     ];
 
 
@@ -30,12 +31,13 @@ class GroupOrderValidate extends BaseValidate
         'area' => '小区',
         'address' => '详细地址',
         'category_id' => '分类ID',
+        'mobile' => '手机号',
     ];
 
 
     public function sceneAdd()
     {
-        return $this->only(['pay_way','group_activity_id','remark','area','address']);
+        return $this->only(['pay_way','group_activity_id','remark','area','address','mobile']);
     }
 
     public function sceneDetail()

+ 29 - 0
app/common.php

@@ -7,6 +7,35 @@ use app\common\service\FileService;
 use think\helper\Str;
 
 
+/**
+ * 根据地址获取经纬度
+ */
+function get_address_lat_lng($address) {
+    // 高德地图 API 密钥,需替换为你自己的密钥
+    $apiKey = 'eff1cbbaf5dd3c1cdcad2c1ed97b85e5';
+
+    // 构建 API 请求 URL
+    $apiUrl = 'https://restapi.amap.com/v3/geocode/geo?';
+    $params = [
+        'address' => $address,
+        'key' => $apiKey
+    ];
+    $requestUrl = $apiUrl . http_build_query($params);
+    $data = http_request($requestUrl, [], []);
+    // 检查 API 调用是否成功
+    if ($data['status'] === '1' && $data['count'] > 0) {
+        // 获取经纬度
+        $location = $data['geocodes'][0]['location'];
+        list($lon, $lat) = explode(',', $location);
+        return [
+            'lon' => $lon,
+            'lat' => $lat
+        ];
+    } else {
+        return [];
+    }
+}
+
 /**
  * 计算两点之间的距离
  */

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

@@ -40,7 +40,7 @@ class GroupOrder extends Command
         $last_id = 0;
         while($last_id >= 0) {
             $list = GroupOrderModel::alias('a')
-                        ->leftJoin('group_activity b','a.group_activity_id=b.id')
+                        ->leftJoin('group_activity_category b','a.group_category_id=b.id')
                         ->where('a.status',0)
                         ->where('a.end_time','<',time())
                         ->where('a.id','>',$last_id)

+ 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,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.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)){

+ 27 - 0
app/common/model/group_activity/GroupUserOrder.php

@@ -16,6 +16,7 @@ namespace app\common\model\group_activity;
 
 
 use app\common\model\BaseModel;
+use app\adminapi\logic\ConfigLogic;
 use think\model\concern\SoftDelete;
 
 
@@ -42,4 +43,30 @@ class GroupUserOrder extends BaseModel
     {
         return !empty($data['pay_time'])?date('Y-m-d H:i:s',$data['pay_time']):'';
     }
+
+    public function getGroupOrderStatusTextAttr($value,$data)
+    {
+        $dictType = array_column(ConfigLogic::getDictByType('group_order_status')['group_order_status'],'name','value');
+        return $dictType[$data['group_order_status']];
+    }
+    public function getStatusTextAttr($value,$data)
+    {
+        $dictType = array_column(ConfigLogic::getDictByType('group_user_order_status')['group_user_order_status'],'name','value');
+        return $dictType[$data['status']];
+    }
+    public function getPayStatusTextAttr($value,$data)
+    {
+        $dictType = array_column(ConfigLogic::getDictByType('pay_status')['pay_status'],'name','value');
+        return $dictType[$data['pay_status']];
+    }
+    public function getRefundStatusTextAttr($value,$data)
+    {
+        $dictType = array_column(ConfigLogic::getDictByType('refund_status')['refund_status'],'name','value');
+        return $dictType[$data['refund_status']];
+    }
+    public function getPayWayTextAttr($value,$data)
+    {
+        $dictType = array_column(ConfigLogic::getDictByType('pay_way')['pay_way'],'name','value');
+        return $dictType[$data['pay_way']];
+    }
 }

+ 1 - 0
app/common/service/ExcelExportService.php

@@ -25,6 +25,7 @@ use app\common\model\financial\FinancialPaymentRecords;
 use app\common\model\goods_category\GoodsCategory;
 use app\common\model\user\User;
 use app\common\model\works\ServiceWorkAllocateWorkerLog;
+use app\common\model\group_activity\GroupUserOrder;
 use app\common\service\storage\Driver as StorageDriver;
 use excel\ExcelWriter;
 use Exception;

+ 40 - 4
app/job/AddServiceWorkJob.php

@@ -7,6 +7,7 @@ use think\facade\Log;
 use app\common\enum\WorkEnum;
 use app\common\model\equity\UserEquity;
 use app\common\model\works\ServiceWork;
+use app\common\model\recharge\OrderGoods;
 use app\common\model\equity\UserEquityLog;
 use app\common\model\orders\RechargeOrder;
 use app\common\model\group_activity\GroupOrder;
@@ -19,9 +20,16 @@ class AddServiceWorkJob
         
         $group_order_id = $data['id'];//拼团订单ID
         $goods = [];
+        $category = GroupOrder::alias('a')
+                    ->leftJoin('group_activity_category b','a.group_category_id=b.id')
+                    ->where('a.id', $group_order_id)
+                    ->field('b.service_time,b.master_worker_id')
+                    ->findOrEmpty()
+                    ->toArray();
         try {
             //查询拼团用户订单
-            $userOrder = GroupUserOrder::alias('a')->leftJoin('user b','a.user_id=b.id')
+            $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)
@@ -38,7 +46,7 @@ class AddServiceWorkJob
                 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,b.goods_name,b.category_type,b.goods_category_ids,b.goods_category_id,b.base_service_fee')
+                        ->field('a.number,a.goods_id,b.*')
                         ->findOrEmpty()
                         ->toArray();
                 }
@@ -58,7 +66,8 @@ class AddServiceWorkJob
                     'base_service_fee' => $goods['base_service_fee'],
                     'service_fee' => $item['paid_amount'],
                     'work_pay_status'=>WorkEnum::IS_PAY_STATUS,
-                    'appointment_time' => time(),
+                    'master_worker_id' => $category['master_worker_id'],
+                    'appointment_time' => $category['service_time'],
                     'dispatch_time' => time(),
                     'receive_time' => time(),
                     'user_id'=>$item['user_id'],
@@ -71,7 +80,6 @@ class AddServiceWorkJob
                     'work_status' => 5,
                     'user_confirm_status' => 3,
                     'service_status' => 1,
-                    'master_worker_id' => 7,
                     'remark' => '拼团单:'.$item['id'],
                     'user_equity_id' => $item['user_equity_id'],
                     'group_order_id' => $item['id'],
@@ -88,10 +96,38 @@ class AddServiceWorkJob
                     'user_id' => $item['user_id'],
                     'pay_status' => $item['pay_status'],
                     'pay_way' => $item['pay_way'],
+                    'pay_time' => time(),
                     'order_total' => 0,
                     'order_amount' => 0,
                 ];
                 $order = RechargeOrder::create($data);
+
+                //生成订单服务详情
+                OrderGoods::create([
+                    'sn' => $order['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()]);
 

+ 1 - 0
config/export.php

@@ -18,5 +18,6 @@ return [
         '8' =>  'property.PropertyHeadLists',
         '9' =>  'sale.SalePerformanceLists',
         '10' =>  'works.ServiceWorkLists',
+        '11' =>  'group_activity.GroupUserOrderLists',
     ],
 ];