|
@@ -78,63 +78,65 @@ class OrderSuperLoss extends Api
|
|
|
$this->error('参数格式错误,请使用 YYYY-MM 格式');
|
|
$this->error('参数格式错误,请使用 YYYY-MM 格式');
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // 生成缓存key
|
|
|
|
|
+ $cacheKey = 'work_orders_' . $rq;
|
|
|
|
|
+
|
|
|
|
|
+ // 尝试从缓存获取
|
|
|
|
|
+ $cachedData = cache($cacheKey);
|
|
|
|
|
+ if ($cachedData !== false) {
|
|
|
|
|
+ $this->success('成功', $cachedData);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 计算月份起止日期
|
|
// 计算月份起止日期
|
|
|
list($year, $month) = explode('-', $rq);
|
|
list($year, $month) = explode('-', $rq);
|
|
|
$start = "{$year}-{$month}-01";
|
|
$start = "{$year}-{$month}-01";
|
|
|
$end = date('Y-m-d', strtotime("{$year}-{$month}-01 +1 month"));
|
|
$end = date('Y-m-d', strtotime("{$year}-{$month}-01 +1 month"));
|
|
|
|
|
|
|
|
- $list = \think\Db::table('工单_基本资料')
|
|
|
|
|
- ->alias('g')
|
|
|
|
|
- ->join('库存_出入库明细 d', 'g.订单编号 = d.order_id', 'LEFT')
|
|
|
|
|
- ->where('g.落货日期', '>=', $start)
|
|
|
|
|
- ->where('g.落货日期', '<', $end)
|
|
|
|
|
- ->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.辅料计划入库时间 as 辅料计划入库时间',
|
|
|
|
|
-
|
|
|
|
|
- // 面料入库时间 - 使用子查询避免重复
|
|
|
|
|
- \think\Db::raw('(SELECT MIN(rq) FROM 库存_出入库明细 WHERE order_id = g.订单编号 AND name = "入库") as 面料入库时间'),
|
|
|
|
|
-
|
|
|
|
|
- // 裁剪相关 - 使用子查询
|
|
|
|
|
- \think\Db::raw('(SELECT MIN(sczl_rq) 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 MIN(sczl_rq) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = "车缝" AND Mod_rq IS NULL) as 上车位日期'),
|
|
|
|
|
- \think\Db::raw('(SELECT MIN(sczl_rq) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = "车缝" AND 尾包 = 1 AND Mod_rq IS NULL) as 车位完成日期'),
|
|
|
|
|
-
|
|
|
|
|
- // 后道相关 - 使用子查询
|
|
|
|
|
- \think\Db::raw('(SELECT MIN(sczl_rq) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = "手工" AND 尾包 = 1 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 工序名称 = "车缝"
|
|
|
|
|
- AND Mod_rq IS NULL) as 生产组别'),
|
|
|
|
|
-
|
|
|
|
|
- // 占位字段
|
|
|
|
|
- \think\Db::raw('NULL as 辅料入库时间'),
|
|
|
|
|
- \think\Db::raw('NULL as 台产'),
|
|
|
|
|
- \think\Db::raw('NULL as 产前样批核'),
|
|
|
|
|
- \think\Db::raw('NULL as 备注'),
|
|
|
|
|
- ])
|
|
|
|
|
- ->group('g.订单编号')
|
|
|
|
|
- ->select();
|
|
|
|
|
|
|
+ // 使用原生SQL查询,避免框架对中文字段名的校验
|
|
|
|
|
+ $sql = "SELECT
|
|
|
|
|
+ g.Uniqid,
|
|
|
|
|
+ g.订单编号,
|
|
|
|
|
+ g.审核 as 核批,
|
|
|
|
|
+ g.审核日期 as 核批日期,
|
|
|
|
|
+ g.接单日期 as 下单日期,
|
|
|
|
|
+ g.落货日期 as 货期,
|
|
|
|
|
+ g.生产款号 as 款号,
|
|
|
|
|
+ g.订单数量,
|
|
|
|
|
+ g.工单入仓数量 as 入库数量,
|
|
|
|
|
+ g.款式,
|
|
|
|
|
+ g.客户编号 as 客人编号,
|
|
|
|
|
+ g.辅料计划入库时间 as 辅料计划入库时间,
|
|
|
|
|
+
|
|
|
|
|
+ (SELECT MIN(rq) FROM 库存_出入库明细 WHERE order_id = g.订单编号 AND name = '入库') as 面料入库时间,
|
|
|
|
|
+
|
|
|
|
|
+ (SELECT MIN(sczl_rq) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = '裁剪' AND Mod_rq IS NULL) as 开裁日期,
|
|
|
|
|
+ (SELECT SUM(数量) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = '裁剪' AND Mod_rq IS NULL) as 实裁数量,
|
|
|
|
|
+
|
|
|
|
|
+ (SELECT MIN(sczl_rq) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = '车缝' AND Mod_rq IS NULL) as 上车位日期,
|
|
|
|
|
+ (SELECT MIN(sczl_rq) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = '车缝' AND 尾包 = 1 AND Mod_rq IS NULL) as 车位完成日期,
|
|
|
|
|
+
|
|
|
|
|
+ (SELECT MIN(sczl_rq) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = '手工' AND 尾包 = 1 AND Mod_rq IS NULL) as 后道完成日期,
|
|
|
|
|
+
|
|
|
|
|
+ (SELECT SUM(数量) FROM 设备_产量计酬 WHERE 订单编号 = g.订单编号 AND 工序名称 = '包装' AND Mod_rq IS NULL) as 已完成数量,
|
|
|
|
|
+
|
|
|
|
|
+ (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 生产组别,
|
|
|
|
|
+
|
|
|
|
|
+ NULL as 辅料入库时间,
|
|
|
|
|
+ NULL as 台产,
|
|
|
|
|
+ NULL as 产前样批核,
|
|
|
|
|
+ NULL as 备注
|
|
|
|
|
+
|
|
|
|
|
+ FROM 工单_基本资料 g
|
|
|
|
|
+ WHERE g.落货日期 >= '{$start}'
|
|
|
|
|
+ AND g.落货日期 < '{$end}'
|
|
|
|
|
+ AND g.Mod_rq IS NULL
|
|
|
|
|
+ GROUP BY g.订单编号
|
|
|
|
|
+ ORDER BY g.落货日期 ASC";
|
|
|
|
|
+
|
|
|
|
|
+ $list = Db::query($sql);
|
|
|
|
|
|
|
|
if (empty($list)) {
|
|
if (empty($list)) {
|
|
|
$this->success('', []);
|
|
$this->success('', []);
|
|
@@ -159,8 +161,32 @@ class OrderSuperLoss extends Api
|
|
|
$item['入库数量'] = intval($item['入库数量'] ?? 0);
|
|
$item['入库数量'] = intval($item['入库数量'] ?? 0);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // 存入缓存,有效期1小时
|
|
|
|
|
+ cache($cacheKey, $list, 3600);
|
|
|
|
|
+
|
|
|
$this->success('成功', $list);
|
|
$this->success('成功', $list);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 清除工单数据缓存
|
|
|
|
|
+ * @param string $rq 月份(Y-m格式),为空则清除所有当前月份的缓存
|
|
|
|
|
+ */
|
|
|
|
|
+ public function clearWorkOrderCache()
|
|
|
|
|
+ {
|
|
|
|
|
+ $rq = $this->request->get('rq');
|
|
|
|
|
+ if (empty($rq)) {
|
|
|
|
|
+ $this->error('请指定要清除缓存的月份');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!preg_match('/^\d{4}-\d{2}$/', $rq)) {
|
|
|
|
|
+ $this->error('参数格式错误,请使用 YYYY-MM 格式');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $cacheKey = 'work_orders_' . $rq;
|
|
|
|
|
+ cache($cacheKey, null);
|
|
|
|
|
+
|
|
|
|
|
+ $this->success('缓存已清除');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|