| | |
| | | String batchNum = IdUtils.fastSimpleUUID(); |
| | | List<ApsPlateProcessStat> tempList = apsPlateProcessStatMapper.queryTempStat(); |
| | | Map<String, List<ApsPlateProcessStat>> groupByOrderNo = tempList.stream().collect(groupingBy(ApsPlateProcessStat::getWorkOrderNo)); |
| | | Boolean hasBefore = false; |
| | | LocalDateTime now = LocalDateTime.now(); |
| | | for (Map.Entry<String, List<ApsPlateProcessStat>> entry : groupByOrderNo.entrySet()) { |
| | | List<ApsPlateProcessStat> statPerOrder = entry.getValue(); |
| | | /*num 为根据完工时间排序出的序号,按此排序,可保证是按完工时间倒叙排列*/ |
| | |
| | | stat.setId(IdUtils.fastSimpleUUID()); |
| | | stat.setBatchNumber(batchNum); |
| | | stat.setCreateBy(SecurityUtils.getUsername()); |
| | | stat.setWarning(false); |
| | | if(i==0){ |
| | | Date orderPlanEndDay = stat.getOrderPlanEndDay(); |
| | | LocalDateTime transLocalDateTime = transLocalDateTime(orderPlanEndDay); |
| | | LocalTime endOfDay = LocalTime.of(23, 59, 59); |
| | | LocalDateTime orderPlanEndDayLocalDateTime = LocalDateTime.of( transLocalDateTime.toLocalDate(), endOfDay); |
| | | |
| | | /*计划完工日=钣金计划工单完成时间*/ |
| | | stat.setProcessPlanEndDay(transDate(orderPlanEndDayLocalDateTime)); |
| | | /*计划开工日=钣金计划工单完成时间 - 工序总工时*/ |
| | | stat.setProcessPlanStartDay(transDate(orderPlanEndDayLocalDateTime.minusHours(stat.getProcessTotalTime()))); |
| | | } |
| | | /*当工艺工序号 > 工单当前工序时,代表是未来的工序,才进行计划开工日 和计划完工日的计算*/ |
| | | if( stat.getRouteProcessNumber().compareTo(stat.getCurrentProcessNumber())>0){ |
| | | /*&计划开工日 和 计划完成日 ,同时大于当前日期时执行计算*/ |
| | | LocalDateTime currentEndDay = transLocalDateTime(stat.getProcessPlanEndDay()); |
| | | LocalDateTime currentStartDay = transLocalDateTime(stat.getProcessPlanStartDay()); |
| | | if(currentEndDay.isAfter(LocalDateTime.now()) && currentStartDay.isAfter(LocalDateTime.now())){ |
| | | if(last!=null){ |
| | | /*未开工工序的计划开工日=上一道工序的计划开工日+上一道工序的工序总工时。*/ |
| | | stat.setProcessPlanEndDay(last.getProcessPlanStartDay()); |
| | | stat.setProcessPlanStartDay(transDate(transLocalDateTime(last.getProcessPlanStartDay()).minusHours(stat.getProcessTotalTime()) )); |
| | | if(orderPlanEndDayLocalDateTime.isBefore(now)){ |
| | | hasBefore = true; |
| | | stat.setWarning(true); |
| | | stat.setProcessPlanEndDay(transDate(now)); |
| | | stat.setProcessPlanStartDay(transDate(now)); |
| | | }else { |
| | | /*计划完工日=钣金计划工单完成时间*/ |
| | | stat.setProcessPlanEndDay(transDate(orderPlanEndDayLocalDateTime)); |
| | | /*计划开工日=钣金计划工单完成时间 - 工序总工时*/ |
| | | LocalDateTime lastPlanStartDt = orderPlanEndDayLocalDateTime.minusHours(stat.getProcessTotalTime().longValue()); |
| | | if(lastPlanStartDt.isBefore(now)){ |
| | | hasBefore = true; |
| | | stat.setProcessPlanStartDay(transDate(now)); |
| | | }else { |
| | | stat.setProcessPlanStartDay(transDate(lastPlanStartDt)); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | /*当工艺工序号 >= 工单当前工序 代表是未来工序,才进行计划开工日 和计划完工日的计算 |
| | | * 当工艺工序号 < 工单当前工序 过去工序,不进行计算 |
| | | * */ |
| | | if( stat.getRouteProcessNumber().compareTo(stat.getCurrentProcessNumber())>=0){ |
| | | /*倒排时 下一道工序存在 比当前时间小的计划时间,则当前计划开始和结束时间都是当前时间*/ |
| | | if(hasBefore){ |
| | | stat.setWarning(true); |
| | | stat.setProcessPlanEndDay(transDate(now)); |
| | | stat.setProcessPlanStartDay(transDate(now)); |
| | | }else{ |
| | | /*下一道工序计划时间都正常时,*/ |
| | | if (last != null) { |
| | | /*当前工序结束时间=下一道工序的开始时间*/ |
| | | stat.setProcessPlanEndDay(last.getProcessPlanStartDay()); |
| | | /*开始时间=结束时间-总工时*/ |
| | | LocalDateTime crtStartDt = transLocalDateTime(last.getProcessPlanStartDay()).minusHours(stat.getProcessTotalTime().longValue()); |
| | | /*如果开始时间小于当前时间*/ |
| | | if(crtStartDt.isBefore(now)){ |
| | | hasBefore=true; |
| | | stat.setWarning(true); |
| | | stat.setProcessPlanStartDay(transDate(now)); |
| | | }else { |
| | | stat.setProcessPlanStartDay(transDate(crtStartDt)); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | last = stat; |
| | | apsPlateProcessStatMapper.insertApsPlateProcessStat(stat); |
| | | } |
| | | hasBefore=false; |
| | | |
| | | } |
| | | apsPlateProcessStatMapper.removeOtherStat(batchNum); |