liuhairui 1 year ago
parent
commit
c326b736fb
1 changed files with 199 additions and 109 deletions
  1. 199 109
      application/api/controller/WorkOrderSpotCheck.php

+ 199 - 109
application/api/controller/WorkOrderSpotCheck.php

@@ -291,7 +291,7 @@ class WorkOrderSpotCheck extends Api{
                     }
 //                    echo "<pre>";print_r($matchedOrder);echo "</pre>";die;
 
-                    //【查询产量计酬历史记录】
+                    //产量进度汇总记录
                     $rows = db()->table('设备_产量计酬')->alias('c')
 //                        ->join('工单_印件资料 y', 'c.订单编号 = y.订单编号', 'left')
                         ->field('c.款号, c.订单编号, c.子订单编号, c.sys_rq as 上报时间, c.尺码, c.数量')
@@ -325,12 +325,72 @@ class WorkOrderSpotCheck extends Api{
                             $formattedRows[$key]['裁剪数'] += $item['数量'];
                         }
                     }
-                    // 重置索引为连续数字索引
+                    //重置索引为连续数字索引
                     $finalResult = array_values($formattedRows);
+
+                    // 报工历史记录
+                    $existingRecords = \db('设备_产量计酬')->alias('c')
+                        ->field('
+                             c.订单编号, c.子订单编号, c.款号, c.工序编号, c.工序名称, c.尺码, c.数量, c.sczl_jtbh,
+                             c.尾包,c.UniqId,c.ci_num,c.s_num,c.sys_rq, c.serial, 
+                             j.款式,
+                             y.zdtotal, y.sctotal, y.颜色,y.颜色备注
+                             ')
+                        ->join('工单_印件资料 y', 'c.子订单编号 = y.子订单编号', 'left')
+                        ->join('工单_基本资料 j', 'c.订单编号 = j.订单编号', 'left')
+                        ->where('c.子订单编号', $params['order'])
+                        ->where('c.工序名称', $params['code'])
+//                        ->where('c.sczl_jtbh', $params['sys_sbID'])
+                        ->whereNull('c.mod_rq') // 查询未删除数据
+                        ->where(function($query) {
+                            $query->whereNotNull('y.ck_rq')->where('y.ck_rq', '<>', '');
+                        }) // 查询出库数据
+                        ->order('c.UniqId', 'desc')
+                        ->distinct('c.子订单编号')
+                        ->select();
+                    $sizeSummary = [];
+                    $sizes = [];
+                    foreach ($existingRecords as $record) {
+                        $size = $record['尺码'];
+                        $quantity = $record['数量'];
+                        $serial = $record['serial'];
+                        // 如果尺码还没有出现过,加入尺码列表
+                        if (!in_array($size, $sizes)) {
+                            $sizes[] = $size;
+                        }
+                        if (!isset($sizeSummary[$record['UniqId']])) {
+                            $sizeSummary[$record['UniqId']] = [
+                                'UniqId' => $record['UniqId'],
+                                '订单编号' => $record['订单编号'],
+                                '子订单编号' => $record['子订单编号'],
+                                '上报数量' => $record['s_num'],
+                                '剩余数量' => $record['ci_num'],
+                                '次品数量' => $record['数量'] - $record['ci_num'],
+                                '生产款号' => $record['款号'],
+                                '尺码' => $record['尺码'],
+                                '工序编号' => $record['工序编号'],
+                                '工序名称' => $record['工序名称'],
+                                '数量' => $quantity,
+                                '尾包' => $record['尾包'] == 1 ? '是' : '否',
+                                '颜色' => $record['颜色备注'],
+                                '组别' => $record['sczl_jtbh'],
+                                '款式' => $record['款式'],
+                                'serial' => '第('.$serial.')包',
+                                'sys_rq' => $record['sys_rq']
+                            ];
+                        }
+                    }
+                    // 将 $sizeSummary 转换为索引数组
+                    $sizeSummary = array_values($sizeSummary);
+                    // 对 $sizeSummary 按 sys_rq 降序排序
+                    usort($sizeSummary, function ($a, $b) {
+                        return strtotime($b['UniqId']) - strtotime($a['UniqId']);
+                    });
                     $result = [
                         'list' => $matchedOrder,
                         'headers' => $headers,
-                        'table' => $finalResult
+                        'table' => $finalResult,
+                        'bgtable' => $existingRecords
                     ];
                 }else {
 
@@ -430,7 +490,7 @@ class WorkOrderSpotCheck extends Api{
                     $where['c.工序编号'] = '3';
                     $where['c.mod_rq'] = null;
                     $existingRecords = \db('设备_产量计酬')->alias('c')
-                        ->field('c.订单编号, c.子订单编号, c.款号, c.工序编号, c.工序名称, c.尺码, c.数量, c.sczl_jtbh, c.sczl_bh, c.尾包, c.sys_rq, c.serial, c.serial_num,
+                        ->field('c.订单编号, c.子订单编号, c.款号, c.工序编号, c.工序名称, c.尺码, c.数量, c.sczl_jtbh, c.sczl_bh, c.尾包, c.sys_rq, c.serial, c.serial_num,c.UniqId,
                                 y.zdtotal, y.sctotal, j.款式, y.颜色,y.颜色备注, CAST(c.serial_num AS SIGNED) as serial_num_numeric')
                         ->join('工单_印件资料 y', 'c.子订单编号 = y.子订单编号', 'left')
                         ->join('工单_基本资料 j', 'c.订单编号 = j.订单编号', 'left')
@@ -468,6 +528,7 @@ class WorkOrderSpotCheck extends Api{
                                 '组别' => $record['sczl_bh'],
                                 'serial' => [], // 流水号数组
                                 'sys_rq' => $record['sys_rq'],
+                                'UniqId' => $record['UniqId'],
                                 '尺码数据' => [] // 用于存储每个尺码对应的流水号和数量
                             ];
                         }
@@ -695,6 +756,9 @@ class WorkOrderSpotCheck extends Api{
                     $serial = \db('设备_产量计酬')
                         ->field('子订单编号, MAX(CAST(serial AS UNSIGNED)) as serial, MAX(CAST(serial_num AS UNSIGNED)) as serial_num')
                         ->where('子订单编号', $order)
+                        ->where(function($query) {
+                            $query->whereNull('mod_rq')->whereOr('mod_rq', '');
+                        }) // 查询未删除数据
 //                        ->where('sczl_jtbh', $params['sys_sbID'])
                         ->group('子订单编号')
                         ->find();
@@ -821,20 +885,6 @@ class WorkOrderSpotCheck extends Api{
                             'serial' => $paramArray[6],
                         ])
                         ->find();
-
-
-                    // 获取当前手工机台上报的数据
-                    $res = \db('设备_产量计酬')
-                        ->where([
-                            '子订单编号' => $paramArray[0],
-                            '尺码' => $paramArray[3],
-                            '数量' => $paramArray[4],
-                            'serial' => $paramArray[6],
-                            'sczl_jtbh' => $params['sys_sbID'],
-                            'Mod_rq' => null,
-                        ])
-                        ->select();
-
                     // 判断是否成功获取到数据
                     if ($Uniqid) {
                         $orderlist = \db('工单_基本资料')
@@ -849,25 +899,38 @@ class WorkOrderSpotCheck extends Api{
                         $this->error('当前扫码小票无效');
                     }
 
+                    // 获取当前手工机台上报的数据
+                    $res = \db('设备_产量计酬')
+                        ->where([
+                            '子订单编号' => $paramArray[0],
+                            '尺码' => $paramArray[3],
+                            '数量' => $paramArray[4],
+                            'serial' => $paramArray[6],
+                            'sczl_jtbh' => $params['sys_sbID'],
+                            'mod_rq' => null,
+                        ])
+                        ->order('UniqId desc')
+                        ->find();
                     if (empty($res)) {
                         $ci_num = $paramArray[4];
                     } else {
-                        // 累加 s_num
-                        $total_s_num = 0;
-                        foreach ($res as $item) {
-                            $total_s_num += $item['s_num'];
-                        }
-                        if ($total_s_num >= $paramArray[4]) {
-                            $ci_num = 0;
-                        } else {
-                            $ci_num = $res[0]['ci_num'];
-                        }
+                        $ci_num = $res["ci_num"];
+//                        // 累加 s_num
+//                        $total_s_num = 0;
+//                        foreach ($res as $item) {
+//                            $total_s_num += $item['s_num'];
+//                        }
+//                        if ($total_s_num >= $paramArray[4]) {
+//                            $ci_num = 0;
+//                        } else {
+//                            $ci_num = $res[0]['ci_num'];
+//                        }
                     }
 
                     // 判断是否已报工并给出提示
-                    if (!empty($res) && $paramArray[4] == $res[0]['s_num'] || $ci_num === '' || $ci_num === 0) {
-                        $this->error('已上报,无需再次报工');
-                    }
+//                    if (!empty($res) && $res["ci_num"] == 0) {
+//                        $this->error('已上报,无需再次报工');
+//                    }
                     $result = [
                         'sys_sbID' => $params['sys_sbID'],//设备编号
                         'ci_num' => $ci_num,//剩余数量
@@ -923,6 +986,7 @@ class WorkOrderSpotCheck extends Api{
                                 '订单编号' => $record['订单编号'],
                                 '子订单编号' => $record['子订单编号'],
                                 '上报数量' => $record['s_num'],
+                                '剩余数量' => $record['ci_num'],
                                 '次品数量' => $record['数量'] - $record['ci_num'],
                                 '生产款号' => $record['款号'],
                                 '尺码' => $record['尺码'],
@@ -961,10 +1025,11 @@ class WorkOrderSpotCheck extends Api{
                              ')
                         ->join('工单_印件资料 y', 'c.子订单编号 = y.子订单编号', 'left')
                         ->join('工单_基本资料 j', 'c.订单编号 = j.订单编号', 'left')
-                        ->where('c.订单编号', $order)
+                        ->where('c.订单编号', 'like', '%' . explode('DC',$order)[1] . '%')
                         ->where('c.工序名称', $params['code'])
                         ->where('c.sczl_jtbh', $params['sys_sbID'])
                         ->whereNull('c.mod_rq') // 查询未删除数据
+                            ->order('UniqId desc')
                         ->select();
                     // 初始化返回数据的结构
                     $reslist = [];
@@ -984,6 +1049,7 @@ class WorkOrderSpotCheck extends Api{
                             '订单编号' => $record['订单编号'],
                             '子订单编号' => $record['子订单编号'],
                             '上报数量' => $record['s_num'],
+                            '剩余数量' => $record['ci_num'],
                             '次品数量' => $record['数量'] - $record['ci_num'],
                             '生产款号' => $record['款号'],
                             '尺码' => $record['尺码'],
@@ -1028,17 +1094,6 @@ class WorkOrderSpotCheck extends Api{
                         ])
                         ->find();
 
-                    // 获取当前手工机台上报的数据
-                    $res = \db('设备_产量计酬')
-                        ->where([
-                            '子订单编号' => $paramArray[0],
-                            '尺码' => $paramArray[3],
-                            '数量' => $paramArray[4],
-                            'serial' => $paramArray[6],
-                            'sczl_jtbh' => $params['sys_sbID'],
-                            'Mod_rq' => null,
-                        ])
-                        ->select();
 
                     // 获取上一个机台是否已上报过
                     $baogonglist = \db('设备_产量计酬')
@@ -1069,25 +1124,41 @@ class WorkOrderSpotCheck extends Api{
                         $this->error('当前扫码小票无效');
                     }
 
+                    // 获取当前手工机台上报的数据
+                    $res = \db('设备_产量计酬')
+                        ->where([
+                            '子订单编号' => $paramArray[0],
+                            '尺码' => $paramArray[3],
+                            '数量' => $paramArray[4],
+                            'serial' => $paramArray[6],
+                            'sczl_jtbh' => $params['sys_sbID'],
+                            'mod_rq' => null,
+                        ])
+                        ->order('UniqId desc')
+                        ->find();
                     if (empty($res)) {
                         $ci_num = $paramArray[4];
                     } else {
-                        // 累加 s_num
-                        $total_s_num = 0;
-                        foreach ($res as $item) {
-                            $total_s_num += $item['s_num'];
-                        }
-                        if ($total_s_num >= $paramArray[4]) {
-                            $ci_num = 0;
-                        } else {
-                            $ci_num = $res[0]['ci_num'];
-                        }
+                        $ci_num = $res["ci_num"];
+//                        // 累加 s_num
+//                        $total_s_num = 0;
+//                        foreach ($res as $item) {
+//                            $total_s_num += $item['s_num'];
+//                        }
+//                        if ($total_s_num >= $paramArray[4]) {
+//                            $ci_num = 0;
+//                        } else {
+//                            $ci_num = $res[0]['ci_num'];
+//                        }
                     }
 
                     // 判断是否已报工并给出提示
-                    if (!empty($res) && $paramArray[4] == $res[0]['s_num'] || $ci_num === '' || $ci_num === 0) {
-                        $this->error('已上报,无需再次报工');
-                    }
+//                    if (!empty($res) && $paramArray[4] == $res[0]['s_num'] || $ci_num === '' || $ci_num === 0) {
+//                        $this->error('已上报,无需再次报工');
+//                    }
+//                    if (!empty($res) && $res["ci_num"] == 0) {
+//                        $this->success('已上报,无需再次报工');
+//                    }
                     $result = [
                         'sys_sbID' => $params['sys_sbID'],//设备编号
                         'ci_num' => $ci_num,//剩余数量
@@ -1118,6 +1189,7 @@ class WorkOrderSpotCheck extends Api{
                         ->join('工单_印件资料 y', 'c.子订单编号 = y.子订单编号', 'left')
                         ->join('工单_基本资料 j', 'c.订单编号 = j.订单编号', 'left')
                         ->where('c.子订单编号', $paramArray[0])
+                        ->where('c.工序名称', '大烫')
                         ->where('c.sczl_jtbh', $params['sys_sbID'])
                         ->whereNull('c.mod_rq') // 查询未删除数据
                         ->where(function($query) {
@@ -1142,6 +1214,7 @@ class WorkOrderSpotCheck extends Api{
                                 '订单编号' => $record['订单编号'],
                                 '子订单编号' => $record['子订单编号'],
                                 '上报数量' => $record['s_num'],
+                                '剩余数量' => $record['ci_num'],
                                 '次品数量' => $record['数量'] - $record['ci_num'],
                                 '生产款号' => $record['款号'],
                                 '尺码' => $record['尺码'],
@@ -1180,10 +1253,11 @@ class WorkOrderSpotCheck extends Api{
                              ')
                         ->join('工单_印件资料 y', 'c.子订单编号 = y.子订单编号', 'left')
                         ->join('工单_基本资料 j', 'c.订单编号 = j.订单编号', 'left')
-                        ->where('c.订单编号', $order)
+                        ->where('c.订单编号', 'like', '%' . explode('DC',$order)[1] . '%')
                         ->where('c.工序名称', $params['code'])
                         ->where('c.sczl_jtbh', $params['sys_sbID'])
                         ->whereNull('c.mod_rq') // 查询未删除数据
+                        ->order('UniqId desc')
                         ->select();
                     // 初始化返回数据的结构
                     $reslist = [];
@@ -1203,6 +1277,7 @@ class WorkOrderSpotCheck extends Api{
                             '订单编号' => $record['订单编号'],
                             '子订单编号' => $record['子订单编号'],
                             '上报数量' => $record['s_num'],
+                            '剩余数量' => $record['ci_num'],
                             '次品数量' => $record['数量'] - $record['ci_num'],
                             '生产款号' => $record['款号'],
                             '尺码' => $record['尺码'],
@@ -1247,18 +1322,6 @@ class WorkOrderSpotCheck extends Api{
                         ])
                         ->find();
 
-                    // 获取当前手工机台上报的数据
-                    $res = \db('设备_产量计酬')
-                        ->where([
-                            '子订单编号' => $paramArray[0],
-                            '尺码' => $paramArray[3],
-                            '数量' => $paramArray[4],
-                            'serial' => $paramArray[6],
-                            'sczl_jtbh' => $params['sys_sbID'],
-                            'Mod_rq' => null,
-                        ])
-                        ->select();
-
                     // 获取上一个机台是否已上报过
                     $baogonglist = \db('设备_产量计酬')
                         ->where([
@@ -1289,25 +1352,41 @@ class WorkOrderSpotCheck extends Api{
                         $this->error('当前扫码小票无效');
                     }
 
+                    // 获取当前手工机台上报的数据
+                    $res = \db('设备_产量计酬')
+                        ->where([
+                            '子订单编号' => $paramArray[0],
+                            '尺码' => $paramArray[3],
+                            '数量' => $paramArray[4],
+                            'serial' => $paramArray[6],
+                            'sczl_jtbh' => $params['sys_sbID'],
+                            'mod_rq' => null,
+                        ])
+                        ->order('UniqId desc')
+                        ->find();
                     if (empty($res)) {
                         $ci_num = $paramArray[4];
                     } else {
-                        // 累加 s_num
-                        $total_s_num = 0;
-                        foreach ($res as $item) {
-                            $total_s_num += $item['s_num'];
-                        }
-                        if ($total_s_num >= $paramArray[4]) {
-                            $ci_num = 0;
-                        } else {
-                            $ci_num = $res[0]['ci_num'];
-                        }
+                        $ci_num = $res["ci_num"];
+//                        // 累加 s_num
+//                        $total_s_num = 0;
+//                        foreach ($res as $item) {
+//                            $total_s_num += $item['s_num'];
+//                        }
+//                        if ($total_s_num >= $paramArray[4]) {
+//                            $ci_num = 0;
+//                        } else {
+//                            $ci_num = $res[0]['ci_num'];
+//                        }
                     }
 
                     // 判断是否已报工并给出提示
-                    if (!empty($res) && $paramArray[4] == $res[0]['s_num'] || $ci_num === '' || $ci_num === 0) {
-                        $this->error('已上报,无需再次报工');
-                    }
+//                    if (!empty($res) && $paramArray[4] == $res[0]['s_num'] || $ci_num === '' || $ci_num === 0) {
+//                        $this->error('已上报,无需再次报工');
+//                    }
+//                    if (!empty($res) && $res["ci_num"] == 0) {
+//                        $this->error('已上报,无需再次报工');
+//                    }
                     $result = [
                         'sys_sbID' => $params['sys_sbID'],//设备编号
                         'ci_num' => $ci_num,//剩余数量
@@ -1362,6 +1441,7 @@ class WorkOrderSpotCheck extends Api{
                                 '订单编号' => $record['订单编号'],
                                 '子订单编号' => $record['子订单编号'],
                                 '上报数量' => $record['s_num'],
+                                '剩余数量' => $record['ci_num'],
                                 '次品数量' => $record['数量'] - $record['ci_num'],
                                 '生产款号' => $record['款号'],
                                 '尺码' => $record['尺码'],
@@ -1400,10 +1480,11 @@ class WorkOrderSpotCheck extends Api{
                              ')
                         ->join('工单_印件资料 y', 'c.子订单编号 = y.子订单编号', 'left')
                         ->join('工单_基本资料 j', 'c.订单编号 = j.订单编号', 'left')
-                        ->where('c.订单编号', $order)
+                        ->where('c.订单编号', 'like', '%' . explode('DC',$order)[1] . '%')
                         ->where('c.工序名称', $params['code'])
                         ->where('c.sczl_jtbh', $params['sys_sbID'])
                         ->whereNull('c.mod_rq') // 查询未删除数据
+                        ->order('UniqId desc')
                         ->select();
                     // 初始化返回数据的结构
                     $reslist = [];
@@ -1467,18 +1548,6 @@ class WorkOrderSpotCheck extends Api{
                         ])
                         ->find();
 
-                    // 获取当前手工机台上报的数据
-                    $res = \db('设备_产量计酬')
-                        ->where([
-                            '子订单编号' => $paramArray[0],
-                            '尺码' => $paramArray[3],
-                            '数量' => $paramArray[4],
-                            'serial' => $paramArray[6],
-                            'sczl_jtbh' => $params['sys_sbID'],
-                            'Mod_rq' => null,
-                        ])
-                        ->select();
-
                     // 获取上一个机台是否已上报过
                     $baogonglist = \db('设备_产量计酬')
                         ->where([
@@ -1509,25 +1578,41 @@ class WorkOrderSpotCheck extends Api{
                         $this->error('当前扫码小票无效');
                     }
 
+                    // 获取当前手工机台上报的数据
+                    $res = \db('设备_产量计酬')
+                        ->where([
+                            '子订单编号' => $paramArray[0],
+                            '尺码' => $paramArray[3],
+                            '数量' => $paramArray[4],
+                            'serial' => $paramArray[6],
+                            'sczl_jtbh' => $params['sys_sbID'],
+                            'mod_rq' => null,
+                        ])
+                        ->order('UniqId desc')
+                        ->find();
                     if (empty($res)) {
                         $ci_num = $paramArray[4];
                     } else {
-                        // 累加 s_num
-                        $total_s_num = 0;
-                        foreach ($res as $item) {
-                            $total_s_num += $item['s_num'];
-                        }
-                        if ($total_s_num >= $paramArray[4]) {
-                            $ci_num = 0;
-                        } else {
-                            $ci_num = $res[0]['ci_num'];
-                        }
+                        $ci_num = $res["ci_num"];
+//                        // 累加 s_num
+//                        $total_s_num = 0;
+//                        foreach ($res as $item) {
+//                            $total_s_num += $item['s_num'];
+//                        }
+//                        if ($total_s_num >= $paramArray[4]) {
+//                            $ci_num = 0;
+//                        } else {
+//                            $ci_num = $res[0]['ci_num'];
+//                        }
                     }
 
                     // 判断是否已报工并给出提示
-                    if (!empty($res) && $paramArray[4] == $res[0]['s_num'] || $ci_num === '' || $ci_num === 0) {
-                        $this->error('已上报,无需再次报工');
-                    }
+//                    if (!empty($res) && $paramArray[4] == $res[0]['s_num'] || $ci_num === '' || $ci_num === 0) {
+//                        $this->error('已上报,无需再次报工');
+//                    }
+//                    if (!empty($res) && $res["ci_num"] == 0) {
+//                        $this->error('已上报,无需再次报工');
+//                    }
                     $result = [
                         'sys_sbID' => $params['sys_sbID'],//设备编号
                         'ci_num' => $ci_num,//剩余数量
@@ -1582,6 +1667,7 @@ class WorkOrderSpotCheck extends Api{
                                 '订单编号' => $record['订单编号'],
                                 '子订单编号' => $record['子订单编号'],
                                 '上报数量' => $record['s_num'],
+                                '剩余数量' => $record['ci_num'],
                                 '次品数量' => $record['数量'] - $record['ci_num'],
                                 '生产款号' => $record['款号'],
                                 '尺码' => $record['尺码'],
@@ -1620,10 +1706,11 @@ class WorkOrderSpotCheck extends Api{
                              ')
                         ->join('工单_印件资料 y', 'c.子订单编号 = y.子订单编号', 'left')
                         ->join('工单_基本资料 j', 'c.订单编号 = j.订单编号', 'left')
-                        ->where('c.订单编号', $order)
+                        ->where('c.订单编号', 'like', '%' . explode('DC',$order)[1] . '%')
                         ->where('c.工序名称', $params['code'])
                         ->where('c.sczl_jtbh', $params['sys_sbID'])
                         ->whereNull('c.mod_rq') // 查询未删除数据
+                        ->order('UniqId desc')
                         ->select();
                     // 初始化返回数据的结构
                     $reslist = [];
@@ -2091,6 +2178,9 @@ class WorkOrderSpotCheck extends Api{
                 $list_order_id = \db('设备_产量计酬')
                     ->field('子订单编号, MAX(serial) as serial')
                     ->where('子订单编号',  $params['order_id'])
+                    ->where(function($query) {
+                        $query->whereNull('mod_rq')->whereOr('mod_rq', '');
+                    }) // 查询未删除数据
                     ->group('子订单编号')
                     ->find();