From bca7c6eb0e388f14497dde73befd34d5e1bd90f4 Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Wed, 22 May 2024 16:30:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8C=89=E7=85=A7=E6=9C=88?= =?UTF-8?q?=E4=BB=BD=E5=92=8C=E9=83=A8=E9=97=A8=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- interface/dfjc/kqMonthReportSyn.jsp | 17 ++-- .../entity/CustomSignDataParam.java | 26 ++++++ .../service/SignDataSummaryService.java | 10 +++ .../impl/SignDataSummaryServiceImpl.java | 90 ++++++++++++++++++- .../kqsolution/web/SignDataSummaryAction.java | 17 ++++ .../dfjc/job/KqMonthReportSynJob.java | 5 +- 6 files changed, 155 insertions(+), 10 deletions(-) create mode 100644 src/com/engine/kqsolution/entity/CustomSignDataParam.java diff --git a/interface/dfjc/kqMonthReportSyn.jsp b/interface/dfjc/kqMonthReportSyn.jsp index 55118f9..7366ffa 100644 --- a/interface/dfjc/kqMonthReportSyn.jsp +++ b/interface/dfjc/kqMonthReportSyn.jsp @@ -39,7 +39,12 @@ double xxrjbbdx = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(xm+"|restDayOvertime_nonleave"))),0); double jjrjbbdx = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(xm+"|holidayOvertime_nonleave"))),0); double dkzgs = Util.getDoubleValue(Util.null2String(getWorkHours(fromDate,toDate,xm)),0); - double zgs = psjbbdx+xxrjbbdx+jjrjbbdx+dkzgs; + + //获取出差时长 + double ccxs = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(xm+"|businessLeave"))),0); + + double zgs = psjbbdx+xxrjbbdx+jjrjbbdx+dkzgs+ccxs; + KqMonthDataPO kqMonthDataPO = KqMonthDataPO.builder() .resourceId(xm) @@ -51,6 +56,7 @@ .jjrjbbdx(jjrjbbdx) .dkzgs(dkzgs) .zgs(zgs) + .ccxs(ccxs) .build(); System.out.println("KqMonthReportSynByUser==>"+JSON.toJSONString(kqMonthDataPO)); saveData(kqMonthDataPO,kqy); @@ -134,13 +140,14 @@ Double xxrjbbdx = kqMonthDataPO.getXxrjbbdx(); Double jjrjbbdx = kqMonthDataPO.getJjrjbbdx(); Double zgs = kqMonthDataPO.getZgs(); + Double ccxs = kqMonthDataPO.getCcxs(); boolean exist = isExist(month,kqMonthDataPO.getResourceId()); if(exist){ //更新 - String updateSql = " update uf_ydgs set dkzgs=?, psjbbdx=?, xxrjbbdx=?, jjrjbbdx=?, zgs=?, zt=? where xm=? and kqy=? "; - rs.executeUpdate(updateSql,new Object[]{dkzgs,psjbbdx,xxrjbbdx,jjrjbbdx,zgs,zt,xm,month}); + String updateSql = " update uf_ydgs set dkzgs=?, psjbbdx=?, xxrjbbdx=?, jjrjbbdx=?, zgs=?, zt=?, ccxs=? where xm=? and kqy=? "; + rs.executeUpdate(updateSql,new Object[]{dkzgs,psjbbdx,xxrjbbdx,jjrjbbdx,zgs,zt,ccxs,xm,month}); }else{ //插入 @@ -148,10 +155,10 @@ String modedatacreatedate = TimeUtil.getCurrentDateString(); String modedatacreatetime = TimeUtil.getOnlyCurrentTimeString(); - String insertSql = " insert into uf_ydgs(xm,bm,gw,kqy,dkzgs,psjbbdx,xxrjbbdx,jjrjbbdx,zgs,zt,"+ + String insertSql = " insert into uf_ydgs(xm,bm,gw,kqy,dkzgs,psjbbdx,xxrjbbdx,jjrjbbdx,zgs,zt,ccxs,"+ "formmodeid,modedatacreater,modedatacreatedate,modedatacreatetime,modeuuid) " + " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) "; - rs.executeUpdate(insertSql,new Object[]{xm,bm,gw,month,dkzgs,psjbbdx,xxrjbbdx,jjrjbbdx,zgs,zt, + rs.executeUpdate(insertSql,new Object[]{xm,bm,gw,month,dkzgs,psjbbdx,xxrjbbdx,jjrjbbdx,zgs,zt,ccxs, formmodeid,modedatacreater,modedatacreatedate,modedatacreatetime,modeuuid}); rs.executeQuery("select id from uf_ydgs where modeuuid=?",modeuuid); diff --git a/src/com/engine/kqsolution/entity/CustomSignDataParam.java b/src/com/engine/kqsolution/entity/CustomSignDataParam.java new file mode 100644 index 0000000..0d39ee6 --- /dev/null +++ b/src/com/engine/kqsolution/entity/CustomSignDataParam.java @@ -0,0 +1,26 @@ +package com.engine.kqsolution.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +/** + * @Author liang.cheng + * @Date 2024/5/22 3:05 PM + * @Description: TODO + * @Version 1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CustomSignDataParam { + + private String departments; + + private String month; + + +} diff --git a/src/com/engine/kqsolution/service/SignDataSummaryService.java b/src/com/engine/kqsolution/service/SignDataSummaryService.java index 7cd6d60..cd21602 100644 --- a/src/com/engine/kqsolution/service/SignDataSummaryService.java +++ b/src/com/engine/kqsolution/service/SignDataSummaryService.java @@ -1,5 +1,6 @@ package com.engine.kqsolution.service; +import com.engine.kqsolution.entity.CustomSignDataParam; import com.engine.kqsolution.entity.SignDataParams; import java.util.Map; @@ -20,4 +21,13 @@ public interface SignDataSummaryService { * @return: java.util.Map */ Map recordSignData(SignDataParams signDataParams); + + /** + * @Description: 考勤工时统计台账 自定义同步 + * @Author: liang.cheng + * @Date: 2024/5/22 3:25 PM + * @param: [customSignDataParam] + * @return: java.util.Map + */ + Map customSignData(CustomSignDataParam customSignDataParam); } diff --git a/src/com/engine/kqsolution/service/impl/SignDataSummaryServiceImpl.java b/src/com/engine/kqsolution/service/impl/SignDataSummaryServiceImpl.java index 78d235d..c66daa0 100644 --- a/src/com/engine/kqsolution/service/impl/SignDataSummaryServiceImpl.java +++ b/src/com/engine/kqsolution/service/impl/SignDataSummaryServiceImpl.java @@ -3,6 +3,7 @@ package com.engine.kqsolution.service.impl; import cn.hutool.core.thread.ThreadUtil; import com.engine.core.impl.Service; +import com.engine.kqsolution.entity.CustomSignDataParam; import com.engine.kqsolution.entity.SignDataPO; import com.engine.kqsolution.entity.SignDataParams; import com.engine.kqsolution.service.SignDataSummaryService; @@ -37,14 +38,96 @@ public class SignDataSummaryServiceImpl extends Service implements SignDataSumma public static final DateTimeFormatter MONTH_FORMATTER_PATTERN = DateTimeFormatter.ofPattern("yyyy-MM"); - @SneakyThrows @Override public Map recordSignData(SignDataParams signDataParams) { + List list = buildSignData(signDataParams); + return saveSignData(list,signDataParams); + } + + @Override + public Map customSignData(CustomSignDataParam param) { + + Map data = new HashMap<>(4); + List idList = new ArrayList<>(); + + //获取部门下人员id + RecordSet rs = new RecordSet(); + rs.executeQuery("select id from hrmresource where departmentid in ("+param.getDepartments()+")"); + while (rs.next()) { + idList.add(Util.getIntValue(rs.getString("id"))); + } + + if (CollectionUtils.isEmpty(idList)){ + data.put("msg","部门下未存在人员"); + return data; + } + + LocalDate localDate = LocalDate.parse(param.getMonth()+"-01"); + String fromDate = localDate.toString(); + String toDate = localDate.withDayOfMonth(localDate.lengthOfMonth()).toString(); + String ids = StringUtils.join(idList,","); + rs.executeQuery("select kqdate,resourceid,signindate,signintime,signoutdate,signouttime,signMins from kq_format_detail \n" + + " where kqdate >= ? and kqdate <= ?" + + " and resourceid in in ("+ids+")",fromDate,toDate); + List pos = new ArrayList<>(); + DecimalFormat decimalFormat = new DecimalFormat("0.00"); + while (rs.next()) { + String signInTime = Util.null2String(rs.getString("signintime")); + String signOutTime = Util.null2String(rs.getString("signouttime")); + if (!"".equals(signInTime)){ + signInTime = signInTime.substring(0,5); + } + if (!"".equals(signOutTime)){ + signOutTime = signOutTime.substring(0,5); + } + Integer signMins = Util.getIntValue(Util.null2String(rs.getString("signMins")),0); + double hours = (double) signMins / 60; + double workHours; + if (hours <= 4.0) { + workHours = hours; + } else { + workHours = Math.floor(hours - 1.0); + } + SignDataPO build = SignDataPO.builder() + .resourceId(Util.getIntValue(rs.getString("resourceid"))) + .attendanceDate(Util.null2String(rs.getString("kqdate"))) + .signInDate(Util.null2String(rs.getString("signindate"))) + .signInTime(signInTime) + .signOutDate(Util.null2String(rs.getString("signoutdate"))) + .signOutTime(signOutTime) + .signHours(Double.parseDouble(decimalFormat.format(hours))) + .workHours(Double.parseDouble(decimalFormat.format(workHours))) + .build(); + pos.add(build); + } + + RecordSetTrans rst = new RecordSetTrans(); + if (CollectionUtils.isNotEmpty(pos)) { + try { + rst.setAutoCommit(false); + + for (SignDataPO item : pos) { + rst.executeUpdate("update uf_kqgs set qdrq = ?,qdsj = ?,qtrq = ?,qtsj = ?,dkgssc = ?,sjgssc = ? where kqrq = ? and xm=? and zt = 0",item.getSignInDate(), + item.getSignInTime(),item.getSignOutDate(),item.getSignOutTime(),item.getSignHours(),item.getWorkHours(),item.getAttendanceDate(),item.getResourceId()); + } + + rst.commit(); + }catch (Exception e) { + rst.rollback(); + } + } + + + + return data; + } + + @SneakyThrows + private Map saveSignData(List list,SignDataParams signDataParams){ Map data = new HashMap<>(4); DecimalFormat decimalFormat = new DecimalFormat("0.00"); RecordSetTrans rst = new RecordSetTrans(); RecordSet rs = new RecordSet(); - List list = buildSignData(signDataParams); ResourceComInfo rcom = new ResourceComInfo(); int corePoolSize = 5; int maxPoolSize = 10; @@ -111,7 +194,6 @@ public class SignDataSummaryServiceImpl extends Service implements SignDataSumma }catch (Exception e) { rst.rollback(); } - return data; } @@ -183,6 +265,8 @@ public class SignDataSummaryServiceImpl extends Service implements SignDataSumma } + + /** * @Description: 集合分割 * @Author: liang.cheng diff --git a/src/com/engine/kqsolution/web/SignDataSummaryAction.java b/src/com/engine/kqsolution/web/SignDataSummaryAction.java index 358b701..1dac2f7 100644 --- a/src/com/engine/kqsolution/web/SignDataSummaryAction.java +++ b/src/com/engine/kqsolution/web/SignDataSummaryAction.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import com.engine.common.util.ParamUtil; import com.engine.common.util.ServiceUtil; +import com.engine.kqsolution.entity.CustomSignDataParam; import com.engine.kqsolution.entity.SignDataParams; import com.engine.kqsolution.service.SignDataSummaryService; import com.engine.kqsolution.service.impl.SignDataSummaryServiceImpl; @@ -49,4 +50,20 @@ public class SignDataSummaryAction { return JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect); } + @POST + @Path("/customSignData") + @Produces(MediaType.TEXT_PLAIN) + public String customSignData(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody CustomSignDataParam customSignDataParam){ + Map data = new HashMap<>(8); + try { + User user = HrmUserVarify.getUser(request, response); + data.putAll(getService(user).customSignData(customSignDataParam)); + data.put("status", true); + } catch (Exception e) { + data.put("status", false); + data.put("msg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect); + } + } diff --git a/src/weaver/interfaces/dfjc/job/KqMonthReportSynJob.java b/src/weaver/interfaces/dfjc/job/KqMonthReportSynJob.java index 92c662d..c2c2cb6 100644 --- a/src/weaver/interfaces/dfjc/job/KqMonthReportSynJob.java +++ b/src/weaver/interfaces/dfjc/job/KqMonthReportSynJob.java @@ -72,11 +72,12 @@ public class KqMonthReportSynJob extends BaseCronJob { double xxrjbbdx = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(userid+"|restDayOvertime_nonleave"))),0); double jjrjbbdx = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(userid+"|holidayOvertime_nonleave"))),0); double dkzgs = Util.getDoubleValue(Util.null2String(signData.get(userid)),0); - double zgs = psjbbdx+xxrjbbdx+jjrjbbdx+dkzgs; //获取出差时长 double ccxs = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(userid+"|businessLeave"))),0); + double zgs = psjbbdx+xxrjbbdx+jjrjbbdx+dkzgs+ccxs; + KqMonthDataPO kqMonthDataPO = KqMonthDataPO.builder() .resourceId(userid) .status(status) @@ -179,7 +180,7 @@ public class KqMonthReportSynJob extends BaseCronJob { String modedatacreatedate = TimeUtil.getCurrentDateString(); String modedatacreatetime = TimeUtil.getOnlyCurrentTimeString(); - String insertSql = " insert into uf_ydgs(xm,bm,gw,kqy,dkzgs,psjbbdx,xxrjbbdx,jjrjbbdx,zgs,zt,ccxs"+ + String insertSql = " insert into uf_ydgs(xm,bm,gw,kqy,dkzgs,psjbbdx,xxrjbbdx,jjrjbbdx,zgs,zt,ccxs,"+ "formmodeid,modedatacreater,modedatacreatedate,modedatacreatetime,modeuuid) " + " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) "; rs.executeUpdate(insertSql,new Object[]{xm,bm,gw,month,dkzgs,psjbbdx,xxrjbbdx,jjrjbbdx,zgs,zt,ccxs,