SHRAttendanceSync.java 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. package com.kingdee.eas.custom.wamke.syncdata.utils;
  2. import com.kingdee.bos.BOSException;
  3. import com.kingdee.bos.Context;
  4. import com.kingdee.eas.basedata.org.AdminOrgUnitCollection;
  5. import com.kingdee.eas.basedata.org.AdminOrgUnitFactory;
  6. import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
  7. import com.kingdee.eas.basedata.org.IAdminOrgUnit;
  8. import com.kingdee.eas.basedata.person.IPerson;
  9. import com.kingdee.eas.basedata.person.PersonCollection;
  10. import com.kingdee.eas.basedata.person.PersonFactory;
  11. import com.kingdee.eas.basedata.person.PersonInfo;
  12. import com.kingdee.eas.common.EASBizException;
  13. import com.kingdee.eas.cp.wfs.utils.DateUtils;
  14. import com.kingdee.eas.custom.wamke.syncdata.AttFinalizationFactory;
  15. import com.kingdee.eas.custom.wamke.syncdata.AttFinalizationInfo;
  16. import com.kingdee.eas.custom.wamke.syncdata.FinalStatusEnum;
  17. import com.kingdee.eas.custom.wamke.syncdata.IAttFinalization;
  18. import com.kingdee.eas.custom.wamke.syncdata.model.SyncAttendanceRequest;
  19. import com.kingdee.eas.custom.wamke.syncdata.model.SyncAttendanceResponse;
  20. import com.kingdee.eas.framework.CoreBaseCollection;
  21. import com.kingdee.eas.util.app.DbUtil;
  22. import java.math.BigDecimal;
  23. import java.text.ParseException;
  24. import java.util.Arrays;
  25. import java.util.List;
  26. import org.apache.commons.lang3.StringUtils;
  27. /**
  28. * SHR考勤数据同步
  29. * coyle
  30. * 202510
  31. */
  32. public class SHRAttendanceSync {
  33. /**
  34. * 分页查询
  35. */
  36. public void manualPagination(Context ctx,String updateTime,List deptNumbers) {
  37. SHRAttendanceSyncClient client = new SHRAttendanceSyncClient("https://rmsit.vankeservice.com");
  38. int currentPage = 1;
  39. boolean hasMoreData = true;
  40. while (hasMoreData) {
  41. SyncAttendanceRequest request = new SyncAttendanceRequest(updateTime, currentPage, 200);
  42. request.setDeptNumbers(deptNumbers);
  43. SyncAttendanceResponse response = client.syncAttendanceData(request);
  44. if (response.isSuccess() && response.getData() != null) {
  45. int recordCount = response.getData().getRecords().size();
  46. System.out.println("第 " + currentPage + " 页获取到 " + recordCount + " 条记录");
  47. // 处理当前页数据
  48. try {
  49. processAttendanceData(ctx,response);
  50. } catch (EASBizException e) {
  51. e.printStackTrace();
  52. } catch (BOSException e) {
  53. e.printStackTrace();
  54. } catch (ParseException e) {
  55. e.printStackTrace();
  56. }
  57. // 检查是否有下一页
  58. if (recordCount > 0) {
  59. currentPage++;
  60. } else {
  61. // 当前页没有数据,停止查询
  62. hasMoreData = false;
  63. System.out.println("第 " + currentPage + " 页没有数据,查询结束");
  64. }
  65. } else {
  66. System.out.println("第 " + currentPage + " 页查询失败: " + response.getErrorMessage());
  67. hasMoreData = false;
  68. }
  69. }
  70. }
  71. /**
  72. * 处理考勤数据
  73. * @throws ParseException
  74. * @throws EASBizException
  75. */
  76. private static void processAttendanceData(Context ctx,SyncAttendanceResponse response) throws BOSException, ParseException, EASBizException {
  77. CoreBaseCollection coreBaseCollection = new CoreBaseCollection();
  78. if (response.getData() != null && response.getData().getRecords() != null) {
  79. for (SyncAttendanceResponse.AttendanceRecord record : response.getData().getRecords()) {
  80. if (record.getDetails() != null) {
  81. System.out.println("部门: " + record.getDeptNumber() +
  82. ", 考勤周期: " + record.getAttendanceCycle() +
  83. ", 定案状态: " + record.getLockStatus());
  84. //部门
  85. IAdminOrgUnit orgIns = AdminOrgUnitFactory.getLocalInstance(ctx);
  86. AdminOrgUnitCollection orgCol = orgIns.getAdminOrgUnitCollection("where number='" + record.getDeptNumber() + "'");
  87. AdminOrgUnitInfo orgInfo = new AdminOrgUnitInfo();
  88. if(orgCol.size()>0){
  89. orgInfo = orgCol.get(0);
  90. }else{
  91. continue;
  92. }
  93. //考勤周期
  94. String attendanceCycle = record.getAttendanceCycle();
  95. //定案状态
  96. Integer lockStatus = record.getLockStatus();
  97. //
  98. String delSql = " delete from CT_SYN_AttFinalization where " +
  99. " CFAttendanceCycle = '"+attendanceCycle+"' " +
  100. " and CFAdminOrgUnitID = '"+orgInfo.getId().toString()+"'";
  101. DbUtil.execute(ctx, delSql);
  102. for (SyncAttendanceResponse.AttendanceDetail detail : record.getDetails()) {
  103. System.out.println(" 用户: " + detail.getUserId() +
  104. ", 工资项: " + detail.getSalaryCode() +
  105. ", 数值: " + detail.getNumericalValue());
  106. AttFinalizationInfo attFinalInfo = new AttFinalizationInfo();
  107. IPerson personIns = PersonFactory.getLocalInstance(ctx);
  108. PersonCollection perCol = personIns.getPersonCollection("where number='" + detail.getUserId() + "'");
  109. if(perCol.size()>0){
  110. PersonInfo personInfo = perCol.get(0);
  111. attFinalInfo.setPerson(personInfo);
  112. }else{
  113. continue;
  114. }
  115. attFinalInfo.setSalaryCode(detail.getSalaryCode());
  116. if(StringUtils.isNotEmpty(attendanceCycle)){
  117. attFinalInfo.setAttendanceCycle(attendanceCycle);
  118. }
  119. attFinalInfo.setAdminOrgUnit(orgInfo);
  120. FinalStatusEnum fstatus = lockStatus == 1 ? FinalStatusEnum.finalized : FinalStatusEnum.resolution;
  121. attFinalInfo.setLockStatus(fstatus);
  122. attFinalInfo.setBeginDate(DateUtils.formatDate(detail.getBeginDate(), "yyyyMMdd"));
  123. attFinalInfo.setEndDate(DateUtils.formatDate(detail.getEndDate(), "yyyyMMdd"));
  124. if(StringUtils.isNotEmpty(detail.getNumericalValue())){
  125. BigDecimal bigDecimal = new BigDecimal(detail.getNumericalValue());
  126. attFinalInfo.setNumValue(bigDecimal);
  127. }
  128. coreBaseCollection.add(attFinalInfo);
  129. }
  130. }
  131. }
  132. }
  133. // 定案
  134. // IAttFinalization attfIns = AttFinalizationFactory.getLocalInstance(ctx);
  135. //// attfIns.addnew(coreBaseCollection);
  136. }
  137. }