diff --git a/WEB-INF/prop/jcsecond.properties b/WEB-INF/prop/jcsecond.properties index 2249176..5532fc0 100644 --- a/WEB-INF/prop/jcsecond.properties +++ b/WEB-INF/prop/jcsecond.properties @@ -1,14 +1,16 @@ +#东方骏驰花名册快照自定义字段 -#\u4E1C\u65B9\u9A8F\u9A70\u82B1\u540D\u518C\u5FEB\u7167\u81EA\u5B9A\u4E49\u5B57\u6BB5 +#银行卡号 +account=field31 +#银行名称 +bankField=field34 +#户籍地址 +regresidentplace=field18 +#首次参保日期 +femdate=field11 -#\u94F6\u884C\u5361\u53F7 -account=field3 -#\u94F6\u884C\u540D\u79F0 -bankField=field26 -#\u6237\u7C4D\u5730\u5740 -regresidentplace=field6 -#\u9996\u6B21\u53C2\u4FDD\u65E5\u671F -femdate=field27 +#建模快照数据模块id +modeId=77 -#\u5EFA\u6A21\u5FEB\u7167\u6570\u636E\u6A21\u5757id -modeId=77 \ No newline at end of file +#考勤工时统计台账模块id +kqModeid=77 \ No newline at end of file diff --git a/src/test/MainTest.java b/src/test/MainTest.java index 3cde930..bbaa04e 100644 --- a/src/test/MainTest.java +++ b/src/test/MainTest.java @@ -6,6 +6,8 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; + + /** * @Author weaver_cl * @Description: @@ -16,39 +18,8 @@ public class MainTest { public static void main(String[] args) { - String monthYear = "2023-02"; - - // 定义日期格式,适用于解析"yyyy-MM"格式的字符串 - DateTimeFormatter monthYearFormatter = DateTimeFormatter.ofPattern("yyyy-MM"); - - // 解析字符串为 LocalDate 对象(这里我们假设其表示该月的第一天) - LocalDate firstDayOfMonth = LocalDate.parse(monthYear + "-01", DateTimeFormatter.ofPattern("yyyy-MM-dd")); - - // 获取本月的第一天 - LocalDate firstDay = firstDayOfMonth.withDayOfMonth(1); - // 获取本月的最后一天 - LocalDate lastDay = firstDay.with(TemporalAdjusters.lastDayOfMonth()); - - // 定义输出格式 - DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - - // 转换为字符串并打印结果 - String firstDayStr = firstDay.format(outputFormatter); - String lastDayStr = lastDay.format(outputFormatter); - - System.out.println("本月第一天: " + firstDayStr); - System.out.println("本月最后一天: " + lastDayStr); } - public static double calculateActualWorkHours(double punchInHours) { - double adjustedHours; - if (punchInHours <= 4.0) { - adjustedHours = punchInHours; - } else { - adjustedHours = Math.floor(punchInHours - 1.0); - } - return adjustedHours; - } } diff --git a/src/weaver/interfaces/kqsolution/crob/SuppleKqDataCrob.java b/src/weaver/interfaces/kqsolution/crob/SuppleKqDataCrob.java new file mode 100644 index 0000000..d74d408 --- /dev/null +++ b/src/weaver/interfaces/kqsolution/crob/SuppleKqDataCrob.java @@ -0,0 +1,113 @@ +package weaver.interfaces.kqsolution.crob; + +import com.amazonaws.util.CollectionUtils; +import com.engine.kqsolution.entity.SignDataPO; +import com.weaver.general.Util; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.common.DateUtil; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.schedule.BaseCronJob; + +import java.time.LocalDate; +import java.time.YearMonth; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author liang.cheng + * @Date 2024/11/13 11:28 AM + * @Description: 补充 人员考勤数据到建模台账 uf_kqgs (人员排班在打卡之后导致) + * @Version 1.0 + */ +public class SuppleKqDataCrob extends BaseCronJob { + + @Override + public void execute() { + + RecordSet rs = new RecordSet(); + BaseBean bb = new BaseBean(); + + //上个月第一天 + String firstDay = firstDayOfPreviousMonth(); + //本月最后一天 + String lastDay = DateUtil.getLastDayOfMonthToString(); + + List ids = new ArrayList<>(); + //1.人力资源表近2月入职人员id数据 + rs.executeQuery("select id from hrmresource where companystartdate >='"+firstDay+"' and companystartdate <= '"+lastDay+"'"); + while (rs.next()) { + ids.add(Util.null2String(rs.getString("id"))); + } + + //2.近2月返聘人员数据 + rs.executeQuery("select resourceid from hrmstatushistory where type_n = 7 and changedate >='"+firstDay+"' and changedate <= '"+lastDay+"'"); + while (rs.next()) { + ids.add(Util.null2String(rs.getString("resourceid"))); + } + + //3.根据人员id获取考勤明细表近2月数据 + List distinctIds = ids.stream() + .distinct() + .collect(Collectors.toList()); + + String join = CollectionUtils.join(distinctIds, ","); + bb.writeLog("近2月入职和返聘人员 =>"+join); + + //4.根据人员ids获取考勤明细表近2月数据 + List signDataList = new ArrayList<>(); + rs.executeQuery("select resourceid,kqdate from kq_format_detail where kqdate >='"+firstDay+"' and kqdate <= '"+lastDay+"' and resourceid in ("+join+")"); + while (rs.next()) { + signDataList.add(SignDataPO.builder() + .resourceId(Util.getIntValue(rs.getString("resourceid"))) + .attendanceDate(Util.null2String(rs.getString("kqdate"))) + .build()); + } + + //5.比较考勤建模台账哪些数据缺失 todo 线程处理 + List suppleData = new ArrayList<>(); + signDataList.forEach(e -> { + rs.executeQuery("select count(1) as nums from uf_kqgs where xm = ? and kqrq = '"+e.getAttendanceDate()+"'",e.getResourceId()); + rs.next(); + if (Util.getIntValue(rs.getString("nums")) == 0) { + suppleData.add(e); + } + }); + + bb.writeLog("本次执行建模台账缺失数据集合size =>"+suppleData.size()); + + //6.考勤建模台账 uf_kqgs 数据补充 + String formModeid = bb.getPropValue("jcsecond", "kqModeid"); + try { + //方案1 + ResourceComInfo rcom = new ResourceComInfo(); + suppleData.forEach(e -> { + String resourceId = String.valueOf(e.getResourceId()); + String formatYearMonth = e.getAttendanceDate().substring(0,7); + e.setCompany(Integer.parseInt(rcom.getSubCompanyID(resourceId))); + e.setDepartment(Integer.parseInt(rcom.getDepartmentID(resourceId))); + e.setJobTitle(Integer.parseInt(rcom.getJobTitle(resourceId))); + rs.executeUpdate("insert into uf_kqgs(formmodeid,xm,kqy,kqrq,zt,fb,bm,gw) values(?,?,?,?,?,?,?,?)", formModeid, e.getResourceId(), + formatYearMonth, e.getAttendanceDate(), 0, e.getCompany(), e.getDepartment(), e.getJobTitle()); + }); + //方案2 + + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 上个月第一天 + * @return + */ + private String firstDayOfPreviousMonth() { + LocalDate now = LocalDate.now(); + YearMonth previousMonth = YearMonth.from(now).minusMonths(1); + LocalDate firstDayOfPreviousMonth = previousMonth.atDay(1); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + return firstDayOfPreviousMonth.format(formatter); + } +}