liuhairui 9 сар өмнө
parent
commit
5625242635

+ 71 - 83
application/api/controller/SubWorkorderStatus.php

@@ -43,128 +43,116 @@ class SubWorkorderStatus extends Api
      */
     public function SubWorkOrderStatusList()
     {
-        // 验证请求类型是否为 GET
-        if ($this->request->isGet() === false) {
+        if (!$this->request->isGet()) {
             $this->error('请求错误');
         }
 
-        // 获取请求参数并验证
         $param = $this->request->param();
-        if (empty($param)) {
+        if (empty($param) || empty($param['order'])) {
             $this->error('参数错误');
         }
 
-        // 提取子订单编号的前12位作为色系ID
-        $colour_id = substr($param['order'], 0, 12);
+        $orderNo = $param['order'];
+        $isSubOrder = strpos($orderNo, '-') !== false;
+        $colour_id = substr($orderNo, 0, 12);
 
-        // 获取订单尺码信息
-        $where['Mod_rq'] = null;
-        $xhdata = \db('工单_印件资料')
-            ->where('子订单编号', $param['order'])
-            ->where($where)
-            ->field('cm1,cm2,cm3,cm4,cm5,cm6,cm7,cm8,cm9,cm10')
-            ->select();
-
-        // 收集cm1到cm10的非空值并排序
-        $arr = [];
-        foreach ($xhdata as $value) {
-            for ($i = 1; $i <= 10; $i++) {
-                $cmValue = $value['cm' . $i] ?? null;
-                if (!empty($cmValue)) {
-                    $arr[] = $cmValue;
-                }
-            }
+        // 条件构造
+        $where = ['a.Mod_rq' => null];
+        if ($isSubOrder) {
+            $where['a.子订单编号'] = $orderNo;
+        } else {
+            $where['a.订单编号'] = $orderNo;
         }
-        $arr = array_unique($arr); // 去重
-        sort($arr); // 排序
 
-        // 获取工单详细资料
-        $workOrderData = \db('工单_印件资料')
+        // 获取所有工单数据(订单或子订单)
+        $workOrderList = \db('工单_印件资料')
             ->alias('a')
             ->join('工单_基本资料 b', 'a.订单编号 = b.订单编号')
-            ->where('a.子订单编号', $param['order'])
-            ->where('a.Mod_rq', null)
+            ->where($where)
             ->field('a.订单编号,a.子订单编号,a.款号,b.款式,b.客户编号,a.zdtotal,
             cm1,cm2,cm3,cm4,cm5,cm6,cm7,cm8,cm9,cm10,
             cmsl1,cmsl2,cmsl3,cmsl4,cmsl5,cmsl6,cmsl7,cmsl8,cmsl9,cmsl10')
-            ->find();
+            ->select();
+
+        if (empty($workOrderList)) {
+            $this->error('未找到相关工单数据');
+        }
 
-        // 初始化制单数据
+        // 初始化变量
+        $sizeList = [];
         $result = [
             '工序名称' => '制单',
-            'total' => ' ',
-            '制单数' => $workOrderData['zdtotal'] ?? 0
+            'total' => 0,
+            '制单数' => 0
         ];
 
-        // 处理cm1到cm10和对应的cmsl1到cmsl10数据
-        for ($i = 1; $i <= 10; $i++) {
-            $cmKey = 'cm' . $i;
-            $cmslKey = 'cmsl' . $i;
-            if (!empty($workOrderData[$cmKey])) {
-                $result[$workOrderData[$cmKey]] = (int)($workOrderData[$cmslKey] ?? 0);
+        foreach ($workOrderList as $workOrder) {
+            $result['制单数'] += $workOrder['zdtotal'];
+
+            for ($i = 1; $i <= 10; $i++) {
+                $cmKey = 'cm' . $i;
+                $cmslKey = 'cmsl' . $i;
+                if (!empty($workOrder[$cmKey])) {
+                    $size = $workOrder[$cmKey];
+                    $qty = (int)($workOrder[$cmslKey] ?? 0);
+                    $sizeList[] = $size;
+                    if (!isset($result[$size])) {
+                        $result[$size] = 0;
+                    }
+                    $result[$size] += $qty;
+                }
             }
         }
 
-        // 定义工序名称
-        $processes = ['裁剪', '车缝', '手工', '大烫', '总检', '包装'];
+        $sizeList = array_unique($sizeList);
+        sort($sizeList);
 
         // 获取设备产量数据
         $list = \db('设备_产量计酬')
-            ->where('子订单编号', 'like', $colour_id . '%')
-            ->where('子订单编号',$param['order'])
+            ->where($isSubOrder ? ['子订单编号' => $orderNo] : ['订单编号' => $orderNo])
             ->where('mod_rq', null)
             ->select();
 
+        $processes = ['裁剪', '车缝', '手工', '大烫', '总检', '包装'];
         $data['data'] = [];
-        array_unshift($data['data'], $result); // 将制单数据放在第一个位置
-        // 获取色系的制单总数
-//        $total = \db('工单_印件资料')
-//            ->where('子订单编号', 'like', $colour_id . '%')
-//            ->column('sum(zdtotal)');
-        // 处理各工序数据
+        $data['data'][] = $result;
+
         foreach ($processes as $process) {
-            $res = array_fill_keys($arr, 0); // 初始化每个尺码为0
-            foreach ($list as $value) {
-                if ($value['工序名称'] === $process) {
-                    $quantity = ($process === '裁剪' || $process === '车缝')
-                        ? $value['数量']
-                        : $value['s_num'];
-
-                    // 更新对应尺码的数据
-                    if (array_key_exists($value['尺码'], $res)) {
-                        $res[$value['尺码']] += $quantity;
-                    }
+            $processData = array_fill_keys($sizeList, 0);
+            foreach ($list as $item) {
+                if ($item['工序名称'] === $process && in_array($item['尺码'], $sizeList)) {
+                    $qty = ($process === '裁剪' || $process === '车缝') ? $item['数量'] : $item['s_num'];
+                    $processData[$item['尺码']] += $qty;
                 }
             }
-            // 计算总量并设置工序信息
-            $res['total'] = array_sum($res);
-            $res['工序名称'] = $process;
-//            $res['制单数'] = $total[0];
-            $data['data'][] = $res;
+            $processData['total'] = array_sum($processData);
+            $processData['工序名称'] = $process;
+            $data['data'][] = $processData;
         }
 
-
-
-// 计算完成百分比
-        foreach ($data['data'] as $key => $value) {
-
-            // 如果工序名称是“制单”,则直接将 scale 设置为空
-            if ($value['工序名称'] === '制单') {
-                $data['data'][$key]['scale'] = '';
-                continue; // 跳过当前循环
+        // 计算百分比
+        foreach ($data['data'] as &$val) {
+            if ($val['工序名称'] === '制单') {
+                $val['scale'] = '';
+            } else {
+                $val['scale'] = $result['制单数'] > 0
+                    ? number_format(($val['total'] / $result['制单数']) * 100, 2) . '%'
+                    : '0%';
             }
-
-            // 其他工序正常计算百分比
-            $data['data'][$key]['scale'] = $workOrderData['zdtotal'] > 0
-                ? number_format(($value['total'] / $workOrderData['zdtotal']) * 100, 2) . '%'
-                : '0%';
+        }
+        $data['arr'] = $sizeList;
+
+        if ($isSubOrder) {
+            // 查询的是子订单,直接取第一条完整数据
+            $data['workOrderData'] = $workOrderList[0];
+        } else {
+            // 查询的是订单编号,保留第一条数据但去掉 "子订单编号"
+            $workOrderData = $workOrderList[0];
+            unset($workOrderData['子订单编号']); // 去掉子订单编号
+            $data['workOrderData'] = $workOrderData;
         }
 
 
-        // 输出整理后的数据
-        $data['arr'] = $arr;
-        $data['workOrderData'] = $workOrderData;
-
         $this->success('成功', $data);
     }