Răsfoiți Sursa

操作日志优化、数据透视表优化

qiuenguang 11 luni în urmă
părinte
comite
bd1e90eb85
2 a modificat fișierele cu 414 adăugiri și 135 ștergeri
  1. 91 89
      application/api/controller/Decision.php
  2. 323 46
      application/api/controller/WorkOrder.php

+ 91 - 89
application/api/controller/Decision.php

@@ -327,7 +327,13 @@ class Decision extends Api
     }
 
 
-    //工序产出率月度统计报表
+    /**
+     * 工序产出率月度统计报表
+     * @return void
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @throws \think\exception\DbException
+     */
     public function ProcessOutputRate()
     {
         if ($this->request->isGet() === false){
@@ -461,107 +467,103 @@ class Decision extends Api
         $this->success('成功',$data);
     }
 
-    //数据透视表
+    /**
+     * 数据透视表
+     * @return null
+     * @throws \think\Exception
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @throws \think\exception\DbException
+     */
     public function PoductData()
     {
-        if ($this->request->isGet() === false){
+        if (!$this->request->isGet()) {
             $this->error('请求错误');
         }
+
         $param = $this->request->param();
-        if (empty($param) || !isset($param['year'])){
+        if (empty($param['year'])) {
             $this->error('参数错误');
         }
-        $total = \db('工单_质量考核汇总')
-            ->where('sys_ny', 'like', $param['year'] . '%')
-            ->where('工序名称','not like','%机检%')
-            ->where('工序名称','not like','%拆片%')
-            ->count();
-        if (isset($param['page']) && isset($param['limit']))
-        {
-            $list = \db('工单_质量考核汇总')
-                ->alias('a')
-                ->field('  
-                a.sczl_jtbh AS 机台编号,  
-                a.Gy0_gdbh AS 工单编号,  
-                a.印件及工序 AS 工序号,  
-                a.产品名称 AS 印件名称,  
-                a.工序 AS 工序,  
-                a.工序名称,  
-                a.联数,  
-                a.班组产量,  
-                a.班组制程废品,  
-                a.班组质检废品,  
-                a.sczl_bzdh AS 班组编号,  
-                b.印刷方式,  
-                b.版距,  
-                DATE_FORMAT(a.入仓日期, \'%Y%m\') AS 完工年月  
-            ')
-                ->join('工单_工艺资料 b', 'a.Gy0_gdbh = b.Gy0_gdbh AND a.印件及工序 = b.Gy0_yjno AND a.工序 = b.Gy0_gxh')
-                ->where('a.sys_ny', 'like', $param['year'] . '%')
-                ->where('a.工序名称','not like','%机检%')
-                ->where('a.工序名称','not like','%拆片%')
-                ->page($param['page'])
-                ->limit($param['limit'])
-                ->select();
-        }else{
-            $list = \db('工单_质量考核汇总')
+
+        // 定义分类规则及顺序
+        $processOrder = [
+            1 => ['name' => '胶印工序', 'keys' => ['胶印', '上光']],
+            2 => ['name' => '凹印工序', 'keys' => ['卷凹']],
+            3 => ['name' => '圆烫工序', 'keys' => ['圆烫']],
+            4 => ['name' => '圆切工序', 'keys' => ['圆切']],
+            5 => ['name' => '烫模工序', 'keys' => ['烫金', '模切', '凹凸']],
+            6 => ['name' => '丝印工序', 'keys' => ['丝印']],
+            7 => ['name' => '喷码工序', 'keys' => ['喷码']],
+            8 => ['name' => '单凹工序', 'keys' => ['单凹']]
+        ];
+
+        // 构建基础查询
+        $query = \db('工单_质量考核汇总')
                 ->alias('a')
-                ->field('  
-                a.sczl_jtbh AS 机台编号,  
-                a.Gy0_gdbh AS 工单编号,  
-                a.印件及工序 AS 工序号,  
-                a.产品名称 AS 印件名称,  
-                a.工序 AS 工序,  
-                a.工序名称,  
-                a.联数,  
-                a.班组产量,  
-                a.班组制程废品,  
-                a.班组质检废品,  
-                a.sczl_bzdh AS 班组编号,  
-                b.印刷方式,  
-                b.版距,  
-                DATE_FORMAT(a.入仓日期, \'%Y%m\') AS 完工年月  
+                ->field('
+                a.sczl_jtbh AS 机台编号,
+                a.Gy0_gdbh AS 工单编号,
+                a.印件及工序 AS 工序号,
+                a.产品名称 AS 印件名称,
+                a.工序 AS 工序,
+                a.工序名称,
+                a.联数,
+                a.班组产量,
+                a.班组制程废品,
+                a.班组质检废品,
+                a.sczl_bzdh AS 班组编号,
+                b.印刷方式,
+                b.版距,
+                DATE_FORMAT(a.入仓日期, \'%Y%m\') AS 完工年月
             ')
                 ->join('工单_工艺资料 b', 'a.Gy0_gdbh = b.Gy0_gdbh AND a.印件及工序 = b.Gy0_yjno AND a.工序 = b.Gy0_gxh')
                 ->where('a.sys_ny', 'like', $param['year'] . '%')
                 ->where('a.工序名称','not like','%机检%')
-                ->where('a.工序名称','not like','%拆片%')
-                ->select();
-        }
-        $processType = ['胶印','卷凹','圆烫','圆切','烫金','模切','丝印','喷码','单凹'];
+                ->where('a.工序名称','not like','%拆片%');
+        // 获取总数
+        $total = clone $query;
+        $total = $total->count();
+
+        // 执行查询
+        $rawList = isset($param['page'], $param['limit'])
+            ? $query->page($param['page'])->limit($param['limit'])->select()
+            : $query->select();
+
+        // 处理分类标记
+        $processedList = [];
+        foreach ($rawList as $item) {
+            $matched = false;
 
-        if (empty($list)){
-            $this->error('未找到数据');
+            // 顺序匹配分类规则
+            foreach ($processOrder as $typeId => $rule) {
+                foreach ($rule['keys'] as $keyword) {
+                    if (strpos($item['工序名称'], $keyword) !== false) {
+                        // 添加分类标记
+                        $item['type_id'] = $typeId;
+                        $item['type_name'] = $rule['name'];
+                        $processedList[] = $item;
+                        $matched = true;
+                        break 2; // 跳出两层循环
+                    }
+                }
+            }
+
+            // 未匹配到分类的数据丢弃
         }
-//        foreach ($list as $key=>$value){
-//            foreach ($processType as $index=>$item){
-//                if (strpos($value['工序名称'],$item) !== false){
-//                    $list[$key]['工序类型'] = ($index+1).'.'.$item;
-//                }
-//            }
-//            if (!isset($list[$key]['工序类型'])){
-//                if (strpos($value['工序名称'],'凹凸') !== false){
-//                    $list[$key]['工序类型'] = '6.模切';
-//                }
-//                if (strpos($value['工序名称'],'上光') !== false){
-//                    $list[$key]['工序类型'] = '1.胶印';
-//                }
-//            }
-//        }
-
-        // 按照“工序类型”的数字部分进行排序
-//        usort($list, function($a, $b) {
-//            // 提取工序类型的数字部分
-//            preg_match('/^(\d+)\./', $a['工序类型'], $matchesA);
-//            preg_match('/^(\d+)\./', $b['工序类型'], $matchesB);
-//
-//            $numberA = isset($matchesA[1]) ? (int)$matchesA[1] : 0;
-//            $numberB = isset($matchesB[1]) ? (int)$matchesB[1] : 0;
-//
-//            return $numberA <=> $numberB; // 使用太空船运算符进行比较
-//        });
-        $data['data'] = $list;
-        $data['total'] = $total;
-        $this->success('成功',$data);
+
+        // 按分类顺序排序(保持1-8的顺序)
+        usort($processedList, function($a, $b) {
+            return $a['type_id'] <=> $b['type_id'];
+        });
+
+        // 返回结构
+        $data['data'] = $processedList;
+        $data['total'] = $total;              // 原始总数
+        $data['filtered_total'] = count($processedList); // 实际有效数
+
+        return count($processedList) > 0
+            ? $this->success('成功', $data)
+            : $this->error('未找到数据');
     }
 }

+ 323 - 46
application/api/controller/WorkOrder.php

@@ -427,6 +427,11 @@ class WorkOrder extends Api
         if (empty($param) || isset($param['Uniqid']) === false){
             $this->error('参数错误');
         }
+        // 先查询原始数据用于日志对比
+        $oldData = \db('工单_基本资料')
+            ->where('Uniqid', $param['Uniqid'])
+            ->find();
+        //配置修改数据
         $row = [
             'Gd_lx' => isset($param['lx'])?$param['lx']:'',
             '开单日期' => isset($param['kdrq'])?$param['kdrq']:'',
@@ -453,6 +458,18 @@ class WorkOrder extends Api
             '排产时库存' => isset($param['kc'])?$param['kc']:'',
             '平均合格率' => isset($param['avg'])?$param['avg']:'',
         ];
+        // 修改工单主信息时记录变更
+        $changes = [];
+        foreach ($row as $field => $newValue) {
+            $oldValue = $oldData[$field] ?? null;
+            if ($oldValue != $newValue) {
+                $changes[] = [
+                    'field' => $field,
+                    'old'   => $oldValue,
+                    'new'   => $newValue
+                ];
+            }
+        }
         //获取印件资料
         $printCode = \db('工单_印件资料')
             ->where('Uniqid',$param['printID'])
@@ -476,12 +493,46 @@ class WorkOrder extends Api
         //修改工单信息
         $sql = \db('工单_基本资料')->where('Uniqid',$param['Uniqid'])->fetchSql(true)->update($row);
         $res = Db::query($sql);
+        // 记录修改日志(仅当有字段变更时)
+        if (!empty($changes)) {
+            $logData = [];
+            foreach ($changes as $change) {
+                $logData[] = [
+                    'Gd_gdbh'      => $oldData['Gd_gdbh'], // 使用原始工单编号
+                    'ModifyUser'   => $param['sys_id'],
+                    'ModifyTime'   => date('Y-m-d H:i:s'),
+                    'FieldName'    => $change['field'],
+                    'OldValue'     => $change['old'],
+                    'NewValue'     => $change['new'],
+                    'ModifySource' => '工单编辑'
+                ];
+            }
+            $logSql = \db('系统操作日志表')->fetchSql(true)->insertAll($logData);
+            $result = \db()->query($logSql);
+        }
         //修改订单数量该工单下的订单数量
         //1. 查询该id下的工单编号, 防止其手动修改工单编号导致条件错误
         $gdbh = \db('工单_基本资料')->where('Uniqid',$param['Uniqid'])->value('Gd_gdbh');
+        // 获取修改前的订单数量
+        $oldQuantity = \db('工单_基本资料')
+            ->where('Gd_gdbh', $gdbh)
+            ->value('订单数量');
         //2. 根据查出的工单编号修改订单数量
         $sql = \db('工单_基本资料')->where('Gd_gdbh',$param['gdbh'])->fetchSql(true)->update(['订单数量'=>$row['订单数量']]);
         $res1 = Db::query($sql);
+        // 记录订单数量单独变更
+        if ($res1 && $oldQuantity != $row['订单数量']) {
+            $logSql = \db('系统操作日志表')->fetchSql(true)->insert([
+                'Gd_gdbh'      => $gdbh,
+                'ModifyUser'   => $param['sys_id'],
+                'ModifyTime'   => date('Y-m-d H:i:s'),
+                'FieldName'    => '订单数量',
+                'OldValue'     => $oldQuantity,
+                'NewValue'     => $row['订单数量'],
+                'ModifySource' => '数量修正'
+            ]);
+            $result = \db()->query($logSql);
+        }
         if ($res !== false && $res1 !== false){
             $this->success('成功');
         }else{
@@ -1103,55 +1154,233 @@ class WorkOrder extends Api
      * @throws \think\exception\DbException
      * @throws \think\exception\PDOException
      */
+//    public function ProcessDetailEdit()
+//    {
+//        if (Request::instance()->isPost() === false){
+//            $this->error('请求错误');
+//        }
+//        $param = Request::instance()->post();
+//        if (empty($param) || isset($param['UniqId']) === false){
+//            $this->error('参数错误');
+//        }
+//        // 获取修改前原始数据
+//        $oldData = \db('工单_工艺资料')
+//            ->where('UniqId', $param['UniqId'])
+//            ->find();
+//        //获取工单损耗代号数据
+//        if (empty($param['Gy0_shdh'])){
+//            $rate['rate0'] = 0;
+//            $rate['rate1'] = 0;
+//        }else{
+//            $rate = \db('dic_lzsh')->where('sys_bh',$param['Gy0_shdh'])->field('rtrim(sys_rate0) as rate0,rtrim(sys_rate1) as rate1')->find();
+//        }
+//        if ($param['备选工序'] == ''){
+//            $param['备选工序'] = null;
+//        }
+//        $param['Gy0_Rate0']= isset($rate['rate0'])?$rate['rate0']:0;
+//        $param['Gy0_Rate1'] = isset($rate['rate1'])?$rate['rate1']:0;
+//        $param['Mod_rq']  = date('Y-m-d H:i:s',time());
+//        $UniqId = $param['UniqId'];
+//        unset($param['UniqId']);
+//        //获取工单第一道工艺编号
+//        $minGxh = \db('工单_工艺资料')->where('Gy0_gdbh',$param['Gy0_gdbh'])->column('min(Gy0_gxh) as gxh');
+//        //修改工艺资料
+//        $sql = \db('工单_工艺资料')->where('UniqId',$UniqId)->fetchSql(true)->update($param);
+//        $res = \db()->query($sql);
+//        //获取工艺资料数据
+//        $list = \db('工单_工艺资料')->where('UniqId',$UniqId)->field('Gy0_yjno,Gy0_gxh,rtrim(Gy0_计划接货数) as 计划接货数')->find();
+//        //如果是第一道工序需从印件资料中获取计划产量
+//        $list['计划接货数'] = \db('工单_印件资料')->where('Yj_Gdbh',$param['Gy0_gdbh'])->where('yj_Yjno',$param['Gy0_yjno'])->column('yj_平张投料')[0];
+//        //修改工单状态
+//        $status = \db('工单_基本资料')->where('Gd_gdbh',$param['Gy0_gdbh'])->field('rtrim(gd_statu) as status')->find();
+//        if ($status['status'] !== '2-生产中'){
+//            $statusSql = \db('工单_基本资料')->where('Gd_gdbh',$param['Gy0_gdbh'])->fetchSql(true)->update(['gd_statu'=>'2-生产中']);
+//            Db::query($statusSql);
+//        }
+//        //重新分配工序计划产量
+//        if ((int)$list['计划接货数'] > 0){
+//            $result = $this->PlannedProcessYield($param['Gy0_gdbh'],$list['Gy0_yjno'],0,$list['计划接货数']);
+//        }
+//        // 记录变更日志
+//        if ($res) {
+//            $newData = array_merge($oldData, $param); // 合并新旧数据
+//            $changes = [];
+//
+//            // 动态对比所有参数字段(排除系统字段)
+//            $excludeFields = ['UniqId', 'Mod_rq'];
+//            foreach ($param as $field => $newValue) {
+//                if (in_array($field, $excludeFields)) continue;
+//
+//                $oldValue = $oldData[$field] ?? 'NULL';
+//                if ($oldValue != $newValue) {
+//                    $changes[] = [
+//                        'field' => $field,
+//                        'old'   => $oldValue,
+//                        'new'   => $newValue
+//                    ];
+//                }
+//            }
+//
+//            // 批量插入日志
+//            if (!empty($changes)) {
+//                $logData = [];
+//                foreach ($changes as $change) {
+//                    $logData[] = [
+//                        'Gd_gdbh'      => $oldData['Gy0_gdbh'],
+//                        'yjno'         => $oldData['Gy0_yjno'],
+//                        'gxh'          => $oldData['Gy0_gxh'],
+//                        'ModifyUser'   => $param['Sys_id'],
+//                        'ModifyTime'   => date('Y-m-d H:i:s'),
+//                        'FieldName'    => $change['field'],
+//                        'OldValue'     => $change['old'],
+//                        'NewValue'     => $change['new'],
+//                        'ModifySource' => '工艺调整'
+//                    ];
+//                }
+//                $logSql = \db('系统操作日志表')->fetchSql(true)->insertAll($logData);
+//                \db()->query($logSql);
+//            }
+//        }
+//        if ($res !== false){
+//            $this->success('成功');
+//        }else{
+//            $this->error('失败');
+//        }
+//    }
     public function ProcessDetailEdit()
     {
-        if (Request::instance()->isPost() === false){
-            $this->error('请求错误');
-        }
-        $param = Request::instance()->post();
-        if (empty($param) || isset($param['UniqId']) === false){
-            $this->error('参数错误');
-        }
-        if (empty($param['Gy0_shdh'])){
-            $rate['rate0'] = 0;
-            $rate['rate1'] = 0;
-        }else{
-            $rate = \db('dic_lzsh')->where('sys_bh',$param['Gy0_shdh'])->field('rtrim(sys_rate0) as rate0,rtrim(sys_rate1) as rate1')->find();
-        }
-        if ($param['备选工序'] == ''){
-            $param['备选工序'] = null;
-        }
-        $param['Gy0_Rate0']= isset($rate['rate0'])?$rate['rate0']:0;
-        $param['Gy0_Rate1'] = isset($rate['rate1'])?$rate['rate1']:0;
-        $param['Mod_rq']  = date('Y-m-d H:i:s',time());
-        $UniqId = $param['UniqId'];
-        unset($param['UniqId']);
-        //获取工单第一道工艺编号
-        $minGxh = \db('工单_工艺资料')->where('Gy0_gdbh',$param['Gy0_gdbh'])->column('min(Gy0_gxh) as gxh');
-        //修改工艺资料
-        $sql = \db('工单_工艺资料')->where('UniqId',$UniqId)->fetchSql(true)->update($param);
-        $res = Db::query($sql);
-        //获取工艺资料数据
-        $list = \db('工单_工艺资料')->where('UniqId',$UniqId)->field('Gy0_yjno,Gy0_gxh,rtrim(Gy0_计划接货数) as 计划接货数')->find();
-        //如果是第一道工序需从印件资料中获取计划产量
-        $list['计划接货数'] = \db('工单_印件资料')->where('Yj_Gdbh',$param['Gy0_gdbh'])->where('yj_Yjno',$param['Gy0_yjno'])->column('yj_平张投料')[0];
-        //修改工单状态
-        $status = \db('工单_基本资料')->where('Gd_gdbh',$param['Gy0_gdbh'])->field('rtrim(gd_statu) as status')->find();
-        if ($status['status'] !== '2-生产中'){
-            $statusSql = \db('工单_基本资料')->where('Gd_gdbh',$param['Gy0_gdbh'])->fetchSql(true)->update(['gd_statu'=>'2-生产中']);
-            Db::query($statusSql);
-        }
-        //重新分配工序计划产量
-        if ((int)$list['计划接货数'] > 0){
-            $result = $this->PlannedProcessYield($param['Gy0_gdbh'],$list['Gy0_yjno'],0,$list['计划接货数']);
-        }
-        if ($res !== false){
-            $this->success('成功');
-        }else{
-            $this->error('失败');
+        Db::startTrans();
+        try {
+            // 请求验证
+            if (!Request::instance()->isPost()) {
+                throw new Exception('非法请求方法');
+            }
+
+            $param = Request::instance()->post();
+            if (empty($param) || !isset($param['UniqId'])) {
+                throw new Exception('缺少必要参数');
+            }
+
+            $UniqId = $param['UniqId'];
+
+            // 获取原始数据(全字段)
+            $oldData = Db::name('工单_工艺资料')
+                ->where('UniqId', $UniqId)
+                ->find();
+            if (!$oldData) {
+                throw new Exception('目标数据不存在');
+            }
+
+            // 动态构建更新数据 --------------------------------------------------------
+            $updateData = [];
+            $logsData = [];
+            $systemFields = array('UniqId', 'Mod_rq'); // 显式声明数组
+
+            // 合并所有有效字段(PHP7.2兼容写法)
+            foreach ($param as $key => $value) {
+                if (!in_array($key, $systemFields)) {
+                    $updateData[$key] = $value;
+                    $logsData[$key] = $value;
+                }
+            }
+
+            // 处理业务逻辑字段
+            if (empty($param['Gy0_shdh'])) {
+                $updateData['Gy0_Rate0'] = 0;
+                $updateData['Gy0_Rate1'] = 0;
+            } else {
+                $rate = Db::name('dic_lzsh')
+                    ->where('sys_bh', $param['Gy0_shdh'])
+                    ->field('rtrim(sys_rate0) as rate0, rtrim(sys_rate1) as rate1')
+                    ->find();
+                $rate = $rate ? $rate : array('rate0' => 0, 'rate1' => 0);
+                $updateData['Gy0_Rate0'] = $rate['rate0'];
+                $updateData['Gy0_Rate1'] = $rate['rate1'];
+            }
+
+            // 添加系统字段
+            $updateData['Mod_rq'] = date('Y-m-d H:i:s');
+
+            // 执行全字段更新(PHP7.2兼容的回调函数)-----------------------------------
+            $rawSql = Db::name('工单_工艺资料')
+                ->where('UniqId', $UniqId)
+                ->fetchSql(true)
+                ->update($updateData);
+
+            // 中文字段安全处理(传统匿名函数写法)
+            $safeSql = preg_replace_callback(
+                '/`([\x{4e00}-\x{9fa5}]+)`/u',
+                function($matches) {
+                    return '`' . addslashes($matches[1]) . '`';
+                },
+                $rawSql
+            );
+
+            // 执行并验证
+            $affected = Db::execute($safeSql);
+            if ($affected < 0) {
+                throw new Exception('数据库执行失败');
+            }
+
+            // 记录全字段变更日志 -----------------------------------------------------
+            $changes = array();
+            foreach ($logsData as $field => $newValue) {
+                $oldValue = isset($oldData[$field]) ? $oldData[$field] : 'NULL';
+
+                // 严格值比较(PHP7.2兼容的类型转换)
+                if ((string)$oldValue !== (string)$newValue) {
+                    $changes[] = array(
+                        'field' => $field,
+                        'old'   => $oldValue,
+                        'new'   => $newValue
+                    );
+                }
+            }
+
+            if (!empty($changes)) {
+                $logs = array();
+                foreach ($changes as $change) {
+                    $logs[] = array(
+                        'Gd_gdbh'      => $oldData['Gy0_gdbh'],
+                        'yjno'         => $oldData['Gy0_yjno'],
+                        'gxh'          => $oldData['Gy0_gxh'],
+                        'ModifyUser'   => $param['Sys_id'],
+                        'ModifyTime'   => date('Y-m-d H:i:s'),
+                        'FieldName'    => $change['field'],
+                        'OldValue'     => $change['old'],
+                        'NewValue'     => $change['new'],
+                        'ModifySource' => '工艺调整'
+                    );
+                }
+
+                Db::name('系统操作日志表')->insertAll($logs);
+            }
+
+            //获取工单第一道工艺编号
+            $minGxh = \db('工单_工艺资料')->where('Gy0_gdbh',$param['Gy0_gdbh'])->column('min(Gy0_gxh) as gxh');
+            //获取工艺资料数据
+            $list = \db('工单_工艺资料')->where('UniqId',$UniqId)->field('Gy0_yjno,Gy0_gxh,rtrim(Gy0_计划接货数) as 计划接货数')->find();
+            //如果是第一道工序需从印件资料中获取计划产量
+            $list['计划接货数'] = \db('工单_印件资料')->where('Yj_Gdbh',$param['Gy0_gdbh'])->where('yj_Yjno',$param['Gy0_yjno'])->column('yj_平张投料')[0];
+            //修改工单状态
+            $status = \db('工单_基本资料')->where('Gd_gdbh',$param['Gy0_gdbh'])->field('rtrim(gd_statu) as status')->find();
+            if ($status['status'] !== '2-生产中'){
+                $statusSql = \db('工单_基本资料')->where('Gd_gdbh',$param['Gy0_gdbh'])->fetchSql(true)->update(['gd_statu'=>'2-生产中']);
+                Db::query($statusSql);
+            }
+            //重新分配工序计划产量
+            if ((int)$list['计划接货数'] > 0){
+                $result = $this->PlannedProcessYield($param['Gy0_gdbh'],$list['Gy0_yjno'],0,$list['计划接货数']);
+            }
+
+            Db::commit();
+            $this->success('操作成功');
+
+        } catch (Exception $e) {
+            Db::rollback();
+            $this->error($e->getMessage());
         }
     }
-
     /**
      * 工艺资料编辑->机台列表获取
      * @return void
@@ -1579,6 +1808,14 @@ class WorkOrder extends Api
         ];
         $sql= \db('工单_基本资料')->fetchSql(true)->insert($data);
         $res = \db()->query($sql);
+        //创建日志数据
+        $logs = array(
+            'Gd_gdbh'      => $data['Gd_gdbh'],
+            'ModifyUser'   => $param['Sys_id'],
+            'ModifyTime'   => date('Y-m-d H:i:s'),
+            'ModifySource' => '工单添加'
+        );
+        \db('系统操作日志表')->insert($logs);
         if ($res !== false){
             $this->success('成功');
         }else{
@@ -1788,6 +2025,16 @@ class WorkOrder extends Api
         if ((int)$number >0){
             $this->PlannedProcessYield($param['Gy0_gdbh'],$param['Gy0_yjno'],0,$number);
         }
+        //操作日志数据
+        $logs = array(
+            'Gd_gdbh'      => $param['Gy0_gdbh'],
+            'yjno'         => $param['Gy0_yjno'],
+            'gxh'          => $param['Gy0_gxh'],
+            'ModifyUser'   => $param['Sys_id'],
+            'ModifyTime'   => date('Y-m-d H:i:s'),
+            'ModifySource' => '工艺新增'
+        );
+        \db('系统操作日志表')->insert($logs);
         if ($res !== false){
             $this->success('成功');
         }else{
@@ -1889,12 +2136,22 @@ class WorkOrder extends Api
                 'yj_Yjno' => $codeList['印件号']
             ])
             ->value('rtrim(yj_平张投料)');
+        // 新增:批量获取要删除的工序号
+        $gxhList = \db('工单_工艺资料')
+            ->where('UniqId', 'in', $printId)
+            ->column('rtrim(Gy0_gxh) as gxh', 'UniqId');
         //循环删除工艺资料
+        $deletedGxh = [];
         foreach ($printId as $value){
             $res = \db('工单_工艺资料')
                 ->where('UniqId',$value)
                 ->delete();
-            if ($res === false){
+            if ($res) {
+                // 记录成功删除的工序号
+                if (isset($gxhList[$value])) {
+                    $deletedGxh[] = $gxhList[$value];
+                }
+            } else {
                 $i++;
             }
         }
@@ -1902,6 +2159,15 @@ class WorkOrder extends Api
         if ((int)$number>0){
             $this->PlannedProcessYield($codeList['工单编号'],$codeList['印件号'],0,$number);
         }
+        // 新增:写入操作日志
+        \db('系统操作日志表')->insert([
+            'ModifyUser'      => $param['sys_id'],
+            'ModifyTime'  => date('Y-m-d H:i:s',time()),
+            'Gd_gdbh'          => $codeList['工单编号'],
+            'yjno'          => $codeList['印件号'],
+            'gxh'           => implode(',', $deletedGxh),
+            'ModifySource'  => '工艺资料删除'
+        ]);
         if ($i === 0){
             $this->success('删除成功');
         }else{
@@ -2522,6 +2788,17 @@ class WorkOrder extends Api
                     \db('工单_bom资料')->where('BOM_工单编号',$workorder)->delete();
                 }
                 \db()->commit();
+
+                // 成功删除后记录日志
+                $logSql = \db('系统操作日志表')->fetchSql(true)->insert([
+                    'Gd_gdbh'      => $workorder,
+                    'ModifyUser'   => $param['sys_id'],
+                    'ModifyTime'   => date('Y-m-d H:i:s'),
+                    'FieldName'    => '工单删除',
+                    'NewValue'     => '已删除',
+                    'ModifySource' => '工单删除'
+                ]);
+                \db()->query($logSql);
             }catch (\Exception $e){
                 \db()->rollback();
                 $i++;