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