转外协、转厂内、收回相关字段赋值与逻辑修改

liweidong
zangzhipeng 18 hours ago
parent 06685a12c6
commit 18f7d88cc3
  1. 111
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java

@ -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);
}
}
/**

Loading…
Cancel
Save