Compare commits

...

4 Commits

Author SHA1 Message Date
liweidong-hj 0046df08ec 物流优化 4 weeks ago
pangyang 69e647fb58 生产质量检验消息提醒 4 weeks ago
sunjianxi bfb09d89b8 排产开发-sjx 4 weeks ago
pangyang d108bf3a5d 槽液结果查询修改 4 weeks ago
  1. 39
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/RemindMsg.java
  2. 5
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/RemindMsgVO.java
  3. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/PipelineController.java
  4. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/ITaskExecuteRecordService.java
  5. 20
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java
  6. 202
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java
  7. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskServiceImpl.java
  8. 16
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankReportController.java
  9. 92
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/RemindMsgController.java
  10. 40
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/RemindMsgExcel.java
  11. 30
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/RemindMsgServiceImpl.java
  12. BIN
      blade-service/blade-desk/src/main/resources/Excel/QA/材料消息提醒.xls
  13. BIN
      blade-service/blade-desk/src/main/resources/Excel/QA/镀种消息提醒.xls
  14. BIN
      blade-service/blade-desk/src/main/resources/Excel/QA/颜色消息提醒.xls
  15. 5
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/EquipResourceServiceImpl.java
  16. 7
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PersonResourceServiceImpl.java
  17. 153
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java

@ -116,9 +116,9 @@ public class RemindMsg extends BaseEntity {
@Schema(description = "编码") @Schema(description = "编码")
private String code; private String code;
/** /**
* 类型 * 类型 0零件号提醒 1: 镀层提醒 2颜色提醒 3:材料提醒
*/ */
@Schema(description = "类型") @Schema(description = "类型 0:零件号提醒 1: 镀层提醒 2:颜色提醒 3:材料提醒")
private Long remindMsgType; private Long remindMsgType;
/** /**
* [零件]id * [零件]id
@ -176,15 +176,10 @@ public class RemindMsg extends BaseEntity {
@Schema(description = "子[零件]id") @Schema(description = "子[零件]id")
private Long subPartId; private Long subPartId;
/** /**
* [零件]编码 * [零件]编码,虚拟子件号
*/ */
@Schema(description = "子[零件]编码") @Schema(description = "子[零件]编码,虚拟子件号")
private String subPartCode; private String subPartCode;
/**
* 生产标识
*/
@Schema(description = "生产标识")
private String prodFlagText;
/** /**
* 参数1 * 参数1
*/ */
@ -210,4 +205,30 @@ public class RemindMsg extends BaseEntity {
*/ */
@Schema(description = "[零件]名称") @Schema(description = "[零件]名称")
private String partName; private String partName;
//镀种信息
private String plateing;
//参数1上限
private BigDecimal param1Up;
//参数1下限
private BigDecimal param1Down;
//参数2上限
private BigDecimal param2Up;
//参数2下限
private BigDecimal param2Down;
//参数3上限
private BigDecimal param3Up;
//参数3下限
private BigDecimal param3Down;
//提醒颜色
private String remindColor;
//显示颜色
private String showColor;
//程式编号
private String formula;
//材料
private String material;
} }

@ -28,4 +28,9 @@ public class RemindMsgVO extends RemindMsg {
private String platingName = ""; private String platingName = "";
@Schema(description = "工艺一级路线") @Schema(description = "工艺一级路线")
private String processClazz1Name = ""; private String processClazz1Name = "";
private String param1;
private String param2;
private String param3;
} }

@ -40,6 +40,7 @@ import org.springblade.desk.logistics.pojo.entity.Station;
import org.springblade.desk.logistics.service.IOrderBindService; import org.springblade.desk.logistics.service.IOrderBindService;
import org.springblade.desk.logistics.service.IOrderBoxService; import org.springblade.desk.logistics.service.IOrderBoxService;
import org.springblade.desk.logistics.service.IPipelineService; import org.springblade.desk.logistics.service.IPipelineService;
import org.springblade.desk.logistics.service.ITaskExecuteRecordService;
import org.springblade.desk.logistics.utils.AgvTaskTypeUtil; import org.springblade.desk.logistics.utils.AgvTaskTypeUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -169,6 +170,9 @@ public class PipelineController extends BladeController {
@Autowired @Autowired
AgvTaskTypeUtil agvTaskTypeUtil; AgvTaskTypeUtil agvTaskTypeUtil;
@Autowired
ITaskExecuteRecordService taskExecuteRecordService;
/** /**
* 接收空物料箱到输送线通知 * 接收空物料箱到输送线通知
*/ */
@ -190,10 +194,10 @@ public class PipelineController extends BladeController {
@GetMapping("/test") @GetMapping("/test")
@ApiOperationSupport(order = 4) @ApiOperationSupport(order = 4)
@Operation(summary = "接收物料箱", description = "传入箱条码") @Operation(summary = "接收物料箱", description = "传入箱条码")
public R test(@RequestParam String test1,@RequestParam String test2) { public R test(@RequestParam String taskCode) {
String taskTypeByPositions = agvTaskTypeUtil.getTaskTypeByPositions(test1, test2); boolean b = taskExecuteRecordService.releaseSite(taskCode);
return R.data(taskTypeByPositions); return R.data(b);
} }
} }

@ -107,4 +107,9 @@ public interface ITaskExecuteRecordService extends BaseService<TaskExecuteRecord
* @return * @return
*/ */
boolean genAgvSchedulingTask(String taskType, String startPos, String endPos, String type, Task task); boolean genAgvSchedulingTask(String taskType, String startPos, String endPos, String type, Task task);
boolean releaseSite(String taskCode);
} }

