liuhairui 1 year ago
parent
commit
08844ab56e

+ 405 - 125
application/api/controller/Index.php

@@ -13,99 +13,338 @@ class Index extends Controller{
     public function index(){$this->success('成功');}
 
     /**
-     *近30天班组生产效率完成情况【缓存】
-     * 查询近三十天车缝小组完成情况
-     * 完成总数量
+     *当日班组报工产量【缓存】
      */
-    public function bzDbToRedis(){
-        //存缓存Redis
+    public function GroupProductionRedis(){
+        // 存缓存Redis
         $redis = redis();
-        $redis_key = md5('bzDbToRedis');
+        $redis_key = md5('GroupProductionRedis');
 
         // 获取当天的日期
-        $todays = date('Y-m-d');//30天前
-        $today = date('Y-m-d');//当天日期
+        $todays = date('Y-m-d'); // 30天前
+//        $today = date('Y-m-d'); // 当天日期
 
-//        $where['c.sczl_bh'] = ['like','%'.'车缝'.'%'];
-        $where['mod_rq'] = null;
-        $where['工序名称'] = '车缝';
+        // 自定义需要显示的生产工序顺序
+        $customGroups = ['裁剪', '车缝', '手工', '大烫', '总检', '包装'];
 
+        // 获取所有设备资料,并按自定义工序顺序过滤
+        $Machine = db('设备_基本资料')
+            ->field('生产工序, 设备编组')
+            ->whereIn('生产工序', $customGroups)
+            ->select();
+        // 查询当天设备产量数据
         $res = db('设备_产量计酬')->alias('c')
-            ->where($where)
-            ->field('c.sczl_bh, SUM(c.数量) as 数量')
+            ->field('c.sczl_bh, SUM(c.数量) as 数量, c.工序名称')
+//            ->where('c.Sys_rq', $today)
             ->group('c.sczl_bh')
             ->select();
-//        echo "<pre>";
-//        print_r($res);
-//        echo "<pre>";die;
 
+        // 将产量数据转换为以设备编组为键的数组,并去除空格,方便合并
+        $resIndexed = [];
+        foreach ($res as $item) {
+            $key = trim($item['sczl_bh']); // 去除空格
+            $resIndexed[$key] = $item['数量'];
+        }
+        // 初始化结果数组,确保所有设备编组都有数量数据
+        $mergedData = [];
+        foreach ($Machine as $machine) {
+            $groupName = trim($machine['设备编组']); // 去除空格
+            $mergedData[] = [
+                '工序名称' => $machine['生产工序'],
+                '组别' => $groupName,
+                '数量' => isset($resIndexed[$groupName]) ? $resIndexed[$groupName] : 0 // 更新数量
+            ];
+        }
+        // 对 $mergedData 进行排序,先按生产工序的自定义顺序排序,再按设备编组的自然顺序排序
+        usort($mergedData, function ($a, $b) use ($customGroups) {
+            // 按生产工序自定义顺序排序
+            $groupOrderA = array_search($a['工序名称'], $customGroups);
+            $groupOrderB = array_search($b['工序名称'], $customGroups);
+
+            if ($groupOrderA === $groupOrderB) {
+                // 在同一生产工序内按设备编号自然排序
+                return strnatcmp($a['组别'], $b['组别']);
+            }
 
-        $redis->set($redis_key, json_encode($res));
+            return $groupOrderA - $groupOrderB;
+        });
+        $redis->set($redis_key, json_encode($mergedData));
         echo date("Y-m-d H:i:s").'存进去了';
-        return $res;
+        return $mergedData;
     }
+    //车缝
+    public function GroupMachineCFyi()
+    {
+        $redis = redis();
+        $row = json_decode($redis->get(md5('GroupProductionRedis')), true);
 
-    /**
-     *近30天班组生产效率完成情况【接口】
-     */
-    public function bzDbTo(){
+        // 初始化小组名称和数量
+        $categories = [];
+        $dataSeries = [];
+
+        // 遍历数据,找到所有工序名称为“车缝”的小组,且不属于“大办组”、“小芬组”、“美英组”
+        foreach ($row as $data) {
+            if ($data['工序名称'] === '车缝' && $data['组别'] != '大办组' && $data['组别'] != '小芬组' && $data['组别'] != '美英组') {
+                $categories[] = $data['组别']; // 添加组别到分类中
+                $dataSeries[$data['组别']] = $data['数量']; // 更新小组数量
+            }
+        }
+
+// 构建输出数据格式
+        $list = [
+            'categories' => $categories,
+            'series' => [
+                [
+                    'name' => '完成',
+                    'data' => array_values($dataSeries) // 获取数量数组
+                ]
+            ]
+        ];
+
+        $res = [
+            'status' => 0,
+            'msg' => '',
+            'data' => $list
+        ];
+
+        // 返回 JSON 格式的结果
+        return json($res);
+    }
+
+//    板房车缝
+    public function GroupMachinebfCFyi()
+    {
         $redis = redis();
-        $row = json_decode($redis->get(md5('bzDbToRedis')), true);
-        echo "<pre>";
-        print_r($row);
-        echo "<pre>";
+        $row = json_decode($redis->get(md5('GroupProductionRedis')), true);
+
+        // 初始化小组名称和数量
+        $categories = [];
+        $dataSeries = [];
+
+// 遍历数据,找到所有工序名称为“车缝”的小组,且只包含“大办组”、“小芬组”、“美英组”
+        foreach ($row as $data) {
+            if ($data['工序名称'] === '车缝' && in_array($data['组别'], ['大办组', '小芬组', '美英组'])) {
+                $categories[] = $data['组别']; // 添加组别到分类中
+                $dataSeries[$data['组别']] = $data['数量']; // 更新小组数量
+            }
+        }
+
+// 构建输出数据格式
+        $list = [
+            'categories' => $categories,
+            'series' => [
+                [
+                    'name' => '完成',
+                    'data' => array_values($dataSeries) // 获取数量数组
+                ]
+            ]
+        ];
+
+        $res = [
+            'status' => 0,
+            'msg' => '',
+            'data' => $list
+        ];
+        // 返回 JSON 格式的结果
+        return json($res);
     }
 
+    //裁剪
+    public function GroupMachineCJyi()
+    {
+        $redis = redis();
+        $row = json_decode($redis->get(md5('GroupProductionRedis')), true);
 
-    /**
-     *当日班组报工产量【缓存】
-     */
-    public function numDbToRedis(){
-        //存缓存Redis
+        // 初始化小组名称和数量
+        $categories = [];
+        $dataSeries = [];
+
+        // 遍历数据,找到所有工序名称为“车缝”的小组
+        foreach ($row as $data) {
+            if ($data['工序名称'] !== '车缝') {
+                $categories[] = $data['组别']; // 添加组别到分类中
+                $dataSeries[$data['组别']] = $data['数量']; // 更新小组数量
+            }
+        }
+
+        // 构建输出数据格式
+        $list = [
+            'categories' => $categories,
+            'series' => [
+                [
+                    'name' => '完成',
+                    'data' => array_values($dataSeries) // 获取数量数组
+                ]
+            ]
+        ];
+
+        $res = [
+            'status' => 0,
+            'msg' => '',
+            'data' => $list
+        ];
+
+        // 返回 JSON 格式的结果
+        return json($res);
+    }
+
+
+
+    //手工
+    public function GroupMachineSGyi()
+    {
         $redis = redis();
-        $redis_key = md5('numDbToRedis');
+        $row = json_decode($redis->get(md5('GroupProductionRedis')), true);
 
-        // 获取当天的日期
-        $todays = date('Y-8-d');
-        $today = date('Y-m-d');
-        // 查询设备_产量计酬表,当日班组报工产量情况,排除车缝班组,按班组和日期分组并累计数量
-        $res = db('设备_产量计酬')
-            ->alias('c')
-            ->where('c.sczl_bh', 'not like', '%车缝%') // 排除车缝班组
-            ->where('c.sys_rq', '>=', $todays . ' 00:00:00') // 当日开始时间
-            ->where('c.sys_rq', '<=', $today . ' 23:59:59') // 当日结束时间
-            ->whereNull('c.mod_rq')
-            ->field('c.sczl_bh, SUM(c.ci_num) as total_num, DATE(c.sys_rq) as date') // 班组编号,数量累计,日期
-            ->group('c.sczl_bh, DATE(c.sys_rq)') // 按班组编号和日期分组
-            ->select();
-        echo "<pre>";
-        print_r($res);
-        echo "<pre>";die;
-        $redis->set($redis_key, json_encode($res));
-        echo date("Y-m-d H:i:s").'存进去了';
-        return $res;
+        // 初始化小组名称和数量
+        $categories = [];
+        $dataSeries = [];
+
+        // 遍历数据,找到所有工序名称为“车缝”的小组
+        foreach ($row as $data) {
+            if ($data['工序名称'] === '手工') {
+                $categories[] = $data['组别']; // 添加组别到分类中
+                $dataSeries[$data['组别']] = $data['数量']; // 更新小组数量
+            }
+        }
+
+        // 构建输出数据格式
+        $list = [
+            'categories' => $categories,
+            'series' => [
+                [
+                    'name' => '完成',
+                    'data' => array_values($dataSeries) // 获取数量数组
+                ]
+            ]
+        ];
+
+        $res = [
+            'status' => 0,
+            'msg' => '',
+            'data' => $list
+        ];
+
+        // 返回 JSON 格式的结果
+        return json($res);
     }
+    //大烫
+    public function GroupMachineDTyi()
+    {
+        $redis = redis();
+        $row = json_decode($redis->get(md5('GroupProductionRedis')), true);
 
-    /**
-     *当日班组报工产量【接口】
-     */
-    public function getPczByRedis(){
-//        $list=['categories'=>[$list2021['rq'],$list2022['rq'],$list2023['rq']],'series'=>[['name'=>'色令数',
-//            'data'=>[round($list2021['nyssl']/10000),round($list2022['nyssl']/10000),round($list2023['nyssl']/10000)]]]];
-//        $res['status']=0;
-//        $res['msg']='';
-//        $res['data']=$list;
-//        $redis->set($redis_key, json_encode($res));
-//        return json_encode($res);
+        // 初始化小组名称和数量
+        $categories = [];
+        $dataSeries = [];
+
+        // 遍历数据,找到所有工序名称为“车缝”的小组
+        foreach ($row as $data) {
+            if ($data['工序名称'] === '大烫') {
+                $categories[] = $data['组别']; // 添加组别到分类中
+                $dataSeries[$data['组别']] = $data['数量']; // 更新小组数量
+            }
+        }
+
+        // 构建输出数据格式
+        $list = [
+            'categories' => $categories,
+            'series' => [
+                [
+                    'name' => '完成',
+                    'data' => array_values($dataSeries) // 获取数量数组
+                ]
+            ]
+        ];
+
+        $res = [
+            'status' => 0,
+            'msg' => '',
+            'data' => $list
+        ];
+
+        // 返回 JSON 格式的结果
+        return json($res);
+    }
+    //总检
+    public function GroupMachineZJyi()
+    {
+        $redis = redis();
+        $row = json_decode($redis->get(md5('GroupProductionRedis')), true);
+
+        // 初始化小组名称和数量
+        $categories = [];
+        $dataSeries = [];
+
+        // 遍历数据,找到所有工序名称为“车缝”的小组
+        foreach ($row as $data) {
+            if ($data['工序名称'] === '总检') {
+                $categories[] = $data['组别']; // 添加组别到分类中
+                $dataSeries[$data['组别']] = $data['数量']; // 更新小组数量
+            }
+        }
+
+        // 构建输出数据格式
+        $list = [
+            'categories' => $categories,
+            'series' => [
+                [
+                    'name' => '完成',
+                    'data' => array_values($dataSeries) // 获取数量数组
+                ]
+            ]
+        ];
 
+        $res = [
+            'status' => 0,
+            'msg' => '',
+            'data' => $list
+        ];
+
+        // 返回 JSON 格式的结果
+        return json($res);
+    }
+    //包装
+    public function GroupMachineBZyi()
+    {
         $redis = redis();
-        $row = json_decode($redis->get(md5('numDbToRedis')), true);
-        echo "<pre>";
-        print_r($row);
-        echo "<pre>";
+        $row = json_decode($redis->get(md5('GroupProductionRedis')), true);
+
+        // 初始化小组名称和数量
+        $categories = [];
+        $dataSeries = [];
+
+        // 遍历数据,找到所有工序名称为“车缝”的小组
+        foreach ($row as $data) {
+            if ($data['工序名称'] === '包装') {
+                $categories[] = $data['组别']; // 添加组别到分类中
+                $dataSeries[$data['组别']] = $data['数量']; // 更新小组数量
+            }
+        }
+
+        // 构建输出数据格式
+        $list = [
+            'categories' => $categories,
+            'series' => [
+                [
+                    'name' => '完成',
+                    'data' => array_values($dataSeries) // 获取数量数组
+                ]
+            ]
+        ];
+
+        $res = [
+            'status' => 0,
+            'msg' => '',
+            'data' => $list
+        ];
+
+        // 返回 JSON 格式的结果
+        return json($res);
     }
 
 
+
     /**
      * 在产订单工序完工详情【缓存】
      */
@@ -113,98 +352,139 @@ class Index extends Controller{
         //存缓存Redis
         $redis = redis();
         $redis_key = md5('getJhzByRedis');
-
+// 定义固定工序名称
+        $processNames = ['裁剪', '车缝', '手工', '大烫', '总检', '包装'];
         $startTime = date('Y-m-d', strtotime('-30 days'));
         $endTime = date('Y-m-d');
-        // 修改查询条件为近30天
-        $where['b.Sys_rq'] = ['between', [$startTime, $endTime]];
-        $list = \db('设备_产量计酬')
-            ->alias('a')
-            ->join('工单_基本资料 b','a.订单编号 = b.订单编号')
-            ->join('工单_印件资料 c','a.订单编号 = c.订单编号 AND a.子订单编号 = c.子订单编号')
-            ->field('c.订单编号,c.子订单编号,c.款号,c.颜色,c.zdtotal as 制单总数,c.sctotal as 裁切总数,c.ck_rq as 出库日期,
-            SUM(a.数量) as 产量,a.工序名称,b.客户编号,b.单位')
+        $where['c.Sys_rq'] = ['between', [$startTime, $endTime]];
+        $where['j.出库日期'] = ['<>', 'NULL'];
+        $where['c.mod_rq'] = null;
+
+// 第一个查询:获取完工数量
+        $list = \db('工单_基本资料')->alias('j')
+            ->join('设备_产量计酬 c', 'j.订单编号 = c.订单编号', 'LEFT')
+            ->field('c.订单编号, j.工单入仓数量, j.客户编号, j.生产款号, j.款式, c.工序名称, sum(c.数量) as 完工数量, j.gd_statu as 订单状态')
             ->where($where)
-            ->group('a.订单编号,a.工序名称')
-            ->order('c.Uniqid')
+            ->group('c.订单编号, c.工序名称')
+            ->having('完工数量 > 0')
             ->select();
-        $orderList = \db('设备_产量计酬')
-            ->alias('a')
-            ->join('工单_基本资料 b','a.订单编号 = b.订单编号')
-            ->join('工单_印件资料 c','a.订单编号 = c.订单编号 AND a.子订单编号 = c.子订单编号')
-            ->field('c.订单编号,c.子订单编号,c.款号,c.颜色,c.zdtotal as 制单总数,c.sctotal as 裁切总数,c.ck_rq as 出库日期,b.客户编号,b.单位')
-            ->where($where)
-            ->group('a.子订单编号')
-            ->order('c.Uniqid')
+
+// 第二个查询:获取制单数
+        $yjwhere['y.Mod_rq'] = null;
+        $yjlist = \db('工单_基本资料')->alias('j')
+            ->join('工单_印件资料 y', 'j.订单编号 = y.订单编号', 'LEFT')
+            ->field('y.订单编号, SUM(y.zdtotal) as 制单数')
+            ->where($yjwhere)
+            ->group('y.订单编号')
             ->select();
-        foreach ($orderList as $key=>$value){
-            $data[$key] = $value;
-            foreach ($list as $k=>$v){
-                if ($value['子订单编号'] === $v['子订单编号']){
-                    if (isset($data[$key][$v['工序名称']]) === false){
-                        $data[$key][$v['工序名称']] = $v['产量'];
-                    }
+
+// 将制单数结果转换为以订单编号为键的数组,方便后续合并
+        $yjlistIndexed = [];
+        foreach ($yjlist as $yj) {
+            $yjlistIndexed[$yj['订单编号']] = $yj['制单数'];
+        }
+
+// 合并数据
+        $mergedData = [];
+        foreach ($list as $order) {
+            $orderId = $order['订单编号'];
+            // 初始化订单数据,如果还未存在
+            if (!isset($mergedData[$orderId])) {
+                // 获取制单数和已完工数量
+                $zdTotal = $yjlistIndexed[$orderId] ?? 0;   // 制单数
+                $completedTotal = $order['工单入仓数量'];    // 已完工数量
+
+                // 计算完成百分比
+                $completionPercentage = $zdTotal > 0 ? round(($completedTotal / $zdTotal) * 100, 2) . '%' : '0%';
+
+                // 初始化订单数据
+                $mergedData[$orderId] = [
+                    '订单编号' => $orderId,
+                    '客户编号' => $order['客户编号'],
+                    '生产款号' => $order['生产款号'],
+                    '款式' => $order['款式'],
+                    '订单状态' => $order['订单状态'],
+                    '已完工数量' => $completedTotal,
+                    '制单数' => $zdTotal,
+                    '完成百分比' => $completionPercentage, // 新增字段:完成百分比
+                ];
+
+                // 初始化所有工序的完工数量为空
+                foreach ($processNames as $process) {
+                    $mergedData[$orderId][$process] = '';
                 }
             }
+            // 更新对应的工序名称和完工数量
+            if (in_array($order['工序名称'], $processNames)) {
+                $mergedData[$orderId][$order['工序名称']] = $order['完工数量'];
+            }
         }
-        $redis->set($redis_key, json_encode($data));
+
+// 转换合并后的数组格式
+        $result = array_values($mergedData);
+        $redis->set($redis_key, json_encode($result));
         echo date("Y-m-d H:i:s").'存进去了';
-        return $data;
+        return $result;
     }
 
     /**
      * 在产订单工序完工详情【接口】
      */
-    public function getZczByRedis(){
+    public function getJhzBy(){
         $redis = redis();
         $row = json_decode($redis->get(md5('getJhzByRedis')), true);
 
         // 列定义
         $result['columns'] = [
-            ['name' => '订单编号', 'id' => 'order', 'width' => '14', 'autoWrap' => "true", 'textAlign' => 'left'],
-            ['name' => '客户', 'id' => 'kehu', 'width' => '16', 'textAlign' => 'left'],
-            ['name' => '制单总数', 'id' => 'zdnum', 'width' => '20', 'autoWrap' => "true", 'textAlign' => 'left'],
-            ['name' => '单位', 'id' => 'dw', 'width' => '16', 'autoWrap' => "true", 'textAlign' => 'left'],
-            ['name' => '出库确认', 'id' => 'chuku', 'width' => '14', 'autoWrap' => "true", 'textAlign' => 'left'],
-            ['name' => '裁切', 'id' => 'caiqie', 'width' => '14', 'autoWrap' => "true", 'textAlign' => 'center'],
-            ['name' => '缝制小烫', 'id' => 'fegnzhi', 'width' => '14', 'autoWrap' => "true", 'textAlign' => 'center'],
-            ['name' => '后道收样', 'id' => 'houdao', 'width' => '14', 'autoWrap' => "true", 'textAlign' => 'center'],
-            ['name' => '大烫', 'id' => 'datang', 'width' => '14', 'autoWrap' => "true", 'textAlign' => 'center'],
-            ['name' => '总检', 'id' => 'zongjian', 'width' => '14', 'autoWrap' => "true", 'textAlign' => 'center'],
-            ['name' => '包装', 'id' => 'baozhaung', 'width' => '14', 'autoWrap' => "true", 'textAlign' => 'center'],
+            ['name' => '订单编号', 'id' => 'ddbh', 'width' => '7%', 'autoWrap' => "true", 'textAlign' => 'left'],
+            ['name' => '客户编号', 'id' => 'khbh', 'width' => '6%', 'textAlign' => 'left'],
+            ['name' => '生产款号', 'id' => 'sckh', 'width' => '6%',  'textAlign' => 'left'],
+            ['name' => '款式', 'id' => 'ks', 'width' => '5%',  'textAlign' => 'left'],
+            ['name' => '订单状态', 'id' => 'ddzt', 'width' => '6%', 'autoWrap' => "true", 'textAlign' => 'left'],
+            ['name' => '裁剪已完成', 'id' => 'cj', 'width' => '7%', 'autoWrap' => "true", 'textAlign' => 'left'],
+            ['name' => '车缝已完成', 'id' => 'cf', 'width' => '7%', 'autoWrap' => "true", 'textAlign' => 'left'],
+            ['name' => '手工已完成', 'id' => 'sg', 'width' => '7%', 'autoWrap' => "true", 'textAlign' => 'left'],
+            ['name' => '大烫已完成', 'id' => 'dt', 'width' => '7%', 'autoWrap' => "true", 'textAlign' => 'left'],
+            ['name' => '总检已完成', 'id' => 'zj', 'width' => '7%', 'autoWrap' => "true", 'textAlign' => 'left'],
+            ['name' => '包装已完成', 'id' => 'bz', 'width' => '7%', 'autoWrap' => "true", 'textAlign' => 'left'],
+            ['name' => '已完成数量', 'id' => 'ywgsl', 'width' => '7%', 'autoWrap' => "true", 'textAlign' => 'left'],
+            ['name' => '制单总数', 'id' => 'zds', 'width' => '6%', 'autoWrap' => "true", 'textAlign' => 'left'],
+            ['name' => '完成百分比', 'id' => 'bfb', 'width' => '9%', 'autoWrap' => "true", 'textAlign' => 'left'],
         ];
 
         if ($row) {
             foreach ($row as $k => $v) {
-                $result['rows'][$k]['order'] = $v['订单编号'];
-                $result['rows'][$k]['kehu'] = $v['客户编号'];
-                $result['rows'][$k]['zdnum'] = $v['制单总数'];
-                $result['rows'][$k]['dw'] = $v['单位'];
-
-                // 判断出库日期,设置出库确认
-                $result['rows'][$k]['chuku'] = isset($v['出库日期']) && !empty($v['出库日期']) ? '已出库' : '未出库';
-
-                $result['rows'][$k]['caiqie'] = $v['裁切'] ?? '';
-                $result['rows'][$k]['fegnzhi'] = $v['缝制小烫'] ?? '';
-                $result['rows'][$k]['houdao'] = $v['后道收样'] ?? '';
-                $result['rows'][$k]['datang'] = $v['大烫'] ?? '';
-                $result['rows'][$k]['zongjian'] = $v['总检'] ?? '';
-                $result['rows'][$k]['baozhaung'] = $v['包装'] ?? '';
+                $result['rows'][$k]['ddbh'] = $v['订单编号'];
+                $result['rows'][$k]['khbh'] = $v['客户编号'];
+                $result['rows'][$k]['sckh'] = $v['生产款号'];
+                $result['rows'][$k]['ks'] = $v['款式'];
+                $result['rows'][$k]['ddzt'] = $v['订单状态'];
+
+                // 工序数量字段,根据之前的定义调整字段名
+                $result['rows'][$k]['cj'] = $v['裁剪'] ?? '';
+                $result['rows'][$k]['cf'] = $v['车缝'] ?? '';
+                $result['rows'][$k]['sg'] = $v['手工'] ?? '';
+                $result['rows'][$k]['dt'] = $v['大烫'] ?? '';
+                $result['rows'][$k]['zj'] = $v['总检'] ?? '';
+                $result['rows'][$k]['bz'] = $v['包装'] ?? '';
+
+                // 其他数量字段
+                $result['rows'][$k]['ywgsl'] = $v['已完工数量'] ?? '';  // 示例字段,需确保与数据一致
+                $result['rows'][$k]['zds'] = $v['制单数'] ?? '';       // 对应制单数
+                $result['rows'][$k]['bfb'] = $v['完成百分比'] ?? '';       // 对应制单数
             }
         } else {
             // 如果没有数据,初始化空行
             $result['rows'][0] = [
-                'order' => '', 'kehu' => '', 'zdnum' => '', 'dw' => '', 'chuku' => '',
-                'caiqie' => '', 'fegnzhi' => '', 'houdao' => '', 'datang' => '', 'zongjian' => '', 'baozhaung' => ''
+                'ddbh' => '', 'khbh' => '', 'sckh' => '', 'ks' => '', 'ddzt' => '',
+                'cj' => '', 'cf' => '', 'sg' => '', 'dt' => '', 'zj' => '', 'bz' => '',
+                'ywgsl' => '', 'zds' => ''
             ];
         }
 //        echo "<pre>";print_r($result);echo "<pre>";die;
-
-        // 构造最终的返回数据
         $res['status'] = 0;
         $res['msg'] = '';
         $res['data'] = $result;
-
         return json($res);
     }
 

+ 1 - 1
application/api/controller/Manufacture.php

@@ -1049,7 +1049,7 @@ class Manufacture extends Api
                 ')
             ->where($where)
             ->where('a.mod_rq',null)
-            ->order('a.UniqId asc')
+            ->order('a.sys_rq desc,a.UniqId desc')
             ->group('a.UniqId')
             ->select();
 

File diff suppressed because it is too large
+ 296 - 955
application/api/controller/WorkOrder.php


+ 119 - 51
application/api/controller/WorkOrderSpotCheck.php

@@ -87,68 +87,55 @@ class WorkOrderSpotCheck extends Api{
                 }
                 break;
             case '裁剪':
+                //订单编号
                 $ddh = explode('-', $order)[0];
                 $currentDateTime = date("Y-m-d H:i:s");
 
-                // 查询是否出库
+                // 查询未出库的记录,若存在则进行批量出库和日志记录
                 $data = \db('工单_印件资料')
-                    ->where([
-                        '子订单编号' => $order,
-                        'ck_rq' => null
-                    ])->find();
-
-                // 检查并更新 '工单_基本资料' 表中的 '出库日期'
-                $basicInfo = \db('工单_基本资料')
-                    ->field('订单编号,出库日期')
-                    ->where('订单编号', $ddh)
+                    ->where(['子订单编号' => $order, 'ck_rq' => null])
                     ->find();
-
-                $updateCount2 = 0;
-                if (empty($basicInfo['出库日期'])) {
-                    $updateCount2 = \db('工单_基本资料')
+                if ($data) {
+                    // 检查并更新工单_基本资料表的出库日期
+                    $sql = \db('工单_基本资料')
                         ->where('订单编号', $ddh)
+                        ->whereNull('出库日期')
                         ->fetchSql(true)
                         ->update(['出库日期' => $currentDateTime]);
-                    \db()->query($updateCount2);
-                }
+                    \db()->query($sql);
 
-                if ($data) {
-
-                    // 获取相同颜色备注的所有未出库子订单记录
+                    // 获取相同颜色备注的未出库子订单编号列表
                     $sameColorList = \db('工单_印件资料')
-                        ->field('子订单编号,订单编号')
-                        ->where([
-                            '订单编号' => $ddh,
-                            'Mod_rq' => null,
-                            'ck_rq' => null
-                        ])->select();
-
-                    // 批量更新 '工单_印件资料' 表中所有相同颜色备注的子订单的出库日期
-                    $updateCount1 = \db('工单_印件资料')
+                        ->where(['订单编号' => $ddh, 'Mod_rq' => null, 'ck_rq' => null])
+                        ->field('子订单编号')
+                        ->select();
+                    // 更新工单_印件资料表的出库日期
+                    $sql = \db('工单_印件资料')
                         ->where('订单编号', $ddh)
                         ->whereNull('Mod_rq')
                         ->whereNull('ck_rq')
+                        ->fetchSql(true)
                         ->update(['ck_rq' => $currentDateTime]);
-
+                    $updateCount1 = \db()->query($sql);
                     if ($updateCount1 > 0) {
-                        // 批量插入日志
-                        $logData = [];
-                        foreach ($sameColorList as $item) {
-                            $logData[] = [
+                        // 批量生成并插入日志数据
+                        $logData = array_map(function ($item) use ($currentDateTime, $params) {
+                            return [
                                 'order_id' => $item['子订单编号'],
                                 'rq' => $currentDateTime,
                                 'name' => $params['code'],
                                 'sys_id' => '裁剪自动出库'
                             ];
-                        }
+                        }, $sameColorList);
                         \db('设备_报工日志')->insertAll($logData);
-//                        $this->success("出库成功");
                     } else {
-                        $this->error('网络异常,重新尝试');
+                        return $this->error('网络异常,重新尝试');
                     }
+
                 }
 
-                if (strpos($order, '-') !== false) { //查询子订单编号对应数据
+                //查询子订单编号对应数据【条码查询】
+                if (strpos($order, '-') !== false) {
                     if (preg_match('/-(\d{2})$/', $order, $matches)) {
                         $number = (int)$matches[1];
                         //船样单子
@@ -389,10 +376,11 @@ class WorkOrderSpotCheck extends Api{
                     $where['c.工序名称'] = $params['code'];
                     $rows = db()->table('设备_产量计酬')->alias('c')
                         ->field('c.款号, c.订单编号, c.子订单编号, c.sys_rq as 上报时间, c.尺码, c.数量')
-//                        ->where([
+                        ->where([
+                            'c.mod_rq' => null,
 //                            'c.订单编号' => $order,
 //                            'c.工序名称' => $params['code']
-//                        ])
+                        ])
                         ->where($where)
                         ->select();
                     $formattedRows = [];
@@ -439,8 +427,6 @@ class WorkOrderSpotCheck extends Api{
                     } else {
                         $where['c.订单编号'] = ['like', '%' . $order . '%'];
                     }
-//                         ->whereNotNull('y.ck_rq')
-//                        ->where('y.ck_rq', '<>', '')
                     $where['c.工序编号'] = '3';
                     $where['c.mod_rq'] = null;
                     $existingRecords = \db('设备_产量计酬')->alias('c')
@@ -451,9 +437,8 @@ class WorkOrderSpotCheck extends Api{
                         ->where($where)
                         ->order('c.sys_rq desc')
                         ->group('c.订单编号, c.子订单编号, c.款号, c.工序编号, c.工序名称, c.尺码, c.数量, c.sczl_jtbh, c.sczl_bh, c.尾包, c.sys_rq, c.serial, c.serial_num, j.款式')
-
-                        //                        ->group('y.子订单编号')
                         ->select();
+
                     $sizeSummary = [];
                     $sizes = [];
                     foreach ($existingRecords as $record) {
@@ -529,6 +514,8 @@ class WorkOrderSpotCheck extends Api{
 
                     return ['headers' => $sizes, 'records' => $finalRecords];
                 }
+
+
                 if (strpos($order, '-') !== false) {
                     if (!isset($params['sys_sbID']) || empty($params['sys_sbID'])) {
                         $this->error('sys_sbID 参数错误');
@@ -1751,10 +1738,11 @@ class WorkOrderSpotCheck extends Api{
                         $updateCount2 = 0;
                         if (empty($basicInfo['出库日期'])) {
                             // 如果 '出库日期' 为空,则更新
-                            $result2 = \db('工单_基本资料')
+                            $jbzl = \db('工单_基本资料')
                                 ->where('订单编号', $order)
+                                ->fetchSql(true)
                                 ->update(['出库日期' => date("Y-m-d H:i:s")]);
-
+                            $result2 = \db()->query($jbzl);
                             if ($result2 !== false) {
                                 $updateCount2 = $result2;
                             }
@@ -2177,28 +2165,108 @@ class WorkOrderSpotCheck extends Api{
      * /work_order_spot_check/del
      */
     public function del() {
-        if (!$this->request->isGet()) {return $this->error('请求错误');}
+        if (!$this->request->isGet()) {
+            return $this->error('请求错误');
+        }
+
         $param = $this->request->param();
-        if (empty($param['UniqId'])) {return $this->error('UniqId参数错误');}
+        if (empty($param['UniqId'])) {
+            return $this->error('UniqId参数错误');
+        }
+
+        // 将 $param['UniqId'] 的值按逗号分割成数组
         $printIdArray = explode(',', $param['UniqId']);
-        // 初始化计数器
+
+        // 初始化失败计数器
         $failureCount = 0;
+
         foreach ($printIdArray as $uniqId) {
+            // 根据 UniqId 查询 设备_产量计酬 表中的订单编号、尺码和数量
+            $result = \db('设备_产量计酬')->where('UniqId', $uniqId)
+                ->field('订单编号,尺码,数量')
+                ->find();
+
+            // 检查是否找到结果
+            if (!$result) {
+                $failureCount++;
+                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]);
+
+            // 更新设备_产量计酬表的mod_rq和delsys_id字段
             $updateData = [
                 'mod_rq' => date('Y-m-d H:i:s'),
                 'delsys_id' => $param['sys_id']
             ];
-            $result = \db('设备_产量计酬')->where('UniqId', $uniqId)->fetchSql(true) ->update($updateData);
+            $result = \db('设备_产量计酬')->where('UniqId', $uniqId)->fetchSql(true)->update($updateData);
             $sql = \db()->query($result);
-            if ($sql === false){
+
+            // 检查更新是否成功
+            if ($sql === false) {
                 $failureCount++;
             }
         }
+
+        // 如果没有失败记录,则表示删除成功
         if ($failureCount === 0) {
             return $this->success('删除成功');
         } else {
-            return $this->error("删除失败,失败次数:{$failureCount}");
+            return $this->error("操作完成,但有 {$failureCount} 条记录更新失败");
         }
     }
 
+
 }

Some files were not shown because too many files changed in this diff