生产管理修改

liweidong
李涛 4 days ago
parent 6b76bd1e8f
commit 50e0fc614c
  1. 28
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/WorkInProcessVO.java
  2. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DisTaskingController.java
  3. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.java
  4. 20
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.xml
  5. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IDisTaskingService.java
  6. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  7. 98
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/DisTaskingServiceImpl.java
  8. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java

@ -0,0 +1,28 @@
package org.springblade.desk.produce.pojo.vo;
import lombok.Data;
import org.springblade.desk.produce.pojo.entity.MesQcProduceRunEntity;
import java.util.List;
/**
* 在制品订单 视图实体类
*
* @author litao
*/
@Data
public class WorkInProcessVO {
private String partCode;
private Long woId;
private Long dispatcher;
private String cardNo;
private String batchNo;
private Integer runStatus;
}

@ -153,4 +153,11 @@ public class DisTaskingController extends BladeController {
return R.success(); return R.success();
} }
@GetMapping("/syncDisTasking")
@ApiOperationSupport(order = 10)
@Operation(summary = "同步任务分派", description = "同步任务分派")
public R syncDisTasking() {
return R.status(disTaskingService.syncDisTasking());
}
} }

@ -8,11 +8,13 @@ import org.springblade.desk.produce.pojo.dto.QueryByReadStatusDTO;
import org.springblade.desk.produce.pojo.dto.WorkOrderDTO; import org.springblade.desk.produce.pojo.dto.WorkOrderDTO;
import org.springblade.desk.produce.pojo.entity.WorkOrder; import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.vo.QueryByReadStatusVO; import org.springblade.desk.produce.pojo.vo.QueryByReadStatusVO;
import org.springblade.desk.produce.pojo.vo.WorkInProcessVO;
import org.springblade.desk.produce.pojo.vo.WorkOrderVO; import org.springblade.desk.produce.pojo.vo.WorkOrderVO;
import org.springblade.scheduling.pojo.entity.WorkOrderEntity; import org.springblade.scheduling.pojo.entity.WorkOrderEntity;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
/** /**
* 车间订单表 Mapper 接口 * 车间订单表 Mapper 接口
@ -56,4 +58,6 @@ public interface WorkOrderMapper extends BaseMapper<WorkOrder> {
WorkOrder getMaxByMesCard(String code); WorkOrder getMaxByMesCard(String code);
List<WorkOrder> listByYoId(Long fatherYoId); List<WorkOrder> listByYoId(Long fatherYoId);
List<WorkInProcessVO> getWorkInProcessByPartCode(Set<String> partCodes);
} }

@ -215,5 +215,25 @@
<select id="listByYoId" resultType="org.springblade.desk.produce.pojo.entity.WorkOrder"> <select id="listByYoId" resultType="org.springblade.desk.produce.pojo.entity.WorkOrder">
SELECT a.* FROM MES_WORK_ORDER a INNER JOIN MES_YIELD_ORDER b ON a.YO_ID = b.ID where b.father_yo_id = #{fatherYoId} SELECT a.* FROM MES_WORK_ORDER a INNER JOIN MES_YIELD_ORDER b ON a.YO_ID = b.ID where b.father_yo_id = #{fatherYoId}
</select> </select>
<select id="getWorkInProcessByPartCode" resultType="org.springblade.desk.produce.pojo.vo.WorkInProcessVO">
SELECT
b.part_code AS partCode,
a.id AS woId,
a.dispatcher AS dispatcher,
a.card_no AS cardNo,
a.batch_no AS batchNo,
a.run_status AS runStatus
FROM
mes_work_order a,
mes_yield_order b
WHERE
a.yo_id = b.id
AND b.part_code in
<foreach item="item" index="index" collection="partCodes" open="(" separator="," close=")">
#{item}
</foreach>
AND a.last_instore_time IS NULL
AND a.run_status &lt; 19;
</select>
</mapper> </mapper>

@ -27,4 +27,6 @@ public interface IDisTaskingService extends BaseService<DisTasking> {
void taskCompleteOrder(TaskCompleteOrderDTO taskCompleteDTO); void taskCompleteOrder(TaskCompleteOrderDTO taskCompleteDTO);
boolean disTechnician(TaskCompleteDTO taskCompleteDTO); boolean disTechnician(TaskCompleteDTO taskCompleteDTO);
boolean syncDisTasking();
} }

@ -13,6 +13,7 @@ import org.springblade.scheduling.pojo.entity.WorkOrderEntity;
import org.springblade.desk.produce.pojo.vo.*; import org.springblade.desk.produce.pojo.vo.*;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
/** /**
* 车间订单表 服务类 * 车间订单表 服务类
@ -229,4 +230,6 @@ public interface IWorkOrderService extends BaseService<WorkOrder> {
void setRbFilePreserveData(List<MesRbFilePreserveSlotEntity> preserveSlotList, List<MesQcProduceRunEntity> qcProduceRunsList, WorkPlan workPlan, List<ProduceMonitorFileSlotVO> dsRbFilePreserveSlotList, MacToolUse prMacToolUse); void setRbFilePreserveData(List<MesRbFilePreserveSlotEntity> preserveSlotList, List<MesQcProduceRunEntity> qcProduceRunsList, WorkPlan workPlan, List<ProduceMonitorFileSlotVO> dsRbFilePreserveSlotList, MacToolUse prMacToolUse);
void addWorkOrder(WorkOrder newWo); void addWorkOrder(WorkOrder newWo);
Map<String, List<WorkInProcessVO>> getWorkInProcessByPartCode(Set<String> partCodes);
} }

@ -1,5 +1,6 @@
package org.springblade.desk.produce.service.impl; 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.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; 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.entity.*;
import org.springblade.desk.produce.pojo.vo.ByCardNoByPlanVO; import org.springblade.desk.produce.pojo.vo.ByCardNoByPlanVO;
import org.springblade.desk.produce.pojo.vo.TaskCompleteVO; 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.IDisTaskingService;
import org.springblade.desk.produce.service.IWorkOrderRunService; import org.springblade.desk.produce.service.IWorkOrderRunService;
import org.springblade.desk.produce.service.IWorkOrderService; 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.pojo.entity.WorkPlanItem;
import org.springblade.desk.quality.service.IWorkPlanItemService; import org.springblade.desk.quality.service.IWorkPlanItemService;
import org.springblade.system.cache.UserCache; import org.springblade.system.cache.UserCache;
import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.User; import org.springblade.system.pojo.entity.User;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date; import java.util.*;
import java.util.List; import java.util.stream.Collectors;
/** /**
* 调度任务分派 服务实现类 * 调度任务分派 服务实现类
@ -51,8 +53,6 @@ public class DisTaskingServiceImpl extends BaseServiceImpl<DisTaskingMapper, Dis
private final IWorkPlanItemService workPlanItemService; private final IWorkPlanItemService workPlanItemService;
private IUserClient userClient;
@Override @Override
public IPage<TaskCompleteVO> disTaskHandle(IPage<TaskCompleteVO> page, TaskCompleteDTO taskCompleteDTO) { public IPage<TaskCompleteVO> disTaskHandle(IPage<TaskCompleteVO> page, TaskCompleteDTO taskCompleteDTO) {
IPage<TaskCompleteVO> iPage = page.setRecords(baseMapper.disTaskHandle(page, taskCompleteDTO)); IPage<TaskCompleteVO> iPage = page.setRecords(baseMapper.disTaskHandle(page, taskCompleteDTO));
@ -96,15 +96,17 @@ public class DisTaskingServiceImpl extends BaseServiceImpl<DisTaskingMapper, Dis
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void taskCompleteOrder(TaskCompleteOrderDTO taskCompleteDTO) { public void taskCompleteOrder(TaskCompleteOrderDTO taskCompleteDTO) {
List<Long> ddtIds = taskCompleteDTO.getDdtIdList(); List<Long> ddtIds = taskCompleteDTO.getDdtIdList();
for (Long ddtId : ddtIds) { for (Long ddtId : ddtIds) {
DisTasking dsDisTasking = baseMapper.selectById(ddtId); DisTasking dsDisTasking = this.getById(ddtId);
dsDisTasking.setDispatchTime(new Date()); dsDisTasking.setDispatchTime(new Date());
dsDisTasking.setDispatchMan(AuthUtil.getUserId()); dsDisTasking.setDispatchMan(AuthUtil.getUserId());
dsDisTasking.setRsCode(taskCompleteDTO.getRsCode()); dsDisTasking.setRsCode(taskCompleteDTO.getRsCode());
dsDisTasking.setHandleResult(taskCompleteDTO.getHandleResult()); dsDisTasking.setHandleResult(taskCompleteDTO.getHandleResult());
dsDisTasking.setDisTaskStatus(DisTasking.TASK_STATUS_COMPLETED); dsDisTasking.setDisTaskStatus(DisTasking.TASK_STATUS_COMPLETED);
this.updateById(dsDisTasking);
DsTaskingEntity dsTaskingEntity = dsTaskingService.getById(dsDisTasking.getDtId()); DsTaskingEntity dsTaskingEntity = dsTaskingService.getById(dsDisTasking.getDtId());
// 通过零件号查询所有工艺变更的单子 // 通过零件号查询所有工艺变更的单子
if (dsDisTasking.getDtId() != null && dsTaskingEntity.getId() != null) { if (dsDisTasking.getDtId() != null && dsTaskingEntity.getId() != null) {
@ -141,4 +143,88 @@ public class DisTaskingServiceImpl extends BaseServiceImpl<DisTaskingMapper, Dis
}); });
return this.updateBatchById(disTaskings); 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;
}
} }

@ -883,6 +883,12 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
this.save(wo); this.save(wo);
} }
@Override
public Map<String, List<WorkInProcessVO>> getWorkInProcessByPartCode(Set<String> partCodes) {
List<WorkInProcessVO> workInProcess = baseMapper.getWorkInProcessByPartCode(partCodes);
return workInProcess.stream().collect(Collectors.groupingBy(WorkInProcessVO::getPartCode));
}
private String cardNextCode() { private String cardNextCode() {
String codePattern = "RBMES" + getRand("YYMM", 0); String codePattern = "RBMES" + getRand("YYMM", 0);
int randNum1 = (int) (Math.random() * (1000 - 100 + 1) + 100); int randNum1 = (int) (Math.random() * (1000 - 100 + 1) + 100);

Loading…
Cancel
Save