| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- //
- // Source code recreated from a .class file by IntelliJ IDEA
- // (powered by FernFlower decompiler)
- //
- package com.kingdee.eas.custom.szpgm.osf.task;
- import cn.hutool.core.util.StrUtil;
- import cn.hutool.http.HttpUtil;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.kingdee.bos.BOSException;
- import com.kingdee.bos.Context;
- import com.kingdee.bos.bsf.service.app.IHRMsfService;
- 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.bos.tool.function.Strings;
- import com.kingdee.eas.base.permission.UserInfo;
- import com.kingdee.eas.common.EASBizException;
- import com.kingdee.eas.framework.CoreBaseCollection;
- import com.kingdee.eas.hr.ats.AttendanceEquipmentFactory;
- import com.kingdee.eas.hr.ats.AttendanceEquipmentInfo;
- import com.kingdee.eas.hr.ats.AttendanceFileFactory;
- import com.kingdee.eas.hr.ats.AttendanceFileInfo;
- import com.kingdee.eas.hr.ats.PunchCardRecordCollection;
- import com.kingdee.eas.hr.ats.PunchCardRecordFactory;
- import com.kingdee.eas.hr.ats.PunchCardRecordInfo;
- import com.kingdee.eas.hr.ats.PunchCardSourceEnum;
- import com.kingdee.shr.ats.web.util.HRTimeWebUtils;
- import java.sql.Timestamp;
- import java.time.LocalDate;
- import java.time.LocalDateTime;
- import java.time.LocalTime;
- import java.time.format.DateTimeFormatter;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.Map;
- import java.util.Set;
- import org.apache.log4j.Logger;
- public class CardToShrOSFService implements IHRMsfService {
- private static Logger logger = Logger.getLogger(CardToShrOSFService.class);
- private static final String TIME_RANGE = "timeRange";
- private static final String STOP = "stop";
- private static final String RESTART = "ReStart";
- private static final String SPEND_FACE = "刷脸";
- public Object process(Context ctx, Map param) throws EASBizException, BOSException {
- System.out.println("同步打卡记录开始---------------------------------------------------------------------------------------");
- Map retMap = new HashMap();
- JSONArray formatErrorRecords = new JSONArray();
- JSONArray notExistRecords = new JSONArray();
- JSONArray duplicateRecords = new JSONArray();
- int recordCtn = 0;
- int successCtn = 0;
- String url = (String)param.get("url");
- String sign = (String)param.get("sign");
- String forwardHour = (String)param.get("forwardHour");
- String startDate = (String)param.get("startDate");
- String endDate = (String)param.get("endDate");
- String empNo = (String)param.get("empNo");
- String minusMinutes = (String)param.get("minusMinutes");
- String size = (String)param.get("size");
- LocalDateTime startTime = LocalDateTime.now();
- LocalDateTime endTime = LocalDateTime.now();
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
- try {
- if (StrUtil.isNotBlank(startDate)) {
- if (startDate.length() > 10) {
- startTime = LocalDateTime.parse(startDate, formatter);
- } else {
- LocalDate localDate = LocalDate.parse(startDate, DateTimeFormatter.ISO_LOCAL_DATE);
- startTime = LocalDateTime.of(localDate, LocalTime.MIN);
- }
- } else if (StrUtil.isNotBlank(minusMinutes)) {
- startTime = startTime.minusMinutes((long)Integer.parseInt(minusMinutes));
- } else {
- startTime = startTime.minusMinutes(5L);
- }
- if (StrUtil.isNotBlank(forwardHour)) {
- startTime = startTime.minusHours((long)Integer.parseInt(forwardHour));
- }
- if (StrUtil.isNotBlank(endDate)) {
- if (startDate.length() > 10) {
- endTime = LocalDateTime.parse(endDate, formatter);
- } else {
- LocalDate localDate = LocalDate.parse(endDate, DateTimeFormatter.ISO_LOCAL_DATE);
- endTime = LocalDateTime.of(localDate, LocalTime.MAX);
- }
- }
- } catch (Exception e) {
- System.out.println("日期格式化异常");
- e.printStackTrace();
- }
- int pageIndex = 0;
- int pageSize = 200;
- if (StrUtil.isNotBlank(size)) {
- pageSize = Integer.parseInt(size);
- }
- int code = 0;
- boolean end = false;
- int pageCount = 0;
- try {
- do {
- ++pageIndex;
- Map<String, Object> paramMap = new HashMap();
- paramMap.put("recordStartDate", startTime.format(formatter));
- paramMap.put("recordEndDate", endTime.format(formatter));
- paramMap.put("pageIndex", pageIndex);
- paramMap.put("pageSize", pageSize);
- paramMap.put("timestamp", System.currentTimeMillis() / 1000L);
- if (StrUtil.isNotBlank(empNo)) {
- paramMap.put("empNo", empNo);
- }
- paramMap.put("sign", SignUtil.generateSignature(paramMap, sign));
- String jsonResult = null;
- try {
- paramMap.put("url", url);
- System.out.println("同步打卡记录参数:" + JSON.toJSONString(paramMap));
- jsonResult = HttpUtil.post(url, JSON.toJSONString(paramMap));
- System.out.println("请求结果:" + jsonResult);
- } catch (Exception e) {
- logger.error("请求异常", e);
- e.printStackTrace();
- }
- try {
- if (!StrUtil.isNotBlank(jsonResult)) {
- code = 1;
- System.out.println("没有数据");
- } else {
- JSONObject jsonObject = JSONObject.parseObject(jsonResult);
- code = jsonObject.getInteger("code");
- JSONObject data = jsonObject.getJSONObject("data");
- if (0 == code && null != data) {
- pageCount = data.getInteger("pageCount");
- JSONArray datalist = data.getJSONArray("datalist");
- JSONArray recordsJson = new JSONArray();
- recordCtn += datalist.size();
- for(int i = 0; i < datalist.size(); ++i) {
- JSONObject record = datalist.getJSONObject(i);
- String eventType = record.getString("eventType");
- if ("刷脸".equals(eventType)) {
- String EquNo = record.getString("devId");
- EquNo = EquNo.replaceAll(" ", "");
- record.put("EquNo", EquNo);
- String CardId = record.getString("empNo");
- CardId = CardId.replaceAll(" ", "");
- record.put("CardId", CardId);
- String recordTime = record.getString("recordTime");
- recordTime = recordTime.replaceAll("/", "-");
- String[] Recs = recordTime.split(" ");
- String RecDate = Recs[0];
- String RecTime = Recs[1];
- if (!RecTime.startsWith("0")) {
- RecTime = "0" + RecTime;
- }
- record.put("RecDate", RecDate);
- record.put("RecTime", RecTime);
- record.put("Address", record.getString("devName"));
- recordsJson.add(record);
- } else {
- notExistRecords.add(record);
- }
- }
- try {
- System.out.println(recordsJson.toJSONString());
- Map<String, Object> ret = this.saveCards(ctx, recordsJson);
- successCtn += (Integer)ret.get("successCtn");
- formatErrorRecords.addAll((JSONArray)ret.get("formatErrorRecords"));
- notExistRecords.addAll((JSONArray)ret.get("notExistRecords"));
- } catch (Exception e) {
- logger.error("数据保存异常", e);
- e.printStackTrace();
- }
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- logger.error("保存打卡记录异常", e);
- }
- } while(pageIndex <= pageCount && 0 == code);
- } catch (Exception e) {
- logger.error("处理数据异常", e);
- e.printStackTrace();
- }
- retMap.put("recordCtn", recordCtn);
- retMap.put("successCtn", successCtn);
- retMap.put("formatErrorRecords", formatErrorRecords);
- retMap.put("notExistRecords", notExistRecords);
- retMap.put("duplicateRecords", duplicateRecords);
- System.out.println("同步打卡记录结束---------------------------------------------------------------------------------------");
- return retMap;
- }
- public Map saveCards(Context ctx, JSONArray recordsJson) throws BOSException, EASBizException {
- Map retMap = new HashMap();
- retMap.put("recordCtn", recordsJson.size());
- Set<String> EquNoSet = new HashSet();
- Set<String> setCardId = new HashSet();
- Timestamp minDateTime = null;
- Timestamp maxDateTime = null;
- JSONArray formatErrorRecords = new JSONArray();
- JSONArray notExistRecords = new JSONArray();
- JSONArray duplicateRecords = new JSONArray();
- CoreBaseCollection cardColl = new CoreBaseCollection();
- for(int i = 0; i < recordsJson.size(); ++i) {
- JSONObject jsonObject = recordsJson.getJSONObject(i);
- String EquNo = Strings.nullAsEmpty(jsonObject.getString("EquNo"));
- String CardId = Strings.nullAsEmpty(jsonObject.getString("CardId"));
- String RecDate = Strings.nullAsEmpty(jsonObject.getString("RecDate"));
- String RecTime = Strings.nullAsEmpty(jsonObject.getString("RecTime"));
- String Address = Strings.nullAsEmpty(jsonObject.getString("Address"));
- Date punchCardDate = HRTimeWebUtils.stringToShortDate(RecDate, true);
- Timestamp punchCardTime = HRTimeWebUtils.stringToTimestamp(RecDate + " " + RecTime, true);
- if (!"".equals(EquNo) && !"".equals(CardId) && punchCardDate != null && punchCardTime != null) {
- PunchCardRecordInfo cardInfo = new PunchCardRecordInfo();
- cardInfo.setEquipmentNum(EquNo);
- cardInfo.setAttendanceNum(CardId);
- cardInfo.setPunchCardDate(punchCardDate);
- cardInfo.setPunchCardTime(punchCardTime);
- cardInfo.setPunchCardPlace(Address);
- cardInfo.setPunchCardSource(PunchCardSourceEnum.attenceMachine);
- EquNoSet.add(EquNo);
- setCardId.add(CardId);
- 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(jsonObject);
- }
- }
- Map<String, AttendanceFileInfo> attendanceFileMap = AttendanceFileFactory.getLocalInstance(ctx).getPersonByAttendanceNum(setCardId);
- PunchCardRecordCollection existColl = this.getExistedPunchCardRecordCollection(ctx, minDateTime, maxDateTime, EquNoSet, setCardId);
- CoreBaseCollection cardCollFinally = new CoreBaseCollection();
- for(int i = 0; i < cardColl.size(); ++i) {
- PunchCardRecordInfo cardInfo = (PunchCardRecordInfo)cardColl.get(i);
- JSONObject jsObject = new JSONObject();
- jsObject.put("EquNo", cardInfo.getEquipmentNum());
- jsObject.put("CardId", cardInfo.getAttendanceNum());
- jsObject.put("RecDate", HRTimeWebUtils.dateShortToString(cardInfo.getPunchCardDate()));
- jsObject.put("RecTime", HRTimeWebUtils.timestampToString(cardInfo.getPunchCardTime()).substring(11));
- jsObject.put("Address", cardInfo.getPunchCardPlace());
- if (attendanceFileMap.containsKey(cardInfo.getAttendanceNum())) {
- if (!existColl.contains(cardInfo)) {
- cardInfo.setPunchCardSource(PunchCardSourceEnum.attenceMachine);
- AttendanceFileInfo attendanceFileInfo = (AttendanceFileInfo)attendanceFileMap.get(cardInfo.getAttendanceNum());
- cardInfo.setProposer(attendanceFileInfo.getProposer());
- cardInfo.setHrOrgUnit(attendanceFileInfo.getHrOrgUnit());
- cardInfo.setAdminOrgUnit(attendanceFileInfo.getAdminOrgUnit());
- cardInfo.setAdminOrgUnit(attendanceFileInfo.getAttAdminOrgUnit());
- cardInfo.setDescription(cardInfo.getEquipmentNum());
- try {
- cardInfo.setCreator((UserInfo)ctx.get("UserInfo"));
- cardInfo.setLastUpdateUser((UserInfo)ctx.get("UserInfo"));
- cardInfo.setCreateTime(new Timestamp(System.currentTimeMillis()));
- cardInfo.setLastUpdateTime(new Timestamp(System.currentTimeMillis()));
- } catch (Exception var23) {
- var23.printStackTrace();
- }
- cardCollFinally.add(cardInfo);
- }
- } else {
- notExistRecords.add(jsObject);
- }
- }
- PunchCardRecordFactory.getLocalInstance(ctx).saveBatchData(cardCollFinally);
- retMap.put("successCtn", cardCollFinally.size());
- retMap.put("formatErrorRecords", formatErrorRecords);
- retMap.put("notExistRecords", notExistRecords);
- retMap.put("duplicateRecords", duplicateRecords);
- return retMap;
- }
- private Map<String, AttendanceEquipmentInfo> getAttendanceEquipmentInfo(Context ctx, Set<String> EquNoSet) throws BOSException {
- new HashSet();
- EntityViewInfo evi = new EntityViewInfo();
- FilterInfo fi = new FilterInfo();
- evi.setFilter(fi);
- evi.getSelector().add(new SelectorItemInfo("id"));
- evi.getSelector().add(new SelectorItemInfo("state"));
- evi.getSelector().add(new SelectorItemInfo("address"));
- evi.getSelector().add(new SelectorItemInfo("number"));
- fi.getFilterItems().add(new FilterItemInfo("state", 1, CompareType.EQUALS));
- fi.getFilterItems().add(new FilterItemInfo("number", EquNoSet, CompareType.INCLUDE));
- CoreBaseCollection coll = AttendanceEquipmentFactory.getLocalInstance(ctx).getCollection(evi);
- Map<String, AttendanceEquipmentInfo> map = new HashMap();
- for(int i = 0; i < coll.size(); ++i) {
- AttendanceEquipmentInfo attendanceEquipmentInfo = (AttendanceEquipmentInfo)coll.get(i);
- map.put(attendanceEquipmentInfo.getNumber(), attendanceEquipmentInfo);
- }
- return map;
- }
- 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;
- }
- public void setErrorMessage(Map<String, Object> param, String bizCode, String errorMsg) {
- }
- }
|