chenmingliang 7 months ago
parent
commit
36c39aca50
1 changed files with 179 additions and 0 deletions
  1. 179 0
      websrc/com/kingdee/eas/custom/synctask/handler/PunchCardRecordEx.java

+ 179 - 0
websrc/com/kingdee/eas/custom/synctask/handler/PunchCardRecordEx.java

@@ -0,0 +1,179 @@
+package com.kingdee.eas.custom.synctask.handler;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.metadata.entity.EntityViewInfo;
+import com.kingdee.bos.metadata.entity.FilterInfo;
+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.framework.CoreBaseCollection;
+import com.kingdee.eas.hr.ats.*;
+import com.kingdee.shr.ats.web.util.HRTimeWebUtils;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+import org.springframework.ui.ModelMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.sql.*;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @Description TODO
+ * @Date 2024/10/29 17:51
+ * @Created by 30489
+ */
+public class PunchCardRecordEx extends PunchCardRecord {
+
+    public void syncZKPunchCardData(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap){
+        String url = "jdbc:sqlserver://10.0.3.23:1433;databaseName=kaoqin";
+        String username = "zhongkong";
+        String password = "6554+oijhh@";
+        try {
+            // 加载SQL Server JDBC驱动程序
+            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
+            // 建立连接
+            Connection connection = DriverManager.getConnection(url, username, password);
+            // 创建Statement对象
+            Statement statement = connection.createStatement();
+            // 执行查询语句
+            String query = "SELECT * as name FROM USERINFO ";
+            ResultSet resultSet = statement.executeQuery(query);
+            Context ctx = SHRContext.getInstance().getContext();
+            Set<String> setCardId = new HashSet();
+            Set<String> EquNoSet = new HashSet();
+            Timestamp minDateTime = null;
+            Timestamp maxDateTime = null;
+            CoreBaseCollection cardCollFinally = new CoreBaseCollection();
+            CoreBaseCollection cardColl = new CoreBaseCollection();
+            JSONArray formatErrorRecords = new JSONArray();
+            JSONArray duplicateRecords = new JSONArray();
+            JSONArray notExistRecords = new JSONArray();
+            // 处理查询结果
+            while (resultSet.next()) {
+                String personNumber = resultSet.getString("personNumber");//员工编码
+                String punchCardDate = resultSet.getString("name"); //打卡时间
+                String RecDate = punchCardDate.substring(0, 10);// 考勤日期
+                String RecTime = punchCardDate.substring(11,19);// 考勤时间
+                String locationDetail = resultSet.getString("name"); //打卡地点
+                String EquNo = resultSet.getString("EquNo"); //考勤机编码
+                String exceptionType = resultSet.getString("EquNo"); // 打卡/异常类型
+                Date punchDate = HRTimeWebUtils.stringToShortDate(RecDate, true);
+
+                Timestamp punchCardTime = HRTimeWebUtils.stringToTimestamp(punchCardDate, true);
+                // 处理数据
+                if (punchCardDate != null && punchCardTime != null) {
+                    PunchCardRecordInfo cardInfo = new PunchCardRecordInfo();
+                    // 考勤机编码
+                    cardInfo.setEquipmentNum(EquNo);
+                    //考勤编码
+                    cardInfo.setAttendanceNum(personNumber);
+                    //打卡日期
+                    cardInfo.setPunchCardDate(punchDate);
+                    //打卡时间
+                    cardInfo.setPunchCardTime(punchCardTime);
+                    // 打卡来源
+                    cardInfo.setPunchCardSource(PunchCardSourceEnum.mobileRegistration);
+                    // 打卡位置
+                    cardInfo.setPunchCardPlace(locationDetail);
+                    // 有效
+                    cardInfo.setPunchCardState(PunchCardStateEnum.normal);
+                    cardInfo.setSimpleName(exceptionType);
+                    cardInfo.setDescription(exceptionType);
+
+                    EquNoSet.add(EquNo);
+                    setCardId.add(personNumber);
+                    cardColl.add(cardInfo);
+
+                    if (minDateTime != null && maxDateTime != null) {
+                        if (punchCardTime.getTime() < minDateTime.getTime()) {
+                            minDateTime = punchCardTime;
+                        } else if (punchCardTime.getTime() > maxDateTime.getTime()) {
+                            maxDateTime = punchCardTime;
+                        }
+                    } else {
+
+                        minDateTime = punchCardTime;
+                        maxDateTime = punchCardTime;
+                    }
+
+                } else {
+                    formatErrorRecords.add(resultSet);
+                }
+            }
+            // 考勤档案
+            Map<String, AttendanceFileInfo> attendanceFileMap = AttendanceFileFactory.getLocalInstance(ctx).getPersonByAttendanceNum(setCardId);
+            //相同的数据
+            PunchCardRecordCollection existColl = this.getExistedPunchCardRecordCollection(ctx, minDateTime, maxDateTime, EquNoSet, setCardId);
+
+            for(int i = 0; i < cardColl.size(); ++i) {
+                // 原始 打卡记录实体
+                PunchCardRecordInfo cardInfo = (PunchCardRecordInfo)cardColl.get(i);
+                JSONObject jsObject = new JSONObject();
+                jsObject.put("deviceid", cardInfo.getEquipmentNum()); // deviceid --EquNo
+                jsObject.put("userid", cardInfo.getAttendanceNum()); // userid --CardId
+                jsObject.put("RecDate", HRTimeWebUtils.dateShortToString(cardInfo.getPunchCardDate())); //checkin_time --RecDate
+                jsObject.put("RecTime", HRTimeWebUtils.timestampToString(cardInfo.getPunchCardTime()).substring(11)); //checkin_time --RecDate
+                //员工是否有考勤档案
+                if (attendanceFileMap.containsKey(cardInfo.getAttendanceNum())) {
+                    if (existColl.contains(cardInfo)){
+                        duplicateRecords.add(jsObject);
+                    }else {
+                        // 打卡位置 ,考勤机 的地址
+                        cardInfo.setPunchCardPlace(cardInfo.getPunchCardPlace());
+                        //打卡来源
+                        cardInfo.setPunchCardSource(PunchCardSourceEnum.mobileRegistration);
+                        // 考勤实体
+                        AttendanceFileInfo attendanceFileInfo = (AttendanceFileInfo)attendanceFileMap.get(cardInfo.getAttendanceNum());
+                        // 姓名
+                        cardInfo.setProposer(attendanceFileInfo.getProposer());
+                        // HR 组织
+                        cardInfo.setHrOrgUnit(attendanceFileInfo.getHrOrgUnit());
+                        //行政组织
+                        cardInfo.setAdminOrgUnit(attendanceFileInfo.getAdminOrgUnit());
+                        cardInfo.setCreator((UserInfo)ctx.get("UserInfo"));
+                        cardInfo.setLastUpdateUser((UserInfo)ctx.get("UserInfo"));
+                        cardInfo.setCreateTime(new Timestamp((new Date()).getTime()));
+                        cardInfo.setLastUpdateTime(new Timestamp((new Date()).getTime()));
+                        cardCollFinally.add(cardInfo);
+                    }
+                }else {
+                    notExistRecords.add(jsObject);
+                }
+            }
+
+            PunchCardRecordFactory.getLocalInstance(ctx).saveBatchData(cardCollFinally);
+            // 关闭连接
+            resultSet.close();
+            statement.close();
+            connection.close();
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private PunchCardRecordCollection getExistedPunchCardRecordCollection(Context ctx, Timestamp minDateTime, Timestamp maxDateTime, Set<String> EquNoSet, Set<String> setCardId) throws BOSException {
+        EntityViewInfo evi = new EntityViewInfo();
+        FilterInfo fi = new FilterInfo();
+        evi.setFilter(fi);
+        evi.getSelector().add(new SelectorItemInfo("punchCardDate"));
+        evi.getSelector().add(new SelectorItemInfo("punchCardTime"));
+        evi.getSelector().add(new SelectorItemInfo("punchCardSource"));
+        evi.getSelector().add(new SelectorItemInfo("equipmentNum"));
+        evi.getSelector().add(new SelectorItemInfo("attendanceNum"));
+        fi.getFilterItems().add(new FilterItemInfo("equipmentNum", EquNoSet, CompareType.INCLUDE));
+        fi.getFilterItems().add(new FilterItemInfo("attendanceNum", setCardId, CompareType.INCLUDE));
+        fi.getFilterItems().add(new FilterItemInfo("punchCardTime", maxDateTime, CompareType.LESS_EQUALS));
+        fi.getFilterItems().add(new FilterItemInfo("punchCardTime", minDateTime, CompareType.GREATER_EQUALS));
+        PunchCardRecordCollection existColl = PunchCardRecordFactory.getLocalInstance(ctx).getPunchCardRecordCollection(evi);
+        return existColl;
+    }
+
+}