提供工艺接口

liweidong
liweidong-hj 4 weeks ago
parent 48c98a15d5
commit 8316895690
  1. 10
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskingEntity.java
  2. 32
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/enums/PartCraftStatusEnum.java
  3. 28
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/PartCraftVO.java
  4. 14
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsPartController.java
  5. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/CraftMapper.xml
  6. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsCraftMapper.java
  7. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PrReworkProcessMapper.java
  8. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ReworkProcessMapper.xml
  9. 15
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsCraftService.java
  10. 24
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java
  11. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IPrReworkProcessService.java
  12. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsCraftServiceImpl.java
  13. 148
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java
  14. 20
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java
  15. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/PrReworkProcessServiceImpl.java

@ -160,11 +160,11 @@ public class DsTaskingEntity extends BaseEntity {
@Schema(description = "工艺完成时间")
private Date craftTime;
/**
* 工艺级别
*/
@Schema(description = "工艺级别")
private String rank;
// /**
// * 工艺级别
// */
// @Schema(description = "工艺级别")
// private String rank;
/**

@ -0,0 +1,32 @@
package org.springblade.desk.dashboard.pojo.enums;
/**
* @author: liweidong
* @create: 2026-03-18
*/
public enum PartCraftStatusEnum {
SUCCESS("0", "查询成功"),
PART_CODE_EMPTY("-6", "partCode不能为空"),
ROAM_NO_EMPTY("-7", "roamNo不能为空"),
PART_NOT_EXIST("-1", "零件信息为空"),
PART_EXPIRED("-2", "零件超期"),
NO_CRAFT_INFO("-3", "没有工艺信息,创建维护任务"),
NO_PROCEDURE_INFO("-4", "没有工序信息"),
NO_CRAFT_RANK_INFO("-5", "没有工艺等级信息");
private final String code;
private final String msg;
PartCraftStatusEnum(String code, String msg) {
this.code = code;
this.msg = msg;
}
public String getCode() {
return code;
}
public String getMsg() {
return msg;
}
}

@ -0,0 +1,28 @@
package org.springblade.desk.dashboard.pojo.vo;
import lombok.Data;
import org.springblade.desk.dashboard.pojo.entity.DsCraftEntity;
@Data
public class PartCraftVO {
private String code;
private DsCraftEntity craft;
public static PartCraftVO build(String code, DsCraftEntity craft) {
PartCraftVO vo = new PartCraftVO();
vo.setCode(code);
vo.setCraft(craft);
return vo;
}
public static PartCraftVO build(String code) {
PartCraftVO vo = new PartCraftVO();
vo.setCode(code);
return vo;
}
}

@ -262,5 +262,19 @@ public class DsPartController extends BladeController {
}
/**
* 测试接口
*/
@GetMapping("/test")
public R test(@RequestParam String partCode,
@RequestParam String roamNo,
@RequestParam String rank,
@RequestParam String partVersion) {
return R.data(dsPartService.selectPartCraft(partCode,roamNo,rank,partVersion));
}
}

@ -86,5 +86,16 @@
resultType="org.springblade.desk.dashboard.pojo.entity.DsCraftEntity">
select * from P_RB_SYNC_CRAFT where PART_ID = #{oldMesPartId}
</select>
<select id="selectDsCraftByPartIdAndRoamNo"
resultType="org.springblade.desk.dashboard.pojo.entity.DsCraftEntity">
select * from DS_CRAFT where is_deleted = 0
and PART_ID = #{partId}
and ROAM_NO = #{roamNo}
</select>
<select id="selectDscraftByReworkOrder"
resultType="org.springblade.desk.dashboard.pojo.entity.DsCraftEntity">
select * from DS_CRAFT where is_deleted = 0
and REWORK_ORDER = #{changeNo}
</select>
</mapper>

@ -83,4 +83,8 @@ public interface DsCraftMapper extends BaseMapper<DsCraftEntity> {
DsCraftEntity selectDsCraftByPartCodeAndVersion(@Param("partCode")Long partCode,@Param("partVersion")String partVersion);
List<DsCraftEntity> selectOldMesCraftByOldMesPartId(@Param("oldMesPartId") Long oldMesPartId);
List<DsCraftEntity> selectDsCraftByPartIdAndRoamNo(@Param("partId") Long partId,@Param("roamNo") String roamNo);
DsCraftEntity selectDscraftByReworkOrder(@Param("changeNo") String changeNo);
}

@ -63,4 +63,9 @@ public interface PrReworkProcessMapper extends BaseMapper<PrReworkProcessEntity>
List<PrReworkProcessEntity> selectPrReworkProcess(@Param("reworkOrder") String reworkOrder,
@Param("partCode") String partCode,
@Param("batchNo") String batchNo);
List<PrReworkProcessEntity> selectPrReworkProcessReworkNo(@Param("reworkOrder") String reworkOrder,
@Param("partCode") String partCode,
@Param("batchNo") String batchNo,
@Param("reworkNo") String reworkNo);
}

