|
|
@@ -217,6 +217,251 @@ class ProductionLot extends Api
|
|
|
$list[$key]['用户'] = '';
|
|
|
}
|
|
|
$this->success('成功',$list);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 物料批次信息
|
|
|
+ * @return void
|
|
|
+ * @throws \think\db\exception\DataNotFoundException
|
|
|
+ * @throws \think\db\exception\ModelNotFoundException
|
|
|
+ * @throws \think\exception\DbException
|
|
|
+ */
|
|
|
+ public function MaterialsBatch()
|
|
|
+ {
|
|
|
+ // 1. 简化请求方法验证
|
|
|
+ if (!$this->request->isGet()) {
|
|
|
+ $this->error('请求错误');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 集中参数验证
|
|
|
+ $requiredParams = ['gdbh', 'yjno', 'num'];
|
|
|
+ $param = $this->request->param();
|
|
|
+ $missingParams = [];
|
|
|
+
|
|
|
+ foreach ($requiredParams as $requiredParam) {
|
|
|
+ if (!isset($param[$requiredParam]) || empty($param[$requiredParam])) {
|
|
|
+ $missingParams[] = $requiredParam;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!empty($missingParams)) {
|
|
|
+ $this->error('参数错误,缺少:' . implode(', ', $missingParams));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3. 使用常量或配置定义静态数据
|
|
|
+ $department = [
|
|
|
+ 'Y200' => ['裁切','滚切','胶印','上光','切废'],
|
|
|
+ 'Y201' => ['丝印','喷码','覆膜'],
|
|
|
+ 'Y202' => ['卷凹','单凹','圆烫','圆切','复卷','分条','配卷','拼板','机检(圆切)','手检(圆切)','包装(圆切)'],
|
|
|
+ 'Y203' => ['烫金','烫金+凹凸(压纹)','模切','模切+凹凸(压纹)','凹凸(压纹)','拆片','覆膜','对裱'],
|
|
|
+ 'Y204' => ['手检','次品检','机检(初检)','二次机检','核检','抽检','包装'],
|
|
|
+ '200' => ['裁切','滚切','胶印','上光','切废'],
|
|
|
+ '201' => ['丝印','喷码','覆膜'],
|
|
|
+ '202' => ['卷凹','单凹','圆烫','圆切','复卷','分条','配卷','拼板','机检(圆切)','手检(圆切)','包装(圆切)'],
|
|
|
+ '203' => ['烫金','烫金+凹凸(压纹)','模切','模切+凹凸(压纹)','凹凸(压纹)','拆片','覆膜','对裱'],
|
|
|
+ '204' => ['手检','次品检','机检(初检)','二次机检','核检','抽检','包装'],
|
|
|
+ ];
|
|
|
+
|
|
|
+ $validWarehouseCodes = ['101','Y101','200','201','202','203','204','Y200','Y201','Y202','Y203','Y204'];
|
|
|
+
|
|
|
+ // 4. 优化数据库查询,使用链式操作提高可读性
|
|
|
+ $list = db('物料_收发记录')
|
|
|
+ ->alias('a')
|
|
|
+ ->join('物料_存货编码 b', 'a.st_wlbh = b.物料代码')
|
|
|
+ ->field([
|
|
|
+ 'a.st_wlbh as 物料编号',
|
|
|
+ 'a.供方批次',
|
|
|
+ 'a.仓库编号',
|
|
|
+ 'rtrim(b.物料名称) as 物料名称'
|
|
|
+ ])
|
|
|
+ ->where('a.st_gdbh', $param['gdbh'])
|
|
|
+ ->where('a.cpdh', $param['cpdh'] ?? '') // 使用空值合并运算符
|
|
|
+ ->whereNotNull('a.供方批次')
|
|
|
+ ->group('a.st_wlbh')
|
|
|
+ ->select();
|
|
|
+
|
|
|
+ if (empty($list)) {
|
|
|
+ $this->error('未找到物料资料');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 5. 提前查询工序数据,避免在循环中重复处理
|
|
|
+ $process = db('设备_产量计酬')
|
|
|
+ ->alias('a')
|
|
|
+ ->join('工单_工艺资料 b', 'a.sczl_gdbh = b.Gy0_gdbh AND a.sczl_yjno = b.Gy0_yjno AND a.sczl_gxh = b.Gy0_gxh')
|
|
|
+ ->where([
|
|
|
+ 'a.sczl_gdbh' => $param['gdbh'],
|
|
|
+ 'a.sczl_yjno' => $param['yjno']
|
|
|
+ ])
|
|
|
+ ->field([
|
|
|
+ 'a.sczl_gxh as 工序号',
|
|
|
+ 'b.Gy0_gxmc',
|
|
|
+ 'a.sczl_gxmc as 工序名称'
|
|
|
+ ])
|
|
|
+ ->group('a.sczl_gxh')
|
|
|
+ ->select();
|
|
|
+
|
|
|
+ // 6. 重构数据处理逻辑
|
|
|
+ $data = [];
|
|
|
+ $processMap = []; // 缓存工序数据
|
|
|
+
|
|
|
+ // 如果需要按工序名称快速查找,可以先建立映射
|
|
|
+ foreach ($process as $proc) {
|
|
|
+ $processMap[$proc['Gy0_gxmc']] = $proc['工序名称'];
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($list as $item) {
|
|
|
+ $warehouseCode = $item['仓库编号'];
|
|
|
+ $baseData = [
|
|
|
+ '流程单号' => $param['num'],
|
|
|
+ '物料编号' => $item['物料编号'],
|
|
|
+ '物料名称' => $item['物料名称'],
|
|
|
+ '供方批次' => $item['供方批次']
|
|
|
+ ];
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ // 7. 优化条件判断逻辑
|
|
|
+ if (in_array($warehouseCode, $validWarehouseCodes, true)) {
|
|
|
+ if ($warehouseCode === '101' || $warehouseCode === 'Y101') {
|
|
|
+ // 如果是101或Y101仓库,添加第一个工序名称
|
|
|
+ if (!empty($process[0])) {
|
|
|
+ $baseData['工序名称'] = $process[0]['工序名称'];
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 其他仓库的处理逻辑
|
|
|
+ if (isset($department[$warehouseCode])) {
|
|
|
+ $relatedProcesses = $department[$warehouseCode];
|
|
|
+
|
|
|
+ foreach ($relatedProcesses as $processName) {
|
|
|
+ if (isset($processMap[$processName])) {
|
|
|
+ $baseData['工序名称'] = $processMap[$processName];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $data[] = $baseData;
|
|
|
+ }
|
|
|
+ $this->success('成功',$data);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 印版记录
|
|
|
+ * @return void
|
|
|
+ * @throws \think\db\exception\DataNotFoundException
|
|
|
+ * @throws \think\db\exception\ModelNotFoundException
|
|
|
+ * @throws \think\exception\DbException
|
|
|
+ */
|
|
|
+ public function PrintingPlateList()
|
|
|
+ {
|
|
|
+ // 1. 请求方法验证
|
|
|
+ if (!$this->request->isGet()) {
|
|
|
+ $this->error('请求错误');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 参数验证与提取
|
|
|
+ $param = $this->request->param();
|
|
|
+ $requiredParams = ['gdbh', 'yjno'];
|
|
|
+
|
|
|
+ foreach ($requiredParams as $requiredParam) {
|
|
|
+ if (empty($param[$requiredParam])) {
|
|
|
+ $this->error("参数错误,缺少:{$requiredParam}");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $gdbh = $param['gdbh'];
|
|
|
+ $yjno = $param['yjno'];
|
|
|
+
|
|
|
+ // 3. 主查询 - 获取印版领用记录
|
|
|
+ $list = db('工单_印版领用记录')
|
|
|
+ ->alias('a')
|
|
|
+ ->join('物料_存货编码 b', 'a.Yb_存货编码 = b.物料代码')
|
|
|
+ ->where([
|
|
|
+ 'a.Yb_工单编号' => $gdbh,
|
|
|
+ 'a.Yb_印件号' => $yjno,
|
|
|
+ 'a.Yb_领用机台' => ['<>', '']
|
|
|
+ ])
|
|
|
+ ->field([
|
|
|
+ 'a.Yb_存货编码 as 存货编码',
|
|
|
+ 'a.Yb_供方批号 as 供方批号',
|
|
|
+ 'a.Yb_领用机台 as 领用机台',
|
|
|
+ 'TRIM(b.物料名称) as 物料名称', // 使用TRIM替代rtrim
|
|
|
+ 'a.Sys_id as 用户'
|
|
|
+ ])
|
|
|
+ ->group('a.Yb_存货编码, a.Yb_供方批号') // 明确指定表字段
|
|
|
+ ->order('a.Yb_存货编码')
|
|
|
+ ->select();
|
|
|
+
|
|
|
+ if (empty($list)) {
|
|
|
+ $this->error('未找到印版数据');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 4. 收集所有机台号,准备批量查询
|
|
|
+ $machineCodes = array_column($list, '领用机台');
|
|
|
+ $machineCodes = array_unique(array_filter($machineCodes)); // 去重并过滤空值
|
|
|
+
|
|
|
+ // 5. 批量查询产量计酬数据 - 解决N+1查询问题
|
|
|
+ $processMap = [];
|
|
|
+ if (!empty($machineCodes)) {
|
|
|
+ $processList = db('设备_产量计酬')
|
|
|
+ ->where([
|
|
|
+ 'sczl_gdbh' => $gdbh,
|
|
|
+ 'sczl_yjno' => $yjno,
|
|
|
+ 'sczl_jtbh' => ['IN', $machineCodes]
|
|
|
+ ])
|
|
|
+ ->field([
|
|
|
+ 'sczl_jtbh as 机台编号',
|
|
|
+ 'sczl_gxmc as 工序名称',
|
|
|
+ 'sczl_num as 流程单号'
|
|
|
+ ])
|
|
|
+ ->order('sczl_num, sczl_jtbh')
|
|
|
+ ->select();
|
|
|
+
|
|
|
+ // 按机台编号分组,建立映射
|
|
|
+ foreach ($processList as $process) {
|
|
|
+ $machineCode = $process['机台编号'];
|
|
|
+ if (!isset($processMap[$machineCode])) {
|
|
|
+ $processMap[$machineCode] = [];
|
|
|
+ }
|
|
|
+ $processMap[$machineCode][] = [
|
|
|
+ '工序名称' => $process['工序名称'],
|
|
|
+ '流程单号' => $process['流程单号']
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 6. 数据组装
|
|
|
+ $data = [];
|
|
|
+ foreach ($list as $item) {
|
|
|
+ $machineCode = $item['领用机台'];
|
|
|
+ $baseData = [
|
|
|
+ '存货编码' => $item['存货编码'],
|
|
|
+ '供方批号' => $item['供方批号'],
|
|
|
+ '领用机台' => $machineCode,
|
|
|
+ '物料名称' => $item['物料名称'],
|
|
|
+ '用户' => $item['用户']
|
|
|
+ ];
|
|
|
+
|
|
|
+ // 如果该机台有对应的工序数据
|
|
|
+ if (isset($processMap[$machineCode]) && !empty($processMap[$machineCode])) {
|
|
|
+ foreach ($processMap[$machineCode] as $process) {
|
|
|
+ $data[] = array_merge($baseData, $process);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 如果机台没有对应工序,至少返回基础信息
|
|
|
+ $data[] = array_merge($baseData, [
|
|
|
+ '工序名称' => '',
|
|
|
+ '流程单号' => ''
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 7. 按流程单号排序(如果需要的话)
|
|
|
+ usort($data, function($a, $b) {
|
|
|
+ return strcmp($a['流程单号'] ?? '', $b['流程单号'] ?? '');
|
|
|
+ });
|
|
|
|
|
|
+ $this->success('成功', $data);
|
|
|
}
|
|
|
}
|