补充 人员考勤数据到建模台账 uf_kqgs (人员排班在打卡之后导致)

东方骏驰
Chengliang 7 months ago
parent fd5b0a9c1e
commit 5bcb90b643

@ -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
#考勤工时统计台账模块id
kqModeid=77

@ -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;
}
}

@ -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<String> 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<String> distinctIds = ids.stream()
.distinct()
.collect(Collectors.toList());
String join = CollectionUtils.join(distinctIds, ",");
bb.writeLog("近2月入职和返聘人员 =>"+join);
//4.根据人员ids获取考勤明细表近2月数据
List<SignDataPO> 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<SignDataPO> 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);
}
}
Loading…
Cancel
Save