|
@@ -121,10 +121,10 @@ class OrderSuperLoss extends Api
|
|
|
// \think\Db::raw('(SELECT SUM(数量) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = "包装" AND Mod_rq IS NULL) as 已完成数量'),
|
|
// \think\Db::raw('(SELECT SUM(数量) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = "包装" AND Mod_rq IS NULL) as 已完成数量'),
|
|
|
|
|
|
|
|
// // 生产组别 - 使用子查询
|
|
// // 生产组别 - 使用子查询
|
|
|
- // \think\Db::raw('(SELECT GROUP_CONCAT(DISTINCT SUBSTRING(sczl_jtbh, 3, 2) ORDER BY SUBSTRING(sczl_jtbh, 3, 2) SEPARATOR "、")
|
|
|
|
|
- // FROM 设备_产量计酬
|
|
|
|
|
- // WHERE 订单编号 = g.订单编号
|
|
|
|
|
- // AND 工序名称 = "车缝"
|
|
|
|
|
|
|
+ // \think\Db::raw('(SELECT GROUP_CONCAT(DISTINCT SUBSTRING(sczl_jtbh, 3, 2) ORDER BY SUBSTRING(sczl_jtbh, 3, 2) SEPARATOR "、")
|
|
|
|
|
+ // FROM 设备_产量计酬
|
|
|
|
|
+ // WHERE 订单编号 = g.订单编号
|
|
|
|
|
+ // AND 工序名称 = "车缝"
|
|
|
// AND Mod_rq IS NULL) as 生产组别'),
|
|
// AND Mod_rq IS NULL) as 生产组别'),
|
|
|
|
|
|
|
|
// // 占位字段
|
|
// // 占位字段
|
|
@@ -162,108 +162,108 @@ class OrderSuperLoss extends Api
|
|
|
// $this->success('成功', $list);
|
|
// $this->success('成功', $list);
|
|
|
// }
|
|
// }
|
|
|
/**
|
|
/**
|
|
|
- * 根据月份获取工单数据
|
|
|
|
|
- */
|
|
|
|
|
-public function getWorkOrdersByMonth()
|
|
|
|
|
-{
|
|
|
|
|
- // 1. 请求方法校验
|
|
|
|
|
- if (!$this->request->isGet()) {
|
|
|
|
|
- return $this->error('请求错误');
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ * 根据月份获取工单数据
|
|
|
|
|
+ */
|
|
|
|
|
+ public function getWorkOrdersByMonth()
|
|
|
|
|
+ {
|
|
|
|
|
+ // 1. 请求方法校验
|
|
|
|
|
+ if (!$this->request->isGet()) {
|
|
|
|
|
+ return $this->error('请求错误');
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- // 2. 参数接收与严格校验
|
|
|
|
|
- $rq = $this->request->get('rq', '', 'trim');
|
|
|
|
|
- if (empty($rq) || !preg_match('/^\d{4}-\d{2}$/', $rq)) {
|
|
|
|
|
- return $this->error('参数格式错误,请使用 YYYY-MM 格式');
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // 2. 参数接收与严格校验
|
|
|
|
|
+ $rq = $this->request->get('rq', '', 'trim');
|
|
|
|
|
+ if (empty($rq) || !preg_match('/^\d{4}-\d{2}$/', $rq)) {
|
|
|
|
|
+ return $this->error('参数格式错误,请使用 YYYY-MM 格式');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 日期范围计算(安全、无歧义)
|
|
|
|
|
+ [$year, $month] = explode('-', $rq);
|
|
|
|
|
+ $start = "{$year}-{$month}-01 00:00:00";
|
|
|
|
|
+ $end = date('Y-m-01 00:00:00', strtotime("{$year}-{$month}-01 +1 month"));
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ $productSub = \think\Db::table('设备_产量计酬')
|
|
|
|
|
+ ->whereNull('Mod_rq')
|
|
|
|
|
+ ->group('订单编号')
|
|
|
|
|
+ ->field([
|
|
|
|
|
+ '订单编号',
|
|
|
|
|
+ "MIN(CASE WHEN 工序名称 = '裁剪' THEN sczl_rq END) AS 开裁日期",
|
|
|
|
|
+ "SUM(CASE WHEN 工序名称 = '裁剪' THEN 数量 END) AS 实裁数量",
|
|
|
|
|
+ "MIN(CASE WHEN 工序名称 = '车缝' THEN sczl_rq END) AS 上车位日期",
|
|
|
|
|
+ "MIN(CASE WHEN 工序名称 = '车缝' AND 尾包 = 1 THEN sczl_rq END) AS 车位完成日期",
|
|
|
|
|
+ "MIN(CASE WHEN 工序名称 = '手工' AND 尾包 = 1 THEN sczl_rq END) AS 后道完成日期",
|
|
|
|
|
+ "SUM(CASE WHEN 工序名称 = '包装' THEN 数量 END) AS 已完成数量",
|
|
|
|
|
+ // 修复长度限制
|
|
|
|
|
+ \think\Db::raw('GROUP_CONCAT(DISTINCT CASE WHEN 工序名称 = "车缝" THEN SUBSTRING(sczl_jtbh, 3, 2) END ORDER BY SUBSTRING(sczl_jtbh, 3, 2) SEPARATOR "、") AS 生产组别'),
|
|
|
|
|
+ ])
|
|
|
|
|
+ ->buildSql();
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ $stockSub = \think\Db::table('库存_出入库明细')
|
|
|
|
|
+ ->whereNull('Mod_rq') // 这里补上!
|
|
|
|
|
+ ->group('order_id')
|
|
|
|
|
+ ->field([
|
|
|
|
|
+ 'order_id',
|
|
|
|
|
+ 'MIN(CASE WHEN name = "入库" THEN rq END) AS 面料入库时间',
|
|
|
|
|
+ ])
|
|
|
|
|
+ ->buildSql();
|
|
|
|
|
|
|
|
- // 3. 日期范围计算(安全、无歧义)
|
|
|
|
|
- [$year, $month] = explode('-', $rq);
|
|
|
|
|
- $start = "{$year}-{$month}-01 00:00:00";
|
|
|
|
|
- $end = date('Y-m-01 00:00:00', strtotime("{$year}-{$month}-01 +1 month"));
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- $productSub = \think\Db::table('设备_产量计酬')
|
|
|
|
|
- ->whereNull('Mod_rq')
|
|
|
|
|
- ->group('订单编号')
|
|
|
|
|
- ->field([
|
|
|
|
|
- '订单编号',
|
|
|
|
|
- "MIN(CASE WHEN 工序名称 = '裁剪' THEN sczl_rq END) AS 开裁日期",
|
|
|
|
|
- "SUM(CASE WHEN 工序名称 = '裁剪' THEN 数量 END) AS 实裁数量",
|
|
|
|
|
- "MIN(CASE WHEN 工序名称 = '车缝' THEN sczl_rq END) AS 上车位日期",
|
|
|
|
|
- "MIN(CASE WHEN 工序名称 = '车缝' AND 尾包 = 1 THEN sczl_rq END) AS 车位完成日期",
|
|
|
|
|
- "MIN(CASE WHEN 工序名称 = '手工' AND 尾包 = 1 THEN sczl_rq END) AS 后道完成日期",
|
|
|
|
|
- "SUM(CASE WHEN 工序名称 = '包装' THEN 数量 END) AS 已完成数量",
|
|
|
|
|
- // 修复长度限制
|
|
|
|
|
- \think\Db::raw('GROUP_CONCAT(DISTINCT CASE WHEN 工序名称 = "车缝" THEN SUBSTRING(sczl_jtbh, 3, 2) END ORDER BY SUBSTRING(sczl_jtbh, 3, 2) SEPARATOR "、") AS 生产组别'),
|
|
|
|
|
- ])
|
|
|
|
|
- ->buildSql();
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- $stockSub = \think\Db::table('库存_出入库明细')
|
|
|
|
|
- ->whereNull('Mod_rq') // 这里补上!
|
|
|
|
|
- ->group('order_id')
|
|
|
|
|
- ->field([
|
|
|
|
|
- 'order_id',
|
|
|
|
|
- 'MIN(CASE WHEN name = "入库" THEN rq END) AS 面料入库时间',
|
|
|
|
|
- ])
|
|
|
|
|
- ->buildSql();
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- $list = \think\Db::table('工单_基本资料')
|
|
|
|
|
- ->alias('g')
|
|
|
|
|
- ->Join([$productSub => 'p'], 'g.订单编号 = p.订单编号')
|
|
|
|
|
- ->Join([$stockSub => 's'], 'g.订单编号 = s.order_id')
|
|
|
|
|
|
|
+
|
|
|
|
|
+ $list = \think\Db::table('工单_基本资料')
|
|
|
|
|
+ ->alias('g')
|
|
|
|
|
+ ->Join([$productSub => 'p'], 'g.订单编号 = p.订单编号', 'LEFT')
|
|
|
|
|
+ ->Join([$stockSub => 's'], 'g.订单编号 = s.order_id', 'LEFT')
|
|
|
->where('g.落货日期', '>=', $start)
|
|
->where('g.落货日期', '>=', $start)
|
|
|
->where('g.落货日期', '<', $end)
|
|
->where('g.落货日期', '<', $end)
|
|
|
->whereNull('g.Mod_rq')
|
|
->whereNull('g.Mod_rq')
|
|
|
- ->field([
|
|
|
|
|
- 'g.Uniqid',
|
|
|
|
|
- 'g.订单编号',
|
|
|
|
|
- 'g.审核 AS 核批',
|
|
|
|
|
- 'g.审核日期 AS 核批日期',
|
|
|
|
|
- 'g.接单日期 AS 下单日期',
|
|
|
|
|
- 'g.落货日期 AS 货期',
|
|
|
|
|
- 'g.生产款号 AS 款号',
|
|
|
|
|
- 'g.订单数量',
|
|
|
|
|
- 'g.工单入仓数量 AS 入库数量',
|
|
|
|
|
- 'g.款式',
|
|
|
|
|
- 'g.客户编号 AS 客人编号',
|
|
|
|
|
- 'g.辅料计划入库时间',
|
|
|
|
|
- 's.面料入库时间',
|
|
|
|
|
- 'p.开裁日期',
|
|
|
|
|
- 'p.实裁数量',
|
|
|
|
|
- 'p.上车位日期',
|
|
|
|
|
- 'p.车位完成日期',
|
|
|
|
|
- 'p.后道完成日期',
|
|
|
|
|
- 'p.已完成数量',
|
|
|
|
|
- 'p.生产组别',
|
|
|
|
|
- \think\Db::raw('NULL AS 辅料入库时间'),
|
|
|
|
|
- \think\Db::raw('NULL AS 台产'),
|
|
|
|
|
- \think\Db::raw('NULL AS 产前样批核'),
|
|
|
|
|
- \think\Db::raw('NULL AS 备注'),
|
|
|
|
|
- ])
|
|
|
|
|
- ->select();
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- $dateFields = [
|
|
|
|
|
- '下单日期', '货期', '面料入库时间', '开裁日期',
|
|
|
|
|
- '上车位日期', '车位完成日期', '后道完成日期'
|
|
|
|
|
- ];
|
|
|
|
|
-
|
|
|
|
|
- foreach ($list as &$item) {
|
|
|
|
|
- foreach ($dateFields as $field) {
|
|
|
|
|
- $item[$field] = !empty($item[$field]) ? date('Y-m-d', strtotime($item[$field])) : null;
|
|
|
|
|
|
|
+ ->field([
|
|
|
|
|
+ 'g.Uniqid',
|
|
|
|
|
+ 'g.订单编号',
|
|
|
|
|
+ 'g.审核 AS 核批',
|
|
|
|
|
+ 'g.审核日期 AS 核批日期',
|
|
|
|
|
+ 'g.接单日期 AS 下单日期',
|
|
|
|
|
+ 'g.落货日期 AS 货期',
|
|
|
|
|
+ 'g.生产款号 AS 款号',
|
|
|
|
|
+ 'g.订单数量',
|
|
|
|
|
+ 'g.工单入仓数量 AS 入库数量',
|
|
|
|
|
+ 'g.款式',
|
|
|
|
|
+ 'g.客户编号 AS 客人编号',
|
|
|
|
|
+ 'g.辅料计划入库时间',
|
|
|
|
|
+ 's.面料入库时间',
|
|
|
|
|
+ 'p.开裁日期',
|
|
|
|
|
+ 'p.实裁数量',
|
|
|
|
|
+ 'p.上车位日期',
|
|
|
|
|
+ 'p.车位完成日期',
|
|
|
|
|
+ 'p.后道完成日期',
|
|
|
|
|
+ 'p.已完成数量',
|
|
|
|
|
+ 'p.生产组别',
|
|
|
|
|
+ \think\Db::raw('NULL AS 辅料入库时间'),
|
|
|
|
|
+ \think\Db::raw('NULL AS 台产'),
|
|
|
|
|
+ \think\Db::raw('NULL AS 产前样批核'),
|
|
|
|
|
+ \think\Db::raw('NULL AS 备注'),
|
|
|
|
|
+ ])
|
|
|
|
|
+ ->select();
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ $dateFields = [
|
|
|
|
|
+ '下单日期', '货期', '面料入库时间', '开裁日期',
|
|
|
|
|
+ '上车位日期', '车位完成日期', '后道完成日期'
|
|
|
|
|
+ ];
|
|
|
|
|
+
|
|
|
|
|
+ foreach ($list as &$item) {
|
|
|
|
|
+ foreach ($dateFields as $field) {
|
|
|
|
|
+ $item[$field] = !empty($item[$field]) ? date('Y-m-d', strtotime($item[$field])) : null;
|
|
|
|
|
+ }
|
|
|
|
|
+ $item['实裁数量'] = (int)($item['实裁数量'] ?? 0);
|
|
|
|
|
+ $item['已完成数量'] = (int)($item['已完成数量'] ?? 0);
|
|
|
|
|
+ $item['订单数量'] = (int)($item['订单数量'] ?? 0);
|
|
|
|
|
+ $item['入库数量'] = (int)($item['入库数量'] ?? 0);
|
|
|
|
|
+ $item['生产组别'] = $item['生产组别'] ?? '';
|
|
|
}
|
|
}
|
|
|
- $item['实裁数量'] = (int)($item['实裁数量'] ?? 0);
|
|
|
|
|
- $item['已完成数量'] = (int)($item['已完成数量'] ?? 0);
|
|
|
|
|
- $item['订单数量'] = (int)($item['订单数量'] ?? 0);
|
|
|
|
|
- $item['入库数量'] = (int)($item['入库数量'] ?? 0);
|
|
|
|
|
- $item['生产组别'] = $item['生产组别'] ?? '';
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- return $this->success('成功', $list);
|
|
|
|
|
-}
|
|
|
|
|
|
|
+ return $this->success('成功', $list);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|