|
@@ -2625,16 +2625,18 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
res.add(workShopExportVo);
|
|
|
}
|
|
|
|
|
|
+ String tenantId = CXCommonUtils.getCurrentUserFactoryId(null);
|
|
|
// 动态选项提供者(可以从数据库或其他服务获取)
|
|
|
//查询设备信息,组装数据
|
|
|
- List<DeviceCodeAndNameDownVo> devices = this.baseMapper.selectAllDevice();
|
|
|
- String deviceExpression = "下拉选!$A$2:$A$" + (devices.size() + 1);
|
|
|
- List<String> deviceList = devices.stream().map(DeviceCodeAndNameDownVo::getDevice).collect(Collectors.toList());
|
|
|
- Supplier<List<String>> statusOptions = () -> deviceList;
|
|
|
-// Supplier<List<String>> statusOptions = () -> Arrays.asList("Z-03-01-003(03#冷轧机)");
|
|
|
+ List<DeviceCodeAndNameDownVo> devices = this.baseMapper.selectAllDevice(tenantId);
|
|
|
+ String deviceExpression = "设备下拉选!$A$2:$A$" + (devices.size() + 1);
|
|
|
+
|
|
|
+ //辊类型下拉选
|
|
|
+ List<RollerTypeDownVo> rollerTypes = this.baseMapper.selectAllRollerType(tenantId);
|
|
|
+ String rollerExpression = "辊下拉选!$A$2:$A$" + (rollerTypes.size() + 1);
|
|
|
|
|
|
// 只对第2行和第4行设置下拉(relativeRowIndex从0开始)
|
|
|
- IntPredicate rowFilter = rowIndex -> rowIndex == 0 || rowIndex == 1;
|
|
|
+ IntPredicate rowFilter = rowIndex -> rowIndex != 0;
|
|
|
|
|
|
// 设置响应头
|
|
|
String fileName = "车间作业跟踪导出数据_" + System.currentTimeMillis() + ".xlsx";
|
|
@@ -2648,19 +2650,30 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
WriteSheet writeSheet1 = EasyExcel.writerSheet("车间作业跟踪")
|
|
|
.head(WorkShopExportVo.class)
|
|
|
.registerWriteHandler(new SpecificRowDropDownHandler(
|
|
|
- 1, // 第2列(索引1)
|
|
|
+ 1, // 第2列(索引1)设备编号
|
|
|
rowFilter,
|
|
|
null,
|
|
|
deviceExpression
|
|
|
))
|
|
|
+ .registerWriteHandler(new SpecificRowDropDownHandler(
|
|
|
+ 12, // 第13列(索引12)辊类型
|
|
|
+ rowFilter,
|
|
|
+ null,
|
|
|
+ rollerExpression
|
|
|
+ ))
|
|
|
.build();
|
|
|
excelWriter.write(res, writeSheet1);
|
|
|
|
|
|
// 第二个Sheet:设备列表(直接写入字符串列表)
|
|
|
- WriteSheet deviceSheet = EasyExcel.writerSheet(1, "下拉选")
|
|
|
+ WriteSheet deviceSheet = EasyExcel.writerSheet(1, "设备下拉选")
|
|
|
.head(DeviceCodeAndNameDownVo.class)
|
|
|
.build();
|
|
|
excelWriter.write(devices, deviceSheet);
|
|
|
+ // 第三个Sheet:辊列表(直接写入字符串列表)
|
|
|
+ WriteSheet rollerSheet = EasyExcel.writerSheet(2, "辊下拉选")
|
|
|
+ .head(RollerTypeDownVo.class)
|
|
|
+ .build();
|
|
|
+ excelWriter.write(rollerTypes, rollerSheet);
|
|
|
excelWriter.finish();
|
|
|
// // 写入Excel
|
|
|
// EasyExcel.write(response.getOutputStream(), WorkShopExportVo.class)
|
|
@@ -2804,8 +2817,8 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
}
|
|
|
|
|
|
//计算作业时长
|
|
|
- int workTime = (int) DateUtil.between(equDo.getPlanstartdate(), equDo.getPlanenddate(), DateUnit.MINUTE);
|
|
|
-
|
|
|
+// int workTime = (int) DateUtil.between(equDo.getPlanstartdate(), equDo.getPlanenddate(), DateUnit.MINUTE);
|
|
|
+ int workTime = Math.abs(Integer.parseInt(workShopExportVo.getTime()));
|
|
|
if (!resMap.containsKey(aspCheckItemsDo.getId())) {
|
|
|
if (workShopExportVo.getPlanstartdate() == null) {
|
|
|
errorMessageList.add("第" + num + "行是该设备第一个作业,计划开工时间不能为空;");
|
|
@@ -2840,7 +2853,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- needUpdate.setPlanenddate(DateUtil.offsetMinute(workShopExportVo.getPlanstartdate(), workTime));
|
|
|
+ needUpdate.setPlanenddate(DateUtil.offsetMinute(needUpdate.getPlanstartdate(), workTime));
|
|
|
apsProcessOperationProcessEquDos.add(needUpdate);
|
|
|
}
|
|
|
}
|
|
@@ -2892,7 +2905,33 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
wrapper.eq(ApsProcessOperationProcessEquDo::getId, equDo.getId())
|
|
|
.eq(ApsProcessOperationProcessEquDo::getWorkstatus, "待开工");
|
|
|
apsProcessOperationProcessEquService.update(wrapper);
|
|
|
+
|
|
|
+ ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = this.getById(equDo.getId());
|
|
|
+ //冲突更新
|
|
|
+ //原明细详情
|
|
|
+ ApsProcessOperationProcessEquDoAndWidthVo oldEqu = apsProcessOperationProcessEquDoList.stream().filter(item -> item.getId().equals(equDo.getId())).findFirst().orElse(null);
|
|
|
+ Date planstartdate = null;
|
|
|
+ Date planenddate = null;
|
|
|
+ String processDeviceId = null;
|
|
|
+ String processway = "非合并加工";
|
|
|
+ if (oldEqu != null) {
|
|
|
+ planstartdate = oldEqu.getPlanstartdate();
|
|
|
+ planenddate = oldEqu.getPlanenddate();
|
|
|
+ processDeviceId = oldEqu.getProcessdeviceid();
|
|
|
+ processway = oldEqu.getProcessway();
|
|
|
+ }
|
|
|
+ checkProcessingTimeConflict(apsProcessOperationProcessEquDo,
|
|
|
+ planstartdate, planenddate, processDeviceId, processway, new LinkedList<>());
|
|
|
+ // 判断是否存在设备不可用
|
|
|
+ apsProcessOperationProcessEquDo = this.getById(apsProcessOperationProcessEquDo.getId());
|
|
|
+ inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
|
|
|
+ apsProcessOperationProcessEquDo.getProcessdeviceid(),
|
|
|
+ apsProcessOperationProcessEquDo.getPlanstartdate(),
|
|
|
+ apsProcessOperationProcessEquDo.getPlanenddate(),
|
|
|
+ new LinkedList<>());
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
if (!processIdList.isEmpty()) {
|
|
|
//更新对应工序作业的 计划完工时间和计划开工时间
|
|
|
this.baseMapper.updateProcessPlanTimeByProcessIds(processIdList);
|