| 
					
				 | 
			
			
				@@ -0,0 +1,595 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package nckd.jimin.jyyy.fi.business; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.alibaba.fastjson.JSONArray; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.alibaba.fastjson.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.google.common.collect.Lists; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.dataentity.RefObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.dataentity.entity.DynamicObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.dataentity.entity.DynamicObjectCollection; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.dataentity.resource.ResManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.logging.Log; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.logging.LogFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.orm.query.QCP; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.orm.query.QFilter; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.servicehelper.BusinessDataServiceHelper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.servicehelper.QueryServiceHelper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.servicehelper.operation.DeleteServiceHelper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.util.CollectionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.fi.er.business.servicehelper.CoreBaseBillServiceHelper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.fi.er.business.trip.dao.UserDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.fi.er.business.trip.exception.TripSyncLogParam; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.fi.er.business.trip.model.TripSyncDataMappingModel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.fi.er.business.trip.service.function.AbstractUserInvoke; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.fi.er.business.trip.supplier.Supplier; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.fi.er.business.trip.supplier.didi.invoke.DiDiTripUserInvoke; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.fi.er.business.trip.supplier.didi.systemexternal.DiDiOrgAndUserInvokeUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.fi.er.business.trip.supplier.didi.systemexternal.DiDiServiceUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.fi.er.business.trip.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.fi.er.business.utils.ErCommonUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.fi.er.business.utils.ErCostCenterUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.fi.er.business.utils.TripUserGrantUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.fi.er.common.ExternalConstants; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.hrmp.hrpi.business.infrastructure.utils.QFilterUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.concurrent.atomic.AtomicReference; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.stream.Collector; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 滴滴人员同步 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @author wanghaiwu_kd 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @date 2025/06/05 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class DiDiTripUserCusInvoke extends AbstractUserInvoke<Set<JSONObject>> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static Log logger = LogFactory.getLog(DiDiTripUserCusInvoke.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public DiDiTripUserCusInvoke() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    protected String supplier() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return Supplier.DIDI.name(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    protected Object getInnerData() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.bizInfoObject = BusinessDataServiceHelper.loadSingle("er_biz_info", "lastsyncpeopletamp", new QFilter[]{new QFilter("number", "=", this.supplier())}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.lastSyncPeopleTamp = this.bizInfoObject.getString("lastsyncpeopletamp"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return this.queryChangeInfo(this.lastSyncPeopleTamp, 1, 1000000, (Map)null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    protected Object getInnerData(String changeTime, Integer pageIndex, Integer pageSize, Map<String, Object> map) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return this.queryChangeInfo(changeTime, pageIndex, pageSize, map); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Map<String, JSONArray> queryChangeInfo(String changeTime, Integer pageIndex, Integer pageSize, Map<String, Object> map) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (map == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            map = new HashMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.judgeGrant((Map)map); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        QFilter uFilter = new QFilter("server", "=", this.supplier()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        uFilter.and(new QFilter("datatype", "=", "bos_org")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Object, Object> dataOrgMappingMap = TripSyncDataMappingUtil.getDataMappingMapByFilter(uFilter, "innerdataid", "outdataid"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return this.getChangedUserMap(changeTime, pageIndex, pageSize, dataOrgMappingMap, (Map)map); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void judgeGrant(Map<String, Object> map) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (map != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            DynamicObjectCollection servers = TripUserGrantUtils.getServers(this.supplier()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (CollectionUtils.isNotEmpty(servers)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Object paramValue = map.getOrDefault("didi", "0"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (paramValue != null && "1".equals(paramValue.toString())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    DynamicObjectCollection dynamicObjects = TripUserGrantUtils.queryUserGrantInfosByServer(Collections.singletonList(this.supplier())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Set<Long> grantUserNos = (Set)dynamicObjects.stream().map((dynamicObject) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return ErCommonUtils.getPk(dynamicObject.get("grantuser")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }).collect(Collectors.toSet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List userList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (map.containsKey("userList")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        userList = (List)map.get("userList"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        grantUserNos.retainAll(userList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if ((null == grantUserNos || grantUserNos.isEmpty()) && map.containsKey("userList")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        userList = (List)map.get("userList"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Map<Object, DynamicObject> bosUsers = BusinessDataServiceHelper.loadFromCache("bos_user", "number", new QFilter[]{new QFilter("id", "in", userList)}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (null != bosUsers && !bosUsers.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            Set<String> number = (Set)bosUsers.values().stream().map((v) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                return v.getString("number"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            }).collect(Collectors.toSet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            this.tripSyncLogParam.setBillno(StringUtils.join(number, ",")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    map.put("userList", grantUserNos == null ? new ArrayList() : new ArrayList(grantUserNos)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Map<String, JSONArray> getAllUserInfos(Integer pageIndex, Integer pageSize, Map<Object, Object> dataOrgMappingMap, Map<String, Object> map) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Map<String, Object>> userObjAlls = UserHelper.getAllUserChangeInfos(pageIndex, pageSize, map); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userObjAlls = (List)userObjAlls.stream().filter((m) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return !"4".equals(m.get("type")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (userObjAlls != null && userObjAlls.size() >= 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<String, JSONArray> postUserMap = new HashMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<String, String> supplierMap = TripCommonUtil.getTripServiceInfo(this.supplier()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String client_id = (String)supplierMap.get("appkey"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String company_id = (String)supplierMap.get("orationid"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String signKey = (String)supplierMap.get("reservedfield1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String access_token = DiDiServiceUtil.getCacheToken(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (access_token == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.tripSyncLogParam.setMessage(ResManager.loadKDString("商旅集成,获取滴滴token为空,请检查配置!", "DiDiTripUserInvoke_1", "fi-er-business", new Object[0])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.tripSyncLogParam.setStatus("B"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                JSONArray addUserList = new JSONArray(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map<Long, String> reimburseLevelMap = UserDao.getReimburseLevelNumberNew(userObjAlls); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Iterator var14 = userObjAlls.iterator(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                while(var14.hasNext()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Map userObjAll = (Map)var14.next(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    this.buildAddUserList(userObjAll.get("id"), userObjAll.get("phone"), userObjAll.get("name"), userObjAll.get("number"), userObjAll.get("dptId"), client_id, company_id, access_token, signKey, dataOrgMappingMap, addUserList, reimburseLevelMap, userObjAll.get("supernumber")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                postUserMap.put("add", addUserList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return postUserMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            SyncUserTypeEnum userTypeEnum = UserHelper.getSyncType(map); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (pageIndex == 1 && userTypeEnum != SyncUserTypeEnum.SYNC_BY_USER) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.tripSyncLogParam.setMessage(ResManager.loadKDString("商旅集成,全量更新,人员为空,请检查人员信息!", "DiDiTripUserInvoke_0", "fi-er-business", new Object[0])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void buildAddUserList(Object userId, Object phone, Object name, Object number, Object dptId, String client_id, String company_id, String access_token, String signKey, Map<Object, Object> dataMappingMap, JSONArray addUserList, Map<Long, String> reimburseLevelMap, Object superNumber) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        HashMap<String, Object> signMap = new HashMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        signMap.put("client_id", client_id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        signMap.put("company_id", company_id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        signMap.put("access_token", access_token); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        signMap.put("timestamp", String.valueOf(System.currentTimeMillis() / 1000L)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        JSONObject userDataJsonObject = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userDataJsonObject.put("phone", phone); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userDataJsonObject.put("realname", name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userDataJsonObject.put("employee_number", number); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String baseCity = getBaseCity(number.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userDataJsonObject.put("residentsname", baseCity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int intValue = TripSyncConfigUtil.getIntValue("trip_Superior", 0, Arrays.asList(0, 1)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (intValue == 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            userDataJsonObject.put("immediate_superior_employee_number", superNumber == null ? "" : superNumber); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userDataJsonObject.put("is_remark", 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dataMappingMap.get(dptId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.setBudgetCenterId(dataMappingMap, dptId, userDataJsonObject, userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.setUserReimburseLevel(userId, reimburseLevelMap, userDataJsonObject, dptId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userDataJsonObject.put("use_company_money", this.getUseCompanyMoney()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        setInvoceInfo(dptId, userDataJsonObject); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        signMap.put("data", userDataJsonObject.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String addUserSign = DiDiServiceUtil.genSign(signMap, signKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        JSONObject addUserObj = new JSONObject(signMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        addUserObj.put("sign", addUserSign); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        addUserList.add(addUserObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static void setInvoceInfo(Object dptId, JSONObject userDataJsonObject) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Long deptid = Long.parseLong(dptId.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Long costCompanyId = CoreBaseBillServiceHelper.getAccountOrgId(deptid, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        DynamicObject std_costcenter = ErCostCenterUtil.getCostCenterByCostDept(deptid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Long companyId = CoreBaseBillServiceHelper.initCompanyByDept(deptid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Long stdCostcenterId = 0L; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (std_costcenter != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            stdCostcenterId = std_costcenter.getLong("id"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        JSONObject extJson = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        extJson.put("deptId", dptId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (null != companyId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            extJson.put("companyId", companyId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        extJson.put("costCompanyId", costCompanyId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        extJson.put("stdCostcenterId", stdCostcenterId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        extJson.put("taxpayer_subject", costCompanyId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userDataJsonObject.put("invoice_info", extJson.toJSONString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void setUserReimburseLevel(Object userId, Map<Long, String> reimburseLevelMap, JSONObject userDataJsonObject, Object dptId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String dtrip_personnel_rank = TripSyncConfigUtil.getTripsyncSettingByKey("dtrip_personnel_rank"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!StringUtils.isEmpty(dtrip_personnel_rank)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String reimbursenumber = (String)reimburseLevelMap.get(Long.parseLong(userId.toString())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!"0".equals(dtrip_personnel_rank)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Long companyId = CoreBaseBillServiceHelper.initCompanyByDept(Long.parseLong(dptId.toString())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingleFromCache("bos_org", "id,name,number", new QFilter[]{new QFilter("id", "in", companyId)}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                switch (dtrip_personnel_rank) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    case "1": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (StringUtils.isNotEmpty(reimbursenumber) && dynamicObject != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            userDataJsonObject.put("out_rank_id", dynamicObject.getString("number") + "-" + reimbursenumber.trim()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    case "2": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (StringUtils.isNotEmpty(reimbursenumber)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            userDataJsonObject.put("out_rank_id", reimbursenumber.trim()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    case "3": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (StringUtils.isNotEmpty(reimbursenumber) && dynamicObject != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            userDataJsonObject.put("out_rank_id", dynamicObject.getString("number") + "-" + reimbursenumber.trim()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } else if (dynamicObject != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            userDataJsonObject.put("out_rank_id", dynamicObject.getString("number") + "-General-01"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    case "4": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (StringUtils.isNotEmpty(reimbursenumber)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            userDataJsonObject.put("out_rank_id", reimbursenumber.trim()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            userDataJsonObject.put("out_rank_id", "General-01"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    case "5": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (StringUtils.isNotEmpty(reimbursenumber) && dynamicObject != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            userDataJsonObject.put("out_rank_id", dynamicObject.getString("number") + "-" + reimbursenumber.trim()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            userDataJsonObject.put("out_rank_id", "General-01"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void buildEditUserList(Object userId, Object phone, Object name, Object number, Object dptId, String client_id, String company_id, String access_token, String signKey, Map<Object, Object> dataOrgMappingMap, Map<Object, Object> dataUserMappingMap, JSONArray editUserList, Map<Long, String> reimburseLevelMap, Object superNumber) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Object externalNumber = dataUserMappingMap.get(number); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dataUserMappingMap != null && dataUserMappingMap.size() > 0 && externalNumber != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            HashMap<String, Object> signMap = new HashMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            signMap.put("client_id", client_id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            signMap.put("company_id", company_id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            signMap.put("access_token", access_token); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            signMap.put("timestamp", String.valueOf(System.currentTimeMillis() / 1000L)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            signMap.put("member_id", dataUserMappingMap.get(number)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            JSONObject userDataJsonObject = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            userDataJsonObject.put("phone", phone); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            userDataJsonObject.put("is_remark", 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            userDataJsonObject.put("realname", name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            userDataJsonObject.put("employee_number", number); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String baseCity = getBaseCity(number.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            userDataJsonObject.put("residentsname", baseCity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            int intValue = TripSyncConfigUtil.getIntValue("trip_Superior", 0, Arrays.asList(0, 1)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (intValue == 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                userDataJsonObject.put("immediate_superior_employee_number", superNumber == null ? "" : superNumber); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dataOrgMappingMap.get(dptId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.setBudgetCenterId(dataOrgMappingMap, dptId, userDataJsonObject, userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.setUserReimburseLevel(userId, reimburseLevelMap, userDataJsonObject, dptId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setInvoceInfo(dptId, userDataJsonObject); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            userDataJsonObject.put("use_company_money", this.getUseCompanyMoney()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            signMap.put("data", userDataJsonObject.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String editUserSign = DiDiServiceUtil.genSign(signMap, signKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            JSONObject editUserObj = new JSONObject(signMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            editUserObj.put("sign", editUserSign); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            editUserList.add(editUserObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void buildDelUserList(String client_id, String company_id, String access_token, String signKey, String userIdDelGroup, JSONArray delUserList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        HashMap<String, Object> signMap = new HashMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        signMap.put("client_id", client_id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        signMap.put("company_id", company_id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        signMap.put("access_token", access_token); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        signMap.put("timestamp", String.valueOf(System.currentTimeMillis() / 1000L)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        signMap.put("member_id", userIdDelGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String delUserSign = DiDiServiceUtil.genSign(signMap, signKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        JSONObject delUserObj = new JSONObject(signMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        delUserObj.put("sign", delUserSign); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        delUserList.add(delUserObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 获取base地 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param employeeNumber 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String getBaseCity(Object employeeNumber){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String baseCity = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (employeeNumber != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            QFilter statusFilter = QFilterUtil.getCurrentQf(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            statusFilter.and(QFilterUtil.getDataStatusFilter()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            QFilter qFilter = new QFilter("number", "=", employeeNumber); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            qFilter.and(statusFilter); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            DynamicObject hrPerson = BusinessDataServiceHelper.loadSingleFromCache("hrpi_person", "id", qFilter.toArray()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (hrPerson == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                logger.info("根据员工number未获取到HR人员基本信息{}", employeeNumber); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(hrPerson != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                DynamicObject baseLocation = QueryServiceHelper.queryOne("hrpi_baselocation", "location.city.id", new QFilter[]{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        new QFilter("person", QCP.equals, hrPerson.getLong("id")), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        new QFilter("iscurrentversion", QCP.equals, Boolean.TRUE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(baseLocation != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Long cityId = baseLocation.getLong("location.city.id"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    DynamicObject admind = QueryServiceHelper.queryOne("bd_admindivision", "name", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            new QFilter("id", QCP.equals, cityId).toArray()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 查询行政区划名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if(admind != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        baseCity = admind.getString("name"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            logger.info("未获取到员工{}", employeeNumber); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return baseCity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Map<String, JSONArray> getChangedUserMap(String changeTime, Integer pageIndex, Integer pageSize, Map<Object, Object> dataOrgMappingMap, Map<String, Object> map) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date changeDate = TripCommonUtil.convertToDate(changeTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Map<String, Object>> userChangeInfos = UserHelper.getUserInfosByTimeNew(pageIndex, pageSize, changeDate, map); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (userChangeInfos != null && userChangeInfos.size() >= 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<String, JSONArray> postUserMap = new HashMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<String, String> supplierMap = TripCommonUtil.getTripServiceInfo(this.supplier()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String client_id = (String)supplierMap.get("appkey"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String company_id = (String)supplierMap.get("orationid"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String signKey = (String)supplierMap.get("reservedfield1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String access_token = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            QFilter uFilter = new QFilter("server", "=", this.supplier()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            uFilter.and(new QFilter("datatype", "=", "bos_user")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<Object, Object> dataUserMappingMap = TripSyncDataMappingUtil.getDataMappingMapByFilter(uFilter, "number", "outdataid"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            JSONArray addUserList = new JSONArray(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Map<String, Object>> tmpUserChangeInfo = (List)userChangeInfos.stream().filter((userChangeObjMap) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return !dataUserMappingMap.containsKey(userChangeObjMap.get("number")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<Long, String> reimburseLevelMap = UserDao.getReimburseLevelNumberNew(userChangeInfos); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tmpUserChangeInfo.stream().filter((userChangeObjMap) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return (null == userChangeObjMap.get("enable") || !"0".equals(userChangeObjMap.get("enable").toString())) && (null == userChangeObjMap.get("isforbidden") || !"true".equals(userChangeObjMap.get("isforbidden").toString())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }).forEach((userChangeObjMap) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.buildAddUserList(userChangeObjMap.get("id"), userChangeObjMap.get("phone"), userChangeObjMap.get("name"), userChangeObjMap.get("number"), userChangeObjMap.get("dptId"), client_id, company_id, access_token, signKey, dataOrgMappingMap, addUserList, reimburseLevelMap, userChangeObjMap.get("supernumber")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (CollectionUtils.isNotEmpty(addUserList)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                postUserMap.put("add", addUserList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Map<String, Object>> maxTimeUserChangeInfos = new ArrayList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            userChangeInfos.stream().collect(Collectors.groupingBy(v -> v.get("id").toString())).forEach((key, valueList) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                maxTimeUserChangeInfos.add(valueList.stream().filter(v -> v.get("modifytime") != null).max( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Comparator.comparing(v -> (Date) v.get("modifytime"))).get()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.sortList(maxTimeUserChangeInfos); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            JSONArray editUserList = new JSONArray(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            maxTimeUserChangeInfos.stream().filter(userChangeObjMap -> userChangeObjMap.get("number") != null && dataUserMappingMap.containsKey(userChangeObjMap.get("number")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    && !((null != userChangeObjMap.get("enable") && "0".equals(userChangeObjMap.get("enable").toString())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    || (null != userChangeObjMap.get("isforbidden") && "true".equals(userChangeObjMap.get("isforbidden").toString())))).collect(Collectors.toList()).forEach(userChangeObjMap -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                buildEditUserList(userChangeObjMap.get("id"), userChangeObjMap.get("phone"), userChangeObjMap.get("name"), userChangeObjMap.get("number"), userChangeObjMap.get("dptId"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        client_id, company_id, access_token, signKey, dataOrgMappingMap, dataUserMappingMap, editUserList, reimburseLevelMap, userChangeObjMap.get("supernumber")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (CollectionUtils.isNotEmpty(editUserList)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                postUserMap.put("edit", editUserList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            DynamicObjectCollection servers = TripUserGrantUtils.getServers(this.supplier()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (CollectionUtils.isNotEmpty(servers)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Object paramValue = map == null ? 0 : map.getOrDefault("didi", "0"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (paramValue == null || "0".equals(paramValue.toString())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    postUserMap.clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            JSONArray delUserList = new JSONArray(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Map<String, Object>> delUserChangeInfos = (List)maxTimeUserChangeInfos.stream().filter((userChangeDO) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return userChangeDO.get("number") != null && (null != userChangeDO.get("enable") && "0".equals(userChangeDO.get("enable").toString()) || null != userChangeDO.get("isforbidden") && "true".equals(userChangeDO.get("isforbidden").toString())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (delUserChangeInfos.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                int size = delUserChangeInfos.size() / 100 + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map<Integer, List> userMapGroup = new HashMap(size); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                int i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for(i = 0; i < size; ++i) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    userMapGroup.put(i, new ArrayList(100)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for(i = 0; i < delUserChangeInfos.size(); ++i) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    int index = i / 100; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Object number = ((Map)delUserChangeInfos.get(i)).get("number"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ((List)userMapGroup.get(index)).add(number); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for(i = 0; i < userMapGroup.size(); ++i) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List userMapGroupList = (List)userMapGroup.get(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    StringBuilder userIdSb = new StringBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    for(int j = 0; j < userMapGroupList.size(); ++j) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        String innerNumber = (String)userMapGroupList.get(j); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Long outerUserId = (Long)dataUserMappingMap.get(innerNumber); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (outerUserId != null && outerUserId != 0L) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if ("".equals(userIdSb.toString())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                userIdSb = userIdSb.append(outerUserId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                userIdSb = userIdSb.append("_").append(outerUserId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (StringUtils.isNotEmpty(userIdSb.toString())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        this.buildDelUserList(client_id, company_id, access_token, signKey, userIdSb.toString(), delUserList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (CollectionUtils.isNotEmpty(delUserList)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    postUserMap.put("del", delUserList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return postUserMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (pageIndex == 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.tripSyncLogParam.setMessage(ResManager.loadKDString("商旅集成,差量更新,差量人员为空!", "DiDiTripUserInvoke_2", "fi-er-business", new Object[0])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    protected Object convert(Object info) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return info; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    protected String batPushProcess(Object data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, JSONArray> postUserJSONArrayMap = (Map)data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (postUserJSONArrayMap != null && postUserJSONArrayMap.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            AtomicReference<Boolean> successflag = new AtomicReference(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<JSONArray> waitDelData = Lists.newArrayListWithCapacity(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            postUserJSONArrayMap.forEach((syncKey, postUserJSONArray) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String url = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                switch (syncKey) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    case "add": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        url = (String) ExternalConstants.DIDIURLMAP.get("memberSingleKey"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    case "edit": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        url = (String)ExternalConstants.DIDIURLMAP.get("memberEditKey"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    case "del": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        url = (String)ExternalConstants.DIDIURLMAP.get("memberDelKey"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (StringUtils.isNotBlank(url)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Map<String, String> supplierMap = TripCommonUtil.getTripServiceInfo(this.supplier()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String signKey = (String)supplierMap.get("reservedfield1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    RefObject<List<TripSyncLogParam>> refObject = new RefObject(new ArrayList(10)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List<TripSyncDataMappingModel> dataMappingList = DiDiOrgAndUserInvokeUtil.postChangeData(successflag, syncKey, "bos_user", postUserJSONArray, url, this.supplier(), this.tripSyncLogParam, this.tripSyncLogParamList, signKey, refObject); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    TripSyncDataMappingUtil.saveTripSyncDataMapping(dataMappingList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (StringUtils.equals(syncKey, "del")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        waitDelData.add(postUserJSONArray); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ((List)refObject.getValue()).stream().forEach((e) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        this.addTripSyncLogParam((TripSyncLogParam)e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.dealWaitDelData(waitDelData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String code = "300"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if ((Boolean)successflag.get()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                code = "200"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return code; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String code = "200"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (this.tripSyncLogParam.getStatus().equals("B")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                code = "300"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.tripSyncLogParam.setMessage(ResManager.loadKDString("商旅集成,差量更新,差量人员为空!", "DiDiTripUserInvoke_2", "fi-er-business", new Object[0])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return code; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    protected boolean syncUserByPage() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void setBudgetCenterId(Map<Object, Object> dataOrgMappingMap, Object dptId, JSONObject userDataJsonObject, Object userId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!dataOrgMappingMap.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            int paramValue = TripSyncConfigUtil.getIntValue("budget_center_id", 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Object budgetCenterId = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            switch (paramValue) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case 0: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case 2: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    budgetCenterId = dataOrgMappingMap.get(dptId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case 1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    DynamicObject userInfo = BusinessDataServiceHelper.loadSingle("bos_user", "id,number,entryentity.dpt,entryentity.ispartjob,entryentity.id", new QFilter[]{new QFilter("id", "=", Long.parseLong(userId.toString()))}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (userInfo != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        DynamicObjectCollection entryEntity = userInfo.getDynamicObjectCollection("entryentity"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        int size = entryEntity.size(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        for(int i = 0; i < size; ++i) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            DynamicObject dynamicObject = (DynamicObject)entryEntity.get(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            boolean ispartjob = dynamicObject.getBoolean("ispartjob"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (!ispartjob) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                Long id = ErCommonUtils.getPk(dynamicObject.get("dpt")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                Long companyId = CoreBaseBillServiceHelper.initCompanyByDept(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                budgetCenterId = dataOrgMappingMap.get(companyId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case 3: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Long accountOrgId = CoreBaseBillServiceHelper.getAccountOrgId(Long.parseLong(dptId.toString())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    budgetCenterId = dataOrgMappingMap.get(accountOrgId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            userDataJsonObject.put("budget_center_id", budgetCenterId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer getUseCompanyMoney() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return TripSyncConfigUtil.getBoolean("dtrip_use_company_money") ? 1 : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void sortList(List<Map<String, Object>> maxTimeUserChangeInfos) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        maxTimeUserChangeInfos.sort(Comparator.comparing((t) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return String.valueOf(t.get("modifytime")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        })); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void dealWaitDelData(List<JSONArray> waitDelData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!CollectionUtils.isEmpty(waitDelData)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            JSONArray delJsonArray = (JSONArray)waitDelData.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<String> outIdLists = Lists.newArrayListWithCapacity(16); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Iterator var4 = delJsonArray.iterator(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            while(var4.hasNext()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Object o = var4.next(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                JSONObject jsonObject = (JSONObject)o; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String member_id = jsonObject.getString("member_id"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!StringUtils.isEmpty(member_id)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String[] outIDs = member_id.split("_"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    outIdLists.addAll((Collection)Arrays.stream(outIDs).collect(Collectors.toList())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            logger.info("外部数据ID", outIdLists.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            QFilter tmpFilter = new QFilter("server", "=", this.supplier()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tmpFilter.and(new QFilter("datatype", "=", "bos_user")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Object> numbers = Lists.newArrayListWithCapacity(16); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<Object, Object> dataUserMappingMap = TripSyncDataMappingUtil.getDataMappingMapByFilter(tmpFilter, "outdataid", "number"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Iterator var15 = outIdLists.iterator(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            while(var15.hasNext()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String outId = (String)var15.next(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                long outIdLong = Long.parseLong(outId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (dataUserMappingMap.containsKey(outIdLong)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Object number = dataUserMappingMap.get(outIdLong); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (number != null && !StringUtils.isEmpty(number.toString())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        numbers.add(number); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!CollectionUtils.isEmpty(numbers)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                DeleteServiceHelper.delete("er_tripsync_datamapping", new QFilter[]{new QFilter("server", "=", this.supplier()), new QFilter("number", "in", numbers)}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 |