|
|
|
|
@ -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)) { |
|
|
|
|
|