|
|
@@ -18,6 +18,7 @@ import java.time.Clock;
|
|
|
import java.time.Instant;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.Collections;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
@@ -38,6 +39,11 @@ public class BentelerDingTalkSyncTaskService {
|
|
|
private static final int MAX_ERROR_LENGTH = 500;
|
|
|
private static final long CLAIM_MINUTES = 10;
|
|
|
private static final String CLAIM_PREFIX = "CLAIM:";
|
|
|
+ private static final String DEPARTMENT_LIST_FIELD = "dept_id_list";
|
|
|
+ static final String TIANJIN_REPLACE_DEPARTMENT_FIELD =
|
|
|
+ "dept_id_list_preserve_tianjin_0758_vendor";
|
|
|
+ private static final List<Long> TIANJIN_0758_VENDOR_DEPARTMENT_IDS = Arrays.asList(
|
|
|
+ 1088354378L, 1088525237L, 1088534187L, 1088923059L, 1088933080L);
|
|
|
private static final Pattern SENSITIVE_VALUE = Pattern.compile(
|
|
|
"(?i)(access[_-]?token|appsecret|password|aeskey|privatekey)\\s*[=:]\\s*[^\\s,;]+"
|
|
|
);
|
|
|
@@ -151,6 +157,27 @@ public class BentelerDingTalkSyncTaskService {
|
|
|
*/
|
|
|
public void enqueueContactPrimaryDepartmentUpdate(String formInstanceId, int rowIndex,
|
|
|
String userId, Long departmentId) {
|
|
|
+ enqueueContactDepartmentUpdate(formInstanceId, rowIndex, userId, departmentId,
|
|
|
+ DEPARTMENT_LIST_FIELD);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Creates a Tianjin 0758 department replacement while preserving vendor departments.
|
|
|
+ *
|
|
|
+ * @param formInstanceId source YiDa form instance ID
|
|
|
+ * @param rowIndex source detail-row index
|
|
|
+ * @param userId DingTalk user ID
|
|
|
+ * @param departmentId target DingTalk department ID
|
|
|
+ */
|
|
|
+ public void enqueueTianjinDepartmentReplace(String formInstanceId, int rowIndex,
|
|
|
+ String userId, Long departmentId) {
|
|
|
+ enqueueContactDepartmentUpdate(formInstanceId, rowIndex, userId, departmentId,
|
|
|
+ TIANJIN_REPLACE_DEPARTMENT_FIELD);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void enqueueContactDepartmentUpdate(String formInstanceId, int rowIndex,
|
|
|
+ String userId, Long departmentId,
|
|
|
+ String targetFieldCode) {
|
|
|
if (StringUtils.isBlank(userId) || departmentId == null || departmentId <= 0) {
|
|
|
return;
|
|
|
}
|
|
|
@@ -164,7 +191,7 @@ public class BentelerDingTalkSyncTaskService {
|
|
|
formData.put(conf.getDingTalkSyncSourceFormInstanceIdFieldId(), formInstanceId);
|
|
|
formData.put(conf.getDingTalkSyncSourceRowIndexFieldId(), rowIndex);
|
|
|
formData.put(conf.getDingTalkSyncUserIdFieldId(), userId);
|
|
|
- formData.put(conf.getDingTalkSyncTargetFieldCodeFieldId(), "dept_id_list");
|
|
|
+ formData.put(conf.getDingTalkSyncTargetFieldCodeFieldId(), targetFieldCode);
|
|
|
formData.put(conf.getDingTalkSyncTargetFieldValueFieldId(), String.valueOf(departmentId));
|
|
|
formData.put(conf.getDingTalkSyncStatusFieldId(), DingTalkSyncTask.PENDING);
|
|
|
formData.put(conf.getDingTalkSyncRetryCountFieldId(), 0);
|
|
|
@@ -309,11 +336,15 @@ public class BentelerDingTalkSyncTaskService {
|
|
|
List<Long> departments = new ArrayList<>();
|
|
|
Long target = Long.valueOf(task.getTargetFieldValue());
|
|
|
departments.add(target);
|
|
|
+ boolean replaceTianjinDepartment = TIANJIN_REPLACE_DEPARTMENT_FIELD.equals(
|
|
|
+ task.getTargetFieldCode());
|
|
|
Object existing = user.get("dept_id_list");
|
|
|
if (existing instanceof List) {
|
|
|
for (Object value : (List<?>) existing) {
|
|
|
Long department = Long.valueOf(String.valueOf(value));
|
|
|
- if (!target.equals(department)) {
|
|
|
+ boolean retainExisting = !replaceTianjinDepartment
|
|
|
+ || TIANJIN_0758_VENDOR_DEPARTMENT_IDS.contains(department);
|
|
|
+ if (!target.equals(department) && retainExisting) {
|
|
|
departments.add(department);
|
|
|
}
|
|
|
}
|