Browse Source

first commit

liuhairui 10 tháng trước cách đây
mục cha
commit
99fc2f89a6

+ 21 - 10
application/api/controller/Manufacture.php

@@ -1245,27 +1245,27 @@ class Manufacture extends Api
             $where['j.Sys_rq'] = ['like', "$year-$month%"];
         }
         // 只查询生产中的工单
-        $where['j.gd_statu'] = '2-生产中';
+//        $where['j.gd_statu'] = '2-生产中';
         $where['j.Mod_rq'] = null;
         // 执行查询
         $orderList = \db('工单_基本资料')->alias('j')
             ->join('工单_印件资料 y', 'j.订单编号 = y.订单编号')
-            ->field('j.Sys_rq, y.订单编号, j.落货日期, j.生产款号, j.款式, SUM(y.sctotal) as 裁剪总数, SUM(y.zdtotal) as 制单总数')
+            ->field('j.Sys_rq, y.订单编号, j.落货日期, j.生产款号, j.款式, SUM(y.sctotal) as 裁剪总数, SUM(y.zdtotal) as 制单总数,j.gd_statu,j.客户编号')
             ->group('y.订单编号')
             ->where($where)
             ->select();
         $orderIds = array_column($orderList, '订单编号');
+
         // 通过订单编号关联设备_产量计酬表,获取工序名称和数量,并进行分组和汇总
+        $wheres['a.mod_rq'] = null;
         $processList = \db('设备_产量计酬')
             ->alias('a')
             ->join('工单_基本资料 j', 'a.订单编号 = j.订单编号')
             ->whereIn('a.订单编号', $orderIds)  // 只查询符合条件的订单编号
-            ->field('a.订单编号, a.工序名称, SUM(a.数量) as 总数量')
+            ->field('a.订单编号, a.工序名称, SUM(a.数量) as 总数量,SUM(a.s_num) as 上报数量,a.mod_rq')
+            ->where($wheres)
             ->group('a.订单编号, a.工序名称')  // 按订单编号和工序名称分组
             ->select();
-//echo "<pre>";
-//print_r($processList);
-//echo "<pre>";
         // 合并两个结果
         $data = [];
         foreach ($orderList as $key => $order) {
@@ -1277,15 +1277,26 @@ class Manufacture extends Api
                 '落货日期' => $order['落货日期'],
                 '生产款号' => $order['生产款号'],
                 '款式' => $order['款式'],
+                '客户编号' => $order['客户编号'],
+                '订单状态' => $order['gd_statu'],
                 '裁剪总数' => $order['裁剪总数'],
                 '制单总数' => $order['制单总数'],
             ];
-            // 找到该订单编号对应的工序名称和数量
+            //找到该订单编号对应的工序名称和数量
+            //裁剪、车缝计算数量,其他计算s_num合计
             foreach ($processList as $process) {
-                if ($process['订单编号'] === $order['订单编号']) {
-                    // 将工序名称和数量加入到结果中
-                    $data[$key][$process['工序名称']] = $process['总数量'];
+                if($process['工序名称'] == '裁剪' || $process['工序名称'] == '车缝'){
+                    if ($process['订单编号'] === $order['订单编号']) {
+                        // 将工序名称和数量加入到结果中
+                        $data[$key][$process['工序名称']] = $process['总数量'];
+                    }
+                }else{
+                    if ($process['订单编号'] === $order['订单编号']) {
+                        // 将工序名称和数量加入到结果中
+                        $data[$key][$process['工序名称']] = $process['上报数量'];
+                    }
                 }
+
             }
         }
         // 返回最终结果

+ 68 - 142
application/api/controller/WorkOrder.php

@@ -307,30 +307,57 @@ class WorkOrder extends Api
     /**
      * 月度客户订单汇总
      */
