From 9d22bf2b596d8f5627f671f009b3f42d71d73bf4 Mon Sep 17 00:00:00 2001 From: zm <2369059705qq.com> Date: 星期一, 04 十一月 2024 16:02:07 +0800 Subject: [PATCH] 考情看板和报表 --- src/main/java/com/product/administration/service/LeaveRequestService.java | 29 +++++++++ src/main/java/com/product/administration/service/WorkAttendanceKanbanService.java | 46 ++++++++++----- src/main/java/com/product/administration/controller/LeaveRequestController.java | 74 ++++++++++++++++++++++++ 3 files changed, 132 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/product/administration/controller/LeaveRequestController.java b/src/main/java/com/product/administration/controller/LeaveRequestController.java index ccbf671..9395979 100644 --- a/src/main/java/com/product/administration/controller/LeaveRequestController.java +++ b/src/main/java/com/product/administration/controller/LeaveRequestController.java @@ -236,6 +236,76 @@ return this.error(SystemCode.SYSTEM_DELETE_LEAVE_REQUEST_FAIL.getValue(),SystemCode.SYSTEM_DELETE_LEAVE_REQUEST_FAIL.getText()); } } - - + /** + * @Date: 2020-03-30 16:13 + * @Author: zm + * @Description: 鏍规嵁鏃ユ湡鑾峰彇璇峰亣鏁版嵁 + */ + @RequestMapping(value = "/getLeave/{version}", method = RequestMethod.POST) + @ApiVersion(1) + public String getLeave(HttpServletRequest request) { + try { + //鑾峰彇鍙傛暟 + FieldSetEntity fse=null; + Object bean=request.getAttribute(CoreConst.API_POST_REQUEST_DATA); + if(bean != null) { + RequestParameterEntity reqp=(RequestParameterEntity)bean; + fse = reqp.getFormData(); + } + //鍒ゆ柇鍙傛暟鏄惁涓虹┖ + if(bean == null || fse == null) { + SpringMVCContextHolder.getSystemLogger().error(SystemCode.SYSTEM_FORM_NODATA.getValue(), SystemCode.SYSTEM_FORM_NODATA.getText()); + return this.error(SystemCode.SYSTEM_FORM_NODATA.getValue(), SystemCode.SYSTEM_FORM_NODATA.getText()); + } + //鍒ゆ柇琛ㄥ悕鏄惁姝e父 + if (!CmnConst.PRODUCT_SYS_ASK_FOR_LEAVE.equals(fse.getTableName())) { + SpringMVCContextHolder.getSystemLogger().error(SystemCode.SYSTEM_TABLE_NODATA.getValue(), SystemCode.SYSTEM_TABLE_NODATA.getText()); + return this.error(SystemCode.SYSTEM_TABLE_NODATA.getValue(), SystemCode.SYSTEM_TABLE_NODATA.getText()); + } + FieldSetEntity fs = leaveRequestService.getLeave(fse); + return OK_List(fs); + }catch(BaseException e) { + SpringMVCContextHolder.getSystemLogger().error(e); + return this.error(e); + }catch (Exception e) { + SpringMVCContextHolder.getSystemLogger().error(e); + return this.error(SystemCode.SYSTEM_DELETE_LEAVE_REQUEST_FAIL.getValue(),SystemCode.SYSTEM_DELETE_LEAVE_REQUEST_FAIL.getText()); + } + } + /** + * @Date: 2020-03-30 16:13 + * @Author: zm + * @Description: 鏍规嵁鏃ユ湡鑾峰彇璇峰亣鍒楄〃 + */ + @RequestMapping(value = "/leaveList/{version}", method = RequestMethod.POST) + @ApiVersion(1) + public String leaveList(HttpServletRequest request) { + try { + //鑾峰彇鍙傛暟 + FieldSetEntity fse=null; + Object bean=request.getAttribute(CoreConst.API_POST_REQUEST_DATA); + if(bean != null) { + RequestParameterEntity reqp=(RequestParameterEntity)bean; + fse = reqp.getFormData(); + } + //鍒ゆ柇鍙傛暟鏄惁涓虹┖ + if(bean == null || fse == null) { + SpringMVCContextHolder.getSystemLogger().error(SystemCode.SYSTEM_FORM_NODATA.getValue(), SystemCode.SYSTEM_FORM_NODATA.getText()); + return this.error(SystemCode.SYSTEM_FORM_NODATA.getValue(), SystemCode.SYSTEM_FORM_NODATA.getText()); + } + //鍒ゆ柇琛ㄥ悕鏄惁姝e父 + if (!CmnConst.PRODUCT_SYS_ASK_FOR_LEAVE.equals(fse.getTableName())) { + SpringMVCContextHolder.getSystemLogger().error(SystemCode.SYSTEM_TABLE_NODATA.getValue(), SystemCode.SYSTEM_TABLE_NODATA.getText()); + return this.error(SystemCode.SYSTEM_TABLE_NODATA.getValue(), SystemCode.SYSTEM_TABLE_NODATA.getText()); + } + DataTableEntity dt = leaveRequestService.leaveList(fse); + return OK_List(dt); + }catch(BaseException e) { + SpringMVCContextHolder.getSystemLogger().error(e); + return this.error(e); + }catch (Exception e) { + SpringMVCContextHolder.getSystemLogger().error(e); + return this.error(SystemCode.SYSTEM_DELETE_LEAVE_REQUEST_FAIL.getValue(),SystemCode.SYSTEM_DELETE_LEAVE_REQUEST_FAIL.getText()); + } + } } diff --git a/src/main/java/com/product/administration/service/LeaveRequestService.java b/src/main/java/com/product/administration/service/LeaveRequestService.java index 6e5a63e..3dd8c9d 100644 --- a/src/main/java/com/product/administration/service/LeaveRequestService.java +++ b/src/main/java/com/product/administration/service/LeaveRequestService.java @@ -12,6 +12,7 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.Date; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -116,4 +117,32 @@ public boolean deleteLeaveRequest(FieldSetEntity fs) throws BaseException { return baseDao.delete(CmnConst.PRODUCT_SYS_ASK_FOR_LEAVE,CmnConst.UUID+"=?",new Object[]{fs.getString(CmnConst.UUID)}); } + + /** + * 鏍规嵁鐢宠浜哄拰璇峰亣鏃ユ湡鑾峰彇璇峰亣鍗曟嵁 + * @param fs + * @return + */ + public FieldSetEntity getLeave(FieldSetEntity fs){ + return baseDao.getFieldSetByFilter(CmnConst.PRODUCT_SYS_ASK_FOR_LEAVE,"user_id=? and DATE_FORMAT(start_time,'%Y-%m-%d')<=? and DATE_FORMAT(end_time,'%Y-%m-%d')>=?",new String[]{fs.getString("user_id"),fs.getString("date"),fs.getString("date")},false); + } + + /** + * + * @param fs + * @return + */ + public DataTableEntity leaveList(FieldSetEntity fs){ + String a=""; + ArrayList<String> list = new ArrayList<>(); + if (!StringUtils.isEmpty(fs.getString("yearAndMonth"))){ + a="(DATE_FORMAT( start_time, '%Y-%m' )=? or DATE_FORMAT( end_time, '%Y-%m' )=?) and user_id=? and"; + list.add(fs.getString("yearAndMonth")); + list.add(fs.getString("yearAndMonth")); + list.add(fs.getString("created_by")); + } + DataTableEntity dt = baseDao.listTable(CmnConst.PRODUCT_SYS_ASK_FOR_LEAVE, a + " flow_flag = 2", list.toArray()); + baseDao.loadPromptData(dt); + return dt; + } } diff --git a/src/main/java/com/product/administration/service/WorkAttendanceKanbanService.java b/src/main/java/com/product/administration/service/WorkAttendanceKanbanService.java index 1475f69..6f72249 100644 --- a/src/main/java/com/product/administration/service/WorkAttendanceKanbanService.java +++ b/src/main/java/com/product/administration/service/WorkAttendanceKanbanService.java @@ -1,9 +1,11 @@ package com.product.administration.service; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; +import java.time.YearMonth; import cn.hutool.core.util.ObjectUtil; import org.springframework.beans.factory.annotation.Autowired; @@ -450,6 +452,10 @@ 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)); @@ -466,11 +472,11 @@ StringBuilder sb=new StringBuilder(); sb.append(" SELECT "); - sb.append(" ( SELECT user_name FROM product_sys_users WHERE user_id = a.created_by ) created_by, "); + 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,workDayOfMonth,lateCome,leaveEarly,total_hours,askForLeave,(dayOfWork - workDayOfMonth-askForLeave) absenteeism "); - sb.append(" FROM(SELECT b.created_by,b.dayOfWork,b.workDayOfMonth+bb.replenish_date workDayOfMonth,b.dept_uuid,b.lateCome1 lateCome,b.leaveEarly2 leaveEarly FROM "); - sb.append(" (SELECT a.created_by,"+dayOfWork+" dayOfWork,COUNT( day_of_month ) workDayOfMonth,a.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, "); @@ -478,7 +484,7 @@ 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(" AND DATE_FORMAT( d.punch_time, '%Y-%m' )=? "); + 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 "); @@ -490,23 +496,36 @@ 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(" LEFT JOIN (SELECT user_id,sum( duration ) total_hours FROM product_oa_work_overtime o "); + 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(DATE_FORMAT(end_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' )=? AND flow_flag = 2 ) a "); + 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(" LEFT JOIN product_sys_company_holiday b on b.date_holiday<= a.end_time and b.date_holiday>=a.start_time "); - sb.append(" GROUP BY a.created_by,a.askForLeave) a GROUP BY created_by )"); - - sb.append(" c ON a.created_by = c.created_by "); + 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 <dataTableEntityReport.getRows() ; i++) { + FieldSetEntity fs = dataTableEntityReport.getFieldSetEntity(i); + if (StringUtils.isEmpty(fs.getString("dept_uuid"))){ + FieldSetEntity org_level_name = baseDao.getFieldSetEntityBySQL("SELECT org_level_name FROM `product_sys_staffs` a LEFT JOIN product_sys_org_levels b on a.dept_uuid=b.uuid where a.user_id=?", new String[]{fs.getString("user_id")}, false); + fs.setValue("dept_uuid",org_level_name.getString("org_level_name")); + } + } //澶勭悊琛ュ崱鐨勬儏鍐� // List<Object>param2= new ArrayList<>(); @@ -533,8 +552,5 @@ return dataTableEntityReport; } - - - } -- Gitblit v1.9.2