cqp 2 месяцев назад
Родитель
Сommit
ac6c6b1632

+ 0 - 76
app/Http/Controllers/Api/DimensionController.php

@@ -1,76 +0,0 @@
-<?php
-
-namespace App\Http\Controllers\Api;
-
-use App\Service\DimensionService;
-use Illuminate\Http\Request;
-
-class DimensionController extends BaseController
-{
-    public function dimensionEdit(Request $request)
-    {
-        $service = new DimensionService();
-        $user = $request->userData;
-        list($status,$data) = $service->dimensionEdit($request->all(),$user);
-
-        if($status){
-            return $this->json_return(200,'',$data);
-        }else{
-            return $this->json_return(201,$data);
-        }
-    }
-
-    public function dimensionAdd(Request $request)
-    {
-        $service = new DimensionService();
-        $user = $request->userData;
-        list($status,$data) = $service->dimensionAdd($request->all(),$user);
-
-        if($status){
-            return $this->json_return(200,'',$data);
-        }else{
-            return $this->json_return(201,$data);
-        }
-
-    }
-
-    public function dimensionDel(Request $request)
-    {
-        $service = new DimensionService();
-        $user = $request->userData;
-        list($status,$data) = $service->dimensionDel($request->all());
-
-        if($status){
-            return $this->json_return(200,'',$data);
-        }else{
-            return $this->json_return(201,$data);
-        }
-
-    }
-
-    public function dimensionList(Request $request)
-    {
-        $service = new DimensionService();
-        $user = $request->userData;
-        list($status,$data) = $service->dimensionList($request->all(),$user);
-
-        if($status){
-            return $this->json_return(200,'',$data);
-        }else{
-            return $this->json_return(201,$data);
-        }
-    }
-
-    public function dimensionDetail(Request $request)
-    {
-        $service = new DimensionService();
-        $user = $request->userData;
-        list($status,$data) = $service->dimensionDetail($request->all(),$user);
-
-        if($status){
-            return $this->json_return(200,'',$data);
-        }else{
-            return $this->json_return(201,$data);
-        }
-    }
-}

+ 31 - 31
app/Http/Controllers/Api/OrderController.php → app/Http/Controllers/Api/RDController.php

@@ -2,16 +2,16 @@
 
 namespace App\Http\Controllers\Api;
 
-use App\Service\OrderService;
+use App\Service\RDService;
 use Illuminate\Http\Request;
 
