result = getWorkCenterClient().getById(workCenterId);
+ return result.getData();
+ });
+ }
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/feign/IWorkCenterClient.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/feign/IWorkCenterClient.java
new file mode 100644
index 00000000..2bc3aadc
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/feign/IWorkCenterClient.java
@@ -0,0 +1,57 @@
+/**
+ * BladeX Commercial License Agreement
+ * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
+ *
+ * Use of this software is governed by the Commercial License Agreement
+ * obtained after purchasing a license from BladeX.
+ *
+ * 1. This software is for development use only under a valid license
+ * from BladeX.
+ *
+ * 2. Redistribution of this software's source code to any third party
+ * without a commercial license is strictly prohibited.
+ *
+ * 3. Licensees may copyright their own code but cannot use segments
+ * from this software for such purposes. Copyright of this software
+ * remains with BladeX.
+ *
+ * Using this software signifies agreement to this License, and the software
+ * must not be used for illegal purposes.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
+ * not liable for any claims arising from secondary or illegal development.
+ *
+ * Author: Chill Zhuang (bladejava@qq.com)
+ */
+package org.springblade.desk.basic.feign;
+
+
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.tool.api.R;
+import org.springblade.desk.basic.pojo.entity.WorkCenter;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * 作业中心 Feign接口类
+ *
+ * @author lqk
+ */
+@FeignClient(
+ value = AppConstant.APPLICATION_DESK_NAME
+)
+public interface IWorkCenterClient {
+
+ String API_PREFIX = "/feign/workCenter";
+ String GET_BY_ID = API_PREFIX + "/getById";
+
+ /**
+ * 根据id获取作业中心
+ *
+ * @param workCenterId 作业中心id
+ * @return
+ */
+ @GetMapping(GET_BY_ID)
+ R getById(@RequestParam("id") Long workCenterId);
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsCraftAbilityDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsCraftAbilityDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsCraftAbilityDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsCraftAbilityDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsPlatingDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsPlatingDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsPlatingDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsPlatingDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsPlatingTypeAssignDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsPlatingTypeAssignDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsPlatingTypeAssignDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsPlatingTypeAssignDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsPlatingTypeDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsPlatingTypeDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsPlatingTypeDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsPlatingTypeDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsPlatingTypeSmallDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsPlatingTypeSmallDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsPlatingTypeSmallDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsPlatingTypeSmallDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsProcessGroupDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsProcessGroupDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsProcessGroupDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsProcessGroupDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsProcessSetDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsProcessSetDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsProcessSetDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsProcessSetDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsProcessTeamDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsProcessTeamDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsProcessTeamDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsProcessTeamDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsTeamSetDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsTeamSetDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsTeamSetDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsTeamSetDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsWorkCenterDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsWorkCenterDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsWorkCenterDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/BsWorkCenterDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchPreservePlanDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchPreservePlanDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchPreservePlanDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchPreservePlanDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchPreserveTaskDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchPreserveTaskDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchPreserveTaskDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchPreserveTaskDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchWorkCenterSetDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchWorkCenterSetDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchWorkCenterSetDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchWorkCenterSetDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBomDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBomDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBomDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBomDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsCraftDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsCraftDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsCraftDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsCraftDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsHourQuotaDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsHourQuotaDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsHourQuotaDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsHourQuotaDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsHourQuotaDetailDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsHourQuotaDetailDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsHourQuotaDetailDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsHourQuotaDetailDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsMainSaltAddQuantityDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsMainSaltAddQuantityDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsMainSaltAddQuantityDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsMainSaltAddQuantityDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsPartDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsPartDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsPartDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsPartDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsPartRelationDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsPartRelationDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsPartRelationDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsPartRelationDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProDetailDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProDetailDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProDetailDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProDetailDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProModelDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProModelDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProModelDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProModelDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProcessDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProcessDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProcessDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProcessDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProcessMeasuringToolDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProcessMeasuringToolDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProcessMeasuringToolDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProcessMeasuringToolDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProcessMoldToolDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProcessMoldToolDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProcessMoldToolDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProcessMoldToolDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProcessProjectDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProcessProjectDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProcessProjectDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsProcessProjectDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsSimilarPartsDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsSimilarPartsDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsSimilarPartsDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsSimilarPartsDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsSpecialProDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsSpecialProDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsSpecialProDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsSpecialProDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsTaskBillDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsTaskBillDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsTaskBillDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsTaskBillDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsTaskingDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsTaskingDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsTaskingDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsTaskingDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/PrReworkProcessDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/PrReworkProcessDTO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/PrReworkProcessDTO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/dto/PrReworkProcessDTO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsCraftAbilityEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsCraftAbilityEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsCraftAbilityEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsCraftAbilityEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsPlatingEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsPlatingEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsPlatingEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsPlatingEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsPlatingTypeAssignEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsPlatingTypeAssignEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsPlatingTypeAssignEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsPlatingTypeAssignEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsPlatingTypeEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsPlatingTypeEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsPlatingTypeEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsPlatingTypeEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsPlatingTypeSmallEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsPlatingTypeSmallEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsPlatingTypeSmallEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsPlatingTypeSmallEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsProcessGroupEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsProcessGroupEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsProcessGroupEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsProcessGroupEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsProcessSetEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsProcessSetEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsProcessSetEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsProcessSetEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsProcessTeamEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsProcessTeamEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsProcessTeamEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsProcessTeamEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsTeamSetEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsTeamSetEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsTeamSetEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsTeamSetEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsWorkCenterEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsWorkCenterEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsWorkCenterEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsWorkCenterEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreservePlanEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreservePlanEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreservePlanEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreservePlanEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreserveTaskEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreserveTaskEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreserveTaskEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreserveTaskEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchWorkCenterSetEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchWorkCenterSetEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchWorkCenterSetEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchWorkCenterSetEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBomEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBomEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBomEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBomEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsCraftEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsCraftEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsCraftEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsCraftEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsHourQuotaDetailEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsHourQuotaDetailEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsHourQuotaDetailEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsHourQuotaDetailEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsHourQuotaEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsHourQuotaEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsHourQuotaEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsHourQuotaEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsMainSaltAddQuantityEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsMainSaltAddQuantityEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsMainSaltAddQuantityEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsMainSaltAddQuantityEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartRelationEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartRelationEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartRelationEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartRelationEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProDetailEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProDetailEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProDetailEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProDetailEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProModelEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProModelEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProModelEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProModelEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessMeasuringToolEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessMeasuringToolEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessMeasuringToolEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessMeasuringToolEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessMoldToolEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessMoldToolEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessMoldToolEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessMoldToolEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessProjectEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessProjectEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessProjectEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessProjectEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsSimilarPartsEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsSimilarPartsEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsSimilarPartsEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsSimilarPartsEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsSpecialProEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsSpecialProEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsSpecialProEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsSpecialProEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskBillEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskBillEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskBillEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskBillEntity.java
diff --git a/blade-service/blade-desk/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
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskingEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskingEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/PrReworkProcessEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/PrReworkProcessEntity.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/PrReworkProcessEntity.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/PrReworkProcessEntity.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsCompilationCompletedVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsCompilationCompletedVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsCompilationCompletedVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsCompilationCompletedVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsCraftAbilityVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsCraftAbilityVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsCraftAbilityVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsCraftAbilityVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingTypeAssignVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingTypeAssignVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingTypeAssignVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingTypeAssignVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingTypeListVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingTypeListVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingTypeListVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingTypeListVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingTypeSmallVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingTypeSmallVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingTypeSmallVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingTypeSmallVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingTypeVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingTypeVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingTypeVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingTypeVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsPlatingVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsProcessGroupVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsProcessGroupVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsProcessGroupVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsProcessGroupVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsProcessSetVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsProcessSetVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsProcessSetVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsProcessSetVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsProcessTeamVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsProcessTeamVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsProcessTeamVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsProcessTeamVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsTeamProcessVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsTeamProcessVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsTeamProcessVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsTeamProcessVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsTeamSetEntityVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsTeamSetEntityVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsTeamSetEntityVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsTeamSetEntityVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsTeamSetVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsTeamSetVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsTeamSetVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsTeamSetVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsWorkCenterVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsWorkCenterVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsWorkCenterVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/BsWorkCenterVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/CraftTreeVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/CraftTreeVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/CraftTreeVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/CraftTreeVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchPreservePlanVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchPreservePlanVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchPreservePlanVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchPreservePlanVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchPreserveTaskVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchPreserveTaskVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchPreserveTaskVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchPreserveTaskVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchWorkCenterSetVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchWorkCenterSetVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchWorkCenterSetVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchWorkCenterSetVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBomVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBomVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBomVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBomVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsCraftExpireVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsCraftExpireVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsCraftExpireVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsCraftExpireVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsCraftVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsCraftVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsCraftVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsCraftVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsHourQuotaDetailVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsHourQuotaDetailVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsHourQuotaDetailVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsHourQuotaDetailVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsHourQuotaVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsHourQuotaVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsHourQuotaVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsHourQuotaVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsMainSaltAddQuantityVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsMainSaltAddQuantityVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsMainSaltAddQuantityVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsMainSaltAddQuantityVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsModelAndDetailVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsModelAndDetailVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsModelAndDetailVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsModelAndDetailVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartAuthorizedVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartAuthorizedVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartAuthorizedVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartAuthorizedVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartBomVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartBomVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartBomVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartBomVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartCodeAndPartNameVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartCodeAndPartNameVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartCodeAndPartNameVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartCodeAndPartNameVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartRelationVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartRelationVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartRelationVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartRelationVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartSynthesisVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartSynthesisVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartSynthesisVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartSynthesisVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartTreeVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartTreeVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartTreeVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartTreeVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProDetailVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProDetailVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProDetailVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProDetailVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProModelDetailListVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProModelDetailListVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProModelDetailListVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProModelDetailListVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProModelVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProModelVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProModelVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProModelVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessMeasuringToolVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessMeasuringToolVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessMeasuringToolVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessMeasuringToolVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessMoldToolVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessMoldToolVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessMoldToolVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessMoldToolVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessProjectVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessProjectVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessProjectVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessProjectVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessSaveVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessSaveVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessSaveVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessSaveVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessSynthesisVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessSynthesisVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessSynthesisVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessSynthesisVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProcessVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsReworkTaskVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsReworkTaskVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsReworkTaskVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsReworkTaskVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsSimilarPartsVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsSimilarPartsVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsSimilarPartsVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsSimilarPartsVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsSpecialProVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsSpecialProVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsSpecialProVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsSpecialProVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsTaskBillVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsTaskBillVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsTaskBillVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsTaskBillVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsTaskingVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsTaskingVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsTaskingVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsTaskingVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/PrReworkCompilationCompletedVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/PrReworkCompilationCompletedVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/PrReworkCompilationCompletedVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/PrReworkCompilationCompletedVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/PrReworkProcessVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/PrReworkProcessVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/PrReworkProcessVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/PrReworkProcessVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/ProcessTreeVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/ProcessTreeVO.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/ProcessTreeVO.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/ProcessTreeVO.java
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/SyncResult.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/SyncResult.java
similarity index 100%
rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/SyncResult.java
rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/SyncResult.java
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/entity/EquipmentEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/entity/EquipmentEntity.java
index 120f7807..1de7aa0c 100644
--- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/entity/EquipmentEntity.java
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/entity/EquipmentEntity.java
@@ -144,7 +144,16 @@ public class EquipmentEntity extends BaseEntity {
*/
@Schema(description = "附件链接")
private String attachLink;
-
+ /**
+ * 设备位置
+ */
+ @Schema(description = "设备位置")
+ private String equipmentLocation;
+ /**
+ * 作业中心ID
+ */
+ @Schema(description = "作业中心ID")
+ private Long workstationId;
public void setDocking(String docking) {
// 核心逻辑:如果传入的是 null 或空字符串,则使用默认值 "0"
if (docking == null || docking.trim().isEmpty()) {
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/excel/EquipmentExcel.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/excel/EquipmentExcel.java
index 6b34982c..cdbe1b3a 100644
--- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/excel/EquipmentExcel.java
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/excel/EquipmentExcel.java
@@ -124,8 +124,14 @@ public class EquipmentExcel implements Serializable {
@ColumnWidth(20)
@ExcelProperty("设备分类")
private String categorys;
+ /**
+ * 设备位置
+ */
@ColumnWidth(20)
+ @ExcelProperty("设备位置")
+ private String equipmentLocation;
+ @ColumnWidth(20)
@ExcelProperty("附件链接")
private String attachLink;
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/CertificateMaintenanceEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/CertificateMaintenanceEntity.java
new file mode 100644
index 00000000..0b8b4a4a
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/CertificateMaintenanceEntity.java
@@ -0,0 +1,65 @@
+package org.springblade.desk.jobTransfer.pojo.entity;
+
+import lombok.Data;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.util.Date;
+
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+import java.io.Serial;
+
+/**
+ * 证书维护 实体类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Data
+@TableName("MES_CERTIFICATE_MAINTENANCE")
+@Schema(description = "CertificateMaintenance对象")
+@EqualsAndHashCode(callSuper = true)
+public class CertificateMaintenanceEntity extends BaseEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 岗位处理ID
+ */
+ @Schema(description = "岗位处理ID")
+ private Long phId;
+ /**
+ * 证书类型ID
+ */
+ @Schema(description = "证书类型ID")
+ private Long certificateId;
+ /**
+ * 证书编号
+ */
+ @Schema(description = "证书编号")
+ private String certificateCode;
+ /**
+ * 证书日期
+ */
+ @Schema(description = "证书日期")
+ private Date certificateDate;
+ /**
+ * 适航日期
+ */
+ @Schema(description = "适航日期")
+ private Date airworthinessDate;
+ /**
+ * 宇航日期
+ */
+ @Schema(description = "宇航日期")
+ private Date astronautDate;
+ /**
+ * 维护状态(1正常,2到期,3离职)
+ */
+ @Schema(description = "维护状态(1正常,2到期,3离职)")
+ private Short maintenanceStatus;
+
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/CertificateTypeEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/CertificateTypeEntity.java
new file mode 100644
index 00000000..09ca27d6
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/CertificateTypeEntity.java
@@ -0,0 +1,47 @@
+package org.springblade.desk.jobTransfer.pojo.entity;
+
+import lombok.Data;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+import java.io.Serial;
+
+/**
+ * 证书类型 实体类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Data
+@TableName("MES_CERTIFICATE_TYPE")
+@Schema(description = "CertificateType对象")
+@EqualsAndHashCode(callSuper = true)
+public class CertificateTypeEntity extends BaseEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 证书名称
+ */
+ @Schema(description = "证书名称")
+ private String name;
+ /**
+ * 证书有效期
+ */
+ @Schema(description = "证书有效期")
+ private Short validityPeriod;
+ /**
+ * 适航有效期
+ */
+ @Schema(description = "适航有效期")
+ private Short airworthinessValidityPeriod;
+ /**
+ * 宇航有效期
+ */
+ @Schema(description = "宇航有效期")
+ private Short astronautValidityPeriod;
+
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/CultivateDetailEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/CultivateDetailEntity.java
new file mode 100644
index 00000000..705554c4
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/CultivateDetailEntity.java
@@ -0,0 +1,75 @@
+package org.springblade.desk.jobTransfer.pojo.entity;
+
+import lombok.Data;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.util.Date;
+
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+import java.io.Serial;
+
+/**
+ * 培训安排 实体类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Data
+@TableName("MES_CULTIVATE_DETAIL")
+@Schema(description = "CultivateDetail对象")
+@EqualsAndHashCode(callSuper = true)
+public class CultivateDetailEntity extends BaseEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 岗位处理ID
+ */
+ @Schema(description = "岗位处理ID")
+ private Long phId;
+ /**
+ * 培训类型(1实习,2转岗,3下岗)
+ */
+ @Schema(description = "培训类型(1实习,2转岗,3下岗)")
+ private Short type;
+ /**
+ * 培训模板ID
+ */
+ @Schema(description = "培训模板ID")
+ private Long planId;
+ /**
+ * 培训师ID
+ */
+ @Schema(description = "培训师ID")
+ private Long teacherId;
+ /**
+ * 培训师
+ */
+ @Schema(description = "培训师")
+ private String teacherName;
+ /**
+ * 培训状态(1未配置,2等待下发,3已下发-培训中,4已到期,5已培训-待确认,6培训完成)
+ */
+ @Schema(description = "培训状态(1未配置,2等待下发,3已下发-培训中,4已到期,5已培训-待确认,6培训完成)")
+ private Short caStatus;
+ /**
+ * 下发时间
+ */
+ @Schema(description = "下发时间")
+ private Date distributeTime;
+ /**
+ * 完成时间
+ */
+ @Schema(description = "完成时间")
+ private Date finishTime;
+ /**
+ * 附件链接
+ */
+ @Schema(description = "附件链接")
+ private String attachLink;
+
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/EquipmentMaintenanceEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/EquipmentMaintenanceEntity.java
new file mode 100644
index 00000000..82932104
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/EquipmentMaintenanceEntity.java
@@ -0,0 +1,55 @@
+package org.springblade.desk.jobTransfer.pojo.entity;
+
+import lombok.Data;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.util.Date;
+
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+import java.io.Serial;
+
+/**
+ * 岗位设备维护 实体类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Data
+@TableName("MES_EQUIPMENT_MAINTENANCE")
+@Schema(description = "EquipmentMaintenance对象")
+@EqualsAndHashCode(callSuper = true)
+public class EquipmentMaintenanceEntity extends BaseEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 岗位处理ID
+ */
+ @Schema(description = "岗位处理ID")
+ private Long phId;
+ /**
+ * 设备ID
+ */
+ @Schema(description = "设备ID")
+ private Long equipmentId;
+ /**
+ * 设备有效期
+ */
+ @Schema(description = "设备有效期")
+ private Integer equipmentValidityPeriod;
+ /**
+ * 设备日期
+ */
+ @Schema(description = "设备日期")
+ private Date equipmentDate;
+ /**
+ * 维护状态(1正常,2到期,3离职)
+ */
+ @Schema(description = "维护状态(1正常,2到期,3离职)")
+ private Short maintenanceStatus;
+
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/PostHandleEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/PostHandleEntity.java
new file mode 100644
index 00000000..3f7a2a59
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/PostHandleEntity.java
@@ -0,0 +1,145 @@
+package org.springblade.desk.jobTransfer.pojo.entity;
+
+import lombok.Data;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.util.Date;
+
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+import java.io.Serial;
+
+/**
+ * 岗位处理 实体类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Data
+@TableName("MES_POST_HANDLE")
+@Schema(description = "PostHandle对象")
+@EqualsAndHashCode(callSuper = true)
+public class PostHandleEntity extends BaseEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 用户ID
+ */
+ @Schema(description = "用户ID")
+ private Long userId;
+ /**
+ * 名称
+ */
+ @Schema(description = "名称")
+ private String name;
+ /**
+ * 民族
+ */
+ @Schema(description = "民族")
+ private String nation;
+ /**
+ * 年龄
+ */
+ @Schema(description = "年龄")
+ private Short age;
+ /**
+ * 身份证号码
+ */
+ @Schema(description = "身份证号码")
+ private String idCard;
+ /**
+ * 籍贯
+ */
+ @Schema(description = "籍贯")
+ private String nativePlace;
+ /**
+ * 班组ID
+ */
+ @Schema(description = "班组ID")
+ private Long deptId;
+ /**
+ * 所属岗位
+ */
+ @Schema(description = "所属岗位")
+ private String station;
+ /**
+ * 出生日期
+ */
+ @Schema(description = "出生日期")
+ private Date dataBirth;
+ /**
+ * 政治面貌
+ */
+ @Schema(description = "政治面貌")
+ private String face;
+ /**
+ * 婚姻状态(0未婚,1已婚)
+ */
+ @Schema(description = "婚姻状态(0未婚,1已婚)")
+ private String marriage;
+ /**
+ * 毕业院校
+ */
+ @Schema(description = "毕业院校")
+ private String school;
+ /**
+ * 所学专业
+ */
+ @Schema(description = "所学专业")
+ private String major;
+ /**
+ * 最高学历
+ */
+ @Schema(description = "最高学历")
+ private String education;
+ /**
+ * 毕业时间
+ */
+ @Schema(description = "毕业时间")
+ private Date endDate;
+ /**
+ * 用工类型
+ */
+ @Schema(description = "用工类型(1实习工,2正式工)")
+ private Short staffType;
+ /**
+ * 参加工作时间
+ */
+ @Schema(description = "参加工作时间")
+ private Date joinJobDate;
+ /**
+ * 技能等级
+ */
+ @Schema(description = "技能等级")
+ private Short skill;
+ /**
+ * 任现职时间
+ */
+ @Schema(description = "任现职时间")
+ private Date inJobDate;
+ /**
+ * 合同到期
+ */
+ @Schema(description = "合同到期")
+ private Date conExpDate;
+ /**
+ * 家庭住址
+ */
+ @Schema(description = "家庭住址")
+ private String address;
+ /**
+ * 转岗时间
+ */
+ @Schema(description = "转岗时间")
+ private Date toNewJob;
+ /**
+ * 1实习-培训中,2转岗中,3正常,4下岗中,5离职,6转岗培训合格,7下岗培训合格,8实习培训合格,9培训不合格
+ */
+ @Schema(description = "1实习-培训中,2转岗中,3正常,4下岗中,5离职,6转岗培训合格,7下岗培训合格,8实习培训合格,9培训不合格")
+ private Short phStatus;
+
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/TrainingPlanEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/TrainingPlanEntity.java
new file mode 100644
index 00000000..1dec4736
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/entity/TrainingPlanEntity.java
@@ -0,0 +1,62 @@
+package org.springblade.desk.jobTransfer.pojo.entity;
+
+import lombok.Data;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+import java.io.Serial;
+
+/**
+ * 培训计划模板 实体类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Data
+@TableName("MES_TRAINING_PLAN")
+@Schema(description = "TrainingPlan对象")
+@EqualsAndHashCode(callSuper = true)
+public class TrainingPlanEntity extends BaseEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 培训计划名称
+ */
+ @Schema(description = "培训计划名称")
+ private String name;
+ /**
+ * 培训周期(天)
+ */
+ @Schema(description = "培训周期(天)")
+ private Integer cycle;
+ /**
+ * 培训师ID
+ */
+ @Schema(description = "培训师ID")
+ private Long teacherId;
+ /**
+ * 培训师名称
+ */
+ @Schema(description = "培训师名称")
+ private String teacherName;
+ /**
+ * 预警周期(天)
+ */
+ @Schema(description = "预警周期(天)")
+ private Integer earlyWarningDay;
+ /**
+ * 备注
+ */
+ @Schema(description = "备注")
+ private String memo;
+ /**
+ * 附件链接
+ */
+ @Schema(description = "附件链接")
+ private String attachLink;
+
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/CultivateStatusEnum.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/CultivateStatusEnum.java
new file mode 100644
index 00000000..a1abb2e4
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/CultivateStatusEnum.java
@@ -0,0 +1,61 @@
+package org.springblade.desk.jobTransfer.pojo.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.tool.utils.StringPool;
+
+import java.util.Arrays;
+
+/**
+ * 培训类型枚举
+ *
+ * @author qyl
+ * @date 2026-01-12
+ */
+@Getter
+@AllArgsConstructor
+public enum CultivateStatusEnum {
+ EMPTY(StringPool.EMPTY, -1),
+
+ /**
+ * 状态枚举
+ */
+ PRACTICE("实习", 1),
+ JOB_TRANSFER("转岗", 2),
+ LAYOFF("下岗", 3),
+ ;
+ final String name;
+ final Integer code;
+
+ /**
+ * 匹配枚举值
+ *
+ * @param name 名称
+ * @return
+ */
+ public static CultivateStatusEnum of(String name) {
+ return Arrays.stream(CultivateStatusEnum.values())
+ .filter(enumItem -> enumItem.getName().equalsIgnoreCase(name != null ? name : ""))
+ .findFirst()
+ // 在没有找到匹配项时返回默认值
+ .orElse(CultivateStatusEnum.EMPTY);
+ }
+
+ /**
+ * 根据值获取名称
+ *
+ * @param code
+ * @return
+ */
+ public static String getName(Integer code) {
+ if (code == null) {
+ return StringPool.EMPTY; // 或者返回一个默认值,如 "UNKNOWN"
+ }
+ CultivateStatusEnum item = Arrays.stream(CultivateStatusEnum.values())
+ .filter(enumItem -> enumItem.getCode() == code)
+ .findFirst()
+ .orElse(null);
+ return ObjectUtil.isEmpty(item) ? StringPool.EMPTY : item.getName();
+ }
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/MaintenanceStatusEnum.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/MaintenanceStatusEnum.java
new file mode 100644
index 00000000..259c07cc
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/MaintenanceStatusEnum.java
@@ -0,0 +1,61 @@
+package org.springblade.desk.jobTransfer.pojo.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.tool.utils.StringPool;
+
+import java.util.Arrays;
+
+/**
+ * 证书维护状态枚举
+ *
+ * @author qyl
+ * @date 2026-01-12
+ */
+@Getter
+@AllArgsConstructor
+public enum MaintenanceStatusEnum {
+ EMPTY(StringPool.EMPTY, -1),
+
+ /**
+ * 状态枚举
+ */
+ NORMAL("正常", 1),
+ DUE("到期", 2),
+ DEPART("离职", 3),
+ ;
+ final String name;
+ final Integer code;
+
+ /**
+ * 匹配枚举值
+ *
+ * @param name 名称
+ * @return
+ */
+ public static MaintenanceStatusEnum of(String name) {
+ return Arrays.stream(MaintenanceStatusEnum.values())
+ .filter(enumItem -> enumItem.getName().equalsIgnoreCase(name != null ? name : ""))
+ .findFirst()
+ // 在没有找到匹配项时返回默认值
+ .orElse(MaintenanceStatusEnum.EMPTY);
+ }
+
+ /**
+ * 根据值获取名称
+ *
+ * @param code
+ * @return
+ */
+ public static String getName(Integer code) {
+ if (code == null) {
+ return StringPool.EMPTY; // 或者返回一个默认值,如 "UNKNOWN"
+ }
+ MaintenanceStatusEnum item = Arrays.stream(MaintenanceStatusEnum.values())
+ .filter(enumItem -> enumItem.getCode() == code)
+ .findFirst()
+ .orElse(null);
+ return ObjectUtil.isEmpty(item) ? StringPool.EMPTY : item.getName();
+ }
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/MarriageEnum.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/MarriageEnum.java
new file mode 100644
index 00000000..0a5eba2b
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/MarriageEnum.java
@@ -0,0 +1,57 @@
+package org.springblade.desk.jobTransfer.pojo.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.tool.utils.StringPool;
+
+import java.util.Arrays;
+
+/**
+ * 婚姻枚举
+ *
+ * @author qyl
+ * @date 2026-01-09
+ */
+@Getter
+@AllArgsConstructor
+public enum MarriageEnum {
+ EMPTY(StringPool.EMPTY, ""),
+
+ /**
+ * 状态枚举
+ */
+ MARRIED("已婚", "1"),
+ SPINSTERHOOD("未婚", "0"),
+ ;
+ final String name;
+ final String code;
+
+ /**
+ * 匹配枚举值
+ *
+ * @param name 名称
+ * @return
+ */
+ public static MarriageEnum of(String name) {
+ return Arrays.stream(MarriageEnum.values())
+ .filter(enumItem -> enumItem.getName().equalsIgnoreCase(name != null ? name : ""))
+ .findFirst()
+ // 在没有找到匹配项时返回默认值
+ .orElse(MarriageEnum.EMPTY);
+ }
+
+ /**
+ * 根据值获取名称
+ *
+ * @param code
+ * @return
+ */
+ public static String getName(String code) {
+ MarriageEnum item = Arrays.stream(MarriageEnum.values())
+ .filter(enumItem -> enumItem.getCode().equalsIgnoreCase(code))
+ .findFirst()
+ .orElse(null);
+ return ObjectUtil.isEmpty(item) ? StringPool.EMPTY : item.getName();
+ }
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/PostHandleStatusEnum.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/PostHandleStatusEnum.java
new file mode 100644
index 00000000..4ba3b663
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/PostHandleStatusEnum.java
@@ -0,0 +1,67 @@
+package org.springblade.desk.jobTransfer.pojo.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.tool.utils.StringPool;
+
+import java.util.Arrays;
+
+/**
+ * 人员岗位管理状态枚举
+ *
+ * @author qyl
+ * @date 2026-01-09
+ */
+@Getter
+@AllArgsConstructor
+public enum PostHandleStatusEnum {
+ EMPTY(StringPool.EMPTY, -1),
+
+ /**
+ * 状态枚举
+ */
+ IN_PRACTICE("实习中", 1),
+ JOB_TRANSFER("转岗中", 2),
+ NORMALITY("正常", 3),
+ LAID_OFF("下岗中", 4),
+ DEPART("离职", 5),
+ JOB_TRANSFER_TRAINED("转岗培训合格", 6),
+ LAID_OFF_TRAINED("下岗培训合格", 7),
+ IN_PRACTICE_TRAINED("实习培训合格", 8),
+ UNQUALIFIED("培训不合格", 9),
+ ;
+ final String name;
+ final Integer code;
+
+ /**
+ * 匹配枚举值
+ *
+ * @param name 名称
+ * @return
+ */
+ public static PostHandleStatusEnum of(String name) {
+ return Arrays.stream(PostHandleStatusEnum.values())
+ .filter(enumItem -> enumItem.getName().equalsIgnoreCase(name != null ? name : ""))
+ .findFirst()
+ // 在没有找到匹配项时返回默认值
+ .orElse(PostHandleStatusEnum.EMPTY);
+ }
+
+ /**
+ * 根据值获取名称
+ *
+ * @param code
+ * @return
+ */
+ public static String getName(Integer code) {
+ if (code == null) {
+ return StringPool.EMPTY; // 或者返回一个默认值,如 "UNKNOWN"
+ }
+ PostHandleStatusEnum item = Arrays.stream(PostHandleStatusEnum.values())
+ .filter(enumItem -> enumItem.getCode() == code)
+ .findFirst()
+ .orElse(null);
+ return ObjectUtil.isEmpty(item) ? StringPool.EMPTY : item.getName();
+ }
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/SkillEnum.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/SkillEnum.java
new file mode 100644
index 00000000..5f9dcb02
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/SkillEnum.java
@@ -0,0 +1,61 @@
+package org.springblade.desk.jobTransfer.pojo.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.tool.utils.StringPool;
+
+import java.util.Arrays;
+
+/**
+ * 技能等级枚举
+ *
+ * @author qyl
+ * @date 2026-01-09
+ */
+@Getter
+@AllArgsConstructor
+public enum SkillEnum {
+ EMPTY(StringPool.EMPTY, -1),
+
+ /**
+ * 状态枚举
+ */
+ MIDDLE_RANK("中级", 1),
+ SENIOR("高级", 2),
+ ARTIFICER("技师", 3),
+ ;
+ final String name;
+ final Integer code;
+
+ /**
+ * 匹配枚举值
+ *
+ * @param name 名称
+ * @return
+ */
+ public static SkillEnum of(String name) {
+ return Arrays.stream(SkillEnum.values())
+ .filter(enumItem -> enumItem.getName().equalsIgnoreCase(name != null ? name : ""))
+ .findFirst()
+ // 在没有找到匹配项时返回默认值
+ .orElse(SkillEnum.EMPTY);
+ }
+
+ /**
+ * 根据值获取名称
+ *
+ * @param code
+ * @return
+ */
+ public static String getName(Integer code) {
+ if (code == null) {
+ return StringPool.EMPTY; // 或者返回一个默认值,如 "UNKNOWN"
+ }
+ SkillEnum item = Arrays.stream(SkillEnum.values())
+ .filter(enumItem -> enumItem.getCode() == code)
+ .findFirst()
+ .orElse(null);
+ return ObjectUtil.isEmpty(item) ? StringPool.EMPTY : item.getName();
+ }
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/StaffTypeEnum.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/StaffTypeEnum.java
new file mode 100644
index 00000000..9f64feef
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/StaffTypeEnum.java
@@ -0,0 +1,60 @@
+package org.springblade.desk.jobTransfer.pojo.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.tool.utils.StringPool;
+
+import java.util.Arrays;
+
+/**
+ * 用工类型枚举
+ *
+ * @author qyl
+ * @date 2026-01-09
+ */
+@Getter
+@AllArgsConstructor
+public enum StaffTypeEnum {
+ EMPTY(StringPool.EMPTY, -1),
+
+ /**
+ * 状态枚举
+ */
+ FIELD_WORK("实习工", 1),
+ FORMAL("正式工", 2),
+ ;
+ final String name;
+ final Integer code;
+
+ /**
+ * 匹配枚举值
+ *
+ * @param name 名称
+ * @return
+ */
+ public static StaffTypeEnum of(String name) {
+ return Arrays.stream(StaffTypeEnum.values())
+ .filter(enumItem -> enumItem.getName().equalsIgnoreCase(name != null ? name : ""))
+ .findFirst()
+ // 在没有找到匹配项时返回默认值
+ .orElse(StaffTypeEnum.EMPTY);
+ }
+
+ /**
+ * 根据值获取名称
+ *
+ * @param code
+ * @return
+ */
+ public static String getName(Integer code) {
+ if (code == null) {
+ return StringPool.EMPTY; // 或者返回一个默认值,如 "UNKNOWN"
+ }
+ StaffTypeEnum item = Arrays.stream(StaffTypeEnum.values())
+ .filter(enumItem -> enumItem.getCode() == code)
+ .findFirst()
+ .orElse(null);
+ return ObjectUtil.isEmpty(item) ? StringPool.EMPTY : item.getName();
+ }
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/TrainingStatusEnum.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/TrainingStatusEnum.java
new file mode 100644
index 00000000..ae79787f
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/TrainingStatusEnum.java
@@ -0,0 +1,64 @@
+package org.springblade.desk.jobTransfer.pojo.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.tool.utils.StringPool;
+
+import java.util.Arrays;
+
+/**
+ * 培训状态枚举
+ *
+ * @author qyl
+ * @date 2026-01-09
+ */
+@Getter
+@AllArgsConstructor
+public enum TrainingStatusEnum {
+ EMPTY(StringPool.EMPTY, -1),
+
+ /**
+ * 状态枚举
+ */
+ NOT_CONFIGURED("未配置", 1),
+ WAIT_DISTRIBUTE("等待下发", 2),
+ ISSUED("已下发-培训中", 3),
+ EXPIRED("已到期", 4),
+ TRAINED("已培训-待确认", 5),
+ OK_TRAINED("培训完成", 6),
+ ;
+ final String name;
+ final Integer code;
+
+ /**
+ * 匹配枚举值
+ *
+ * @param name 名称
+ * @return
+ */
+ public static TrainingStatusEnum of(String name) {
+ return Arrays.stream(TrainingStatusEnum.values())
+ .filter(enumItem -> enumItem.getName().equalsIgnoreCase(name != null ? name : ""))
+ .findFirst()
+ // 在没有找到匹配项时返回默认值
+ .orElse(TrainingStatusEnum.EMPTY);
+ }
+
+ /**
+ * 根据值获取名称
+ *
+ * @param code
+ * @return
+ */
+ public static String getName(Integer code) {
+ if (code == null) {
+ return StringPool.EMPTY; // 或者返回一个默认值,如 "UNKNOWN"
+ }
+ TrainingStatusEnum item = Arrays.stream(TrainingStatusEnum.values())
+ .filter(enumItem -> enumItem.getCode() == code)
+ .findFirst()
+ .orElse(null);
+ return ObjectUtil.isEmpty(item) ? StringPool.EMPTY : item.getName();
+ }
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/CertificateMaintenanceExcel.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/CertificateMaintenanceExcel.java
new file mode 100644
index 00000000..50c40010
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/CertificateMaintenanceExcel.java
@@ -0,0 +1,76 @@
+package org.springblade.desk.jobTransfer.pojo.excel;
+
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+
+import java.io.Serializable;
+import java.io.Serial;
+
+
+/**
+ * 证书维护 Excel实体类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class CertificateMaintenanceExcel implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 岗位处理ID
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("岗位处理ID")
+ private Long phId;
+ /**
+ * 证书类型ID
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("证书类型ID")
+ private Long certificateId;
+ /**
+ * 证书编号
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("证书编号")
+ private String certificateCode;
+ /**
+ * 证书日期
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("证书日期")
+ private Date certificateDate;
+ /**
+ * 适航日期
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("适航日期")
+ private Date airworthinessDate;
+ /**
+ * 宇航日期
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("宇航日期")
+ private Date astronautDate;
+ /**
+ * 维护状态(1正常,2到期,3离职)
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("维护状态(1正常,2到期,3离职)")
+ private Short maintenanceStatus;
+
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/CertificateTypeExcel.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/CertificateTypeExcel.java
new file mode 100644
index 00000000..bd5a9703
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/CertificateTypeExcel.java
@@ -0,0 +1,58 @@
+package org.springblade.desk.jobTransfer.pojo.excel;
+
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+
+import java.io.Serializable;
+import java.io.Serial;
+
+
+/**
+ * 证书类型 Excel实体类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class CertificateTypeExcel implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 证书名称
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("证书名称")
+ private String name;
+ /**
+ * 证书有效期
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("证书有效期")
+ private Short validityPeriod;
+ /**
+ * 适航有效期
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("适航有效期")
+ private Short airworthinessValidityPeriod;
+ /**
+ * 宇航有效期
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("宇航有效期")
+ private Short astronautValidityPeriod;
+
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/CultivateDetailExcel.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/CultivateDetailExcel.java
new file mode 100644
index 00000000..fd5fd1dd
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/CultivateDetailExcel.java
@@ -0,0 +1,82 @@
+package org.springblade.desk.jobTransfer.pojo.excel;
+
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+
+import java.io.Serializable;
+import java.io.Serial;
+
+
+/**
+ * 培训安排 Excel实体类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class CultivateDetailExcel implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 岗位处理ID
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("岗位处理ID")
+ private Long phId;
+ /**
+ * 培训类型(1实习,2转岗,3下岗)
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("培训类型(1实习,2转岗,3下岗)")
+ private Short type;
+ /**
+ * 培训模板ID
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("培训模板ID")
+ private Long planId;
+ /**
+ * 培训师ID
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("培训师ID")
+ private Long teacherId;
+ /**
+ * 培训师
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("培训师")
+ private String teacherName;
+ /**
+ * 培训状态(1未配置,2等待下发,3已下发-培训中,4已到期,5已培训-待确认,6培训完成)
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("培训状态(1未配置,2等待下发,3已下发-培训中,4已到期,5已培训-待确认,6培训完成)")
+ private Short caStatus;
+ /**
+ * 下发时间
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("下发时间")
+ private Date distributeTime;
+ /**
+ * 附件链接
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("附件链接")
+ private String attachLink;
+
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/EquipmentMaintenanceExcel.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/EquipmentMaintenanceExcel.java
new file mode 100644
index 00000000..cf14166c
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/EquipmentMaintenanceExcel.java
@@ -0,0 +1,64 @@
+package org.springblade.desk.jobTransfer.pojo.excel;
+
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+
+import java.io.Serializable;
+import java.io.Serial;
+
+
+/**
+ * 岗位设备维护 Excel实体类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class EquipmentMaintenanceExcel implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 岗位处理ID
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("岗位处理ID")
+ private Long phId;
+ /**
+ * 设备ID
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("设备ID")
+ private Long equipmentId;
+ /**
+ * 设备有效期
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("设备有效期")
+ private Integer equipmentValidityPeriod;
+ /**
+ * 设备日期
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("设备日期")
+ private Date equipmentDate;
+ /**
+ * 维护状态(1正常,2到期,3离职)
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("维护状态(1正常,2到期,3离职)")
+ private Short maintenanceStatus;
+
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/PostHandleExcel.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/PostHandleExcel.java
new file mode 100644
index 00000000..f022c9fc
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/PostHandleExcel.java
@@ -0,0 +1,172 @@
+package org.springblade.desk.jobTransfer.pojo.excel;
+
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+
+import java.io.Serializable;
+import java.io.Serial;
+
+
+/**
+ * 岗位处理 Excel实体类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class PostHandleExcel implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 用户ID
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("用户ID")
+ private Long userId;
+ /**
+ * 名称
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("名称")
+ private String name;
+ /**
+ * 民族
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("民族")
+ private String nation;
+ /**
+ * 年龄
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("年龄")
+ private Short age;
+ /**
+ * 身份证号码
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("身份证号码")
+ private String idCard;
+ /**
+ * 籍贯
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("籍贯")
+ private String nativePlace;
+ /**
+ * 班组ID
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("班组ID")
+ private Long deptId;
+ /**
+ * 所属岗位
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("所属岗位")
+ private String station;
+ /**
+ * 出生日期
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("出生日期")
+ private Date dataBirth;
+ /**
+ * 政治面貌
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("政治面貌")
+ private String face;
+ /**
+ * 婚姻状态(0未婚,1已婚)
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("婚姻状态(0未婚,1已婚)")
+ private String marriage;
+ /**
+ * 毕业院校
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("毕业院校")
+ private String school;
+ /**
+ * 所学专业
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("所学专业")
+ private String major;
+ /**
+ * 最高学历
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("最高学历")
+ private String education;
+ /**
+ * 毕业时间
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("毕业时间")
+ private Date endDate;
+ /**
+ * 用工类型
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("用工类型")
+ private Short staffType;
+ /**
+ * 参加工作时间
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("参加工作时间")
+ private Date joinJobDate;
+ /**
+ * 技能等级
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("技能等级")
+ private Short skill;
+ /**
+ * 任现职时间
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("任现职时间")
+ private Date inJobDate;
+ /**
+ * 合同到期
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("合同到期")
+ private Date conExpDate;
+ /**
+ * 家庭住址
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("家庭住址")
+ private String address;
+ /**
+ * 转岗时间
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("转岗时间")
+ private Date toNewJob;
+ /**
+ * 1实习-培训中,2转岗中,3正常,4下岗中,5离职,6培训合格,7培训不合格
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("1实习-培训中,2转岗中,3正常,4下岗中,5离职,6培训合格,7培训不合格")
+ private Short phStatus;
+
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/PostHandleImport.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/PostHandleImport.java
new file mode 100644
index 00000000..f8234e17
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/PostHandleImport.java
@@ -0,0 +1,130 @@
+package org.springblade.desk.jobTransfer.pojo.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.format.DateTimeFormat;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+import java.io.Serial;
+import java.util.Date;
+
+/**
+ * 岗位处理导入
+ *
+ * @author qyl
+ * @since 2026-01-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PostHandleImport extends BaseEntity {
+
+ /**
+ * 用户code
+ */
+ @ExcelProperty(index = 0)
+ private String code;
+ /**
+ * 名称
+ */
+ @ExcelProperty(index = 1)
+ private String name;
+ /**
+ * 民族
+ */
+ @ExcelProperty(index = 2)
+ private String nation;
+ /**
+ * 年龄
+ */
+ @ExcelProperty(index = 3)
+ private Short age;
+ /**
+ * 身份证号码
+ */
+ @ExcelProperty(index = 4)
+ private String idCard;
+ /**
+ * 籍贯
+ */
+ @ExcelProperty(index = 5)
+ private String nativePlace;
+
+ /**
+ * 所属岗位
+ */
+ @ExcelProperty(index = 6)
+ private String station;
+ /**
+ * 出生日期
+ */
+ @ExcelProperty(index = 7)
+ @DateTimeFormat("yyyy/MM/dd")
+ private Date dataBirth;
+ /**
+ * 政治面貌
+ */
+ @ExcelProperty(index = 8)
+ private String face;
+ /**
+ * 婚姻状态(0未婚,1已婚)
+ */
+ @ExcelProperty(index = 9)
+ private String marriageName;
+ /**
+ * 毕业院校
+ */
+ @ExcelProperty(index = 10)
+ private String school;
+ /**
+ * 所学专业
+ */
+ @ExcelProperty(index = 11)
+ private String major;
+ /**
+ * 最高学历
+ */
+ @ExcelProperty(index = 12)
+ private String education;
+ /**
+ * 毕业时间
+ */
+ @ExcelProperty(index = 13)
+ @DateTimeFormat("yyyy/MM/dd")
+ private Date endDate;
+ /**
+ * 用工类型
+ */
+ @ExcelProperty(index = 14)
+ private String staffTypeName;
+ /**
+ * 参加工作时间
+ */
+ @ExcelProperty(index = 15)
+ @DateTimeFormat("yyyy/MM/dd")
+ private Date joinJobDate;
+ /**
+ * 技能等级
+ */
+ @ExcelProperty(index = 16)
+ private String skillName;
+ /**
+ * 任现职时间
+ */
+ @ExcelProperty(index = 17)
+ @DateTimeFormat("yyyy/MM/dd")
+ private Date inJobDate;
+ /**
+ * 合同到期
+ */
+ @ExcelProperty(index = 18)
+ @DateTimeFormat("yyyy/MM/dd")
+ private Date conExpDate;
+ /**
+ * 家庭住址
+ */
+ @ExcelProperty(index = 19)
+ private String address;
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/TrainingPlanExcel.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/TrainingPlanExcel.java
new file mode 100644
index 00000000..97732d25
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/TrainingPlanExcel.java
@@ -0,0 +1,76 @@
+package org.springblade.desk.jobTransfer.pojo.excel;
+
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+
+import java.io.Serializable;
+import java.io.Serial;
+
+
+/**
+ * 培训计划模板 Excel实体类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class TrainingPlanExcel implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 培训计划名称
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("培训计划名称")
+ private String name;
+ /**
+ * 培训周期(天)
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("培训周期(天)")
+ private Integer cycle;
+ /**
+ * 培训师ID
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("培训师ID")
+ private Long teacherId;
+ /**
+ * 培训师名称
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("培训师名称")
+ private String teacherName;
+ /**
+ * 预警周期(天)
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("预警周期(天)")
+ private Integer earlyWarningDay;
+ /**
+ * 备注
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("备注")
+ private String memo;
+ /**
+ * 附件链接
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("附件链接")
+ private String attachLink;
+
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/request/CertificateLedgerQuery.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/request/CertificateLedgerQuery.java
new file mode 100644
index 00000000..8f81505a
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/request/CertificateLedgerQuery.java
@@ -0,0 +1,47 @@
+package org.springblade.desk.jobTransfer.pojo.request;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * 岗位证书管理检索请求入参
+ */
+@Data
+public class CertificateLedgerQuery {
+ /**
+ * 姓名
+ */
+ @Schema(description = "姓名")
+ private String name;
+ /**
+ * 所属班组
+ */
+ @Schema(description = "所属班组")
+ private Long deptId;
+
+ /**
+ * 所属岗位
+ */
+ @Schema(description = "所属岗位")
+ private String station;
+ /**
+ * 技能等级
+ */
+ @Schema(description = "技能等级")
+ private Short skill;
+ /**
+ * 证书类型
+ */
+ @Schema(description = "证书类型")
+ private Long certificateId;
+ /**
+ * 证书编号
+ */
+ @Schema(description = "证书编号")
+ private String certificateCode;
+ /**
+ * 维护状态(1正常,2到期,3离职)
+ */
+ @Schema(description = "维护状态(1正常,2到期,3离职)")
+ private Short maintenanceStatus;
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/request/CultivateDetailQuery.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/request/CultivateDetailQuery.java
new file mode 100644
index 00000000..19fb4664
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/request/CultivateDetailQuery.java
@@ -0,0 +1,81 @@
+package org.springblade.desk.jobTransfer.pojo.request;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springblade.core.mp.base.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 培训安排分页检索 实体类
+ *
+ * @author qyl
+ * @since 2026-01-09
+ */
+@Data
+public class CultivateDetailQuery extends BaseEntity {
+
+ /**
+ * 姓名
+ */
+ @Schema(description = "姓名")
+ private String name;
+ /**
+ * 工号
+ */
+ @Schema(description = "工号")
+ private String code;
+ /**
+ * 用工类型
+ */
+ @Schema(description = "用工类型(1实习工,2正式工)")
+ private Short staffType;
+ /**
+ * 培训类型(1实习,2转岗,3下岗)
+ */
+ @Schema(description = "培训类型(1实习,2转岗,3下岗)")
+ private Short type;
+ /**
+ * 培训模板ID
+ */
+ @Schema(description = "培训模板ID")
+ private Long planId;
+ /**
+ * 培训师ID
+ */
+ @Schema(description = "培训师ID")
+ private Long teacherId;
+ /**
+ * 培训状态(1未配置,2等待下发,3已下发-培训中,4已到期,5已培训-待确认,6培训完成)
+ */
+ @Schema(description = "培训状态(1未配置,2等待下发,3已下发-培训中,4已到期,5已培训-待确认,6培训完成)")
+ private Short caStatus;
+ /**
+ * 下发时间
+ */
+ @Schema(description = "下发时间")
+ private Date distributeTime;
+
+ /**
+ * 培训周期(天)
+ */
+ @Schema(description = "培训周期(天)")
+ private Integer cycle;
+ /**
+ * 预警周期(天)
+ */
+ @Schema(description = "预警周期(天)")
+ private Integer earlyWarningDay;
+
+ /**
+ * 开始时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private Date startTime;
+ /**
+ * 结束时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private Date endTime;
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/request/EquipmentMaintenanceQuery.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/request/EquipmentMaintenanceQuery.java
new file mode 100644
index 00000000..1a6e9b01
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/request/EquipmentMaintenanceQuery.java
@@ -0,0 +1,42 @@
+package org.springblade.desk.jobTransfer.pojo.request;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * 设备维护管理检索请求入参
+ */
+@Data
+public class EquipmentMaintenanceQuery {
+ /**
+ * 姓名
+ */
+ @Schema(description = "姓名")
+ private String name;
+ /**
+ * 所属班组
+ */
+ @Schema(description = "所属班组")
+ private Long deptId;
+
+ /**
+ * 所属岗位
+ */
+ @Schema(description = "所属岗位")
+ private String station;
+ /**
+ * 技能等级
+ */
+ @Schema(description = "技能等级")
+ private Short skill;
+ /**
+ * 证书类型
+ */
+ @Schema(description = "设备ID")
+ private Long equipmentId;
+ /**
+ * 维护状态(1正常,2到期,3离职)
+ */
+ @Schema(description = "维护状态(1正常,2到期,3离职)")
+ private Short maintenanceStatus;
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/request/PostHandleQuery.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/request/PostHandleQuery.java
new file mode 100644
index 00000000..2354f055
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/request/PostHandleQuery.java
@@ -0,0 +1,60 @@
+package org.springblade.desk.jobTransfer.pojo.request;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 人员岗位管理检索请求入参
+ */
+@Data
+public class PostHandleQuery {
+
+ /**
+ * 所属班组
+ */
+ @Schema(description = "所属班组")
+ private Long deptId;
+ /**
+ * 工号
+ */
+ @Schema(description = "工号")
+ private String userCode;
+ /**
+ * 姓名
+ */
+ @Schema(description = "姓名")
+ private String name;
+ /**
+ * 所属岗位
+ */
+ @Schema(description = "所属岗位")
+ private String station;
+ /**
+ * 技能等级
+ */
+ @Schema(description = "技能等级")
+ private Short skill;
+ /**
+ * 状态
+ */
+ @Schema(description = "状态")
+ private Integer phStatus;
+ /**
+ * 入职时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private Date inJobDate;
+ /**
+ * 合同到期日期
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private Date conExpDate;
+
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CertificateLedgerVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CertificateLedgerVO.java
new file mode 100644
index 00000000..e236d254
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CertificateLedgerVO.java
@@ -0,0 +1,21 @@
+package org.springblade.desk.jobTransfer.pojo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 岗位证书台账VO
+ */
+@Data
+public class CertificateLedgerVO {
+
+ //人员岗位数据
+ @Schema(description = "人员岗位数据")
+ private PostHandleVO postHandleVO;
+
+ //岗位证书数据集合
+ @Schema(description = "岗位证书数据集合")
+ private List certificateMaintenanceVOList;
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CertificateMaintenanceVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CertificateMaintenanceVO.java
new file mode 100644
index 00000000..7d2ba0fe
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CertificateMaintenanceVO.java
@@ -0,0 +1,111 @@
+package org.springblade.desk.jobTransfer.pojo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.springblade.desk.jobTransfer.pojo.entity.CertificateMaintenanceEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.desk.jobTransfer.pojo.enums.MaintenanceStatusEnum;
+
+import java.io.Serial;
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * 证书维护 视图实体类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CertificateMaintenanceVO extends CertificateMaintenanceEntity {
+ @Serial
+ private static final long serialVersionUID = 1L;
+ /**
+ * 证书名称
+ */
+ @Schema(description = "证书名称")
+ private String CertificateTypeName;
+ /**
+ * 证书有效期
+ */
+ @Schema(description = "证书有效期")
+ private Short validityPeriod;
+ /**
+ * 适航有效期
+ */
+ @Schema(description = "适航有效期")
+ private Short airworthinessValidityPeriod;
+ /**
+ * 宇航有效期
+ */
+ @Schema(description = "宇航有效期")
+ private Short astronautValidityPeriod;
+
+ // 适航到期日期
+ public Date getAirworthinessDateExpire() {
+ if (this.getAirworthinessDate() != null && this.airworthinessValidityPeriod != null) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(this.getAirworthinessDate());
+ cal.add(Calendar.YEAR, Integer.valueOf(this.airworthinessValidityPeriod.toString()));
+ //得到结算后的结果 yyyy-MM-dd HH:mm
+ Date date = cal.getTime();
+ cal.setTime(date);
+ return cal.getTime();
+ } else {
+ return null;
+ }
+
+ }
+
+ // 宇航到期日期
+ public Date getAstronautDateExpire() {
+ if (this.getAstronautDate() != null && this.astronautValidityPeriod != null) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(this.getAstronautDate());
+ cal.add(Calendar.YEAR, Integer.valueOf(this.astronautValidityPeriod.toString()));
+ //得到结算后的结果 yyyy-MM-dd HH:mm
+ Date date = cal.getTime();
+ cal.setTime(date);
+ return cal.getTime();
+ } else {
+ return null;
+ }
+ }
+
+ // 上岗证到期日期
+ public Date getValidityPeriodExpire() {
+ if (this.getCertificateDate() != null && this.validityPeriod != null) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(this.getCertificateDate());
+ cal.add(Calendar.YEAR, Integer.valueOf(this.validityPeriod.toString()));
+ //得到结算后的结果 yyyy-MM-dd HH:mm
+ Date date = cal.getTime();
+ cal.setTime(date);
+ return cal.getTime();
+ } else {
+ return null;
+ }
+ }
+
+ public String getMaintenanceStatusName() {
+ if (this.getMaintenanceStatus() == MaintenanceStatusEnum.DEPART.getCode().shortValue()) {
+ return MaintenanceStatusEnum.DEPART.getName();
+ }
+ Date date = new Date();
+ if (getAirworthinessDateExpire() != null && getAirworthinessDateExpire().getTime() < date.getTime()) {
+ setMaintenanceStatus(MaintenanceStatusEnum.DUE.getCode().shortValue());
+ return MaintenanceStatusEnum.DUE.getName();
+ }
+ if (getAstronautDateExpire() != null && getAstronautDateExpire().getTime() < date.getTime()) {
+ setMaintenanceStatus(MaintenanceStatusEnum.DUE.getCode().shortValue());
+ return MaintenanceStatusEnum.DUE.getName();
+ }
+ if (getValidityPeriodExpire() != null && getValidityPeriodExpire().getTime() < date.getTime()) {
+ setMaintenanceStatus(MaintenanceStatusEnum.DUE.getCode().shortValue());
+ return MaintenanceStatusEnum.DUE.getName();
+ }
+ setMaintenanceStatus(MaintenanceStatusEnum.NORMAL.getCode().shortValue());
+ return MaintenanceStatusEnum.NORMAL.getName();
+ }
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CertificateTypeVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CertificateTypeVO.java
new file mode 100644
index 00000000..ba85252d
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CertificateTypeVO.java
@@ -0,0 +1,21 @@
+package org.springblade.desk.jobTransfer.pojo.vo;
+
+import org.springblade.desk.jobTransfer.pojo.entity.CertificateTypeEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 证书类型 视图实体类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CertificateTypeVO extends CertificateTypeEntity {
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CultivateDetailVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CultivateDetailVO.java
new file mode 100644
index 00000000..0c8e0dc8
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CultivateDetailVO.java
@@ -0,0 +1,62 @@
+package org.springblade.desk.jobTransfer.pojo.vo;
+
+import org.springblade.desk.jobTransfer.pojo.entity.CultivateDetailEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.desk.jobTransfer.pojo.enums.CultivateStatusEnum;
+import org.springblade.desk.jobTransfer.pojo.enums.StaffTypeEnum;
+import org.springblade.desk.jobTransfer.pojo.enums.TrainingStatusEnum;
+
+import java.io.Serial;
+
+/**
+ * 培训安排 视图实体类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CultivateDetailVO extends CultivateDetailEntity {
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ //姓名
+ private String name;
+
+ //用工号
+ private String code;
+
+ //用工类型名
+ private String staffTypeName;
+
+ //用工类型
+ private Short staffType;
+
+ //培训类型
+ private String typeName;
+
+ //培训周期(天)
+ private Integer cycle;
+
+ //预警周期(天)
+ private Integer earlyWarningDay;
+
+ //培训计划
+ private String planName;
+
+ //状态
+ private String caStatusName;
+
+ public String getCaStatusName() {
+ return TrainingStatusEnum.getName(null != this.getCaStatus() ? this.getCaStatus().intValue() : null);
+ }
+
+ public String getStaffTypeName() {
+ return StaffTypeEnum.getName(null != this.getStaffType() ? this.getStaffType().intValue() : null);
+ }
+
+ public String getTypeName() {
+ return CultivateStatusEnum.getName(null != this.getType() ? this.getType().intValue() : null);
+ }
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/EquipmentMaintenanceListVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/EquipmentMaintenanceListVO.java
new file mode 100644
index 00000000..2eda7eea
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/EquipmentMaintenanceListVO.java
@@ -0,0 +1,21 @@
+package org.springblade.desk.jobTransfer.pojo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 岗位证书台账VO
+ */
+@Data
+public class EquipmentMaintenanceListVO {
+
+ //人员岗位数据
+ @Schema(description = "人员岗位数据")
+ private PostHandleVO postHandleVO;
+
+ //设备维护数据集合
+ @Schema(description = "设备维护数据集合")
+ private List equipmentMaintenanceVOList;
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/EquipmentMaintenanceVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/EquipmentMaintenanceVO.java
new file mode 100644
index 00000000..2c09c1c8
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/EquipmentMaintenanceVO.java
@@ -0,0 +1,53 @@
+package org.springblade.desk.jobTransfer.pojo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.springblade.desk.jobTransfer.pojo.entity.EquipmentMaintenanceEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * 岗位设备维护 视图实体类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class EquipmentMaintenanceVO extends EquipmentMaintenanceEntity {
+ @Serial
+ private static final long serialVersionUID = 1L;
+ /**
+ * 设备名称
+ */
+ @Schema(description = "设备名称")
+ private String deviceName;
+ /**
+ * 设备编号
+ */
+ @Schema(description = "设备编号")
+ private String deviceCode;
+ /**
+ * 规格型号
+ */
+ @Schema(description = "规格型号")
+ private String macSpec;
+
+ // 到期日期
+ public Date getValidityPeriodExpire() {
+ if (this.getEquipmentDate() != null && this.getEquipmentValidityPeriod() != null) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(this.getEquipmentDate());
+ cal.add(Calendar.YEAR, Integer.valueOf(this.getEquipmentValidityPeriod().toString()));
+ //得到结算后的结果 yyyy-MM-dd HH:mm
+ Date date = cal.getTime();
+ cal.setTime(date);
+ return cal.getTime();
+ } else {
+ return null;
+ }
+ }
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/PostHandleVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/PostHandleVO.java
new file mode 100644
index 00000000..7716f321
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/PostHandleVO.java
@@ -0,0 +1,56 @@
+package org.springblade.desk.jobTransfer.pojo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.springblade.desk.jobTransfer.pojo.entity.PostHandleEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.desk.jobTransfer.pojo.enums.PostHandleStatusEnum;
+import org.springblade.desk.jobTransfer.pojo.enums.SkillEnum;
+import org.springblade.desk.jobTransfer.pojo.enums.StaffTypeEnum;
+import org.springblade.desk.jobTransfer.pojo.enums.TrainingStatusEnum;
+
+import java.io.Serial;
+
+/**
+ * 岗位处理 视图实体类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PostHandleVO extends PostHandleEntity {
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ //用户名
+ @Schema(description = "用户名")
+ private String userName;
+ //用户工号
+ @Schema(description = "用户工号")
+ private String userCode;
+ //班组名
+ @Schema(description = "班组名")
+ private String deptName;
+ //状态名
+ @Schema(description = "状态名")
+ private String phStatusName;
+ //用工类型名
+ @Schema(description = "用工类型名")
+ private String staffTypeName;
+ //技能等级名
+ @Schema(description = "技能等级名")
+ private String skillName;
+
+ public String getPhStatusName() {
+ return PostHandleStatusEnum.getName(null != this.getPhStatus() ? this.getPhStatus().intValue() : null);
+ }
+
+ public String getStaffTypeName() {
+ return StaffTypeEnum.getName(null != this.getStaffType() ? this.getStaffType().intValue() : null);
+ }
+
+ public String getSkillName() {
+ return SkillEnum.getName(null != this.getSkill() ? this.getSkill().intValue() : null);
+ }
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/TrainingPlanVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/TrainingPlanVO.java
new file mode 100644
index 00000000..03aaf9ca
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/TrainingPlanVO.java
@@ -0,0 +1,21 @@
+package org.springblade.desk.jobTransfer.pojo.vo;
+
+import org.springblade.desk.jobTransfer.pojo.entity.TrainingPlanEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 培训计划模板 视图实体类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TrainingPlanVO extends TrainingPlanEntity {
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/AssayContent.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/AssayContent.java
index f40fd302..2a2927fc 100644
--- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/AssayContent.java
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/AssayContent.java
@@ -60,4 +60,16 @@ public class AssayContent extends BaseEntity {
*/
@TableField(value = "SILVER_PLATE")
private BigDecimal silverPlate;
+
+ /**
+ * 是否被使用,默认0,已使用过此次化验申报添加量后,记录申报记录id,同时更新为1
+ */
+ @TableField(value = "IS_USED")
+ private Integer isUsed;
+
+ /**
+ * 申报记录id
+ */
+ @TableField(value = "APPLY_ID")
+ private Long applyId;
}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/MoldPlan.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/MoldPlan.java
index 9dd5d143..eafb15dc 100644
--- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/MoldPlan.java
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/MoldPlan.java
@@ -56,17 +56,27 @@ public class MoldPlan extends BaseEntity {
private String erpWoCode;
/**
- * 状态;1、新建,2、已下发,3、已完成
+ * 状态; 11001、新建,11002:已下发,11003、已完成
*/
@TableField(value = "MAF_STATUS")
- private Long mafStatus;
+ private Integer mafStatus;
/**
- * 计划类型名称
+ * 类型; 12001、热表,烧结,12002、仓库
*/
- @TableField(value = "PLAN_TYPE")
- private String planType;
+ @TableField(value = "MAF_TYPE")
+ private Integer mafType;
+ /**
+ * 计划类型; 13001:Z:制造(工装不为空且工装名称为压饼模),13002:D:夹具(工装不为空且工装名称为石墨模)
+ */
+ @TableField(value = "PLAN_TYPE_CODE")
+ private String planTypeCode;
+ /**
+ * 计划类型名称;14001:Z:制造(工装不为空且工装名称为压饼模),14002:D:夹具(工装不为空且工装名称为石墨模)
+ */
+ @TableField(value = "PLAN_TYPE_NAME")
+ private String planTypeName;
/**
* 需求日期
*/
@@ -91,12 +101,6 @@ public class MoldPlan extends BaseEntity {
@TableField(value = "QUA_LEVEL")
private String quaLevel;
- /**
- *
- */
- @TableField(value = "PLAN_TYPE_NAME")
- private String planTypeName;
-
/**
* 零件编码
*/
@@ -115,15 +119,14 @@ public class MoldPlan extends BaseEntity {
@TableField(value = "MEMO")
private String memo;
- /**
- * 类型;1、热表,烧结,2、仓库
- */
- @TableField(value = "MAF_TYPE")
- private Long mafType;
-
/**
* 紧急状态
*/
@TableField(value = "URGENT_TYPE")
private String urgentType;
+ /**
+ * 计划来源;15001:自动生成,15002:人工添加
+ */
+ @TableField(value = "SOURCE")
+ private Integer source;
}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/MoldPlanOrder.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/MoldPlanOrder.java
index 52aca3b4..97592862 100644
--- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/MoldPlanOrder.java
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/MoldPlanOrder.java
@@ -14,12 +14,18 @@ import org.springblade.core.mp.base.BaseEntity;
@TableName(value = "MES_MOLD_PLAN_ORDER")
@Data
public class MoldPlanOrder extends BaseEntity {
- @TableField(exist = false)
- private static final long serialVersionUID = 1L;
+ @TableField(exist = false)
+ private static final long serialVersionUID = 1L;
/**
* 烧结模具计划ID
*/
@TableField(value = "MP_ID")
private Long mpId;
+
+ /**
+ * 生产订单id
+ */
+ @TableField(value = "ORDER_ID")
+ private Long orderId;
}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/MoldPlanTool.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/MoldPlanTool.java
index 0ba5c614..b45ca20f 100644
--- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/MoldPlanTool.java
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/MoldPlanTool.java
@@ -11,6 +11,7 @@ import org.springblade.core.mp.base.BaseEntity;
* @author lqk
* @TableName MES_MOLD_PLAN_TOOL
*/
+@Deprecated
@TableName(value = "MES_MOLD_PLAN_TOOL")
@Data
public class MoldPlanTool extends BaseEntity {
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/PlateGoodsRecord.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/PlateGoodsRecord.java
index 17003924..ce1311fc 100644
--- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/PlateGoodsRecord.java
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/PlateGoodsRecord.java
@@ -70,6 +70,7 @@ public class PlateGoodsRecord extends BaseEntity {
/**
* 审批状态
+ * 11001:正常, 11002:审批中, 11003:不通过, 11004:通过
*/
@TableField(value = "APPROVAL_STATUS")
private Integer approvalStatus;
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/PlateGoodsRecordDetail.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/PlateGoodsRecordDetail.java
index 36290f70..8d03ce81 100644
--- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/PlateGoodsRecordDetail.java
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/PlateGoodsRecordDetail.java
@@ -27,6 +27,6 @@ public class PlateGoodsRecordDetail extends BaseEntity {
* 生产订单ID
*/
@TableField(value = "YO_ID")
- private String yoId;
+ private Long yoId;
}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/enums/AssayContentEnum.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/enums/AssayContentEnum.java
new file mode 100644
index 00000000..68afe38a
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/enums/AssayContentEnum.java
@@ -0,0 +1,58 @@
+package org.springblade.desk.order.pojo.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.tool.utils.StringPool;
+
+import java.util.Arrays;
+
+/**
+ * 镀层物料需求枚举
+ *
+ * @author lqk
+ * @date 2025-12-19 9:25
+ */
+@Getter
+@AllArgsConstructor
+public enum AssayContentEnum {
+ EMPTY(StringPool.EMPTY, -1),
+
+ /**
+ * 状态, 10000:未使用, 10001:已使用, 10002:已过期
+ */
+ STATUS_UNUSED("未使用", 10000),
+ STATUS_USED("已使用", 10001),
+ STATUS_OUTDATE("已过期", 10002),
+ ;
+ final String name;
+ final int code;
+
+ /**
+ * 匹配枚举值
+ *
+ * @param name 名称
+ * @return BladeUserEnum
+ */
+ public static AssayContentEnum of(String name) {
+ return Arrays.stream(AssayContentEnum.values())
+ .filter(userEnum -> userEnum.getName().equalsIgnoreCase(name != null ? name : "web"))
+ .findFirst()
+ // 在没有找到匹配项时返回默认值
+ .orElse(AssayContentEnum.EMPTY);
+ }
+
+ /**
+ * 根据值获取名称
+ *
+ * @param category
+ * @return
+ */
+ public static String getName(int category) {
+ AssayContentEnum item = Arrays.stream(AssayContentEnum.values())
+ .filter(enumItem -> enumItem.getCode() == category)
+ .findFirst()
+ .orElse(null);
+ return ObjectUtil.isEmpty(item) ? StringPool.EMPTY : item.getName();
+ }
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/enums/MoldPlanEnum.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/enums/MoldPlanEnum.java
index 8a822a74..efbd9a00 100644
--- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/enums/MoldPlanEnum.java
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/enums/MoldPlanEnum.java
@@ -25,9 +25,36 @@ public enum MoldPlanEnum {
STATUS_OUT_STORE("已出库", 10001),
STATUS_DONE("完成", 10002),
STATUS_CLOSE("关闭", 10003),
+
+ /**
+ * 状态枚举; 11001、新建,11002:已下发,11003、已完成
+ */
+ MAF_STATUS_CREATE("新建", 11001),
+ MAF_STATUS_SEND("已下发", 11002),
+ MAF_STATUS_DONE("已完成", 11003),
+
+ /**
+ * 类型;12001、热表,烧结,12002、仓库
+ */
+ MAF_TYPE_RB("热表,烧结", 12001),
+ MAF_TYPE_STORE("仓库", 12002),
+
+ /**
+ * 计划类型; 13001:Z:制造(工装不为空且工装名称为压饼模),13002:D:夹具(工装不为空且工装名称为石墨模)
+ */
+ PLAN_TYPE_CODE_Z("Z", 13001),
+ PLAN_TYPE_CODE_D("D", 13002),
+ PLAN_TYPE_NAME_Z("制造", 14001),
+ PLAN_TYPE_NAME_D("夹具", 15002),
+
+ /**
+ * 计划来源;15001:自动生成,15002:人工添加
+ */
+ SOURCE_AUTO("自动生成", 15001),
+ SOURCE_USER("人工添加", 15002),
;
final String name;
- final int category;
+ final int code;
/**
* 匹配枚举值
@@ -51,7 +78,7 @@ public enum MoldPlanEnum {
*/
public static String getName(int category) {
MoldPlanEnum item = Arrays.stream(MoldPlanEnum.values())
- .filter(enumItem -> enumItem.getCategory() == category)
+ .filter(enumItem -> enumItem.getCode() == category)
.findFirst()
.orElse(null);
return ObjectUtil.isEmpty(item) ? StringPool.EMPTY : item.getName();
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/enums/PlateGoodsEnum.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/enums/PlateGoodsEnum.java
index 748541a4..303a0ddb 100644
--- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/enums/PlateGoodsEnum.java
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/enums/PlateGoodsEnum.java
@@ -19,7 +19,7 @@ public enum PlateGoodsEnum {
EMPTY(StringPool.EMPTY, -1),
/**
- * 状态枚举
+ * 状态, 10000:待审核, 10001:审核通过, 10002:使用中, 10003:已超期, 10004:已完成, 10005:审核未通过, 10006:已关闭
*/
STATUS_WAITING("待审核", 10000),
STATUS_PASS("审核通过", 10001),
@@ -30,7 +30,7 @@ public enum PlateGoodsEnum {
STATUS_CLOSE("已关闭", 10006),
;
final String name;
- final int category;
+ final int code;
/**
* 匹配枚举值
@@ -54,7 +54,7 @@ public enum PlateGoodsEnum {
*/
public static String getName(int category) {
PlateGoodsEnum item = Arrays.stream(PlateGoodsEnum.values())
- .filter(enumItem -> enumItem.getCategory() == category)
+ .filter(enumItem -> enumItem.getCode() == category)
.findFirst()
.orElse(null);
return ObjectUtil.isEmpty(item) ? StringPool.EMPTY : item.getName();
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/request/MoldPlanSave.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/request/MoldPlanSave.java
index 8a119bef..8bcba9bc 100644
--- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/request/MoldPlanSave.java
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/request/MoldPlanSave.java
@@ -12,6 +12,7 @@ import java.util.List;
*
* @author lqk
*/
+@Deprecated
@Data
public class MoldPlanSave {
/**
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/vo/AssayContentVo.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/vo/AssayContentVo.java
index d6b0eac7..7acd36ad 100644
--- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/vo/AssayContentVo.java
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/vo/AssayContentVo.java
@@ -4,8 +4,10 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import org.springblade.desk.order.pojo.entity.AssayContent;
+import org.springblade.desk.order.pojo.entity.AssayContentDetail;
import java.io.Serial;
+import java.util.List;
/**
* 化验含量-视图类
@@ -23,8 +25,23 @@ public class AssayContentVo extends AssayContent {
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
+ /**
+ * 作业中心名称
+ */
+ String wcName;
+
+ /**
+ * 化验人名称
+ */
+ String assayManName;
+
/**
* 状态名称
*/
String statusName;
+
+ /**
+ * 明细列表
+ */
+ List detailList;
}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/vo/MoldPlanVo.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/vo/MoldPlanVo.java
index 48d0bd3e..b77249dc 100644
--- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/vo/MoldPlanVo.java
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/vo/MoldPlanVo.java
@@ -27,4 +27,14 @@ public class MoldPlanVo extends MoldPlan {
* 状态名称
*/
String statusName;
+
+ /**
+ * 状态名称
+ */
+ String mafStatusName;
+
+ /**
+ * 类型名称
+ */
+ String mafTypeName;
}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/vo/PlateGoodsRecordVo.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/vo/PlateGoodsRecordVo.java
index 11556175..174ec14e 100644
--- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/vo/PlateGoodsRecordVo.java
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/vo/PlateGoodsRecordVo.java
@@ -6,6 +6,7 @@ import lombok.Data;
import org.springblade.desk.order.pojo.entity.PlateGoodsRecord;
import java.io.Serial;
+import java.util.List;
/**
* 镀层物料额外需求上报-视图类
@@ -23,8 +24,20 @@ public class PlateGoodsRecordVo extends PlateGoodsRecord {
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
+ /**
+ * 作业中心名称
+ */
+ String wcName;
+
/**
* 状态名称
*/
String statusName;
+
+ /**
+ * 创建人名称
+ */
+ String createUserName;
+
+ List yieldOrderList;
}
diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/EquipAbilityEntity.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/EquipAbilityEntity.java
index 6db4959b..a5cefaaf 100644
--- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/EquipAbilityEntity.java
+++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/EquipAbilityEntity.java
@@ -26,6 +26,9 @@
package org.springblade.scheduling.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.NullSerializer;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -96,24 +99,28 @@ public class EquipAbilityEntity extends BaseEntity {
* 额定加工能力
*/
@Schema(description = "额定加工能力")
+ @JsonSerialize(nullsUsing = NullSerializer.class)
private BigDecimal standardProcessAbility;
/**
* 额定工时(分钟)
*/
@Schema(description = "额定工时(分钟)")
+ @JsonSerialize(nullsUsing = NullSerializer.class)
private BigDecimal standardTime;
/**
* 准备工时(分钟)
*/
@Schema(description = "准备工时(分钟)")
+ @JsonSerialize(nullsUsing = NullSerializer.class)
private BigDecimal prepareTime;
/**
* 轮次间隔(分钟)
*/
@Schema(description = "轮次间隔(分钟)")
+ @JsonSerialize(using = ToStringSerializer.class)
private BigDecimal interval;
/**
diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/SameTroughEntity.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/SameTroughEntity.java
index 53625738..614b2f80 100644
--- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/SameTroughEntity.java
+++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/SameTroughEntity.java
@@ -53,7 +53,7 @@ public class SameTroughEntity extends BaseEntity {
* 作业中心id
*/
@Schema(description = "作业中心id")
- private BigDecimal workCenterId;
+ private Long workCenterId;
/**
* 作业中心名称
*/
@@ -63,7 +63,7 @@ public class SameTroughEntity extends BaseEntity {
* 工序id
*/
@Schema(description = "工序id")
- private BigDecimal processId;
+ private Long processId;
/**
* 工序名称
*/
@@ -73,7 +73,7 @@ public class SameTroughEntity extends BaseEntity {
* 工艺id
*/
@Schema(description = "工艺id")
- private BigDecimal craftId;
+ private Long craftId;
/**
* 工艺名称
*/
diff --git a/blade-service-api/blade-user-api/src/main/java/org/springblade/system/cache/UserCache.java b/blade-service-api/blade-user-api/src/main/java/org/springblade/system/cache/UserCache.java
index a0c0ac2f..19a9ff5b 100644
--- a/blade-service-api/blade-user-api/src/main/java/org/springblade/system/cache/UserCache.java
+++ b/blade-service-api/blade-user-api/src/main/java/org/springblade/system/cache/UserCache.java
@@ -33,9 +33,11 @@ import org.springblade.core.tool.utils.StringPool;
import org.springblade.core.tool.utils.StringUtil;
import org.springblade.system.pojo.entity.User;
import org.springblade.system.feign.IUserClient;
+import org.springblade.system.pojo.entity.UserInfo;
import static org.springblade.core.cache.constant.CacheConstant.USER_CACHE;
import static org.springblade.core.launch.constant.FlowConstant.TASK_USR_PREFIX;
+import static org.springblade.system.feign.IUserClient.USER_BY_CODE;
/**
* 系统缓存
@@ -44,6 +46,7 @@ import static org.springblade.core.launch.constant.FlowConstant.TASK_USR_PREFIX;
*/
public class UserCache {
private static final String USER_CACHE_ID = "user:id:";
+ private static final String USER_CACHE_CODE = "user:code:";
private static final String USER_CACHE_ACCOUNT = "user:account:";
private static IUserClient userClient;
@@ -93,4 +96,16 @@ public class UserCache {
});
}
+ /**
+ * 获取用户
+ *
+ * @return
+ */
+ public static UserInfo getUserByCode(String code) {
+ return CacheUtil.get(USER_CACHE, USER_CACHE_CODE, code, () -> {
+ R result = getUserClient().userInfoByCode(code);
+ return result.getData();
+ });
+ }
+
}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java
index 1e25b375..084debd1 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java
@@ -28,6 +28,7 @@ package org.springblade.desk;
import org.springblade.core.cloud.client.BladeCloudApplication;
import org.springblade.core.launch.BladeApplication;
import org.springblade.core.launch.constant.AppConstant;
+import org.springframework.scheduling.annotation.EnableScheduling;
/**
* Desk启动器
@@ -35,6 +36,7 @@ import org.springblade.core.launch.constant.AppConstant;
* @author Chill
*/
@BladeCloudApplication
+@EnableScheduling
public class DeskApplication {
public static void main(String[] args) {
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/feign/WorkCenterClient.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/feign/WorkCenterClient.java
new file mode 100644
index 00000000..f286d780
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/feign/WorkCenterClient.java
@@ -0,0 +1,30 @@
+package org.springblade.desk.basic.feign;
+
+
+import io.swagger.v3.oas.annotations.Hidden;
+import lombok.RequiredArgsConstructor;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.desk.basic.pojo.entity.WorkCenter;
+import org.springblade.desk.basic.service.IWorkCenterService;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 作业中心 Feign接口类
+ *
+ * @author lqk
+ */
+@NonDS
+@Hidden()
+@RestController
+@RequiredArgsConstructor
+public class WorkCenterClient implements IWorkCenterClient {
+
+ private final IWorkCenterService workCenterService;
+
+ @Override
+ public R getById(Long workCenterId) {
+ WorkCenter workCenter = workCenterService.getById(workCenterId);
+ return R.data(workCenter);
+ }
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/BsProcessGroupController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/BsProcessGroupController.java
index acabbdd5..cdbbf3f4 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/BsProcessGroupController.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/BsProcessGroupController.java
@@ -107,7 +107,7 @@ public class BsProcessGroupController extends BladeController {
@ApiOperationSupport(order = 4)
@Operation(summary = "新增", description = "传入bsProcessGroup")
public R save(@Valid @RequestBody BsProcessGroupEntity bsProcessGroup) {
- return R.status(bsProcessGroupService.save(bsProcessGroup));
+ return R.status(bsProcessGroupService.saveProcessGroup(bsProcessGroup));
}
/**
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/BsProcessSetController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/BsProcessSetController.java
index 804d2199..52503fb5 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/BsProcessSetController.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/BsProcessSetController.java
@@ -104,7 +104,7 @@ public class BsProcessSetController extends BladeController {
@ApiOperationSupport(order = 2)
@Operation(summary = "分页", description = "传入bsProcessSet")
public R> list(@Parameter(hidden = true) @RequestParam Map bsProcessSet, Query query) {
- IPage pages = bsProcessSetService.page(Condition.getPage(query), Condition.getQueryWrapper(bsProcessSet, BsProcessSetEntity.class));
+ IPage pages = bsProcessSetService.page(Condition.getPage(query), Condition.getQueryWrapper(bsProcessSet, BsProcessSetEntity.class).orderByDesc("update_time"));
return R.data(BsProcessSetWrapper.build().pageVO(pages));
}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsProcessGroupMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsProcessGroupMapper.java
index bf077536..ead4ecdd 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsProcessGroupMapper.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsProcessGroupMapper.java
@@ -60,4 +60,5 @@ public interface BsProcessGroupMapper extends BaseMapper {
*/
List exportBsProcessGroup(@Param("ew") Wrapper queryWrapper);
+ BsProcessGroupEntity selectByGroupCode(@Param("groupCode") String groupCode);
}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProcessGroupMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProcessGroupMapper.xml
index 5e52a910..0ec1751b 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProcessGroupMapper.xml
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProcessGroupMapper.xml
@@ -14,7 +14,6 @@
-
@@ -31,5 +30,9 @@
SELECT * FROM BS_PROCESS_GROUP ${ew.customSqlSegment}
+
+ select * from BS_PROCESS_GROUP where is_deleted = 0 and GROUP_CODE = #{groupCode}
+
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsProcessGroupService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsProcessGroupService.java
index 0d1c3a42..9b6fd764 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsProcessGroupService.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsProcessGroupService.java
@@ -58,4 +58,10 @@ public interface IBsProcessGroupService extends BaseService exportBsProcessGroup(Wrapper queryWrapper);
+ /**
+ * 工序组新增
+ * @param bsProcessGroup
+ * @return
+ */
+ boolean saveProcessGroup(BsProcessGroupEntity bsProcessGroup);
}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsProcessGroupServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsProcessGroupServiceImpl.java
index b2b74838..344191c9 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsProcessGroupServiceImpl.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsProcessGroupServiceImpl.java
@@ -25,6 +25,7 @@
*/
package org.springblade.desk.dashboard.service.impl;
+import org.springblade.core.log.exception.ServiceException;
import org.springblade.desk.dashboard.pojo.entity.BsProcessGroupEntity;
import org.springblade.desk.dashboard.pojo.vo.BsProcessGroupVO;
import org.springblade.desk.dashboard.excel.BsProcessGroupExcel;
@@ -60,4 +61,20 @@ public class BsProcessGroupServiceImpl extends BaseServiceImpl
+
+
detail(CertificateMaintenanceEntity certificateMaintenance) {
+ CertificateMaintenanceEntity detail = certificateMaintenanceService.getOne(Condition.getQueryWrapper(certificateMaintenance));
+ return R.data(CertificateMaintenanceWrapper.build().entityVO(detail));
+ }
+
+ /**
+ * 证书维护 自定义分页
+ */
+ @GetMapping("/page")
+ @ApiOperationSupport(order = 3)
+ @Operation(summary = "分页", description = "CertificateLedgerQuery")
+ @Parameters({
+ @Parameter(name = "name", description = "姓名", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
+ @Parameter(name = "deptId", description = "所属班组", in = ParameterIn.QUERY, schema = @Schema(type = "integer")),
+ @Parameter(name = "station", description = "所属岗位", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
+ @Parameter(name = "skill", description = "技能等级", in = ParameterIn.QUERY, schema = @Schema(type = "integer")),
+ @Parameter(name = "certificateId", description = "证书类型", in = ParameterIn.QUERY, schema = @Schema(type = "integer")),
+ @Parameter(name = "certificateCode", description = "证书编号", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
+ @Parameter(name = "maintenanceStatus", description = "状态", in = ParameterIn.QUERY, schema = @Schema(type = "integer")),
+ })
+ public R> page(CertificateLedgerQuery certificateLedgerQuery, Query query) {
+ IPage pages = certificateMaintenanceService.selectCertificateMaintenancePage(Condition.getPage(query), certificateLedgerQuery);
+ return R.data(pages);
+ }
+
+ /**
+ * 证书维护 新增
+ */
+ @PostMapping("/save")
+ @ApiOperationSupport(order = 4)
+ @Operation(summary = "新增", description = "传入certificateMaintenance")
+ public R save(@Valid @RequestBody CertificateMaintenanceEntity certificateMaintenance) {
+ return R.status(certificateMaintenanceService.save(certificateMaintenance));
+ }
+
+ /**
+ * 证书维护 修改
+ */
+ @PostMapping("/update")
+ @ApiOperationSupport(order = 5)
+ @Operation(summary = "修改", description = "传入certificateMaintenance")
+ public R update(@Valid @RequestBody CertificateMaintenanceEntity certificateMaintenance) {
+ return R.status(certificateMaintenanceService.updateById(certificateMaintenance));
+ }
+
+ /**
+ * 证书维护 新增或修改
+ */
+ @PostMapping("/submit")
+ @ApiOperationSupport(order = 6)
+ @Operation(summary = "新增或修改", description = "传入certificateMaintenance")
+ public R submit(@Valid @RequestBody CertificateMaintenanceEntity certificateMaintenance) {
+ return R.status(certificateMaintenanceService.saveOrUpdate(certificateMaintenance));
+ }
+
+ /**
+ * 证书维护 删除
+ */
+ @PostMapping("/remove")
+ @ApiOperationSupport(order = 7)
+ @Operation(summary = "逻辑删除", description = "传入ids")
+ public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
+ return R.status(certificateMaintenanceService.deleteLogic(Func.toLongList(ids)));
+ }
+
+ /**
+ * 批量新增或修改
+ */
+ @PostMapping("/submit-list")
+ @ApiOperationSupport(order = 8)
+ @Operation(summary = "批量新增或修改", description = "")
+ public R submitList(@Valid @RequestBody List certificateMaintenances) {
+ return R.status(certificateMaintenanceService.submitList(certificateMaintenances));
+ }
+ /**
+ * 导出数据
+ */
+ @IsAdmin
+ @GetMapping("/export-certificateMaintenance")
+ @ApiOperationSupport(order = 9)
+ @Operation(summary = "导出数据", description = "传入certificateMaintenance")
+ public void exportCertificateMaintenance(@Parameter(hidden = true) @RequestParam Map certificateMaintenance, BladeUser bladeUser, HttpServletResponse response) {
+ QueryWrapper queryWrapper = Condition.getQueryWrapper(certificateMaintenance, CertificateMaintenanceEntity.class);
+ //if (!AuthUtil.isAdministrator()) {
+ // queryWrapper.lambda().eq(CertificateMaintenance::getTenantId, bladeUser.getTenantId());
+ //}
+ //queryWrapper.lambda().eq(CertificateMaintenanceEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED);
+ List list = certificateMaintenanceService.exportCertificateMaintenance(queryWrapper);
+ ExcelUtil.export(response, "证书维护数据" + DateUtil.time(), "证书维护数据表", list, CertificateMaintenanceExcel.class);
+ }
+
+ @PostConstruct // 项目启动后立即执行一次
+ public void init() {
+ updateMaintenanceStatus();
+ }
+
+ /**
+ * 更新证书维护状态
+ * TODO 以后需要交由PowerJob服务统一管理
+ */
+ @Scheduled(cron = "0 0 0 * * ?") // 每天凌晨0点执行
+ public void updateMaintenanceStatus() {
+ certificateMaintenanceService.updateMaintenanceStatus();
+ }
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/CertificateTypeController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/CertificateTypeController.java
new file mode 100644
index 00000000..e3542503
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/CertificateTypeController.java
@@ -0,0 +1,128 @@
+package org.springblade.desk.jobTransfer.controller;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+import jakarta.validation.Valid;
+
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.annotation.IsAdmin;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.desk.jobTransfer.pojo.excel.CertificateTypeExcel;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.desk.jobTransfer.pojo.entity.CertificateTypeEntity;
+import org.springblade.desk.jobTransfer.pojo.vo.CertificateTypeVO;
+import org.springblade.desk.jobTransfer.wrapper.CertificateTypeWrapper;
+import org.springblade.desk.jobTransfer.service.ICertificateTypeService;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.excel.util.ExcelUtil;
+import org.springblade.core.tool.constant.BladeConstant;
+
+import java.util.Map;
+import java.util.List;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * 证书类型 控制器
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/certificateType")
+@Tag(name = "证书类型", description = "证书类型接口")
+public class CertificateTypeController extends BladeController {
+
+ private final ICertificateTypeService certificateTypeService;
+
+ /**
+ * 证书类型 详情
+ */
+ @GetMapping("/detail")
+ @ApiOperationSupport(order = 1)
+ @Operation(summary = "详情", description = "传入certificateType")
+ public R detail(CertificateTypeEntity certificateType) {
+ CertificateTypeEntity detail = certificateTypeService.getOne(Condition.getQueryWrapper(certificateType));
+ return R.data(CertificateTypeWrapper.build().entityVO(detail));
+ }
+
+ /**
+ * 证书类型 自定义分页
+ */
+ @GetMapping("/page")
+ @ApiOperationSupport(order = 3)
+ @Operation(summary = "分页", description = "传入certificateType")
+ public R> page(CertificateTypeVO certificateType, Query query) {
+ IPage pages = certificateTypeService.selectCertificateTypePage(Condition.getPage(query), certificateType);
+ return R.data(pages);
+ }
+
+ /**
+ * 证书类型 新增
+ */
+ @PostMapping("/save")
+ @ApiOperationSupport(order = 4)
+ @Operation(summary = "新增", description = "传入certificateType")
+ public R save(@Valid @RequestBody CertificateTypeEntity certificateType) {
+ return R.status(certificateTypeService.save(certificateType));
+ }
+
+ /**
+ * 证书类型 修改
+ */
+ @PostMapping("/update")
+ @ApiOperationSupport(order = 5)
+ @Operation(summary = "修改", description = "传入certificateType")
+ public R update(@Valid @RequestBody CertificateTypeEntity certificateType) {
+ return R.status(certificateTypeService.updateById(certificateType));
+ }
+
+ /**
+ * 证书类型 新增或修改
+ */
+ @PostMapping("/submit")
+ @ApiOperationSupport(order = 6)
+ @Operation(summary = "新增或修改", description = "传入certificateType")
+ public R submit(@Valid @RequestBody CertificateTypeEntity certificateType) {
+ return R.status(certificateTypeService.saveOrUpdate(certificateType));
+ }
+
+ /**
+ * 证书类型 删除
+ */
+ @PostMapping("/remove")
+ @ApiOperationSupport(order = 7)
+ @Operation(summary = "逻辑删除", description = "传入ids")
+ public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
+ return R.status(certificateTypeService.deleteLogic(Func.toLongList(ids)));
+ }
+
+
+ /**
+ * 导出数据
+ */
+ @IsAdmin
+ @GetMapping("/export-certificateType")
+ @ApiOperationSupport(order = 9)
+ @Operation(summary = "导出数据", description = "传入certificateType")
+ public void exportCertificateType(@Parameter(hidden = true) @RequestParam Map certificateType, BladeUser bladeUser, HttpServletResponse response) {
+ QueryWrapper queryWrapper = Condition.getQueryWrapper(certificateType, CertificateTypeEntity.class);
+ //if (!AuthUtil.isAdministrator()) {
+ // queryWrapper.lambda().eq(CertificateType::getTenantId, bladeUser.getTenantId());
+ //}
+ //queryWrapper.lambda().eq(CertificateTypeEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED);
+ List list = certificateTypeService.exportCertificateType(queryWrapper);
+ ExcelUtil.export(response, "证书类型数据" + DateUtil.time(), "证书类型数据表", list, CertificateTypeExcel.class);
+ }
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/CultivateDetailController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/CultivateDetailController.java
new file mode 100644
index 00000000..604580a3
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/CultivateDetailController.java
@@ -0,0 +1,211 @@
+package org.springblade.desk.jobTransfer.controller;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import jakarta.annotation.PostConstruct;
+import lombok.AllArgsConstructor;
+import jakarta.validation.Valid;
+
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.annotation.IsAdmin;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.desk.jobTransfer.pojo.enums.TrainingStatusEnum;
+import org.springblade.desk.jobTransfer.pojo.excel.CultivateDetailExcel;
+import org.springblade.desk.jobTransfer.pojo.request.CultivateDetailQuery;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.desk.jobTransfer.pojo.entity.CultivateDetailEntity;
+import org.springblade.desk.jobTransfer.pojo.vo.CultivateDetailVO;
+import org.springblade.desk.jobTransfer.wrapper.CultivateDetailWrapper;
+import org.springblade.desk.jobTransfer.service.ICultivateDetailService;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.excel.util.ExcelUtil;
+import org.springblade.core.tool.constant.BladeConstant;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.List;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * 培训安排 控制器
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/cultivateDetail")
+@Tag(name = "培训安排", description = "培训安排接口")
+public class CultivateDetailController extends BladeController {
+
+ private final ICultivateDetailService cultivateDetailService;
+
+ /**
+ * 培训安排 详情
+ */
+ @GetMapping("/detail")
+ @ApiOperationSupport(order = 1)
+ @Operation(summary = "详情", description = "传入cultivateDetail")
+ public R detail(CultivateDetailEntity cultivateDetail) {
+ CultivateDetailEntity detail = cultivateDetailService.getOne(Condition.getQueryWrapper(cultivateDetail));
+ return R.data(CultivateDetailWrapper.build().entityVO(detail));
+ }
+
+ /**
+ * 培训安排 自定义分页
+ */
+ @GetMapping("/page")
+ @ApiOperationSupport(order = 3)
+ @Operation(summary = "分页", description = "传入cultivateDetail")
+ public R> page(CultivateDetailQuery cultivateDetailQuery, Query query) {
+ IPage pages = cultivateDetailService.selectCultivateDetailPage(Condition.getPage(query), cultivateDetailQuery);
+ return R.data(pages);
+ }
+
+ /**
+ * 培训安排 新增
+ */
+ @PostMapping("/save")
+ @ApiOperationSupport(order = 4)
+ @Operation(summary = "新增", description = "传入cultivateDetail")
+ public R save(@Valid @RequestBody CultivateDetailEntity cultivateDetail) {
+ return R.status(cultivateDetailService.save(cultivateDetail));
+ }
+
+ /**
+ * 培训安排 修改
+ */
+ @PostMapping("/update")
+ @ApiOperationSupport(order = 5)
+ @Operation(summary = "修改", description = "传入cultivateDetail")
+ public R update(@Valid @RequestBody CultivateDetailEntity cultivateDetail) {
+ return R.status(cultivateDetailService.updateById(cultivateDetail));
+ }
+
+ /**
+ * 培训安排 新增或修改
+ */
+ @PostMapping("/submit")
+ @ApiOperationSupport(order = 6)
+ @Operation(summary = "新增或修改", description = "传入cultivateDetail")
+ public R submit(@Valid @RequestBody CultivateDetailEntity cultivateDetail) {
+ return R.status(cultivateDetailService.saveOrUpdate(cultivateDetail));
+ }
+
+ /**
+ * 培训安排 删除
+ */
+ @PostMapping("/remove")
+ @ApiOperationSupport(order = 7)
+ @Operation(summary = "逻辑删除", description = "传入ids")
+ public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
+ return R.status(cultivateDetailService.deleteLogic(Func.toLongList(ids)));
+ }
+
+
+ /**
+ * 导出数据
+ */
+ @IsAdmin
+ @GetMapping("/export-cultivateDetail")
+ @ApiOperationSupport(order = 9)
+ @Operation(summary = "导出数据", description = "传入cultivateDetail")
+ public void exportCultivateDetail(@Parameter(hidden = true) @RequestParam Map cultivateDetail, BladeUser bladeUser, HttpServletResponse response) {
+ QueryWrapper queryWrapper = Condition.getQueryWrapper(cultivateDetail, CultivateDetailEntity.class);
+ //if (!AuthUtil.isAdministrator()) {
+ // queryWrapper.lambda().eq(CultivateDetail::getTenantId, bladeUser.getTenantId());
+ //}
+ //queryWrapper.lambda().eq(CultivateDetailEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED);
+ List list = cultivateDetailService.exportCultivateDetail(queryWrapper);
+ ExcelUtil.export(response, "培训安排数据" + DateUtil.time(), "培训安排数据表", list, CultivateDetailExcel.class);
+ }
+
+ /**
+ * 培训安排 配置
+ */
+ @PostMapping("/configured")
+ @ApiOperationSupport(order = 10)
+ @Operation(summary = "配置", description = "传入cultivateDetail")
+ public R configured(@Valid @RequestBody CultivateDetailEntity cultivateDetail) {
+ cultivateDetail.setCaStatus(TrainingStatusEnum.WAIT_DISTRIBUTE.getCode().shortValue());
+ return R.status(cultivateDetailService.updateById(cultivateDetail));
+ }
+
+ /**
+ * 批量下发
+ */
+ @PostMapping("/issued")
+ @ApiOperationSupport(order = 11)
+ @Operation(summary = "批量下发", description = "传入cultivateDetails")
+ public R issued(@Valid @RequestBody List cultivateDetails) {
+ for (CultivateDetailEntity cultivateDetail : cultivateDetails) {
+ Short caStatus = cultivateDetail.getCaStatus();
+ if (!(TrainingStatusEnum.WAIT_DISTRIBUTE.getCode().shortValue() == caStatus)) {
+ return R.fail("请选择状态为待下发的记录");
+ }
+ cultivateDetail.setCaStatus(TrainingStatusEnum.ISSUED.getCode().shortValue());
+ cultivateDetail.setDistributeTime(new Date());
+ }
+ return R.status(cultivateDetailService.saveOrUpdateBatch(cultivateDetails));
+ }
+
+ /**
+ * 批量资料上传
+ */
+ @PostMapping("/uploadMaterials")
+ @ApiOperationSupport(order = 12)
+ @Operation(summary = "批量资料上传", description = "传入cultivateDetails")
+ public R uploadMaterials(@Valid @RequestBody List cultivateDetails) {
+ for (CultivateDetailEntity cultivateDetail : cultivateDetails) {
+ Short caStatus = cultivateDetail.getCaStatus();
+ if (!(TrainingStatusEnum.ISSUED.getCode().shortValue() == caStatus)) {
+ return R.fail("请选择状态为培训中的记录");
+ }
+ cultivateDetail.setCaStatus(TrainingStatusEnum.TRAINED.getCode().shortValue());
+ }
+ return R.status(cultivateDetailService.saveOrUpdateBatch(cultivateDetails));
+ }
+
+ /**
+ * 批量培训完成
+ */
+ @PostMapping("/trainingCompleted")
+ @ApiOperationSupport(order = 13)
+ @Operation(summary = "批量培训完成", description = "传入cultivateDetails")
+ public R trainingCompleted(@Valid @RequestBody List cultivateDetails) {
+ for (CultivateDetailEntity cultivateDetail : cultivateDetails) {
+ Short caStatus = cultivateDetail.getCaStatus();
+ if (!(TrainingStatusEnum.TRAINED.getCode().shortValue() == caStatus)) {
+ return R.fail("请选择状态为待确认的记录");
+ }
+ cultivateDetail.setCaStatus(TrainingStatusEnum.OK_TRAINED.getCode().shortValue());
+ cultivateDetail.setFinishTime(new Date());
+ }
+ return cultivateDetailService.trainingCompleted(cultivateDetails);
+ }
+
+ @PostConstruct // 项目启动后立即执行一次
+ public void init() {
+ exceed();
+ }
+
+ /**
+ * 更新培训记录超期状态
+ * TODO 以后需要交由PowerJob服务统一管理
+ */
+ @Scheduled(cron = "0 0 0 * * ?") // 每天凌晨0点执行
+ public void exceed() {
+ cultivateDetailService.exceed();
+ }
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/EquipmentMaintenanceController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/EquipmentMaintenanceController.java
new file mode 100644
index 00000000..d38f03a2
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/EquipmentMaintenanceController.java
@@ -0,0 +1,151 @@
+package org.springblade.desk.jobTransfer.controller;
+
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+import jakarta.validation.Valid;
+
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.annotation.IsAdmin;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.desk.jobTransfer.pojo.entity.CertificateMaintenanceEntity;
+import org.springblade.desk.jobTransfer.pojo.excel.EquipmentMaintenanceExcel;
+import org.springblade.desk.jobTransfer.pojo.request.EquipmentMaintenanceQuery;
+import org.springblade.desk.jobTransfer.pojo.vo.EquipmentMaintenanceListVO;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.desk.jobTransfer.pojo.entity.EquipmentMaintenanceEntity;
+import org.springblade.desk.jobTransfer.pojo.vo.EquipmentMaintenanceVO;
+import org.springblade.desk.jobTransfer.wrapper.EquipmentMaintenanceWrapper;
+import org.springblade.desk.jobTransfer.service.IEquipmentMaintenanceService;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.excel.util.ExcelUtil;
+import org.springblade.core.tool.constant.BladeConstant;
+
+import java.util.Map;
+import java.util.List;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * 岗位设备维护 控制器
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/equipmentMaintenance")
+@Tag(name = "岗位设备维护", description = "岗位设备维护接口")
+public class EquipmentMaintenanceController extends BladeController {
+
+ private final IEquipmentMaintenanceService equipmentMaintenanceService;
+
+ /**
+ * 岗位设备维护 详情
+ */
+ @GetMapping("/detail")
+ @ApiOperationSupport(order = 1)
+ @Operation(summary = "详情", description = "传入equipmentMaintenance")
+ public R detail(EquipmentMaintenanceEntity equipmentMaintenance) {
+ EquipmentMaintenanceEntity detail = equipmentMaintenanceService.getOne(Condition.getQueryWrapper(equipmentMaintenance));
+ return R.data(EquipmentMaintenanceWrapper.build().entityVO(detail));
+ }
+
+ /**
+ * 岗位设备维护 自定义分页
+ */
+ @GetMapping("/page")
+ @ApiOperationSupport(order = 3)
+ @Parameters({
+ @Parameter(name = "name", description = "姓名", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
+ @Parameter(name = "deptId", description = "所属班组", in = ParameterIn.QUERY, schema = @Schema(type = "integer")),
+ @Parameter(name = "station", description = "所属岗位", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
+ @Parameter(name = "skill", description = "技能等级", in = ParameterIn.QUERY, schema = @Schema(type = "integer")),
+ @Parameter(name = "equipmentId", description = "设备", in = ParameterIn.QUERY, schema = @Schema(type = "integer")),
+ @Parameter(name = "maintenanceStatus", description = "状态", in = ParameterIn.QUERY, schema = @Schema(type = "integer")),
+ })
+ @Operation(summary = "分页", description = "传入equipmentMaintenanceQuery")
+ public R> page(EquipmentMaintenanceQuery equipmentMaintenanceQuery, Query query) {
+ IPage pages = equipmentMaintenanceService.selectEquipmentMaintenancePage(Condition.getPage(query), equipmentMaintenanceQuery);
+ return R.data(pages);
+ }
+
+ /**
+ * 岗位设备维护 新增
+ */
+ @PostMapping("/save")
+ @ApiOperationSupport(order = 4)
+ @Operation(summary = "新增", description = "传入equipmentMaintenance")
+ public R save(@Valid @RequestBody EquipmentMaintenanceEntity equipmentMaintenance) {
+ return R.status(equipmentMaintenanceService.save(equipmentMaintenance));
+ }
+
+ /**
+ * 岗位设备维护 修改
+ */
+ @PostMapping("/update")
+ @ApiOperationSupport(order = 5)
+ @Operation(summary = "修改", description = "传入equipmentMaintenance")
+ public R update(@Valid @RequestBody EquipmentMaintenanceEntity equipmentMaintenance) {
+ return R.status(equipmentMaintenanceService.updateById(equipmentMaintenance));
+ }
+
+ /**
+ * 岗位设备维护 新增或修改
+ */
+ @PostMapping("/submit")
+ @ApiOperationSupport(order = 6)
+ @Operation(summary = "新增或修改", description = "传入equipmentMaintenance")
+ public R submit(@Valid @RequestBody EquipmentMaintenanceEntity equipmentMaintenance) {
+ return R.status(equipmentMaintenanceService.saveOrUpdate(equipmentMaintenance));
+ }
+
+ /**
+ * 岗位设备维护 删除
+ */
+ @PostMapping("/remove")
+ @ApiOperationSupport(order = 7)
+ @Operation(summary = "逻辑删除", description = "传入ids")
+ public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
+ return R.status(equipmentMaintenanceService.deleteLogic(Func.toLongList(ids)));
+ }
+
+
+ /**
+ * 批量新增或修改
+ */
+ @PostMapping("/submit-list")
+ @ApiOperationSupport(order = 8)
+ @Operation(summary = "批量新增或修改", description = "")
+ public R submitList(@Valid @RequestBody List equipmentMaintenanceEntities) {
+ return R.status(equipmentMaintenanceService.submitList(equipmentMaintenanceEntities));
+ }
+ /**
+ * 导出数据
+ */
+ @IsAdmin
+ @GetMapping("/export-equipmentMaintenance")
+ @ApiOperationSupport(order = 9)
+ @Operation(summary = "导出数据", description = "传入equipmentMaintenance")
+ public void exportEquipmentMaintenance(@Parameter(hidden = true) @RequestParam Map equipmentMaintenance, BladeUser bladeUser, HttpServletResponse response) {
+ QueryWrapper queryWrapper = Condition.getQueryWrapper(equipmentMaintenance, EquipmentMaintenanceEntity.class);
+ //if (!AuthUtil.isAdministrator()) {
+ // queryWrapper.lambda().eq(EquipmentMaintenance::getTenantId, bladeUser.getTenantId());
+ //}
+ //queryWrapper.lambda().eq(EquipmentMaintenanceEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED);
+ List list = equipmentMaintenanceService.exportEquipmentMaintenance(queryWrapper);
+ ExcelUtil.export(response, "岗位设备维护数据" + DateUtil.time(), "岗位设备维护数据表", list, EquipmentMaintenanceExcel.class);
+ }
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/PostHandleController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/PostHandleController.java
new file mode 100644
index 00000000..cef1dd1e
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/PostHandleController.java
@@ -0,0 +1,249 @@
+package org.springblade.desk.jobTransfer.controller;
+
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+import jakarta.validation.Valid;
+
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.annotation.IsAdmin;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.desk.basic.util.ExcelExtUtil;
+import org.springblade.desk.jobTransfer.pojo.excel.PostHandleExcel;
+import org.springblade.desk.jobTransfer.pojo.excel.PostHandleImport;
+import org.springblade.desk.jobTransfer.pojo.request.PostHandleQuery;
+import org.springframework.beans.BeanUtils;
+import org.springframework.core.io.Resource;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.desk.jobTransfer.pojo.entity.PostHandleEntity;
+import org.springblade.desk.jobTransfer.pojo.vo.PostHandleVO;
+import org.springblade.desk.jobTransfer.wrapper.PostHandleWrapper;
+import org.springblade.desk.jobTransfer.service.IPostHandleService;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.excel.util.ExcelUtil;
+
+import java.util.Map;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 岗位处理 控制器
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/postHandle")
+@Tag(name = "岗位处理", description = "岗位处理接口")
+public class PostHandleController extends BladeController {
+
+ private final IPostHandleService postHandleService;
+
+ /**
+ * 岗位处理 详情
+ */
+ @GetMapping("/detail")
+ @ApiOperationSupport(order = 1)
+ @Operation(summary = "详情", description = "传入postHandle")
+ public R detail(PostHandleEntity postHandle) {
+ PostHandleEntity detail = postHandleService.getOne(Condition.getQueryWrapper(postHandle));
+ return R.data(PostHandleWrapper.build().entityVO(detail));
+ }
+
+ /**
+ * 岗位处理 自定义分页
+ */
+ @GetMapping("/page")
+ @ApiOperationSupport(order = 3)
+ @Operation(summary = "分页", description = "传入postHandle")
+ @Parameters({
+ @Parameter(name = "deptId", description = "所属班组", in = ParameterIn.QUERY, schema = @Schema(type = "integer")),
+ @Parameter(name = "userCode", description = "员工编号", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
+ @Parameter(name = "name", description = "姓名", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
+ @Parameter(name = "station", description = "所属岗位", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
+ @Parameter(name = "inJobDate", description = "入职时间", in = ParameterIn.QUERY, schema = @Schema(type = "string", format = "date")),
+ @Parameter(name = "skill", description = "技能等级", in = ParameterIn.QUERY, schema = @Schema(type = "integer")),
+ @Parameter(name = "phStatus", description = "状态", in = ParameterIn.QUERY, schema = @Schema(type = "integer")),
+ @Parameter(name = "conExpDate", description = "合同到期日期", in = ParameterIn.QUERY, schema = @Schema(type = "string", format = "date")),
+ })
+ public R> page(@Parameter(hidden = true) PostHandleQuery postHandleQuery, Query query) {
+ IPage pages = postHandleService.selectPostHandlePage(Condition.getPage(query), postHandleQuery);
+ return R.data(pages);
+ }
+
+ /**
+ * 岗位处理 新增
+ */
+ @PostMapping("/save")
+ @ApiOperationSupport(order = 4)
+ @Operation(summary = "新增", description = "传入postHandle")
+ public R save(@Valid @RequestBody PostHandleEntity postHandle) {
+ return R.status(postHandleService.save(postHandle));
+ }
+
+ /**
+ * 岗位处理 修改
+ */
+ @PostMapping("/update")
+ @ApiOperationSupport(order = 5)
+ @Operation(summary = "修改", description = "传入postHandle")
+ public R update(@Valid @RequestBody PostHandleEntity postHandle) {
+ return R.status(postHandleService.updateById(postHandle));
+ }
+
+ /**
+ * 岗位处理 新增或修改
+ */
+ @PostMapping("/submit")
+ @ApiOperationSupport(order = 6)
+ @Operation(summary = "新增或修改", description = "传入postHandle")
+ public R submit(@Valid @RequestBody PostHandleEntity postHandle) {
+ return postHandleService.saveOrUpdateHandle(postHandle);
+ }
+
+ /**
+ * 岗位处理 删除
+ */
+ @PostMapping("/remove")
+ @ApiOperationSupport(order = 7)
+ @Operation(summary = "逻辑删除", description = "传入ids")
+ public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
+ return R.status(postHandleService.deleteLogic(Func.toLongList(ids)));
+ }
+
+ /**
+ * 批量转正
+ *
+ * @param ids
+ * @return R
+ */
+ @PostMapping("/regularization")
+ @ApiOperationSupport(order = 8)
+ @Operation(summary = "转正", description = "传入ids")
+ public R regularization(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
+ return postHandleService.regularization(Func.toLongList(ids));
+
+ }
+
+ /**
+ * 批量转岗计划
+ *
+ * @param ids
+ * @param teacherId
+ * @param teacherName
+ * @param trainingPlanId
+ * @return
+ */
+ @PostMapping("/JobTransferPlan")
+ @ApiOperationSupport(order = 9)
+ @Operation(summary = "批量转岗计划", description = "传入ids")
+ public R JobTransferPlan(@Parameter(description = "主键集合", required = true) @RequestParam String ids,
+ @Parameter(description = "培训师id", required = true) @RequestParam Long teacherId,
+ @Parameter(description = "培训师姓名", required = true) @RequestParam String teacherName,
+ @Parameter(description = "培训模板id", required = true) @RequestParam Long trainingPlanId) {
+ return postHandleService.JobTransferPlan(Func.toLongList(ids), teacherId, teacherName, trainingPlanId);
+ }
+
+ /**
+ * 批量下岗计划
+ *
+ * @param ids
+ * @param teacherId
+ * @param teacherName
+ * @param trainingPlanId
+ * @return
+ */
+ @PostMapping("/layoffPlan")
+ @ApiOperationSupport(order = 10)
+ @Operation(summary = "批量下岗计划", description = "传入ids")
+ public R layoffPlan(@Parameter(description = "主键集合", required = true) @RequestParam String ids,
+ @Parameter(description = "培训师id", required = true) @RequestParam Long teacherId,
+ @Parameter(description = "培训师姓名", required = true) @RequestParam String teacherName,
+ @Parameter(description = "培训模板id", required = true) @RequestParam Long trainingPlanId) {
+ return postHandleService.layoffPlan(Func.toLongList(ids), teacherId, teacherName, trainingPlanId);
+ }
+
+ /**
+ * 导出数据
+ */
+ @IsAdmin
+ @GetMapping("/export-postHandle")
+ @ApiOperationSupport(order = 11)
+ @Operation(summary = "导出数据", description = "传入postHandle")
+ public void exportPostHandle(@Parameter(hidden = true) @RequestParam Map postHandle, BladeUser bladeUser, HttpServletResponse response) {
+ QueryWrapper queryWrapper = Condition.getQueryWrapper(postHandle, PostHandleEntity.class);
+ //if (!AuthUtil.isAdministrator()) {
+ // queryWrapper.lambda().eq(PostHandle::getTenantId, bladeUser.getTenantId());
+ //}
+ //queryWrapper.lambda().eq(PostHandleEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED);
+ List list = postHandleService.exportPostHandle(queryWrapper);
+ ExcelUtil.export(response, "岗位处理数据" + DateUtil.time(), "岗位处理数据表", list, PostHandleExcel.class);
+ }
+
+ /**
+ * 下载Excel模板
+ */
+ @GetMapping("/downloadExcelTemplate")
+ @ApiOperationSupport(order = 12)
+ @Operation(summary = "下载Excel模板", description = "")
+ public ResponseEntity downloadExcelTemplate() {
+ return ExcelExtUtil.downloadXlsTemplate(
+ "Excel/jobTransfer/岗位处理导入模板下载.xls",
+ "岗位处理导入模板下载.xls");
+ }
+
+ /**
+ * 导入Excel
+ */
+ @PostMapping("/importExcel")
+ @ApiOperationSupport(order = 13)
+ @Operation(summary = "导入Excel", description = "MultipartFile")
+ public R importExcel(@RequestParam("file") MultipartFile file) {
+ R checkR = ExcelExtUtil.importExcelCheck(file);
+ if (checkR != null) {
+ return checkR;
+ }
+ List importList = ExcelUtil.read(
+ file, 0, 1, PostHandleImport.class
+ );
+ return postHandleService.saveExcelData(importList);
+ }
+
+
+ /**
+ * 转岗
+ */
+ @PostMapping("/jobTransfer")
+ @ApiOperationSupport(order = 13)
+ @Operation(summary = "转岗", description = "传入postHandle")
+ public R jobTransfer(@Valid @RequestBody PostHandleEntity postHandle) {
+ return postHandleService.jobTransfer(postHandle);
+ }
+
+ /**
+ * 离职
+ */
+ @PostMapping("/depart")
+ @ApiOperationSupport(order = 14)
+ @Operation(summary = "离职", description = "传入postHandle")
+ public R depart(@Valid @RequestBody PostHandleEntity postHandle) {
+ return postHandleService.depart(postHandle);
+ }
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/TrainingPlanController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/TrainingPlanController.java
new file mode 100644
index 00000000..dd6276a0
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/TrainingPlanController.java
@@ -0,0 +1,147 @@
+package org.springblade.desk.jobTransfer.controller;
+
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+import jakarta.validation.Valid;
+
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.annotation.IsAdmin;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.desk.jobTransfer.pojo.entity.CultivateDetailEntity;
+import org.springblade.desk.jobTransfer.pojo.enums.TrainingStatusEnum;
+import org.springblade.desk.jobTransfer.pojo.excel.TrainingPlanExcel;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.desk.jobTransfer.pojo.entity.TrainingPlanEntity;
+import org.springblade.desk.jobTransfer.pojo.vo.TrainingPlanVO;
+import org.springblade.desk.jobTransfer.wrapper.TrainingPlanWrapper;
+import org.springblade.desk.jobTransfer.service.ITrainingPlanService;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.excel.util.ExcelUtil;
+import org.springblade.core.tool.constant.BladeConstant;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.List;
+
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * 培训计划模板 控制器
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/trainingPlan")
+@Tag(name = "培训计划模板", description = "培训计划模板接口")
+public class TrainingPlanController extends BladeController {
+
+ private final ITrainingPlanService trainingPlanService;
+
+ /**
+ * 培训计划模板 详情
+ */
+ @GetMapping("/detail")
+ @ApiOperationSupport(order = 1)
+ @Operation(summary = "详情", description = "传入trainingPlan")
+ public R detail(TrainingPlanEntity trainingPlan) {
+ TrainingPlanEntity detail = trainingPlanService.getOne(Condition.getQueryWrapper(trainingPlan));
+ return R.data(TrainingPlanWrapper.build().entityVO(detail));
+ }
+
+ /**
+ * 培训计划模板 自定义分页
+ */
+ @GetMapping("/page")
+ @ApiOperationSupport(order = 3)
+ @Parameters({
+ @Parameter(name = "name", description = "培训计划名称", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
+ })
+ @Operation(summary = "分页", description = "传入trainingPlan")
+ public R> page(@Parameter(hidden = true) TrainingPlanEntity trainingPlan, Query query) {
+ IPage pages = trainingPlanService.selectTrainingPlanPage(Condition.getPage(query), trainingPlan);
+ return R.data(TrainingPlanWrapper.build().pageVO(pages));
+ }
+
+ /**
+ * 培训计划模板 新增
+ */
+ @PostMapping("/save")
+ @ApiOperationSupport(order = 4)
+ @Operation(summary = "新增", description = "传入trainingPlan")
+ public R save(@Valid @RequestBody TrainingPlanEntity trainingPlan) {
+ return R.status(trainingPlanService.save(trainingPlan));
+ }
+
+ /**
+ * 培训计划模板 修改
+ */
+ @PostMapping("/update")
+ @ApiOperationSupport(order = 5)
+ @Operation(summary = "修改", description = "传入trainingPlan")
+ public R update(@Valid @RequestBody TrainingPlanEntity trainingPlan) {
+ return R.status(trainingPlanService.updateById(trainingPlan));
+ }
+
+ /**
+ * 培训计划模板 新增或修改
+ */
+ @PostMapping("/submit")
+ @ApiOperationSupport(order = 6)
+ @Operation(summary = "新增或修改", description = "传入trainingPlan")
+ public R submit(@Valid @RequestBody TrainingPlanEntity trainingPlan) {
+ return R.status(trainingPlanService.saveOrUpdate(trainingPlan));
+ }
+
+ /**
+ * 培训计划模板 删除
+ */
+ @PostMapping("/remove")
+ @ApiOperationSupport(order = 7)
+ @Operation(summary = "逻辑删除", description = "传入ids")
+ public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
+ return R.status(trainingPlanService.deleteLogic(Func.toLongList(ids)));
+ }
+
+ /**
+ * 批量增改
+ */
+ @PostMapping("/submit-list")
+ @ApiOperationSupport(order = 8)
+ @Operation(summary = "批量增改", description = "传入trainingPlanEntities")
+ public R issued(@Valid @RequestBody List trainingPlanEntities) {
+ return R.status(trainingPlanService.saveOrUpdateBatch(trainingPlanEntities));
+ }
+
+
+ /**
+ * 导出数据
+ */
+ @IsAdmin
+ @GetMapping("/export-trainingPlan")
+ @ApiOperationSupport(order = 9)
+ @Operation(summary = "导出数据", description = "传入trainingPlan")
+ public void exportTrainingPlan(@Parameter(hidden = true) @RequestParam Map trainingPlan, BladeUser bladeUser, HttpServletResponse response) {
+ QueryWrapper queryWrapper = Condition.getQueryWrapper(trainingPlan, TrainingPlanEntity.class);
+ //if (!AuthUtil.isAdministrator()) {
+ // queryWrapper.lambda().eq(TrainingPlan::getTenantId, bladeUser.getTenantId());
+ //}
+ //queryWrapper.lambda().eq(TrainingPlanEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED);
+ List list = trainingPlanService.exportTrainingPlan(queryWrapper);
+ ExcelUtil.export(response, "培训计划模板数据" + DateUtil.time(), "培训计划模板数据表", list, TrainingPlanExcel.class);
+ }
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateMaintenanceMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateMaintenanceMapper.java
new file mode 100644
index 00000000..85ea27e8
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateMaintenanceMapper.java
@@ -0,0 +1,45 @@
+package org.springblade.desk.jobTransfer.mapper;
+
+import org.springblade.desk.jobTransfer.pojo.entity.CertificateMaintenanceEntity;
+import org.springblade.desk.jobTransfer.pojo.excel.CertificateMaintenanceExcel;
+import org.springblade.desk.jobTransfer.pojo.request.CertificateLedgerQuery;
+import org.springblade.desk.jobTransfer.pojo.vo.CertificateLedgerVO;
+import org.springblade.desk.jobTransfer.pojo.vo.CertificateMaintenanceVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 证书维护 Mapper 接口
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+public interface CertificateMaintenanceMapper extends BaseMapper {
+
+ /**
+ * 自定义分页
+ *
+ * @param page 分页参数
+ * @param certificateLedgerQuery 查询参数
+ * @return List
+ */
+ List selectCertificateMaintenancePage(IPage page, CertificateLedgerQuery query);
+
+
+ /**
+ * 获取导出数据
+ *
+ * @param queryWrapper 查询条件
+ * @return List
+ */
+ List exportCertificateMaintenance(@Param("ew") Wrapper queryWrapper);
+
+ /**
+ * 更新证书维护状态
+ */
+ void updateMaintenanceStatus();
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateMaintenanceMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateMaintenanceMapper.xml
new file mode 100644
index 00000000..0a90ab1a
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateMaintenanceMapper.xml
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT
+ ph.ID as ph_id,
+ ph.*,
+ bd.DEPT_NAME as DEPT_NAME,
+ cm.id as cm_id,
+ cm.ph_id as cm_ph_id,
+ cm.certificate_id,
+ cm.certificate_code,
+ cm.certificate_date,
+ cm.airworthiness_date,
+ cm.astronaut_date,
+ cm.maintenance_status,
+ cm.status as cm_status,
+ ct.name as certificate_type_name,
+ ct.validity_period as validity_period,
+ ct.airworthiness_validity_period as airworthiness_validity_period,
+ ct.astronaut_validity_period as astronaut_validity_period
+ FROM MES_POST_HANDLE ph
+ LEFT JOIN BLADE_USER bu ON ph.USER_ID = bu.ID
+ LEFT JOIN BLADE_DEPT bd ON ph.DEPT_ID = bd.ID
+ LEFT JOIN MES_CERTIFICATE_MAINTENANCE cm ON ph.id = cm.ph_id AND cm.is_deleted = 0
+ LEFT JOIN MES_CERTIFICATE_TYPE ct ON cm.certificate_id = ct.id AND ct.is_deleted = 0
+ WHERE ph.is_deleted = 0
+
+ AND ph.name LIKE CONCAT(CONCAT('%', #{query.name}), '%')
+
+
+ AND ph.dept_id = #{query.deptId}
+
+
+ AND ph.station = #{query.station}
+
+
+ AND ph.skill = #{query.skill}
+
+
+ AND cm.certificate_id = #{query.certificateId}
+
+
+ AND cm.certificate_code LIKE CONCAT(CONCAT('%', #{query.certificateCode}), '%')
+
+
+ AND cm.maintenance_status = #{query.maintenanceStatus}
+
+ ORDER BY ph.create_time DESC, cm.certificate_date DESC
+
+
+
+ SELECT *
+ FROM MES_CERTIFICATE_MAINTENANCE ${ew.customSqlSegment}
+
+
+
+ MERGE INTO MES_CERTIFICATE_MAINTENANCE m
+ USING (SELECT ID,
+ VALIDITY_PERIOD,
+ AIRWORTHINESS_VALIDITY_PERIOD,
+ ASTRONAUT_VALIDITY_PERIOD
+ FROM MES_CERTIFICATE_TYPE
+ WHERE IS_DELETED = 0) ct
+ ON (m.CERTIFICATE_ID = ct.ID AND m.IS_DELETED = 0)
+ WHEN MATCHED THEN
+ UPDATE SET
+ m.MAINTENANCE_STATUS =
+ CASE
+ WHEN m.CERTIFICATE_DATE IS NOT NULL AND ct.VALIDITY_PERIOD IS NOT NULL THEN
+ CASE
+ WHEN m.CERTIFICATE_DATE + NUMTOYMINTERVAL(ct.VALIDITY_PERIOD, 'YEAR') <
+ SYSDATE THEN 2
+ ELSE 1 END
+ WHEN m.AIRWORTHINESS_DATE IS NOT NULL AND ct.AIRWORTHINESS_VALIDITY_PERIOD IS NOT NULL
+ THEN
+ CASE
+ WHEN m.AIRWORTHINESS_DATE +
+ NUMTOYMINTERVAL(ct.AIRWORTHINESS_VALIDITY_PERIOD, 'YEAR') < SYSDATE
+ THEN 2
+ ELSE 1 END
+ WHEN m.ASTRONAUT_DATE IS NOT NULL AND ct.ASTRONAUT_VALIDITY_PERIOD IS NOT NULL THEN
+ CASE
+ WHEN m.ASTRONAUT_DATE +
+ NUMTOYMINTERVAL(ct.ASTRONAUT_VALIDITY_PERIOD, 'YEAR') < SYSDATE THEN 2
+ ELSE 1 END
+ ELSE 1
+ END,
+ m.UPDATE_TIME = SYSDATE WHERE m.MAINTENANCE_STATUS != 3
+
+
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateTypeMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateTypeMapper.java
new file mode 100644
index 00000000..8c322867
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateTypeMapper.java
@@ -0,0 +1,39 @@
+package org.springblade.desk.jobTransfer.mapper;
+
+import org.springblade.desk.jobTransfer.pojo.entity.CertificateTypeEntity;
+import org.springblade.desk.jobTransfer.pojo.excel.CertificateTypeExcel;
+import org.springblade.desk.jobTransfer.pojo.vo.CertificateTypeVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 证书类型 Mapper 接口
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+public interface CertificateTypeMapper extends BaseMapper {
+
+ /**
+ * 自定义分页
+ *
+ * @param page 分页参数
+ * @param certificateType 查询参数
+ * @return List
+ */
+ List selectCertificateTypePage(IPage page, CertificateTypeVO certificateType);
+
+
+ /**
+ * 获取导出数据
+ *
+ * @param queryWrapper 查询条件
+ * @return List
+ */
+ List exportCertificateType(@Param("ew") Wrapper queryWrapper);
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateTypeMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateTypeMapper.xml
new file mode 100644
index 00000000..e8d02765
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateTypeMapper.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select *
+ from MES_CERTIFICATE_TYPE
+ where is_deleted = 0
+
+
+
+
+ SELECT *
+ FROM MES_CERTIFICATE_TYPE ${ew.customSqlSegment}
+
+
+
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CultivateDetailMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CultivateDetailMapper.java
new file mode 100644
index 00000000..34b87a7d
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CultivateDetailMapper.java
@@ -0,0 +1,44 @@
+package org.springblade.desk.jobTransfer.mapper;
+
+import org.springblade.desk.jobTransfer.pojo.entity.CultivateDetailEntity;
+import org.springblade.desk.jobTransfer.pojo.excel.CultivateDetailExcel;
+import org.springblade.desk.jobTransfer.pojo.request.CultivateDetailQuery;
+import org.springblade.desk.jobTransfer.pojo.vo.CultivateDetailVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 培训安排 Mapper 接口
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+public interface CultivateDetailMapper extends BaseMapper {
+
+ /**
+ * 自定义分页
+ *
+ * @param page 分页参数
+ * @param query 查询参数
+ * @return List
+ */
+ List selectCultivateDetailPage(IPage page, CultivateDetailQuery query);
+
+
+ /**
+ * 获取导出数据
+ *
+ * @param queryWrapper 查询条件
+ * @return List
+ */
+ List exportCultivateDetail(@Param("ew") Wrapper queryWrapper);
+
+ /**
+ * 培训超期
+ */
+ void exceed();
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CultivateDetailMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CultivateDetailMapper.xml
new file mode 100644
index 00000000..1a7f9c64
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CultivateDetailMapper.xml
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT
+ cd.*,
+ bu.real_name as name,
+ bu.code as code,
+ mph.staff_type,
+ mp.cycle,
+ mp.early_warning_day,
+ mp.name as plan_name
+ FROM
+ mes_cultivate_detail cd
+ LEFT JOIN
+ mes_post_handle mph ON cd.ph_id = mph.id AND mph.is_deleted = 0
+ LEFT JOIN
+ mes_training_plan mp ON cd.plan_id = mp.id AND mp.is_deleted = 0
+ LEFT JOIN
+ blade_user bu ON mph.user_id = bu.id
+ WHERE
+ cd.is_deleted = 0
+
+ AND bu.real_name LIKE CONCAT(CONCAT('%', #{query.name}), '%')
+
+
+ AND bu.code LIKE CONCAT(CONCAT('%', #{query.code}), '%')
+
+
+ AND mph.staff_type = #{query.staffType}
+
+
+ AND cd.type = #{query.type}
+
+
+ AND cd.plan_id = #{query.planId}
+
+
+ AND cd.teacher_id = #{query.teacherId}
+
+
+ AND cd.ca_status = #{query.caStatus}
+
+
+ AND cd.distribute_time = #{query.distributeTime}
+
+
+ AND mp.cycle = #{query.cycle}
+
+
+ AND mp.early_warning_day = #{query.earlyWarningDay}
+
+
+
+ AND cd.DISTRIBUTE_TIME >= #{query.startTime}
+
+
+ AND cd.DISTRIBUTE_TIME <= #{query.endTime}
+
+ ORDER BY cd.create_time DESC
+
+
+
+
+ SELECT *
+ FROM MES_CULTIVATE_DETAIL ${ew.customSqlSegment}
+
+
+
+ UPDATE MES_CULTIVATE_DETAIL cd
+ SET cd.CA_STATUS = 4, -- 4表示已到期
+ cd.UPDATE_TIME = SYSDATE
+ WHERE cd.CA_STATUS = 3 -- 当前状态为已下发-培训中
+ AND cd.IS_DELETED = 0
+ AND EXISTS (SELECT 1
+ FROM MES_TRAINING_PLAN tp
+ WHERE tp.ID = cd.PLAN_ID
+ AND tp.IS_DELETED = 0
+ AND SYSDATE > (cd.DISTRIBUTE_TIME + tp.CYCLE))
+
+
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/EquipmentMaintenanceMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/EquipmentMaintenanceMapper.java
new file mode 100644
index 00000000..845dfd8f
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/EquipmentMaintenanceMapper.java
@@ -0,0 +1,42 @@
+package org.springblade.desk.jobTransfer.mapper;
+
+import org.springblade.desk.jobTransfer.pojo.entity.EquipmentMaintenanceEntity;
+import org.springblade.desk.jobTransfer.pojo.excel.EquipmentMaintenanceExcel;
+import org.springblade.desk.jobTransfer.pojo.request.EquipmentMaintenanceQuery;
+import org.springblade.desk.jobTransfer.pojo.vo.EquipmentMaintenanceListVO;
+import org.springblade.desk.jobTransfer.pojo.vo.EquipmentMaintenanceVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 岗位设备维护 Mapper 接口
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+public interface EquipmentMaintenanceMapper extends BaseMapper {
+
+ /**
+ * 自定义分页
+ *
+ * @param page 分页参数
+ * @param query 查询参数
+ * @return List
+ */
+ List selectEquipmentMaintenancePage(IPage page, EquipmentMaintenanceQuery query);
+
+
+ /**
+ * 获取导出数据
+ *
+ * @param queryWrapper 查询条件
+ * @return List
+ */
+ List exportEquipmentMaintenance(@Param("ew") Wrapper queryWrapper);
+
+ void updateMaintenanceStatus();
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/EquipmentMaintenanceMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/EquipmentMaintenanceMapper.xml
new file mode 100644
index 00000000..8a233930
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/EquipmentMaintenanceMapper.xml
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT
+ ph.ID as ph_id,
+ ph.*,
+ bd.DEPT_NAME as DEPT_NAME,
+ em.id as em_id,
+ em.ph_id as em_ph_id,
+ em.equipment_id,
+ em.equipment_validity_period,
+ em.equipment_date,
+ em.maintenance_status,
+ equipment.device_name,
+ equipment.device_code,
+ equipment.mac_spec
+ FROM MES_POST_HANDLE ph
+ LEFT JOIN BLADE_USER bu ON ph.USER_ID = bu.ID
+ LEFT JOIN BLADE_DEPT bd ON ph.DEPT_ID = bd.ID
+ LEFT JOIN MES_EQUIPMENT_MAINTENANCE em ON ph.id = em.ph_id AND em.is_deleted = 0
+ LEFT JOIN MES_EQUIPMENT equipment ON em.equipment_id = equipment.id AND equipment.is_deleted = 0
+ WHERE ph.is_deleted = 0
+
+ AND ph.name LIKE CONCAT(CONCAT('%', #{query.name}), '%')
+
+
+ AND ph.dept_id = #{query.deptId}
+
+
+ AND ph.skill = #{query.skill}
+
+
+ AND ph.station = #{query.station}
+
+
+ AND em.equipment_id = #{query.equipmentId}
+
+
+
+
+
+ AND em.maintenance_status = #{query.maintenanceStatus}
+
+ ORDER BY ph.create_time DESC, em.equipment_date DESC
+
+
+
+
+ SELECT *
+ FROM MES_EQUIPMENT_MAINTENANCE ${ew.customSqlSegment}
+
+
+
+ UPDATE MES_EQUIPMENT_MAINTENANCE
+ SET MAINTENANCE_STATUS = CASE
+ WHEN EQUIPMENT_DATE +
+ NUMTOYMINTERVAL(EQUIPMENT_VALIDITY_PERIOD, 'YEAR') < SYSDATE
+ THEN 2
+ ELSE 1 END,
+ UPDATE_TIME = SYSDATE
+ WHERE IS_DELETED = 0
+ AND MAINTENANCE_STATUS != 3
+
+
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/PostHandleMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/PostHandleMapper.java
new file mode 100644
index 00000000..ed153d93
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/PostHandleMapper.java
@@ -0,0 +1,49 @@
+package org.springblade.desk.jobTransfer.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.desk.jobTransfer.pojo.entity.PostHandleEntity;
+import org.springblade.desk.jobTransfer.pojo.excel.PostHandleExcel;
+import org.springblade.desk.jobTransfer.pojo.request.PostHandleQuery;
+import org.springblade.desk.jobTransfer.pojo.vo.PostHandleVO;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 岗位处理 Mapper 接口
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+public interface PostHandleMapper extends BaseMapper {
+
+ /**
+ * 自定义分页
+ *
+ * @param page 分页参数
+ * @param postHandle 查询参数
+ * @return List
+ */
+ List selectPostHandlePage(IPage page, PostHandleQuery postHandle);
+
+ /**
+ * 自定义分页连表
+ *
+ * @param page 分页参数
+ * @param postHandle 查询参数
+ * @return List
+ */
+ List selectPostHandleVOByCondition(IPage page, PostHandleQuery postHandle);
+
+
+ /**
+ * 获取导出数据
+ *
+ * @param queryWrapper 查询条件
+ * @return List
+ */
+ List exportPostHandle(@Param("ew") Wrapper queryWrapper);
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/PostHandleMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/PostHandleMapper.xml
new file mode 100644
index 00000000..26252749
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/PostHandleMapper.xml
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select *
+ from MES_POST_HANDLE
+ where is_deleted = 0
+
+
+
+
+ SELECT *
+ FROM MES_POST_HANDLE ${ew.customSqlSegment}
+
+
+
+
+ SELECT
+ mph.*, -- 主表所有字段
+ bu.REAL_NAME as USER_NAME, -- 用户姓名
+ bu.CODE as USER_CODE, -- 用户工号
+ bd.DEPT_NAME as DEPT_NAME -- 班组名称
+ FROM MES_POST_HANDLE mph
+ LEFT JOIN BLADE_USER bu ON mph.USER_ID = bu.ID -- 关联用户表
+ LEFT JOIN BLADE_DEPT bd ON mph.DEPT_ID = bd.ID -- 关联部门表
+ WHERE mph.IS_DELETED = 0
+
+ AND bu.CODE = #{postHandle.userCode}
+
+
+ AND mph.DEPT_ID = #{postHandle.deptId}
+
+
+ AND bu.REAL_NAME LIKE CONCAT('%', CONCAT(#{postHandle.name}, '%'))
+
+
+ AND mph.STATION LIKE CONCAT('%', CONCAT(#{postHandle.station}, '%'))
+
+
+ AND mph.SKILL = #{postHandle.skill}
+
+
+ AND mph.PH_STATUS = #{postHandle.phStatus}
+
+
+ AND mph.IN_JOB_DATE = #{postHandle.inJobDate}
+
+
+ AND mph.CON_EXP_DATE = #{postHandle.conExpDate}
+
+ ORDER BY mph.CREATE_TIME DESC
+
+
+
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/TrainingPlanMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/TrainingPlanMapper.java
new file mode 100644
index 00000000..74e8ad84
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/TrainingPlanMapper.java
@@ -0,0 +1,39 @@
+package org.springblade.desk.jobTransfer.mapper;
+
+import org.springblade.desk.jobTransfer.pojo.entity.TrainingPlanEntity;
+import org.springblade.desk.jobTransfer.pojo.excel.TrainingPlanExcel;
+import org.springblade.desk.jobTransfer.pojo.vo.TrainingPlanVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 培训计划模板 Mapper 接口
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+public interface TrainingPlanMapper extends BaseMapper {
+
+ /**
+ * 自定义分页
+ *
+ * @param page 分页参数
+ * @param trainingPlan 查询参数
+ * @return List
+ */
+ List selectTrainingPlanPage(IPage page, TrainingPlanEntity trainingPlan);
+
+
+ /**
+ * 获取导出数据
+ *
+ * @param queryWrapper 查询条件
+ * @return List
+ */
+ List exportTrainingPlan(@Param("ew") Wrapper queryWrapper);
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/TrainingPlanMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/TrainingPlanMapper.xml
new file mode 100644
index 00000000..9996d23c
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/TrainingPlanMapper.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select *
+ from MES_TRAINING_PLAN
+ where is_deleted = 0
+
+
+
+
+ SELECT *
+ FROM MES_TRAINING_PLAN ${ew.customSqlSegment}
+
+
+
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/ICertificateMaintenanceService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/ICertificateMaintenanceService.java
new file mode 100644
index 00000000..a0e5d0b9
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/ICertificateMaintenanceService.java
@@ -0,0 +1,50 @@
+package org.springblade.desk.jobTransfer.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import org.springblade.desk.jobTransfer.pojo.entity.CertificateMaintenanceEntity;
+import org.springblade.desk.jobTransfer.pojo.excel.CertificateMaintenanceExcel;
+import org.springblade.desk.jobTransfer.pojo.request.CertificateLedgerQuery;
+import org.springblade.desk.jobTransfer.pojo.vo.CertificateLedgerVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseService;
+
+import java.util.List;
+
+/**
+ * 证书维护 服务类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+public interface ICertificateMaintenanceService extends BaseService {
+ /**
+ * 自定义分页
+ *
+ * @param page 分页参数
+ * @param certificateLedgerQuery 查询参数
+ * @return IPage
+ */
+ IPage selectCertificateMaintenancePage(IPage page, CertificateLedgerQuery certificateLedgerQuery);
+
+
+ /**
+ * 导出数据
+ *
+ * @param queryWrapper 查询条件
+ * @return List
+ */
+ List exportCertificateMaintenance(Wrapper queryWrapper);
+
+ /**
+ * 更新证书维护状态
+ */
+ void updateMaintenanceStatus();
+
+ /**
+ * 批量提交
+ *
+ * @param certificateMaintenances
+ * @return
+ */
+ Boolean submitList(List certificateMaintenances);
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/ICertificateTypeService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/ICertificateTypeService.java
new file mode 100644
index 00000000..e976a6dd
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/ICertificateTypeService.java
@@ -0,0 +1,37 @@
+package org.springblade.desk.jobTransfer.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import org.springblade.desk.jobTransfer.pojo.entity.CertificateTypeEntity;
+import org.springblade.desk.jobTransfer.pojo.excel.CertificateTypeExcel;
+import org.springblade.desk.jobTransfer.pojo.vo.CertificateTypeVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseService;
+
+import java.util.List;
+
+/**
+ * 证书类型 服务类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+public interface ICertificateTypeService extends BaseService {
+ /**
+ * 自定义分页
+ *
+ * @param page 分页参数
+ * @param certificateType 查询参数
+ * @return IPage
+ */
+ IPage selectCertificateTypePage(IPage page, CertificateTypeVO certificateType);
+
+
+ /**
+ * 导出数据
+ *
+ * @param queryWrapper 查询条件
+ * @return List
+ */
+ List exportCertificateType(Wrapper queryWrapper);
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/ICultivateDetailService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/ICultivateDetailService.java
new file mode 100644
index 00000000..febffdc1
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/ICultivateDetailService.java
@@ -0,0 +1,50 @@
+package org.springblade.desk.jobTransfer.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import org.springblade.core.tool.api.R;
+import org.springblade.desk.jobTransfer.pojo.entity.CultivateDetailEntity;
+import org.springblade.desk.jobTransfer.pojo.excel.CultivateDetailExcel;
+import org.springblade.desk.jobTransfer.pojo.request.CultivateDetailQuery;
+import org.springblade.desk.jobTransfer.pojo.vo.CultivateDetailVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseService;
+
+import java.util.List;
+
+/**
+ * 培训安排 服务类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+public interface ICultivateDetailService extends BaseService {
+ /**
+ * 自定义分页
+ *
+ * @param page 分页参数
+ * @param cultivateDetail 查询参数
+ * @return IPage
+ */
+ IPage selectCultivateDetailPage(IPage page, CultivateDetailQuery cultivateDetail);
+
+
+ /**
+ * 导出数据
+ *
+ * @param queryWrapper 查询条件
+ * @return List
+ */
+ List exportCultivateDetail(Wrapper queryWrapper);
+
+ /**
+ * 批量培训完成
+ *
+ * @param cultivateDetails
+ * @return
+ */
+ R trainingCompleted(List cultivateDetails);
+ /**
+ * 培训超期
+ */
+ void exceed();
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/IEquipmentMaintenanceService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/IEquipmentMaintenanceService.java
new file mode 100644
index 00000000..20a8a7ed
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/IEquipmentMaintenanceService.java
@@ -0,0 +1,40 @@
+package org.springblade.desk.jobTransfer.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import org.springblade.desk.jobTransfer.pojo.entity.EquipmentMaintenanceEntity;
+import org.springblade.desk.jobTransfer.pojo.excel.EquipmentMaintenanceExcel;
+import org.springblade.desk.jobTransfer.pojo.request.EquipmentMaintenanceQuery;
+import org.springblade.desk.jobTransfer.pojo.vo.EquipmentMaintenanceListVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseService;
+
+import java.util.List;
+
+/**
+ * 岗位设备维护 服务类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+public interface IEquipmentMaintenanceService extends BaseService {
+ /**
+ * 自定义分页
+ *
+ * @param page 分页参数
+ * @param equipmentMaintenanceQuery 查询参数
+ * @return IPage
+ */
+ IPage selectEquipmentMaintenancePage(IPage page, EquipmentMaintenanceQuery equipmentMaintenanceQuery);
+
+
+ /**
+ * 导出数据
+ *
+ * @param queryWrapper 查询条件
+ * @return List
+ */
+ List exportEquipmentMaintenance(Wrapper queryWrapper);
+
+ Boolean submitList(List equipmentMaintenanceEntities);
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/IPostHandleService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/IPostHandleService.java
new file mode 100644
index 00000000..45045850
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/IPostHandleService.java
@@ -0,0 +1,101 @@
+package org.springblade.desk.jobTransfer.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import org.springblade.core.tool.api.R;
+import org.springblade.desk.jobTransfer.pojo.entity.PostHandleEntity;
+import org.springblade.desk.jobTransfer.pojo.excel.PostHandleExcel;
+import org.springblade.desk.jobTransfer.pojo.excel.PostHandleImport;
+import org.springblade.desk.jobTransfer.pojo.request.PostHandleQuery;
+import org.springblade.desk.jobTransfer.pojo.vo.PostHandleVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseService;
+
+import java.util.List;
+
+/**
+ * 岗位处理 服务类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+public interface IPostHandleService extends BaseService {
+ /**
+ * 自定义分页
+ *
+ * @param page 分页参数
+ * @param postHandle 查询参数
+ * @return IPage
+ */
+ IPage selectPostHandlePage(IPage page, PostHandleQuery postHandle);
+
+
+ /**
+ * 导出数据
+ *
+ * @param queryWrapper 查询条件
+ * @return List
+ */
+ List exportPostHandle(Wrapper queryWrapper);
+
+ /**
+ * 批量转正
+ *
+ * @param ids
+ * @return
+ */
+ R regularization(List ids);
+
+ /**
+ * 新增
+ *
+ * @param postHandleEntity
+ * @return
+ */
+ R saveOrUpdateHandle(PostHandleEntity postHandleEntity);
+
+ /**
+ * 批量转岗计划
+ *
+ * @param ids
+ * @param teacherId
+ * @param teacherName
+ * @param trainingPlanId
+ * @return
+ */
+ R JobTransferPlan(List ids, Long teacherId, String teacherName, Long trainingPlanId);
+
+ /**
+ * 批量下岗计划
+ *
+ * @param ids
+ * @param teacherId
+ * @param teacherName
+ * @param trainingPlanId
+ * @return
+ */
+ R layoffPlan(List ids, Long teacherId, String teacherName, Long trainingPlanId);
+
+ /**
+ * 导入Excel
+ *
+ * @param postHandleEntityList
+ * @return
+ */
+ R saveExcelData(List postHandleEntityList);
+
+ /**
+ * 转岗
+ *
+ * @param postHandleEntity
+ * @return
+ */
+ R jobTransfer(PostHandleEntity postHandleEntity);
+
+ /**
+ * 离职
+ *
+ * @param postHandleEntity
+ * @return
+ */
+ R depart(PostHandleEntity postHandleEntity);
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/ITrainingPlanService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/ITrainingPlanService.java
new file mode 100644
index 00000000..bd0bbacb
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/ITrainingPlanService.java
@@ -0,0 +1,37 @@
+package org.springblade.desk.jobTransfer.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import org.springblade.desk.jobTransfer.pojo.entity.TrainingPlanEntity;
+import org.springblade.desk.jobTransfer.pojo.excel.TrainingPlanExcel;
+import org.springblade.desk.jobTransfer.pojo.vo.TrainingPlanVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseService;
+
+import java.util.List;
+
+/**
+ * 培训计划模板 服务类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+public interface ITrainingPlanService extends BaseService {
+ /**
+ * 自定义分页
+ *
+ * @param page 分页参数
+ * @param trainingPlan 查询参数
+ * @return IPage
+ */
+ IPage selectTrainingPlanPage(IPage page, TrainingPlanEntity trainingPlan);
+
+
+ /**
+ * 导出数据
+ *
+ * @param queryWrapper 查询条件
+ * @return List
+ */
+ List exportTrainingPlan(Wrapper queryWrapper);
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/CertificateMaintenanceServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/CertificateMaintenanceServiceImpl.java
new file mode 100644
index 00000000..df4c6118
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/CertificateMaintenanceServiceImpl.java
@@ -0,0 +1,59 @@
+package org.springblade.desk.jobTransfer.service.impl;
+
+import org.springblade.desk.jobTransfer.pojo.entity.CertificateMaintenanceEntity;
+import org.springblade.desk.jobTransfer.pojo.excel.CertificateMaintenanceExcel;
+import org.springblade.desk.jobTransfer.pojo.request.CertificateLedgerQuery;
+import org.springblade.desk.jobTransfer.pojo.vo.CertificateLedgerVO;
+import org.springblade.desk.jobTransfer.mapper.CertificateMaintenanceMapper;
+import org.springblade.desk.jobTransfer.service.ICertificateMaintenanceService;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 证书维护 服务实现类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Service
+public class CertificateMaintenanceServiceImpl extends BaseServiceImpl implements ICertificateMaintenanceService {
+
+ @Override
+ public IPage selectCertificateMaintenancePage(IPage page, CertificateLedgerQuery certificateLedgerQuery) {
+ return page.setRecords(baseMapper.selectCertificateMaintenancePage(page, certificateLedgerQuery));
+ }
+
+
+ @Override
+ public List exportCertificateMaintenance(Wrapper queryWrapper) {
+ List certificateMaintenanceList = baseMapper.exportCertificateMaintenance(queryWrapper);
+ //certificateMaintenanceList.forEach(certificateMaintenance -> {
+ // certificateMaintenance.setTypeName(DictCache.getValue(DictEnum.YES_NO, CertificateMaintenance.getType()));
+ //});
+ return certificateMaintenanceList;
+ }
+
+ @Override
+ public void updateMaintenanceStatus() {
+ baseMapper.updateMaintenanceStatus();
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Boolean submitList(List certificateMaintenances) {
+ //保存基本字段
+ boolean saved = this.saveOrUpdateBatch(certificateMaintenances);
+ //计算过期时间和状态,批量更新
+ baseMapper.updateMaintenanceStatus();
+ return saved;
+ }
+
+
+
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/CertificateTypeServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/CertificateTypeServiceImpl.java
new file mode 100644
index 00000000..a6bc9570
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/CertificateTypeServiceImpl.java
@@ -0,0 +1,39 @@
+package org.springblade.desk.jobTransfer.service.impl;
+
+import org.springblade.desk.jobTransfer.pojo.entity.CertificateTypeEntity;
+import org.springblade.desk.jobTransfer.pojo.excel.CertificateTypeExcel;
+import org.springblade.desk.jobTransfer.pojo.vo.CertificateTypeVO;
+import org.springblade.desk.jobTransfer.mapper.CertificateTypeMapper;
+import org.springblade.desk.jobTransfer.service.ICertificateTypeService;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseServiceImpl;
+
+import java.util.List;
+
+/**
+ * 证书类型 服务实现类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Service
+public class CertificateTypeServiceImpl extends BaseServiceImpl implements ICertificateTypeService {
+
+ @Override
+ public IPage selectCertificateTypePage(IPage page, CertificateTypeVO certificateType) {
+ return page.setRecords(baseMapper.selectCertificateTypePage(page, certificateType));
+ }
+
+
+ @Override
+ public List exportCertificateType(Wrapper queryWrapper) {
+ List certificateTypeList = baseMapper.exportCertificateType(queryWrapper);
+ //certificateTypeList.forEach(certificateType -> {
+ // certificateType.setTypeName(DictCache.getValue(DictEnum.YES_NO, CertificateType.getType()));
+ //});
+ return certificateTypeList;
+ }
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/CultivateDetailServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/CultivateDetailServiceImpl.java
new file mode 100644
index 00000000..4f7ad9d1
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/CultivateDetailServiceImpl.java
@@ -0,0 +1,95 @@
+package org.springblade.desk.jobTransfer.service.impl;
+
+import jakarta.annotation.Resource;
+import org.springblade.core.tool.api.R;
+import org.springblade.desk.jobTransfer.pojo.entity.CultivateDetailEntity;
+import org.springblade.desk.jobTransfer.pojo.entity.PostHandleEntity;
+import org.springblade.desk.jobTransfer.pojo.enums.PostHandleStatusEnum;
+import org.springblade.desk.jobTransfer.pojo.excel.CultivateDetailExcel;
+import org.springblade.desk.jobTransfer.pojo.request.CultivateDetailQuery;
+import org.springblade.desk.jobTransfer.pojo.vo.CultivateDetailVO;
+import org.springblade.desk.jobTransfer.mapper.CultivateDetailMapper;
+import org.springblade.desk.jobTransfer.service.ICultivateDetailService;
+import org.springblade.desk.jobTransfer.service.IPostHandleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * 培训安排 服务实现类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Service
+public class CultivateDetailServiceImpl extends BaseServiceImpl implements ICultivateDetailService {
+
+ private IPostHandleService postHandleService;
+
+ @Resource
+ @Lazy
+ public void setPostHandleService(IPostHandleService postHandleService) {
+ this.postHandleService = postHandleService;
+ }
+
+ @Override
+ public IPage selectCultivateDetailPage(IPage page, CultivateDetailQuery cultivateDetailQuery) {
+ return page.setRecords(baseMapper.selectCultivateDetailPage(page, cultivateDetailQuery));
+ }
+
+
+ @Override
+ public List exportCultivateDetail(Wrapper queryWrapper) {
+ List cultivateDetailList = baseMapper.exportCultivateDetail(queryWrapper);
+ //cultivateDetailList.forEach(cultivateDetail -> {
+ // cultivateDetail.setTypeName(DictCache.getValue(DictEnum.YES_NO, CultivateDetail.getType()));
+ //});
+ return cultivateDetailList;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R trainingCompleted(List cultivateDetails) {
+ //1.批量修改培训计划状态
+ boolean saved = this.saveOrUpdateBatch(cultivateDetails);
+ if (!saved) {
+ return R.fail("批量操作失败");
+ }
+ //2.批量修改人员岗位表数据
+ Set phIds = cultivateDetails.stream().map(CultivateDetailEntity::getPhId).collect(Collectors.toSet());
+ boolean update1 = postHandleService.lambdaUpdate()
+ .in(PostHandleEntity::getId, phIds)
+ .eq(PostHandleEntity::getPhStatus, PostHandleStatusEnum.JOB_TRANSFER.getCode())
+ .set(PostHandleEntity::getPhStatus, PostHandleStatusEnum.JOB_TRANSFER_TRAINED.getCode())
+ .set(PostHandleEntity::getUpdateTime, new Date())
+ .update();
+ boolean update2 = postHandleService.lambdaUpdate()
+ .in(PostHandleEntity::getId, phIds)
+ .eq(PostHandleEntity::getPhStatus, PostHandleStatusEnum.LAID_OFF.getCode())
+ .set(PostHandleEntity::getPhStatus, PostHandleStatusEnum.LAID_OFF_TRAINED.getCode())
+ .set(PostHandleEntity::getUpdateTime, new Date())
+ .update();
+ boolean update3 = postHandleService.lambdaUpdate()
+ .in(PostHandleEntity::getId, phIds)
+ .eq(PostHandleEntity::getPhStatus, PostHandleStatusEnum.IN_PRACTICE.getCode())
+ .set(PostHandleEntity::getPhStatus, PostHandleStatusEnum.IN_PRACTICE_TRAINED.getCode())
+ .set(PostHandleEntity::getUpdateTime, new Date())
+ .update();
+ return R.status(saved);
+ }
+
+ @Override
+ public void exceed() {
+ baseMapper.exceed();
+ }
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/EquipmentMaintenanceServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/EquipmentMaintenanceServiceImpl.java
new file mode 100644
index 00000000..8c48c7e5
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/EquipmentMaintenanceServiceImpl.java
@@ -0,0 +1,49 @@
+package org.springblade.desk.jobTransfer.service.impl;
+
+import org.springblade.desk.jobTransfer.pojo.entity.EquipmentMaintenanceEntity;
+import org.springblade.desk.jobTransfer.pojo.excel.EquipmentMaintenanceExcel;
+import org.springblade.desk.jobTransfer.pojo.request.EquipmentMaintenanceQuery;
+import org.springblade.desk.jobTransfer.pojo.vo.EquipmentMaintenanceListVO;
+import org.springblade.desk.jobTransfer.pojo.vo.EquipmentMaintenanceVO;
+import org.springblade.desk.jobTransfer.mapper.EquipmentMaintenanceMapper;
+import org.springblade.desk.jobTransfer.service.IEquipmentMaintenanceService;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseServiceImpl;
+
+import java.util.List;
+
+/**
+ * 岗位设备维护 服务实现类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Service
+public class EquipmentMaintenanceServiceImpl extends BaseServiceImpl implements IEquipmentMaintenanceService {
+
+ @Override
+ public IPage selectEquipmentMaintenancePage(IPage page, EquipmentMaintenanceQuery equipmentMaintenanceQuery) {
+ return page.setRecords(baseMapper.selectEquipmentMaintenancePage(page, equipmentMaintenanceQuery));
+ }
+
+
+ @Override
+ public List exportEquipmentMaintenance(Wrapper queryWrapper) {
+ List equipmentMaintenanceList = baseMapper.exportEquipmentMaintenance(queryWrapper);
+ //equipmentMaintenanceList.forEach(equipmentMaintenance -> {
+ // equipmentMaintenance.setTypeName(DictCache.getValue(DictEnum.YES_NO, EquipmentMaintenance.getType()));
+ //});
+ return equipmentMaintenanceList;
+ }
+
+ @Override
+ public Boolean submitList(List equipmentMaintenanceEntities) {
+ boolean saved = this.saveOrUpdateBatch(equipmentMaintenanceEntities);
+ //更新状态
+ baseMapper.updateMaintenanceStatus();
+ return saved;
+ }
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/PostHandleServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/PostHandleServiceImpl.java
new file mode 100644
index 00000000..40316691
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/PostHandleServiceImpl.java
@@ -0,0 +1,338 @@
+package org.springblade.desk.jobTransfer.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import jakarta.annotation.Resource;
+import org.springblade.core.tool.api.R;
+import org.springblade.desk.jobTransfer.pojo.entity.CertificateMaintenanceEntity;
+import org.springblade.desk.jobTransfer.pojo.entity.CultivateDetailEntity;
+import org.springblade.desk.jobTransfer.pojo.entity.EquipmentMaintenanceEntity;
+import org.springblade.desk.jobTransfer.pojo.entity.PostHandleEntity;
+import org.springblade.desk.jobTransfer.pojo.enums.*;
+import org.springblade.desk.jobTransfer.pojo.excel.PostHandleExcel;
+import org.springblade.desk.jobTransfer.pojo.excel.PostHandleImport;
+import org.springblade.desk.jobTransfer.pojo.request.PostHandleQuery;
+import org.springblade.desk.jobTransfer.pojo.vo.PostHandleVO;
+import org.springblade.desk.jobTransfer.mapper.PostHandleMapper;
+import org.springblade.desk.jobTransfer.service.ICertificateMaintenanceService;
+import org.springblade.desk.jobTransfer.service.ICultivateDetailService;
+import org.springblade.desk.jobTransfer.service.IEquipmentMaintenanceService;
+import org.springblade.desk.jobTransfer.service.IPostHandleService;
+import org.springblade.system.cache.SysCache;
+import org.springblade.system.cache.UserCache;
+import org.springblade.system.pojo.entity.User;
+import org.springblade.system.pojo.entity.UserInfo;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 岗位处理 服务实现类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Service
+public class PostHandleServiceImpl extends BaseServiceImpl implements IPostHandleService {
+
+ private ICultivateDetailService iCultivateDetailService;
+ private ICertificateMaintenanceService certificateMaintenanceService;
+ private IEquipmentMaintenanceService equipmentMaintenanceService;
+
+ @Resource
+ public void setICultivateDetailService(ICultivateDetailService iCultivateDetailService) {
+ this.iCultivateDetailService = iCultivateDetailService;
+ }
+
+ @Resource
+ public void setCertificateMaintenanceService(ICertificateMaintenanceService certificateMaintenanceService) {
+ this.certificateMaintenanceService = certificateMaintenanceService;
+ }
+
+ @Resource
+ public void setEquipmentMaintenanceService(IEquipmentMaintenanceService equipmentMaintenanceService) {
+ this.equipmentMaintenanceService = equipmentMaintenanceService;
+ }
+
+ @Override
+ public IPage selectPostHandlePage(IPage page, PostHandleQuery postHandleQuery) {
+// return page.setRecords(baseMapper.selectPostHandlePage(page, postHandle));
+ List dataList = baseMapper.selectPostHandleVOByCondition(page, postHandleQuery);
+ return page.setRecords(dataList);
+ }
+
+
+ @Override
+ public List exportPostHandle(Wrapper queryWrapper) {
+ List postHandleList = baseMapper.exportPostHandle(queryWrapper);
+ //postHandleList.forEach(postHandle -> {
+ // postHandle.setTypeName(DictCache.getValue(DictEnum.YES_NO, PostHandle.getType()));
+ //});
+ return postHandleList;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R regularization(List ids) {
+ // 1. 验证阶段:查看匹配的数据数量,如数量和id不同,则失败
+ Long matchedCount = this.lambdaQuery()
+ .in(PostHandleEntity::getId, ids)
+ .eq(PostHandleEntity::getPhStatus, PostHandleStatusEnum.IN_PRACTICE_TRAINED.getCode().shortValue())
+ .eq(PostHandleEntity::getStaffType, StaffTypeEnum.FIELD_WORK.getCode())
+ .eq(PostHandleEntity::getIsDeleted, 0)
+ .count();
+ if (matchedCount < ids.size()) {
+ return R.fail("请在实习培训完成后操作");
+ }
+
+ //更新阶段
+ boolean updateSuccess = this.lambdaUpdate()
+ .in(PostHandleEntity::getId, ids)
+ .eq(PostHandleEntity::getStaffType, StaffTypeEnum.FIELD_WORK.getCode())
+ .set(PostHandleEntity::getStaffType, StaffTypeEnum.FORMAL.getCode())
+ .set(PostHandleEntity::getPhStatus, PostHandleStatusEnum.NORMALITY.getCode())
+ .set(PostHandleEntity::getUpdateTime, new Date())
+ .update();
+ return R.status(updateSuccess);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R saveOrUpdateHandle(PostHandleEntity postHandleEntity) {
+
+ if (null != postHandleEntity.getId() && postHandleEntity.getId() > 0) {
+ //更新
+ return R.status(this.updateById(postHandleEntity));
+ } else {
+ //同一用户不允许多次新增
+ Long existCount = this.lambdaQuery()
+ .eq(PostHandleEntity::getUserId, postHandleEntity.getUserId())
+ .eq(PostHandleEntity::getIsDeleted, 0)
+ .count();
+ if (existCount > 0) {
+ return R.fail("该用户已存在岗位处理记录,不允许重复添加");
+ }
+ // 如果是正式工状态为正常
+ if (postHandleEntity.getStaffType() == StaffTypeEnum.FORMAL.getCode().shortValue()) {
+ postHandleEntity.setPhStatus(PostHandleStatusEnum.NORMALITY.getCode().shortValue());
+ } else {
+ postHandleEntity.setPhStatus(PostHandleStatusEnum.IN_PRACTICE.getCode().shortValue());
+ }
+ boolean save = this.save(postHandleEntity);
+ //实习工自动创建一条培训计划
+ createPlan(Arrays.asList(postHandleEntity));
+ return R.status(save);
+ }
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R JobTransferPlan(List ids, Long teacherId, String teacherName, Long trainingPlanId) {
+ // 1. 验证阶段:查看匹配的数据数量,如数量和id不同,则失败
+ Long matchedCount = this.lambdaQuery()
+ .in(PostHandleEntity::getId, ids)
+ .eq(PostHandleEntity::getPhStatus, PostHandleStatusEnum.NORMALITY.getCode())
+ .eq(PostHandleEntity::getStaffType, StaffTypeEnum.FORMAL.getCode())
+ .eq(PostHandleEntity::getIsDeleted, 0)
+ .count();
+ if (matchedCount < ids.size()) {
+ return R.fail("请选择正式工安排转岗计划");
+ }
+ // 2. 更新人员岗位数据
+ boolean updateSuccess = this.lambdaUpdate()
+ .in(PostHandleEntity::getId, ids)
+ .eq(PostHandleEntity::getPhStatus, PostHandleStatusEnum.NORMALITY.getCode())
+ .eq(PostHandleEntity::getStaffType, StaffTypeEnum.FORMAL.getCode())
+ .set(PostHandleEntity::getPhStatus, PostHandleStatusEnum.JOB_TRANSFER.getCode())
+ .set(PostHandleEntity::getUpdateTime, new Date())
+ .update();
+ if (!updateSuccess) {
+ return R.fail("转岗计划操作失败");
+ }
+ // 3. 为每条转岗计划新增培训安排
+ List cultivateDetails = new ArrayList<>();
+ for (Long phId : ids) {
+ CultivateDetailEntity detail = new CultivateDetailEntity();
+ detail.setType(CultivateStatusEnum.JOB_TRANSFER.getCode().shortValue());
+ detail.setPlanId(trainingPlanId);
+ detail.setPhId(phId);
+ detail.setCaStatus(TrainingStatusEnum.WAIT_DISTRIBUTE.getCode().shortValue());
+ detail.setTeacherId(teacherId);
+ detail.setTeacherName(teacherName);
+ cultivateDetails.add(detail);
+ }
+ boolean saveResult = iCultivateDetailService.saveBatch(cultivateDetails);
+
+ return R.status(saveResult, "操作成功");
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R layoffPlan(List ids, Long teacherId, String teacherName, Long trainingPlanId) {
+ // 1. 验证阶段:查看匹配的数据数量,如数量和id不同,则失败
+ Long matchedCount = this.lambdaQuery()
+ .in(PostHandleEntity::getId, ids)
+ .eq(PostHandleEntity::getPhStatus, PostHandleStatusEnum.NORMALITY.getCode())
+ .eq(PostHandleEntity::getStaffType, StaffTypeEnum.FORMAL.getCode())
+ .eq(PostHandleEntity::getIsDeleted, 0)
+ .count();
+ if (matchedCount < ids.size()) {
+ return R.fail("请选择正式工安排下岗计划");
+ }
+ // 2. 更新人员岗位数据
+ boolean updateSuccess = this.lambdaUpdate()
+ .in(PostHandleEntity::getId, ids)
+ .eq(PostHandleEntity::getPhStatus, PostHandleStatusEnum.NORMALITY.getCode())
+ .eq(PostHandleEntity::getStaffType, StaffTypeEnum.FORMAL.getCode())
+ .set(PostHandleEntity::getPhStatus, PostHandleStatusEnum.LAID_OFF.getCode())
+ .set(PostHandleEntity::getUpdateTime, new Date())
+ .update();
+ if (!updateSuccess) {
+ return R.fail("下岗计划操作失败");
+ }
+ // 3. 为每条下岗计划新增培训安排
+ List cultivateDetails = new ArrayList<>();
+ for (Long phId : ids) {
+ CultivateDetailEntity detail = new CultivateDetailEntity();
+ detail.setType(CultivateStatusEnum.LAYOFF.getCode().shortValue());
+ detail.setPlanId(trainingPlanId);
+ detail.setPhId(phId);
+ detail.setCaStatus(TrainingStatusEnum.WAIT_DISTRIBUTE.getCode().shortValue());
+ detail.setTeacherId(teacherId);
+ detail.setTeacherName(teacherName);
+ cultivateDetails.add(detail);
+ }
+ boolean saveResult = iCultivateDetailService.saveBatch(cultivateDetails);
+
+ return R.status(saveResult, "操作成功");
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R saveExcelData(List postHandleImports) {
+ //检查导入的集合postHandleImports,不允许用户code重复
+ Set importedCodes = new HashSet<>();
+ Set duplicateCodes = postHandleImports.stream()
+ .map(PostHandleImport::getCode) // 假设PostHandleImport有getCode方法
+ .filter(code -> !importedCodes.add(code)) // 如果add失败,说明已存在,即重复
+ .collect(Collectors.toSet());
+
+ if (!duplicateCodes.isEmpty()) {
+ // 存在重复的用户code,返回错误信息。假设R是统一的返回结果类
+ return R.fail("导入数据中存在重复的工号:" + duplicateCodes);
+ }
+ List list = postHandleImports.stream().map(this::convertSingle).collect(Collectors.toList());
+ //获取全部用户id,对比PostHandleEntity已有数据,不允许重复添加
+ List ids = list.stream().map(PostHandleEntity::getUserId)
+ .collect(Collectors.toList());
+ Long existCount = this.lambdaQuery()
+ .in(PostHandleEntity::getUserId, ids)
+ .eq(PostHandleEntity::getIsDeleted, 0)
+ .count();
+ if (existCount > 0) {
+ return R.fail("用户已存在岗位处理记录,不允许重复添加");
+ }
+ boolean saved = this.saveBatch(list);
+ if (!saved) {
+ return R.fail("操作失败");
+ }
+ try {
+ createPlan(list); // 确保此方法中的异常能传播出来
+ } catch (Exception e) {
+ // 由于配置了 rollbackFor = Exception.class,异常抛出后事务将回滚
+ throw new RuntimeException("创建培训计划失败,数据已回滚", e);
+ }
+ return R.status(saved);
+ }
+
+ @Override
+ public R jobTransfer(PostHandleEntity postHandleEntity) {
+ if (!(PostHandleStatusEnum.JOB_TRANSFER_TRAINED.getCode().shortValue() == postHandleEntity.getPhStatus())) {
+ return R.fail("请在转岗培训完成后操作");
+ }
+ postHandleEntity.setPhStatus(PostHandleStatusEnum.NORMALITY.getCode().shortValue());
+ postHandleEntity.setToNewJob(new Date());
+ return R.status(this.updateById(postHandleEntity));
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R depart(PostHandleEntity postHandleEntity) {
+ //1.离职修改状态
+ if (!(PostHandleStatusEnum.LAID_OFF_TRAINED.getCode().shortValue() == postHandleEntity.getPhStatus())) {
+ return R.fail("请在下岗培训完成后操作");
+ }
+ postHandleEntity.setPhStatus(PostHandleStatusEnum.DEPART.getCode().shortValue());
+ postHandleEntity.setToNewJob(new Date());
+ boolean updateP = this.updateById(postHandleEntity);
+ //2.离职后需把证书维护的状态置为离职
+ boolean updateC = certificateMaintenanceService.lambdaUpdate()
+ .eq(CertificateMaintenanceEntity::getPhId, postHandleEntity.getId())
+ .set(CertificateMaintenanceEntity::getMaintenanceStatus, MaintenanceStatusEnum.DEPART.getCode().shortValue())
+ .update();
+ //3.离职后需把设备维护的状态置为离职
+ boolean updateE = equipmentMaintenanceService.lambdaUpdate()
+ .eq(EquipmentMaintenanceEntity::getPhId, postHandleEntity.getId())
+ .set(EquipmentMaintenanceEntity::getMaintenanceStatus, MaintenanceStatusEnum.DEPART.getCode().shortValue())
+ .update();
+ return R.status(updateP);
+ }
+
+ /**
+ * 转换单个对象
+ */
+ private PostHandleEntity convertSingle(PostHandleImport excel) {
+ PostHandleEntity entity = new PostHandleEntity();
+ // 核心:属性拷贝,两个类的字段名和类型必须一致
+ BeanUtils.copyProperties(excel, entity);
+ // 对于字段名不完全一致或有特殊处理的字段,可以在此手动设置
+ //用工类型
+ entity.setStaffType(StaffTypeEnum.of(excel.getStaffTypeName()).getCode().shortValue());
+ //用户及部门
+ UserInfo userByCode = UserCache.getUserByCode(excel.getCode());
+ if (userByCode == null || userByCode.getUser() == null) {
+ //报错并提示
+ throw new IllegalArgumentException("工号 '" + excel.getCode() + "' 在系统中不存在,请检查数据准确性");
+ }
+ entity.setUserId(userByCode.getUser().getId());
+ entity.setName(userByCode.getUser().getRealName());
+ entity.setDeptId(Long.valueOf(userByCode.getUser().getDeptId()));
+ //技能等级
+ entity.setSkill(SkillEnum.of(excel.getSkillName()).getCode().shortValue());
+ //婚姻状态
+ entity.setMarriage(MarriageEnum.of(excel.getMarriageName()).getCode().toString());
+ // 如果是正式工状态为正常
+ if (entity.getStaffType() == StaffTypeEnum.FORMAL.getCode().shortValue()) {
+ entity.setPhStatus(PostHandleStatusEnum.NORMALITY.getCode().shortValue());
+ } else {
+ entity.setPhStatus(PostHandleStatusEnum.IN_PRACTICE.getCode().shortValue());
+ }
+ return entity;
+ }
+ /**
+ * 实习工自动创建一条培训计划
+ *
+ * @param postHandleEntitys
+ */
+ public void createPlan(List postHandleEntitys) {
+ //新增实习工时,为其创建一条培训计划
+ List cultivateDetailEntities = postHandleEntitys.stream()
+ .filter(entity -> entity.getStaffType() == StaffTypeEnum.FIELD_WORK.getCode().shortValue())
+ .map(fieldWork -> {
+ CultivateDetailEntity detailEntity = new CultivateDetailEntity();
+ detailEntity.setPhId(fieldWork.getId());
+ detailEntity.setType((short) 1);
+ detailEntity.setCaStatus(TrainingStatusEnum.NOT_CONFIGURED.getCode().shortValue());
+ return detailEntity;
+ })
+ .collect(Collectors.toList());
+
+ iCultivateDetailService.saveBatch(cultivateDetailEntities);
+ }
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/TrainingPlanServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/TrainingPlanServiceImpl.java
new file mode 100644
index 00000000..f642b888
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/TrainingPlanServiceImpl.java
@@ -0,0 +1,51 @@
+package org.springblade.desk.jobTransfer.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import org.springblade.desk.jobTransfer.pojo.entity.TrainingPlanEntity;
+import org.springblade.desk.jobTransfer.pojo.excel.TrainingPlanExcel;
+import org.springblade.desk.jobTransfer.pojo.vo.TrainingPlanVO;
+import org.springblade.desk.jobTransfer.mapper.TrainingPlanMapper;
+import org.springblade.desk.jobTransfer.service.ITrainingPlanService;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseServiceImpl;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 培训计划模板 服务实现类
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+@Service
+public class TrainingPlanServiceImpl extends BaseServiceImpl implements ITrainingPlanService {
+
+ @Override
+ public IPage selectTrainingPlanPage(IPage page, TrainingPlanEntity trainingPlan) {
+// return page.setRecords(baseMapper.selectTrainingPlanPage(page, trainingPlan));
+ // 1. 创建条件构造器
+ LambdaQueryWrapper wrapper = Wrappers.lambdaQuery();
+
+ // 2. 动态添加条件(核心!)
+ // 根据实体对象 entity 中字段是否为空,来动态拼接WHERE条件
+ wrapper.like(Objects.nonNull(trainingPlan.getName()), TrainingPlanEntity::getName, trainingPlan.getName());
+
+ // 3. 执行分页查询
+ return baseMapper.selectPage(page, wrapper);
+ }
+
+
+ @Override
+ public List exportTrainingPlan(Wrapper queryWrapper) {
+ List trainingPlanList = baseMapper.exportTrainingPlan(queryWrapper);
+ //trainingPlanList.forEach(trainingPlan -> {
+ // trainingPlan.setTypeName(DictCache.getValue(DictEnum.YES_NO, TrainingPlan.getType()));
+ //});
+ return trainingPlanList;
+ }
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/wrapper/CertificateMaintenanceWrapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/wrapper/CertificateMaintenanceWrapper.java
new file mode 100644
index 00000000..49f91ec6
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/wrapper/CertificateMaintenanceWrapper.java
@@ -0,0 +1,35 @@
+package org.springblade.desk.jobTransfer.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.desk.jobTransfer.pojo.entity.CertificateMaintenanceEntity;
+import org.springblade.desk.jobTransfer.pojo.vo.CertificateMaintenanceVO;
+
+import java.util.Objects;
+
+/**
+ * 证书维护 包装类,返回视图层所需的字段
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+public class CertificateMaintenanceWrapper extends BaseEntityWrapper {
+
+ public static CertificateMaintenanceWrapper build() {
+ return new CertificateMaintenanceWrapper();
+ }
+
+ @Override
+ public CertificateMaintenanceVO entityVO(CertificateMaintenanceEntity certificateMaintenance) {
+ CertificateMaintenanceVO certificateMaintenanceVO = Objects.requireNonNull(BeanUtil.copyProperties(certificateMaintenance, CertificateMaintenanceVO.class));
+
+ //User createUser = UserCache.getUser(certificateMaintenance.getCreateUser());
+ //User updateUser = UserCache.getUser(certificateMaintenance.getUpdateUser());
+ //certificateMaintenanceVO.setCreateUserName(createUser.getName());
+ //certificateMaintenanceVO.setUpdateUserName(updateUser.getName());
+
+ return certificateMaintenanceVO;
+ }
+
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/wrapper/CertificateTypeWrapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/wrapper/CertificateTypeWrapper.java
new file mode 100644
index 00000000..920d0d1c
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/wrapper/CertificateTypeWrapper.java
@@ -0,0 +1,35 @@
+package org.springblade.desk.jobTransfer.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.desk.jobTransfer.pojo.entity.CertificateTypeEntity;
+import org.springblade.desk.jobTransfer.pojo.vo.CertificateTypeVO;
+
+import java.util.Objects;
+
+/**
+ * 证书类型 包装类,返回视图层所需的字段
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+public class CertificateTypeWrapper extends BaseEntityWrapper {
+
+ public static CertificateTypeWrapper build() {
+ return new CertificateTypeWrapper();
+ }
+
+ @Override
+ public CertificateTypeVO entityVO(CertificateTypeEntity certificateType) {
+ CertificateTypeVO certificateTypeVO = Objects.requireNonNull(BeanUtil.copyProperties(certificateType, CertificateTypeVO.class));
+
+ //User createUser = UserCache.getUser(certificateType.getCreateUser());
+ //User updateUser = UserCache.getUser(certificateType.getUpdateUser());
+ //certificateTypeVO.setCreateUserName(createUser.getName());
+ //certificateTypeVO.setUpdateUserName(updateUser.getName());
+
+ return certificateTypeVO;
+ }
+
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/wrapper/CultivateDetailWrapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/wrapper/CultivateDetailWrapper.java
new file mode 100644
index 00000000..39ef09f7
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/wrapper/CultivateDetailWrapper.java
@@ -0,0 +1,35 @@
+package org.springblade.desk.jobTransfer.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.desk.jobTransfer.pojo.entity.CultivateDetailEntity;
+import org.springblade.desk.jobTransfer.pojo.vo.CultivateDetailVO;
+
+import java.util.Objects;
+
+/**
+ * 培训安排 包装类,返回视图层所需的字段
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+public class CultivateDetailWrapper extends BaseEntityWrapper {
+
+ public static CultivateDetailWrapper build() {
+ return new CultivateDetailWrapper();
+ }
+
+ @Override
+ public CultivateDetailVO entityVO(CultivateDetailEntity cultivateDetail) {
+ CultivateDetailVO cultivateDetailVO = Objects.requireNonNull(BeanUtil.copyProperties(cultivateDetail, CultivateDetailVO.class));
+
+ //User createUser = UserCache.getUser(cultivateDetail.getCreateUser());
+ //User updateUser = UserCache.getUser(cultivateDetail.getUpdateUser());
+ //cultivateDetailVO.setCreateUserName(createUser.getName());
+ //cultivateDetailVO.setUpdateUserName(updateUser.getName());
+
+ return cultivateDetailVO;
+ }
+
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/wrapper/EquipmentMaintenanceWrapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/wrapper/EquipmentMaintenanceWrapper.java
new file mode 100644
index 00000000..9cd1b3b9
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/wrapper/EquipmentMaintenanceWrapper.java
@@ -0,0 +1,35 @@
+package org.springblade.desk.jobTransfer.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.desk.jobTransfer.pojo.entity.EquipmentMaintenanceEntity;
+import org.springblade.desk.jobTransfer.pojo.vo.EquipmentMaintenanceVO;
+
+import java.util.Objects;
+
+/**
+ * 岗位设备维护 包装类,返回视图层所需的字段
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+public class EquipmentMaintenanceWrapper extends BaseEntityWrapper {
+
+ public static EquipmentMaintenanceWrapper build() {
+ return new EquipmentMaintenanceWrapper();
+ }
+
+ @Override
+ public EquipmentMaintenanceVO entityVO(EquipmentMaintenanceEntity equipmentMaintenance) {
+ EquipmentMaintenanceVO equipmentMaintenanceVO = Objects.requireNonNull(BeanUtil.copyProperties(equipmentMaintenance, EquipmentMaintenanceVO.class));
+
+ //User createUser = UserCache.getUser(equipmentMaintenance.getCreateUser());
+ //User updateUser = UserCache.getUser(equipmentMaintenance.getUpdateUser());
+ //equipmentMaintenanceVO.setCreateUserName(createUser.getName());
+ //equipmentMaintenanceVO.setUpdateUserName(updateUser.getName());
+
+ return equipmentMaintenanceVO;
+ }
+
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/wrapper/PostHandleWrapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/wrapper/PostHandleWrapper.java
new file mode 100644
index 00000000..3a1b5ad0
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/wrapper/PostHandleWrapper.java
@@ -0,0 +1,44 @@
+package org.springblade.desk.jobTransfer.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.desk.jobTransfer.pojo.entity.PostHandleEntity;
+import org.springblade.desk.jobTransfer.pojo.vo.PostHandleVO;
+import org.springblade.system.cache.SysCache;
+import org.springblade.system.cache.UserCache;
+import org.springblade.system.pojo.entity.Dept;
+import org.springblade.system.pojo.entity.User;
+import org.springblade.system.pojo.entity.UserDept;
+
+import java.util.Objects;
+
+/**
+ * 岗位处理 包装类,返回视图层所需的字段
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+public class PostHandleWrapper extends BaseEntityWrapper {
+
+ public static PostHandleWrapper build() {
+ return new PostHandleWrapper();
+ }
+
+ @Override
+ public PostHandleVO entityVO(PostHandleEntity postHandle) {
+ PostHandleVO postHandleVO = Objects.requireNonNull(BeanUtil.copyProperties(postHandle, PostHandleVO.class));
+
+ //User createUser = UserCache.getUser(postHandle.getCreateUser());
+ //User updateUser = UserCache.getUser(postHandle.getUpdateUser());
+ //postHandleVO.setCreateUserName(createUser.getName());
+ //postHandleVO.setUpdateUserName(updateUser.getName());
+ User user = UserCache.getUser(postHandle.getUserId());
+ Dept dept = SysCache.getDept(postHandle.getDeptId());
+ postHandleVO.setUserName(user.getRealName());
+ postHandleVO.setUserCode(user.getCode());
+ postHandleVO.setDeptName(dept.getDeptName());
+ return postHandleVO;
+ }
+
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/wrapper/TrainingPlanWrapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/wrapper/TrainingPlanWrapper.java
new file mode 100644
index 00000000..8eb00fa9
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/wrapper/TrainingPlanWrapper.java
@@ -0,0 +1,35 @@
+package org.springblade.desk.jobTransfer.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.desk.jobTransfer.pojo.entity.TrainingPlanEntity;
+import org.springblade.desk.jobTransfer.pojo.vo.TrainingPlanVO;
+
+import java.util.Objects;
+
+/**
+ * 培训计划模板 包装类,返回视图层所需的字段
+ *
+ * @author qyl
+ * @since 2026-01-08
+ */
+public class TrainingPlanWrapper extends BaseEntityWrapper {
+
+ public static TrainingPlanWrapper build() {
+ return new TrainingPlanWrapper();
+ }
+
+ @Override
+ public TrainingPlanVO entityVO(TrainingPlanEntity trainingPlan) {
+ TrainingPlanVO trainingPlanVO = Objects.requireNonNull(BeanUtil.copyProperties(trainingPlan, TrainingPlanVO.class));
+
+ //User createUser = UserCache.getUser(trainingPlan.getCreateUser());
+ //User updateUser = UserCache.getUser(trainingPlan.getUpdateUser());
+ //trainingPlanVO.setCreateUserName(createUser.getName());
+ //trainingPlanVO.setUpdateUserName(updateUser.getName());
+
+ return trainingPlanVO;
+ }
+
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/AssayContentController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/AssayContentController.java
index e4508dd8..8f8f8494 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/AssayContentController.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/AssayContentController.java
@@ -45,7 +45,7 @@ public class AssayContentController extends BladeController {
@GetMapping("/page")
@Parameters({
@Parameter(name = "wcId", description = "作业中心", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
- @Parameter(name = "status", description = "状态", in = ParameterIn.QUERY, schema = @Schema(type = "int"))
+ @Parameter(name = "status", description = "状态, 10000:未使用, 10001:已使用, 10002:已过期", in = ParameterIn.QUERY, schema = @Schema(type = "int"))
})
@Operation(summary = "分页", description = "")
public R> page(@Parameter(hidden = true) AssayContent entity, Query query) {
@@ -54,56 +54,65 @@ public class AssayContentController extends BladeController {
}
/**
- * 详情
- */
- @GetMapping("/detail")
- @Operation(summary = "详情", description = "")
- public R detail(String id) {
- AssayContent detail = assayContentService.getById(id);
- return R.data(detail);
- }
+ * 详情
+ */
+ @GetMapping("/detail")
+ @Operation(summary = "详情", description = "")
+ public R detail(String id) {
+ AssayContent content = assayContentService.getById(id);
+ List detailList = assayContentDetailService.getByContentId(content.getId());
- /**
- * 新增
- */
- @PostMapping("/save")
- @Operation(summary = "新增", description = "")
- public R save(@Valid @RequestBody AssayContentSave saveData) {
- AssayContent entity = saveData.getAssayContent();
- List detailList = saveData.getDetailList();
- assayContentService.save(entity, detailList);
- return R.status(true);
- }
+ AssayContentVo vo = AssayContentWrapper.build().entityVO(content);
+ vo.setDetailList(detailList);
+ return R.data(vo);
+ }
- /**
- * 修改
- */
- @PostMapping("/update")
- @Operation(summary = "修改", description = "")
- public R update(@Valid @RequestBody AssayContentSave saveData) {
- AssayContent entity = saveData.getAssayContent();
- List detailList = saveData.getDetailList();
- assayContentService.update(entity, detailList);
- return R.status(true);
- }
+ /**
+ * 新增
+ */
+ @PostMapping("/save")
+ @Operation(summary = "新增", description = "")
+ public R save(@Valid @RequestBody AssayContentSave saveData) {
+ AssayContent entity = saveData.getAssayContent();
+ List detailList = saveData.getDetailList();
+ assayContentService.save(entity, detailList);
+ return R.status(true);
+ }
- /**
- * 删除
- */
- @PostMapping("/remove")
- @Operation(summary = "逻辑删除", description = "传入ids")
- public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
- Boolean result = assayContentService.deleteLogic(Func.toLongList(ids));
- return R.status(result);
- }
+ /**
+ * 修改
+ */
+ @PostMapping("/update")
+ @Operation(summary = "修改", description = "")
+ public R update(@Valid @RequestBody AssayContentSave saveData) {
+ AssayContent entity = saveData.getAssayContent();
+ List detailList = saveData.getDetailList();
+ assayContentService.update(entity, detailList);
+ return R.status(true);
+ }
- /**
- * 列表 - 未使用的化验含量
- */
- @GetMapping("/listNoUsed")
- @Operation(summary = "未使用的化验含量列表", description = "")
- public R listNoUsed(@Parameter(hidden = true) AssayContentDetail authClient, Query query) {
- return R.data(null);
- }
+ /**
+ * 删除
+ */
+ @PostMapping("/remove")
+ @Operation(summary = "逻辑删除", description = "传入ids")
+ public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
+ // 删除化验记录
+ Boolean result = assayContentService.deleteLogic(Func.toLongList(ids));
+
+ // 删除化验记录明细
+ assayContentDetailService.deleteLogicByContentId(Func.toLongList(ids));
+ return R.status(result);
+ }
+
+ /**
+ * 列表 - 未使用的化验含量明细列表
+ */
+ @GetMapping("/detailListNoUsed")
+ @Operation(summary = "未使用的化验含量明细列表", description = "")
+ public R> detailListNoUsed(@Parameter(hidden = true) Long workCenterId) {
+ List detailList = assayContentService.detailListNoUsed(workCenterId);
+ return R.data(detailList);
+ }
}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/MoldPlanController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/MoldPlanController.java
index 67c77f55..9e8f23fd 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/MoldPlanController.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/MoldPlanController.java
@@ -22,7 +22,6 @@ import org.springblade.desk.order.pojo.request.MoldPlanSave;
import org.springblade.desk.order.pojo.vo.MoldPlanVo;
import org.springblade.desk.order.service.IMoldPlanOrderService;
import org.springblade.desk.order.service.IMoldPlanService;
-import org.springblade.desk.order.service.IMoldPlanToolService;
import org.springblade.desk.order.wrapper.MoldPlanWrapper;
import org.springframework.web.bind.annotation.*;
@@ -40,64 +39,84 @@ import java.util.List;
public class MoldPlanController extends BladeController {
private final IMoldPlanService moldPlanService;
- private final IMoldPlanToolService moldPlanToolService;
private final IMoldPlanOrderService moldPlanOrderService;
/**
- * 分页
- */
- @GetMapping("/page")
+ * 分页
+ */
+ @GetMapping("/page")
@Parameters({
@Parameter(name = "moCode", description = "工装号", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
@Parameter(name = "partCode", description = "零件号", in = ParameterIn.QUERY, schema = @Schema(type = "string"))
})
- @Operation(summary = "分页", description = "")
- public R> page(@Parameter(hidden = true) MoldPlan entity, Query query) {
+ @Operation(summary = "分页-所有需求", description = "")
+ public R> page(@Parameter(hidden = true) MoldPlan entity, Query query) {
IPage page = moldPlanService.selectPage(Condition.getPage(query), entity);
return R.data(MoldPlanWrapper.build().pageVO(page));
- }
+ }
- /**
- * 详情
- */
- @GetMapping("/detail")
- @Operation(summary = "详情", description = "")
- public R detail(String id) {
- MoldPlan detail = moldPlanService.getById(id);
- return R.data(detail);
- }
+ /**
+ * 分页
+ */
+ @GetMapping("/pageApply")
+ @Parameters({
+ @Parameter(name = "moCode", description = "工装号", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
+ @Parameter(name = "partCode", description = "零件号", in = ParameterIn.QUERY, schema = @Schema(type = "string"))
+ })
+ @Operation(summary = "分页-申报记录", description = "")
+ public R> pageApply(@Parameter(hidden = true) MoldPlan entity, Query query) {
+ IPage page = moldPlanService.selectPageApply(Condition.getPage(query), entity);
+ return R.data(MoldPlanWrapper.build().pageVO(page));
+ }
- /**
- * 新增
- */
- @PostMapping("/save")
- @Operation(summary = "新增", description = "")
- public R save(@Valid @RequestBody MoldPlanSave saveData) {
- MoldPlan entity = saveData.getMoldPlan();
- List orderList = saveData.getOrderList();
- List toolList = saveData.getToolList();
- moldPlanService.save(entity, orderList, toolList);
- return R.status(true);
- }
+ /**
+ * 分页-近一月的模具计划
+ */
+ @GetMapping("/pageNearlyMonth")
+ @Operation(summary = "分页-近一月的模具计划", description = "")
+ public R> pageNearlyMonth(@Parameter(hidden = true) MoldPlan entity, Query query) {
+ IPage page = moldPlanService.pageNearlyMonth(Condition.getPage(query), entity);
+ return R.data(MoldPlanWrapper.build().pageVO(page));
+ }
- /**
- * 修改
- */
- @PostMapping("/update")
- @Operation(summary = "修改", description = "")
- public R update(@Valid @RequestBody MoldPlanSave saveData) {
- MoldPlan entity = saveData.getMoldPlan();
- List orderList = saveData.getOrderList();
- List toolList = saveData.getToolList();
- moldPlanService.update(entity, orderList, toolList);
- return R.status(true);
- }
+ /**
+ * 详情
+ */
+ @GetMapping("/detail")
+ @Operation(summary = "详情", description = "")
+ public R detail(String id) {
+ MoldPlan detail = moldPlanService.getById(id);
+ return R.data(detail);
+ }
- /**
- * 删除
- */
- @PostMapping("/remove")
- @Operation(summary = "逻辑删除", description = "传入ids")
+ /**
+ * 新增
+ */
+ @PostMapping("/save")
+ @Operation(summary = "新增", description = "")
+ public R save(@Valid @RequestBody List planList) {
+ moldPlanService.save(planList);
+ return R.status(true);
+ }
+
+ /**
+ * 修改
+ */
+ @PostMapping("/update")
+ @Operation(summary = "修改", description = "")
+ public R update(@Valid @RequestBody MoldPlanSave saveData) {
+ MoldPlan entity = saveData.getMoldPlan();
+ List orderList = saveData.getOrderList();
+ List toolList = saveData.getToolList();
+ moldPlanService.update(entity, orderList, toolList);
+ return R.status(true);
+ }
+
+ /**
+ * 删除
+ */
+ @PostMapping("/remove")
+ @Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
Boolean result = moldPlanService.deleteLogic(Func.toLongList(ids));
return R.status(result);
@@ -110,17 +129,7 @@ public class MoldPlanController extends BladeController {
@PostMapping("/closeBatch")
@Operation(summary = "批量关闭", description = "传入ids")
public R closeBatch(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
- Boolean result = moldPlanService.changeStatus(Func.toLongList(ids), MoldPlanEnum.STATUS_CLOSE.getCategory());
+ Boolean result = moldPlanService.changeStatus(Func.toLongList(ids), MoldPlanEnum.STATUS_CLOSE.getCode());
return R.status(result);
- }
-
- /**
- * 分页-近一月的模具计划
- */
- @GetMapping("/pageNearlyMonth")
- @Operation(summary = "分页", description = "")
- public R> pageNearlyMonth(@Parameter(hidden = true) MoldPlan authClient, Query query) {
- // 根据零件号,分页查询近一月的模具申报
- return R.data(null);
- }
+ }
}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/PlateGoodsRecordController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/PlateGoodsRecordController.java
index de81cd4e..7ffe8b00 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/PlateGoodsRecordController.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/PlateGoodsRecordController.java
@@ -17,12 +17,14 @@ import org.springblade.core.tool.utils.Func;
import org.springblade.desk.order.pojo.entity.AssayContentDetail;
import org.springblade.desk.order.pojo.entity.PlateGoodsRecord;
import org.springblade.desk.order.pojo.entity.PlateGoodsRecordDetail;
+import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.pojo.enums.PlateGoodsEnum;
import org.springblade.desk.order.pojo.request.PlateGoodsRecordSave;
import org.springblade.desk.order.pojo.vo.PlateGoodsRecordVo;
import org.springblade.desk.order.service.IPlateGoodsRecordDetailService;
import org.springblade.desk.order.service.IPlateGoodsRecordService;
import org.springblade.desk.order.wrapper.PlateGoodsRecordWrapper;
+import org.springblade.desk.order.wrapper.YieldOrderWrapper;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -45,11 +47,9 @@ public class PlateGoodsRecordController extends BladeController {
* 分页
*/
@GetMapping("/page")
- @Parameters({
- @Parameter(name = "demandCode", description = "需求单号", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
+ @Parameters({@Parameter(name = "demandCode", description = "需求单号", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
@Parameter(name = "wcId", description = "作业中心", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
- @Parameter(name = "status", description = "状态", in = ParameterIn.QUERY, schema = @Schema(type = "int"))
- })
+ @Parameter(name = "status", description = "状态,10000:待审核, 10001:审核通过, 10002:使用中, 10003:已超期, 10004:已完成, 10005:审核未通过, 10006:已关闭", in = ParameterIn.QUERY, schema = @Schema(type = "int"))})
@Operation(summary = "分页", description = "")
public R> page(@Parameter(hidden = true) PlateGoodsRecord entity, Query query) {
IPage page = goodsRecordService.selectPage(Condition.getPage(query), entity);
@@ -61,9 +61,16 @@ public class PlateGoodsRecordController extends BladeController {
*/
@GetMapping("/detail")
@Operation(summary = "详情", description = "")
- public R detail(String id) {
+ public R detail(String id) {
PlateGoodsRecord detail = goodsRecordService.getById(id);
- return R.data(detail);
+
+ PlateGoodsRecordVo vo = PlateGoodsRecordWrapper.build().entityVO(detail);
+
+ // 查询关联订单列表
+ List yieldOrderList = goodsRecordService.listDetailYieldOrder(detail.getId());
+ vo.setYieldOrderList(YieldOrderWrapper.build().listVO(yieldOrderList));
+
+ return R.data(vo);
}
/**
@@ -96,6 +103,7 @@ public class PlateGoodsRecordController extends BladeController {
@PostMapping("/remove")
@Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
+ // TODO 验证是否进行添加, 若已添加, 不允许删除
Boolean result = goodsRecordService.deleteLogic(Func.toLongList(ids));
return R.status(result);
}
@@ -118,7 +126,7 @@ public class PlateGoodsRecordController extends BladeController {
@PostMapping("/closeBatch")
@Operation(summary = "批量关闭", description = "传入ids")
public R closeBatch(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
- Boolean result = goodsRecordService.changeStatus(Func.toLongList(ids), PlateGoodsEnum.STATUS_CLOSE.getCategory());
+ Boolean result = goodsRecordService.changeStatus(Func.toLongList(ids), PlateGoodsEnum.STATUS_CLOSE.getCode());
return R.status(result);
}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java
index 15097124..55c79d6c 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java
@@ -99,12 +99,31 @@ public class YieldOrderController extends BladeController {
page.setRecords(new ArrayList<>());
if (ObjectUtil.isNotEmpty(entity.getValidationResult())) {
- page = yieldOrderService.selectPageSintering(Condition.getPage(query), entity);
+ page = yieldOrderService.selectPage(Condition.getPage(query), entity);
}
return R.data(YieldOrderWrapper.build().pageVO(page));
}
+ /**
+ * 分页查询列表 - 物料申请
+ */
+ @GetMapping("/pageMaterialApply")
+ @Parameters({
+ @Parameter(name = "wcId", description = "作业中心", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
+ @Parameter(name = "materialType", description = "物料类型,1:金钾,2:银钾", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
+ @Parameter(name = "overHalfMon", description = "使用半月以上的数据,0:否,1:是", in = ParameterIn.QUERY, schema = @Schema(type = "string"))
+ })
+ @Operation(summary = "分页-物料申请", description = "")
+ public R> pageMaterialApply(Long wcId, Integer materialType, Integer overHalfMon, Query query) {
+ IPage page = Condition.getPage(query);
+ page.setRecords(new ArrayList<>());
+
+ page = yieldOrderService.pageMaterialApply(Condition.getPage(query), wcId, materialType, overHalfMon);
+
+ return R.data(YieldOrderWrapper.build().pageVO(page));
+ }
+
/**
* 详情
*/
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldPlanController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldPlanController.java
index 4edf05ce..2d378bcb 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldPlanController.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldPlanController.java
@@ -58,7 +58,7 @@ public class YieldPlanController extends BladeController {
@Parameter(name = "partCode", description = "零件号", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
@Parameter(name = "status", description = "状态", in = ParameterIn.QUERY, schema = @Schema(type = "int"))
})
- @Operation(summary = "分页", description = "")
+ @Operation(summary = "分页查询列表-电镀", description = "")
public R> pageElectroplate(@Parameter(hidden = true) YieldPlan entity, Query query) {
IPage page = yieldPlanService.selectPageElectroplate(Condition.getPage(query), entity);
return R.data(YieldPlanWrapper.build().pageVO(page));
@@ -73,7 +73,7 @@ public class YieldPlanController extends BladeController {
@Parameter(name = "partCode", description = "零件号", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
@Parameter(name = "status", description = "状态", in = ParameterIn.QUERY, schema = @Schema(type = "int"))
})
- @Operation(summary = "分页", description = "")
+ @Operation(summary = "分页查询列表-烧结", description = "")
public R> pageSintering(@Parameter(hidden = true) YieldPlan entity, Query query) {
IPage page = yieldPlanService.selectPageSintering(Condition.getPage(query), entity);
return R.data(YieldPlanWrapper.build().pageVO(page));
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/AssayContentDetailMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/AssayContentDetailMapper.java
index 55e40435..928a5839 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/AssayContentDetailMapper.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/AssayContentDetailMapper.java
@@ -22,4 +22,12 @@ public interface AssayContentDetailMapper extends BaseMapper
* @return
*/
List selectPage(IPage page, AssayContentDetail entity);
+
+ /**
+ * 根据化验记录逻辑删除明细
+ *
+ * @param contentIds
+ * @return
+ */
+ boolean deleteLogicByContentId(List contentIds);
}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/AssayContentDetailMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/AssayContentDetailMapper.xml
index 41180f0b..ba8b5b4e 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/AssayContentDetailMapper.xml
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/AssayContentDetailMapper.xml
@@ -4,6 +4,17 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">