@ -358,11 +358,11 @@ public class IOrderBoxServiceImpl implements IOrderBoxService {
List<Station> stationList =null; List<Station> stationList =null;
if (returnToWarehouseDto.getEndStationCode() != null && !returnToWarehouseDto.getEndStationCode().isEmpty()) { if (returnToWarehouseDto.getEndStationCode() != null && !returnToWarehouseDto.getEndStationCode().isEmpty()) {
stationList=stationService.list(new LambdaQueryWrapper<Station>() stationList=stationService.list(new LambdaQueryWrapper<Station>()
// .ne(Station::getStatus, CONVEYOR_LINE_RECEIVE_ONLY) .ne(Station::getStatus, CONVEYOR_LINE_RECEIVE_ONLY)
.eq(Station::getStationStatus, STATUS_FREE) .eq(Station::getStationStatus, STATUS_FREE)
.eq(Station::getStationCode, returnToWarehouseDto.getEndStationCode())); .eq(Station::getStationCode, returnToWarehouseDto.getEndStationCode()));
if (stationList==null||stationList.size()==0) { if (stationList==null||stationList.size()==0) {
return R.fail("当前结束站点码被占用"); return R.fail("当前结束站点码被占用/输送线站点不支持配送");
} }
List<StationCenter> stationCenterList = stationCenterService.list(new LambdaQueryWrapper<StationCenter>().select(StationCenter::getWcId).eq(StationCenter::getStationId, stationList.get(0).getId())); List<StationCenter> stationCenterList = stationCenterService.list(new LambdaQueryWrapper<StationCenter>().select(StationCenter::getWcId).eq(StationCenter::getStationId, stationList.get(0).getId()));
if (stationCenterList==null||stationCenterList.size()==0) { if (stationCenterList==null||stationCenterList.size()==0) {
@ -372,12 +372,12 @@ public class IOrderBoxServiceImpl implements IOrderBoxService {
if (bsWorkCenterEntityList==null||bsWorkCenterEntityList.size()==0) { if (bsWorkCenterEntityList==null||bsWorkCenterEntityList.size()==0) {
return R.fail("当前结束站点码没有对应的作业中心"); return R.fail("当前结束站点码没有对应的作业中心");
} }
if (!bsWorkCenterEntityList.get(0).getWcName().equals("镀后检验作业中心")) { // if (!bsWorkCenterEntityList.get(0).getWcName().equals("镀后检验作业中心")) {
stationList=stationList.stream().filter(s->!s.getStatus().equals(CONVEYOR_LINE_RECEIVE_ONLY)).toList(); // stationList=stationList.stream().filter(s->!s.getStatus().equals(CONVEYOR_LINE_RECEIVE_ONLY)).toList();
if (stationList==null||stationList.size()==0) { // if (stationList==null||stationList.size()==0) {
return R.fail("当前结束站点码被占用"); // return R.fail("当前结束站点码被占用");
} // }
} // }
} }
agvSend = Objects.nonNull(agvSend) ? agvSend : false; // 默认不发送AGV agvSend = Objects.nonNull(agvSend) ? agvSend : false; // 默认不发送AGV
@ -1451,7 +1451,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService {
} else { } else {
List<CenterTeam> list = iCenterTeamService.list(new LambdaQueryWrapper<CenterTeam>() List<CenterTeam> list = iCenterTeamService.list(new LambdaQueryWrapper<CenterTeam>()
.select(CenterTeam::getWcId, CenterTeam::getTsId) .select(CenterTeam::getWcId, CenterTeam::getTsId)
.eq(workPlan.getSubsidiaryTeam()!=null&&!workPlan.getSubsidiaryTeam().equals(""),CenterTeam::getTsId, (workPlan.getMakeTeam())) .eq(workPlan.getSubsidiaryTeam()!=null&&!workPlan.getSubsidiaryTeam().equals(""),CenterTeam::getTsId, (workPlan.getSubsidiaryTeam()))
.eq(workPlan.getSubsidiaryTeam()==null||workPlan.getSubsidiaryTeam().equals(""),CenterTeam::getTsId, (workPlan.getMakeTeam()))); .eq(workPlan.getSubsidiaryTeam()==null||workPlan.getSubsidiaryTeam().equals(""),CenterTeam::getTsId, (workPlan.getMakeTeam())));
if (list == null || list.size() == 0) { if (list == null || list.size() == 0) {
return R.fail(orderCardNo + "车间订单班次查询作业中心异常"); return R.fail(orderCardNo + "车间订单班次查询作业中心异常");
@ -1474,7 +1474,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService {
} else { } else {
List<CenterTeam> list = iCenterTeamService.list(new LambdaQueryWrapper<CenterTeam>() List<CenterTeam> list = iCenterTeamService.list(new LambdaQueryWrapper<CenterTeam>()
.select(CenterTeam::getWcId, CenterTeam::getTsId) .select(CenterTeam::getWcId, CenterTeam::getTsId)
.eq(workPlan.getSubsidiaryTeam()!=null&&!workPlan.getSubsidiaryTeam().equals(""),CenterTeam::getTsId, (workPlan.getMakeTeam())) .eq(workPlan.getSubsidiaryTeam()!=null&&!workPlan.getSubsidiaryTeam().equals(""),CenterTeam::getTsId, (workPlan.getSubsidiaryTeam()))
.eq(workPlan.getSubsidiaryTeam()==null||workPlan.getSubsidiaryTeam().equals(""),CenterTeam::getTsId, (workPlan.getMakeTeam()))); .eq(workPlan.getSubsidiaryTeam()==null||workPlan.getSubsidiaryTeam().equals(""),CenterTeam::getTsId, (workPlan.getMakeTeam())));
if (list == null || list.size() == 0) { if (list == null || list.size() == 0) {
return R.fail(orderCardNo + "车间订单班次查询作业中心异常"); return R.fail(orderCardNo + "车间订单班次查询作业中心异常");

@ -22,6 +22,7 @@ import org.springblade.desk.logistics.service.*;
import org.springblade.desk.logistics.utils.AgvTaskTypeUtil; import org.springblade.desk.logistics.utils.AgvTaskTypeUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.ArrayList; import java.util.ArrayList;
@ -191,6 +192,15 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRec
} }
// 6. 任务走出储位状态,将站点设置为空闲
if (method.equals(TaskExecuteRecord.STATUS_OUTBIN)){
boolean conCtuReturn = releaseSite(agvCallBack.getTaskCode());
if (!conCtuReturn) {
return R.fail("站点释放失败");
}
}
// 回调处理成功 // 回调处理成功
log.info("AGV回调成功:任务单号{}的执行记录已更新,状态为{}", agvCallBack.getTaskCode(), method); log.info("AGV回调成功:任务单号{}的执行记录已更新,状态为{}", agvCallBack.getTaskCode(), method);
R r = new R(); R r = new R();
@ -199,6 +209,41 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRec
return r; return r;
} }
@Override
public boolean releaseSite(String taskCode) {
try {
TaskExecuteRecord taskExecuteRecord = baseMapper.selectByTaskCode(taskCode);
if (null == taskExecuteRecord) {
log.error("未根据taskCode查询到有效数据,请求参数:{}", taskCode);
return false;
}
Station startStation = stationService.getByStationCode(taskExecuteRecord.getStartPos());
Station endStation = stationService.getByStationCode(taskExecuteRecord.getEndPos());
log.info("走出储位,开始位置:{},结束位置:{}", taskExecuteRecord.getStartPos(), taskExecuteRecord.getEndPos());
// 业务规则:起点必须是站点,且终点是传送线(1001)或有效站点时,才释放起点站点
if (null != startStation && (DROPOFF_CONVEYOR_LINE.equals(taskExecuteRecord.getEndPos()) || null != endStation)) {
startStation.setStationStatus(Station.STATUS_FREE);
boolean update = stationService.updateById(startStation);
if (update) {
log.info("站点释放成功:{}", startStation.getStationCode());
return true;
} else {
log.error("站点释放失败:{}", startStation.getStationCode());
return false;
}
}
return true;
} catch (Exception e) {
log.error("releaseSite执行异常,taskCode:{}", taskCode, e);
return false;
}
}
private boolean updateMesCtuLocation(String taskCode) { private boolean updateMesCtuLocation(String taskCode) {
log.info("开始执行updateMesCtuLocation,taskCode:{}", taskCode); log.info("开始执行updateMesCtuLocation,taskCode:{}", taskCode);
@ -424,17 +469,17 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRec
log.info("任务{}不需要送到库位,直接完成", taskCode); log.info("任务{}不需要送到库位,直接完成", taskCode);
log.info("终点位置为站点信息:{},直接完成", taskExecuteRecord.getEndPos()); log.info("终点位置为站点信息:{},直接完成", taskExecuteRecord.getEndPos());
Station startStation = stationService.getByStationCode(taskExecuteRecord.getStartPos()); // Station startStation = stationService.getByStationCode(taskExecuteRecord.getStartPos());
// 起点位置为站点 将站点状态改为空闲 // // 起点位置为站点 将站点状态改为空闲
if(null != startStation){ // if(null != startStation){
startStation.setStationStatus(Station.STATUS_FREE); // startStation.setStationStatus(Station.STATUS_FREE);
boolean update = stationService.updateById(startStation); // boolean update = stationService.updateById(startStation);
if (update) { // if (update) {
log.info("站点释放成功:{}", startStation.getStationCode()); // log.info("站点释放成功:{}", startStation.getStationCode());
} else { // } else {
log.error("站点释放失败:{}", startStation.getStationCode()); // log.error("站点释放失败:{}", startStation.getStationCode());
} // }
} // }
// 终点位置为站点将状态修改为占用 // 终点位置为站点将状态修改为占用
if(null != endStation){ if(null != endStation){
@ -719,65 +764,112 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRec
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public boolean genAgvSchedulingTask(String taskType, String startPos, String endPos, String type, Task task) { public boolean genAgvSchedulingTask(String taskType, String startPos, String endPos, String type, Task task) {
// 获取虚拟货架 VirtualShelves virtualShelves = null;
VirtualShelves virtualShelves = virtualShelvesService.getVirtualShelvesCode(); String boundShelvesCode = null;
if (null == virtualShelves) {
throw new ServiceException("获取虚拟货架失败");
}
// 站点绑定虚拟货架 try {
JSONObject response = boundVirtualShelves( // 1. 获取虚拟货架
virtualShelves.getVirtualShelvesCode(), virtualShelves = virtualShelvesService.getVirtualShelvesCode();
startPos if (null == virtualShelves) {
); log.error("获取虚拟货架失败");
String code = response.getString("code"); return false;
String message = response.getString("message"); }
// 2. 绑定虚拟货架
JSONObject response = boundVirtualShelves(
virtualShelves.getVirtualShelvesCode(),
startPos
);
String code = response.getString("code");
String message = response.getString("message");
if ("0".equals(code)) { if ("0".equals(code)) {
log.info("绑定虚拟货架成功,虚拟货架:{},站点:{}", virtualShelves.getVirtualShelvesCode(), startPos); // 绑定成功,记录绑定的货架号
boundShelvesCode = virtualShelves.getVirtualShelvesCode();
log.info("绑定虚拟货架成功,虚拟货架:{},站点:{}", boundShelvesCode, startPos);
} else {
// 绑定失败,尝试使用错误消息中的货架号
log.warn("首次绑定失败,响应:{}", response);
virtualShelves.setIsBound(VirtualShelves.BOUND_YES); // 提取货架号
virtualShelvesService.updateById(virtualShelves); String number = extractShelfCodeFromMessage(message);
if (number == null) {
log.error("绑定失败且无法解析货架号:" + message);
return false;
}
} else { VirtualShelves existedShelves = virtualShelvesService.selectByVirtualShelvesCode(number);
log.error("绑定虚拟货架失败,虚拟货架:{},站点:{},响应:{}", if (existedShelves == null) {
virtualShelves.getVirtualShelvesCode(), startPos, response); log.error("指定的虚拟货架不存在:" + number);
return false;
}
//修改Task状态 // 使用已存在的货架重新绑定
task.setTaskStatus(Task.BOUND_VIRTUAL_SHELVES); JSONObject retryResponse = boundVirtualShelves(number, startPos);
task.setRemark(message); String retryCode = retryResponse.getString("code");
taskService.updateById(task); String retryMessage = retryResponse.getString("message");
if (!"0".equals(retryCode)) {
// 重试失败,更新任务状态
task.setTaskStatus(Task.BOUND_VIRTUAL_SHELVES);
task.setRemark(retryMessage);
taskService.updateById(task);
log.error("重新绑定虚拟货架失败:" + retryMessage);
return false;
}
return false; // 重试成功,使用重试的货架
} boundShelvesCode = number;
virtualShelves = existedShelves;
log.info("重新绑定虚拟货架成功,虚拟货架:{},站点:{}", boundShelvesCode, startPos);
}
// 3. 调用AGV调度
AgvSchedulingTaskVO agvSchedulingTaskVO = genAgvSchedulingTask(
taskType,
startPos,
endPos,
type,
boundShelvesCode
);
if (null == agvSchedulingTaskVO || !"0".equals(agvSchedulingTaskVO.getCode())) {
throw new ServiceException("调用AGV调度失败");
}
// 4. 入库记录
if (null == task) {
throw new ServiceException("任务信息为空");
}
boolean record = inboundRecord(agvSchedulingTaskVO, task, boundShelvesCode);
if (!record) {
throw new ServiceException("入库记录保存失败");
}
// 调用AGV // 5. 所有步骤成功后,更新虚拟货架状态
AgvSchedulingTaskVO agvSchedulingTaskVO = genAgvSchedulingTask( virtualShelves.setIsBound(VirtualShelves.BOUND_YES);
taskType, virtualShelvesService.updateById(virtualShelves);
startPos,
endPos,
type,
virtualShelves.getVirtualShelvesCode()
);
if (null == agvSchedulingTaskVO || !"0".equals(agvSchedulingTaskVO.getCode())) {
throw new ServiceException("调用AGV调度失败");
}
// 入库记录 return true;
if (null == task) {
return false;
}
boolean record = inboundRecord(agvSchedulingTaskVO, task, virtualShelves.getVirtualShelvesCode()); } catch (Exception e) {
if (!record) { log.error("genAgvSchedulingTask执行异常", e);
throw new ServiceException("入库记录保存失败"); if (boundShelvesCode != null) {
log.warn("流程失败,已绑定的虚拟货架:{} 可能需要手动解绑", boundShelvesCode);
}
throw e;
} }
}
return true; private String extractShelfCodeFromMessage(String message) {
if (message == null || !message.contains(":")) {
return null;
}
return message.substring(message.lastIndexOf(":") + 1).trim();
} }
} }

@ -75,6 +75,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
taskVO.setStatusDesc(Task.getStatusName(taskVO.getTaskStatus())); taskVO.setStatusDesc(Task.getStatusName(taskVO.getTaskStatus()));
if (taskVO.getWcId()!=null&&taskVO.getWcId()==0) { if (taskVO.getWcId()!=null&&taskVO.getWcId()==0) {
taskVO.setWcName(DROPOFF_CONVEYOR_LINE_NAME); taskVO.setWcName(DROPOFF_CONVEYOR_LINE_NAME);
taskVO.setStationRegion(DROPOFF_CONVEYOR_LINE_NAME);
} }
} }
return page.setRecords(taskVOList); return page.setRecords(taskVOList);

@ -94,13 +94,23 @@ public class LiquidTankReportController extends BladeController {
@Operation(summary = "list分页", description = "传入LiquidTankReport Obj") @Operation(summary = "list分页", description = "传入LiquidTankReport Obj")
public R<IPage<LiquidTankReportVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> liquidTankReport, public R<IPage<LiquidTankReportVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> liquidTankReport,
Query query) { Query query) {
Date crStart = null;
Date crEnd = null;
if(null != liquidTankReport.get("createTimeStart") && !"".equals(liquidTankReport.get("createTimeStart"))){
crStart = RequestUtil.buildDateBeginOfDay(liquidTankReport, BaseRequest.CREATE_TIME_START);
crEnd = RequestUtil.buildDateEndOfDay(liquidTankReport, BaseRequest.CREATE_TIME_END);
}
QueryWrapper<LiquidTankReport> qw = Condition.getQueryWrapper(liquidTankReport, LiquidTankReport.class); QueryWrapper<LiquidTankReport> qw = Condition.getQueryWrapper(liquidTankReport, LiquidTankReport.class);
qw.eq(liquidTankReport.containsKey("name"), LiquidTankReport.COL_NAME, liquidTankReport.get("name")); qw.eq(liquidTankReport.containsKey("name"), LiquidTankReport.COL_NAME, liquidTankReport.get("name"));
if (liquidTankReport.containsKey(BaseRequest.CREATE_TIME_START) && liquidTankReport.containsKey(BaseRequest.CREATE_TIME_END)) { if(null != crStart && null != crEnd){
Date crStart = RequestUtil.buildDateBeginOfDay(liquidTankReport, BaseRequest.CREATE_TIME_START);
Date crEnd = RequestUtil.buildDateEndOfDay(liquidTankReport, BaseRequest.CREATE_TIME_END);
qw.between(BaseCol.CREATE_TIME, crStart, crEnd); qw.between(BaseCol.CREATE_TIME, crStart, crEnd);
} }
// if (liquidTankReport.containsKey(BaseRequest.CREATE_TIME_START) && liquidTankReport.containsKey(BaseRequest.CREATE_TIME_END)) {
// Date crStart = RequestUtil.buildDateBeginOfDay(liquidTankReport, BaseRequest.CREATE_TIME_START);
// Date crEnd = RequestUtil.buildDateEndOfDay(liquidTankReport, BaseRequest.CREATE_TIME_END);
// qw.between(BaseCol.CREATE_TIME, crStart, crEnd);
// }
IPage<LiquidTankReport> pages = service.page(Condition.getPage(query), qw); IPage<LiquidTankReport> pages = service.page(Condition.getPage(query), qw);
IPage<LiquidTankReportVO> pagesVO = LiquidTankReportWrapper.build().pageVO(pages); IPage<LiquidTankReportVO> pagesVO = LiquidTankReportWrapper.build().pageVO(pages);
for(LiquidTankReportVO one : pagesVO.getRecords()){ for(LiquidTankReportVO one : pagesVO.getRecords()){

@ -100,6 +100,7 @@ public class RemindMsgController extends BladeController {
// qw.like(RemindMsg.PART_NAME, partName); // qw.like(RemindMsg.PART_NAME, partName);
// } // }
// qw.like(map.containsKey("partName"), RemindMsg.PART_NAME, map.get("partName")); // qw.like(map.containsKey("partName"), RemindMsg.PART_NAME, map.get("partName"));
qw.orderByDesc("CREATE_TIME");
IPage<RemindMsg> pages = service.page(Condition.getPage(query), qw); IPage<RemindMsg> pages = service.page(Condition.getPage(query), qw);
IPage<RemindMsgVO> pagesVO = RemindMsgWrapper.build().pageVO(pages); IPage<RemindMsgVO> pagesVO = RemindMsgWrapper.build().pageVO(pages);
pagesVO.getRecords() pagesVO.getRecords()
@ -155,9 +156,39 @@ public class RemindMsgController extends BladeController {
@ApiLog("新增提醒信息") @ApiLog("新增提醒信息")
@Operation(summary = "新增批量", description = "传入RemindMsg List") @Operation(summary = "新增批量", description = "传入RemindMsg List")
public R saveBat(@Valid @RequestBody List<RemindMsg> addList) { public R saveBat(@Valid @RequestBody List<RemindMsg> addList) {
addList.forEach(one -> {
for(RemindMsg one : addList){
if(0== one.getRemindMsgType()){
}
if(1== one.getRemindMsgType()){
QueryWrapper<RemindMsg> qw = new QueryWrapper<>();
qw.eq("PLATEING",one.getPlateing());
if(service.count(qw)>0){
return R.fail(one.getPlateing()+"此镀种信息已存在");
}
}
if(2== one.getRemindMsgType()){
QueryWrapper<RemindMsg> qw = new QueryWrapper<>();
qw.eq("SUB_PART_CODE",one.getSubPartCode());
if(service.count(qw)>0){
return R.fail(one.getSubPartCode()+"此零件信息已存在");
}
}
if(3== one.getRemindMsgType()){
QueryWrapper<RemindMsg> qw = new QueryWrapper<>();
qw.eq("FORMULA",one.getFormula());
if(service.count(qw)>0){
return R.fail(one.getFormula()+"此程式编号已存在");
}
}
one.setId(null); one.setId(null);
}); }
// addList.forEach(one -> {
// one.setId(null);
// });
return R.status(service.saveBatch(addList)); return R.status(service.saveBatch(addList));
} }
@ -169,6 +200,36 @@ public class RemindMsgController extends BladeController {
@ApiLog("修改提醒信息") @ApiLog("修改提醒信息")
@Operation(summary = "修改一条", description = "传入RemindMsg Obj") @Operation(summary = "修改一条", description = "传入RemindMsg Obj")
public R update(@Valid @RequestBody RemindMsg updateOne) { public R update(@Valid @RequestBody RemindMsg updateOne) {
if(0== updateOne.getRemindMsgType()){
}
if(1== updateOne.getRemindMsgType()){
QueryWrapper<RemindMsg> qw = new QueryWrapper<>();
qw.eq("PLATEING",updateOne.getPlateing());
qw.ne("ID",updateOne.getId());
if(service.count(qw)>0){
return R.fail(updateOne.getPlateing()+"此镀种信息已存在");
}
}
if(2== updateOne.getRemindMsgType()){
QueryWrapper<RemindMsg> qw = new QueryWrapper<>();
qw.eq("SUB_PART_CODE",updateOne.getSubPartCode());
qw.ne("ID",updateOne.getId());
if(service.count(qw)>0){
return R.fail(updateOne.getSubPartCode()+"此零件信息已存在");
}
}
if(3== updateOne.getRemindMsgType()){
QueryWrapper<RemindMsg> qw = new QueryWrapper<>();
qw.eq("FORMULA",updateOne.getFormula());
qw.ne("ID",updateOne.getId());
if(service.count(qw)>0){
return R.fail(updateOne.getFormula()+"此程式编号已存在");
}
}
return R.status(service.updateById(updateOne)); return R.status(service.updateById(updateOne));
} }
@ -257,6 +318,33 @@ public class RemindMsgController extends BladeController {
"导入模版-消息提醒.xls"); "导入模版-消息提醒.xls");
} }
@GetMapping("/downloadExcelTemplatePlate")
@ApiOperationSupport(order = 71)
@Operation(summary = "下载Excel模板", description = "")
public ResponseEntity<org.springframework.core.io.Resource> downloadExcelTemplatePlate() {
return ExcelExtUtil.downloadXlsTemplate(
"Excel/QA/镀种消息提醒.xls",
"导入模版-镀种消息提醒.xls");
}
@GetMapping("/downloadExcelTemplateColor")
@ApiOperationSupport(order = 71)
@Operation(summary = "下载Excel模板", description = "")
public ResponseEntity<org.springframework.core.io.Resource> downloadExcelTemplateColor() {
return ExcelExtUtil.downloadXlsTemplate(
"Excel/QA/颜色消息提醒.xls",
"导入模版-颜色消息提醒.xls");
}
@GetMapping("/downloadExcelTemplateMaterial")
@ApiOperationSupport(order = 71)
@Operation(summary = "下载Excel模板", description = "")
public ResponseEntity<org.springframework.core.io.Resource> downloadExcelTemplateMaterial() {
return ExcelExtUtil.downloadXlsTemplate(
"Excel/QA/材料消息提醒.xls",
"导入模版-材料消息提醒.xls");
}
/** /**
* [提醒信息] 导入Excel * [提醒信息] 导入Excel
*/ */

@ -114,6 +114,10 @@ public class RemindMsgExcel implements Serializable {
@ColumnWidth(20) @ColumnWidth(20)
@ExcelProperty("子[零件]编码") @ExcelProperty("子[零件]编码")
private String subPartCode; private String subPartCode;
@ColumnWidth(20)
@ExcelProperty("虚拟子件号")
private String subPartCodeNew;
/** /**
* 生产标识 * 生产标识
*/ */
@ -144,4 +148,40 @@ public class RemindMsgExcel implements Serializable {
// @ColumnWidth(20) // @ColumnWidth(20)
// @ExcelProperty("参数4") // @ExcelProperty("参数4")
private String param4; private String param4;
//镀种信息
@ExcelProperty("镀种信息")
private String plateing;
//参数1上限
@ExcelProperty("参数1上限")
private BigDecimal param1Up;
//参数1下限
@ExcelProperty("参数1下限")
private BigDecimal param1Down;
//参数2上限
@ExcelProperty("参数2上限")
private BigDecimal param2Up;
//参数2下限
@ExcelProperty("参数2下限")
private BigDecimal param2Down;
//参数3上限
@ExcelProperty("参数3上限")
private BigDecimal param3Up;
//参数3下限
@ExcelProperty("参数3下限")
private BigDecimal param3Down;
//提醒颜色
@ExcelProperty("提醒颜色")
private String remindColor;
//显示颜色
@ExcelProperty("显示颜色")
private String showColor;
//程式编号
@ExcelProperty("程式编号")
private String formula;
//材料
@ExcelProperty("材料")
private String material;
} }

@ -72,5 +72,35 @@ public class RemindMsgServiceImpl extends BaseServiceImpl<RemindMsgMapper, Remin
vo.setProcessClazz1Name(part.getCraftWay()); vo.setProcessClazz1Name(part.getCraftWay());
} }
} }
if(null != vo.getParam1Up() && null != vo.getParam1Down()){
vo.setParam1(vo.getParam1Up() + "~" + vo.getParam1Down());
}
if(null != vo.getParam1Up() && null == vo.getParam1Down()){
vo.setParam1(vo.getParam1Up()+"");
}
if(null == vo.getParam1Up() && null != vo.getParam1Down()){
vo.setParam1(vo.getParam1Down()+"");
}
if(null != vo.getParam2Up() && null != vo.getParam2Down()){
vo.setParam2(vo.getParam2Up() + "~" + vo.getParam2Down());
}
if(null != vo.getParam2Up() && null == vo.getParam2Down()){
vo.setParam2(vo.getParam2Up()+"");
}
if(null == vo.getParam2Up() && null != vo.getParam2Down()){
vo.setParam2(vo.getParam2Down()+"");
}
if(null != vo.getParam3Up() && null != vo.getParam3Down()){
vo.setParam3(vo.getParam3Up() + "~" + vo.getParam3Down());
}
if(null != vo.getParam3Up() && null == vo.getParam3Down()){
vo.setParam3(vo.getParam3Up()+"");
}
if(null == vo.getParam3Up() && null != vo.getParam3Down()){
vo.setParam3(vo.getParam3Down()+"");
}
} }
} }