-class OrderController extends BaseController
+class RDController extends BaseController
 {
-    public function orderEdit(Request $request)
+    public function rdEdit(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
-        list($status,$data) = $service->orderEdit($request->all(),$user);
+        list($status,$data) = $service->rdEdit($request->all(),$user);
 
         if($status){
             return $this->json_return(200,'',$data);
@@ -20,11 +20,11 @@ class OrderController extends BaseController
         }
     }
 
-    public function orderAdd(Request $request)
+    public function rdAdd(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
-        list($status,$data) = $service->orderAdd($request->all(),$user);
+        list($status,$data) = $service->rdAdd($request->all(),$user);
 
         if($status){
             return $this->json_return(200,'',$data);
@@ -34,11 +34,11 @@ class OrderController extends BaseController
 
     }
 
-    public function orderDel(Request $request)
+    public function rdDel(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
-        list($status,$data) = $service->orderDel($request->all());
+        list($status,$data) = $service->rdDel($request->all());
 
         if($status){
             return $this->json_return(200,'',$data);
@@ -48,11 +48,11 @@ class OrderController extends BaseController
 
     }
 
-    public function orderList(Request $request)
+    public function rdList(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
-        list($status,$data) = $service->orderList($request->all(),$user);
+        list($status,$data) = $service->rdList($request->all(),$user);
 
         if($status){
             return $this->json_return(200,'',$data);
@@ -61,11 +61,11 @@ class OrderController extends BaseController
         }
     }
 
-    public function orderDetail(Request $request)
+    public function rdDetail(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
-        list($status,$data) = $service->orderDetail($request->all(),$user);
+        list($status,$data) = $service->rdDetail($request->all(),$user);
 
         if($status){
             return $this->json_return(200,'',$data);
@@ -76,7 +76,7 @@ class OrderController extends BaseController
 
     public function reminderEdit(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
         list($status,$data) = $service->reminderEdit($request->all(),$user);
 
@@ -89,7 +89,7 @@ class OrderController extends BaseController
 
     public function reminderAdd(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
         list($status,$data) = $service->reminderAdd($request->all(),$user);
 
@@ -103,7 +103,7 @@ class OrderController extends BaseController
 
     public function reminderDel(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
         list($status,$data) = $service->reminderDel($request->all());
 
@@ -117,7 +117,7 @@ class OrderController extends BaseController
 
     public function reminderList(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
         list($status,$data) = $service->reminderList($request->all(),$user);
 
@@ -130,7 +130,7 @@ class OrderController extends BaseController
 
     public function reminderDetail(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
         list($status,$data) = $service->reminderDetail($request->all(),$user);
 
@@ -143,7 +143,7 @@ class OrderController extends BaseController
 
     public function reminderSendWx(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
         list($status,$data) = $service->reminderSendWx($request->all(),$user);
 
@@ -156,7 +156,7 @@ class OrderController extends BaseController
 
     public function toDoFinished(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
         list($status,$data) = $service->toDoFinished($request->all(),$user);
 
@@ -169,7 +169,7 @@ class OrderController extends BaseController
 
     public function toDoEdit(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
         list($status,$data) = $service->toDoEdit($request->all(),$user);
 
@@ -182,7 +182,7 @@ class OrderController extends BaseController
 
     public function toDoAdd(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
         list($status,$data) = $service->toDoAdd($request->all(),$user);
 
@@ -196,7 +196,7 @@ class OrderController extends BaseController
 
     public function toDoDel(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
         list($status,$data) = $service->toDoDel($request->all());
 
@@ -210,7 +210,7 @@ class OrderController extends BaseController
 
     public function toDoList(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
         list($status,$data) = $service->toDoList($request->all(),$user);
 
@@ -223,7 +223,7 @@ class OrderController extends BaseController
 
     public function toDoDetail(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
         list($status,$data) = $service->toDoDetail($request->all(),$user);
 
@@ -236,7 +236,7 @@ class OrderController extends BaseController
 
     public function reminderDetail2(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
         list($status,$data) = $service->reminderDetail2($request->all(),$user);
 
@@ -249,7 +249,7 @@ class OrderController extends BaseController
 
     public function reminderSave(Request $request)
     {
-        $service = new OrderService();
+        $service = new RDService();
         $user = $request->userData;
         list($status,$data) = $service->reminderSave($request->all(),$user);
 

+ 2 - 2
app/Model/ItemDetails.php

@@ -13,7 +13,7 @@ class ItemDetails extends UseScopeBaseModel
     const type_one = 1;
     const type_two = 2;
     public static $type_name = [
-        self::type_one => '负责人',
-        self::type_two => '设备',
+        self::type_one => '研发人',
+        self::type_two => '研发设备',
     ];
 }

+ 0 - 16
app/Model/Order.php

@@ -1,16 +0,0 @@
-<?php
-
-namespace App\Model;
-
-class Order extends UseScopeBaseModel
-{
-    protected $guarded = [];
-    protected $table = "order"; //指定表
-    const CREATED_AT = 'crt_time';
-    const UPDATED_AT = 'upd_time';
-    const employee_column = "crt_id";
-
-    public static $field = ['order_number','id','customer_id','supply_id','crt_time','order_time','crt_id','quantity'];
-
-    protected $dateFormat = 'U';
-}

+ 0 - 14
app/Model/OrderDetails.php

@@ -1,14 +0,0 @@
-<?php
-
-namespace App\Model;
-
-use Illuminate\Database\Eloquent\Model;
-
-class OrderDetails extends Model
-{
-    protected $guarded = [];
-    protected $table = "order_details"; //指定表
-    const CREATED_AT = 'crt_time';
-    const UPDATED_AT = 'upd_time';
-    protected $dateFormat = 'U';
-}

+ 16 - 0
app/Model/RD.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace App\Model;
+
+class RD extends UseScopeBaseModel
+{
+    protected $guarded = [];
+    protected $table = "rd"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    const employee_column = "crt_id";
+
+    public static $field = ['order_number','id','item_id','start_time_hour','crt_time','order_time','crt_id','start_time_min','end_time_hour','end_time_min','total_hours'];
+
+    protected $dateFormat = 'U';
+}

+ 21 - 0
app/Model/RdDetails.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+class RdDetails extends Model
+{
+    protected $guarded = [];
+    protected $table = "rd_details"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+    const type_one = 1;
+    const type_two = 2;
+    public static $type_name = [
+        self::type_one => '研发人',
+        self::type_two => '研发设备',
+    ];
+}

+ 0 - 161
app/Service/DimensionService.php

@@ -1,161 +0,0 @@
-<?php
-
-namespace App\Service;
-
-use App\Model\Dimension;
-use App\Model\Employee;
-use Illuminate\Support\Facades\DB;
-
-class DimensionService extends Service
-{
-    public function dimensionEdit($data,$user){
-        list($status,$msg) = $this->dimensionRule($data, $user, false);
-        if(!$status) return [$status,$msg];
-
-        try {
-            DB::beginTransaction();
-
-            $model = Dimension::where('id',$data['id'])->first();
-            $model->title = $data['title'] ?? '';
-            $model->code = $data['code'] ?? '';
-//            $model->type = $data['type'] ?? 0;
-            $model->is_use = $data['is_use'] ?? 0;
-            $model->score = $data['score'] ?? 0;
-            $model->save();
-
-            DB::commit();
-        }catch (\Exception $exception){
-            DB::rollBack();
-            return [false,$exception->getMessage()];
-        }
-
-        return [true, ''];
-    }
-
-    public function dimensionAdd($data,$user){
-        list($status,$msg) = $this->dimensionRule($data, $user);
-        if(!$status) return [$status,$msg];
-
-        try {
-            DB::beginTransaction();
-
-            $model = new Dimension();
-            $model->title = $data['title'] ?? '';
-            $model->code = $data['code'] ?? '';
-            $model->type = $data['type'] ?? 0;
-            $model->is_use = $data['is_use'] ?? 0;
-            $model->score = $data['score'] ?? 0;
-            $model->crt_id = $user['id'];
-            $model->save();
-
-            DB::commit();
-        }catch (\Exception $exception){
-            DB::rollBack();
-            return [false,$exception->getMessage()];
-        }
-
-        return [true, ''];
-    }
-
-    public function dimensionDel($data){
-        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
-
-        try {
-            DB::beginTransaction();
-            $time = time();
-
-            Dimension::where('del_time',0)
-                ->whereIn('id',$data['id'])
-                ->update(['del_time' => $time]);
-
-            DB::commit();
-        }catch (\Exception $exception){
-            DB::rollBack();
-            return [false,$exception->getMessage()];
-        }
-
-        return [true, ''];
-    }
-
-    public function dimensionDetail($data,$user){
-        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
-        $customer = Dimension::where('del_time',0)
-            ->where('id',$data['id'])
-            ->first();
-        if(empty($customer)) return [false,'维度选项不存在或已被删除'];
-        $customer = $customer->toArray();
-
-        $customer['crt_name'] = Employee::where('id',$customer['crt_id'])->value('emp_name');
-        $customer['crt_time'] = $customer['crt_time'] ? date("Y-m-d H:i:s",$customer['crt_time']): '';
-
-        return [true, $customer];
-    }
-
-    public function dimensionCommon($data,$user, $field = []){
-        if(empty($field)) $field = Dimension::$field;
-
-        $model = Dimension::where('del_time',0)
-            ->select($field)
-            ->orderby('id', 'desc');
-
-        if(! empty($data['code'])) $model->where('code', 'LIKE', '%'.$data['code'].'%');
-        if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
-        if(! empty($data['type'])) $model->where('type', $data['type']);
-        if(! empty($data['id'])) $model->whereIn('id', $data['id']);
-        if(isset($data['is_use'])) $model->where('is_use', $data['is_use']);
-        if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
-            $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
-            $model->where('crt_time','>=',$return[0]);
-            $model->where('crt_time','<=',$return[1]);
-        }
-
-        return $model;
-    }
-
-    public function dimensionList($data,$user){
-        $model = $this->dimensionCommon($data, $user);
-        $list = $this->limit($model,'',$data);
-        $list = $this->fillData($list,$user);
-
-        return [true, $list];
-    }
-
-    public function dimensionRule(&$data, $user, $is_add = true){
-        if(empty($data['title'])) return [false, '维度选项不能为空'];
-        if(empty($data['code'])) return [false, '维度编码不能为空'];
-        if(empty($data['type'])) return [false, '类型不能为空'];
-        if(! isset(Dimension::$type_name[$data['type']])) return [false, '类型不能不存在'];
-        if(! isset($data['score'])) return [false, '分数不存在'];
-        $res = $this->checkNumber($data['score']);
-        if(! $res['valid']) return [false,'分数:' . $res['error']];
-
-        if($is_add){
-            $bool = Dimension::where('code',$data['code'])
-                ->where('del_time',0)
-                ->exists();
-        }else{
-            if(empty($data['id'])) return [false,'ID不能为空'];
-            $bool = Dimension::where('code',$data['code'])
-                ->where('id','<>',$data['id'])
-                ->where('del_time',0)
-                ->exists();
-        }
-        if($bool) return [false,'维度编码已存在'];
-
-        return [true, $data];
-    }
-
-    public function fillData($data, $user){
-        if(empty($data['data'])) return $data;
-
-        $emp = (new EmployeeService())->getEmployeeMap(array_unique(array_column($data['data'],'crt_id')));
-        foreach ($data['data'] as $key => $value){
-            $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
-            $data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? '';
-            $data['data'][$key]['is_use_title'] = Dimension::$is_use_name[$value['is_use']] ?? '';
-            $data['data'][$key]['type_title'] = Dimension::$type_name[$value['type']] ?? '';
-        }
-
-        return $data;
-    }
-}

+ 8 - 8
app/Service/ImportService.php

@@ -6,8 +6,8 @@ use App\Exports\TableHeadExport;
 use App\Import\ImportAll;
 use App\Model\CustomerSupply;
 use App\Model\Employee;
-use App\Model\Order;
-use App\Model\OrderDetails;
+use App\Model\RD;
+use App\Model\RdDetails;
 use App\Model\Item;
 use App\Model\GiveOut;
 use App\Model\Product;
@@ -170,19 +170,19 @@ class ImportService extends Service
         try{
             //新增
             if(! empty($insert)){
-                Order::insert($insert);
+                RD::insert($insert);
             }
 
             //编辑
             if(! empty($update)){
                 foreach ($update as $p_id => $value){
-                    Order::where('id',$p_id)
+                    RD::where('id',$p_id)
                         ->update($value);
                 }
             }
 
             if(! empty($detail)){
-                $maps = Order::where('del_time',0)
+                $maps = RD::where('del_time',0)
                     ->whereIn('order_number',$order_number)
                     ->pluck('id','order_number')
                     ->toArray();
@@ -190,11 +190,11 @@ class ImportService extends Service
                     $detail[$key]['order_id'] = $maps[$value['order_number']] ?? 0;
                     unset($detail[$key]['order_number']);
                 }
-                OrderDetails::where('del_time',0)
+                RdDetails::where('del_time',0)
                     ->where('order_id',array_values($maps))
                     ->update(['del_time' => $time]);
 
-                OrderDetails::insert($detail);
+                RdDetails::insert($detail);
             }
 
             DB::commit();
@@ -238,7 +238,7 @@ class ImportService extends Service
 
     private function getOrder($array, $user){
         $order = array_unique(array_filter(array_column($array,0)));
-        $records = Order::where('del_time', 0)
+        $records = RD::where('del_time', 0)
             ->where('crt_id', $user['id'])
             ->whereIn('order_number', $order)
             ->pluck('id','order_number')

+ 19 - 4
app/Service/ItemService.php

@@ -114,22 +114,28 @@ class ItemService extends Service
                 $id2[] = $value['data_id'];
             }
         }
-        $map = Employee::whereIn('id', $id)->pluck('emp_name','id')->toArray();
-        $map2 = Device::whereIn('id', $id)->pluck('title','id')->toArray();
+        $map = Employee::whereIn('id', $id)->select('emp_name','id','number')->get()->toArray();
+        $map = array_column($map,null,'id');
+        $map2 = Device::whereIn('id', $id)->select('code','id','title')->get()->toArray();
+        $map2 = array_column($map2,null,'id');
 
         $unit = $receipt = [];
         foreach ($data as $value){
             if($value['type'] == ItemDetails::type_one) {
+                $tmp = $map[$value['data_id']] ?? [];
                 $unit[] = [
                     'type' => $value['type'],
                     'data_id' => $value['data_id'],
-                    'data_title' => $map[$value['data_id']] ?? "",
+                    'data_title' => $tmp['emp_name'],
+                    'data_code' => $tmp['number'],
                 ];
             }else{
+                $tmp = $map2[$value['data_id']] ?? [];
                 $receipt[] = [
                     'type' => $value['type'],
                     'data_id' => $value['data_id'],
-                    'data_title' => $map2[$value['data_id']] ?? "",
+                    'data_title' => $tmp['title'] ?? "",
+                    'data_code' => $tmp['code'] ?? "",
                 ];
             }
         }
@@ -148,6 +154,15 @@ class ItemService extends Service
         return $detail;
     }
 
+    public function getItemMap($ids){
+        if(empty($ids)) return [];
+        if(! is_array($ids)) $ids = [$ids];
+
+        return Item::whereIn('id', $ids)
+            ->pluck('title', 'id')
+            ->toArray();
+    }
+
     public function itemDel($data){
         if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
 

+ 0 - 1085
app/Service/OrderService.php

@@ -1,1085 +0,0 @@
-<?php
-
-namespace App\Service;
-
-use App\Model\CustomerSupply;
-use App\Model\Employee;
-use App\Model\Order;
-use App\Model\OrderDetails;
-use App\Model\Device;
-use App\Model\ReminderDetails;
-use App\Model\ReminderRecord;
-use App\Model\ReminderRecordDetails;
-use App\Model\TodoList;
-use App\Model\WxEmployeeOfficial;
-use App\Service\Weixin\WxTemplateMessageService;
-use Illuminate\Support\Facades\DB;
-use Illuminate\Support\Facades\Log;
-
-class OrderService extends Service
-{
-    public function orderEdit($data,$user){
-        list($status,$msg) = $this->orderRule($data, $user, false);
-        if(!$status) return [$status,$msg];
-
-        try {
-            DB::beginTransaction();
-
-            $model = Order::where('id',$data['id'])->first();
-            $model->order_number = $data['order_number'] ?? '';
-            $model->customer_id = $data['customer_id'] ?? 0;
-            $model->supply_id = $data['supply_id'] ?? 0;
-            $model->order_time = $data['order_time'] ?? 0;
-            $model->quantity = $data['quantity'] ?? 0;
-            $model->save();
-
-            $time = time();
-            OrderDetails::where('del_time',0)
-                ->where('order_id', $model->id)
-                ->update(['del_time' => $time]);
-            $this->saveDetail($model->id, $time, $data);
-
-            DB::commit();
-        }catch (\Exception $exception){
-            DB::rollBack();
-            return [false,$exception->getMessage()];
-        }
-
-        return [true, ''];
-    }
-
-    public function orderAdd($data,$user){
-        list($status,$msg) = $this->orderRule($data, $user);
-        if(!$status) return [$status,$msg];
-
-        try {
-            DB::beginTransaction();
-
-            $model = new Order();
-            $model->order_number = $data['order_number'] ?? '';
-            $model->customer_id = $data['customer_id'] ?? 0;
-            $model->supply_id = $data['supply_id'] ?? 0;
-            $model->order_time = $data['order_time'] ?? 0;
-            $model->quantity = $data['quantity'] ?? 0;
-            $model->crt_id = $user['id'];
-            $model->save();
-            
-            $this->saveDetail($model->id, time(), $data);
-
-            DB::commit();
-        }catch (\Exception $exception){
-            DB::rollBack();
-            return [false,$exception->getMessage()];
-        }
-
-        return [true, ''];
-    }
-
-    private function saveDetail($id, $time, $data){
-        if(! empty($data['details'])){
-            $unit = [];
-            foreach ($data['details'] as $value){
-                $unit[] = [
-                    'order_id' => $id,
-                    'code' => $value['code'],
-                    'title' => $value['title'],
-                    'size' => $value['size'] ?? "",
-                    'unit' => $value['unit'] ?? "",
-                    'quantity' => $value['quantity'],
-                    'crt_time' => $time,
-                ];
-            }
-            if(! empty($unit)) OrderDetails::insert($unit);
-        }
-    }
-
-    private function getDetail($id){
-        $data = OrderDetails::where('del_time',0)
-            ->where('order_id', $id)
-            ->get()->toArray();
-
-        $unit = [];
-        foreach ($data as $value){
-            $unit[] = [
-                'code' => $value['code'],
-                'title' => $value['title'],
-                'size' => $value['size'],
-                'unit' => $value['unit'],
-                'quantity' => $value['quantity'],
-            ];
-        }
-
-        $detail = [
-            'details' => $unit,
-        ];
-
-        foreach ($detail as $key => $value) {
-            if (empty($value)) {
-                $detail[$key] = (object)[]; // 转成 stdClass 对象
-            }
-        }
-
-        return $detail;
-    }
-
-    public function orderDel($data){
-        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
-
-        try {
-            DB::beginTransaction();
-            $time = time();
-
-            Order::where('del_time',0)
-                ->whereIn('id',$data['id'])
-                ->update(['del_time' => $time]);
-
-            OrderDetails::where('del_time',0)
-                ->where('order_id', $data['id'])
-                ->update(['del_time' => $time]);
-
-            DB::commit();
-        }catch (\Exception $exception){
-            DB::rollBack();
-            return [false,$exception->getMessage()];
-        }
-
-        return [true, ''];
-    }
-
-    public function orderDetail($data, $user){
-        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
-        $customer = Order::where('del_time',0)
-            ->where('id',$data['id'])
-            ->first();
-        if(empty($customer)) return [false,'订单不存在或已被删除'];
-        $customer = $customer->toArray();
-        $customer['crt_name'] = Employee::where('id',$customer['crt_id'])->value('emp_name');
-        $customer['crt_time'] = $customer['crt_time'] ? date("Y-m-d H:i:s",$customer['crt_time']): '';
-        $customer['customer_title'] = $customer['customer_id'] ? CustomerSupply::where('id',$customer['customer_id'])->value('title') : "";
-        $customer['supply_title'] = $customer['supply_id'] ? CustomerSupply::where('id',$customer['supply_id'])->value('title') : "";
-
-        $details = $this->getDetail($data['id']);
-        $customer = array_merge($customer, $details);
-
-        return [true, $customer];
-    }
-
-    public function orderCommon($data,$user, $field = []){
-        if(empty($field)) $field = Order::$field;
-
-        $model = Order::Clear($user,$data);
-        $model = $model->where('del_time',0)
-            ->select($field)
-            ->orderby('id', 'desc');
-
-        if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
-        if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
-        if(! empty($data['id'])) $model->whereIn('id', $data['id']);
-        if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
-            $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
-            $model->where('crt_time','>=',$return[0]);
-            $model->where('crt_time','<=',$return[1]);
-        }
-        if(! empty($data['order_time'][0]) && ! empty($data['order_time'][1])) {
-            $return = $this->changeDateToTimeStampAboutRange($data['order_time']);
-            $model->where('order_time','>=',$return[0]);
-            $model->where('order_time','<=',$return[1]);
-        }
-
-        return $model;
-    }
-
-    public function orderList($data,$user){
-        $model = $this->orderCommon($data, $user);
-        $list = $this->limit($model,'',$data);
-        $list = $this->fillData($list,$user,$data);
-
-        $list['count'] = $this->countTotal($list['data'], $user['header_default']);
-
-        return [true, $list];
-    }
-
-    public function orderRule(&$data, $user, $is_add = true){
-        if(empty($data['order_number'])) return [false, '订单号不能为空'];
-        if(empty($data['order_time'])) return [false, '订单日期不能为空'];
-        $data['order_time'] = $this->changeDateToDate($data['order_time']);
-        if(empty($data['details'])) return [false, '物料不能为空'];
-        $total = 0;
-        foreach ($data['details'] as $value){
-            if(empty($value['code'])) return [false, '物料编码不能为空'];
-            if(empty($value['title'])) return [false, '物料名称不能为空'];
-            $res = $this->checkNumber($value['quantity'],2,'positive');
-            if(! $res['valid']) return [false,'物料数量:' . $res['error']];
-            $total = bcadd($total, $value['quantity'],2);
-        }
-        $data['quantity'] = $total;
-        list($status, $msg) = $this->checkArrayRepeat($data['details'],'code','物料编码');
-        if(! $status) return [false, $msg];
-
-        if($is_add){
-            $bool = Order::where('order_number',$data['order_number'])
-                ->where('crt_id', $user['id'])
-                ->where('del_time',0)
-                ->exists();
-        }else{
-            if(empty($data['id'])) return [false,'ID不能为空'];
-            $bool = Order::where('order_number',$data['order_number'])
-                ->where('crt_id', $user['id'])
-                ->where('id','<>',$data['id'])
-                ->where('del_time',0)
-                ->exists();
-        }
-        if($bool) return [false, '订单号已存在'];
-
-        return [true, $data];
-    }
-
-    public function fillData($data, $user, $search){
-        if(empty($data['data'])) return $data;
-
-        $emp = (new EmployeeService())->getEmployeeMap(array_unique(array_column($data['data'],'crt_id')));
-        foreach ($data['data'] as $key => $value){
-            $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
-            $data['data'][$key]['order_time'] = $value['order_time'] ? date('Y-m-d',$value['order_time']) : '';
-            $data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? '';
-            $data['data'][$key]['customer_title'] = $emp_2[$value['customer_id']] ?? '';
-            $data['data'][$key]['supply_title'] = $emp_2[$value['supply_id']] ?? '';
-        }
-
-        return $data;
-    }
-
-    //催单管理---------------------------------------------
-
-    public function reminderEdit($data,$user){
-        list($status,$msg) = $this->reminderRule($data, $user, false);
-        if(!$status) return [$status,$msg];
-
-        try {
-            DB::beginTransaction();
-
-            $model = Device::where('id',$data['id'])->first();
-            $model->order_id = $data['order_id'] ?? 0;
-            $model->order_no = $data['order_no'] ?? '';
-            $model->product_code = $data['product_code'] ?? '';
-            $model->product_size = $data['product_size'] ?? '';
-            $model->product_unit = $data['product_unit'] ?? '';
-            $model->product_title = $data['product_title'] ?? '';
-            $model->quantity = $data['quantity'] ?? 0;
-            $model->order_time = $data['order_time'] ?? 0;
-            $model->lt_arrived_time = $data['lt_arrived_time'] ?? 0;
-            $model->tl_arrived_time = $data['tl_arrived_time'] ?? 0;
-            $model->tl_quantity = $data['tl_quantity'] ?? 0;
-            $model->rule = $data['rule'] ?? 0;
-            $model->df_type = $data['df_type'] ?? 0;
-            $model->save();
-
-            $time = time();
-            ReminderDetails::where('del_time',0)
-                ->where('reminder_id', $model->id)
-                ->update(['del_time' => $time]);
-            $this->saveDetail1($model->id, $time, $data);
-
-            DB::commit();
-        }catch (\Exception $exception){
-            DB::rollBack();
-            return [false,$exception->getMessage()];
-        }
-
-        return [true, ''];
-    }
-
-    public function reminderAdd($data,$user){
-        list($status,$msg) = $this->reminderRule($data, $user);
-        if(!$status) return [$status,$msg];
-
-        try {
-            DB::beginTransaction();
-
-            $model = new Device();
-            $model->order_number = $this->createOrderNumber();
-            $model->order_id = $data['order_id'] ?? 0;
-            $model->order_no = $data['order_no'] ?? '';
-            $model->product_code = $data['product_code'] ?? '';
-            $model->product_size = $data['product_size'] ?? '';
-            $model->product_unit = $data['product_unit'] ?? '';
-            $model->product_title = $data['product_title'] ?? '';
-            $model->quantity = $data['quantity'] ?? 0;
-            $model->order_time = $data['order_time'] ?? 0;
-            $model->lt_arrived_time = $data['lt_arrived_time'] ?? 0;
-            $model->tl_arrived_time = $data['tl_arrived_time'] ?? 0;
-            $model->tl_quantity = $data['tl_quantity'] ?? 0;
-            $model->df_type = $data['df_type'] ?? 0;
-            $model->rule = $data['rule'] ?? 0;
-            $model->crt_id = $user['id'];
-            $model->save();
-
-            $this->saveDetail1($model->id, time(), $data);
-
-            DB::commit();
-        }catch (\Exception $exception){
-            DB::rollBack();
-            return [false,$exception->getMessage()];
-        }
-
-        return [true, ''];
-    }
-
-    private function saveDetail1($id, $time, $data){
-        if(! empty($data['details'])){
-            $unit = [];
-            foreach ($data['details'] as $value){
-                $unit[] = [
-                    'reminder_id' => $id,
-                    'customer_supply_id' => $value['customer_supply_id'],
-                    'is_main' => $value['is_main'],
-                    'crt_time' => $time,
-                ];
-            }
-            if(! empty($unit)) ReminderDetails::insert($unit);
-        }
-    }
-
-    private function getDetail1($id, $user = []){
-        $customer_supply_id = $user['id'] ?? 0;
-
-        $data = ReminderDetails::from('reminder_details as a')
-            ->leftJoin('customer_supply as b','b.id','a.customer_supply_id')
-            ->where('a.del_time',0)
-            ->where('a.reminder_id', $id)
-            ->when(! empty($customer_supply_id), function ($query) use ($customer_supply_id) {
-                return $query->where('a.customer_supply_id', $customer_supply_id);
-            })
-            ->select('a.customer_supply_id','a.is_main','b.title','a.status')
-            ->get()->toArray();
-
-        $unit = $unit2 = [];
-        foreach ($data as $value){
-            if(! empty($customer_supply_id)) {
-                $unit2 = [
-                    'status' => $value['status'],
-                ];
-            }else{
-                $unit[] = [
-                    'customer_supply_id' => $value['customer_supply_id'],
-                    'customer_supply_title' => $value['title'],
-                    'is_main' => $value['is_main'],
-                ];
-            }
-        }
-        if(! empty($unit2)) return $unit2;
-
-        $detail = [
-            'details' => $unit,
-        ];
-
-        foreach ($detail as $key => $value) {
-            if (empty($value)) {
-                $detail[$key] = (object)[]; // 转成 stdClass 对象
-            }
-        }
-
-        return $detail;
-    }
-
-    public function reminderDel($data){
-        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
-
-        $bool = Device::where('del_time',0)
-            ->whereIn('id',$data['id'])
-            ->where('status','>',Device::status_zero)
-            ->exists();
-        if($bool) return [false, '催单状态已变更,删除失败'];
-        try {
-            DB::beginTransaction();
-            $time = time();
-
-            Device::where('del_time',0)
-                ->whereIn('id',$data['id'])
-                ->update(['del_time' => $time]);
-
-            ReminderDetails::where('del_time',0)
-                ->where('reminder_id', $data['id'])
-                ->update(['del_time' => $time]);
-
-            DB::commit();
-        }catch (\Exception $exception){
-            DB::rollBack();
-            return [false,$exception->getMessage()];
-        }
-
-        return [true, ''];
-    }
-
-    public function reminderDetail($data, $user){
-        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
-        $customer = Device::where('del_time',0)
-            ->where('id',$data['id'])
-            ->first();
-        if(empty($customer)) return [false,'催单不存在或已被删除'];
-        $customer = $customer->toArray();
-        $customer['crt_name'] = Employee::where('id',$customer['crt_id'])->value('emp_name');
-        $customer['crt_time'] = $customer['crt_time'] ? date("Y-m-d H:i:s",$customer['crt_time']): '';
-        $customer['order_time'] = $customer['order_time'] ? date("Y-m-d",$customer['order_time']): '';
-        $customer['lt_arrived_time'] = $customer['lt_arrived_time'] ? date("Y-m-d",$customer['lt_arrived_time']): '';
-        $customer['tl_arrived_time'] = $customer['tl_arrived_time'] ? date("Y-m-d",$customer['tl_arrived_time']): '';
-        $customer['df_type_title'] = Device::$df_type_name[$customer['df_type']] ?? "";
-        $customer['rule_title'] = Device::$rule_name[$customer['rule']] ?? "";
-        $customer['status_title'] = Device::$status_name[$customer['status']] ?? "";
-
-        $details = $this->getDetail1($data['id']);
-        $customer = array_merge($customer, $details);
-
-        $details_s = $this->getDetailOut($data);
-        $customer['cd_details'] = $details_s;
-
-        return [true, $customer];
-    }
-
-    public function reminderCommon($data,$user, $field = []){
-        if(empty($field)) $field = Device::$field;
-
-        $model = Device::Clear($user,$data);
-        $model = $model->where('del_time',0)
-            ->select($field)
-            ->orderby('id', 'desc');
-
-        if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
-        if(! empty($data['order_no'])) $model->where('order_no', 'LIKE', '%'.$data['order_no'].'%');
-        if(! empty($data['product_title'])) $model->where('product_title', 'LIKE', '%'.$data['product_title'].'%');
-        if(! empty($data['product_code'])) $model->where('product_code', 'LIKE', '%'.$data['product_code'].'%');
-        if(! empty($data['id'])) $model->whereIn('id', $data['id']);
-        if(isset($data['status'])) $model->where('status', $data['status']);
-        if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
-            $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
-            $model->where('crt_time','>=',$return[0]);
-            $model->where('crt_time','<=',$return[1]);
-        }
-        if(! empty($data['order_time'][0]) && ! empty($data['order_time'][1])) {
-            $return = $this->changeDateToTimeStampAboutRange($data['order_time']);
-            $model->where('order_time','>=',$return[0]);
-            $model->where('order_time','<=',$return[1]);
-        }
-
-        return $model;
-    }
-
-    public function reminderList($data,$user){
-        $model = $this->reminderCommon($data, $user);
-        $list = $this->limit($model,'',$data);
-        $list = $this->fillReminderData($list,$user,$data);
-
-        $list['count'] = $this->countTotal($list['data'], $user['header_default']);
-
-        return [true, $list];
-    }
-
-    public function reminderRule(&$data, $user, $is_add = true){
-        if(empty($data['order_id'])) return [false, '订单ID不能为空'];
-        if(empty($data['order_no'])) return [false, '订单号不能为空'];
-        if(empty($data['order_time'])) return [false, '订单日期不能为空'];
-        $data['order_time'] = strtotime($data['order_time']);
-        if(empty($data['product_code'])) return [false, '物料编码不能为空'];
-        if(empty($data['product_title'])) return [false, '物料名称不能为空'];
-        if(empty($data['quantity'])) return [false, '物料数量不能为空'];
-        if(empty($data['lt_arrived_time'])) return [false, 'LT要求到货日期不能为空'];
-        $data['lt_arrived_time'] = $this->changeDateToDate($data['lt_arrived_time']);
-        if(empty($data['tl_arrived_time'])) return [false, '提拉到货日期不能为空'];
-        $data['tl_arrived_time'] = $this->changeDateToDate($data['tl_arrived_time']);
-        $res = $this->checkNumber($data['tl_quantity'],2,'positive');
-        if(! $res['valid']) return [false,'提拉到货数量:' . $res['error']];
-        if(empty($data['df_type'])) return [false, '要求答复时间不能为空'];
-        if(! isset(Device::$df_type_name[$data['df_type']])) return [false, '要求答复时间错误'];
-        if(empty($data['rule'])) return [false, '主要人员关系规则不能为空'];
-        if(! isset(Device::$rule_name[$data['rule']])) return [false, '主要人员关系规则不存在'];
-        if(empty($data['details'])) return [false, '催单提醒人员不能为空'];
-
-        $is_bool = false;
-        $main_ids = [];
-        $sub_ids = [];
-
-        foreach ($data['details'] as $value) {
-            if (empty($value['customer_supply_id'])) return [false, '人员id不能为空'];
-            if (empty($value['is_main'])) return [false, 'is_main不能为空'];
-
-            $customer_id = $value['customer_supply_id'];
-            $is_main_val = $value['is_main'];
-
-            if ($is_main_val == ReminderDetails::is_main_one) {
-                // 检查主要人员重复
-                if (in_array($customer_id, $main_ids)) {
-                    return [false, "主要成员不能重复"];
-                }
-                $main_ids[] = $customer_id;
-                $is_bool = true;
-            } elseif ($is_main_val == ReminderDetails::is_main_two) {
-                // 检查次要人员重复
-                if (in_array($customer_id, $sub_ids)) {
-                    return [false, "次要成员不能重复"];
-                }
-                $sub_ids[] = $customer_id;
-            } 
-        }
-
-        // 检查主要成员至少一个
-        if (!$is_bool) return [false, '主要成员必须选择'];
-
-        // 检查主要与次要是否有重复
-        $intersect = array_intersect($main_ids, $sub_ids);
-        if (!empty($intersect)) return [false, "主要成员与次要成员不能重复"];
-
-        if($is_add){
-
-        }else{
-            if(empty($data['id'])) return [false,'ID不能为空'];
-            $order = Device::where('id',$data['id'])
-                ->where('del_time',0)
-                ->first();
-            if(empty($order)) return [false, '催单不存在或已被删除'];
-            $order = $order->toArray();
-            if($order['status'] > Device::status_zero) return [false, '催单状态已变更,编辑失败'];
-        }
-
-        return [true, $data];
-    }
-
-    public function fillReminderData($data, $user, $search){
-        if(empty($data['data'])) return $data;
-
-        $emp = (new EmployeeService())->getEmployeeMap(array_unique(array_column($data['data'],'crt_id')));
-        foreach ($data['data'] as $key => $value){
-            $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
-            $data['data'][$key]['order_time'] = $value['order_time'] ? date('Y-m-d',$value['order_time']) : '';
-            $data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? '';
-
-            $data['data'][$key]['lt_arrived_time'] = $value['lt_arrived_time'] ? date("Y-m-d",$value['lt_arrived_time']): '';
-            $data['data'][$key]['tl_arrived_time'] = $value['tl_arrived_time'] ? date("Y-m-d",$value['tl_arrived_time']): '';
-            $data['data'][$key]['df_type_title'] = Device::$df_type_name[$value['df_type']] ?? "";
-            $data['data'][$key]['rule_title'] = Device::$rule_name[$value['rule']] ?? "";
-            $data['data'][$key]['status_title'] = Device::$status_name[$value['status']] ?? "";
-        }
-
-        return $data;
-    }
-
-    public function createOrderNumber(){
-        return date('YmdHis',time()) . rand(1000,9999);
-    }
-
-    public function reminderSendWx($data, $user){
-        if(empty($data['id'])) return [false, 'ID不能为空'];
-        $appid = config("wx_msg.f_appid");
-
-        $reminders = Device::where('del_time',0)
-            ->whereIn('id',$data['id'])
-            ->get()->toArray();
-        if(empty($reminders)) return [false,'催单数据不存在或已被删除'];
-        if(count($reminders) >= 10) return [false, '批量操作一次最多10条'];
-
-        $details = ReminderDetails::from('reminder_details as a')
-            ->leftjoin('wx_employee_official as b','b.employee_id','a.customer_supply_id')
-            ->where('a.del_time',0)
-            ->where('b.type',WxEmployeeOfficial::login_type_one)
-            ->where('b.appid',$appid)
-            ->whereIn('a.reminder_id', array_column($reminders,'id'))
-            ->select('a.reminder_id','a.customer_supply_id','b.openid')
-            ->get()->toArray();
-        if (empty($details)) return [false, '未找到任何可发送的微信消息的供应商'];
-
-        // 按 reminder_id 分组
-        $detailMap = [];
-        foreach ($details as $d) {
-            if (! empty($d['openid'])) {
-                $detailMap[$d['reminder_id']][] = [
-                    'open_id' => $d['openid'],
-                    'employee_id' => $d['customer_supply_id'],
-                ];
-            }
-        }
-
-        $wxService = new WxTemplateMessageService();
-
-        $total = 0;
-        $success = 0;
-        $fail = 0;
-        $failList = [];
-
-        // ③ 循环发送每条催单的每个人
-        foreach ($reminders as $reminder) {
-            $reminderId = $reminder['id'];
-            $d_array = $detailMap[$reminderId] ?? [];
-            if (empty($d_array)) continue;
-
-            $product_detail = $reminder['product_title'] . ',数量:' . $reminder['tl_quantity'];
-            foreach ($d_array as $value) {
-                $openid = $value['open_id'];
-                $employee_id = $value['employee_id'];
-                $params = [
-                    'order_number'   => $reminder['order_number'] ?? '',
-                    'product_detail' => $product_detail ?? '暂无',
-                    'order_no'        => $reminder['order_no'] ?? '',
-                ];
-
-                // URL 可自定义跳转地址
-                $options = [
-                    'url' => 'https://xlkj.qingyaokeji.com/#/wxDetailGet?openid='.$openid.'&employee_id='.$employee_id.'&id='.$reminder['id'],
-                    'openid' => $openid,
-                ];
-
-                $total++;
-
-                try {
-                    // 调用微信发送
-                    [$res, $msg] = $wxService->sendTemplateMessage('supply_reminder', $params, $options);
-
-                    if ($res) {
-                        $success++;
-                    } else {
-                        $fail++;
-                        $failList[] = [
-                            'reminder_id' => $reminderId,
-                            'openid' => $openid,
-                            'error' => $msg,
-                        ];
-                    }
-                } catch (\Exception $e) {
-                    $fail++;
-                    $failList[] = [
-                        'reminder_id' => $reminderId,
-                        'openid' => $openid,
-                        'error' => $e->getMessage(),
-                    ];
-                }
-            }
-        }
-
-        // ④ 结果统计返回
-        $resultMsg = "共需发送 {$total} 条模板消息,成功 {$success} 条,失败 {$fail} 条。";
-        if ($fail > 0) {
-            $resultMsg .= ' 失败详情见日志。';
-            Log::error('微信模板消息发送失败详情', $failList);
-        }
-
-        return [true, $resultMsg];
-    }
-    //催单管理---------------------------------------------
-
-
-    //待办管理---------------------------------------------
-
-    public function toDoEdit($data,$user){
-        list($status,$msg) = $this->toDoRule($data, $user, false);
-        if(!$status) return [$status,$msg];
-
-        try {
-            DB::beginTransaction();
-
-            $model = TodoList::where('id',$data['id'])->first();
-            $model->title = $data['title'] ?? "";
-            $model->type = $data['type'] ?? '';
-            $model->remind_start = $data['remind_start'] ?? '';
-            $model->remind_interval = $data['remind_interval'] ?? 0;
-            $model->last_remind_time = $data['last_remind_time'] ?? 0;
-            $model->man_type = $data['man_type'] ?? '';
-            $model->organization_name = $data['organization_name'] ?? '';
-            $model->contact = $data['contact'] ?? '';
-            $model->address = $data['address'] ?? '';
-            $model->content = $data['content'] ?? '';
-            $model->save();
-
-            DB::commit();
-        }catch (\Exception $exception){
-            DB::rollBack();
-            return [false,$exception->getMessage()];
-        }
-
-        return [true, ''];
-    }
-
-    public function toDoAdd($data,$user){
-        list($status,$msg) = $this->toDoRule($data, $user);
-        if(!$status) return [$status,$msg];
-
-        try {
-            DB::beginTransaction();
-
-            $model = new TodoList();
-            $model->title = $data['title'] ?? "";
-            $model->type = $data['type'] ?? '';
-            $model->remind_start = $data['remind_start'] ?? '';
-            $model->remind_interval = $data['remind_interval'] ?? 0;
-            $model->last_remind_time = $data['last_remind_time'] ?? 0;
-            $model->man_type = $data['man_type'] ?? '';
-            $model->organization_name = $data['organization_name'] ?? '';
-            $model->contact = $data['contact'] ?? '';
-            $model->address = $data['address'] ?? '';
-            $model->content = $data['content'] ?? '';
-            $model->crt_id = $user['id'];
-            $model->save();
-
-            DB::commit();
-        }catch (\Exception $exception){
-            DB::rollBack();
-            return [false,$exception->getMessage()];
-        }
-
-        return [true, ''];
-    }
-
-    public function toDoDel($data){
-        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
-
-//        $bool = TodoList::where('del_time',0)
-//            ->whereIn('id',$data['id'])
-//            ->where('status','>',TodoList::status_zero)
-//            ->exists();
-//        if($bool) return [false, '待办状态已变更,删除失败'];
-        try {
-            DB::beginTransaction();
-            $time = time();
-
-            TodoList::where('del_time',0)
-                ->whereIn('id',$data['id'])
-                ->update(['del_time' => $time]);
-
-            DB::commit();
-        }catch (\Exception $exception){
-            DB::rollBack();
-            return [false,$exception->getMessage()];
-        }
-
-        return [true, ''];
-    }
-
-    public function toDoDetail($data, $user){
-        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
-        $customer = TodoList::where('del_time',0)
-            ->where('id',$data['id'])
-            ->first();
-        if(empty($customer)) return [false,'待办事项不存在或已被删除'];
-        $customer = $customer->toArray();
-        $customer['crt_name'] = Employee::where('id',$customer['crt_id'])->value('emp_name');
-        $customer['crt_time'] = $customer['crt_time'] ? date("Y-m-d H:i:s",$customer['crt_time']): '';
-        $customer['remind_start'] = $customer['remind_start'] ? date("Y-m-d H:i",$customer['remind_start']): '';
-        $customer['type_title'] = TodoList::$type_name[$customer['type']] ?? "";
-        $customer['status_title'] = TodoList::$status_name[$customer['status']] ?? "";
-
-        return [true, $customer];
-    }
-
-    public function toDoCommon($data,$user, $field = []){
-        if(empty($field)) $field = TodoList::$field;
-
-        $model = TodoList::Clear($user,$data);
-        $model = $model->where('del_time',0)
-            ->select($field)
-            ->orderby('id', 'desc');
-
-        if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
-        if(! empty($data['id'])) {
-            if(! is_array($data['id'])) $data['id'] = [$data['id']];
-            $model->whereIn('id', $data['id']);
-        }
-        if(isset($data['status'])) $model->where('status', $data['status']);
-        if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
-            $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
-            $model->where('crt_time','>=',$return[0]);
-            $model->where('crt_time','<=',$return[1]);
-        }
-        if(! empty($data['remind_start'][0]) && ! empty($data['remind_start'][1])) {
-            $return = $this->changeDateToTimeStampAboutRange($data['remind_start']);
-            $model->where('remind_start','>=',$return[0]);
-            $model->where('remind_start','<=',$return[1]);
-        }
-
-        return $model;
-    }
-
-    public function toDoList($data,$user){
-        $model = $this->toDoCommon($data, $user);
-        $list = $this->limit($model,'',$data);
-        $list = $this->fillToDoData($list,$user,$data);
-
-        return [true, $list];
-    }
-
-    public function toDoRule(&$data, $user, $is_add = true){
-        if(empty($data['title'])) return [false, '待办标题不能为空'];
-        if(empty($data['type'])) return [false, '间隔时长不能为空'];
-        if(! isset(TodoList::$type_value[$data['type']])) return [false, '间隔时长错误'];
-        $data['remind_interval'] = TodoList::$type_value[$data['type']];
-        if(empty($data['remind_start'])) return [false, '提醒开始时间不能为空'];
-        $data['remind_start'] = $this->changeDateToDateMin($data['remind_start']);
-        $now = strtotime(date("Y-m-d H:i"));
-        if ($data['remind_start'] - $now < 300) return [false, '提醒开始时间必须至少比当前时间晚5分钟'];
-
-//        if(empty($data['man_type'])) return [false, '拜访人员类型不能为空'];
-//        if(empty($data['organization_name'])) return [false, '组织名称不能为空'];
-//        if(empty($data['contact'])) return [false, '联系人不能为空'];
-//        if(empty($data['address'])) return [false, '地点不能为空'];
-        if(empty($data['content'])) return [false, '内容不能为空'];
-
-        if($is_add){
-
-        }else{
-            if(empty($data['id'])) return [false,'ID不能为空'];
-            $order = TodoList::where('id',$data['id'])
-                ->where('del_time',0)
-                ->first();
-            if(empty($order)) return [false, '待办事项不存在或已被删除'];
-            $order = $order->toArray();
-            if($order['status'] > TodoList::status_zero) return [false, '待办事项状态已变更,编辑失败'];
-            if ($order['remind_start'] != $data['remind_start'] || $order['remind_interval'] != $data['remind_interval']) {
-                $data['last_remind_time'] = 0;
-            }
-        }
-
-        return [true, $data];
-    }
-
-    public function toDoFinished($data, $user)
-    {
-        if (empty($data['id'])) return [false, 'ID不能为空'];
-
-        // 确保 id 是数组
-        $ids = is_array($data['id']) ? $data['id'] : [$data['id']];
-        if (empty($ids)) return [false, 'ID不能为空'];
-
-        // 查询待办事项
-        $orders = TodoList::whereIn('id', $ids)
-            ->where('del_time', 0)
-            ->where('status', '<', TodoList::status_two)
-            ->get();
-
-        if ($orders->isEmpty()) return [false, '未找到可操作的待办事项'];
-
-        try {
-            DB::beginTransaction();
-
-            // 批量更新
-            TodoList::whereIn('id', $orders->pluck('id'))
-                ->update(['status' => TodoList::status_two]);
-
-            DB::commit();
-        } catch (\Exception $e) {
-            DB::rollBack();
-            return [false, $e->getMessage()];
-        }
-
-        $count = count($orders);
-        return [true, "成功完成 {$count} 条待办事项"];
-    }
-
-    public function fillToDoData($data, $user, $search){
-        if(empty($data['data'])) return $data;
-
-        $emp = (new EmployeeService())->getEmployeeMap(array_unique(array_column($data['data'],'crt_id')));
-        foreach ($data['data'] as $key => $value){
-            $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
-            $data['data'][$key]['remind_start'] = $value['remind_start'] ? date('Y-m-d H:i',$value['remind_start']) : '';
-            $data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? '';
-
-            $data['data'][$key]['type_title'] = TodoList::$type_name[$value['type']] ?? "";
-            $data['data'][$key]['status_title'] = TodoList::$status_name[$value['status']] ?? "";
-            $data['data'][$key]['last_time_result'] = $value['last_time_result'] ?? "成功";
-        }
-
-        return $data;
-    }
-
-    public function reminderDetail2($data, $user){
-        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
-        $customer = Device::where('del_time',0)
-            ->where('id',$data['id'])
-            ->first();
-        if(empty($customer)) return [false,'催单不存在或已被删除'];
-        $customer = $customer->toArray();
-        $customer['crt_name'] = Employee::where('id',$customer['crt_id'])->value('emp_name');
-        $customer['crt_time'] = $customer['crt_time'] ? date("Y-m-d H:i:s",$customer['crt_time']): '';
-        $customer['order_time'] = $customer['order_time'] ? date("Y-m-d",$customer['order_time']): '';
-        $customer['lt_arrived_time'] = $customer['lt_arrived_time'] ? date("Y-m-d",$customer['lt_arrived_time']): '';
-        $customer['tl_arrived_time'] = $customer['tl_arrived_time'] ? date("Y-m-d",$customer['tl_arrived_time']): '';
-        $customer['df_type_title'] = Device::$df_type_name[$customer['df_type']] ?? "";
-        $customer['rule_title'] = Device::$rule_name[$customer['rule']] ?? "";
-        $customer['status_title'] = Device::$status_name[$customer['status']] ?? "";
-
-        $details_status = $this->getDetail1($data['id'], $user);
-        $customer['reminder_detail_status'] = $details_status['status'];
-
-        $details_s = $this->getDetailOut($data, $user);
-        $customer['cd_details'] = $details_s;
-
-        return [true, $customer];
-    }
-
-    private function getDetailOut($data, $user = []){
-        $user_id = $user['id'] ?? 0;
-
-        $record = ReminderRecord::where('del_time',0)
-            ->where('reminder_id',$data['id'])
-            ->when(! empty($user_id), function ($query) use ($user_id) {
-                return $query->where('crt_id', $user_id);
-            })
-            ->select('id','crt_id','tl_type','crt_time','tl_result','tl_ways')
-            ->orderby('id','desc')
-            ->get()->toArray();
-
-        $record_detail = ReminderRecordDetails::where('del_time',0)
-            ->whereIn('reminder_record_id',array_column($record,'id'))
-            ->select('reminder_record_id','quantity','tl_time')
-            ->get()->toArray();
-        $record_detail_map = [];
-        foreach ($record_detail as $value){
-            $record_detail_map[$value['reminder_record_id']][] = [
-                'quantity' => $value['quantity'],
-                'tl_time' => date("Y-m-d", $value['tl_time']),
-            ];
-        }
-
-        foreach ($record as $key => $value){
-            $record[$key]['crt_name'] = $emp_2[$value['crt_id']] ?? "";
-            $record[$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_time']): '';
-            $record[$key]['tl_type_title'] = ReminderRecord::$tl_type_name[$value['tl_type']] ?? "";
-            $record[$key]['tl_ways_title'] = ReminderRecord::$tl_way_name[$value['tl_ways']] ?? "";
-            $record[$key]['tl_result_title'] = ReminderRecord::$tl_result_name[$value['tl_result']] ?? "";
-            $record[$key]['details'] = $record_detail_map[$value['id']] ?? (object)[];
-        }
-
-        return $record ?? (object)[];
-    }
-
-    public function reminderSave($data, $user){
-        list($status, $msg) = $this->reminderSaveRule($data, $user);
-        if(! $status) return [false, $msg];
-
-        list($reminder, $reminder_details) = $msg;
-        try {
-            DB::beginTransaction();
-
-            $reminder_details->status = ReminderDetails::status_one;
-            $reminder_details->save();
-
-            $time = time();
-            $model = new ReminderRecord();
-            $model->reminder_id = $reminder->id;
-            $model->tl_type = $data['tl_type'];
-            $model->tl_result = $data['tl_result'];
-            $model->tl_ways = $data['tl_ways'];
-            $model->crt_id = $user['id'];
-            $model->save();
-
-            if(! empty($data['details'])){
-                $insert = [];
-                foreach ($data['details'] as $value){
-                    $insert[] = [
-                        'reminder_record_id' => $model->id,
-                        'quantity' => $value['quantity'],
-                        'tl_time' => $value['tl_time'],
-                        'crt_time' => $time,
-                    ];
-                }
-                if(! empty($insert)) ReminderRecordDetails::insert($insert);
-            }
-
-            $this->updateReminderStatus($reminder);
-
-            DB::commit();
-        }catch (\Exception $exception){
-            DB::rollBack();
-            return [false, $exception->getMessage()];
-        }
-
-        return [true, ''];
-    }
-
-    private function reminderSaveRule(&$data, $user){
-        if(empty($data['id'])) return [false, '催单id不能为空'];
-        $reminder = Device::where('del_time',0)
-            ->where('id', $data['id'])
-            ->first();
-        if(empty($reminder)) return [false, '催单不存在或已被删除'];
-        list($status,$msg) = $this->limitingSendRequestBackgExpire("reminderSave" . $reminder->id);
-        if(! $status) return [false, $msg];
-        if($reminder->status == Device::status_one) return [false, '催单已完成,提交失败'];
-        if($reminder->status == Device::status_two) return [false, '催单已结束,提交失败'];
-        if(empty($data['tl_type'])) return [false, '提拉类型不能为空'];
-        if(! isset(ReminderRecord::$tl_type_name[$data['tl_type']])) return [false, '提拉类型错误'];
-        if(empty($data['tl_result'])) return [false, '提拉结果不能为空'];
-        if(! isset(ReminderRecord::$tl_result_name[$data['tl_result']])) return [false, '提拉结果错误'];
-        if($data['tl_result'] == ReminderRecord::tl_result_one){
-            if(empty($data['tl_ways'])) return [false, '提拉方式不能为空'];
-            if(! isset(ReminderRecord::$tl_way_name[$data['tl_ways']])) return [false, '提拉方式错误'];
-            if(empty($data['details'])) return [false, '结果明细不能为空'];
-            foreach ($data['details'] as $key => $value){
-                $res = $this->checkNumber($value['quantity'],2,'positive');
-                if(! $res['valid']) return [false,'提拉应答数量:' . $res['error']];
-                if(empty($value['tl_time'])) return [false, '提拉应答日期不能为空'];
-                $data['details'][$key]['tl_time'] = $this->changeDateToDate($value['tl_time']);
-            }
-        }
-        $order = ReminderDetails::where('del_time',0)
-            ->where('reminder_id', $data['id'])
-            ->where('customer_supply_id', $user['id'])
-            ->first();
-        if(! $order) return [false, '该人员不在本次催单供应商人员内容'];
-        if($order->status) return [false, '催单信息已回复,请勿重复操作'];
-
-        return [true, [$reminder, $order]];
-    }
-
-    public function updateReminderStatus($reminder)
-    {
-        if (empty($reminder)) return;
-
-        $reminder_id = $reminder->id;
-
-        // 查询主要人员
-        $main_users = ReminderDetails::where('reminder_id', $reminder_id)
-            ->where('is_main', ReminderDetails::is_main_one)
-            ->pluck('customer_supply_id')
-            ->toArray();
-
-        // 查询主要人员的最新回复结果
-        $records = ReminderRecord::where('reminder_id', $reminder_id)
-            ->whereIn('crt_id', $main_users)
-            ->orderBy('id', 'desc')
-            ->get()
-            ->groupBy('crt_id')
-            ->map(function ($items) {
-                return $items->first(); // 每人最新一次回复
-            });
-
-        // 如果主要人员都还没回复,不更新
-        if ($records->isEmpty()) return;
-
-        // 统计回复结果
-        $agree_count = $records->where('tl_result', ReminderRecord::tl_result_one)->count();
-        $reject_count = $records->where('tl_result', ReminderRecord::tl_result_two)->count();
-        $total_main = count($main_users);
-
-        // 当前规则判断
-        $new_status = null;
-
-        if ($reminder->rule == Device::rule_one) {
-            // 与规则:全同意 -> 1;有一人不同意 -> 2
-            if ($reject_count > 0) {
-                $new_status = Device::status_two; // 结束
-            } elseif ($agree_count == $total_main) {
-                $new_status = Device::status_one; // 完成
-            }
-        } elseif ($reminder->rule == Device::rule_two) {
-            // 或规则:任意同意 -> 1;全不同意 -> 2
-            if ($agree_count > 0) {
-                $new_status = Device::status_one; // 完成
-            } elseif ($reject_count == $total_main) {
-                $new_status = Device::status_two; // 结束
-            }
-        }
-
-        // 更新状态
-        if ($new_status !== null && $reminder->status != $new_status) {
-            $reminder->status = $new_status;
-            $reminder->save();
-        }
-    }
-}

+ 329 - 0
app/Service/RDService.php

@@ -0,0 +1,329 @@
+<?php
+
+namespace App\Service;
+
+use App\Model\Device;
+use App\Model\Employee;
+use App\Model\Item;
+use App\Model\RD;
+use App\Model\RdDetails;
+use Illuminate\Support\Facades\DB;
+
+class RDService extends Service
+{
+    public function rdEdit($data,$user){
+        list($status,$msg) = $this->rdRule($data, $user, false);
+        if(!$status) return [$status,$msg];
+
+        try {
+            DB::beginTransaction();
+
+            $model = RD::where('id',$data['id'])->first();
+            $model->item_id = $data['item_id'] ?? 0;
+            $model->order_time = $data['order_time'] ?? 0;
+            $model->start_time_hour = $data['start_time_hour'] ?? 0;
+            $model->start_time_min = $data['start_time_min'] ?? 0;
+            $model->end_time_hour = $data['end_time_hour'] ?? 0;
+            $model->end_time_min = $data['end_time_min'] ?? 0;
+            $model->total_hours = $data['total_hours'] ?? 0;
+            $model->save();
+
+            $time = time();
+            RdDetails::where('del_time',0)
+                ->where('rd_id', $model->id)
+                ->update(['del_time' => $time]);
+            $this->saveDetail($model->id, $time, $data);
+
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
+
+        return [true, ''];
+    }
+
+    public function rdAdd($data,$user){
+        list($status,$msg) = $this->rdRule($data, $user);
+        if(!$status) return [$status,$msg];
+
+        try {
+            DB::beginTransaction();
+
+            $model = new RD();
+            $model->order_number = $this->generateOrderNumber();
+            $model->item_id = $data['item_id'] ?? 0;
+            $model->order_time = $data['order_time'] ?? 0;
+            $model->start_time_hour = $data['start_time_hour'] ?? 0;
+            $model->start_time_min = $data['start_time_min'] ?? 0;
+            $model->end_time_hour = $data['end_time_hour'] ?? 0;
+            $model->end_time_min = $data['end_time_min'] ?? 0;
+            $model->total_hours = $data['total_hours'] ?? 0;
+            $model->crt_id = $user['id'];
+            $model->save();
+            
+            $this->saveDetail($model->id, time(), $data);
+
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            if (str_contains($exception->getMessage(), '1062') || str_contains($exception->getMessage(), 'Duplicate entry')) {
+                return [false, '网络波动,请重新操作!'];
+            }
+            return [false,$exception->getMessage()];
+        }
+
+        return [true, ''];
+    }
+
+    private function saveDetail($id, $time, $data){
+        if(! empty($data['man_list'])){
+            $unit = [];
+            foreach ($data['man_list'] as $value){
+                $unit[] = [
+                    'rd_id' => $id,
+                    'type' => $value['type'],
+                    'data_id' => $value['data_id'],
+                    'crt_time' => $time,
+                ];
+            }
+            if(! empty($unit)) RdDetails::insert($unit);
+        }
+
+        if(! empty($data['device_list'])){
+            $receipt = [];
+            foreach ($data['device_list'] as $value){
+                $receipt[] = [
+                    'rd_id' => $id,
+                    'type' => $value['type'],
+                    'data_id' => $value['data_id'],
+                    'crt_time' => $time,
+                ];
+            }
+            if(! empty($receipt)) RdDetails::insert($receipt);
+        }
+    }
+
+    private function getDetail($id){
+        $data = RdDetails::where('del_time',0)
+            ->where('rd_id', $id)
+            ->get()->toArray();
+
+        $id = $id2 = [];
+        foreach ($data as $value){
+            if($value['type'] == RdDetails::type_one) {
+                $id[] = $value['data_id'];
+            }else{
+                $id2[] = $value['data_id'];
+            }
+        }
+        $map = Employee::whereIn('id', $id)->select('emp_name','id','number')->get()->toArray();
+        $map = array_column($map,null,'id');
+        $map2 = Device::whereIn('id', $id)->select('code','id','title')->get()->toArray();
+        $map2 = array_column($map2,null,'id');
+
+        $unit = $receipt = [];
+        foreach ($data as $value){
+            if($value['type'] == RdDetails::type_one) {
+                $tmp = $map[$value['data_id']] ?? [];
+                $unit[] = [
+                    'type' => $value['type'],
+                    'data_id' => $value['data_id'],
+                    'data_title' => $tmp['emp_name'],
+                    'data_code' => $tmp['number'],
+                ];
+            }else{
+                $tmp = $map2[$value['data_id']] ?? [];
+                $receipt[] = [
+                    'type' => $value['type'],
+                    'data_id' => $value['data_id'],
+                    'data_title' => $tmp['title'] ?? "",
+                    'data_code' => $tmp['code'] ?? "",
+                ];
+            }
+        }
+
+        $detail = [
+            'man_list' => $unit,
+            'device_list' => $receipt,
+        ];
+
+        foreach ($detail as $key => $value) {
+            if (empty($value)) {
+                $detail[$key] = (object)[]; // 转成 stdClass 对象
+            }
+        }
+
+        return $detail;
+    }
+
+    public function rdDel($data){
+        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
+
+        try {
+            DB::beginTransaction();
+            $time = time();
+
+            RD::where('del_time',0)
+                ->whereIn('id',$data['id'])
+                ->update(['del_time' => $time]);
+
+            RdDetails::where('del_time',0)
+                ->where('rd_id', $data['id'])
+                ->update(['del_time' => $time]);
+
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
+
+        return [true, ''];
+    }
+
+    public function rdDetail($data, $user){
+        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
+        $customer = RD::where('del_time',0)
+            ->where('id',$data['id'])
+            ->first();
+        if(empty($customer)) return [false,'订单不存在或已被删除'];
+        $customer = $customer->toArray();
+        $customer['crt_name'] = Employee::where('id',$customer['crt_id'])->value('emp_name');
+        $customer['crt_time'] = $customer['crt_time'] ? date("Y-m-d H:i:s",$customer['crt_time']): '';
+        $customer['item_title'] = $customer['item_id'] ? Item::where('id',$customer['item_id'])->value('title') : "";
+
+        $details = $this->getDetail($data['id']);
+        $customer = array_merge($customer, $details);
+
+        return [true, $customer];
+    }
+
+    public function rdCommon($data,$user, $field = []){
+        if(empty($field)) $field = RD::$field;
+
+        $model = RD::Clear($user,$data);
+        $model = $model->where('del_time',0)
+            ->select($field)
+            ->orderby('id', 'desc');
+
+        if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
+        if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
+        if(! empty($data['id'])) $model->whereIn('id', $data['id']);
+        if(! empty($data['item_title'])) {
+            $item_id = Item::where('title', 'LIKE', '%'.$data['item_title'].'%')
+                ->where('del_time',0)
+                ->pluck('id')->toArray();
+            $model->whereIn('item_id', $item_id);
+        }
+        if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
+            $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
+            $model->where('crt_time','>=',$return[0]);
+            $model->where('crt_time','<=',$return[1]);
+        }
+        if(! empty($data['order_time'][0]) && ! empty($data['order_time'][1])) {
+            $return = $this->changeDateToTimeStampAboutRange($data['order_time']);
+            $model->where('order_time','>=',$return[0]);
+            $model->where('order_time','<=',$return[1]);
+        }
+
+        return $model;
+    }
+
+    public function rdList($data,$user){
+        $model = $this->rdCommon($data, $user);
+        $list = $this->limit($model,'',$data);
+        $list = $this->fillData($list,$user,$data);
+
+        $list['count'] = $this->countTotal($list['data'], $user['header_default']);
+
+        return [true, $list];
+    }
+
+    public function rdRule(&$data, $user, $is_add = true){
+        if(empty($data['order_time'])) return [false, '订单日期不能为空'];
+        $data['order_time'] = $this->changeDateToDate($data['order_time']);
+        if(empty($data['man_list'])) return [false, '研发人员不能为空'];
+        foreach ($data['man_list'] as $value){
+            if(empty($value['type'])) return [false, '类型不能为空'];
+            if(empty($value['data_id'])) return [false, '数据ID不能为空'];
+        }
+        if(empty($data['device_list'])) return [false, '研发设备不能为空'];
+        foreach ($data['device_list'] as $value){
+            if(empty($value['type'])) return [false, '类型不能为空'];
+            if(empty($value['data_id'])) return [false, '数据ID不能为空'];
+        }
+
+        list($status, $msg) = $this->checkArrayRepeat($data['man_list'],'data_id','研发人员');
+        if(! $status) return [false, $msg];
+        list($status, $msg) = $this->checkArrayRepeat($data['device_list'],'data_id','研发设备');
+        if(! $status) return [false, $msg];
+        if(empty($data['item_id'])) return [false,'项目不能为空'];
+        $res = $this->checkNumber($data['start_time_hour'],0,'non-negative');
+        if(! $res['valid']) return [false,'研发时段开始点:' . $res['error']];
+        $res = $this->checkNumber($data['start_time_min'],0,'non-negative');
+        if(! $res['valid']) return [false,'研发时段开始分:' . $res['error']];
+        $res = $this->checkNumber($data['end_time_hour'],0,'non-negative');
+        if(! $res['valid']) return [false,'研发时段结束点:' . $res['error']];
+        $res = $this->checkNumber($data['end_time_hour'],0,'non-negative');
+        if(! $res['valid']) return [false,'研发时段结束分:' . $res['error']];
+        $res = $this->checkNumber($data['total_hours'],2,'positive');
+        if(! $res['valid']) return [false,'研发合计工时:' . $res['error']];
+
+        if($is_add){
+
+        }else{
+            if(empty($data['id'])) return [false,'ID不能为空'];
+            $bool = RD::where('id',$data['id'])
+                ->where('del_time',0)
+                ->exists();
+            if(! $bool) return [false, '研发工时单不存在或已被删除'];
+        }
+
+        return [true, $data];
+    }
+
+    public function fillData($data, $user, $search){
+        if(empty($data['data'])) return $data;
+
+        $emp = (new EmployeeService())->getEmployeeMap(array_unique(array_column($data['data'],'crt_id')));
+        $emp2 = (new ItemService())->getItemMap(array_unique(array_column($data['data'],'item_id')));
+        foreach ($data['data'] as $key => $value){
+            $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
+            $data['data'][$key]['order_time'] = $value['order_time'] ? date('Y-m-d',$value['order_time']) : '';
+            $data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? '';
+            $data['data'][$key]['item_title'] = $emp2[$value['item_id']] ?? '';
+            $data['data'][$key]['start_time'] = $value['start_time_hour'] . ":" . $value['start_time_min'];
+            $data['data'][$key]['end_time'] = $value['send_time_hour'] . ":" . $value['end_time_min'];
+        }
+
+        return $data;
+    }
+
+    public function generateOrderNumber()
+    {
+        $yyyymm = date('Ym');
+
+        // 数据库事务(防止并发)
+        return DB::transaction(function () use ($yyyymm) {
+
+            // 先尝试读取
+            $row = DB::table('order_sequence')->where('yyyymm', $yyyymm)->lockForUpdate()->first();
+
+            if ($row) {
+                $seq = $row->seq + 1;
+                DB::table('order_sequence')->where('yyyymm', $yyyymm)
+                    ->update(['seq' => $seq]);
+            } else {
+                // 当月第一次生成
+                $seq = 1;
+                DB::table('order_sequence')->insert([
+                    'yyyymm' => $yyyymm,
+                    'seq' => $seq
+                ]);
+            }
+
+            // 拼接成单号 2025110001
+            return $yyyymm . str_pad($seq, 4, '0', STR_PAD_LEFT);
+        });
+    }
+}

+ 10 - 41
config/header/71.php

@@ -8,58 +8,27 @@
 return [
     [
         'key' =>'order_number',
-        'value' => '催单号',
-    ],
-    [
-        'key' =>'order_no',
         'value' => '订单号',
     ],
     [
         'key' =>'order_time',
-        'value' => '订单日期',
-    ],
-    [
-        'key' =>'product_code',
-        'value' => '物料编码',
-    ],
-    [
-        'key' =>'product_title',
-        'value' => '物料名称',
-    ],
-    [
-        'key' =>'product_size',
-        'value' => '物料规格',
-    ],
-    [
-        'key' =>'product_unit',
-        'value' => '物料单位',
-    ],
-    [
-        'key' =>'quantity',
-        'value' => '数量',
-    ],
-    [
-        'key' =>'tl_quantity',
-        'value' => '提拉到货数量',
-    ],
-    [
-        'key' =>'lt_arrived_time',
-        'value' => 'LT要求到货日期',
+        'value' => '单据日期',
     ],
     [
-        'key' =>'tl_arrived_time',
-        'value' => '提拉到货日期',
+        'key' =>'item_title',
+        'value' => '项目名称',
     ],
     [
-        'key' =>'df_type_title',
-        'value' => '要求答复时间',
+        'key' =>'start_time',
+        'value' => '研发开始时间',
     ],
     [
-        'key' =>'status_title',
-        'value' => '催单状态',
+        'key' =>'end_time',
+        'value' => '研发结束时间',
     ],
     [
-        'key' =>'crt_time',
-        'value' => '创建时间',
+        'key' =>'total_hours',
+        'value' => '工时',
+        'sum' => 1,
     ]
 ];

+ 7 - 0
routes/api.php

@@ -109,6 +109,13 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('deviceDel', 'Api\DeviceController@deviceDel');
     $route->any('deviceDetail', 'Api\DeviceController@deviceDetail');
 
+    //研发工时
+    $route->any('rdList', 'Api\DeviceController@rdList');
+    $route->any('rdEdit', 'Api\DeviceController@rdEdit');
+    $route->any('rdAdd', 'Api\DeviceController@rdAdd');
+    $route->any('rdDel', 'Api\DeviceController@rdDel');
+    $route->any('rdDetail', 'Api\DeviceController@rdDetail');
+
     //获取默认表头
     $route->any('getTableHead','Api\TableHeadController@tableHeadGet');
     //设置表头

+ 8 - 0
routes/wx.php

@@ -51,6 +51,7 @@ Route::group(['middleware'=> ['checkWx']],function ($route){
     $route->any('employeeRole', 'Api\EmployeeController@employeeRole');
     $route->any('getEmployeeImg', 'Api\EmployeeController@getEmployeeImg');
 
+    //日历设置
     $route->any('calendarList', 'Api\ItemController@calendarList');
     $route->any('calendarEdit', 'Api\ItemController@calendarEdit');
     $route->any('calendarAdd', 'Api\ItemController@calendarAdd');
@@ -70,4 +71,11 @@ Route::group(['middleware'=> ['checkWx']],function ($route){
     $route->any('deviceAdd', 'Api\DeviceController@deviceAdd');
     $route->any('deviceDel', 'Api\DeviceController@deviceDel');
     $route->any('deviceDetail', 'Api\DeviceController@deviceDetail');
+
+    //研发工时
+    $route->any('rdList', 'Api\DeviceController@rdList');
+    $route->any('rdEdit', 'Api\DeviceController@rdEdit');
+    $route->any('rdAdd', 'Api\DeviceController@rdAdd');
+    $route->any('rdDel', 'Api\DeviceController@rdDel');
+    $route->any('rdDetail', 'Api\DeviceController@rdDetail');
 });