Quellcode durchsuchen

20241118部署生产代码提交 同步OA 、IOT

“luojun” vor 6 Monaten
Ursprung
Commit
fae7e8bc86

+ 11 - 11
src/com/kingdee/eas/basedata/org/app/AdminOrgUnitControllerBeanEx.java

@@ -70,17 +70,17 @@ public class AdminOrgUnitControllerBeanEx extends AdminOrgUnitControllerBean {
             //throw new BOSException(map.get("msg").toString());
             sb.append("OA同步错误信息:").append(oaMap.get("msg").toString()).append("\n");
         }
-        ////同步组织到IOT
-        //Map<String, List<Map<String, String>>> iotMap = SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncOrgUnitToIot(id);
-        //logger.error("AdminOrgUnitControllerBeanEx------------iotMap--------" + iotMap.toString());
-        //List<Map<String, String>> data = iotMap.get("data");
-        //if (data.size() > 0) {
-        //    sb.append("Iot同步错误信息:");
-        //    for (int i = 0; i < data.size(); i++) {
-        //        Map<String, String> map = data.get(i);
-        //        sb.append(map.get("msg")).append("\n");
-        //    }
-        //}
+        //同步组织到IOT
+        Map<String, List<Map<String, String>>> iotMap = SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncOrgUnitToIot(id);
+        logger.error("AdminOrgUnitControllerBeanEx------------iotMap--------" + iotMap.toString());
+        List<Map<String, String>> data = iotMap.get("data");
+        if (data.size() > 0) {
+            sb.append("Iot同步错误信息:");
+            for (int i = 0; i < data.size(); i++) {
+                Map<String, String> map = data.get(i);
+                sb.append(map.get("msg")).append("\n");
+            }
+        }
         if (sb.length() > 0) {
             throw new BOSException(sb.toString());
         }

+ 31 - 8
src/com/kingdee/eas/basedata/org/app/PersonControllerBeanEx.java

@@ -4,17 +4,22 @@ import com.kingdee.bos.BOSException;
 import com.kingdee.bos.Context;
 import com.kingdee.bos.dao.IObjectPK;
 import com.kingdee.bos.dao.IObjectValue;
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
 import com.kingdee.bos.metadata.entity.SelectorItemCollection;
+import com.kingdee.eas.basedata.person.PersonFactory;
 import com.kingdee.eas.basedata.person.PersonInfo;
 import com.kingdee.eas.basedata.person.app.PersonControllerBean;
 import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.custom.synctask.ActionTypeEnum;
 import com.kingdee.eas.custom.synctask.ISyncTranForIOTFacade;
 import com.kingdee.eas.custom.synctask.SyncTranForIOTFacadeFactory;
 import com.kingdee.eas.custom.synctask.SyncTranForOAFacadeFactory;
+import com.kingdee.eas.hr.ats.AtsUtil;
 import org.apache.log4j.Logger;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @author qingwu
@@ -32,7 +37,20 @@ public class PersonControllerBeanEx extends PersonControllerBean {
         PersonInfo info = (PersonInfo) model;
         String id = info.getId().toString();
         String number = info.getNumber().toString();
-        personError(ctx, id, number);
+        StringBuilder sb = new StringBuilder();
+        //同步人员到OA
+        Map<String, Map<String, String>> oaMap = SyncTranForOAFacadeFactory.getLocalInstance(ctx).syncPersonToOA(id, ActionTypeEnum.ADD);
+        Map<String, String> result = oaMap.get(number);
+        logger.error("PersonControllerBeanEx------------result--------" + result);
+        if (result != null) {
+            if (!result.get("state").equals("success")) {
+                //throw new BOSException(map.get("msg").toString());
+                sb.append("OA同步错误信息:").append(oaMap.get("msg").toString());
+            }
+        }
+        if (sb.length() > 0) {
+            throw new BOSException(sb.toString());
+        }
 
 
         return iObjectPK;
@@ -71,13 +89,18 @@ public class PersonControllerBeanEx extends PersonControllerBean {
                 sb.append("OA同步错误信息:").append(oaMap.get("msg").toString());
             }
         }
