Przeglądaj źródła

优化考勤代码

Your Name 3 lat temu
rodzic
commit
a8fa357768

+ 1 - 0
java110-db/src/main/resources/mapper/report/ReportAttendanceServiceDaoImplMapper.xml

@@ -57,6 +57,7 @@
         AND act.status_cd = '0'
         AND act.task_id = b.task_id
         AND b.state = '10000'
+        and b.value < now()
         <if test="taskYear !=null and taskYear != ''">
             and act.task_year= #{taskYear}
         </if>

+ 181 - 0
service-job/src/main/java/com/java110/job/export/adapt/MonthAttendanceAdapt.java

@@ -0,0 +1,181 @@
+package com.java110.job.export.adapt;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.dto.attendanceClasses.AttendanceClassesTaskDetailDto;
+import com.java110.dto.attendanceClasses.AttendanceClassesTaskDto;
+import com.java110.dto.data.ExportDataDto;
+import com.java110.dto.reportFeeMonthStatistics.ReportFeeMonthStatisticsDto;
+import com.java110.intf.report.IReportAttendanceInnerServiceSMO;
+import com.java110.job.export.IExportDataAdapt;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.StringUtil;
+import com.java110.vo.ResultVo;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+
+@Service("monthAttendance")
+public class MonthAttendanceAdapt implements IExportDataAdapt {
+    private static final int MAX_ROW = 50;
+
+    @Autowired
+    private IReportAttendanceInnerServiceSMO reportAttendanceInnerServiceSMOImpl;
+
+    @Override
+    public SXSSFWorkbook exportData(ExportDataDto exportDataDto) {
+        JSONObject reqJson = exportDataDto.getReqJson();
+        SXSSFWorkbook workbook = null;  //工作簿
+        String userId = "";
+        //工作表
+        workbook = new SXSSFWorkbook();
+        workbook.setCompressTempFiles(false);
+
+        Sheet sheet = workbook.createSheet("月考勤表");
+        Row row = sheet.createRow(0);
+        row.createCell(0).setCellValue("部门");
+        row.createCell(1).setCellValue("员工");
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.YEAR, reqJson.getIntValue("taskYear"));
+        calendar.set(Calendar.MONTH, reqJson.getIntValue("taskMonth") - 1);
+        int maxDayOfMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+        for (int day = 1; day <= maxDayOfMonth; day++) {
+            row.createCell(day + 2).setCellValue(day + "日");
+        }
+
+        row.createCell(2 + maxDayOfMonth + 1).setCellValue("正常考勤");
+        row.createCell(2 + maxDayOfMonth + 2).setCellValue("迟到");
+        row.createCell(2 + maxDayOfMonth + 3).setCellValue("早退");
+        row.createCell(2 + maxDayOfMonth + 4).setCellValue("旷工");
+        row.createCell(2 + maxDayOfMonth + 5).setCellValue("免考勤");
+
+
+        AttendanceClassesTaskDto attendanceClassesTaskDto = BeanConvertUtil.covertBean(reqJson, AttendanceClassesTaskDto.class);
+        attendanceClassesTaskDto.setStoreId(reqJson.getString("storeId"));
+        attendanceClassesTaskDto.setClassId(reqJson.getString("classesId"));
+        //查询数据
+        getAttendanceClassesTask(sheet, attendanceClassesTaskDto, reqJson, maxDayOfMonth);
+
+        return workbook;
+
+    }
+
+    private void getAttendanceClassesTask(Sheet sheet, AttendanceClassesTaskDto attendanceClassesTaskDto, JSONObject reqJson, int maxDayOfMonth) {
+
+        int count = reportAttendanceInnerServiceSMOImpl.getMonthAttendanceCount(attendanceClassesTaskDto);
+        count = (int) Math.ceil((double) count / (double) MAX_ROW);
+        if (count < 1) {
+            return;
+        }
+
+        for (int page = 1; page <= count; page++) {
+            attendanceClassesTaskDto.setPage(page);
+            attendanceClassesTaskDto.setRow(MAX_ROW);
+            List<AttendanceClassesTaskDto> attendanceClassesTaskDtos = reportAttendanceInnerServiceSMOImpl.getMonthAttendance(attendanceClassesTaskDto);
+            //输入考勤明细
+            refreshDetail(attendanceClassesTaskDtos, reqJson);
+            appendData(attendanceClassesTaskDtos, sheet, (page - 1) * MAX_ROW, maxDayOfMonth);
+        }
+    }
+
+    private void appendData(List<AttendanceClassesTaskDto> attendanceClassesTaskDtos, Sheet sheet, int step, int maxDayOfMonth) {
+
+        Row row = null;
+        JSONObject dayObj = null;
+        AttendanceClassesTaskDto attendanceClassesTaskDto = null;
+        List<AttendanceClassesTaskDetailDto> detailDtos = null;
+        String value = "";
+        for (int roomIndex = 0; roomIndex < attendanceClassesTaskDtos.size(); roomIndex++) {
+            row = sheet.createRow(roomIndex + step + 1);
+            attendanceClassesTaskDto = attendanceClassesTaskDtos.get(roomIndex);
+            row.createCell(0).setCellValue(attendanceClassesTaskDto.getDepartmentName());
+            row.createCell(1).setCellValue(attendanceClassesTaskDto.getStaffName());
+            dayObj = attendanceClassesTaskDto.getDays();
+            for (int day = 1; day <= maxDayOfMonth; day++) {
+                if (!dayObj.containsKey(day)) {
+                    row.createCell(day + 2).setCellValue("无需考勤");
+                    continue;
+                }
+                if (dayObj.get(day) == null) {
+                    row.createCell(day + 2).setCellValue("无需考勤");
+                    continue;
+                }
+                detailDtos = (List<AttendanceClassesTaskDetailDto>) dayObj.get(day);
+                if (detailDtos == null || detailDtos.size() < 1) {
+                    row.createCell(day + 2).setCellValue("无需考勤");
+                    continue;
+                }
+
+                value = "";
+                for (AttendanceClassesTaskDetailDto detailDto : detailDtos) {
+                    if (AttendanceClassesTaskDetailDto.SPEC_CD_START.equals(detailDto.getSpecCd())) {
+                        value += "上班:";
+                    } else {
+                        value += "下班:";
+                    }
+
+                    if (!AttendanceClassesTaskDetailDto.STATE_WAIT.equals(detailDto.getState())) {
+                        value += (detailDto.getCheckTime()+"("+detailDto.getStateName()+");");
+                    } else {
+                        value += (" - ("+detailDto.getStateName()+");");
+                    }
+                }
+                row.createCell(day + 2).setCellValue(value);
+            }
+
+            row.createCell(2 + maxDayOfMonth + 1).setCellValue(attendanceClassesTaskDto.getClockIn());
+            row.createCell(2 + maxDayOfMonth + 2).setCellValue(attendanceClassesTaskDto.getLate());
+            row.createCell(2 + maxDayOfMonth + 3).setCellValue(attendanceClassesTaskDto.getEarly());
+            row.createCell(2 + maxDayOfMonth + 4).setCellValue(attendanceClassesTaskDto.getNoClockIn());
+            row.createCell(2 + maxDayOfMonth + 5).setCellValue(attendanceClassesTaskDto.getFree());
+        }
+    }
+
+    private void refreshDetail(List<AttendanceClassesTaskDto> attendanceClassesTaskDtos, JSONObject reqJson) {
+
+        if (attendanceClassesTaskDtos == null || attendanceClassesTaskDtos.size() < 1) {
+            return;
+        }
+
+        List<String> staffIds = new ArrayList<>();
+        for (AttendanceClassesTaskDto attendanceClassesTaskDto : attendanceClassesTaskDtos) {
+            staffIds.add(attendanceClassesTaskDto.getStaffId());
+        }
+
+        AttendanceClassesTaskDto tmpAttendanceClassesTaskDto = new AttendanceClassesTaskDto();
+        tmpAttendanceClassesTaskDto.setClassId(reqJson.getString("classesId"));
+        tmpAttendanceClassesTaskDto.setTaskYear(reqJson.getString("taskYear"));
+        tmpAttendanceClassesTaskDto.setTaskDay(reqJson.getString("taskDay"));
+        tmpAttendanceClassesTaskDto.setStaffIds(staffIds.toArray(new String[staffIds.size()]));
+        List<AttendanceClassesTaskDetailDto> attendanceClassesTaskDetailDtos = reportAttendanceInnerServiceSMOImpl.getMonthAttendanceDetail(tmpAttendanceClassesTaskDto);
+
+        JSONObject days = null;
+        List<AttendanceClassesTaskDetailDto> tAttendanceClassesTaskDetailDto = null;
+        for (AttendanceClassesTaskDto attendanceClassesTaskDto : attendanceClassesTaskDtos) {
+            days = attendanceClassesTaskDto.getDays();
+            if (days == null) {
+                days = new JSONObject();
+                attendanceClassesTaskDto.setDays(days);
+            }
+            for (AttendanceClassesTaskDetailDto tmpAttendanceClassesTaskDetailDto : attendanceClassesTaskDetailDtos) {
+                if (days.containsKey(tmpAttendanceClassesTaskDetailDto.getTaskDay())) {
+                    tAttendanceClassesTaskDetailDto = (List<AttendanceClassesTaskDetailDto>) days.get(tmpAttendanceClassesTaskDetailDto.getTaskDay());
+                    tAttendanceClassesTaskDetailDto.add(tmpAttendanceClassesTaskDetailDto);
+                } else {
+                    tAttendanceClassesTaskDetailDto = new ArrayList<>();
+                    tAttendanceClassesTaskDetailDto.add(tmpAttendanceClassesTaskDetailDto);
+                    days.put(tmpAttendanceClassesTaskDetailDto.getTaskDay(), tAttendanceClassesTaskDetailDto);
+                }
+            }
+        }
+
+    }
+
+}