|
|
|
|
@ -159,9 +159,23 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper, |
|
|
|
|
return R.fail("未找到可交件的工序!"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Integer scrapQty = oemTakeBack.getScrapQty() != null ? oemTakeBack.getScrapQty() : 0; |
|
|
|
|
Integer testQty = oemTakeBack.getTestQty() != null ? oemTakeBack.getTestQty() : 0; |
|
|
|
|
|
|
|
|
|
// 执行收回业务
|
|
|
|
|
executeBusinessLogic(yieldOrder, workOrder, workOrderRun, workPlans, deliverablePlan, |
|
|
|
|
workOrderRun.getCreateTime(), new Date(), oemTakeBack.getDeliverKey(), oemTakeBack.getScrapQty(), oemTakeBack.getTestQty()); |
|
|
|
|
workOrderRun.getCreateTime(), new Date(), oemTakeBack.getDeliverKey(), |
|
|
|
|
scrapQty, testQty); |
|
|
|
|
|
|
|
|
|
// 调用转厂内自动分派逻辑
|
|
|
|
|
List<YieldOrderCraft> yieldOrderCrafts = yieldOrderCraftService.listByYoId(yieldOrder.getId()); |
|
|
|
|
try { |
|
|
|
|
yieldOrderCraftService.automaticDispatch(yieldOrderCrafts, yieldOrder, Boolean.TRUE, null); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("转厂内自动分派失败", e); |
|
|
|
|
return R.fail("转厂内自动分派失败:" + e.getMessage()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return R.success("收回成功"); |
|
|
|
|
} |
|
|
|
|
return R.fail("未找到相关外协订单"); |
|
|
|
|
@ -288,6 +302,30 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper, |
|
|
|
|
wp.setCaId(wpr.getCaId()); |
|
|
|
|
wpList.add(wp); |
|
|
|
|
} |
|
|
|
|
// 重新锚定wp为车间订单当前工序,避免循环变量泄漏
|
|
|
|
|
wp = workPlanMapper.selectById(wo.getWpId()); |
|
|
|
|
|
|
|
|
|
// 转外协审批通过后,将第一道外协工序之后所有工序的 加工班组/计划开始时间/计划结束时间 置空
|
|
|
|
|
if (!wpList.isEmpty()) { |
|
|
|
|
WorkPlan firstOemPlan = wpList.stream() |
|
|
|
|
.min(Comparator.comparing(WorkPlan::getOrders)).get(); |
|
|
|
|
List<WorkPlan> allPlans = workPlanMapper.selectList( |
|
|
|
|
new LambdaQueryWrapper<WorkPlan>().eq(WorkPlan::getWoId, wo.getId())); |
|
|
|
|
List<WorkPlan> tailPlans = new ArrayList<>(); |
|
|
|
|
for (WorkPlan plan : allPlans) { |
|
|
|
|
if (plan.getOrders().compareTo(firstOemPlan.getOrders()) > 0 |
|
|
|
|
&& wpList.stream().noneMatch(w -> w.getId().equals(plan.getId()))) { |
|
|
|
|
plan.setMakeTeam(null); |
|
|
|
|
plan.setPlanStartTime(null); |
|
|
|
|
plan.setPlanEndTime(null); |
|
|
|
|
tailPlans.add(plan); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (!tailPlans.isEmpty()) { |
|
|
|
|
workPlanMapper.updateById(tailPlans); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
wo.setWorId(workOrderRun.getId()); |
|
|
|
|
workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_ISSUED); |
|
|
|
|
//新增状态:外协状态,转外协审批通过后,置为待外协
|
|
|
|
|
@ -445,6 +483,27 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper, |
|
|
|
|
wpList.add(wp); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 转厂内审批通过后,将第一道外协工序之后所有工序的 加工班组/计划开始时间/计划结束时间 置空
|
|
|
|
|
if (!wpList.isEmpty()) { |
|
|
|
|
WorkPlan firstInternalPlan = wpList.stream() |
|
|
|
|
.min(Comparator.comparing(WorkPlan::getOrders)).get(); |
|
|
|
|
List<WorkPlan> allPlans = workPlanMapper.selectList( |
|
|
|
|
new LambdaQueryWrapper<WorkPlan>().eq(WorkPlan::getWoId, wo.getId())); |
|
|
|
|
List<WorkPlan> tailPlans = new ArrayList<>(); |
|
|
|
|
for (WorkPlan plan : allPlans) { |
|
|
|
|
if (plan.getOrders().compareTo(firstInternalPlan.getOrders()) > 0 |
|
|
|
|
&& wpList.stream().noneMatch(w -> w.getId().equals(plan.getId()))) { |
|
|
|
|
plan.setMakeTeam(null); |
|
|
|
|
plan.setPlanStartTime(null); |
|
|
|
|
plan.setPlanEndTime(null); |
|
|
|
|
tailPlans.add(plan); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (!tailPlans.isEmpty()) { |
|
|
|
|
workPlanMapper.updateById(tailPlans); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (wpList.isEmpty()) { |
|
|
|
|
throw new ServiceException("未选择转回工序,请走外协交件流程!"); |
|
|
|
|
} |
|
|
|
|
@ -456,18 +515,7 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper, |
|
|
|
|
if (teamSet == null) { |
|
|
|
|
//调用转厂内自动分派处理
|
|
|
|
|
List<YieldOrderCraft> yieldOrderCrafts = yieldOrderCraftService.listByYoId(yo.getId()); |
|
|
|
|
Map<String, YieldOrderCraft> yieldOrderCraftMap = yieldOrderCrafts.stream().collect(Collectors.toMap(YieldOrderCraft::getProcessNo, v -> v)); |
|
|
|
|
yieldOrderCraftService.automaticDispatch(yieldOrderCrafts, yo, Boolean.TRUE, null); |
|
|
|
|
// 回写分派结果:从 YieldOrderCraft.workCenterId 反查班组,写入 WorkPlan.makeTeam
|
|
|
|
|
for (WorkPlan plan : wpList) { |
|
|
|
|
YieldOrderCraft craft = yieldOrderCraftMap.get(plan.getOrders()); |
|
|
|
|
if (craft != null && craft.getWorkCenterId() != null) { |
|
|
|
|
List<TeamSet> teams = teamSetMapper.selectList(new LambdaQueryWrapper<TeamSet>().eq(TeamSet::getWcId, craft.getWorkCenterId())); |
|
|
|
|
if (teams != null && !teams.isEmpty()) { |
|
|
|
|
plan.setMakeTeam(teams.get(0).getId()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
//周新昊 20241015 增加调用下方方法
|
|
|
|
|
//处理包装工序 并且工艺能力包含 包装 并且加工单位为空的
|
|
|
|
|
//手持移动端数据查询接口
|
|
|
|
|
@ -502,6 +550,10 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper, |
|
|
|
|
int days = ProcessCycleEnum.BC_TYPE_CYCLE_HEAT.getValue(); |
|
|
|
|
Date date = DateUtil.plusDays(wo.getSendDownTime(), days); |
|
|
|
|
wo.setPlanEndDate(DateUtil.format(date,DateUtil.PATTERN_DATETIME)); |
|
|
|
|
// 转厂内审批通过,清除是否外协和外协商
|
|
|
|
|
wo.setOem("0"); |
|
|
|
|
wo.setOcId(null); |
|
|
|
|
wo.setOemOut("0"); |
|
|
|
|
workOrderMapper.updateById(wo); |
|
|
|
|
|
|
|
|
|
wo = workOrderMapper.selectById(wo.getId()); |
|
|
|
|
@ -704,8 +756,8 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper, |
|
|
|
|
// 更新车间订单信息
|
|
|
|
|
updateWorkOrder(workOrder, deliverablePlan, scrapQty, testQty); |
|
|
|
|
|
|
|
|
|
// 更新交件工序前的所有可提交工序
|
|
|
|
|
updatePreviousWorkPlans(workPlans, deliverablePlan, workOrder, startTime, endTime); |
|
|
|
|
// 更新交件工序前的所有可提交工序,并将本次外协的全部工序报工完成
|
|
|
|
|
updatePreviousWorkPlans(workPlans, deliverablePlan, workOrderRun, workOrder, startTime, endTime); |
|
|
|
|
|
|
|
|
|
// 更新交件工序状态
|
|
|
|
|
updateDeliverableWorkPlan(deliverablePlan, workOrder, startTime, endTime, scrapQty, testQty); |
|
|
|
|
@ -754,18 +806,25 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper, |
|
|
|
|
* @param endTime |
|
|
|
|
*/ |
|
|
|
|
private void updatePreviousWorkPlans(List<WorkPlan> workPlans, WorkPlan deliverablePlan, |
|
|
|
|
WorkOrder workOrder, Date startTime, Date endTime) { |
|
|
|
|
workPlans.stream() |
|
|
|
|
.filter(plan -> "1".equals(plan.getOem()) && plan.getStatus() < 3 |
|
|
|
|
&& plan.getOrders().compareTo(deliverablePlan.getOrders()) < 0) |
|
|
|
|
.forEach(plan -> { |
|
|
|
|
plan.setQualifiedQty(workOrder.getMakeQty()); |
|
|
|
|
plan.setWorkQty(workOrder.getMakeQty()); |
|
|
|
|
plan.setStatus(5); // 已完成
|
|
|
|
|
plan.setFactStartTime(startTime); |
|
|
|
|
plan.setFactEndTime(endTime); |
|
|
|
|
workPlanMapper.updateById(plan); |
|
|
|
|
}); |
|
|
|
|
WorkOrderRun workOrderRun, WorkOrder workOrder, |
|
|
|
|
Date startTime, Date endTime) { |
|
|
|
|
// 将本次外协的全部工序报工完成
|
|
|
|
|
List<WorkPlanRun> wprList = workPlanRunMapper.selectList( |
|
|
|
|
new LambdaQueryWrapper<WorkPlanRun>() |
|
|
|
|
.eq(WorkPlanRun::getWorId, workOrderRun.getId())); |
|
|
|
|
if (!wprList.isEmpty()) { |
|
|
|
|
List<Long> wpIds = wprList.stream().map(WorkPlanRun::getWpId).collect(Collectors.toList()); |
|
|
|
|
List<WorkPlan> oemPlans = workPlanMapper.selectList( |
|
|
|
|
new LambdaQueryWrapper<WorkPlan>().in(WorkPlan::getId, wpIds)); |
|
|
|
|
for (WorkPlan wp : oemPlans) { |
|
|
|
|
wp.setStatus(WorkPlan.STATUS_WORK_OK); |
|
|
|
|
wp.setFactStartTime(startTime); |
|
|
|
|
wp.setFactEndTime(endTime); |
|
|
|
|
wp.setWorkQty(workOrder.getMakeQty()); |
|
|
|
|
wp.setQualifiedQty(workOrder.getMakeQty()); |
|
|
|
|
} |
|
|
|
|
workPlanMapper.updateById(oemPlans); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|