zck 1 month ago
parent
commit
82fe77ddbf

+ 209 - 22
application/api/controller/MonthlyGarments.php

@@ -4,24 +4,22 @@ namespace app\api\controller;
 
 
 use app\common\controller\Api;
+use Monolog\Handler\IFTTTHandler;
+use Overtrue\Socialite\Providers\WeWorkProvider;
 use think\Db;
 use think\Request;
+use function fast\e;
 
+/**
+ *
+ * 生产单衣进度管理
+ */
 class MonthlyGarments extends Api
 {
     protected $noNeedLogin = ['*'];
     protected $noNeedRight = ['*'];
 
-    public function _initialize()
-    {
-        if (isset($_SERVER['HTTP_ORIGIN'])) {
-            header('Access-Control-Expose-Headers: __token__');
-        }
-        check_cors_request();
-        parent::_initialize();
-    }
-
-    /**
+     /**
  * 样衣进度左侧数据
  */
     public function getDateTree()
@@ -32,35 +30,224 @@ class MonthlyGarments extends Api
 
         $results = \db('月度样衣进度')
             ->field([
-                'DATE_FORMAT(下单日期, "%Y-%m-%d")' => '日期',
-                'DATE_FORMAT(下单日期, "%Y-%m")' => '年月'
+                'DATE_FORMAT(Sys_rq, "%Y-%m")' => '年月',
+                '客户编号',
+                'COUNT(*) as total'
             ])
             ->whereNull('Mod_rq')
-            ->whereNotNull('下单日期')
-            ->order('下单日期 ASC')
+            ->group('年月, 客户编号')
+            ->order('年月 DESC')
             ->select();
 
         $formattedData = [];
 
         foreach ($results as $row) {
             $yearMonth = $row['年月'];
-            $monthDay = $row['日期'];
+            $customerCode = $row['客户编号'];
+            $total = $row['total'];
 
             if (!isset($formattedData[$yearMonth])) {
                 $formattedData[$yearMonth] = [];
             }
 
-            if (!in_array($monthDay, $formattedData[$yearMonth])) {
-                $formattedData[$yearMonth][] = $monthDay;
-            }
+            $formattedData[$yearMonth][] = [
+                '客户编号' => $customerCode,
+                'total' => $total
+            ];
         }
 
         krsort($formattedData);
 
-        foreach ($formattedData as &$dates) {
-            rsort($dates);
+        $this->success('成功', $formattedData);
+    }
+
+         /**
+ * 样衣进度列表数据
+ */
+    public function getMonthlyGarmentsList()
+    {
+        if (!$this->request->isGet()) {
+            $this->error('请求错误');
         }
 
-        $this->success('成功', $formattedData);
+        $yearMonth = $this->request->param('sys_rq', '');
+        $customerCode = $this->request->param('customer', '');
+        $search = $this->request->param('search', '');
+
+        $query = \db('月度样衣进度')
+            ->whereNull('Mod_rq');
+
+        if ($yearMonth) {
+            $query->where('DATE_FORMAT(Sys_rq, "%Y-%m")', $yearMonth);
+        }
+
+        if ($customerCode) {
+            $query->where('客户编号', $customerCode);
+        }
+
+        if ($search) {
+            $query->where(function ($q) use ($search) {
+                $q->where('客户编号', 'like', "%{$search}%")
+                  ->whereOr('款号', 'like', "%{$search}%")
+                  ->whereOr('款式', 'like', "%{$search}%");
+            });
+        }
+
+        $results = $query->order('Sys_rq DESC')->select();
+
+        $this->success('成功', [
+            'result' => $results,
+            'total' => count($results)
+        ]);
+    }
+     /**
+ * 样衣进度新增数据
+ */
+    public function saveMonthlyGarments()
+    {
+        if (!$this->request->isPost()) {
+            $this->error('请求错误');
+        }
+
+        $data = $this->request->post();
+
+        $customerCode = $data['客户编号'] ?? '';
+        $styleNo = $data['款号'] ?? '';
+        $style = $data['款式'] ?? '';
+        $sampleType = $data['样办种类'] ?? '';
+        $department = $data['做办部门'] ?? '';
+        $quantity = isset($data['数量']) && $data['数量'] !== '' ? (int)$data['数量'] : 0;
+        $orderDate = (!empty($data['下单日期'])) ? "'{$data['下单日期']}'" : 'NULL';
+        $fabricProgress = $data['面料进度'] ?? '';
+        $auxiliaryProgress = $data['辅料进度'] ?? '';
+        $planDeliveryDate = (!empty($data['计划交办日期'])) ? "'{$data['计划交办日期']}'" : 'NULL';
+        $actualDeliveryDate = (!empty($data['实际交办日期'])) ? "'{$data['实际交办日期']}'" : 'NULL';
+        $remark = $data['备注'] ?? '';
+        $sysId = $data['Sys_id'] ?? '';
+        $sysRq = date('Y-m-d H:i:s');
+
+        $sql = "INSERT INTO `月度样衣进度` (`客户编号`, `款号`, `款式`, `样办种类`, `做办部门`, `数量`, `下单日期`, `面料进度`, `辅料进度`, `计划交办日期`, `实际交办日期`, `备注`, `Sys_id`, `Sys_rq`, `Mod_rq`) VALUES ('{$customerCode}', '{$styleNo}', '{$style}', '{$sampleType}', '{$department}', {$quantity}, {$orderDate}, '{$fabricProgress}', '{$auxiliaryProgress}', {$planDeliveryDate}, {$actualDeliveryDate}, '{$remark}', '{$sysId}', '{$sysRq}', NULL)";
+        
+        $result = \db()->execute($sql);
+
+        if ($result !== false) {
+            $lastId = \db('月度样衣进度')->getLastInsID();
+            $this->success('保存成功', ['id' => $lastId]);
+        } else {
+            $this->error('保存失败');
+        }
+    }
+     /**
+ * 样衣进度修改数据
+ */
+    public function updateMonthlyGarments()
+    {
+        if (!$this->request->isPost()) {
+            $this->error('请求错误');
+        }
+
+        $data = $this->request->post();
+        $uniqId = $data['UniqId'] ?? '';
+        $nickName = $data['nickName'] ?? '';
+
+        if (!$uniqId) {
+            $this->error('UniqId不能为空');
+        }
+
+        $oldData = \db('月度样衣进度')->where('UniqId', $uniqId)->find();
+
+        $customerCode = $data['客户编号'] ?? '';
+        $styleNo = $data['款号'] ?? '';
+        $style = $data['款式'] ?? '';
+        $sampleType = $data['样办种类'] ?? '';
+        $department = $data['做办部门'] ?? '';
+        $quantity = isset($data['数量']) && $data['数量'] !== '' ? (int)$data['数量'] : 0;
+        $orderDate = (!empty($data['下单日期'])) ? "'{$data['下单日期']}'" : 'NULL';
+        $fabricProgress = $data['面料进度'] ?? '';
+        $auxiliaryProgress = $data['辅料进度'] ?? '';
+        $planDeliveryDate = (!empty($data['计划交办日期'])) ? "'{$data['计划交办日期']}'" : 'NULL';
+        $actualDeliveryDate = (!empty($data['实际交办日期'])) ? "'{$data['实际交办日期']}'" : 'NULL';
+        $remark = $data['备注'] ?? '';
+        $sysRq = date('Y-m-d H:i:s');
+
+        $sql = "UPDATE `月度样衣进度` SET `客户编号`='{$customerCode}', `款号`='{$styleNo}', `款式`='{$style}', `样办种类`='{$sampleType}', `做办部门`='{$department}', `数量`={$quantity}, `下单日期`={$orderDate}, `面料进度`='{$fabricProgress}', `辅料进度`='{$auxiliaryProgress}', `计划交办日期`={$planDeliveryDate}, `实际交办日期`={$actualDeliveryDate}, `备注`='{$remark}', `Sys_rq`='{$sysRq}' WHERE `UniqId`='{$uniqId}'";
+
+        $result = \db()->query($sql);
+
+        if ($result !== false) {
+            $this->saveLogs($uniqId, $oldData, $data, $nickName);
+            $this->success('修改成功');
+        } else {
+            $this->error('修改失败');
+        }
+    }
+
+ 
+
+    public function deleteMonthlyGarments()
+    {
+        if (!$this->request->isPost()) {
+            $this->error('请求错误');
+        }
+
+        $data = $this->request->post();
+        $uniqId = $data['UniqId'] ?? '';
+        $nickName = $data['nickName'] ?? '';
+
+        if (!$uniqId) {
+            $this->error('UniqId不能为空');
+        }
+
+        $modRq = date('Y-m-d H:i:s');
+        $sql = "UPDATE `月度样衣进度` SET `Mod_rq`='{$modRq}' WHERE `UniqId`='{$uniqId}'";
+        $result = \db()->query($sql);
+
+        if ($result !== false) {
+            $this->success('删除成功');
+        } else {
+            $this->error('删除失败');
+        }
+    }
+
+    /**
+     * 样衣进度存储日志数据
+     */
+    private function saveLogs($uniqId, $oldData, $newData, $operator)
+    {
+        $fields = ['客户编号', '款号', '款式', '样办种类', '做办部门', '数量', '下单日期', '面料进度', '辅料进度', '计划交办日期', '实际交办日期', '备注'];
+        $modifyTime = date('Y-m-d H:i:s');
+
+        foreach ($fields as $field) {
+            $oldValue = $oldData[$field] ?? '';
+            $newValue = $newData[$field] ?? '';
+
+            if ((string)$oldValue !== (string)$newValue) {
+                $sql = "INSERT INTO `样衣进度日志` (`Uniqid`, `ModifyField`, `OriginalValue`, `Modified`, `修改人`, `修改日期`) VALUES ('{$uniqId}', '{$field}', '{$oldValue}', '{$newValue}', '{$operator}', '{$modifyTime}')";
+                \db()->query($sql);
+            }
+        }
+    }
+
+    /**
+     * 样衣进度日志数据
+     */
+    public function getLogs()
+    {
+        if (!$this->request->isGet()) {
+            $this->error('请求错误');
+        }
+
+        $uniqId = $this->request->get('UniqId') ?? '';
+
+        if (!$uniqId) {
+            $this->error('UniqId不能为空');
+        }
+
+        $logs = \db('样衣进度日志')
+            ->where('Uniqid', $uniqId)
+            ->order('修改日期', 'desc')
+            ->select();
+
+        $this->success('获取成功', ['result' => $logs, 'total' => count($logs)]);
     }
-}
+}