-    public function ProductInformation(){
+    public function ProductInformation()
+    {
         if ($this->request->isGet() === false) {
             $this->error('请求错误');
         }
-        $where['j.gd_statu'] = '2-生产中';
-        $where['j.Mod_rq'] = null;
 
+        // 查询生产中和未生产的数据,使用 CASE WHEN 进行分类统计
         $data = \db('工单_基本资料')->alias('j')
-            ->field('j.客户编号, REPLACE(DATE_FORMAT(j.Sys_rq, "%Y-%m"), "-", "") as 年月, GROUP_CONCAT(DISTINCT j.订单编号) as 订单编号')
-            ->where($where)
-            ->order('j.客户编号 asc')
+            ->field('
+            j.客户编号,
+            REPLACE(DATE_FORMAT(j.Sys_rq, "%Y-%m"), "-", "") as 年月,
+            SUM(CASE WHEN j.gd_statu = "2-生产中" THEN 1 ELSE 0 END) as 生产中数量,
+            SUM(CASE WHEN j.gd_statu = "1-计划中" THEN 1 ELSE 0 END) as 未生产数量
+        ')
+            ->where('j.Mod_rq', null) // 统一的查询条件
             ->group('j.客户编号, 年月')
+            ->order('j.客户编号 asc')
             ->select();
 
+        // 格式化数据
         $result = [];
         foreach ($data as $item) {
-            $orderlist = count(explode(',', $item['订单编号']));
-            $result[$item['年月']][] = [$item['客户编号'] . '【生产中:' . $orderlist . '】',
-            ];
+            $result[$item['年月']][] = $item['客户编号'] . '【生产中' . $item['生产中数量'] . ',计划中' . $item['未生产数量'] . '】';
         }
 
         $this->success('请求成功', ['data' => $result]);
     }
 
+//    public function ProductInformation(){
+//        if ($this->request->isGet() === false) {
+//            $this->error('请求错误');
+//        }
+//        $where['j.gd_statu'] = '2-生产中';
+//        $where['j.Mod_rq'] = null;
+//
+//        $data = \db('工单_基本资料')->alias('j')
+//            ->field('j.客户编号, REPLACE(DATE_FORMAT(j.Sys_rq, "%Y-%m"), "-", "") as 年月, GROUP_CONCAT(DISTINCT j.订单编号) as 订单编号')
+//            ->where($where)
+//            ->order('j.客户编号 asc')
+//            ->group('j.客户编号, 年月')
+//            ->select();
+//        $result = [];
+//        foreach ($data as $item) {
+//            $orderlist = count(explode(',', $item['订单编号']));
+//            $result[$item['年月']][] = [$item['客户编号'] . '【生产中:' . $orderlist . '】',
+//            ];
+//        }
+//
+//        $this->success('请求成功', ['data' => $result]);
+//    }
+
 
 
     /**
@@ -837,6 +864,7 @@ class WorkOrder extends Api
         } else {
             $param['订单编号'] = $param['订单编号'];
         }
+
         $sql= \db('工单_基本资料')->fetchSql(true)->insert($param);
         $res = \db()->query($sql);
         if ($res !== false){
@@ -1127,6 +1155,10 @@ class WorkOrder extends Api
         $prefixDir = ROOT_PATH . '/public/';
         $uploadDir = ''.'uploads/' . date('Ymd') . '/' . $relateId;
 
+        DB::name('工单_基本资料')
+            ->where('订单编号', $relateId)
+            ->update(['gd_statu' => '2-生产中']);
+
         // 检查并创建目录
         if (!is_dir($prefixDir . $uploadDir)) {
             mkdir($prefixDir . $uploadDir, 0777, true);
@@ -1448,9 +1480,6 @@ class WorkOrder extends Api
                         $finalList[] = $mergedData[$key]; // 在组的尾部添加合并数据
                     }
                 }
-
-
-
                 // 将船样为1的数据添加到最终列表中
                 $finalList = array_merge($finalList, $chuanyang);
                 $data['process'] = $finalList;
@@ -1458,147 +1487,41 @@ class WorkOrder extends Api
                 $data['xhdata'] = $arr;
                 $this->success('成功',$data);
             } elseif (strlen($afterDash) == 4) {
-
-//                if($list['water'] == 1){
-                // 查询非船样数据
-                // 获取数据
+                    //一条子订单编号一个条码,统计颜色
 //                $processlist = \db('工单_印件资料')
 //                    ->where('订单编号', $param['order'])
-//                    ->where($where)
-//                    ->where('船样', 0)
-//                    ->field('子订单编号,款号, color_id, 颜色, 颜色备注, zdtotal,船样, Uniqid,
-//             cm1, cm2, cm3, cm4, cm5, cm6, cm7, cm8, cm9, cm10,
-//             cmsl1, cmsl2, cmsl3, cmsl4, cmsl5, cmsl6, cmsl7, cmsl8, cmsl9, cmsl10')
+//                    ->whereNull('Mod_rq') // 查询未删除数据
 //                    ->select();
 //
-//// 格式化原始数据
-//                $formattedData = [];
+//                $table = [];
 //                foreach ($processlist as $item) {
+//                    // 当前子订单编号的数据
+//                    $subOrder = [
+//                        '颜色备注' => $item['颜色备注'],
+//                        '色系名称' => $item['颜色'],
+//                        '订单编号' => $item['订单编号'],
+//                        '子订单编号' => $item['子订单编号'],
+//                        '条码' => $item['子订单编号'],
+//                        '款号' => $item['款号'],
+//                    ];
+//                    // 当前子订单编号的合计
+//                    $subOrderTotal = 0;
 //                    for ($i = 1; $i <= 10; $i++) {
 //                        if (!empty($item['cm' . $i])) {
-//                            $size = $item['cm' . $i];
-//                            $item[$size] = $item['cmsl' . $i]; // 动态映射尺码字段
-//                        }
-//                        unset($item['cm' . $i], $item['cmsl' . $i]); // 删除原始字段
-//                    }
-//                    $formattedData[] = $item;
-//                }
-//
-//// 合并数据逻辑
-//                $result = [];
-//                foreach ($formattedData as $item) {
-//                    $key = $item['color_id'] . '_' . $item['颜色备注'];
-//                    if (!isset($result[$key])) {
-//                        $result[$key] = $item;
-//                        $result[$key]['条码'] = $item['子订单编号']; // 初始化条码字段
-//                    } else {
-//                        foreach ($item as $size => $value) {
-//                            if (is_numeric($size)) {
-//                                $result[$key][$size] = ($result[$key][$size] ?? 0) + $value; // 累加尺码
-//                            }
-//                        }
-//                        $result[$key]['zdtotal'] += $item['zdtotal']; // 累加总数
-//                    }
-//                }
-//
-//// 按照合并逻辑插入合并数据
-//                $finalData = $formattedData; // 复制原始数据
-//                foreach ($result as $key => $mergeItem) {
-//                    foreach (array_reverse($finalData, true) as $index => $originalItem) {
-//                        if ($originalItem['color_id'] . '_' . $originalItem['颜色备注'] === $key) {
-//                            // 插入合并数据到最后一条记录之后
-//                            $finalData = array_merge(
-//                                array_slice($finalData, 0, $index + 1),
-//                                [$mergeItem],
-//                                array_slice($finalData, $index + 1)
-//                            );
-//                            break;
+//                            $subOrder[$item['cm' . $i]] = $item['cmsl' . $i];
+//                            // 累加每个尺码的数量
+//                            $subOrderTotal += $item['cmsl' . $i];
 //                        }
+//                        unset($item['cm' . $i], $item['cmsl' . $i]);
 //                    }
+//                    $subOrder['合计'] = $subOrderTotal; // 添加合计
+//                    $table[] = $subOrder; // 将当前子订单的数据添加到 $table 中
 //                }
-//
-//// 按 color_id 和 颜色备注 排序
-//                usort($finalData, function ($a, $b) {
-//                    // 按 color_id 排序
-//                    if ($a['color_id'] === $b['color_id']) {
-//                        // 如果 color_id 相同,按颜色备注排序
-//                        return strcmp($a['颜色备注'], $b['颜色备注']);
-//                    }
-//                    return strcmp($a['color_id'], $b['color_id']);
-//                });
-//
-//                // 查询船样为 1 的数据
-//                $chuanyang = \db('工单_印件资料')
-//                    ->where('订单编号', $param['order'])
-//                    ->where($where)
-//                    ->where('船样', 1)
-//                    ->field('子订单编号,款号, color_id, 颜色, 颜色备注, zdtotal,船样, Uniqid,
-//             cm1, cm2, cm3, cm4, cm5, cm6, cm7, cm8, cm9, cm10,
-//             cmsl1, cmsl2, cmsl3, cmsl4, cmsl5, cmsl6, cmsl7, cmsl8, cmsl9, cmsl10')
-//                    ->select();
-//
-//// 格式化船样数据// 格式化原始数据
-//                $chuanyangvval = [];
-//                foreach ($chuanyang as $item) {
-//                    for ($i = 1; $i <= 10; $i++) {
-//                        if (!empty($item['cm' . $i])) {
-//                            $size = $item['cm' . $i];
-//                            $item[$size] = $item['cmsl' . $i]; // 动态映射尺码字段
-//                        }
-//                        unset($item['cm' . $i], $item['cmsl' . $i]); // 删除原始字段
-//                    }
-//                    $item['条码'] = $item['子订单编号']; // 添加条码字段
-//
-//                    $chuanyangvval[] = $item;
-//                }
-//
-//                // 合并船样和非船样数据并去重
-//                $final = array_map('unserialize', array_unique(array_map('serialize', array_merge($finalData, $chuanyangvval))));
-//
-//                // 清理数据:对于船样为 0 的记录,删除子订单编号和颜色字段
-//                foreach ($final as &$item) {
-//                    if (isset($item['条码']) && $item['船样'] == 0) {
-//                        unset($item['子订单编号'], $item['颜色']);
-//                    }
-//                }
-//
-//                // 统计累积数据
-//                $counthz = \db('工单_印件资料')
-//                    ->where('订单编号', $param['order'])
-//                    ->where($where)
-//                    ->select();
-//
-//                // 初始化统计数组
-//                $scslTotals = [
-//                    'cmsl1' => 0, 'cmsl2' => 0, 'cmsl3' => 0, 'cmsl4' => 0, 'cmsl5' => 0,
-//                    'cmsl6' => 0, 'cmsl7' => 0, 'cmsl8' => 0, 'cmsl9' => 0, 'cmsl10' => 0,
-//                    'zdtotal' => 0,
-//                ];
-//
-//                // 累加统计尺码数量
-//                foreach ($counthz as $item) {
-//                    for ($i = 1; $i <= 10; $i++) {
-//                        $key = "cmsl{$i}";
-//                        $scslTotals[$key] += (int)($item[$key] ?? 0); // 累加每个尺码的数量
-//                    }
-//                }
-//                $scslTotals['zdtotal'] = array_sum(array_slice($scslTotals, 0, 10)); // 计算总数
-//                echo "<pre>";
-//                print_r($processlist);
-//                echo "<pre>";
-//                // 返回数据给前端
-//                $data['process'] = $processlist;
-//                $data['scslTotals'] = $scslTotals;//汇总数据集
-//                $data['order'] = $list;//表格数据
-//                $data['xhdata'] = $arr;//尺码表头
-//
-//                $this->success('成功', $data);
-//                }else{
-                    //一条子订单编号一个条码,统计颜色
                 $processlist = \db('工单_印件资料')
                     ->where('订单编号', $param['order'])
                     ->whereNull('Mod_rq') // 查询未删除数据
                     ->select();
+
                 $table = [];
                 foreach ($processlist as $item) {
                     // 当前子订单编号的数据
@@ -1613,17 +1536,20 @@ class WorkOrder extends Api
                     // 当前子订单编号的合计
                     $subOrderTotal = 0;
                     for ($i = 1; $i <= 10; $i++) {
-                        if (!empty($item['cm' . $i])) {
-                            $subOrder[$item['cm' . $i]] = $item['cmsl' . $i];
+                        // 判断 cm 和 cmsl 是否有值,空值不显示,0 则显示
+                        if (isset($item['cm' . $i]) && $item['cm' . $i] !== '') {
+                            $subOrder[$item['cm' . $i]] = $item['cmsl' . $i] ?? 0; // 默认数量为 0
                             // 累加每个尺码的数量
-                            $subOrderTotal += $item['cmsl' . $i];
+                            $subOrderTotal += (int)$item['cmsl' . $i]; // 确保是数值类型
                         }
+                        // 清理字段
                         unset($item['cm' . $i], $item['cmsl' . $i]);
                     }
                     $subOrder['合计'] = $subOrderTotal; // 添加合计
                     $table[] = $subOrder; // 将当前子订单的数据添加到 $table 中
                 }
 
+
                 // 初始化汇总数组
                 $scslTotals = [
                     "cmsl1" => 0,

+ 53 - 53
application/api/controller/WorkOrderSpotCheck.php

@@ -2272,59 +2272,59 @@ class WorkOrderSpotCheck extends Api{
                 continue; // 跳过当前循环,处理下一个 UniqId
             }
 
-            // 根据订单编号查询工单_印件资料表,并排除有修改日期的记录
-            $yresult = \db('工单_印件资料')->where('订单编号', $result['订单编号'])
-                ->whereNull('Mod_rq')
-                ->find();
-
-            // 检查是否找到结果
-            if (!$yresult) {
-                $failureCount++;
-                continue; // 跳过当前循环,处理下一个 UniqId
-            }
-
-            // 获取 result 中的尺码和数量
-            $size = $result['尺码'];
-            $quantity = $result['数量'];
-
-            // 遍历 yresult 中的 cm1 到 cm10 字段,查找匹配的尺码
-            for ($i = 1; $i <= 10; $i++) {
-                $cmField = 'cm' . $i;
-                $scslField = 'scsl' . $i;
-
-                // 检查 yresult 中是否存在对应的尺码字段,且值等于 result 中的尺码
-                if (isset($yresult[$cmField]) && $yresult[$cmField] === $size) {
-                    // 找到对应 scsl 字段并进行数量减法
-                    if (isset($yresult[$scslField])) {
-                        $yresult[$scslField] -= $quantity;
-
-                        // 防止数量变成负数
-                        if ($yresult[$scslField] < 0) {
-                            $yresult[$scslField] = 0;
-                        }
-
-                        // 更新数据库中的 scsl 字段
-                        \db('工单_印件资料')
-                            ->where('订单编号', $result['订单编号'])
-                            ->update([$scslField => $yresult[$scslField]]);
-                    }
-                    break; // 找到并处理后,跳出循环
-                }
-            }
-
-            // 重新计算 scsl1 到 scsl10 的总和并更新 sctotal 字段
-            $newTotal = 0;
-            for ($i = 1; $i <= 10; $i++) {
-                $scslField = 'scsl' . $i;
-                if (isset($yresult[$scslField])) {
-                    $newTotal += $yresult[$scslField];
-                }
-            }
-
-            // 更新 sctotal 的最新值到数据库
-            \db('工单_印件资料')
-                ->where('订单编号', $result['订单编号'])
-                ->update(['sctotal' => $newTotal]);
+//            // 根据订单编号查询工单_印件资料表,并排除有修改日期的记录
+//            $yresult = \db('工单_印件资料')->where('订单编号', $result['订单编号'])
+//                ->whereNull('Mod_rq')
+//                ->find();
+//
+//            // 检查是否找到结果
+//            if (!$yresult) {
+//                $failureCount++;
+//                continue; // 跳过当前循环,处理下一个 UniqId
+//            }
+//
+//            // 获取 result 中的尺码和数量
+//            $size = $result['尺码'];
+//            $quantity = $result['数量'];
+//
+//            // 遍历 yresult 中的 cm1 到 cm10 字段,查找匹配的尺码
+//            for ($i = 1; $i <= 10; $i++) {
+//                $cmField = 'cm' . $i;
+//                $scslField = 'scsl' . $i;
+//
+//                // 检查 yresult 中是否存在对应的尺码字段,且值等于 result 中的尺码
+//                if (isset($yresult[$cmField]) && $yresult[$cmField] === $size) {
+//                    // 找到对应 scsl 字段并进行数量减法
+//                    if (isset($yresult[$scslField])) {
+//                        $yresult[$scslField] -= $quantity;
+//
+//                        // 防止数量变成负数
+//                        if ($yresult[$scslField] < 0) {
+//                            $yresult[$scslField] = 0;
+//                        }
+//
+//                        // 更新数据库中的 scsl 字段
+//                        \db('工单_印件资料')
+//                            ->where('订单编号', $result['订单编号'])
+//                            ->update([$scslField => $yresult[$scslField]]);
+//                    }
+//                    break; // 找到并处理后,跳出循环
+//                }
+//            }
+//
+//            // 重新计算 scsl1 到 scsl10 的总和并更新 sctotal 字段
+//            $newTotal = 0;
+//            for ($i = 1; $i <= 10; $i++) {
+//                $scslField = 'scsl' . $i;
+//                if (isset($yresult[$scslField])) {
+//                    $newTotal += $yresult[$scslField];
+//                }
+//            }
+//
+//            // 更新 sctotal 的最新值到数据库
+//            \db('工单_印件资料')
+//                ->where('订单编号', $result['订单编号'])
+//                ->update(['sctotal' => $newTotal]);
 
             // 更新设备_产量计酬表的mod_rq和delsys_id字段
             $updateData = [