@ -52,5 +52,13 @@
and PART_CODE = #{partCode}
and BATCH_NO = #{batchNo}
</select>
<select id="selectPrReworkProcessReworkNo"
resultType="org.springblade.desk.dashboard.pojo.entity.PrReworkProcessEntity">
select * from PR_REWORK_PROCESS where is_deleted = 0
and REWORK_CODE = #{reworkOrder}
and PART_CODE = #{partCode}
and BATCH_NO = #{batchNo}
and REWORK_NO = #{reworkNo}
</select>
</mapper>

@ -191,4 +191,19 @@ public interface IDsCraftService extends BaseService<DsCraftEntity> {
* @return
*/
List<DsCraftEntity> selectOldMesCraftByOldMesPartId(Long oldMesPartId);
/**
* 根据零件ID和B号查询工艺
* @param partId
* @param roamNo
* @return
*/
List<DsCraftEntity> selectDsCraftByPartIdAndRoamNo(Long partId, String roamNo);
/**
* 获取返工工艺
* @param changeNo
* @return
*/
DsCraftEntity getReworkCraft(String changeNo);
}

@ -29,9 +29,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.dashboard.excel.DsPartExcel;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
import org.springblade.desk.dashboard.pojo.entity.DsPartSub;
import org.springblade.desk.dashboard.pojo.entity.DsProcessProjectEntity;
import org.springblade.desk.dashboard.pojo.entity.*;
import org.springblade.desk.dashboard.pojo.vo.*;
import java.util.List;
@ -251,5 +249,23 @@ public interface IDsPartService extends BaseService<DsPartEntity> {
* @param partVersion 版本号
* @return
*/
boolean selectPartCraft(String partCode,String roamNo,String rank,String partVersion);
PartCraftVO selectPartCraft(String partCode, String roamNo, String rank, String partVersion);
/**
* 根据 零件号 返工单号 查询零件工艺信息
* @param partCode 零件号
* @param reworkOrder 返工单号
* @param batchNo 批次号
* @param reworkNo 路线编号
* @return
*/
List<PrReworkProcessEntity> selectReworkPartCraft(String partCode, String reworkOrder,String batchNo,String reworkNo);
/**
* 获取零件最新版本号
* @param partCode
* @return
*/
DsPartVersionEntity getNewPartVersion(String partCode);
}

@ -71,4 +71,14 @@ public interface IPrReworkProcessService extends BaseService<PrReworkProcessEnti
List<PrReworkProcessEntity> selectPrReworkProcess(String reworkOrder, String partCode, String batchNo);
JSONArray treeProcess(ReworkProcessDTO prReworkProcess);
/**
* 获取返工工序
* @param reworkOrder
* @param partCode
* @param batchNo
* @param reworkNo
* @return
*/
List<PrReworkProcessEntity> selectPrReworkProcess(String reworkOrder, String partCode, String batchNo,String reworkNo);
}

@ -357,4 +357,14 @@ public class DsCraftServiceImpl extends BaseServiceImpl<DsCraftMapper, DsCraftEn
return craftMapper.selectOldMesCraftByOldMesPartId(oldMesPartId);
}
@Override
public List<DsCraftEntity> selectDsCraftByPartIdAndRoamNo(Long partId, String roamNo) {
return craftMapper.selectDsCraftByPartIdAndRoamNo(partId,roamNo);
}
@Override
public DsCraftEntity getReworkCraft(String changeNo) {
return craftMapper.selectDscraftByReworkOrder(changeNo);
}
}

