Browse Source

小高薪

cqp 3 months ago
parent
commit
73c9063bde

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

@@ -0,0 +1,76 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+use App\Service\DeviceService;
+use Illuminate\Http\Request;
+
+class DeviceController extends BaseController
+{
+    public function deviceEdit(Request $request)
+    {
+        $service = new DeviceService();
+        $user = $request->userData;
+        list($status,$data) = $service->deviceEdit($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function deviceAdd(Request $request)
+    {
+        $service = new DeviceService();
+        $user = $request->userData;
+        list($status,$data) = $service->deviceAdd($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+    public function deviceDel(Request $request)
+    {
+        $service = new DeviceService();
+        $user = $request->userData;
+        list($status,$data) = $service->deviceDel($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+    public function deviceList(Request $request)
+    {
+        $service = new DeviceService();
+        $user = $request->userData;
+        list($status,$data) = $service->deviceList($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function deviceDetail(Request $request)
+    {
+        $service = new DeviceService();
+        $user = $request->userData;
+        list($status,$data) = $service->deviceDetail($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+}

+ 143 - 0
app/Http/Controllers/Api/ItemController.php

@@ -0,0 +1,143 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+use App\Service\ItemService;
+use Illuminate\Http\Request;
+
+class ItemController extends BaseController
+{
+    public function itemEdit(Request $request)
+    {
+        $service = new ItemService();
+        $user = $request->userData;
+        list($status,$data) = $service->itemEdit($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function itemAdd(Request $request)
+    {
+        $service = new ItemService();
+        $user = $request->userData;
+        list($status,$data) = $service->itemAdd($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+    public function itemDel(Request $request)
+    {
+        $service = new ItemService();
+        $user = $request->userData;
+        list($status,$data) = $service->itemDel($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+    public function itemList(Request $request)
+    {
+        $service = new ItemService();
+        $user = $request->userData;
+        list($status,$data) = $service->itemList($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function itemDetail(Request $request)
+    {
+        $service = new ItemService();
+        $user = $request->userData;
+        list($status,$data) = $service->itemDetail($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function calendarEdit(Request $request)
+    {
+        $service = new ItemService();
+        $user = $request->userData;
+        list($status,$data) = $service->calendarEdit($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function calendarAdd(Request $request)
+    {
+        $service = new ItemService();
+        $user = $request->userData;
+        list($status,$data) = $service->calendarAdd($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+    public function calendarDel(Request $request)
+    {
+        $service = new ItemService();
+        $user = $request->userData;
+        list($status,$data) = $service->calendarDel($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+    public function calendarList(Request $request)
+    {
+        $service = new ItemService();
+        $user = $request->userData;
+        list($status,$data) = $service->calendarList($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function calendarDetail(Request $request)
+    {
+        $service = new ItemService();
+        $user = $request->userData;
+        list($status,$data) = $service->calendarDetail($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+}

+ 29 - 0
app/Model/Device.php

@@ -0,0 +1,29 @@
+<?php
+
+namespace App\Model;
+
+class Device extends DataScopeBaseModel
+{
+    protected $table = "device"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+    const employee_column = "crt_id";
+
+    const Use = [
+        1 => '启用',
+        2 => '禁用',
+    ];
+
+    public static $field = ['title','id','code','crt_id','crt_time','size','mark','is_use','type','power', 'in_time', 'original_value', 'initial_value'];
+
+    const type_one = 1;
+    const type_two = 2;
+    const type_three = 3;
+
+    public static $type = [
+        self::type_one => '电子设备',
+        self::type_two => '机器设备',
+        self::type_three => '办公设备',
+    ];
+}

+ 14 - 0
app/Model/DeviceDetails.php

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

+ 24 - 0
app/Model/Item.php

@@ -0,0 +1,24 @@
+<?php
+
+namespace App\Model;
+
+class Item extends DataScopeBaseModel
+{
+    protected $table = "item"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+    const employee_column = "crt_id";
+
+    public static $field = ['title','id','code','start_time','end_time','mark','crt_id','crt_time','state'];
+
+    const TYPE_ONE = 1; // 在职
+    const TYPE_TWO = 2; // 离职
+    const TYPE_THREE = 3; // 休假
+    const State_Type = [
+        self::TYPE_ONE => '待开始',
+        self::TYPE_TWO => '进行中',
+        self::TYPE_THREE => '已完成',
+    ];
+
+}

+ 19 - 0
app/Model/ItemDetails.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+class ItemDetails extends DataScopeBaseModel
+{
+    protected $guarded = [];
+    protected $table = "item_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 => '研发设备',
+    ];
+}

+ 182 - 0
app/Service/DeviceService.php

@@ -0,0 +1,182 @@
+<?php
+
+namespace App\Service;
+
+use App\Model\Employee;
+use App\Model\Device;
+use Illuminate\Support\Facades\DB;
+
+class DeviceService extends Service
+{
+    public function deviceEdit($data,$user){
+        list($status,$msg) = $this->deviceRule($data, $user, false);
+        if(!$status) return [$status,$msg];
+
+        try {
+            DB::beginTransaction();
+
+            $model = Device::where('id',$data['id'])->first();
+            $model->code = $data['code'] ?? '';
+            $model->title = $data['title'] ?? '';
+            $model->size = $data['size'] ?? '';
+            $model->mark = $data['mark'] ?? '';
+            $model->is_use = $data['is_use'] ?? 0;
+            $model->type = $data['type'] ?? 0;
+            $model->in_time = $data['in_time'] ?? 0;
+            $model->power = $data['power'] ?? 0;
+            $model->original_value = $data['original_value'] ?? 0;
+            $model->initial_value = $data['initial_value'] ?? 0;
+            $model->save();
+
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
+
+        return [true, ''];
+    }
+
+    public function deviceAdd($data,$user){
+        list($status,$msg) = $this->deviceRule($data, $user);
+        if(!$status) return [$status,$msg];
+
+        try {
+            DB::beginTransaction();
+
+            $model = new Device();
+            $model->code = $data['code'] ?? '';
+            $model->title = $data['title'] ?? '';
+            $model->size = $data['size'] ?? '';
+            $model->mark = $data['mark'] ?? '';
+            $model->is_use = $data['is_use'] ?? 0;
+            $model->type = $data['type'] ?? 0;
+            $model->in_time = $data['in_time'] ?? 0;
+            $model->power = $data['power'] ?? 0;
+            $model->original_value = $data['original_value'] ?? 0;
+            $model->initial_value = $data['initial_value'] ?? 0;
+            $model->top_depart_id = $data['top_depart_id'] ?? 0;
+            $model->crt_id = $user['id'];
+            $model->save();
+
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
+
+        return [true, ''];
+    }
+
+    public function deviceDel($data){
+        if($this->isEmpty($data,'id')) return [false,'请选择数据'];
+
+        try {
+            DB::beginTransaction();
+            $time = time();
+
+            Device::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 deviceDetail($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['in_time'] = $customer['in_time'] ? date("Y-m-d",$customer['in_time']): '';
+
+        return [true, $customer];
+    }
+
+    public function deviceCommon($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['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
+        if(! empty($data['code'])) $model->where('code', 'LIKE', '%'.$data['code'].'%');
+        if(! empty($data['id'])) $model->whereIn('id', $data['id']);
+        if(! empty($data['is_use'])) $model->where('is_use', $data['is_use']);
+        if(! empty($data['type'])) $model->where('type', $data['type']);
+        if(! empty($data['crt_id'])) $model->whereIn('crt_id', $data['crt_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]);
+        }
+
+        return $model;
+    }
+
+    public function deviceList($data,$user){
+        $model = $this->deviceCommon($data, $user);
+        $list = $this->limit($model,'',$data);
+        $list = $this->fillData($list);
+
+        return [true, $list];
+    }
+
+    public function deviceRule(&$data, $user, $is_add = true){
+        if(empty($data['title'])) return [false, '设备名称不能为空'];
+        if(empty($data['code'])) return [false, '资产编码不能为空'];
+        if(empty($data['is_use'])) return [false, '是否启用不能为空'];
+        if(! isset(Device::Use[$data['is_use']])) return [false, '是否启用错误'];
+        if(empty($data['type'])) return [false, '固定资产类型不能为空'];
+        if(! isset(Device::$type[$data['type']])) return [false, '固定资产类型错误'];
+        if(! empty($data['in_time'])) $data['in_time'] = $this->changeDateToDate($data['in_time']);
+        if(! empty($data['original_value'])){
+            $res = $this->checkNumber($data['original_value'],0,'positive');
+            if(! $res['valid']) return [false,'原始价值:' . $res['error']];
+        }
+        $res = $this->checkNumber($data['initial_value'],0,'positive');
+        if(! $res['valid']) return [false,'期初价值:' . $res['error']];
+        $data['top_depart_id'] = $user['top_depart_id'];
+
+        if($is_add){
+            $bool = Device::where('code',$data['code'])
+                ->where('top_depart_id', $data['top_depart_id'])
+                ->where('del_time',0)
+                ->exists();
+        }else{
+            if(empty($data['id'])) return [false,'ID不能为空'];
+            $bool = Device::where('code',$data['code'])
+                ->where('top_depart_id', $data['top_depart_id'])
+                ->where('id','<>',$data['id'])
+                ->where('del_time',0)
+                ->exists();
+        }
+        if($bool) return [false, '资产编码已存在'];
+
+        return [true, ''];
+    }
+
+    public function fillData($data){
+        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'] = Device::Use[$value['is_use']] ?? '';
+            $data['data'][$key]['type_title'] = Device::$type[$value['type']] ?? '';
+        }
+
+        return $data;
+    }
+}

+ 292 - 0
app/Service/ItemService.php

@@ -0,0 +1,292 @@
+<?php
+
+namespace App\Service;
+
+use App\Model\Device;
+use App\Model\Employee;
+use App\Model\Item;
+use App\Model\ItemDetails;
+use Illuminate\Support\Facades\DB;
+
+class ItemService extends Service
+{
+    public function itemEdit($data,$user){
+        list($status,$msg) = $this->itemRule($data, $user, false);
+        if(!$status) return [$status,$msg];
+
+        try {
+            DB::beginTransaction();
+
+            $model = Item::where('id',$data['id'])->first();
+            $model->code = $data['code'] ?? '';
+            $model->title = $data['title'] ?? '';
+            $model->mark = $data['mark'] ?? "";
+            $model->start_time = $data['start_time'] ?? 0;
+            $model->end_time = $data['end_time'] ?? 0;
+            $model->state = $data['state'] ?? 0;
+            $model->save();
+
+            $time = time();
+            ItemDetails::where('del_time',0)
+                ->where('item_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 itemAdd($data,$user){
+        list($status,$msg) = $this->itemRule($data, $user);
+        if(!$status) return [$status,$msg];
+
+        try {
+            DB::beginTransaction();
+
+            $model = new Item();
+            $model->code = $data['code'] ?? '';
+            $model->title = $data['title'] ?? '';
+            $model->mark = $data['mark'] ?? "";
+            $model->start_time = $data['start_time'] ?? 0;
+            $model->end_time = $data['end_time'] ?? 0;
+            $model->state = $data['state'] ?? 0;
+            $model->crt_id = $user['id'];
+            $model->top_depart_id = $data['top_depart_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['man_list'])){
+            $unit = [];
+            foreach ($data['man_list'] as $value){
+                $unit[] = [
+                    'item_id' => $id,
+                    'type' => $value['type'],
+                    'data_id' => $value['data_id'],
+                    'crt_time' => $time,
+                ];
+            }
+            if(! empty($unit)) ItemDetails::insert($unit);
+        }
+
+        if(! empty($data['device_list'])){
+            $receipt = [];
+            foreach ($data['device_list'] as $value){
+                $receipt[] = [
+                    'item_id' => $id,
+                    'type' => $value['type'],
+                    'data_id' => $value['data_id'],
+                    'crt_time' => $time,
+                ];
+            }
+            if(! empty($receipt)) ItemDetails::insert($receipt);
+        }
+    }
+
+    private function getDetail($id){
+        $data = ItemDetails::where('del_time',0)
+            ->where('item_id', $id)
+            ->get()->toArray();
+
+        $id = $id2 = [];
+        foreach ($data as $value){
+            if($value['type'] == ItemDetails::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', $id2)->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' => $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 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,'请选择数据!'];
+
+        try {
+            DB::beginTransaction();
+            $time = time();
+
+            Item::where('del_time',0)
+                ->whereIn('id',$data['id'])
+                ->update(['del_time' => $time]);
+
+            ItemDetails::where('del_time',0)
+                ->whereIn('item_id', $data['id'])
+                ->update(['del_time' => $time]);
+
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
+
+        return [true, ''];
+    }
+
+    public function itemDetail($data, $user){
+        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
+        $customer = Item::where('del_time',0)
+            ->where('id',$data['id'])
+            ->first();
+        if(empty($customer)) return [false,'项目不存在或已被删除'];
+        $customer = $customer->toArray();
+        $customer['start_time']  = ! empty($customer['start_time']) ? date("Y-m-d", $customer['start_time']) : "";
+        $customer['end_time']  = ! empty($customer['end_time']) ? date("Y-m-d", $customer['end_time']) : "";
+        $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['state_title'] = Employee::State_Type[$customer['state']] ?? '';
+
+        $details = $this->getDetail($data['id']);
+        $customer = array_merge($customer, $details);
+
+        return [true, $customer];
+    }
+
+    public function itemCommon($data,$user, $field = []){
+        if(empty($field)) $field = Item::$field;
+
+        $model = Item::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['code'])) $model->where('code', 'LIKE', '%'.$data['code'].'%');
+        if(! empty($data['id'])) $model->whereIn('id', $data['id']);
+        if(! empty($data['state'])) $model->where('state', $data['state']);
+        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 itemList($data,$user){
+        $model = $this->itemCommon($data, $user);
+        $list = $this->limit($model,'',$data);
+        $list = $this->fillData($list);
+
+        return [true, $list];
+    }
+
+    public function itemRule(&$data, $user, $is_add = true){
+        if(empty($data['code'])) return [false, '项目编码不能为空'];
+        if(empty($data['title'])) return [false, '项目名称不能为空'];
+        if(! empty($data['start_time'])) $data['start_time'] = $this->changeDateToDate($data['start_time']);
+        if(! empty($data['end_time'])) $data['end_time'] = $this->changeDateToDate($data['end_time'],true);
+        $isMonthEnd = date('j', $data['end_time']) == date('t', $data['end_time']);
+        if(! $isMonthEnd) return [false, '项目结束日期必须是当月最后一天'];
+        if(empty($data['state'])) return [false, '项目状态不能为空'];
+        if(! isset(Item::State_Type[$data['state']])) return [false, '项目状态不存在'];
+        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, '人员不能为空'];
+        }
+        list($status, $msg) = $this->checkArrayRepeat($data['man_list'],'data_id','人员');
+        if(! $status) return [false, $msg];
+        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['device_list'],'data_id','设备');
+        if(! $status) return [false, $msg];
+        $data['top_depart_id'] = $user['top_depart_id'];
+
+        if($is_add){
+            $bool = Item::where('code',$data['code'])
+                ->where('top_depart_id', $data['top_depart_id'])
+                ->where('del_time',0)
+                ->exists();
+        }else{
+            if(empty($data['id'])) return [false,'ID不能为空'];
+            $bool = Item::where('code',$data['code'])
+                ->where('top_depart_id', $data['top_depart_id'])
+                ->where('id','<>',$data['id'])
+                ->where('del_time',0)
+                ->exists();
+        }
+        if($bool) return [false, '项目编码已存在'];
+
+        return [true, ''];
+    }
+
+    public function fillData($data){
+        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]['start_time'] = $value['start_time'] ? date('Y-m-d',$value['start_time']) : '';
+            $data['data'][$key]['end_time'] = $value['end_time'] ? date('Y-m-d',$value['end_time']) : '';
+            $data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? '';
+            $data['data'][$key]['state_title'] = Item::State_Type[$value['state']] ?? "";
+        }
+
+        return $data;
+    }
+}

+ 15 - 0
app/Service/Service.php

@@ -431,4 +431,19 @@ class Service
     function isValidPhone($phone) {
         return preg_match('/^1(3\d|4[5-9]|5[0-35-9]|6[5-7]|7[0-8]|8\d|9[0-35-9])\d{8}$/', $phone);
     }
+
+    public function checkArrayRepeat($data, $column, $title = ""){
+        $ids = array_column($data, $column);
+
+        // 检查空值
+        if (in_array('', $ids, true) || in_array(null, $ids, true)) {
+            return [false, $title . '不能为空'];
+        }
+        // 检查重复
+        if (count($ids) !== count(array_unique($ids))) {
+            return [false, $title . '不能重复'];
+        }
+
+        return [true, ''];
+    }
 }

+ 7 - 0
routes/api.php

@@ -75,5 +75,12 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('deviceAdd', 'Api\DeviceController@deviceAdd');
     $route->any('deviceDel', 'Api\DeviceController@deviceDel');
     $route->any('deviceDetail', 'Api\DeviceController@deviceDetail');
+
+    //项目
+    $route->any('itemList', 'Api\ItemController@itemList');
+    $route->any('itemEdit', 'Api\ItemController@itemEdit');
+    $route->any('itemAdd', 'Api\ItemController@itemAdd');
+    $route->any('itemDel', 'Api\ItemController@itemDel');
+    $route->any('itemDetail', 'Api\ItemController@itemDetail');
 });