package com.kingdee.eas.custom.wamke.syncdata.utils; import com.kingdee.bos.BOSException; import com.kingdee.bos.Context; import com.kingdee.eas.basedata.org.AdminOrgUnitCollection; import com.kingdee.eas.basedata.org.AdminOrgUnitFactory; import com.kingdee.eas.basedata.org.AdminOrgUnitInfo; import com.kingdee.eas.basedata.org.IAdminOrgUnit; 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.cp.wfs.utils.DateUtils; import com.kingdee.eas.custom.wamke.syncdata.AttFinalizationFactory; import com.kingdee.eas.custom.wamke.syncdata.AttFinalizationInfo; import com.kingdee.eas.custom.wamke.syncdata.FinalStatusEnum; import com.kingdee.eas.custom.wamke.syncdata.IAttFinalization; import com.kingdee.eas.custom.wamke.syncdata.model.SyncAttendanceRequest; import com.kingdee.eas.custom.wamke.syncdata.model.SyncAttendanceResponse; import com.kingdee.eas.framework.CoreBaseCollection; import com.kingdee.eas.util.app.DbUtil; import java.math.BigDecimal; import java.text.ParseException; import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.StringUtils; /** * SHR考勤数据同步 * coyle * 202510 */ public class SHRAttendanceSync { /** * 分页查询 */ public void manualPagination(Context ctx,String updateTime,List deptNumbers) { SHRAttendanceSyncClient client = new SHRAttendanceSyncClient("https://rmsit.vankeservice.com"); int currentPage = 1; boolean hasMoreData = true; while (hasMoreData) { SyncAttendanceRequest request = new SyncAttendanceRequest(updateTime, currentPage, 200); request.setDeptNumbers(deptNumbers); SyncAttendanceResponse response = client.syncAttendanceData(request); if (response.isSuccess() && response.getData() != null) { int recordCount = response.getData().getRecords().size(); System.out.println("第 " + currentPage + " 页获取到 " + recordCount + " 条记录"); // 处理当前页数据 try { processAttendanceData(ctx,response); } catch (EASBizException e) { e.printStackTrace(); } catch (BOSException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } // 检查是否有下一页 if (recordCount > 0) { currentPage++; } else { // 当前页没有数据,停止查询 hasMoreData = false; System.out.println("第 " + currentPage + " 页没有数据,查询结束"); } } else { System.out.println("第 " + currentPage + " 页查询失败: " + response.getErrorMessage()); hasMoreData = false; } } } /** * 处理考勤数据 * @throws ParseException * @throws EASBizException */ private static void processAttendanceData(Context ctx,SyncAttendanceResponse response) throws BOSException, ParseException, EASBizException { CoreBaseCollection coreBaseCollection = new CoreBaseCollection(); if (response.getData() != null && response.getData().getRecords() != null) { for (SyncAttendanceResponse.AttendanceRecord record : response.getData().getRecords()) { if (record.getDetails() != null) { System.out.println("部门: " + record.getDeptNumber() + ", 考勤周期: " + record.getAttendanceCycle() + ", 定案状态: " + record.getLockStatus()); //部门 IAdminOrgUnit orgIns = AdminOrgUnitFactory.getLocalInstance(ctx); AdminOrgUnitCollection orgCol = orgIns.getAdminOrgUnitCollection("where number='" + record.getDeptNumber() + "'"); AdminOrgUnitInfo orgInfo = new AdminOrgUnitInfo(); if(orgCol.size()>0){ orgInfo = orgCol.get(0); }else{ continue; } //考勤周期 String attendanceCycle = record.getAttendanceCycle(); //定案状态 Integer lockStatus = record.getLockStatus(); // String delSql = " delete from CT_SYN_AttFinalization where " + " CFAttendanceCycle = '"+attendanceCycle+"' " + " and CFAdminOrgUnitID = '"+orgInfo.getId().toString()+"'"; DbUtil.execute(ctx, delSql); for (SyncAttendanceResponse.AttendanceDetail detail : record.getDetails()) { System.out.println(" 用户: " + detail.getUserId() + ", 工资项: " + detail.getSalaryCode() + ", 数值: " + detail.getNumericalValue()); AttFinalizationInfo attFinalInfo = new AttFinalizationInfo(); IPerson personIns = PersonFactory.getLocalInstance(ctx); PersonCollection perCol = personIns.getPersonCollection("where number='" + detail.getUserId() + "'"); if(perCol.size()>0){ PersonInfo personInfo = perCol.get(0); attFinalInfo.setPerson(personInfo); }else{ continue; } attFinalInfo.setSalaryCode(detail.getSalaryCode()); if(StringUtils.isNotEmpty(attendanceCycle)){ attFinalInfo.setAttendanceCycle(attendanceCycle); } attFinalInfo.setAdminOrgUnit(orgInfo); FinalStatusEnum fstatus = lockStatus == 1 ? FinalStatusEnum.finalized : FinalStatusEnum.resolution; attFinalInfo.setLockStatus(fstatus); attFinalInfo.setBeginDate(DateUtils.formatDate(detail.getBeginDate(), "yyyyMMdd")); attFinalInfo.setEndDate(DateUtils.formatDate(detail.getEndDate(), "yyyyMMdd")); if(StringUtils.isNotEmpty(detail.getNumericalValue())){ BigDecimal bigDecimal = new BigDecimal(detail.getNumericalValue()); attFinalInfo.setNumValue(bigDecimal); } coreBaseCollection.add(attFinalInfo); } } } } // 定案 // IAttFinalization attfIns = AttFinalizationFactory.getLocalInstance(ctx); //// attfIns.addnew(coreBaseCollection); } }