@ -1,9 +1,11 @@
package org.springblade.desk.dashboard.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
@ -13,6 +15,7 @@ import org.springblade.desk.dashboard.constant.TaskingConstant;
import org.springblade.desk.dashboard.excel.DsPartExcel;
import org.springblade.desk.dashboard.mapper.DsPartMapper;
import org.springblade.desk.dashboard.pojo.entity.*;
import org.springblade.desk.dashboard.pojo.enums.PartCraftStatusEnum;
import org.springblade.desk.dashboard.pojo.vo.*;
import org.springblade.desk.dashboard.service.*;
import org.springblade.desk.dashboard.utils.DateUtils;
@ -40,6 +43,7 @@ import java.util.stream.Collectors;
* @author BladeX
* @since 2025-11-12
*/
@Slf4j
@Service
public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntity> implements IDsPartService {
@ -85,6 +89,9 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
return erpDataPartClient;
}
@Autowired
IPrReworkProcessService prReworkProcessService;
@Override
public IPage<DsPartVO> selectDsPartPage(IPage<DsPartVO> page, DsPartVO dsPart) {
@ -574,7 +581,144 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
}
@Override
public boolean selectPartCraft(String partCode, String roamNo, String rank, String partVersion) {
return false;
public PartCraftVO selectPartCraft(String partCode, String roamNo, String rank, String partVersion) {
if (StringUtils.isEmpty(partCode)) {
return PartCraftVO.build(PartCraftStatusEnum.PART_NOT_EXIST.getCode());
}
// 1. 查询零件信息 - 先判空再使用
DsPartEntity partEntity = selectDsPartByPatCodeAndVersion(partCode, partVersion);
if (Objects.isNull(partEntity)) {
return PartCraftVO.build(PartCraftStatusEnum.PART_NOT_EXIST.getCode());
}
// 查询零件版本
DsPartVersionEntity partVersionEntity = partVersionService.selectByPartId(partEntity.getId());
// 2. 判断零件状态
// todo 判断零件状态维护中 返回“零件工艺维护中”
// 3. 检查工艺是否过期
Date nextDue = partEntity.getNextDue();
if (nextDue != null && nextDue.before(new Date())) {
return PartCraftVO.build(PartCraftStatusEnum.PART_EXPIRED.getCode());
}
// 4. 查询所有工艺
List<DsCraftEntity> dsCraftList = craftService.selectDsCraftByPartIdAndRoamNo(partEntity.getId(), roamNo);
// 5. 如果没有工艺,创建维护任务并返回null
if (CollectionUtils.isEmpty(dsCraftList)) {
createMaintainTask(partEntity, partVersionEntity);
return PartCraftVO.build(PartCraftStatusEnum.NO_CRAFT_INFO.getCode());
}
// 6. 按优先级查询工艺
DsCraftEntity craftByRank = selectCraftByPriority(dsCraftList, rank);
if (craftByRank == null) {
return PartCraftVO.build(PartCraftStatusEnum.NO_CRAFT_RANK_INFO.getCode());
}
// 7. 查询工序
List<DsProcessEntity> processEntities = processService.selectDsProcessByCraftId(craftByRank.getId());
if (CollectionUtils.isEmpty(processEntities)) {
return PartCraftVO.build(PartCraftStatusEnum.NO_PROCEDURE_INFO.getCode());
}
// 8. 返回工艺
return PartCraftVO.build(PartCraftStatusEnum.SUCCESS.getCode(),craftByRank);
}
@Override
public List<PrReworkProcessEntity> selectReworkPartCraft(String partCode, String reworkOrder,String batchNo,String reworkNo) {
if (StringUtils.isEmpty(partCode) || StringUtils.isEmpty(reworkOrder) || StringUtils.isEmpty(batchNo) || StringUtils.isEmpty(reworkNo) ) {
return null;
}
// 1.查询返工工艺
DsCraftEntity craftEntity = craftService.getReworkCraft(reworkOrder);
if (Objects.isNull(craftEntity)) {
return null;
}
// 2.查询返工工序
List<PrReworkProcessEntity> reworkProcessEntityList = prReworkProcessService.selectPrReworkProcess(reworkOrder, partCode, batchNo,reworkNo);
if(CollectionUtils.isEmpty(reworkProcessEntityList)){
return null;
}
return reworkProcessEntityList;
}
@Override
public DsPartVersionEntity getNewPartVersion(String partCode) {
if (StringUtils.isEmpty(partCode)) {
List<DsPartVersionEntity> partVersionEntityList = partVersionService.selectByPartCode(partCode);
Optional<DsPartVersionEntity> maxEntity = partVersionEntityList.stream()
.filter(entity -> entity.getPartVersion() != null)
.max(Comparator.comparing(DsPartVersionEntity::getPartVersion));
if (maxEntity.isPresent()) {
return maxEntity.get();
}
}
return null;
}
/**
* 创建维护任务
*/
private void createMaintainTask(DsPartEntity partEntity, DsPartVersionEntity partVersionEntity) {
DsTaskingEntity dsTaskingEntity = new DsTaskingEntity();
dsTaskingEntity.setPartCode(partEntity.getPartCode());
dsTaskingEntity.setPartName(partEntity.getPartName());
dsTaskingEntity.setTaskStatus(TaskingConstant.TASK_STATUS_WAIT);
dsTaskingEntity.setTaskType(TaskingConstant.MAINTAIN_TASK);
if (partVersionEntity != null) {
dsTaskingEntity.setVersion(partVersionEntity.getPartVersion());
}
boolean taskingSave = taskingService.save(dsTaskingEntity);
if (!taskingSave) {
log.error("创建维护任务失败,零件编码:{}", partEntity.getPartCode());
}
}
/**
* 根据优先级选择工艺
* 优先级规则指定级别 > 未指定时按 2级1级3级
*/
private DsCraftEntity selectCraftByPriority(List<DsCraftEntity> craftList, String rank) {
if (!StringUtils.isEmpty(rank)) {
// 指定了工艺级别,直接返回对应级别工艺
return getCraftByRank(craftList, rank);
}
// 未指定级别,按 2级→1级→3级 优先级查询
String[] priorityRanks = {"2", "1", "3"};
for (String priorityRank : priorityRanks) {
DsCraftEntity craft = getCraftByRank(craftList, priorityRank);
if (craft != null) {
return craft;
}
}
return null;
}
/**
* 从工艺列表中筛选指定级别的工艺
*/
private DsCraftEntity getCraftByRank(List<DsCraftEntity> craftList, String rank) {
if (CollectionUtils.isEmpty(craftList) || StringUtils.isEmpty(rank)) {
return null;
}
return craftList.stream()
.filter(craft -> rank.equals(craft.getRank()))
.findFirst()
.orElse(null);
}
}

