diff --git a/src/com/engine/kqsolution/entity/KqExceptionVo.java b/src/com/engine/kqsolution/entity/KqExceptionVo.java new file mode 100644 index 0000000..97a1832 --- /dev/null +++ b/src/com/engine/kqsolution/entity/KqExceptionVo.java @@ -0,0 +1,45 @@ +package com.engine.kqsolution.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2024/11/14 10:47 AM + * @Description: TODO + * @Version 1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class KqExceptionVo { + + private Integer resourceId; + + private String lastName; + + private String wordcode; + + private String subCompanyName; + + private String departmentName; + + private String jobTitleName; + + private Integer belate; + + private Integer gravebelate; + + private Integer leaveeearly; + + private Integer graveleaveearly; + + private Integer absenteeism; + + private Integer forgotcheck; + + private String kqResult; +} diff --git a/src/com/engine/kqsolution/service/SignDataSummaryService.java b/src/com/engine/kqsolution/service/SignDataSummaryService.java index 2f3ef79..ed16a1f 100644 --- a/src/com/engine/kqsolution/service/SignDataSummaryService.java +++ b/src/com/engine/kqsolution/service/SignDataSummaryService.java @@ -1,6 +1,7 @@ package com.engine.kqsolution.service; import com.engine.kqsolution.entity.CustomSignDataParam; +import com.engine.kqsolution.entity.KqExceptionVo; import com.engine.kqsolution.entity.SignDataParams; import com.engine.kqsolution.entity.WorkflowDetailVO; @@ -42,4 +43,13 @@ public interface SignDataSummaryService { * @return: java.util.List */ List workflowDetail(String ids); + + /** + * @Description: 考勤异常报表 + * @Author: liang.cheng + * @Date: 2024/11/14 10:41 AM + * @param: [request2Map] + * @return: j + */ + Map kqExceptionReport(Map request2Map); } diff --git a/src/com/engine/kqsolution/service/impl/SignDataSummaryServiceImpl.java b/src/com/engine/kqsolution/service/impl/SignDataSummaryServiceImpl.java index 3a7bd00..8b6f1fd 100644 --- a/src/com/engine/kqsolution/service/impl/SignDataSummaryServiceImpl.java +++ b/src/com/engine/kqsolution/service/impl/SignDataSummaryServiceImpl.java @@ -3,33 +3,35 @@ package com.engine.kqsolution.service.impl; import cn.hutool.core.thread.ThreadUtil; import com.alibaba.fastjson.JSON; +import com.cloudstore.eccom.constant.WeaBoolAttr; +import com.cloudstore.eccom.pc.table.WeaTable; +import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.cloudstore.eccom.pc.table.WeaTableType; +import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.core.impl.Service; import com.engine.kq.biz.KQShiftManagementComInfo; import com.engine.kq.biz.KQWorkTime; import com.engine.kq.entity.WorkTimeEntity; -import com.engine.kqsolution.entity.CustomSignDataParam; -import com.engine.kqsolution.entity.SignDataPO; -import com.engine.kqsolution.entity.SignDataParams; -import com.engine.kqsolution.entity.WorkflowDetailVO; +import com.engine.kqsolution.entity.*; import com.engine.kqsolution.service.SignDataSummaryService; -import dm.jdbc.util.StringUtil; import lombok.SneakyThrows; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; +import weaver.common.DateUtil; +import weaver.common.StringUtil; import weaver.conn.RecordSet; import weaver.conn.RecordSetTrans; import weaver.general.BaseBean; +import weaver.general.PageIdConst; import weaver.general.Util; import weaver.hrm.resource.ResourceComInfo; import java.text.DecimalFormat; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.YearMonth; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.ExecutorService; import java.util.stream.Collectors; @@ -155,6 +157,85 @@ public class SignDataSummaryServiceImpl extends Service implements SignDataSumma return data; } + @Override + public Map kqExceptionReport(Map params) { + RecordSet rs = new RecordSet(); + Map resultMap = new HashMap<>(4); + String date = Util.null2String(params.get("date")); + String subCompanyId = Util.null2String(params.get("subCompanyId")); + String departmentId = Util.null2String(params.get("departmentId")); + String resourceId = Util.null2String(params.get("resourceId")); + + String firstDay = firstDayOfMonth(date); + String lastDay = lastDayOfMonth(date); + + WeaTable table = new WeaTable(); + String pageId = "1f44e9bc-70e0-4f8b-abb5-fcd2ada5bd98"; + table.setPageID(pageId); + table.setPageUID(String.format("%s_%s",pageId,user.getUID())); + String pageSize = PageIdConst.getPageSize(pageId, user.getUID()); + table.setPagesize(pageSize); + String fields = "a.resourceid,b.workcode,b.subcompanyid1,b.departmentid,b.jobtitle," + + " CAST(ISNULL(SUM(belate), 0) AS VARCHAR) + '/' + \n" + + " CAST(ISNULL(SUM(gravebelate), 0) AS VARCHAR) + '/' + \n" + + " CAST(ISNULL(SUM(leaveeearly), 0) AS VARCHAR) + '/' + \n" + + " CAST(ISNULL(SUM(graveleaveearly), 0) AS VARCHAR) + '/' + \n" + + " CAST(ISNULL(SUM(absenteeism), 0) AS VARCHAR) + '/' + \n" + + " CAST(ISNULL(SUM(forgotcheck), 0) AS VARCHAR) AS result\n "; + table.setBackfields(fields); + + String fromSql = " from kq_format_total a left join hrmresource b on a.resourceid = b.id"; + table.setSqlform(fromSql); + String sqlWhere = " where kqdate >= '"+firstDay+"' and kqdate <= '"+lastDay+"' "; + + if (StringUtils.isNotEmpty(subCompanyId)) { + sqlWhere += " and b.subcompanyid1 in ("+subCompanyId+")"; + } + + if (StringUtils.isNotEmpty(departmentId)) { + sqlWhere += " and b.departmentid in ("+departmentId+")"; + } + + if (StringUtils.isNotEmpty(resourceId)) { + sqlWhere += " and a.resourceid in ("+resourceId+")"; + } + + sqlWhere += " group by a.resourceid,b.workcode,b.subcompanyid1,b.departmentid,b.jobtitle"; + table.setSqlwhere(sqlWhere); + table.setSqlprimarykey("a.resourceid"); + table.getColumns().add(new WeaTableColumn("10%", "姓名", "resourceid").setTransmethod("com.engine.kqsolution.util.ResourceSnipUtils.selectResourceName")); + table.getColumns().add(new WeaTableColumn("10%", "工号", "workcode")); + table.getColumns().add(new WeaTableColumn("10%", "分部", "subcompanyid1").setTransmethod("com.engine.kqsolution.util.ResourceSnipUtils.selectSubCompanyName")); + table.getColumns().add(new WeaTableColumn("10%", "部门", "departmentid").setTransmethod("com.engine.kqsolution.util.ResourceSnipUtils.selectDeptName")); + table.getColumns().add(new WeaTableColumn("10%", "岗位", "jobtitle").setTransmethod("com.engine.kqsolution.util.ResourceSnipUtils.selectJobName")); + table.getColumns().add(new WeaTableColumn("10%", "考勤结果", "result").setTransmethod("com.engine.kqsolution.util.ResourceSnipUtils.selectKqResult")); + table.setTableType(WeaTableType.NONE); + WeaResultMsg result = new WeaResultMsg(false); + result.putAll(table.makeDataResult()); + result.success(); + resultMap.putAll(result.getResultMap()); + return resultMap; + } + + + private String firstDayOfMonth(String yearMonthStr) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + YearMonth yearMonth = YearMonth.parse(yearMonthStr, formatter); + LocalDate firstDayOfMonth = yearMonth.atDay(1); + return firstDayOfMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + + + } + + + private String lastDayOfMonth(String yearMonthStr) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + YearMonth yearMonth = YearMonth.parse(yearMonthStr, formatter); + LocalDate lastDayOfMonth = yearMonth.atEndOfMonth(); + return lastDayOfMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + + } + @SneakyThrows private Map saveSignData(List list,SignDataParams signDataParams){ Map data = new HashMap<>(4); @@ -251,7 +332,7 @@ public class SignDataSummaryServiceImpl extends Service implements SignDataSumma BaseBean bb = new BaseBean(); List pos = new ArrayList<>(); String formatYearMonth = getFormatLocalDate(LocalDate.now(),MONTH_FORMATTER_PATTERN); - if (StringUtil.isNotEmpty(signDataParams.getAttendanceDate())) { + if (StringUtils.isNotEmpty(signDataParams.getAttendanceDate())) { formatYearMonth = signDataParams.getAttendanceDate().substring(0,7); } if (CollectionUtils.isNotEmpty(signDataParams.getIds())) { diff --git a/src/com/engine/kqsolution/util/ResourceSnipUtils.java b/src/com/engine/kqsolution/util/ResourceSnipUtils.java index 0321390..1ecdfba 100644 --- a/src/com/engine/kqsolution/util/ResourceSnipUtils.java +++ b/src/com/engine/kqsolution/util/ResourceSnipUtils.java @@ -8,6 +8,8 @@ import weaver.hrm.job.EducationLevelComInfo; import weaver.hrm.job.JobTitlesComInfo; import weaver.hrm.resource.ResourceComInfo; +import java.util.Arrays; + /** * @Author liang.cheng * @Date 2024/8/28 2:35 PM @@ -74,6 +76,16 @@ public class ResourceSnipUtils { return "0".equals(sex) ? "男" : "女"; } + /** + * 考勤结果 + * @return + */ + public static String selectKqResult(String value) { + boolean flag = Arrays.stream(value.split("/")) + .mapToInt(Integer::parseInt) + .anyMatch(n -> n > 0); + return flag ? "异常" :"正常"; + } /** * 工资银行 diff --git a/src/com/engine/kqsolution/web/SignDataSummaryAction.java b/src/com/engine/kqsolution/web/SignDataSummaryAction.java index a66bf32..edd3cd1 100644 --- a/src/com/engine/kqsolution/web/SignDataSummaryAction.java +++ b/src/com/engine/kqsolution/web/SignDataSummaryAction.java @@ -2,6 +2,7 @@ package com.engine.kqsolution.web; 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; @@ -79,4 +80,23 @@ public class SignDataSummaryAction { return JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect); } + @GET + @Path("/kqExceptionReport") + @Produces(MediaType.TEXT_PLAIN) + public String kqExceptionReport(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map data = new HashMap<>(8); + try { + User user = HrmUserVarify.getUser(request, response); + data.put("datas",getService(user).kqExceptionReport(ParamUtil.request2Map(request))); + data.put("api_status", true); + } catch (Exception e) { + data.put("api_status", false); + data.put("msg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect); + } + + + + } diff --git a/src/test/MainTest.java b/src/test/MainTest.java index bbaa04e..3e3bdbb 100644 --- a/src/test/MainTest.java +++ b/src/test/MainTest.java @@ -5,7 +5,7 @@ import weaver.common.DateUtil; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; - +import java.util.Date; /** @@ -17,6 +17,11 @@ import java.time.temporal.TemporalAdjusters; public class MainTest { public static void main(String[] args) { + String lastDayOfMonthToString = DateUtil.getLastDayOfMonthToString(new Date()); + String firstDayOfMonthToString = DateUtil.getFirstDayOfMonthToString(new Date()); + + System.out.println(lastDayOfMonthToString); + System.out.println(firstDayOfMonthToString); }