解决循环依赖问题

develop-QA
李涛 3 months ago
parent 176f9f63cf
commit 7bc3a8f336
  1. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/RbProduceManageController.java
  2. 9
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java
  3. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  4. 122
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java
  5. 96
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java

@ -31,8 +31,6 @@ public class RbProduceManageController extends BladeController {
private final IWorkOrderService workOrderService;
private final IWorkOrderRunService workOrderRunService;
@GetMapping("/page")
@ApiOperationSupport(order = 1)
@Operation(summary = "车间订单列表分页", description = "传入WorkOrderVO")
@ -76,7 +74,7 @@ public class RbProduceManageController extends BladeController {
@ApiOperationSupport(order = 6)
@Operation(summary = "获取转外协所需数据", description = "传入produceManageDTO")
public R listProProcess(@RequestBody ListProProcessDTO listProProcessDTO) {
return R.data(workOrderRunService.listProProcess(listProProcessDTO));
return R.data(workOrderService.listProProcess(listProProcessDTO));
}
@PostMapping(value = "/transferBill")

@ -1,11 +1,7 @@
package org.springblade.desk.produce.service;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.dto.ListProProcessDTO;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
import org.springblade.desk.produce.pojo.entity.WorkPlanRun;
import java.util.List;
/**
* 车间订单运行记录表 服务类
@ -14,9 +10,4 @@ import java.util.List;
*/
public interface IWorkOrderRunService extends BaseService<WorkOrderRun> {
/**
* <p>方法名: listProProcess </p>
* <p>方法描述: 转单加载组装数据 </p>
*/
List<WorkPlanRun> listProProcess(ListProProcessDTO listProProcessDTO);
}

@ -2,6 +2,7 @@ package org.springblade.desk.produce.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.dto.ListProProcessDTO;
import org.springblade.desk.produce.pojo.dto.WorkOrderDTO;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
@ -36,4 +37,10 @@ public interface IWorkOrderService extends BaseService<WorkOrder> {
boolean updateStatus(List<Long> idArr, Integer status, Long userId, String memo);
boolean transferBill(List<WorkOrderRun> workOrderRuns, List<WorkPlanRun> workPlanRuns);
/**
* <p>方法名: listProProcess </p>
* <p>方法描述: 转单加载组装数据 </p>
*/
List<WorkPlanRun> listProProcess(ListProProcessDTO listProProcessDTO);
}

@ -1,29 +1,11 @@
package org.springblade.desk.produce.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity;
import org.springblade.desk.dashboard.service.IBsProcessSetService;
import org.springblade.desk.produce.mapper.WorkOrderRunMapper;
import org.springblade.desk.produce.pojo.dto.ListProProcessDTO;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
import org.springblade.desk.produce.pojo.entity.WorkPlan;
import org.springblade.desk.produce.pojo.entity.WorkPlanRun;
import org.springblade.desk.produce.service.IWorkOrderRunService;
import org.springblade.desk.produce.service.IWorkPlanService;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.time.Instant;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import static com.alibaba.fastjson2.util.DateUtils.DEFAULT_ZONE_ID;
/**
* 车间订单运行记录表 服务实现类
@ -34,108 +16,4 @@ import static com.alibaba.fastjson2.util.DateUtils.DEFAULT_ZONE_ID;
@RequiredArgsConstructor
public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper, WorkOrderRun> implements IWorkOrderRunService {
private final IWorkPlanService prWorkPlanService;
private final IBsProcessSetService bsProcessSetService;
@Override
public List<WorkPlanRun> listProProcess(ListProProcessDTO listProProcessDTO) {
List<Long> woIds = listProProcessDTO.getWoIds();
Integer runType = listProProcessDTO.getRunType();
if (CollectionUtils.isEmpty(woIds) || runType == null) {
return null;
}
Long curWoId = woIds.get(0);
List<WorkPlan> wpList = prWorkPlanService.list(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, curWoId));
List<WorkPlanRun> wprList = new ArrayList<>(wpList.size());
// 拿出第一个单子对应的可以派外协的工序
String proName = "";
for (WorkPlan wp : wpList) {
WorkPlanRun wpr = new WorkPlanRun();
//验证
if (!this.checkWp(wp, runType)) {
continue;
}
//转厂内时所有工序自动标记
if (WorkOrderRun.RUN_TYPE_2.equals(runType)) {
wpr.setHandle(Boolean.TRUE);
} else {
wpr.setHandle(Boolean.FALSE);
}
//组装工序号和工序id,用于批量验证是否一致
if (StringUtils.isBlank(proName)) {
proName = wp.getOrders() + "_" + wp.getPpsId();
} else {
proName = proName + "," + wp.getOrders() + "_" + wp.getPpsId();
}
wpr.setCaId(wp.getCaId());
wpr.setStartTime(localDateTimeToDate(wp.getStartTime()));
wpr.setEndTime(localDateTimeToDate(wp.getEndTime()));
wpr.setWpId(wp.getWoId());
wprList.add(wpr);
}
//如果是批量操作
if (woIds.size() > 1) {
//从集合里面提出首单id
woIds.remove(curWoId);
//验证其他车间订单是否满足条件
for (Long aLong : woIds) {
wpList = prWorkPlanService.list(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, aLong));
// 拿出其他单子可以派外协的工序与第一条做对比
String otherProName = "";
for (WorkPlan wp : wpList) {
//验证
if (!this.checkWp(wp, runType)) {
continue;
}
//组装工序号和工序id,用于批量验证是否一致
if (StringUtils.isBlank(otherProName)) {
otherProName = wp.getOrders() + "_" + wp.getPpsId();
} else {
otherProName = otherProName + "," + wp.getOrders() + "_" + wp.getPpsId();
}
}
if (!proName.equals(otherProName)) {
throw new ServiceException("请选择相同的可转出的工序进行操作!!!");
}
}
}
return wprList;
}
private boolean checkWp(WorkPlan wp, Integer runType) {
//不分派工序不能操作
BsProcessSetEntity processSet = bsProcessSetService.getById(wp.getPpsId());
if (processSet == null) {
return false;
}
if ("1".equals(processSet.getIsDispatch())) {
return false;
}
//如果是转厂内,则非厂外的工序跳过
if (WorkOrderRun.RUN_TYPE_2.equals(runType) && "0".equals(wp.getOem())) {
return false;
}
return true;
}
/**
* LocalDateTime Date
* @param localDateTime
* @return
*/
private Date localDateTimeToDate(LocalDateTime localDateTime) {
// 空值校验,避免空指针异常
if (localDateTime == null) {
return null;
}
// 1. LocalDateTime + 时区 → ZonedDateTime → Instant
Instant instant = localDateTime.atZone(DEFAULT_ZONE_ID).toInstant();
// 2. Instant → Date
return Date.from(instant);
}
}

@ -8,13 +8,13 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity;
import org.springblade.desk.dashboard.service.IBsProcessSetService;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.pojo.enums.YieldOrderEnum;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.produce.mapper.WorkOrderMapper;
import org.springblade.desk.produce.pojo.dto.ListProProcessDTO;
import org.springblade.desk.produce.pojo.dto.WorkOrderDTO;
import org.springblade.desk.produce.pojo.entity.*;
import org.springblade.desk.produce.pojo.vo.BatchPrepareVO;
@ -27,10 +27,15 @@ import org.springblade.desk.quality.service.IPlanTestService;
import org.springblade.desk.quality.service.IWorkPlanItemService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.rmi.ServerException;
import java.time.Instant;
import java.time.LocalDateTime;
import java.util.*;
import static com.alibaba.fastjson2.util.DateUtils.DEFAULT_ZONE_ID;
/**
* 车间订单表 服务实现类
*
@ -202,7 +207,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
WorkPlanRun wpr;
for (WorkPlan wp : wpList) {
//验证
if (!this.checkWp(wp, workOrderRun.getRunType())) {
if (!this.checkWp(wp, Integer.valueOf(workOrderRun.getRunType()))) {
continue;
}
//获取到通用的工序信息
@ -255,7 +260,76 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
return true;
}
private boolean checkWp(WorkPlan wp, Short runType) {
@Override
public List<WorkPlanRun> listProProcess(ListProProcessDTO listProProcessDTO) {
List<Long> woIds = listProProcessDTO.getWoIds();
Integer runType = listProProcessDTO.getRunType();
if (CollectionUtils.isEmpty(woIds) || runType == null) {
return null;
}
Long curWoId = woIds.get(0);
List<WorkPlan> wpList = workPlanService.list(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, curWoId));
List<WorkPlanRun> wprList = new ArrayList<>(wpList.size());
// 拿出第一个单子对应的可以派外协的工序
String proName = "";
for (WorkPlan wp : wpList) {
WorkPlanRun wpr = new WorkPlanRun();
//验证
if (!this.checkWp(wp, runType)) {
continue;
}
//转厂内时所有工序自动标记
if (WorkOrderRun.RUN_TYPE_2.equals(runType)) {
wpr.setHandle(Boolean.TRUE);
} else {
wpr.setHandle(Boolean.FALSE);
}
//组装工序号和工序id,用于批量验证是否一致
if (StringUtils.isBlank(proName)) {
proName = wp.getOrders() + "_" + wp.getPpsId();
} else {
proName = proName + "," + wp.getOrders() + "_" + wp.getPpsId();
}
wpr.setCaId(wp.getCaId());
wpr.setStartTime(localDateTimeToDate(wp.getStartTime()));
wpr.setEndTime(localDateTimeToDate(wp.getEndTime()));
wpr.setWpId(wp.getWoId());
wprList.add(wpr);
}
//如果是批量操作
if (woIds.size() > 1) {
//从集合里面提出首单id
woIds.remove(curWoId);
//验证其他车间订单是否满足条件
for (Long aLong : woIds) {
wpList = workPlanService.list(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, aLong));
// 拿出其他单子可以派外协的工序与第一条做对比
String otherProName = "";
for (WorkPlan wp : wpList) {
//验证
if (!this.checkWp(wp, runType)) {
continue;
}
//组装工序号和工序id,用于批量验证是否一致
if (StringUtils.isBlank(otherProName)) {
otherProName = wp.getOrders() + "_" + wp.getPpsId();
} else {
otherProName = otherProName + "," + wp.getOrders() + "_" + wp.getPpsId();
}
}
if (!proName.equals(otherProName)) {
throw new ServiceException("请选择相同的可转出的工序进行操作!!!");
}
}
}
return wprList;
}
private boolean checkWp(WorkPlan wp, Integer runType) {
//不分派工序不能操作
BsProcessSetEntity processSet = bsProcessSetService.getById(wp.getPpsId());
if (processSet == null) {
@ -271,6 +345,22 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
return true;
}
/**
* LocalDateTime Date
* @param localDateTime
* @return
*/
private Date localDateTimeToDate(LocalDateTime localDateTime) {
// 空值校验,避免空指针异常
if (localDateTime == null) {
return null;
}
// 1. LocalDateTime + 时区 → ZonedDateTime → Instant
Instant instant = localDateTime.atZone(DEFAULT_ZONE_ID).toInstant();
// 2. Instant → Date
return Date.from(instant);
}
private void updateStatusFun(WorkOrder workOrder, Integer runStatus, Long userId) {
workOrder.setRunStatus(runStatus);
if (WorkOrder.RUN_STATUS_VOIDED.equals(runStatus)) {

Loading…
Cancel
Save