@ -36,6 +36,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.lang3.time.DateUtils;
import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.jackson.JsonUtil; import org.springblade.core.tool.jackson.JsonUtil;
import org.springblade.scheduling.pojo.entity.EquipAbilityEntity; import org.springblade.scheduling.pojo.entity.EquipAbilityEntity;
@ -57,6 +58,7 @@ import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
/** /**
* 工艺能力表 服务实现类 * 工艺能力表 服务实现类
@ -107,7 +109,8 @@ public class EquipResourceServiceImpl extends BaseServiceImpl<EquipResourceMappe
} }
//删除3天之前的数据 //删除3天之前的数据
List<EquipResourceEntity> deleteList = this.list(Wrappers.<EquipResourceEntity>lambdaQuery().le(EquipResourceEntity::getDateTime,DateFormatUtils.format(DateUtils.addDays(date,-3),"yyyy-MM-dd"))); List<EquipResourceEntity> deleteList = this.list(Wrappers.<EquipResourceEntity>lambdaQuery().le(EquipResourceEntity::getDateTime,DateFormatUtils.format(DateUtils.addDays(date,-3),"yyyy-MM-dd")));
deleteList.forEach(item -> baseMapper.deleteById(item.getId())); List<Long> idList = deleteList.stream().map(BaseEntity::getId).collect(Collectors.toList());
baseMapper.deleteByIds(idList);
log.info("初始化设备资源结束:"+ DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss")); log.info("初始化设备资源结束:"+ DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
} }

@ -33,6 +33,7 @@ import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.lang3.time.DateUtils;
import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.scheduling.pojo.entity.PersonAbilityEntity; import org.springblade.scheduling.pojo.entity.PersonAbilityEntity;
import org.springblade.scheduling.pojo.entity.PersonResourceEntity; import org.springblade.scheduling.pojo.entity.PersonResourceEntity;
@ -45,12 +46,12 @@ import org.springframework.stereotype.Service;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
/** /**
* 工艺能力表 服务实现类 * 工艺能力表 服务实现类
@ -87,6 +88,10 @@ public class PersonResourceServiceImpl extends BaseServiceImpl<PersonResourceMap
generateData(today); generateData(today);
} }
} }
//删除3天之前的数据
List<PersonResourceEntity> deleteList = this.list(Wrappers.<PersonResourceEntity>lambdaQuery().le(PersonResourceEntity::getDateTime,DateFormatUtils.format(DateUtils.addDays(date,-3),"yyyy-MM-dd")));
List<Long> idList = deleteList.stream().map(BaseEntity::getId).collect(Collectors.toList());
baseMapper.deleteByIds(idList);
log.info("初始化人力资源结束:"+ DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss")); log.info("初始化人力资源结束:"+ DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
} }

@ -528,23 +528,25 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} else { } else {
if ("设备".equals(mainProducerMap.get(craft.getPpsId()))) { if ("设备".equals(mainProducerMap.get(craft.getPpsId()))) {
String glassCodeStr = null; String glassCodeStr = null;
Map<String, Object> sameFurnaceMap = new HashMap<>(); Map<String, Object> sameMap = new HashMap<>();
//同炉同槽 //同炉同槽
if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_1.getCode()){ if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_1.getCode()){
//热表同槽 //热表同槽
Boolean isSameTrough = sameTrough(order, craft, localDateTime, workPlanList); sameMap = sameTrough(order, craft, localDateTime, workPlanList, prevProcessEnd);
//同槽就不需要继续匹配了 //同槽就不需要继续匹配了
if (isSameTrough) { if (sameMap.get("isSameTrough").toString() == "true") {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm");
prevProcessEnd = LocalDateTime.parse(sameMap.get("prevProcessEnd").toString(), formatter);
continue; continue;
} }
}else{ }else{
//烧结同炉 //烧结同炉
if (sintMap.containsKey(craft.getPpsId())) { if (sintMap.containsKey(craft.getPpsId())) {
sameFurnaceMap = sameFurnace(order, craft, workPlanList, localDateTime, glassCodeStr, sintMap, part, processMap, prevProcessEnd); sameMap = sameFurnace(order, craft, workPlanList, localDateTime, glassCodeStr, sintMap, part, processMap, prevProcessEnd);
//同炉的话就不用走下面的匹配了,直接下一工序 //同炉的话就不用走下面的匹配了,直接下一工序
if (sameFurnaceMap.get("isSameFurnace").toString() == "true") { if (sameMap.get("isSameFurnace").toString() == "true") {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm");
prevProcessEnd = LocalDateTime.parse(sameFurnaceMap.get("prevProcessEnd").toString(), formatter); prevProcessEnd = LocalDateTime.parse(sameMap.get("prevProcessEnd").toString(), formatter);
continue; continue;
} }
} }
@ -688,8 +690,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
//更新剩余产能 //更新剩余产能
equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(capacity)); equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(capacity));
equipResource.setIsUsed("1"); equipResource.setIsUsed("1");
if (order.getYieldType() != YieldOrderEnum.YIELD_TYPE_1.getCode() && sameFurnaceMap.get("glassCode") != null) { if (order.getYieldType() != YieldOrderEnum.YIELD_TYPE_1.getCode() && sameMap.get("glassCode") != null) {
equipResource.setGlassCode(sameFurnaceMap.get("glassCode").toString()); equipResource.setGlassCode(sameMap.get("glassCode").toString());
} }
equipResourceService.updateById(equipResource); equipResourceService.updateById(equipResource);
//同一个设备可能有多个工艺能力,同一时间只能做一个工艺能力的零件,所以需要把当前设备所有工艺能力的剩余产能都更新调 //同一个设备可能有多个工艺能力,同一时间只能做一个工艺能力的零件,所以需要把当前设备所有工艺能力的剩余产能都更新调
@ -703,8 +705,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
for(EquipResourceEntity otherResource : otherResourceList){ for(EquipResourceEntity otherResource : otherResourceList){
otherResource.setRestCapacity(otherResource.getTotalCapacity().multiply(rate).setScale(0, RoundingMode.FLOOR)); otherResource.setRestCapacity(otherResource.getTotalCapacity().multiply(rate).setScale(0, RoundingMode.FLOOR));
otherResource.setIsUsed("1"); otherResource.setIsUsed("1");
if (order.getYieldType() != YieldOrderEnum.YIELD_TYPE_1.getCode() && sameFurnaceMap.get("glassCode") != null) { if (order.getYieldType() != YieldOrderEnum.YIELD_TYPE_1.getCode() && sameMap.get("glassCode") != null) {
otherResource.setGlassCode(sameFurnaceMap.get("glassCode").toString()); otherResource.setGlassCode(sameMap.get("glassCode").toString());
} }
equipResourceService.updateById(otherResource); equipResourceService.updateById(otherResource);
} }
@ -809,13 +811,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
wrapper.eq(PersonResourceEntity::getTeamId,craft.getMakeTeam()); wrapper.eq(PersonResourceEntity::getTeamId,craft.getMakeTeam());
} }
wrapper.orderByAsc(PersonResourceEntity::getDateTime,PersonResourceEntity::getStartTime); wrapper.orderByAsc(PersonResourceEntity::getDateTime,PersonResourceEntity::getStartTime);
List<PersonResourceEntity> personResourceList = personResourceService.list(Wrappers.<PersonResourceEntity>lambdaQuery() List<PersonResourceEntity> personResourceList = personResourceService.list(wrapper);
.eq(PersonResourceEntity::getWorkCenterId, craft.getWorkCenterId())
.eq(PersonResourceEntity::getProcessId, craft.getPpsId())
.eq(PersonResourceEntity::getCraftId, craft.getCaId())
.le(PersonResourceEntity::getStartTime, prevProcessEnd)
.orderByAsc(PersonResourceEntity::getDateTime,PersonResourceEntity::getStartTime)
.eq(PersonResourceEntity::getTeamId,craft.getMakeTeam()));
if (CollectionUtils.isNotEmpty(personResourceList)) { if (CollectionUtils.isNotEmpty(personResourceList)) {
workPlan.setMakeTeam(personResourceList.get(0).getTeamId()); workPlan.setMakeTeam(personResourceList.get(0).getTeamId());
} }
@ -1417,29 +1413,110 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} }
} }
public Boolean sameTrough(YieldOrderEntity order, YieldOrderCraftEntity craft, LocalDateTime dateTime, List<WorkPlanEntity> workPlanList) { public Map<String, Object> sameTrough(YieldOrderEntity order,
YieldOrderCraftEntity craft,
LocalDateTime dateTime,
List<WorkPlanEntity> workPlanList,
LocalDateTime prevProcessEnd) {
Map<String, Object> map = new HashMap<>();
Boolean isSameTrough = false; Boolean isSameTrough = false;
SameTroughEntity sameTrough = sameTroughService.getOne(Wrappers.<SameTroughEntity>lambdaQuery() SameTroughEntity sameTrough = sameTroughService.getOne(Wrappers.<SameTroughEntity>lambdaQuery()
.eq(SameTroughEntity::getWorkCenterId, craft.getWorkCenterId()) .eq(SameTroughEntity::getWorkCenterId, craft.getWorkCenterId())
.eq(SameTroughEntity::getCraftId, craft.getCaId()) .eq(SameTroughEntity::getCraftId, craft.getCaId())
.eq(SameTroughEntity::getProcessId, craft.getPpsId())); .eq(SameTroughEntity::getProcessId, craft.getPpsId()));
if (sameTrough != null) { LambdaQueryWrapper<WorkPlanEntity> wrapper = new LambdaQueryWrapper<>();
LambdaQueryWrapper<WorkPlanEntity> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(WorkPlanEntity::getWorkCenterId, craft.getWorkCenterId())
wrapper.eq(WorkPlanEntity::getWorkCenterId, craft.getWorkCenterId()) .eq(WorkPlanEntity::getCaId, craft.getCaId())
.eq(WorkPlanEntity::getCaId, craft.getCaId()) .eq(WorkPlanEntity::getPpsId, craft.getPpsId())
.eq(WorkPlanEntity::getPpsId, craft.getPpsId()) .ge(WorkPlanEntity::getPlanStartTime, dateTime);
.ge(WorkPlanEntity::getPlanStartTime, dateTime); //返工订单需要原班组加工
//返工订单需要原班组加工 if(StringUtils.isNotEmpty(order.getReworkCode())){
if(StringUtils.isNotEmpty(order.getReworkCode())){ wrapper.eq(WorkPlanEntity::getMakeTeam,craft.getMakeTeam());
wrapper.eq(WorkPlanEntity::getMakeTeam,craft.getMakeTeam()); }
wrapper.orderByAsc(WorkPlanEntity::getPlanStartTime);
//查询是否有已经排产的计划
List<WorkPlanEntity> workPlanOldList = workPlanService.list(wrapper);
//如果没有查询到非同槽条件,默认同槽
if(sameTrough == null){
if (CollectionUtils.isNotEmpty(workPlanOldList)) {
//总生产量
BigDecimal sumCapacity = order.getYpArea().multiply(BigDecimal.valueOf(order.getYpQty()));
for (WorkPlanEntity entry : workPlanOldList) {
List<Long> resourceList = new ArrayList<>();
if (StringUtils.isNotEmpty(entry.getEquipResourceId())) {
List<Long> resourceIdList = Arrays.stream(entry.getEquipResourceId().split(","))
.map(String::trim)
.map(Long::valueOf)
.collect(Collectors.toList());
for(Long resourceId : resourceIdList){
EquipResourceEntity equipResource = equipResourceService.getById(resourceId);
if(equipResource == null){
continue;
}
//判断剩余产能是否满足总产能
if (sumCapacity.compareTo(equipResource.getRestCapacity()) > 0) {
resourceList.clear();
break;
} else {
resourceList.add(resourceId);
}
}
}
List<WorkPlanEntity> processPlanList = new ArrayList<>();
for(Long resourceId : resourceList){
EquipResourceEntity equipResource = equipResourceService.getById(resourceId);
//生成车间订单
WorkPlanEntity workPlan = new WorkPlanEntity();
workPlan.setPlanStartTime(equipResource.getStartTime());
if ("0".equals(equipResource.getEquipType())) {
workPlan.setPlanEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().setScale(0, RoundingMode.CEILING).longValue()));
} else {
workPlan.setPlanEndTime(equipResource.getEndTime());
}
workPlan.setWorkQty(0);
workPlan.setCaId(craft.getCaId());
workPlan.setPpsId(craft.getPpsId());
workPlan.setMakeTeam(equipResource.getTeamId());
workPlan.setWorkCenterId(craft.getWorkCenterId());
workPlan.setOrders(craft.getProcessNo());
workPlan.setWoId(order.getId());
workPlan.setOem("0");
workPlan.setTestQty(0);
workPlan.setQualifiedQty(0);
workPlan.setUnqualifiedQty(0);
workPlan.setScrapQty(0);
workPlan.setHourQuota((double)ChronoUnit.MINUTES.between(workPlan.getPlanStartTime(), workPlan.getPlanEndTime()));
workPlan.setEquipCode(equipResource.getEquipCode());
workPlan.setEquipName(equipResource.getEquipName());
workPlan.setEquipResourceId(equipResource.getId().toString());
processPlanList.add(workPlan);
equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(sumCapacity));
equipResourceService.updateById(equipResource);
isSameTrough = true;
}
if(CollectionUtils.isNotEmpty(processPlanList)){
WorkPlanEntity workPlan = new WorkPlanEntity();
BeanUtils.copyProperties(processPlanList.get(0),workPlan);
workPlan.setPlanStartTime(processPlanList.get(0).getPlanStartTime());
workPlan.setPlanEndTime(processPlanList.get(processPlanList.size()-1).getPlanEndTime());
String equipCode = processPlanList.stream().map(WorkPlanEntity::getEquipCode).collect(Collectors.joining(","));
String equipName = processPlanList.stream().map(WorkPlanEntity::getEquipName).collect(Collectors.joining(","));
String equipResourceId = processPlanList.stream().map(WorkPlanEntity::getEquipResourceId).map(String::valueOf).collect(Collectors.joining(","));
Double hourQuota = processPlanList.stream().mapToDouble(WorkPlanEntity::getHourQuota).sum();
workPlan.setEquipCode(equipCode);
workPlan.setEquipName(equipName);
workPlan.setEquipResourceId(equipResourceId);
workPlan.setHourQuota(hourQuota);
workPlanList.add(workPlan);
prevProcessEnd = workPlan.getPlanEndTime();
//排完了跳出循环
break;
}
}
} }
wrapper.orderByAsc(WorkPlanEntity::getPlanStartTime); }else if(sameTrough != null) {
//查询是否有已经排产的计划
List<WorkPlanEntity> workPlanOldList = workPlanService.list(Wrappers.<WorkPlanEntity>lambdaQuery()
.eq(WorkPlanEntity::getWorkCenterId, craft.getWorkCenterId())
.eq(WorkPlanEntity::getCaId, craft.getCaId())
.eq(WorkPlanEntity::getPpsId, craft.getPpsId())
.ge(WorkPlanEntity::getPlanStartTime, dateTime).orderByAsc(WorkPlanEntity::getPlanStartTime));
if (CollectionUtils.isNotEmpty(workPlanOldList)) { if (CollectionUtils.isNotEmpty(workPlanOldList)) {
//总生产量 //总生产量
BigDecimal sumCapacity = order.getYpArea().multiply(BigDecimal.valueOf(order.getYpQty())); BigDecimal sumCapacity = order.getYpArea().multiply(BigDecimal.valueOf(order.getYpQty()));
@ -1466,7 +1543,6 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
resourceList.add(resourceId); resourceList.add(resourceId);
} }
} }
} }
//如果产能满足,再判断是否满足同槽条件 //如果产能满足,再判断是否满足同槽条件
if (isEnough) { if (isEnough) {
@ -1579,6 +1655,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workPlan.setEquipResourceId(equipResourceId); workPlan.setEquipResourceId(equipResourceId);
workPlan.setHourQuota(hourQuota); workPlan.setHourQuota(hourQuota);
workPlanList.add(workPlan); workPlanList.add(workPlan);
prevProcessEnd = workPlan.getPlanEndTime();
//排完了跳出循环
break;
} }
} }
} }
@ -1588,7 +1667,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} }
} }
} }
return isSameTrough; map.put("isSameTrough", isSameTrough);
map.put("prevProcessEnd" , prevProcessEnd);
return map;
} }
public Map<String, Object> sameFurnace(YieldOrderEntity order, public Map<String, Object> sameFurnace(YieldOrderEntity order,

Loading…
Cancel
Save