package com.product.administration.service; import java.time.LocalDate; import java.util.*; import java.time.YearMonth; import cn.hutool.core.util.ObjectUtil; import com.product.util.UnifySQLFunction; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.product.administration.config.CmnConst; import com.product.administration.config.SystemCode; import com.product.administration.util.WorkDayUtil; import com.product.common.lang.DateUtils; import com.product.common.lang.StringUtils; import com.product.core.dao.BaseDao; import com.product.core.entity.DataTableEntity; import com.product.core.entity.FieldSetEntity; import com.product.core.exception.BaseException; import com.product.core.spring.context.SpringMVCContextHolder; import com.product.module.sys.entity.SystemUser; import com.product.util.BaseUtil; @Component public class WorkAttendanceKanbanService { @Autowired BaseDao baseDao; /** * 考勤报表 * @param dept_uuid 部门 * @param year_of_month 年月 * @return */ public DataTableEntity listAttendanceReport(String dept_uuid, String year_of_month) { Integer monthNum=Integer.valueOf(year_of_month.substring(5, 7)); //获取月份 Integer yearNum=Integer.valueOf(year_of_month.substring(0,4)); //获取年份 Integer totalDays=WorkDayUtil.getTotalDays(yearNum, monthNum); StringBuilder sb=new StringBuilder(); sb.append(" SELECT USER_ID, "); for (int i = 1; i <= totalDays; i++) { if (i<10) { sb.append(" GROUP_CONCAT(CASE WHEN DATETIME='0"+i+"' THEN concat(uuid) END)'0"+i+"', "); }else { if (i==totalDays) { sb.append(" GROUP_CONCAT(CASE WHEN DATETIME='"+i+"' THEN concat(uuid) END)'"+i+"' "); }else { sb.append(" GROUP_CONCAT(CASE WHEN DATETIME='"+i+"' THEN concat(uuid) END)'"+i+"', "); } } } sb.append(" FROM ( "); sb.append(" SELECT USER_ID,DATETIME,GROUP_CONCAT(UUID)UUID "); sb.append(" FROM ( "); sb.append(" SELECT created_by USER_ID,DATE_FORMAT(created_utc_datetime,'%d')DATETIME,CONCAT('[卡]',uuid) UUID "); sb.append(" FROM product_oa_punch_record "); sb.append(" WHERE created_utc_datetime IS NOT NULL AND DATE_FORMAT(created_utc_datetime,'%Y-%m')=? "); sb.append(" UNION ALL "); sb.append(" SELECT created_by,DATE_FORMAT(start_time,'%d')start_time,CONCAT('[假]',uuid) "); sb.append(" FROM product_oa_ask_for_leave "); sb.append(" WHERE start_time IS NOT NULL AND flow_flag=2 AND DATE_FORMAT(start_time,'%Y-%m')=? "); sb.append(" UNION ALL "); sb.append(" SELECT applicant,DATE_FORMAT(business_start_time,'%d')business_start_time,CONCAT('[差]',uuid) "); sb.append(" FROM product_sys_business_trip "); sb.append(" WHERE business_start_time IS NOT NULL AND flow_flag=2 AND DATE_FORMAT(business_start_time,'%Y-%m')=? "); sb.append(" )a GROUP BY USER_ID,DATETIME ORDER BY USER_ID,DATETIME "); sb.append(" )a "); sb.append(" GROUP BY USER_ID "); return baseDao.listTable(sb.toString(), new Object[] {year_of_month,year_of_month,year_of_month}); } /** * 打卡月看板 * @param fse * @return */ public DataTableEntity listMonthKanBan(FieldSetEntity fse) { //获取当前人信息 SystemUser currentUser=SpringMVCContextHolder.getCurrentUser(); Integer user_id=currentUser.getUser_id(); //user_id String org_level_uuid=currentUser.getOrg_level_uuid(); //公司uuid //获取公司工作时间配置信息 FieldSetEntity fseCompanyPunch=baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_OA_PUNCH_TIME, "org_level_uuid=?", new Object[] {org_level_uuid}, false); if (fseCompanyPunch==null) { throw new BaseException(SystemCode.COMPANY_PUNCH_TIME_NOT_CONFIG.getValue(), SystemCode.COMPANY_PUNCH_TIME_NOT_CONFIG.getText(), this.getClass(), "listMonthKanBan"); } //获取查询月份 String yearAndMonth=fse.getString("yearAndMonth"); if (StringUtils.isEmpty(yearAndMonth)) { yearAndMonth=DateUtils.formatDate(new Date(), "yyyy-MM"); } int workTimeMethod=0; if (!StringUtils.isEmpty(fseCompanyPunch.getString("work_time_two")) && !StringUtils.isEmpty(fseCompanyPunch.getString("work_time_three"))) { workTimeMethod=1; } StringBuilder sb=new StringBuilder(); List param=new ArrayList<>(); sb.append(" SELECT "); sb.append(" DATE_FORMAT(created_utc_datetime,'%Y-%m-%d')punch_date, "); sb.append(" punch_time_one,IF(punch_time_one IS TRUE,IF(DATE_FORMAT(punch_time_one,'%H:%i:%S')>?,'迟到','正常'),'上午上班未打卡')result_one, "); param.add(fseCompanyPunch.getDate("work_time_one","HH:mm:ss")); if (workTimeMethod==1) { sb.append(" punch_time_two,IF(punch_time_two IS TRUE,IF(DATE_FORMAT(punch_time_two,'%H:%i:%S')?,'迟到','正常'),'下午上班未打卡')result_three, "); param.add(fseCompanyPunch.getDate("work_time_three","HH:mm:ss")); } sb.append(" punch_time_four,IF(punch_time_four IS TRUE,IF(DATE_FORMAT(punch_time_four,'%H:%i:%S') param=new ArrayList<>(); sb.append(" SELECT a.punch_date, "); // sb.append(" CASE WHEN b.uuid is not null THEN '请假' ELSE "); // sb.append(" CASE WHEN d.created_by is not null THEN "); // sb.append(" CONCAT(d.punch_type1,',',d.punch_type2,',',d.punch_type3,',',d.punch_type4) "); // // sb.append(" ELSE '全天未打卡' END END reidis, "); // sb.append(" CASE WHEN b.uuid is not null THEN 1 ELSE "); // sb.append(" CASE WHEN d.created_by is not null THEN 0 ELSE 2 END END type, "); sb.append(" e.bk FROM ("); /*=================*/ sb.append("\n SELECT *"); sb.append("\n FROM ("); sb.append("\n SELECT ").append(UnifySQLFunction.dateAdd("t.month_start", "d.day", "DAY")).append(" punch_date"); sb.append("\n FROM (SELECT ? month_start) t"); param.add(yearAndMonth+"-01"); sb.append("\n INNER JOIN ("); sb.append("\n SELECT 0 as day UNION ALL SELECT 1 as day UNION ALL SELECT 2 as day UNION ALL SELECT 3 as day UNION ALL SELECT 4 as day UNION ALL SELECT 5 as day UNION ALL SELECT 6 as day UNION ALL SELECT 7 as day UNION ALL SELECT 8 as day UNION ALL SELECT 9 as day UNION ALL SELECT 10 as day UNION ALL SELECT 11 as day UNION ALL SELECT 12 as day UNION ALL SELECT 13 as day UNION ALL SELECT 14 as day UNION ALL SELECT 15 as day UNION ALL SELECT 16 as day UNION ALL SELECT 17 as day UNION ALL SELECT 18 as day UNION ALL SELECT 19 as day UNION ALL SELECT 20 as day UNION ALL SELECT 21 as day UNION ALL SELECT 22 as day UNION ALL SELECT 23 as day UNION ALL SELECT 24 as day UNION ALL SELECT 25 as day UNION ALL SELECT 26 as day UNION ALL SELECT 27 as day UNION ALL SELECT 28 as day UNION ALL SELECT 29 as day UNION ALL SELECT 30 as day"); sb.append("\n ) d ON 1=1"); sb.append("\n ) t1"); sb.append("\n WHERE t1.punch_date<=?"); param.add(day); /*==================*/ sb.append(") a "); sb.append(" LEFT JOIN (SELECT * FROM product_oa_ask_for_leave WHERE user_id=? and flow_flag=2) b "); param.add(user_id); sb.append(" on ").append(UnifySQLFunction.dateFormat("a.punch_date", "yyyy-MM-dd")).append(">= ").append(UnifySQLFunction.dateFormat("b.start_time", "yyyy-MM-dd")).append(" and ").append(UnifySQLFunction.dateFormat("a.punch_date", "yyyy-MM-dd")).append("<= ").append(UnifySQLFunction.dateFormat("b.end_time", "yyyy-MM-dd")).append(" "); sb.append(" LEFT JOIN (SELECT * FROM product_oa_punch_record_v where created_by=?) d on a.punch_date=d.punch_time "); param.add(user_id); sb.append(" LEFT JOIN (SELECT applicant,").append(UnifySQLFunction.dateFormat("replenish_date", "yyyy-MM-dd")).append(" replenish_date,").append(UnifySQLFunction.groupConcat("replacement_card_type")).append(" bk FROM product_oa_replenish_punch "); sb.append(" where applicant=? and flow_flag=2 GROUP BY applicant,").append(UnifySQLFunction.dateFormat("replenish_date", "yyyy-MM-dd")).append(") e on a.punch_date=e.replenish_date "); param.add(user_id); sb.append(" where a.punch_date NOT IN (SELECT ").append(UnifySQLFunction.dateFormat("date_holiday", "yyyy-MM-dd")).append(" FROM product_sys_company_holiday) "); DataTableEntity dt = baseDao.listTable(sb.toString(), param.toArray()); FieldSetEntity time = baseDao.getFieldSetByFilter(com.product.org.admin.config.CmnConst.PRODUCT_OA_PUNCH_TIME, "CONCAT(',',attendance_object,',') like CONCAT('%',?,'%')", new String[]{","+user_id+","},false); for (int i = 0; i < dt.getRows(); i++) { FieldSetEntity fs = dt.getFieldSetEntity(i); //当天打卡处理 if (fs.getString("punch_date").equals(day)){ if (null!=fs.getString("reidis")&&fs.getString("reidis").equals("全天未打卡")){ fs.setValue("reidis",null); fs.setValue("dkfw",null); }else { String[] reidis = fs.getString("reidis").split(","); for (int j = 0; j bk=new ArrayList<>(); if (!StringUtils.isEmpty(fs.getString("bk"))){ bk= Arrays.asList(fs.getString("bk").split(",")); } if (!StringUtils.isEmpty(fs.getString("reidis"))&&fs.getString("reidis").equals("全天未打卡")&&!StringUtils.isEmpty(fs.getString("bk"))){ if (!bk.contains("1")){ fs.setValue("result_one", "上午上班未打卡"); } if (!bk.contains("2")&&!StringUtils.isEmpty(time.getString("morning_work_off"))){ fs.setValue("result_two", "上午下班未打卡"); } if (!bk.contains("3")&&!StringUtils.isEmpty(time.getString("afternoon_work"))){ fs.setValue("result_three", "下午上班未打卡"); } if (!bk.contains("4")){ fs.setValue("result_four", "下午下班未打卡"); } if (StringUtils.isEmpty(fs.getString("result_one"))&&StringUtils.isEmpty(fs.getString("result_two"))&&StringUtils.isEmpty(fs.getString("result_three"))&&StringUtils.isEmpty(fs.getString("result_four"))){ fs.setValue("type",1); fs.setValue("result_one","已补卡"); } continue; } if ("0".equals(fs.getString("type"))){ String[] reidis = fs.getString("reidis").split(","); String a="1"; for (int j = 0; j < reidis.length; j++) { if (reidis[j].contains("上午迟到")) { if (!bk.contains("1")) { fs.setValue("result_one", reidis[j]); a = "2"; } } if (reidis[j].contains("上午早退")) { if (!bk.contains("2")) { fs.setValue("result_two", reidis[j]); a = "2"; } } if (reidis[j].contains("下午迟到")) { if (!bk.contains("3")) { fs.setValue("result_three", reidis[j]); a = "2"; } } if (reidis[j].contains("下午早退")) { if (!bk.contains("3")) { fs.setValue("result_four", reidis[j]); a = "2"; } } if (reidis[j].contains("上午上班未打卡")) { fs.setValue("result_one", reidis[j]); } if (reidis[j].contains("上午下班未打卡")&&!StringUtils.isEmpty(time.getString("morning_work_off"))) { fs.setValue("result_two", reidis[j]); } if (reidis[j].contains("下午上班未打卡")&&!StringUtils.isEmpty(time.getString("afternoon_work"))) { fs.setValue("result_three", reidis[j]); } if (reidis[j].contains("下午下班未打卡")) { fs.setValue("result_four", reidis[j]); } } if ("1".equals(a)){ fs.setValue("type",a); fs.setValue("result_one","正常打卡"); } }else { fs.setValue("result_one",fs.getString("reidis")); } } return dt; } // public DataTableEntity listMonthKanBanNew(FieldSetEntity fse) { // //获取当前人信息 // Integer user_id=fse.getInteger("user_id"); //user_id // if(user_id==null){ // return null; // } // // //获取查询月份 // String yearAndMonth=fse.getString("yearAndMonth"); // if (StringUtils.isEmpty(yearAndMonth)) { // yearAndMonth=DateUtils.formatDate(new Date(), "yyyy-MM"); // } // // // // String day=DateUtils.formatDate(new Date(), "yyyy-MM-dd"); // // StringBuilder sb=new StringBuilder(); // List param=new ArrayList<>(); // // sb.append(" SELECT a.punch_date,e.bk,f.morning_work,f.morning_work_off,f.afternoon_work,f.afternoon_work_off, "); // // sb.append(" CONCAT(if(d.punch_range_one is not null and d.punch_range_one>f.distance,'超出打卡范围',0) "); // sb.append(" ,',',if(d.punch_range_two is not null and d.punch_range_two>f.distance,'超出打卡范围',0) "); // sb.append(" ,',',if(d.punch_time_three is not null and d.punch_time_three>f.distance,'超出打卡范围',0) "); // sb.append(" ,',',if(d.punch_range_four is not null and d.punch_range_four>f.distance,'超出打卡范围',0)) dkfw, "); // sb.append(" CASE WHEN b.uuid is not null THEN '请假' ELSE "); // sb.append(" CASE WHEN d.uuid is not null THEN "); // sb.append(" CONCAT(IF(d.punch_time_one IS TRUE, IF ( DATE_FORMAT(d.punch_time_one, '%H:%i:%S' )>DATE_FORMAT(f.morning_work, '%H:%i:%S'), CONCAT('上午迟到',TIMESTAMPDIFF(MINUTE, DATE_FORMAT(CONCAT(a.punch_date,' ',DATE_FORMAT(f.morning_work, '%H:%i:%S')),'%Y-%m-%d %H:%i:%S'),d.punch_time_one),'分钟'), 0 ), '上午上班未打卡' ) "); // sb.append(" ,',',IF(d.punch_time_two IS TRUE, IF ( DATE_FORMAT(d.punch_time_two, '%H:%i:%S' )DATE_FORMAT(f.afternoon_work, '%H:%i:%S') and f.afternoon_work is not null, CONCAT('下午迟到',TIMESTAMPDIFF(MINUTE, DATE_FORMAT(CONCAT(a.punch_date,' ',DATE_FORMAT(f.afternoon_work, '%H:%i:%S')),'%Y-%m-%d %H:%i:%S'),d.punch_time_three),'分钟'), 0 ), '下午上班未打卡' ) "); // sb.append(" ,',',IF(d.punch_time_four IS TRUE, IF ( DATE_FORMAT(d.punch_time_four, '%H:%i:%S' )= DATE_FORMAT( b.start_time, '%Y-%m-%d' ) and DATE_FORMAT( a.punch_date, '%Y-%m-%d' )<= DATE_FORMAT( b.end_time, '%Y-%m-%d' ) "); // sb.append(" LEFT JOIN product_oa_punch_record d on a.punch_date=DATE_FORMAT( d.punch_time_one, '%Y-%m-%d' ) "); // sb.append(" LEFT JOIN (SELECT applicant,DATE_FORMAT( replenish_date, '%Y-%m-%d') replenish_date,max(replacement_card_type) bk FROM product_oa_replenish_punch "); // sb.append(" where applicant=? and flow_flag=2 GROUP BY applicant,DATE_FORMAT( replenish_date, '%Y-%m-%d')) e on a.punch_date=e.replenish_date "); // param.add(user_id); // sb.append(" LEFT JOIN product_oa_punch_time f on d.punch_congfig_uuid =f.punch_site_uuid "); // sb.append(" where a.punch_date NOT IN (SELECT DATE_FORMAT( date_holiday, '%Y-%m-%d' ) FROM product_sys_company_holiday) "); // DataTableEntity dt = baseDao.listTable(sb.toString(), param.toArray()); // for (int i = 0; i < dt.getRows(); i++) { // FieldSetEntity fs = dt.getFieldSetEntity(i); // //当天打卡处理 // if (fs.getString("punch_date").equals(day)){ // if (null!=fs.getString("reidis")&&fs.getString("reidis").equals("全天未打卡")){ // fs.setValue("reidis",null); // fs.setValue("dkfw",null); // }else { // String[] reidis = fs.getString("reidis").split(","); // for (int j = 0; j bk=new ArrayList<>(); // if (!StringUtils.isEmpty(fs.getString("bk"))){ // bk= Arrays.asList(fs.getString("bk").split(",")); // } // if (!StringUtils.isEmpty(fs.getString("reidis"))&&fs.getString("reidis").equals("全天未打卡")&&!StringUtils.isEmpty(fs.getString("bk"))){ // if (!bk.contains("1")){ // fs.setValue("result_one", "上午上班未打卡"); // } // if (!bk.contains("2")&&!StringUtils.isEmpty(fs.getString("morning_work_off"))){ // fs.setValue("result_two", "上午下班未打卡"); // } // if (!bk.contains("3")&&!StringUtils.isEmpty(fs.getString("afternoon_work"))){ // fs.setValue("result_three", "下午上班未打卡"); // } // if (!bk.contains("4")){ // fs.setValue("result_four", "下午下班未打卡"); // } // continue; // } // if ("0".equals(fs.getString("type"))){ // String[] reidis = fs.getString("reidis").split(","); // String[] dkfwsArr = fs.getString("dkfw").split(","); // String a="1"; // for (int j = 0; j < reidis.length; j++) { // String dkfws=""; // if (!dkfwsArr[j].equals("0")){ // dkfws=dkfwsArr[j]; // } // if (reidis[j].contains("上午迟到")) { // if (!bk.contains("1")) { // fs.setValue("result_one", reidis[j]+dkfws); // a = "2"; // } // } // if (reidis[j].contains("上午早退")) { // if (!bk.contains("2")) { // fs.setValue("result_two", reidis[j]+dkfws); // a = "2"; // } // } // if (reidis[j].contains("下午迟到")) { // if (!bk.contains("3")) { // fs.setValue("result_three", reidis[j]+dkfws); // a = "2"; // } // } // if (reidis[j].contains("下午早退")) { // if (!bk.contains("3")) { // fs.setValue("result_four", reidis[j]+dkfws); // a = "2"; // } // } // if (reidis[j].contains("上午上班未打卡")) { // fs.setValue("result_one", reidis[j]); // } // if (reidis[j].contains("上午下班未打卡")) { // fs.setValue("result_two", reidis[j]); // } // if (reidis[j].contains("下午上班未打卡")) { // fs.setValue("result_three", reidis[j]); // } // if (reidis[j].contains("下午下班未打卡")) { // fs.setValue("result_four", reidis[j]); // } // } // if ("1".equals(a)){ // fs.setValue("type",a); // fs.setValue("result_one","正常打卡"); // } // // }else { // fs.setValue("result_one",fs.getString("reidis")); // } // } // return dt; // } /** * 考勤统计报表 * @param fse * @return */ public DataTableEntity listMonthReport(FieldSetEntity fse) { //获取查询月份 String yearAndMonth=fse.getString("yearAndMonth"); if (StringUtils.isEmpty(yearAndMonth)) { yearAndMonth=DateUtils.formatDate(new Date(), "yyyy-MM"); } int year = Integer.parseInt(yearAndMonth.split("-")[0]); int month = Integer.parseInt(yearAndMonth.split("-")[1]); LocalDate monthEndDate = YearMonth.of(year, month).atEndOfMonth(); //获取每月天数 int dayOfMonth = DateUtils.getMonthHasDays(DateUtils.parseDate(yearAndMonth)); //获取本月节假日 DataTableEntity dtHoliday=baseDao.listTable("product_sys_company_holiday", "date_holiday like ?", new Object[] {yearAndMonth+"%"}); //获取每月应上班天数 int dayOfWork = 0; if (BaseUtil.dataTableIsEmpty(dtHoliday)) { dayOfWork=dayOfMonth; }else { dayOfWork=dayOfMonth-dtHoliday.getRows(); } ArrayList param = new ArrayList<>(); StringBuilder sb=new StringBuilder(); sb.append(" SELECT "); sb.append(" b.user_id,( SELECT user_name FROM product_sys_users WHERE user_id = b.user_id ) created_by, "); sb.append(" ( SELECT org_level_name FROM product_sys_org_levels WHERE uuid = dept_uuid ) dept_uuid, "); sb.append(" "+dayOfWork+" dayOfWork,workDayOfMonth,lateCome,leaveEarly,total_hours,askForLeave,("+dayOfWork+" - workDayOfMonth-askForLeave) absenteeism "); sb.append(" FROM(SELECT b.created_by,b.workDayOfMonth+bb.replenish_date workDayOfMonth,b.dept_uuid,b.lateCome1 lateCome,b.leaveEarly2 leaveEarly FROM "); sb.append(" (SELECT a.created_by,COUNT( day_of_month ) workDayOfMonth,a.dept_uuid, "); sb.append(" COUNT(IF( result1 like '%迟到%', TRUE, NULL )) lateCome1,"); sb.append(" COUNT(IF( result3 like '%迟到%', TRUE, NULL )) lateCome2,"); sb.append(" COUNT(IF( result2 like '%早退%', TRUE, NULL )) leaveEarly1, "); sb.append(" COUNT(IF( result4 like '%早退%', TRUE, NULL )) leaveEarly2 "); sb.append(" FROM(SELECT d.created_by,d.dept_uuid,DATE_FORMAT( d.punch_time, '%Y-%m-%d' ) day_of_month,punch_type1 result1,punch_type2 result2,punch_type3 result3,punch_type4 result4 "); sb.append(" FROM product_oa_punch_record_v d "); sb.append(" LEFT JOIN product_oa_punch_time e ON e.attendance_object like CONCAT('%',d.created_by,'%') "); sb.append(" where DATE_FORMAT( d.punch_time, '%Y-%m' )=? "); param.add(yearAndMonth); sb.append(" AND DATE_FORMAT( d.punch_time, '%Y-%m-%d' ) NOT IN ( SELECT date_holiday FROM product_sys_company_holiday )) a "); sb.append(" GROUP BY a.created_by,a.dept_uuid ) b "); sb.append(" LEFT JOIN (SELECT applicant,COUNT( 1 ) replenish_date FROM "); sb.append(" (SELECT applicant,DATE_FORMAT(replenish_date, '%Y-%m-%d') replenish_date FROM product_oa_replenish_punch a "); sb.append(" LEFT JOIN product_oa_punch_record_v b on DATE_FORMAT(a.replenish_date, '%Y-%m-%d')=b.punch_time and a.applicant=b.created_by "); sb.append(" where b.created_by is null and DATE_FORMAT(replenish_date, '%Y-%m')=? GROUP BY DATE_FORMAT(replenish_date, '%Y-%m-%d'),applicant)a "); param.add(yearAndMonth); sb.append(" GROUP BY applicant,DATE_FORMAT(replenish_date, '%Y-%m')) bb on b.created_by=bb.applicant "); sb.append(" ) a "); sb.append(" RIGHT JOIN (SELECT user_id,sum( duration ) total_hours FROM product_oa_work_overtime o "); sb.append(" LEFT JOIN product_oa_work_overtime_sub b ON o.uuid = b.main_uuid AND DATE_FORMAT( b.start_time, '%Y-%m' )=? "); param.add(yearAndMonth); sb.append(" GROUP BY o.user_id ) b ON a.created_by = b.user_id "); sb.append(" LEFT JOIN "); sb.append("(SELECT a.created_by,sum(askForLeave) askForLeave FROM (SELECT a.created_by,a.askForLeave-COUNT(1) askForLeave FROM "); sb.append(" (SELECT created_by,DATEDIFF(if(DATE_FORMAT(end_time, '%Y-%m-%d')<=?,DATE_FORMAT(end_time, '%Y-%m-%d'),?), if(DATE_FORMAT(start_time, '%Y-%m-%d' )>=?,DATE_FORMAT(start_time, '%Y-%m-%d' ),?))+1 askForLeave,start_time,end_time "); sb.append(" FROM product_oa_ask_for_leave a where (DATE_FORMAT( start_time, '%Y-%m' )=? or DATE_FORMAT( end_time, '%Y-%m' )=?) AND flow_flag = 2 ) a "); param.add(String.valueOf(monthEndDate)); param.add(String.valueOf(monthEndDate)); param.add(yearAndMonth+"-01"); param.add(yearAndMonth+"-01"); param.add(yearAndMonth); param.add(yearAndMonth); sb.append(" LEFT JOIN product_sys_company_holiday b on b.date_holiday<= a.end_time and b.date_holiday>=a.start_time and DATE_FORMAT(b.date_holiday, '%Y-%m')=?"); sb.append(" GROUP BY a.created_by,a.askForLeave) a GROUP BY created_by )"); param.add(yearAndMonth); sb.append(" c ON b.user_id = c.created_by "); sb.append(" ORDER BY dept_uuid,a.created_by"); DataTableEntity dataTableEntityReport = baseDao.listTable(sb.toString(), param.toArray()); for (int i = 0; i param2= new ArrayList<>(); // param2.add(fse.getString("yearAndMonth")); // // StringBuilder sbReplenish=new StringBuilder(); // sbReplenish.append(" SELECT DISTINCT replenish_date "); // sbReplenish.append(" FROM product_oa_replenish_punch "); // sbReplenish.append(" WHERE"); // sbReplenish.append(" applicant =? and flow_flag=2"); // sbReplenish.append(" AND DATE_FORMAT( replenish_date, '%Y-%m' )=? "); // sbReplenish.append(" and DATE_FORMAT( replenish_date, '%Y-%m-%d') "); // sbReplenish.append(" not in ("); // sbReplenish.append(" SELECT DISTINCT record_data FROM "); // sbReplenish.append(" ( "); // sbReplenish.append(" select DATE_FORMAT(punch_time, '%Y-%m-%d') as record_data from product_oa_punch_record_v "); // sbReplenish.append(" )n )"); // DataTableEntity dataTableEntityReplenish = baseDao.listTable(sbReplenish.toString(), param2.toArray()); // if(dataTableEntityReplenish.getRows()!=0){ // dataTableEntityReport.getData().get(0).setValue("workDayOfMonth",Integer.parseInt(dataTableEntityReport.getData().get(0).getString("workDayOfMonth"))+dataTableEntityReplenish.getRows()); // dataTableEntityReport.getData().get(0).setValue("dayOfWork",Integer.parseInt(dataTableEntityReport.getData().get(0).getString("dayOfWork"))-dataTableEntityReplenish.getRows()); // } return dataTableEntityReport; } }