-        ////同步人员到IOT
-        //Map<String, String> iotMap = SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncPersonToIot(id);
-        //logger.error("PersonControllerBeanEx------------iotMap--------" + iotMap);
-        //logger.error("PersonControllerBeanEx------------number--------" + number);
-        //if (iotMap.containsKey(number)) {
-        //    sb.append("Iot同步错误信息:").append(iotMap.get(number));
-        //}
+        PersonInfo personInfo = PersonFactory.getLocalInstance(ctx).getPersonCollection("select employeeType.number where id = '" + id + "'").get(0);
+        String employeeTypeNumber = personInfo.getEmployeeType().getNumber();
+        if (!employeeTypeNumber.equals("009")) {
+            //同步人员到IOT
+            Map<String, String> iotMap = SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncPersonToIot(id);
+            logger.error("PersonControllerBeanEx------------iotMap--------" + iotMap);
+            logger.error("PersonControllerBeanEx------------number--------" + number);
+            if (iotMap.containsKey(number)) {
+                sb.append("Iot同步错误信息:").append(iotMap.get(number));
+            }
+        }
+
         if (sb.length() > 0) {
             throw new BOSException(sb.toString());
         }

+ 27 - 24
src/com/kingdee/eas/custom/synctask/SyncTranForIOTFacadeControllerBean.java

@@ -65,32 +65,35 @@ public class SyncTranForIOTFacadeControllerBean extends AbstractSyncTranForIOTFa
         adminOrgStatusMap.put("三级组织", 5);//三级组织  子公司
         adminOrgStatusMap.put("四级组织", 6);//四级组织  管理
 
-        personStatusMap.put("001", "1");//试用员工
-        personStatusMap.put("011", "1");//待岗
-        personStatusMap.put("006", "1");//长期病假
-        personStatusMap.put("007", "1");//停薪留职
-        personStatusMap.put("005", "1");//出国
-        personStatusMap.put("012", "1");//返聘员工
+        personStatusMap.put("001", "1");//正式员工
+        personStatusMap.put("002", "1");//试用员工
+        personStatusMap.put("006", "1");//待岗
+        personStatusMap.put("007", "1");//长期病假
+        personStatusMap.put("003", "1");//停薪留职
+        personStatusMap.put("004", "1");//出国
+        personStatusMap.put("013", "1");//返聘员工
         personStatusMap.put("031", "1");//长学
         personStatusMap.put("S01", "1");//实习生
         personStatusMap.put("S02", "1");//劳务派遣
