Forráskód Böngészése

员工排班信息

wuxw 3 éve%!(EXTRA string=óta)
szülő
commit
44701ebcdb

+ 1 - 1
service-job/src/main/java/com/java110/job/export/adapt/ReportPayFeeDetailAdapt.java

@@ -27,7 +27,7 @@ public class ReportPayFeeDetailAdapt implements IExportDataAdapt{
     @Autowired
     private IQueryPayFeeDetailInnerServiceSMO queryPayFeeDetailInnerServiceSMOImpl;
 
-    private static final int MAX_ROW = 500;
+    private static final int MAX_ROW = 200;
 
 
     @Override

+ 302 - 0
service-job/src/main/java/com/java110/job/export/adapt/ReportStaffMonthScheduleClassesAdapt.java

@@ -0,0 +1,302 @@
+package com.java110.job.export.adapt;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.dto.data.ExportDataDto;
+import com.java110.dto.reportFeeMonthStatistics.ReportFeeMonthStatisticsDto;
+import com.java110.dto.scheduleClasses.ScheduleClassesDto;
+import com.java110.dto.scheduleClassesDay.ScheduleClassesDayDto;
+import com.java110.dto.scheduleClassesStaff.ScheduleClassesStaffDto;
+import com.java110.dto.scheduleClassesTime.ScheduleClassesTimeDto;
+import com.java110.intf.store.IScheduleClassesDayV1InnerServiceSMO;
+import com.java110.intf.store.IScheduleClassesStaffV1InnerServiceSMO;
+import com.java110.intf.store.IScheduleClassesV1InnerServiceSMO;
+import com.java110.job.export.IExportDataAdapt;
+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("reportStaffMonthScheduleClasses")
+public class ReportStaffMonthScheduleClassesAdapt implements IExportDataAdapt {
+
+    private static final int MAX_ROW = 200;
+
+    @Autowired
+    private IScheduleClassesStaffV1InnerServiceSMO scheduleClassesStaffV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IScheduleClassesV1InnerServiceSMO scheduleClassesV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IScheduleClassesDayV1InnerServiceSMO scheduleClassesDayV1InnerServiceSMOImpl;
+
+
+    @Override
+    public SXSSFWorkbook exportData(ExportDataDto exportDataDto) {
+
+        SXSSFWorkbook workbook = null;  //工作簿
+        String userId = "";
+        //工作表
+        workbook = new SXSSFWorkbook();
+        workbook.setCompressTempFiles(false);
+
+        Sheet sheet = workbook.createSheet("排班表");
+        Row row = sheet.createRow(0);
+        row.createCell(0).setCellValue("员工名称");
+
+        JSONObject reqJson = exportDataDto.getReqJson();
+
+        String curMonth = reqJson.getString("curDate");
+        String curMonthDay = curMonth + "-01";
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(DateUtil.getDateFromStringB(curMonthDay));
+        int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+
+        for(int day = 1; day <= maxDay ; day++){
+            row.createCell(day).setCellValue(day+"");
+        }
+
+        ScheduleClassesStaffDto scheduleClassesStaffDto = new ScheduleClassesStaffDto();
+        scheduleClassesStaffDto.setStaffId(reqJson.getString("staffId"));
+        scheduleClassesStaffDto.setStaffNameLike(reqJson.getString("staffNameLike"));
+        scheduleClassesStaffDto.setScheduleId(reqJson.getString("scheduleId"));
+        scheduleClassesStaffDto.setStoreId(reqJson.getString("storeId"));
+
+        getStaffMonthScheduleClasses(sheet,scheduleClassesStaffDto,reqJson);
+
+        return null;
+    }
+
+    private void getStaffMonthScheduleClasses(Sheet sheet, ScheduleClassesStaffDto scheduleClassesStaffDto,JSONObject reqJson) {
+        scheduleClassesStaffDto.setPage(1);
+        scheduleClassesStaffDto.setRow(MAX_ROW);
+        long count = scheduleClassesStaffV1InnerServiceSMOImpl.queryScheduleClassesStaffsCount(scheduleClassesStaffDto);
+        int record = (int)Math.ceil((double) count / (double) MAX_ROW);
+
+        List<ScheduleClassesStaffDto> scheduleClassesStaffDtos = null;
+
+        for(int page = 1;page <= record; page++){
+            scheduleClassesStaffDto.setPage(page);
+            scheduleClassesStaffDto.setRow(MAX_ROW);
+            scheduleClassesStaffDtos = scheduleClassesStaffV1InnerServiceSMOImpl.queryScheduleClassesStaffs(scheduleClassesStaffDto);
+            for (ScheduleClassesStaffDto tmpScheduleClassesStaffDto : scheduleClassesStaffDtos) {
+                computeStaffCurMonthWorkday(tmpScheduleClassesStaffDto, reqJson);
+
+            }
+            appendData(scheduleClassesStaffDtos,sheet,(page-1)*MAX_ROW);
+        }
+    }
+
+    private void appendData(List<ScheduleClassesStaffDto> scheduleClassesStaffDtos,Sheet sheet,int step) {
+
+        Row row = null;
+        JSONObject dataObj = null;
+        ScheduleClassesStaffDto scheduleClassesStaffDto = null;
+        String cellValue = "";
+        ScheduleClassesDayDto day = null;
+        for (int roomIndex = 0; roomIndex < scheduleClassesStaffDtos.size(); roomIndex++) {
+            row = sheet.createRow(roomIndex +step + 1);
+            scheduleClassesStaffDto = scheduleClassesStaffDtos.get(0);
+            row.createCell(0).setCellValue(dataObj.getString(scheduleClassesStaffDto.getStaffName()));
+            for(int dayIndex = 1 ; dayIndex <= scheduleClassesStaffDto.getDays().size(); dayIndex++) {
+
+                day = scheduleClassesStaffDto.getDays().get(dayIndex);
+                if(!ScheduleClassesDayDto.WORKDAY_NORMAL.equals(day.getWorkday())){
+                    cellValue= "休息";
+                }else{
+                    cellValue= "正常上下班";
+                    for(ScheduleClassesTimeDto time : day.getTimes()){
+                        cellValue +=(time.getStartTime()+"-"+time.getEndTime());
+                    }
+                }
+                row.createCell(dayIndex).setCellValue(cellValue);
+            }
+        }
+    }
+
+    /**
+     * 计算 员工 排班情况
+     *
+     * @param scheduleClassesStaffDto
+     * @param reqJson
+     */
+    private void computeStaffCurMonthWorkday(ScheduleClassesStaffDto scheduleClassesStaffDto, JSONObject reqJson) {
+
+        ScheduleClassesDto scheduleClassesDto = new ScheduleClassesDto();
+        scheduleClassesDto.setScheduleId(scheduleClassesStaffDto.getScheduleId());
+        List<ScheduleClassesDto> scheduleClassesDtos = scheduleClassesV1InnerServiceSMOImpl.queryScheduleClassess(scheduleClassesDto);
+        //这里 如果没有员工排班 那么就认为 员工一直在上班
+        if (scheduleClassesDtos == null || scheduleClassesDtos.size() < 1) {
+            return;
+        }
+
+        ScheduleClassesDayDto scheduleClassesDayDto = new ScheduleClassesDayDto();
+        scheduleClassesDayDto.setScheduleId(scheduleClassesDtos.get(0).getScheduleId());
+        List<ScheduleClassesDayDto> scheduleClassesDayDtos = scheduleClassesDayV1InnerServiceSMOImpl.queryScheduleClassesDays(scheduleClassesDayDto);
+
+        //设置问题 ,这里默认反馈在线
+        if (scheduleClassesDayDtos == null || scheduleClassesDayDtos.size() < 1) {
+            return;
+        }
+
+        String curMonth = reqJson.getString("curDate");
+        String curMonthDay = curMonth + "-01";
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(DateUtil.getDateFromStringB(curMonthDay));
+        int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+
+        if (ScheduleClassesDto.SCHEDULE_TYPE_DAY.equals(scheduleClassesDtos.get(0).getScheduleType())) {
+            doDay(scheduleClassesStaffDto, scheduleClassesDtos.get(0), scheduleClassesDayDtos, curMonth, maxDay);
+        } else if (ScheduleClassesDto.SCHEDULE_TYPE_WEEK.equals(scheduleClassesDtos.get(0).getScheduleType())) {
+            doWeek(scheduleClassesStaffDto, scheduleClassesDtos.get(0), scheduleClassesDayDtos, curMonth, maxDay);
+        } else if (ScheduleClassesDto.SCHEDULE_TYPE_MONTH.equals(scheduleClassesDtos.get(0).getScheduleType())) {
+            doMonth(scheduleClassesStaffDto, scheduleClassesDtos.get(0), scheduleClassesDayDtos, curMonth, maxDay);
+        }
+
+
+
+    }
+
+    private void doDay(ScheduleClassesStaffDto scheduleClassesStaffDto,
+                       ScheduleClassesDto scheduleClassesDto,
+                       List<ScheduleClassesDayDto> scheduleClassesDayDtos,
+                       String curMonth, int maxDay) {
+        List<ScheduleClassesDayDto> days = new ArrayList<>();
+        ScheduleClassesDayDto scDay = null;
+        ScheduleClassesDayDto tmpScheduleClassesDayDto = null;
+        int curDay = 1;
+        for (int day = 1; day <= maxDay; day++) {
+            scDay = new ScheduleClassesDayDto();
+            String today = curMonth + "-"+day;
+
+            int scheduleCycle = Integer.parseInt(scheduleClassesDto.getScheduleCycle());
+
+            int allDay = DateUtil.daysBetween(scheduleClassesDto.getComputeTime(), today)+1;
+            curDay = allDay % scheduleCycle;
+//
+//            if (curDay == 0 && day == 1) {
+//                curDay = 1;
+//            }
+//            if (curDay == 0 && day > 1) {
+//                curDay = scheduleCycle;
+//            }
+            if (curDay == 0) {
+                curDay = scheduleCycle;
+            }
+
+
+
+            scDay.setDay(day+"");
+            //计算 排班
+            for(ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos){
+                if((curDay+"").equals(scheduleClassesDayDto1.getDay())){
+                    tmpScheduleClassesDayDto = scheduleClassesDayDto1;
+                }
+            }
+            if(tmpScheduleClassesDayDto != null ){
+                scDay.setWorkday(tmpScheduleClassesDayDto.getWorkday());
+                scDay.setTimes(tmpScheduleClassesDayDto.getTimes());
+            }
+            days.add(scDay);
+
+        }
+
+        scheduleClassesStaffDto.setDays(days);
+    }
+
+    private void doWeek(ScheduleClassesStaffDto scheduleClassesStaffDto,
+                        ScheduleClassesDto scheduleClassesDto,
+                        List<ScheduleClassesDayDto> scheduleClassesDayDtos,
+                        String curMonth, int maxDay) {
+        List<ScheduleClassesDayDto> days = new ArrayList<>();
+        ScheduleClassesDayDto scDay = null;
+        ScheduleClassesDayDto tmpScheduleClassesDayDto = null;
+        int curDay = 1;
+        for (int day = 1; day <= maxDay; day++) {
+            scDay = new ScheduleClassesDayDto();
+            Calendar today = Calendar.getInstance();
+            today.setTime(DateUtil.getDateFromStringB(curMonth + "-"+day));
+            int week = today.get(Calendar.WEEK_OF_MONTH);
+            curDay = today.get(Calendar.DAY_OF_WEEK);
+
+            //一周第一天是否为星期天
+            boolean isFirstSunday = (today.getFirstDayOfWeek() == Calendar.SUNDAY);
+            //获取周几
+            //若一周第一天为星期天,则-1
+            if (isFirstSunday) {
+                curDay = curDay - 1;
+                if (curDay == 0) {
+                    curDay = 7;
+                }
+            }
+
+            scDay.setDay(day+"");
+            //计算 排班
+            for(ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos){
+                if((curDay+"").equals(scheduleClassesDayDto1.getDay()) && (week+"").equals(scheduleClassesDayDto1.getWeekFlag())){
+                    tmpScheduleClassesDayDto = scheduleClassesDayDto1;
+                }
+            }
+            if(tmpScheduleClassesDayDto == null){ // 没有设置周
+                for(ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos){
+                    if((curDay+"").equals(scheduleClassesDayDto1.getDay())){
+                        tmpScheduleClassesDayDto = scheduleClassesDayDto1;
+                    }
+                }
+            }
+            if(tmpScheduleClassesDayDto != null ){
+                scDay.setWorkday(tmpScheduleClassesDayDto.getWorkday());
+                scDay.setTimes(tmpScheduleClassesDayDto.getTimes());
+            }
+            days.add(scDay);
+
+        }
+
+        scheduleClassesStaffDto.setDays(days);
+    }
+
+
+    private void doMonth(ScheduleClassesStaffDto scheduleClassesStaffDto,
+                         ScheduleClassesDto scheduleClassesDto,
+                         List<ScheduleClassesDayDto> scheduleClassesDayDtos,
+                         String curMonth, int maxDay) {
+        List<ScheduleClassesDayDto> days = new ArrayList<>();
+        ScheduleClassesDayDto scDay = null;
+        ScheduleClassesDayDto tmpScheduleClassesDayDto = null;
+        int curDay = 1;
+        for (int day = 1; day <= maxDay; day++) {
+            scDay = new ScheduleClassesDayDto();
+            curDay = day;
+            scDay.setDay(day+"");
+            //计算 排班
+            for(ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos){
+                if((curDay+"").equals(scheduleClassesDayDto1.getDay())){
+                    tmpScheduleClassesDayDto = scheduleClassesDayDto1;
+                }
+            }
+            if(tmpScheduleClassesDayDto != null ){
+                scDay.setWorkday(tmpScheduleClassesDayDto.getWorkday());
+                scDay.setTimes(tmpScheduleClassesDayDto.getTimes());
+            }
+            days.add(scDay);
+        }
+
+        scheduleClassesStaffDto.setDays(days);
+    }
+
+
+
+}