|
|
|
|
@ -1,5 +1,6 @@ |
|
|
|
|
package org.springblade.desk.produce.service.impl; |
|
|
|
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil; |
|
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
|
@ -17,6 +18,7 @@ import org.springblade.desk.produce.pojo.dto.TaskCompleteOrderDTO; |
|
|
|
|
import org.springblade.desk.produce.pojo.entity.*; |
|
|
|
|
import org.springblade.desk.produce.pojo.vo.ByCardNoByPlanVO; |
|
|
|
|
import org.springblade.desk.produce.pojo.vo.TaskCompleteVO; |
|
|
|
|
import org.springblade.desk.produce.pojo.vo.WorkInProcessVO; |
|
|
|
|
import org.springblade.desk.produce.service.IDisTaskingService; |
|
|
|
|
import org.springblade.desk.produce.service.IWorkOrderRunService; |
|
|
|
|
import org.springblade.desk.produce.service.IWorkOrderService; |
|
|
|
|
@ -24,12 +26,12 @@ import org.springblade.desk.produce.service.IWorkPlanService; |
|
|
|
|
import org.springblade.desk.quality.pojo.entity.WorkPlanItem; |
|
|
|
|
import org.springblade.desk.quality.service.IWorkPlanItemService; |
|
|
|
|
import org.springblade.system.cache.UserCache; |
|
|
|
|
import org.springblade.system.feign.IUserClient; |
|
|
|
|
import org.springblade.system.pojo.entity.User; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
|
|
import java.util.Date; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.*; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 调度任务分派 服务实现类 |
|
|
|
|
@ -51,8 +53,6 @@ public class DisTaskingServiceImpl extends BaseServiceImpl<DisTaskingMapper, Dis |
|
|
|
|
|
|
|
|
|
private final IWorkPlanItemService workPlanItemService; |
|
|
|
|
|
|
|
|
|
private IUserClient userClient; |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public IPage<TaskCompleteVO> disTaskHandle(IPage<TaskCompleteVO> page, TaskCompleteDTO taskCompleteDTO) { |
|
|
|
|
IPage<TaskCompleteVO> iPage = page.setRecords(baseMapper.disTaskHandle(page, taskCompleteDTO)); |
|
|
|
|
@ -96,15 +96,17 @@ public class DisTaskingServiceImpl extends BaseServiceImpl<DisTaskingMapper, Dis |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
|
public void taskCompleteOrder(TaskCompleteOrderDTO taskCompleteDTO) { |
|
|
|
|
List<Long> ddtIds = taskCompleteDTO.getDdtIdList(); |
|
|
|
|
for (Long ddtId : ddtIds) { |
|
|
|
|
DisTasking dsDisTasking = baseMapper.selectById(ddtId); |
|
|
|
|
DisTasking dsDisTasking = this.getById(ddtId); |
|
|
|
|
dsDisTasking.setDispatchTime(new Date()); |
|
|
|
|
dsDisTasking.setDispatchMan(AuthUtil.getUserId()); |
|
|
|
|
dsDisTasking.setRsCode(taskCompleteDTO.getRsCode()); |
|
|
|
|
dsDisTasking.setHandleResult(taskCompleteDTO.getHandleResult()); |
|
|
|
|
dsDisTasking.setDisTaskStatus(DisTasking.TASK_STATUS_COMPLETED); |
|
|
|
|
this.updateById(dsDisTasking); |
|
|
|
|
DsTaskingEntity dsTaskingEntity = dsTaskingService.getById(dsDisTasking.getDtId()); |
|
|
|
|
// 通过零件号查询所有工艺变更的单子
|
|
|
|
|
if (dsDisTasking.getDtId() != null && dsTaskingEntity.getId() != null) { |
|
|
|
|
@ -141,4 +143,88 @@ public class DisTaskingServiceImpl extends BaseServiceImpl<DisTaskingMapper, Dis |
|
|
|
|
}); |
|
|
|
|
return this.updateBatchById(disTaskings); |
|
|
|
|
} |
|
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
|
@Override |
|
|
|
|
public boolean syncDisTasking() { |
|
|
|
|
Date endTime = new Date(); |
|
|
|
|
Date startTime = DateUtil.offsetMinute(endTime, -30); |
|
|
|
|
|
|
|
|
|
// 获取30分钟之前到现在的工艺任务分派数据
|
|
|
|
|
// List<DsTaskingEntity> dsTaskingEntities = dsTaskingService.list(Wrappers.lambdaQuery(DsTaskingEntity.class)
|
|
|
|
|
// .eq(DsTaskingEntity::getInProduction, "1").ne(DsTaskingEntity::getWipTake, "继续使用")
|
|
|
|
|
// .between(DsTaskingEntity::getSyncTime, startTime, endTime));
|
|
|
|
|
|
|
|
|
|
List<DsTaskingEntity> dsTaskingEntities = dsTaskingService.list(Wrappers.lambdaQuery(DsTaskingEntity.class) |
|
|
|
|
.eq(DsTaskingEntity::getInProduction, "1").ne(DsTaskingEntity::getWipTake, "继续使用")); |
|
|
|
|
if (CollectionUtils.isEmpty(dsTaskingEntities)) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Set<String> partCodes = dsTaskingEntities.stream() |
|
|
|
|
.map(DsTaskingEntity::getPartCode) |
|
|
|
|
.filter(Objects::nonNull) |
|
|
|
|
.collect(Collectors.toSet()); |
|
|
|
|
|
|
|
|
|
if (partCodes.isEmpty()) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Map<String, List<WorkInProcessVO>> workInProcessMap = workOrderService.getWorkInProcessByPartCode(partCodes); |
|
|
|
|
|
|
|
|
|
List<DisTasking> disTaskings = new ArrayList<>(dsTaskingEntities.size() * 2); |
|
|
|
|
List<Long> workOrders = new ArrayList<>(); |
|
|
|
|
for (DsTaskingEntity dsTaskingEntity : dsTaskingEntities) { |
|
|
|
|
String partCode = dsTaskingEntity.getPartCode(); |
|
|
|
|
if (partCode == null) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
// 查询在制品订单
|
|
|
|
|
List<WorkInProcessVO> workInProcessList = workInProcessMap.getOrDefault(partCode, Collections.emptyList()); |
|
|
|
|
for (WorkInProcessVO workInProcessVO : workInProcessList) { |
|
|
|
|
Long woId = workInProcessVO.getWoId(); |
|
|
|
|
Long dispatcher = workInProcessVO.getDispatcher(); |
|
|
|
|
String cardNo = workInProcessVO.getCardNo(); |
|
|
|
|
String batchNo = workInProcessVO.getBatchNo(); |
|
|
|
|
Integer runStatus = workInProcessVO.getRunStatus(); |
|
|
|
|
|
|
|
|
|
if (woId == null) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Date disAssignTime = null; |
|
|
|
|
Integer disTaskStatus = DisTasking.TASK_STATUS_WAIT; |
|
|
|
|
String memo = null; |
|
|
|
|
|
|
|
|
|
if (dispatcher != null) { |
|
|
|
|
disAssignTime = new Date(); |
|
|
|
|
disTaskStatus = DisTasking.TASK_STATUS_ALREADY; |
|
|
|
|
memo = "自动分派"; |
|
|
|
|
} |
|
|
|
|
DisTasking disTasking = new DisTasking(); |
|
|
|
|
disTasking.setDtId(dsTaskingEntity.getId()); |
|
|
|
|
disTasking.setCardNo(cardNo); |
|
|
|
|
disTasking.setBatchNo(batchNo); |
|
|
|
|
disTasking.setDisAssignTime(disAssignTime); |
|
|
|
|
disTasking.setDisAssignMan(dispatcher); |
|
|
|
|
disTasking.setDisTaskStatus(disTaskStatus); |
|
|
|
|
disTasking.setMemo(memo); |
|
|
|
|
disTasking.setDisOutFlag("0"); |
|
|
|
|
disTaskings.add(disTasking); |
|
|
|
|
// 订单状态 < 15 → 改为 5(工艺变更)
|
|
|
|
|
if (runStatus != null && runStatus < WorkOrder.RUN_STATUS_COMPLETED) { |
|
|
|
|
workOrders.add(woId); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (CollectionUtils.isEmpty(disTaskings)) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
boolean saveResult = this.saveBatch(disTaskings); |
|
|
|
|
|
|
|
|
|
if (saveResult && !CollectionUtils.isEmpty(workOrders)) { |
|
|
|
|
// 更新工单状态逻辑
|
|
|
|
|
saveResult = workOrderService.update(Wrappers.lambdaUpdate(WorkOrder.class).in(WorkOrder::getId, workOrders).set(WorkOrder::getRunStatus, WorkOrder.RUN_STATUS_CRAFT_CHANGE)); |
|
|
|
|
} |
|
|
|
|
return saveResult; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|