@ -322,14 +322,14 @@ public class DsTaskingServiceImpl extends BaseServiceImpl<DsTaskingMapper, DsTas
}
}
String rank = dsTaskingEntity.getRank();
// String rank = dsTaskingEntity.getRank();
//1.判断零件和子件二级工艺/指定工艺级别下是否有工序
DsPartEntity partEntity = partService.selectDsPartByPatCodeAndVersion(dsTaskingEntity.getPartCode(),dsTaskingEntity.getVersion());
//查询零件和子件是否编制工序
//零件工艺
DsCraftEntity craft = craftService.getPartCraft(partEntity.getId(),rank);
DsCraftEntity craft = craftService.getPartCraft(partEntity.getId(),"2");
if(null == craft){
throw new ServiceException("零件工艺缺失");
}
@ -362,7 +362,7 @@ public class DsTaskingServiceImpl extends BaseServiceImpl<DsTaskingMapper, DsTas
}
}
if(null != zPartEntity.getSinTerType()){
DsCraftEntity zCraft = craftService.getPartCraft(zPartEntity.getId(),rank);
DsCraftEntity zCraft = craftService.getPartCraft(zPartEntity.getId(),"2");
if(null == zCraft){
throw new ServiceException("子件工艺缺失");
}
@ -576,8 +576,7 @@ public class DsTaskingServiceImpl extends BaseServiceImpl<DsTaskingMapper, DsTas
if(!CollectionUtils.isEmpty(taskingEntityList)){
throw new ServiceException("此版本任务已存在");
}else {
dsTasking.setRank("2");
dsTasking.setTaskStatus(TaskingConstant.TASK_STATUS_ALREADY);
dsTasking.setTaskStatus(TaskingConstant.TASK_STATUS_UNDERWAY);
dsTasking.setTaskType(TaskingConstant.MAINTAIN_TASK);
save(dsTasking);
return true;
@ -976,15 +975,18 @@ public class DsTaskingServiceImpl extends BaseServiceImpl<DsTaskingMapper, DsTas
// 1. 获取生产订单信息
YieldOrder yieldOrder = yieldOrderService.selectByPartCOdeAndBatchNo(partCode, batchNo);
String partVersion = null;
if (yieldOrder == null) {
throw new RuntimeException("无法在生产订单中获取零件版本号,零件号:" + partCode + ",批次号:" + batchNo);
}
//查询该零件最新版本号
DsPartVersionEntity newPartVersion = partService.getNewPartVersion(partCode);
partVersion = newPartVersion.getPartVersion();
String partVersion = yieldOrder.getPartVersion();
}else {
partVersion = yieldOrder.getPartVersion();
}
dsTasking.setVersion(partVersion);
// todo 查审理单 获取返修原因
// 2. 保存任务信息
int taskInsert = taskingMapper.insert(dsTasking);
if (taskInsert <= 0) {

@ -68,7 +68,7 @@ public class PrReworkProcessServiceImpl extends BaseServiceImpl<PrReworkProcessM
@Override
public List<PrReworkProcessEntity> selectPrReworkProcess(String reworkOrder, String partCode, String batchNo) {
return reworkProcessMapper.selectPrReworkProcess(reworkOrder,partCode,batchNo);
return reworkProcessMapper.selectPrReworkProcess(reworkOrder, reworkOrder,partCode);
}
@Override
@ -76,4 +76,9 @@ public class PrReworkProcessServiceImpl extends BaseServiceImpl<PrReworkProcessM
return null;
}
@Override
public List<PrReworkProcessEntity> selectPrReworkProcess(String reworkOrder, String partCode, String batchNo, String reworkNo) {
return reworkProcessMapper.selectPrReworkProcessReworkNo(reworkOrder,partCode,batchNo,reworkNo);
}
}

Loading…
Cancel
Save