request->isGet()) { $this->error('请求方法错误'); } $params = $this->request->param(); if (empty($params['workorder'])) { $this->error('工单编号不能为空'); } $list = db('工单_工艺资料') ->where('订单编号', $params['workorder']) ->field('工序编号,工序名称,工序备注') ->distinct('工序名称') ->select(); if(empty($list)){ $this->error('该工单没有大工序'); } $this->success('成功', $list); } /** * 工单部件列表 * @param workorder 工单编号 */ public function PartList() { if (!$this->request->isGet()) { $this->error('请求方法错误'); } $params = $this->request->param(); if (empty($params['workorder'])) { $this->error('工单编号不能为空'); } $list = db('工单_部件资料') ->where('work_order', $params['workorder']) ->where('del_rq', null) ->field('part_code as 部件编号,part_name as 部件名称,remark as 部件备注,part_type as 部件类型,status as 状态, sys_id as 操作人,sys_rq as 操作时间,mod_rq as 修改时间,mod_id as 修改人,id as 部件ID') ->order('part_code') ->select(); if(empty($list)){ // $this->error('该工单没有部件,请先添加部件'); } $this->success('成功', $list); } /** * 新增工单部件 * @param workorder 工单编号 * @param part_code 部件编号 * @param part_name 部件名称 * @param remark 部件备注 * @param part_type 部件类型 * @param sys_id 操作人 */ public function AddPart() { if (!$this->request->isPost()) { $this->error('请求方法错误'); } $params = $this->request->post(); if (empty($params['workorder'])) { $this->error('工单编号不能为空'); } if (empty($params['part_name'])) { $this->error('部件名称不能为空'); } // 检查是否传入了part_code if (!empty($params['part_code'])) { $code = $params['part_code']; // 检查是否存在冲突 $exists = db('工单_部件资料') ->where('work_order', $params['workorder']) ->where('part_code', '>=', $code) ->count(); if ($exists > 0) { // 如果存在冲突,将后续编号自动加1 db('工单_部件资料') ->where('work_order', $params['workorder']) ->where('part_code', '>=', $code) ->setInc('part_code'); } } else { // 如果没有传入part_code,按照原来的逻辑生成 $code = db('工单_部件资料') ->where('work_order', $params['workorder']) ->max('part_code'); $code = $code ? $code + 1 : 1; } $data = [ 'work_order' => $params['workorder'], 'part_code' => $code, 'part_name' => $params['part_name'], 'remark' => $params['remark'], 'part_type' => $params['part_type'], 'status' => 1, 'sys_id' => $params['sys_id'], 'sys_rq' => date('Y-m-d H:i:s'), ]; $result = db('工单_部件资料')->insert($data); if (!$result) { $this->error('新增失败'); } $this->success('新增成功'); } /** * 修改部件状态 * @param id 部件ID * @param status 状态 */ public function UpdatePartStatus() { if (!$this->request->isPost()) { $this->error('请求方法错误'); } $params = $this->request->post(); if (empty($params['id'])) { $this->error('部件ID不能为空'); } if (!isset($params['status'])) { $this->error('状态不能为空'); } $result = db('工单_部件资料') ->where('id', $params['id']) ->update(['status' => $params['status']]); if (!$result) { $this->error('修改失败'); } $this->success('修改成功'); } /** * 修改部件信息 * @param workorder 工单编号 * @param part_code 部件编号 * @param part_name 部件名称 * @param remark 部件备注 * @param part_type 部件类型 */ public function UpdatePartInfo() { if (!$this->request->isPost()) { $this->error('请求方法错误'); } $params = $this->request->post(); if (empty($params['part_name'])) { $this->error('部件名称不能为空'); } if (empty($params['remark'])) { $this->error('部件备注不能为空'); } if (empty($params['part_type'])) { $this->error('部件类型不能为空'); } if(empty($params['mod_id'])){ $this->error('修改人不能为空'); } if(empty($params['id'])){ $this->error('部件ID不能为空'); } $result = db('工单_部件资料') ->where('id', $params['id']) ->update([ 'part_name' => $params['part_name'], 'remark' => $params['remark'], 'part_type' => $params['part_type'], 'mod_id' => $params['mod_id'], 'mod_rq' => date('Y-m-d H:i:s'), ]); if (!$result) { $this->error('修改失败'); } $this->success('修改成功'); } /** 软删除部件信息 * @param id 部件ID */ public function DeletePart() { if (!$this->request->isPost()) { $this->error('请求方法错误'); } $params = $this->request->post(); if (empty($params['id'])) { $this->error('部件ID不能为空'); } $ids = explode(',', $params['id']); $ids = array_filter(array_map('intval', $ids)); if (empty($ids)) { $this->error('无效的部件ID'); } $result = db('工单_部件资料') ->whereIn('id', $ids) ->whereNull('del_rq') ->update(['del_rq' => date('Y-m-d H:i:s')]); if ($result === false) { $this->error('删除失败'); } if ($result === 0) { $this->error('未找到可删除的部件'); } $this->success('删除成功'); } /** * 工单工艺列表 * @param workorder 工单编号 */ public function GetProcessList() { if (!$this->request->isGet()) { $this->error('请求方法错误'); } $params = $this->request->param(); if (empty($params['workorder'])) { $this->error('工单编号不能为空'); } $list = db('工单_基础工艺资料') ->alias('a') ->join('工单_部件资料 b', 'a.part_code = b.part_code and a.work_order = b.work_order', 'LEFT') ->where('a.del_rq', null) ->where('a.work_order', $params['workorder']) ->where('b.del_rq', null) ->field('a.id,a.part_code as 部件编号, IFNULL(b.part_name, "") as 部件名称, a.process_code as 工艺编号, a.process_name as 工艺名称, a.big_process as 大工艺, a.standard_hour as 标准工时, a.standard_score as 标准公分, a.remark as 备注, a.coefficient as 系数, a.sys_id as 系统人, a.sys_rq as 系统时间, a.mod_id as 修改人, a.mod_rq as 修改时间') ->order('a.id') ->select(); $this->success('成功', $list); } /** * 工单工艺列表 * @param workorder 工单编号 */ // public function GetProcessList() // { // if (!$this->request->isGet()) { // $this->error('请求方法错误'); // } // $params = $this->request->param(); // if (empty($params['workorder'])) { // $this->error('工单编号不能为空'); // } // $list = db('工单_基础工艺资料') // ->alias('a') // ->join('工单_部件资料 b', 'a.part_code = b.part_code and a.work_order = b.work_order') // ->where('a.del_rq', null) // ->where('a.work_order', $params['workorder']) // ->where('b.del_rq', null) // ->field('a.id,a.part_code as 部件编号,b.part_name as 部件名称,a.process_code as 序号, // a.process_name as 工序名称,a.big_process as 大工艺,a.standard_hour as 秒,a.standard_minutes as 分钟, // a.standard_score as 标准公分,a.money as 金额,a.remark as 备注,a.coefficient as 难度系数,a.sys_id as 操作人员, // a.sys_rq as 系统时间,a.mod_id as 修改人,a.mod_rq as 修改时间') // ->order('process_code') // ->select(); // $this->success('成功', $list); // } /** * 获取部件列表 * @param workorder 工单编号 */ public function getpartlist() { if(!$this->request->isGet()){ $this->error('请求方法错误'); } $params = $this->request->get(); if (empty($params['workorder'])) { $this->error('工单编号不能为空'); } $list = db('工单_部件资料') ->where('work_order', $params['workorder']) ->where('del_rq', null) ->field('part_code as 部件编号,part_name as 部件名称') ->order('part_code') ->select(); if(empty($list)){ $this->error('该工单没有部件,请先添加部件'); } $this->success('成功', $list); } /** * 新增工单工艺资料 * @param workorder 工单编号 * @param part_code 部件编号 * @param process_code 工艺编号 * @param process_name 工艺名称 * @param big_process 大工艺 * @param standard_hour 标准工时 * @param standard_score 标准公分 * @param sys_id 系统人 * @param coefficient 系数 * @param remark 备注 */ public function AddProcess() { if (!$this->request->isPost()) { $this->error('请求方法错误'); } $params = $this->request->post(); if (empty($params['workorder'])) { $this->error('工单编号不能为空'); } if (empty($params['part_code'])) { $this->error('部件编号不能为空'); } if (empty($params['process_name'])) { $this->error('工艺名称不能为空'); } if (empty($params['big_process'])) { $this->error('大工艺不能为空'); } if (empty($params['standard_hour'])) { $this->error('标准工时不能为空'); } if (empty($params['standard_score'])) { $this->error('标准公分不能为空'); } if (empty($params['coefficient'])) { $params['coefficient'] = 1; } if (empty($params['sys_id'])) { $this->error('系统人不能为空'); } // 检查是否传入了process_code if (!empty($params['process_code'])) { $code = $params['process_code']; // 检查是否存在冲突 $exists = db('工单_基础工艺资料') ->where('work_order', $params['workorder']) ->where('part_code', $params['part_code']) ->where('process_code', '>=', $code) ->count(); if ($exists > 0) { // 如果存在冲突,将后续编号自动加1 db('工单_基础工艺资料') ->where('work_order', $params['workorder']) ->where('part_code', $params['part_code']) ->where('process_code', '>=', $code) ->setInc('process_code'); } } else { // 如果没有传入process_code,按照原来的逻辑生成 $code = db('工单_基础工艺资料') ->where('work_order', $params['workorder']) ->where('part_code', $params['part_code']) ->max('process_code'); $code = $code ? $code + 1 : 1; } $data = [ 'work_order' => $params['workorder'], 'part_code' => $params['part_code'], 'process_code' => $code, 'process_name' => $params['process_name'], 'big_process' => $params['big_process'], 'standard_hour' => $params['standard_hour'], 'standard_score' => $params['standard_score'], 'coefficient' => $params['coefficient'], 'remark' => $params['remark'], 'sys_id' => $params['sys_id'], 'sys_rq' => date('Y-m-d H:i:s'), ]; $result = db('工单_基础工艺资料')->insert($data); if ($result === false) { $this->error('新增失败'); } $this->success('新增成功'); } /** * 更新工单工艺资料 * @param id 工艺ID * @param mod_id 修改人 * @param process_name 工艺名称 * @param big_process 大工艺 * @param standard_hour 标准工时 * @param standard_score 标准公分 * @param coefficient 系数 * @param remark 备注 */ public function UpdateProcess() { if (!$this->request->isPost()) { $this->error('请求方法错误'); } $params = $this->request->post(); if (empty($params['id'])) { $this->error('工艺ID不能为空'); } if (empty($params['mod_id'])) { $this->error('修改人不能为空'); } if (empty($params['process_name'])) { $this->error('工艺名称不能为空'); } if (empty($params['big_process'])) { $this->error('大工艺不能为空'); } if (empty($params['standard_hour'])) { $this->error('标准工时不能为空'); } if (empty($params['standard_score'])) { $this->error('标准公分不能为空'); } if (!isset($params['coefficient']) || $params['coefficient'] === '') { $params['coefficient'] = 1; } $data = [ 'process_name' => $params['process_name'], 'big_process' => $params['big_process'], 'standard_hour' => $params['standard_hour'], 'standard_score' => $params['standard_score'], 'coefficient' => $params['coefficient'], 'remark' => $params['remark'], 'mod_id' => $params['mod_id'], 'mod_rq' => date('Y-m-d H:i:s'), ]; $result = db('工单_基础工艺资料') ->where('id', intval($params['id'])) ->whereNull('del_rq') ->update($data); if ($result === false) { $this->error('更新失败'); } if ($result === 0) { $this->error('未找到可更新的工艺或数据无变化'); } $this->success('更新成功'); } /** * 工单工艺资料软删除 * @param id 工艺ID */ public function DeleteProcess() { if (!$this->request->isPost()) { $this->error('请求方法错误'); } $params = $this->request->post(); if (empty($params['id'])) { $this->error('工艺ID不能为空'); } $ids = explode(',', $params['id']); $ids = array_filter(array_map('intval', $ids)); if (empty($ids)) { $this->error('无效的工艺ID'); } $result = db('工单_基础工艺资料') ->whereIn('id', $ids) ->whereNull('del_rq') ->update(['del_rq' => date('Y-m-d H:i:s')]); if ($result === false) { $this->error('删除失败'); } if ($result === 0) { $this->error('未找到可删除的工艺'); } $this->success('删除成功'); } /** * 工单工艺复制 * @param workorder 工单编号 * @param product_code 产品编号 * @param sys_id 操作人 * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException * @throws \think\exception\PDOException */ public function workorderprocessCopy() { if (!$this->request->isGet()) { $this->error('请求方法错误'); } $params = $this->request->param(); if (empty($params['workorder'])) { $this->error('工单编号不能为空'); } if (empty($params['product_code'])) { $this->error('产品编号不能为空'); } if (empty($params['sys_id'])) { $this->error('操作人不能为空'); } $now = date('Y-m-d H:i:s'); $productParts = db('产品_部件资料') ->where('product_code', $params['product_code']) ->where('mod_rq', null) ->field('part_sort as part_code,part_name') ->select(); if (empty($productParts)) { $this->error('该产品没有有效的部件'); } $productProcesses = db('产品_工艺资料') ->where('product_code', $params['product_code']) ->field('part_sort as part_code,part_name,gy_sort as process_code,gy_name as process_name, big_process,standard_hour,standard_score,difficulty_coef as coefficient') ->select(); if (empty($productProcesses)) { $this->error('该产品没有工艺'); } $workOrderParts = []; //配置工单部件数据 foreach ($productParts as $value) { $workOrderParts[] = [ 'work_order' => $params['workorder'], 'part_code' => $value['part_code'], 'part_name' => $value['part_name'], 'part_type' => '', 'remark' => '', 'status' => 1, 'sys_id' => $params['sys_id'], 'sys_rq' => $now, ]; } $workOrderProcesses = []; //配置工单工艺数据 foreach ($productProcesses as $value) { $workOrderProcesses[] = [ 'work_order' => $params['workorder'], 'part_code' => $value['part_code'], 'part_name' => $value['part_name'], 'process_code' => $value['process_code'], 'process_name' => $value['process_name'], 'big_process' => $value['big_process'], 'standard_hour' => $value['standard_hour'], 'standard_score' => $value['standard_score'], 'coefficient' => $value['coefficient'], 'remark' => '', 'sys_id' => $params['sys_id'], 'sys_rq' => $now, ]; } Db::startTrans(); try { //删除数据库现有的工单部件数据 Db::name('工单_部件资料')->where('work_order', $params['workorder'])->delete(); //删除数据库现有的工单工艺数据 Db::name('工单_基础工艺资料')->where('work_order', $params['workorder'])->delete(); //插入工单部件数据 $partInsertCount = Db::name('工单_部件资料')->insertAll($workOrderParts); if ($partInsertCount === false) { throw new \Exception('工单部件复制失败'); } //插入工单工艺数据 $processInsertCount = Db::name('工单_基础工艺资料')->insertAll($workOrderProcesses); if ($processInsertCount === false) { throw new \Exception('工单工艺复制失败'); } //提交事务 Db::commit(); } catch (\Exception $e) { Db::rollback(); $this->error('复制失败'); } $this->success('复制成功'); } /** * 查询产品类型 * @ApiMethod (GET) * @param string $workorder 工单编号 * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function getproducttype() { if(!$this->request->isGet()){ $this->error('请求方法错误'); } $params = $this->request->get(); if (empty($params['product'])) { $this->error('产品类型不能为空'); } $list = db('产品_基本资料') ->where('product_type', $params['product']) ->where('status', 1) ->field('product_code as 产品编号,product_type as 产品类型,product_name as 产品名称') ->select(); if(empty($list)){ $this->error('该产品类型没有产品'); } $this->success('成功', $list); } /** * 工单工艺排序 * @param workorder 工单编号 * @param part_code 部件编号 * @param process_code 工艺编号 * @param process_name 工艺名称 * @param big_process 大工艺 * @param standard_hour 标准工时 * @param standard_score 标准公分 * @param coefficient 系数 * @param remark 备注 */ public function sortProcess() { if (!$this->request->isPost()) { $this->error('请求方法错误'); } $params = $this->request->post(); if (empty($params)) { $this->error('参数不能为空'); } if (!is_array($params)) { $this->error('参数格式错误'); } Db::startTrans(); try { foreach ($params as $value) { if (empty($value['id'])) { throw new \Exception('缺少工艺ID'); } if (!isset($value['process_code']) || $value['process_code'] === '') { throw new \Exception('缺少工艺编号'); } $result = db('工单_基础工艺资料') ->where('id', intval($value['id'])) ->whereNull('del_rq') ->update(['process_code' => intval($value['process_code'])]); if ($result === false) { throw new \Exception('排序失败'); } } Db::commit(); } catch (\Exception $e) { Db::rollback(); $this->error($e->getMessage()); } $this->success('排序成功'); } /** * 工单工艺excel导入 * @param workorder 工单编号 * */ public function importProcess() { if (!$this->request->isPost()) { $this->error('请求方法错误'); } $params = $this->request->post(); if (empty($params['workorder'])) { $this->error('工单编号不能为空'); } if (empty($params['sys_id'])) { $this->error('操作人不能为空'); } $file = $this->request->file('file'); if (!$file) { $this->error('文件不能为空'); } $uploadDir = ROOT_PATH . 'public' . DS . 'uploads'; $info = $file->validate(['size' => 1024 * 1024 * 10, 'ext' => 'xlsx,xls,csv,txt']) ->move($uploadDir); if (!$info) { $this->error($file->getError()); } $filePath = $uploadDir . DS . $info->getSaveName(); // 定额表:上方为标题与元数据,第 5 行表头,第 6 行起为数据 $data = $this->readExcel($filePath, 5, 6); if (empty($data)) { $this->error('文件内容为空'); } $seenSeq = []; foreach ($data as $row) { $seq = isset($row['序号']) ? $row['序号'] : null; if ($seq === null || $seq === '') { continue; } $seqKey = is_scalar($seq) ? (string)$seq : $seq; if (isset($seenSeq[$seqKey])) { $this->error('工序序号重复,请重新调整之后再上传'); } $seenSeq[$seqKey] = true; } $now = date('Y-m-d H:i:s'); $partNameToCode = []; $nextPartCode = 0; foreach ($data as $row) { $partName = isset($row['部件名称']) ? $row['部件名称'] : ''; if ($partName === '' || isset($partNameToCode[$partName])) { continue; } $partNameToCode[$partName] = ++$nextPartCode; } $workOrderParts = []; $i = 0; foreach ($partNameToCode as $partName => $partCode) { $workOrderParts[$i++] = [ 'work_order' => $params['workorder'], 'part_name' => $partName, 'part_code' => $partCode, 'part_type' => '', 'remark' => '', 'status' => 1, 'sys_id' => $params['sys_id'], 'sys_rq' => $now, ]; } Db::startTrans(); try { //删除数据库现有的工单部件数据 Db::name('工单_部件资料')->where('work_order', $params['workorder'])->delete(); //插入工单部件数据 $partInsertCount = Db::name('工单_部件资料')->insertAll($workOrderParts); if ($partInsertCount === false) { throw new \Exception('工单部件导入失败'); } //提交事务 Db::commit(); } catch (\Exception $e) { Db::rollback(); $this->error($e->getMessage()); } $workOrderProcesses = []; foreach ($data as $value) { $name = isset($value['部件名称']) ? $value['部件名称'] : ''; $partCode = ($name !== '' && isset($partNameToCode[$name])) ? $partNameToCode[$name] : ''; $workOrderProcesses[] = [ 'work_order' => $params['workorder'], 'part_code' => $partCode, 'part_name' => $name, 'process_code' => $value['序号'], 'process_name' => $value['工序名称'], 'big_process' => $value['生产工序'], 'standard_hour' => $value['秒'], 'standard_minutes' => $value['分'], 'standard_score' => $value['定额分'], 'money' => $value['金额'], 'coefficient' => $value['难度系数'], 'remark' => isset($value['备注']) ? $value['备注'] : '', 'sys_id' => $params['sys_id'], 'sys_rq' => $now, ]; } Db::startTrans(); try { //删除数据库现有的工单工艺数据 Db::name('工单_基础工艺资料')->where('work_order', $params['workorder'])->delete(); //插入工单工艺数据 $processInsertCount = Db::name('工单_基础工艺资料')->insertAll($workOrderProcesses); if ($processInsertCount === false) { throw new \Exception('工单工艺导入失败'); } //提交事务 Db::commit(); } catch (\Exception $e) { Db::rollback(); $this->error($e->getMessage()); } $this->success('导入成功'); } /** * 读取 Excel/CSV(PhpSpreadsheet) * * @param string $filePath * @param int $headerRowNum 表头所在行(1 起计,如定额表为第 5 行) * @param int $dataStartRowNum 首条数据行(1 起计,须大于表头行,如第 6 行) * @return array 每行一条关联数组,键为表头单元格文本 */ public function readExcel($filePath, $headerRowNum = 5, $dataStartRowNum = 6) { if (!is_file($filePath) || !is_readable($filePath)) { return []; } if ($dataStartRowNum <= $headerRowNum) { return []; } $spreadsheet = IOFactory::load($filePath); $sheet = $spreadsheet->getActiveSheet(); $rows = $sheet->toArray(); if (empty($rows)) { return []; } $headerIdx = $headerRowNum - 1; $dataStartIdx = $dataStartRowNum - 1; if (!isset($rows[$headerIdx])) { return []; } $headers = array_map(function ($cell) { return is_string($cell) ? trim($cell) : $cell; }, $rows[$headerIdx]); $data = []; $rowCount = count($rows); for ($r = $dataStartIdx; $r < $rowCount; $r++) { $row = $rows[$r]; $hasCell = false; foreach ($row as $cell) { if ($cell !== null && $cell !== '') { $hasCell = true; break; } } if (!$hasCell) { continue; } $assoc = []; foreach ($headers as $i => $key) { if ($key === '' || $key === null) { continue; } $assoc[$key] = array_key_exists($i, $row) ? $row[$i] : null; } $data[] = $assoc; } return $data; } /** * 获取工单信息和工单制造工分 * @param workorder 工单编号 * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function getWorkOrderInfo() { if (!$this->request->isGet()) { $this->error('请求方法错误'); } $params = $this->request->param(); if (empty($params['workorder'])) { $this->error('工单编号不能为空'); } $where = [ '订单编号' => $params['workorder'], 'Mod_rq' => null, ]; $workOrderInfo = Db::table('工单_基本资料') ->where($where) ->field('订单编号,客户编号,生产款号,款式,落货日期,审核日期,接单日期,审核,订单数量,计划制造工分') ->find(); if (empty($workOrderInfo)) { $this->error('工单不存在'); } $this->success('成功', $workOrderInfo); } /** * 获取工单工艺信息 * @param workorder 工单编号 * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function getWorkOrderProcess() { if (!$this->request->isGet()) { $this->error('请求方法错误'); } $params = $this->request->param(); if (empty($params['workorder'])) { $this->error('工单编号不能为空'); } $where = [ 'work_order' => $params['workorder'], 'del_rq' => null, ]; $workOrderProcess = Db::table('工单_基础工艺资料') ->where($where) ->field('id,part_code as 部件编号,part_name as 部件名称,process_code as 工序编号,process_name as 工序名称, big_process as 大工序,standard_hour as 秒,standard_minutes as 分,standard_score as 定额分,money as 金额, coefficient as 难度系数,remark as 备注,status as 状态') ->select(); if (empty($workOrderProcess)) { $this->error('工单工艺不存在'); } $this->success('成功', $workOrderProcess); } /** * 修改工单计划制造工分 * @param id 工单Uniqid或订单编号 * @param number 计划制造工分 * @param sys_id 操作人 */ public function updateWorkOrderPlanManufacture() { if (!$this->request->isPost()) { $this->error('请求方法错误'); } $params = $this->request->post(); if (empty($params['id'])) { $this->error('工单ID不能为空'); } if (!isset($params['number']) || $params['number'] === '') { $this->error('制造工分不能为空'); } if (empty($params['sys_id'])) { $this->error('操作人不能为空'); } $workOrder = Db::table('工单_基本资料') ->where('Uniqid', $params['id']) ->where('Mod_rq', null) ->field('Uniqid,订单编号,计划制造工分') ->find(); if (empty($workOrder)) { $workOrder = Db::table('工单_基本资料') ->where('订单编号', $params['id']) ->where('Mod_rq', null) ->field('Uniqid,订单编号,计划制造工分') ->find(); } if (empty($workOrder)) { $this->error('工单不存在'); } $oldValue = $workOrder['计划制造工分']; $newValue = $params['number']; if ((string)$oldValue === (string)$newValue) { $this->error('计划制造工分未发生变化'); } $operTime = date('Y-m-d H:i:s'); $logData = [ 'order_no' => $workOrder['订单编号'], 'change_field' => '计划制造工分', 'old_value' => $oldValue === null ? '' : (string)$oldValue, 'new_value' => (string)$newValue, 'oper_type' => '修改工单计划制造工分', 'oper_user_name' => $params['sys_id'], 'oper_time' => $operTime, ]; Db::startTrans(); try { $updateResultSql = Db::table('工单_基本资料') ->where('Uniqid', $workOrder['Uniqid']) ->fetchSql(true) ->update(['计划制造工分' => $newValue]); $updateResult = Db::query($updateResultSql); if ($updateResult === false) { throw new \Exception('更新工单失败'); } $logResult = Db::name('work_order_operation_log')->insert($logData); if ($logResult === false) { throw new \Exception('写入操作日志失败'); } Db::commit(); } catch (\Exception $e) { Db::rollback(); $this->error('修改失败'); } $this->success('修改成功'); } }