-        personStatusMap.put("S05", "1");//待分配
-        personStatusMap.put("S03", "1");//顾问
-        personStatusMap.put("S20", "1");//临时工
-        personStatusMap.put("002", "3");//辞退
-        personStatusMap.put("010", "3");//辞职
-        personStatusMap.put("009", "3");//退休
-        personStatusMap.put("003", "3");//下岗
-        personStatusMap.put("004", "3");//离休
-        personStatusMap.put("013", "3");//开除
-        personStatusMap.put("020", "3");//解聘
-        personStatusMap.put("021", "3");//失踪
-        personStatusMap.put("030", "3");//死亡
-        personStatusMap.put("S04", "3");//返聘终止
-        personStatusMap.put("S08", "3");//离职
-        personStatusMap.put("S09", "3");//派遣终止
-        personStatusMap.put("035", "3");//临时工终止
-        personStatusMap.put("S07", "3");//实习终止
+        personStatusMap.put("035", "1");//待分配
+        personStatusMap.put("S20", "1");//顾问
+        personStatusMap.put("S06", "1");//临时工
+
+
+        personStatusMap.put("009", "3");//辞职
+        personStatusMap.put("010", "3");//辞退
+        personStatusMap.put("011", "3");//退休
+        personStatusMap.put("005", "3");//下岗
+        personStatusMap.put("012", "3");//离休
+        personStatusMap.put("020", "3");//开除
+        personStatusMap.put("021", "3");//解聘
+        personStatusMap.put("030", "3");//失踪
+        personStatusMap.put("031", "3");//死亡
+        personStatusMap.put("S08", "3");//返聘终止
+        personStatusMap.put("S09", "3");//离职
+        personStatusMap.put("S05", "3");//派遣终止
+        personStatusMap.put("S07", "3");//临时工终止
+        personStatusMap.put("S03", "3");//实习终止
     }
 
     /**
@@ -227,7 +230,7 @@ public class SyncTranForIOTFacadeControllerBean extends AbstractSyncTranForIOTFa
                 personMap.put("status", personStatus);//状态
                 AdminOrgUnitInfo personDep = personPositionInfo.getPersonDep();
                 List orgIds = new ArrayList();
-                orgIds.add(personDep.getParent().getId().toString());
+                orgIds.add(personDep.getId().toString());
                 personMap.put("orgIds", orgIds);//来源方组织ID列表
                 dataList.add(personMap);
                 //员工编码

+ 46 - 19
src/com/kingdee/eas/custom/synctask/SyncTranForMJFacadeControllerBean.java

@@ -12,6 +12,10 @@ import com.kingdee.bos.metadata.entity.FilterItemInfo;
 import com.kingdee.bos.metadata.entity.SelectorItemInfo;
 import com.kingdee.bos.metadata.query.util.CompareType;
 import com.kingdee.eas.base.permission.UserInfo;
+import com.kingdee.eas.basedata.person.IPerson;
+import com.kingdee.eas.basedata.person.PersonCollection;
+import com.kingdee.eas.basedata.person.PersonFactory;
+import com.kingdee.eas.basedata.person.PersonInfo;
 import com.kingdee.eas.common.EASBizException;
 import com.kingdee.eas.custom.log.ISyncLog;
 import com.kingdee.eas.custom.log.SyncLogFactory;
@@ -20,23 +24,18 @@ import com.kingdee.eas.custom.log.app.DataDirectionEnum;
 import com.kingdee.eas.custom.log.app.DockingSystemEnum;
 import com.kingdee.eas.custom.log.app.SyncEntityNameEnum;
 import com.kingdee.eas.custom.log.app.SyncStatusEnum;
-import com.kingdee.eas.custom.sso.ExpiringMapCache;
 import com.kingdee.eas.custom.synctask.utils.HRTimeWebUtils;
 import com.kingdee.eas.framework.CoreBaseCollection;
 import com.kingdee.eas.hr.ats.*;
 import com.kingdee.eas.utils.EncryptUtils;
+import com.kingdee.eas.utils.ExpiringMapCache;
 import com.kingdee.util.StringUtils;
 import okhttp3.*;
 import org.apache.log4j.Logger;
-import org.springframework.ui.ModelMap;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.sql.*;
 import java.sql.Connection;
-import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.Date;
@@ -58,6 +57,7 @@ public class SyncTranForMJFacadeControllerBean extends AbstractSyncTranForMJFaca
         }
     }
 
+
     /**
      * 同步门禁打卡记录
      *
@@ -68,6 +68,7 @@ public class SyncTranForMJFacadeControllerBean extends AbstractSyncTranForMJFaca
      */
     @Override
     protected void _syncAccessRecord(Context ctx, String startDate, String endDate) throws BOSException {
+        logger.error("_syncAccessRecord------");
         Properties properties = new Properties();
         properties.put("version", propt.getProperty("version"));
         properties.put("tenantCode", propt.getProperty("tenantCode"));//租户编号,平台提供
@@ -76,18 +77,22 @@ public class SyncTranForMJFacadeControllerBean extends AbstractSyncTranForMJFaca
         properties.put("account", propt.getProperty("account"));//接口账号
         properties.put("password", propt.getProperty("password"));//接口账号密码
         properties.put("getTokenPath", propt.getProperty("getTokenPath"));//获取token接口地址
-
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 
         try {
             JSONObject params = new JSONObject();
             params.put("count", "100");
-            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
             //获取前三天数据
             Calendar calendar = Calendar.getInstance();
             calendar.add(Calendar.DAY_OF_YEAR, -3);
             Date threeDaysAgoDate = calendar.getTime();
-            //Date parse = sdf.parse("2022-01-01");
-            params.put("rowTimeStamp", threeDaysAgoDate.getTime());
+            if(StringUtils.isEmpty(startDate)){
+                //Date parse = sdf.parse("2022-01-01");
+                params.put("rowTimeStamp", threeDaysAgoDate.getTime());
+            }else{
+                Date parse = sdf.parse(startDate);
+                params.put("rowTimeStamp", parse.getTime());
+            }
             String payload = params.toJSONString();
             Map<String, String> headers = getHeader(payload, false);
 
@@ -103,18 +108,31 @@ public class SyncTranForMJFacadeControllerBean extends AbstractSyncTranForMJFaca
                 requestBuilder.header(header.getKey(), header.getValue());
             }
             Response response = client.newCall(requestBuilder.build()).execute();
+            logger.error("response----" + response.isSuccessful());
             if (response.isSuccessful()) {
                 //重置token,每次调用接口后刷新token
                 resetToken();
                 ObjectMapper mapper = new ObjectMapper();
-                Map<String, Object> result = mapper.readValue(response.body().string(), Map.class);
-                if (result.get("code").equals("0")) {
-                    JSONArray jsonArray = JSONArray.parseArray(result.get("data").toString());
+                String resultBody = response.body().string();
+                logger.error("resultBody----" + resultBody);
+                JSONObject result = JSONObject.parseObject(resultBody);
+                logger.error("respMap----" + result);
+                if (result.get("code").equals("0") || Integer.parseInt(result.get("code").toString()) == 0) {
+                    String data = result.get("data").toString();
+                    JSONArray jsonArray = JSONArray.parseArray(data);
                     logger.error("jsonArray---" + jsonArray.toString());
+                    logger.error("jsonArray---" + jsonArray.size());
+                    IPerson iPerson = PersonFactory.getLocalInstance(ctx);
+                    PersonCollection personCollection = iPerson.getPersonCollection("select number ");
+                    Set set = new HashSet();
+                    for (int i = 0; i < personCollection.size(); i++) {
+                        PersonInfo personInfo = personCollection.get(i);
+                        set.add(personInfo.getNumber().toString());
+                    }
                     for (int i = 0; i < jsonArray.size(); i++) {
                         JSONObject resultData = jsonArray.getJSONObject(i);
                         //保存门禁打卡记录
-                        saveMJPunchCardData(ctx, resultData);
+                        saveMJPunchCardData(ctx, resultData, set);
                     }
                 }
             }
@@ -130,8 +148,10 @@ public class SyncTranForMJFacadeControllerBean extends AbstractSyncTranForMJFaca
      * @param ctx
      * @param resultData
      */
-    public void saveMJPunchCardData(Context ctx, JSONObject resultData) {
+    public void saveMJPunchCardData(Context ctx, JSONObject resultData, Set set) {
+        logger.error("saveMJPunchCardData----");
         try {
+
             int success = 0;
             int error = 0;
             Set<String> setCardId = new HashSet();
@@ -155,8 +175,12 @@ public class SyncTranForMJFacadeControllerBean extends AbstractSyncTranForMJFaca
             //String EquNo = resultSet.getString("EquNo"); //考勤机编码
             //String exceptionType = resultSet.getString("EquNo"); // 打卡/异常类型
             //Date punchDate = HRTimeWebUtils.stringToShortDate(RecDate, true);
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
+            SimpleDateFormat sdfymd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            Date date = sdf.parse(punchCardDate);
+            String format = sdfymd.format(date);
             Date punchDate = com.kingdee.eas.custom.synctask.utils.HRTimeWebUtils.stringToShortDate(RecDate, true);
-            Timestamp punchCardTime = com.kingdee.eas.custom.synctask.utils.HRTimeWebUtils.stringToTimestamp(punchCardDate, true);
+            Timestamp punchCardTime = com.kingdee.eas.custom.synctask.utils.HRTimeWebUtils.stringToTimestamp(format ,true);
             // 处理数据
             if (punchCardDate != null && punchCardTime != null) {
                 PunchCardRecordInfo cardInfo = new PunchCardRecordInfo();
@@ -183,10 +207,13 @@ public class SyncTranForMJFacadeControllerBean extends AbstractSyncTranForMJFaca
                 ////简称
                 //cardInfo.setSimpleName(exceptionType);
                 //描述
-                //cardInfo.setDescription(exceptionType);
+                cardInfo.setDescription("门禁打卡机");
 
                 EquNoSet.add("001");
                 if (!StringUtils.isEmpty(personNumber)) {
+                    if (!set.contains(personNumber)) {
+                        return;
+                    }
                     setCardId.add(personNumber);
                     cardColl.add(cardInfo);
                 }
@@ -208,6 +235,7 @@ public class SyncTranForMJFacadeControllerBean extends AbstractSyncTranForMJFaca
             // 考勤档案
             Map<String, AttendanceFileInfo> attendanceFileMap = AttendanceFileFactory.getLocalInstance(ctx).getPersonByAttendanceNum(setCardId);
             logger.error("attendanceFileMap-----" + attendanceFileMap);
+            logger.error("setCardId-----" + setCardId);
             //相同的数据
             PunchCardRecordCollection existColl = this.getExistedPunchCardRecordCollection(ctx, minDateTime, maxDateTime, setCardId);
             logger.error("existColl-----" + existColl.size());
@@ -266,7 +294,6 @@ public class SyncTranForMJFacadeControllerBean extends AbstractSyncTranForMJFaca
             e.printStackTrace();
         }
     }
-
     /**
      * 重置token,每次调用接口后刷新token
      */
@@ -511,7 +538,7 @@ public class SyncTranForMJFacadeControllerBean extends AbstractSyncTranForMJFaca
                     ////简称
                     //cardInfo.setSimpleName(exceptionType);
                     //描述
-                    //cardInfo.setDescription(exceptionType);
+                    cardInfo.setDescription("数据库数据");
 
                     EquNoSet.add("001");
                     if (!StringUtils.isEmpty(personNumber)) {

+ 26 - 8
src/com/kingdee/eas/custom/synctask/SyncTranForOAFacadeControllerBean.java

@@ -52,14 +52,30 @@ public class SyncTranForOAFacadeControllerBean extends AbstractSyncTranForOAFaca
 
     static {
         personStatusMap.put("001", "正式");//正式员工
-        personStatusMap.put("002", "试用");//试用员工
-        personStatusMap.put("S06", "临时工");//临时工
+        personStatusMap.put("013", "正式");//返聘
+        personStatusMap.put("007", "正式");//长期病假
+        personStatusMap.put("003", "正式");//停薪留职
+        personStatusMap.put("004", "正式");//出国
+        personStatusMap.put("S01", "正式");//长学
+        personStatusMap.put("S20", "正式");//顾问
         personStatusMap.put("021", "解聘");//解聘
         personStatusMap.put("S09", "离职");//离职
-        personStatusMap.put("011", "退休");//退休
-        personStatusMap.put("S02", "试用");//实习生
+        personStatusMap.put("010", "离职");//被动离职
         personStatusMap.put("009", "离职");//辞职
-        personStatusMap.put("010", "离职");//辞退
+        personStatusMap.put("005", "离职");//下岗
+        personStatusMap.put("020", "离职");//开除
+        personStatusMap.put("S08", "离职");//返聘终止
+        personStatusMap.put("S05", "离职");//派遣终止
+        personStatusMap.put("S07", "离职");//临时工终止
+        personStatusMap.put("S03", "离职");//实习终止
+        personStatusMap.put("S06", "临时工");//临时工
+        personStatusMap.put("035", "临时工");//待分配
+        personStatusMap.put("S04", "临时工");//劳务派遣
+        personStatusMap.put("006", "临时工");//待岗
+        personStatusMap.put("002", "试用");//试用员工
+        personStatusMap.put("S02", "试用");//实习生
+        personStatusMap.put("011", "退休");//退休
+        personStatusMap.put("012", "退休");//离休
     }
 
     public SyncTranForOAFacadeControllerBean() throws BOSException {
@@ -527,7 +543,7 @@ public class SyncTranForOAFacadeControllerBean extends AbstractSyncTranForOAFaca
                 if (personInfo.get("isSyncOA") != null) {
                     Integer isSyncOA = Integer.parseInt((String) personInfo.get("isSyncOA"));
                     if (isSyncOA == 0) {
-                        PersonEntity person = packagingPerson(ctx, personPositionInfo, personOtherInfoMap);
+                        PersonEntity person = packagingPerson(ctx, personPositionInfo, personOtherInfoMap, action);
                         dataList.add(person);
                         setPersonIds.add(personPositionInfo.getPerson().getId());
                     }
@@ -605,7 +621,7 @@ public class SyncTranForOAFacadeControllerBean extends AbstractSyncTranForOAFaca
      * @param personPositionInfo
      * @return
      */
-    public PersonEntity packagingPerson(Context ctx, PersonPositionInfo personPositionInfo, Map<String, Date> personOtherInfoMap) throws
+    public PersonEntity packagingPerson(Context ctx, PersonPositionInfo personPositionInfo, Map<String, Date> personOtherInfoMap, ActionTypeEnum action) throws
             BOSException, EASBizException {
         SimpleDateFormat originalFormat = new SimpleDateFormat("yyyy-MM-dd");
         //人员
@@ -666,7 +682,9 @@ public class SyncTranForOAFacadeControllerBean extends AbstractSyncTranForOAFaca
         //登录名称
         person.setLoginid(personInfo.getNumber());
         //明文密码,会转密文  默认:Scy$1234
-        person.setPassword("Scy$1234");
+        if (action == ActionTypeEnum.ADD) {
+            person.setPassword("Scy$1234");
+        }
         //安全级别
         IObjectValue securityLe = (IObjectValue) personInfo.get("securityLe");
         if (securityLe != null) {

+ 2 - 1
src/com/kingdee/eas/custom/synctask/entity/PersonEntity.java

@@ -1,8 +1,8 @@
 package com.kingdee.eas.custom.synctask.entity;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -10,6 +10,7 @@ import java.util.Map;
  * @date 2024/10/24
  * @apiNote
  */
+@JsonInclude(JsonInclude.Include.NON_NULL)
 public class PersonEntity {
     // 񅧏
     private String workcode;

+ 5 - 0
src/com/kingdee/eas/hr/affair/app/FluctuationBizBillControllerBeanEx.java

@@ -5,6 +5,7 @@ import com.kingdee.bos.Context;
 import com.kingdee.bos.dao.IObjectPK;
 import com.kingdee.eas.basedata.person.PersonInfo;
 import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.custom.synctask.SyncTranForIOTFacadeFactory;
 import com.kingdee.eas.custom.synctask.SyncTranForOAFacadeFactory;
 import com.kingdee.eas.framework.CoreBaseInfo;
 import com.kingdee.eas.hr.affair.FluctuationBizBillEntryCollection;
@@ -12,6 +13,8 @@ import com.kingdee.eas.hr.affair.FluctuationBizBillEntryInfo;
 import com.kingdee.eas.hr.affair.FluctuationBizBillInfo;
 import org.apache.log4j.Logger;
 
+import java.util.Map;
+
 /**
  * @author qingwu
  * @date 2024/10/26
@@ -37,6 +40,8 @@ public class FluctuationBizBillControllerBeanEx extends FluctuationBizBillContro
         try {
             if (sb.length() > 0) {
                 SyncTranForOAFacadeFactory.getLocalInstance(ctx).syncPersonToOA(sb.toString(), null);
+                SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncPersonToIot(sb.toString());
+
             }
         } catch (Exception e) {
             e.printStackTrace();

+ 15 - 15
src/com/kingdee/eas/hr/org/app/OrgUnitOptFacadeControllerBeanEx.java

@@ -40,7 +40,7 @@ public class OrgUnitOptFacadeControllerBeanEx extends OrgUnitOptFacadeController
         //同步组织到OA
         SyncTranForOAFacadeFactory.getLocalInstance(ctx).syncOrgUnitToOA(iObjectPK.toString(), null);
         //同步组织到IOT
-        //SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncOrgUnitToIot(iObjectPK.toString());
+        SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncOrgUnitToIot(iObjectPK.toString());
 
         return iObjectPK;
     }
@@ -85,7 +85,7 @@ public class OrgUnitOptFacadeControllerBeanEx extends OrgUnitOptFacadeController
         //同步组织到OA
         SyncTranForOAFacadeFactory.getLocalInstance(ctx).syncOrgUnitToOA(orgID, null);
         //同步Iot
-        //SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncOrgUnitToIot(orgID);
+        SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncOrgUnitToIot(orgID);
 
     }
 
@@ -104,7 +104,7 @@ public class OrgUnitOptFacadeControllerBeanEx extends OrgUnitOptFacadeController
         //同步组织到OA
         SyncTranForOAFacadeFactory.getLocalInstance(ctx).syncOrgUnitToOA(unitID, ActionTypeEnum.DELETE);
         //同步Iot
-        //SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncOrgUnitToIot(unitID);
+        SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncOrgUnitToIot(unitID);
 
 
     }
@@ -123,7 +123,7 @@ public class OrgUnitOptFacadeControllerBeanEx extends OrgUnitOptFacadeController
         super._unSealUpOrg(ctx, unitId);
         SyncTranForOAFacadeFactory.getLocalInstance(ctx).syncOrgUnitToOA(unitId, ActionTypeEnum.DELETE);
         //同步Iot
-        //SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncOrgUnitToIot(unitId);
+        SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncOrgUnitToIot(unitId);
 
     }
 
@@ -142,7 +142,7 @@ public class OrgUnitOptFacadeControllerBeanEx extends OrgUnitOptFacadeController
         super._orgModifyLayerType(ctx, orgId, unitLayerTypeId);
         SyncTranForOAFacadeFactory.getLocalInstance(ctx).syncOrgUnitToOA(orgId, null);
         //同步Iot
-        //SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncOrgUnitToIot(orgId);
+        SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncOrgUnitToIot(orgId);
 
     }
 
@@ -156,16 +156,16 @@ public class OrgUnitOptFacadeControllerBeanEx extends OrgUnitOptFacadeController
             //throw new BOSException(map.get("msg").toString());
             sb.append("OA同步错误信息:").append(oaMap.get("msg").toString()).append("\n");
         }
-        ////同步组织到IOT
-        //Map<String, List<Map<String, String>>> iotMap = SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncOrgUnitToIot(id);
-        //List<Map<String, String>> data = iotMap.get("data");
-        //if (data.size() > 0) {
-        //    sb.append("Iot同步错误信息:");
-        //    for (int i = 0; i < data.size(); i++) {
-        //        Map<String, String> map = data.get(i);
-        //        sb.append(map.get("msg")).append("\n");
-        //    }
-        //}
+        //同步组织到IOT
+        Map<String, List<Map<String, String>>> iotMap = SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncOrgUnitToIot(id);
+        List<Map<String, String>> data = iotMap.get("data");
+        if (data.size() > 0) {
+            sb.append("Iot同步错误信息:");
+            for (int i = 0; i < data.size(); i++) {
+                Map<String, String> map = data.get(i);
+                sb.append(map.get("msg")).append("\n");
+            }
+        }
         if (sb.length() > 0) {
             throw new BOSException(sb.toString());
         }

+ 18 - 18
src/com/kingdee/eas/hr/org/app/PersonOptFacadeControllerBeanEx.java

@@ -59,14 +59,14 @@ public class PersonOptFacadeControllerBeanEx extends PersonOptFacadeControllerBe
         PersonInfo person = (PersonInfo) model;
         String number = person.getNumber();
         String personId = person.getId().toString();
-        //Map<String, String> map = SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncPersonToIot(personId);
-        //if (map != null) {
-        //    if (StringUtils.isEmpty(number)) {
-        //        PersonInfo personInfo = PersonFactory.getLocalInstance(ctx).getPersonInfo(new ObjectUuidPK(personId));
-        //        number = personInfo.getNumber();
-        //    }
-        //    throw new BOSException(map.get(number));
-        //}
+        Map<String, String> map = SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncPersonToIot(personId);
+        if (map != null) {
+            if (StringUtils.isEmpty(number)) {
+                PersonInfo personInfo = PersonFactory.getLocalInstance(ctx).getPersonInfo(new ObjectUuidPK(personId));
+                number = personInfo.getNumber();
+            }
+            throw new BOSException(map.get(number));
+        }
     }
 
     private void personError(Context ctx, String id, String number) throws BOSException, EASBizException {
@@ -78,16 +78,16 @@ public class PersonOptFacadeControllerBeanEx extends PersonOptFacadeControllerBe
             //throw new BOSException(map.get("msg").toString());
             sb.append("OA同步错误信息:").append(oaMap.get("msg").toString());
         }
-        ////同步组织到IOT
-        //Map<String, List<Map<String, String>>> iotMap = SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncPersonToIot(id);
-        //List<Map<String, String>> data = iotMap.get("data");
-        //if (data.size() > 0) {
-        //    sb.append("Iot同步错误信息:");
-        //    for (int i = 0; i < data.size(); i++) {
-        //        Map<String, String> map = data.get(i);
-        //        sb.append(map.get("msg")).append("\n");
-        //    }
-        //}
+        //同步组织到IOT
+        Map<String, List<Map<String, String>>> iotMap = SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncPersonToIot(id);
+        List<Map<String, String>> data = iotMap.get("data");
+        if (data.size() > 0) {
+            sb.append("Iot同步错误信息:");
+            for (int i = 0; i < data.size(); i++) {
+                Map<String, String> map = data.get(i);
+                sb.append(map.get("msg")).append("\n");
+            }
+        }
         if (sb.length() > 0) {
             throw new BOSException(sb.toString());
         }

+ 57 - 0
src/com/kingdee/eas/utils/ExpiringMapCache.java

@@ -0,0 +1,57 @@
+package com.kingdee.eas.utils;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+public class ExpiringMapCache<K, V> {
+    private final Map<K, CacheValue<V>> cache = new ConcurrentHashMap<>();
+    private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+
+    public ExpiringMapCache() {
+        scheduler.scheduleAtFixedRate(() -> {
+            long currentTime = System.currentTimeMillis();
+            cache.entrySet().removeIf(entry -> currentTime >= entry.getValue().expiryTime);
+        }, 1, 1, TimeUnit.SECONDS); // 每秒检查过期
+    }
+
+    public void put(K key, V value, long durationInMillis) {
+        long expiryTime = System.currentTimeMillis() + durationInMillis;
+        cache.put(key, new CacheValue<>(value, expiryTime));
+    }
+
+    public V get(K key) {
+        CacheValue<V> cacheValue = cache.get(key);
+        if (cacheValue != null && System.currentTimeMillis() < cacheValue.expiryTime) {
+            return cacheValue.value;
+        }
+        cache.remove(key); // 删除已过期的条目
+        return null;
+    }
+
+    public void shutdown() {
+        scheduler.shutdown();
+    }
+
+    private static class CacheValue<V> {
+        private final V value;
+        private final long expiryTime;
+
+        public CacheValue(V value, long expiryTime) {
+            this.value = value;
+            this.expiryTime = expiryTime;
+        }
+    }
+
+    public static void main(String[] args) throws InterruptedException {
+        ExpiringMapCache<String,String> cache = new ExpiringMapCache<>();
+        cache.put("111","AAA",2000);
+        while(true){
+            System.out.println(cache.get("111"));
+            Thread.sleep(1000);
+        }
+    }
+}
+

+ 0 - 1
src/com/kingdee/eas/utils/MJ.java

@@ -2,7 +2,6 @@ package com.kingdee.eas.utils;
 
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.kingdee.eas.custom.sso.ExpiringMapCache;
 import okhttp3.*;
 import org.apache.commons.lang3.StringUtils;
 

+ 46 - 0
websrc/com/kingdee/eas/custom/synctask/handler/FillSignCardBatchNewEditHandlerEx.java

@@ -0,0 +1,46 @@
+package com.kingdee.eas.custom.synctask.handler;
+
+import com.kingdee.eas.framework.CoreBaseInfo;
+import com.kingdee.eas.hr.ats.*;
+import com.kingdee.shr.ats.web.handler.FillSignCardBatchNewEditHandler;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
+import com.kingdee.util.StringUtils;
+import org.apache.log4j.Logger;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author qingwu
+ * @date 2024/11/18
+ * @apiNote
+ */
+public class FillSignCardBatchNewEditHandlerEx extends FillSignCardBatchNewEditHandler {
+
+    Logger logger = Logger.getLogger(FillSignCardBatchNewEditHandlerEx.class);
+
+    @Override
+    protected void beforeSave(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo model) throws SHRWebException {
+        super.beforeSave(request, response, model);
+        StringBuilder sb = new StringBuilder();
+        FillSignCardInfo fillSignCardInfo = (FillSignCardInfo) model;
+        FillSignCardEntryCollection entries = fillSignCardInfo.getEntries();
+        for (int i = 0; i < entries.size(); i++) {
+            FillSignCardEntryInfo fillSignCardEntryInfo = entries.get(i);
+            FillSignReasonInfo reason = fillSignCardEntryInfo.getReason();
+            String reasonName = reason.getName();
+            String remark = fillSignCardEntryInfo.getRemark();
+            logger.error("reasonNumber" + reasonName + "---remark" + remark);
+            //003 = 其它
+            if (reasonName.equals("其它") && StringUtils.isEmpty(remark)) {
+                sb.append("第" + (i + 1) + "条补卡原因为其它备注必填,请维护数据后保存! ").append("\n");
+            }
+            logger.error("sb-----" + sb.toString());
+
+            if (sb.length() > 0) {
+                throw new ShrWebBizException(sb.toString());
+            }
+        }
+    }
+}

+ 8 - 5
websrc/com/kingdee/eas/custom/synctask/handler/PunchCardRecordListHandlerEx.java

@@ -83,9 +83,9 @@ public class PunchCardRecordListHandlerEx extends PunchCardRecordListHandler {
      * @throws BOSException
      */
     public void syncPunchRecordFromMJAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws BOSException, ShrWebBizException {
-        //SyncTranForMJFacadeFactory.getLocalInstance(ctx).syncAccessRecord(null, null);
+        SyncTranForMJFacadeFactory.getLocalInstance(ctx).syncAccessRecord("", "");
         //syncZKPunchCardData(request, response, modelMap);
-        _syncAccessRecord(ctx, null, null);
+        //_syncAccessRecord(ctx, null, null);
     }
 
     /**
@@ -111,7 +111,6 @@ public class PunchCardRecordListHandlerEx extends PunchCardRecordListHandler {
         try {
             JSONObject params = new JSONObject();
             params.put("count", "100");
-            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
             //获取前三天数据
             Calendar calendar = Calendar.getInstance();
             calendar.add(Calendar.DAY_OF_YEAR, -3);
@@ -200,8 +199,12 @@ public class PunchCardRecordListHandlerEx extends PunchCardRecordListHandler {
             //String EquNo = resultSet.getString("EquNo"); //考勤机编码
             //String exceptionType = resultSet.getString("EquNo"); // 打卡/异常类型
             //Date punchDate = HRTimeWebUtils.stringToShortDate(RecDate, true);
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
+            SimpleDateFormat sdfymd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            Date date = sdf.parse(punchCardDate);
+            String format = sdfymd.format(date);
             Date punchDate = com.kingdee.eas.custom.synctask.utils.HRTimeWebUtils.stringToShortDate(RecDate, true);
-            Timestamp punchCardTime = com.kingdee.eas.custom.synctask.utils.HRTimeWebUtils.stringToTimestamp(punchCardDate, true);
+            Timestamp punchCardTime = com.kingdee.eas.custom.synctask.utils.HRTimeWebUtils.stringToTimestamp(format ,true);
             // 处理数据
             if (punchCardDate != null && punchCardTime != null) {
                 PunchCardRecordInfo cardInfo = new PunchCardRecordInfo();
@@ -228,7 +231,7 @@ public class PunchCardRecordListHandlerEx extends PunchCardRecordListHandler {
                 ////简称
                 //cardInfo.setSimpleName(exceptionType);
                 //描述
-                //cardInfo.setDescription(exceptionType);
+                cardInfo.setDescription("门禁打卡机");
 
                 EquNoSet.add("001");
                 if (!StringUtils.isEmpty(personNumber)) {