+ 4 - 3
application/api/controller/ReportingWork.php

@@ -90,12 +90,13 @@ class ReportingWork extends Api
         if (empty($params['majorprocess'])) {
             $this->error('大工序不能为空');
         }
-        $data = db('工单_部件资料')
+        $data = db('工单_基础工艺资料')
             ->where('work_order', $params['workorder'])
-            ->where('part_type', $params['majorprocess'])
+            ->where('big_process', $params['majorprocess'])
             ->whereNull('del_rq')
-            ->where('status', 1)
+            // ->where('status', 1)
             ->field('part_code as 部件编号,part_name as 部件名称')
+            ->group('part_code')
             ->select();
         usort($data, function ($a, $b) {
             return strnatcmp((string)$a['部件编号'], (string)$b['部件编号']);

+ 118 - 31
application/api/controller/WorkOrderProcess.php

@@ -527,6 +527,32 @@ class WorkOrderProcess extends Api
 
         Db::startTrans();
         try {
+            if (!empty($params['part_code'])) {
+                $partExists = Db::table('工单_部件资料')
+                    ->where('work_order', $process['work_order'])
+                    ->where('part_code', $params['part_code'])
+                    ->whereNull('del_rq')
+                    ->find();
+                if (empty($partExists)) {
+                    $partData = [
+                        'work_order' => $process['work_order'],
+                        'part_code' => $params['part_code'],
+                        'part_name' => $params['part_name'],
+                        'remark' => '',
+                        'part_type' => $params['big_process'],
+                        'status' => 1,
+                        'sys_id' => $params['mod_id'],
+                        'sys_rq' => date('Y-m-d H:i:s'),
+                    ];
+                    $partInsertResult = Db::table('工单_部件资料')->insert($partData);
+                    if ($partInsertResult === false) {
+                        $dbError = Db::getError();
+                        $detail = is_array($dbError) && !empty($dbError) ? json_encode($dbError, JSON_UNESCAPED_UNICODE) : '';
+                        throw new \Exception('新增部件资料失败' . ($detail !== '' ? ':' . $detail : ''));
+                    }
+                }
+            }
+
             $updateResult = Db::table('工单_基础工艺资料')
                 ->where('id', intval($params['id']))
                 ->whereNull('del_rq')
@@ -1787,6 +1813,7 @@ class WorkOrderProcess extends Api
     /**
      * 工序产量核查:按工单查询报工汇总(工单信息 / 工序列表 / 人员报工明细)
      * @param workorder 工单编号
+     * @param process 工序(可选,按big_process过滤)
      * @return array
      */
     public function checkProcessProduction()
@@ -1799,54 +1826,114 @@ class WorkOrderProcess extends Api
             $this->error('工单编号不能为空');
         }
 
-        $list = Db::name('设备_工分计酬')->alias('a')
-            ->join('工单_基本资料 b', 'a.work_order = b.订单编号 AND b.Mod_rq IS NULL', 'LEFT')
-            ->where('a.work_order', $params['workorder'])
+        $workorder = $params['workorder'];
+        $processFilter = $params['process'] ?? ''; // 可选的工序过滤
+
+        // 1. 查询工单基本信息
+        $workOrderInfo = Db::name('工单_基本资料')
+            ->where('订单编号', $workorder)
+            ->whereNull('Mod_rq')
+            ->field('订单编号, 生产款号, 款式')
+            ->find();
+
+        if (empty($workOrderInfo)) {
+            $this->error('工单不存在');
+        }
+
+        // 2. 查询工单基础工艺资料(所有工序)
+        $processQuery = Db::name('工单_基础工艺资料')
+            ->where('work_order', $workorder)
+            ->whereNull('del_rq');
+
+        // 如果传了工序参数,按 big_process 过滤
+        if (!empty($processFilter)) {
+            $processQuery->where('big_process', $processFilter);
+        }
+
+        $processList = $processQuery
+            ->field('process_code as 工序号, process_name as 工序名称, part_name as 部件名称')
+            ->select();
+
+        if (empty($processList)) {
+            $this->error('该工单暂无工艺资料');
+        }
+
+        // 按工序号数字排序
+        usort($processList, function ($a, $b) {
+            return intval($a['工序号']) - intval($b['工序号']);
+        });
+
+        // 3. 查询设备_工分计酬中的报工数据
+        $reportList = Db::name('设备_工分计酬')->alias('a')
+            ->where('a.work_order', $workorder)
             ->whereNull('a.del_rq')
-            ->field('b.订单编号,b.生产款号,b.款式,a.process_code as 工序号,a.process_name as 工序名称,a.staff_name as 员工姓名,
-            a.sys_id as 小组,
-                SUM(a.number) as 数量,MIN(a.date) as 开工日期,MAX(a.date) as 完工日期,
-                SUM(a.standard_score) as 工分,SUM(a.production_score) as 工时,SUM(a.salary) as 工资')
-            ->group('b.订单编号,b.生产款号,b.款式,a.process_code,a.process_name,a.staff_no,a.staff_name')
-            ->order('a.process_code asc,a.staff_no asc')
+            ->field('a.process_code as 工序号, a.process_name as 工序名称, a.staff_name as 员工姓名,
+                a.sys_id as 小组,
+                SUM(a.number) as 数量, MIN(a.date) as 开工日期, MAX(a.date) as 完工日期,
+                SUM(a.standard_score) as 工分, SUM(a.production_score) as 工时, SUM(a.salary) as 工资')
+            ->group('a.process_code, a.process_name, a.staff_no, a.staff_name')
             ->select();
 
-        if (empty($list)) {
-            $this->error('暂无报工数据');
+        // 按工序号、员工号数字排序
+        if (!empty($reportList)) {
+            usort($reportList, function ($a, $b) {
+                $codeCmp = intval($a['工序号']) - intval($b['工序号']);
+                if ($codeCmp !== 0) return $codeCmp;
+                return intval($a['员工号'] ?? 0) - intval($b['员工号'] ?? 0);
+            });
         }
 
+        // 4. 组装返回数据
         $data = [
-            '订单编号' => $list[0]['订单编号'],
-            '生产款号' => $list[0]['生产款号'],
-            '款式' => $list[0]['款式'],
+            '订单编号' => $workOrderInfo['订单编号'],
+            '生产款号' => $workOrderInfo['生产款号'],
+            '款式' => $workOrderInfo['款式'],
             '工序列表' => [],
         ];
 
+        // 5. 先构建基础工艺列表(按工序号+工序名称分组)
         $processMap = [];
-        foreach ($list as $row) {
-            $processKey = (string)$row['工序号'] . '|' . (string)$row['工序名称'];
+        foreach ($processList as $process) {
+            $processKey = (string)$process['工序号'] . '|' . (string)$process['工序名称'];
             if (!isset($processMap[$processKey])) {
                 $processMap[$processKey] = [
-                    '工序号' => $row['工序号'],
-                    '工序名称' => $row['工序名称'],
+                    '工序号' => $process['工序号'],
+                    '工序名称' => $process['工序名称'],
+                    '部件名称' => $process['部件名称'] ?? '',
                     'staffs' => [],
                 ];
             }
+        }
 
-            $startDate = !empty($row['开工日期']) ? date('Y-m-d', strtotime($row['开工日期'])) : '';
-            $endDate = !empty($row['完工日期']) ? date('Y-m-d', strtotime($row['完工日期'])) : '';
-            $processMap[$processKey]['staffs'][] = [
-                '员工姓名' => $row['员工姓名'],
-                '小组' => $row['小组'],
-                '数量' => floatval($row['数量']),
-                '开工日期' => $startDate,
-                '完工日期' => $endDate,
-                '工分' => round(floatval($row['工分']), 4),
-                '工时' => round(floatval($row['工时']), 4),
-                '工资' => round(floatval($row['工资']), 4),
-            ];
+        // 6. 将报工数据合并到对应工序
+        if (!empty($reportList)) {
+            foreach ($reportList as $report) {
+                $processKey = (string)$report['工序号'] . '|' . (string)$report['工序名称'];
+                if (isset($processMap[$processKey])) {
+                    $startDate = !empty($report['开工日期']) ? date('Y-m-d', strtotime($report['开工日期'])) : '';
+                    $endDate = !empty($report['完工日期']) ? date('Y-m-d', strtotime($report['完工日期'])) : '';
+                    $processMap[$processKey]['staffs'][] = [
+                        '员工姓名' => $report['员工姓名'],
+                        '小组' => $report['小组'],
+                        '数量' => floatval($report['数量']),
+                        '开工日期' => $startDate,
+                        '完工日期' => $endDate,
+                        '工分' => round(floatval($report['工分']), 4),
+                        '工时' => round(floatval($report['工时']), 4),
+                        '工资' => round(floatval($report['工资']), 4),
+                    ];
+                }
+            }
         }
-        $data['工序列表'] = array_values($processMap);
+
+        $resultList = array_values($processMap);
+
+        // 按工序号数字排序
+        usort($resultList, function ($a, $b) {
+            return intval($a['工序号']) - intval($b['工序号']);
+        });
+
+        $data['工序列表'] = $resultList;
 
         $this->success('成功', $data);
     }