|
|
@@ -0,0 +1,101 @@
|
|
|
+package com.malk.minglei.service.impl.yida;
|
|
|
+
|
|
|
+import com.malk.minglei.service.yida.MingleiDocumentService;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
+
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 为明磊 ERP 表单补充申请人所属部门、公司和审批矩阵负责人。
|
|
|
+ */
|
|
|
+@Component
|
|
|
+public class LocalFormDepartmentEnricher {
|
|
|
+
|
|
|
+ private final MingleiDocumentService documentService;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建部门字段填充组件。
|
|
|
+ * @param documentService 部门配置和审批矩阵查询服务
|
|
|
+ */
|
|
|
+ public LocalFormDepartmentEnricher(MingleiDocumentService documentService) {
|
|
|
+ this.documentService = documentService;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 按表单真实字段映射填入公司、申请部门及负责人;空配置清除旧值并允许继续发起。
|
|
|
+ * @param formUuid 宜搭表单 UUID
|
|
|
+ * @param userId 申请人的钉钉用户 ID
|
|
|
+ * @param formData 待发起流程的表单数据
|
|
|
+ */
|
|
|
+ public void fill(String formUuid, String userId, Map<String, Object> formData) {
|
|
|
+ String[] companyFields;
|
|
|
+ String[] applicantManagerFields = {null, null, null};
|
|
|
+ String fixedDepartmentId = null;
|
|
|
+ String fixedManagerField = null;
|
|
|
+ String fixedManagerSource = "employeeField_mszdqrl9";
|
|
|
+ switch (formUuid) {
|
|
|
+ case "FORM-4B08ADABCDAA45788C043729A855E03ED76G":
|
|
|
+ companyFields = new String[]{"selectField_mso1em48"};
|
|
|
+ applicantManagerFields = new String[]{"employeeField_mtjp3e58", "employeeField_mtjp3e59", "employeeField_mvylqnek"};
|
|
|
+ break;
|
|
|
+ case "FORM-40D6FBBBF4A94864A2AF9535AAC7924CRBH2":
|
|
|
+ companyFields = new String[]{"textField_mu1z5kaf", "selectField_mso1em48"};
|
|
|
+ applicantManagerFields = new String[]{"employeeField_mt6thsdh", "employeeField_mt6thsdi", "employeeField_mt6v6alx"};
|
|
|
+ fixedDepartmentId = "972685113";
|
|
|
+ fixedManagerField = "employeeField_mtqwsyjz";
|
|
|
+ break;
|
|
|
+ case "FORM-38C8592E7F5F45B3A388DA3FEFBA67C2GCEV":
|
|
|
+ companyFields = new String[]{"selectField_mtxpfhhe"};
|
|
|
+ fixedDepartmentId = "962219816";
|
|
|
+ fixedManagerField = "employeeField_mvlu7ko7";
|
|
|
+ break;
|
|
|
+ case "FORM-8F318292B70D4ED39080EE0C631DC74BG3MD":
|
|
|
+ companyFields = new String[]{"selectField_mso1em48"};
|
|
|
+ applicantManagerFields = new String[]{"employeeField_mt6thsdh", "employeeField_mt6thsdi", "employeeField_mt6v6alx"};
|
|
|
+ fixedDepartmentId = "962219826";
|
|
|
+ fixedManagerField = "employeeField_mt8162rn";
|
|
|
+ fixedManagerSource = "employeeField_mszdqrl8";
|
|
|
+ break;
|
|
|
+ case "FORM-9EE14CA14D8D4AEE8102944E669E6B0CFUKS":
|
|
|
+ companyFields = new String[]{"textField_mu1zpoe4", "selectField_mso1em48"};
|
|
|
+ applicantManagerFields[1] = "employeeField_mttrhcqq";
|
|
|
+ fixedDepartmentId = "962219816";
|
|
|
+ fixedManagerField = "employeeField_mttrhcqs";
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new IllegalArgumentException("Unsupported department enrichment form: " + formUuid);
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, Object> configuration = documentService.queryApplicantDepartmentConfiguration(userId);
|
|
|
+ replace(formData, "departmentSelectField_msh186ry", members(configuration.get("departmentId")));
|
|
|
+ for (String field : companyFields) {
|
|
|
+ replace(formData, field, configuration.get("company"));
|
|
|
+ }
|
|
|
+ String[] managerKeys = {"firstLevelManagerUserIds", "secondLevelManagerUserIds", "thirdLevelManagerUserIds"};
|
|
|
+ for (int level = 0; level < applicantManagerFields.length; level++) {
|
|
|
+ if (applicantManagerFields[level] != null) {
|
|
|
+ replace(formData, applicantManagerFields[level], configuration.get(managerKeys[level]));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (fixedDepartmentId != null) {
|
|
|
+ Map<String, Object> managers = documentService.queryDepartmentManagersByDepartmentId(fixedDepartmentId);
|
|
|
+ replace(formData, fixedManagerField, members(managers.get(fixedManagerSource)));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private Object members(Object userOrDepartmentId) {
|
|
|
+ return userOrDepartmentId == null || !StringUtils.hasText(String.valueOf(userOrDepartmentId))
|
|
|
+ ? null : Collections.singletonList(String.valueOf(userOrDepartmentId).trim());
|
|
|
+ }
|
|
|
+
|
|
|
+ private void replace(Map<String, Object> formData, String field, Object value) {
|
|
|
+ formData.remove(field);
|
|
|
+ if (value == null || (value instanceof String && !StringUtils.hasText((String) value))
|
|
|
+ || (value instanceof Iterable && !((Iterable<?>) value).iterator().hasNext())) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ formData.put(field, value);
|
|
|
+ }
|
|
|
+}
|