diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskingEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskingEntity.java
index a0789fdb..950ad9a2 100644
--- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskingEntity.java
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskingEntity.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;
/**
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/enums/PartCraftStatusEnum.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/enums/PartCraftStatusEnum.java
new file mode 100644
index 00000000..22dc754d
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/enums/PartCraftStatusEnum.java
@@ -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;
+ }
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/PartCraftVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/PartCraftVO.java
new file mode 100644
index 00000000..2b250d9f
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/PartCraftVO.java
@@ -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;
+ }
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsPartController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsPartController.java
index 6211bad6..5c78154d 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsPartController.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsPartController.java
@@ -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));
+ }
+
+
+
}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/CraftMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/CraftMapper.xml
index 24b85bbe..6d8d2556 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/CraftMapper.xml
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/CraftMapper.xml
@@ -86,5 +86,16 @@
resultType="org.springblade.desk.dashboard.pojo.entity.DsCraftEntity">
select * from P_RB_SYNC_CRAFT where PART_ID = #{oldMesPartId}
+
+
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsCraftMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsCraftMapper.java
index 23edd3eb..62f21014 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsCraftMapper.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsCraftMapper.java
@@ -83,4 +83,8 @@ public interface DsCraftMapper extends BaseMapper {
DsCraftEntity selectDsCraftByPartCodeAndVersion(@Param("partCode")Long partCode,@Param("partVersion")String partVersion);
List selectOldMesCraftByOldMesPartId(@Param("oldMesPartId") Long oldMesPartId);
+
+ List selectDsCraftByPartIdAndRoamNo(@Param("partId") Long partId,@Param("roamNo") String roamNo);
+
+ DsCraftEntity selectDscraftByReworkOrder(@Param("changeNo") String changeNo);
}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PrReworkProcessMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PrReworkProcessMapper.java
index 75931eaf..eb64af32 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PrReworkProcessMapper.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PrReworkProcessMapper.java
@@ -60,7 +60,12 @@ public interface PrReworkProcessMapper extends BaseMapper
*/
List exportPrReworkProcess(@Param("ew") Wrapper queryWrapper);
- List selectPrReworkProcess(@Param("reworkOrder")String reworkOrder,
- @Param("partCode")String partCode,
- @Param("batchNo")String batchNo);
+ List selectPrReworkProcess(@Param("reworkOrder") String reworkOrder,
+ @Param("partCode") String partCode,
+ @Param("batchNo") String batchNo);
+
+ List selectPrReworkProcessReworkNo(@Param("reworkOrder") String reworkOrder,
+ @Param("partCode") String partCode,
+ @Param("batchNo") String batchNo,
+ @Param("reworkNo") String reworkNo);
}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ReworkProcessMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ReworkProcessMapper.xml
index 215614cf..7739d0fc 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ReworkProcessMapper.xml
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ReworkProcessMapper.xml
@@ -52,5 +52,13 @@
and PART_CODE = #{partCode}
and BATCH_NO = #{batchNo}
+
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsCraftService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsCraftService.java
index acc10646..3bb3705c 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsCraftService.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsCraftService.java
@@ -191,4 +191,19 @@ public interface IDsCraftService extends BaseService {
* @return
*/
List selectOldMesCraftByOldMesPartId(Long oldMesPartId);
+
+ /**
+ * 根据零件ID和B号查询工艺
+ * @param partId
+ * @param roamNo
+ * @return
+ */
+ List selectDsCraftByPartIdAndRoamNo(Long partId, String roamNo);
+
+ /**
+ * 获取返工工艺
+ * @param changeNo
+ * @return
+ */
+ DsCraftEntity getReworkCraft(String changeNo);
}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java
index 01a5b1ab..6374de1c 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java
@@ -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 {
* @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 selectReworkPartCraft(String partCode, String reworkOrder,String batchNo,String reworkNo);
+
+ /**
+ * 获取零件最新版本号
+ * @param partCode
+ * @return
+ */
+ DsPartVersionEntity getNewPartVersion(String partCode);
}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IPrReworkProcessService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IPrReworkProcessService.java
index ceda52ed..2e8e2df1 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IPrReworkProcessService.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IPrReworkProcessService.java
@@ -71,4 +71,14 @@ public interface IPrReworkProcessService extends BaseService selectPrReworkProcess(String reworkOrder, String partCode, String batchNo);
JSONArray treeProcess(ReworkProcessDTO prReworkProcess);
+
+ /**
+ * 获取返工工序
+ * @param reworkOrder
+ * @param partCode
+ * @param batchNo
+ * @param reworkNo
+ * @return
+ */
+ List selectPrReworkProcess(String reworkOrder, String partCode, String batchNo,String reworkNo);
}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsCraftServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsCraftServiceImpl.java
index 1ece1de8..e1757aa2 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsCraftServiceImpl.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsCraftServiceImpl.java
@@ -357,4 +357,14 @@ public class DsCraftServiceImpl extends BaseServiceImpl selectDsCraftByPartIdAndRoamNo(Long partId, String roamNo) {
+ return craftMapper.selectDsCraftByPartIdAndRoamNo(partId,roamNo);
+ }
+
+ @Override
+ public DsCraftEntity getReworkCraft(String changeNo) {
+ return craftMapper.selectDscraftByReworkOrder(changeNo);
+ }
}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java
index 147cd8e5..868aa236 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java
@@ -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 implements IDsPartService {
@@ -85,6 +89,9 @@ public class DsPartServiceImpl extends BaseServiceImpl selectDsPartPage(IPage page, DsPartVO dsPart) {
@@ -574,7 +581,144 @@ public class DsPartServiceImpl extends BaseServiceImpl 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 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 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 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 partVersionEntityList = partVersionService.selectByPartCode(partCode);
+ Optional 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 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 craftList, String rank) {
+ if (CollectionUtils.isEmpty(craftList) || StringUtils.isEmpty(rank)) {
+ return null;
+ }
+ return craftList.stream()
+ .filter(craft -> rank.equals(craft.getRank()))
+ .findFirst()
+ .orElse(null);
+ }
+
+
+
+
}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java
index d9c583da..342ea7b6 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java
@@ -322,14 +322,14 @@ public class DsTaskingServiceImpl extends BaseServiceImpl 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 selectPrReworkProcess(String reworkOrder, String partCode, String batchNo, String reworkNo) {
+ return reworkProcessMapper.selectPrReworkProcessReworkNo(reworkOrder,partCode,batchNo,reworkNo);
+ }
+
}