From 1d1d34b48e6e80bea350d805d8ff2564ca226f25 Mon Sep 17 00:00:00 2001
From: 杜洪波 <1074825718@qq.com>
Date: 星期一, 19 八月 2024 13:44:17 +0800
Subject: [PATCH] Merge branch 'master' of http://nonxin.cn:8090/r/product/product-server-administration/V2.0.0

---
 src/main/java/com/product/administration/controller/WorkAttendanceLocationController.java |    4 
 src/main/java/com/product/administration/controller/ConferenceManagerController.java      |   43 +
 src/main/java/com/product/administration/controller/EarlyWarningManagerController.java    |   60 +
 src/main/java/com/product/administration/service/PunchRecordService.java                  |  275 ++++++++++
 src/main/java/com/product/administration/service/LeaveRequestService.java                 |   25 
 src/main/java/com/product/administration/service/WorkAttendanceKanbanService.java         |  455 ++++++++++++-----
 src/main/java/com/product/administration/service/ConferenceManagerService.java            |  115 ++++
 src/main/java/com/product/administration/service/ide/IEarlyWarningManager.java            |   22 
 src/main/java/com/product/administration/service/CustomerInfoService.java                 |    6 
 src/main/java/com/product/administration/service/ide/IConferenceManagerService.java       |    8 
 src/main/java/com/product/administration/service/EarlyWarningServer.java                  |  423 +++++++++------
 src/main/java/com/product/administration/config/SystemCode.java                           |   15 
 src/main/java/com/product/administration/service/CooperatesService.java                   |    8 
 src/main/java/com/product/administration/service/EarlyWarningManagerService.java          |   40 +
 src/main/java/com/product/administration/controller/WorkAttendanceKanbanController.java   |    2 
 src/main/java/com/product/administration/controller/LeaveRequestController.java           |    3 
 16 files changed, 1,140 insertions(+), 364 deletions(-)

diff --git a/src/main/java/com/product/administration/config/SystemCode.java b/src/main/java/com/product/administration/config/SystemCode.java
index b998ed0..4ec5ef5 100644
--- a/src/main/java/com/product/administration/config/SystemCode.java
+++ b/src/main/java/com/product/administration/config/SystemCode.java
@@ -247,17 +247,17 @@
     TEAM_MANAGER_DELETE_FAIL_HAS_SUB_TEAM("鍥㈤槦鍒犻櫎澶辫触,鍖呭惈瀛愬洟闃�", ModuleEnum.ADMINISTRAT.getValue() + "176"),
     TEAM_MANAGER_DELETE_FAIL_HAS_STAFF_REFERED("鍥㈤槦鍒犻櫎澶辫触,鍛樺伐宸茬粡鍏宠仈", ModuleEnum.ADMINISTRAT.getValue() + "177"),
     TEAM_SAVE_FAIL_DUPLICATE_NAME("淇濆瓨澶辫触,鍥㈤槦鍚嶇О閲嶅", ModuleEnum.ADMINISTRAT.getValue() + "178"),
-	
+
 	COMPANY_NOT_CONFIG_PUNCH_TIME("鍏徃鏈厤缃墦鍗℃椂闂�", ModuleEnum.ADMINISTRAT.getValue() + "179"),
 
     LIST_COOPERATES_MODEL_FAIL("鍗忓悓妯℃澘鍒楄〃鑾峰彇澶辫触", ModuleEnum.ADMINISTRAT.getValue() + "180"),
     FIND_COOPERATES_MODEL_FAIL("鍗忓悓妯℃澘鑾峰彇澶辫触", ModuleEnum.ADMINISTRAT.getValue() + "181"),
-    
+
     ATTENDANCE_LOCATION_SAVE_FAIL("鑰冨嫟鐐逛繚瀛樺け璐�", ModuleEnum.ADMINISTRAT.getValue() + "182"),
     ATTENDANCE_LOCATION_LIST_FAIL("鑰冨嫟鐐规煡璇㈠け璐�", ModuleEnum.ADMINISTRAT.getValue() + "183"),
 
     WARN_NO_NORMAL_STATUS_RECORD("涓鸿幏鍙栧埌鍚敤鐨勯璀﹁褰�", ModuleEnum.ADMINISTRAT.getValue() + "184"),
-    
+
     COMPANY_PUNCH_TIME_NOT_CONFIG("鍏徃鎵撳崱鏃堕棿鏈厤缃�", ModuleEnum.ADMINISTRAT.getValue()+"185"),
 
     KNOWLEDGE_SHARING_LIST_FAIL("鑾峰彇鐭ヨ瘑鍏变韩鍒楄〃澶辫触", ModuleEnum.ADMINISTRAT.getValue() + "186"),
@@ -271,13 +271,16 @@
 
     CONFERENCE_ROOM_SAVE_FIAL_DUPLICATE_NAME("浼氳瀹や繚瀛樺け璐�,宸插瓨鍦ㄥ悓鍚嶇О浼氳瀹�", ModuleEnum.ADMINISTRAT.getValue() + "193"),
     WORK_ATTENDANCE_REPORT_FAIL("鑰冨嫟鎶ヨ〃鑾峰彇澶辫触锛�", ModuleEnum.ADMINISTRAT.getValue() + "194"),
-    
+
     ANNOUNCEMENT_FAIL("鍏憡璇︽儏", ModuleEnum.ADMINISTRAT.getValue() + "195"),
 	ANNOUNCEMENT_ADD("鍏憡鏂板", ModuleEnum.ADMINISTRAT.getValue() + "196"),
 	ANNOUNCEMENT_UPDATE("鍏憡淇敼", ModuleEnum.ADMINISTRAT.getValue() + "197"),
 	ANNOUNCEMENT_DELECT("鍏憡鍒犻櫎", ModuleEnum.ADMINISTRAT.getValue() + "198"),
-	ANNOUNCEMENT_REMIND("宸茶鎻愰啋澶辫触", ModuleEnum.ADMINISTRAT.getValue() + "199"),
-    
+    ANNOUNCEMENT_REMIND("宸茶鎻愰啋澶辫触", ModuleEnum.ADMINISTRAT.getValue() + "199"),
+
+    WARN_TRANSMIT_USER_IS_NULL("棰勮杞彂浜哄憳涓虹┖", ModuleEnum.ADMINISTRAT.getValue() + "200"),
+    WARN_TRANSMIT_USER_REPEAT("棰勮杞彂浜哄憳閲嶅", ModuleEnum.ADMINISTRAT.getValue() + "201"),
+
     EXPORT_FILE_FAIL("瀵煎嚭鏂囦欢澶辫触", ModuleEnum.ADMINISTRAT.getValue() + "998"),
     IMPORT_FILE_FAIL("瀵煎叆鏂囦欢澶辫触", ModuleEnum.ADMINISTRAT.getValue() + "999"),
 
diff --git a/src/main/java/com/product/administration/controller/ConferenceManagerController.java b/src/main/java/com/product/administration/controller/ConferenceManagerController.java
index c39458f..76fd664 100644
--- a/src/main/java/com/product/administration/controller/ConferenceManagerController.java
+++ b/src/main/java/com/product/administration/controller/ConferenceManagerController.java
@@ -8,6 +8,7 @@
 import com.product.administration.service.ide.IConferenceManagerService;
 import com.product.core.config.CoreConst;
 import com.product.core.controller.support.AbstractBaseController;
+import com.product.core.entity.DataTableEntity;
 import com.product.core.entity.FieldSetEntity;
 import com.product.core.entity.RequestParameterEntity;
 import com.product.core.exception.BaseException;
@@ -21,6 +22,7 @@
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 /**
  * @Author cheng
@@ -419,4 +421,45 @@
         }
     }
 
+    @PostMapping("/get_kb_Data/{version}")
+    @ApiVersion(1)
+   public String getkbData(HttpServletRequest request){
+
+        //鑾峰彇鍙傛暟
+        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) {
+            return this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText());
+        }
+        List kbData = conferenceManagerService.getKbData(fse);
+
+        return OK(kbData);
+
+    }
+
+    @PostMapping("/get_Meeting_Details/{version}")
+    @ApiVersion(1)
+    public String getMeetingDetails(HttpServletRequest request){
+        //鑾峰彇鍙傛暟
+        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) {
+            return this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText());
+        }*/
+        DataTableEntity meetingDetails = conferenceManagerService.getMeetingDetails(fse);
+        return  OK(meetingDetails);
+
+    }
+
+
 }
diff --git a/src/main/java/com/product/administration/controller/EarlyWarningManagerController.java b/src/main/java/com/product/administration/controller/EarlyWarningManagerController.java
index b6ddbfe..4343718 100644
--- a/src/main/java/com/product/administration/controller/EarlyWarningManagerController.java
+++ b/src/main/java/com/product/administration/controller/EarlyWarningManagerController.java
@@ -1,17 +1,7 @@
 package com.product.administration.controller;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import com.product.admin.service.PublicService;
 import com.product.admin.service.idel.IPublicService;
-import com.product.core.spring.context.SpringMVCContextHolder;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
-
 import com.product.administration.config.CmnConst;
 import com.product.administration.config.SystemCode;
 import com.product.administration.service.EarlyWarningManagerService;
@@ -25,7 +15,16 @@
 import com.product.core.entity.FieldSetEntity;
 import com.product.core.entity.RequestParameterEntity;
 import com.product.core.exception.BaseException;
+import com.product.core.spring.context.SpringMVCContextHolder;
 import com.product.module.sys.version.ApiVersion;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 
 /**
@@ -589,4 +588,45 @@
             return this.error(SystemCode.SYSTEM_EARLY_WARNING_UPDATE_FAIL.getValue(), SystemCode.SYSTEM_EARLY_WARNING_UPDATE_FAIL.getText() + e.getMessage());
         }
     }
+
+
+    /**
+     * 鎵归噺淇敼棰勮鏃堕棿
+     *
+     * @param request
+     * @return
+     */
+    @PostMapping("/transmit/{version}")
+    @ApiVersion(1)
+    public String transmit(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());
+            }
+            if (fse.getTableName() == null) {
+                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());
+            }
+            IEarlyWarningManager service = (IEarlyWarningManager) getProxyInstance(earlyWarningManagerService);
+            service.transmit(fse);
+            return OK();
+        } catch (BaseException e) {
+            e.printStackTrace();
+            SpringMVCContextHolder.getSystemLogger().error(e);
+            return this.error(SystemCode.SYSTEM_EARLY_WARNING_UPDATE_FAIL.getValue(), SystemCode.SYSTEM_EARLY_WARNING_UPDATE_FAIL.getText() + e.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            SpringMVCContextHolder.getSystemLogger().error(e);
+            return this.error(SystemCode.SYSTEM_EARLY_WARNING_UPDATE_FAIL.getValue(), SystemCode.SYSTEM_EARLY_WARNING_UPDATE_FAIL.getText() + e.getMessage());
+        }
+    }
 }
diff --git a/src/main/java/com/product/administration/controller/LeaveRequestController.java b/src/main/java/com/product/administration/controller/LeaveRequestController.java
index 9a063de..0636551 100644
--- a/src/main/java/com/product/administration/controller/LeaveRequestController.java
+++ b/src/main/java/com/product/administration/controller/LeaveRequestController.java
@@ -140,6 +140,9 @@
 				return this.error(SystemCode.SYSTEM_TABLE_NODATA.getValue(), SystemCode.SYSTEM_TABLE_NODATA.getText());
 			}
 			String uuid = leaveRequestService.saveLeaveRequest(fse);
+			if (uuid.equals("1")){
+				return error("璇ユ椂闂存宸茬粡鏈夎鍋囪褰曟棤娉曚繚瀛�");
+			}
 			if (!StringUtils.isEmpty(uuid)) {
 				return OK_Add(uuid);
 			}
diff --git a/src/main/java/com/product/administration/controller/WorkAttendanceKanbanController.java b/src/main/java/com/product/administration/controller/WorkAttendanceKanbanController.java
index 99850f8..a3c1a64 100644
--- a/src/main/java/com/product/administration/controller/WorkAttendanceKanbanController.java
+++ b/src/main/java/com/product/administration/controller/WorkAttendanceKanbanController.java
@@ -98,7 +98,7 @@
                 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 = workAttendanceKanbanService.listMonthKanBan(fse);
+            DataTableEntity dt = workAttendanceKanbanService.listMonthKanBanNew(fse);
             return OK_List(dt);
         } catch (BaseException e) {
             e.printStackTrace();
diff --git a/src/main/java/com/product/administration/controller/WorkAttendanceLocationController.java b/src/main/java/com/product/administration/controller/WorkAttendanceLocationController.java
index 5dc203d..9aad411 100644
--- a/src/main/java/com/product/administration/controller/WorkAttendanceLocationController.java
+++ b/src/main/java/com/product/administration/controller/WorkAttendanceLocationController.java
@@ -48,10 +48,6 @@
             if (bean == null || fse == null) {
                 return this.error(SystemCode.SYSTEM_FORM_NODATA.getValue(), SystemCode.SYSTEM_FORM_NODATA.getText());
             }
-            //鍒ゆ柇琛ㄥ悕鏄惁姝e父
-            if (!CmnConst.PRODUCT_OA_PUNCH_SITE.equals(fse.getTableName())) {
-                return this.error(SystemCode.SYSTEM_TABLE_NODATA.getValue(), SystemCode.SYSTEM_TABLE_NODATA.getText());
-            }
             FieldSetEntity fseData=new FieldSetEntity();
             fseData.setTableName(CmnConst.PRODUCT_OA_PUNCH_SITE);
             DataTableEntity dt = workAttendanceLocationService.listAttendanceLocationInfoByUser();
diff --git a/src/main/java/com/product/administration/service/ConferenceManagerService.java b/src/main/java/com/product/administration/service/ConferenceManagerService.java
index 758e224..6c8d85e 100644
--- a/src/main/java/com/product/administration/service/ConferenceManagerService.java
+++ b/src/main/java/com/product/administration/service/ConferenceManagerService.java
@@ -122,10 +122,10 @@
         if (nameVerification!=null) {
 			throw new BaseException(SystemCode.CONFERENCE_ROOM_SAVE_FIAL_DUPLICATE_NAME.getValue(), SystemCode.CONFERENCE_ROOM_SAVE_FIAL_DUPLICATE_NAME.getText());
 		}
-        
+
         BaseUtil.createCreatorAndCreationTime(SpringMVCContextHolder.getCurrentUser(), fse);
         //閲嶅悕楠岃瘉
-        
+
         return baseDao.saveFieldSetEntity(fse);
     }
 
@@ -200,6 +200,117 @@
         return baseDao.delete(fse.getTableName(), fse.getUUID().split(","));
     }
 
+    @Override
+    public List getKbData(FieldSetEntity fse) throws BaseException {
+
+        List<Object>param=new ArrayList<>();
+       String meeting_date= fse.getString("meeting_date");
+        String meeting_resource = fse.getString("meeting_resource");
+        param.add(meeting_date);
+        if(!StringUtils.isEmpty(meeting_resource)){
+            String replace_meeting_resource = meeting_resource.replace(",", "%");
+            meeting_resource="%"+replace_meeting_resource+"%";
+            param.add(meeting_resource);
+        }
+
+        StringBuilder bs=new StringBuilder();
+        bs.append(" SELECT DISTINCT y.*, g.room_name,g.uuid as meet_room_uuid ");
+        bs.append(" FROM product_oa_conference_apply y");
+        bs.append(" left JOIN product_oa_conference_room_config g ");
+        bs.append(" on y.meeting_room=g.uuid ");
+        bs.append(" where DATE_FORMAT(y.start_time,\"%Y-%m-%d\")=?");
+        if(!StringUtils.isEmpty(meeting_resource)){
+            bs.append(" and  y.meeting_resource like ? ");
+        }
+        bs.append(" ORDER BY y.start_time");
+        DataTableEntity dataTableEntity = baseDao.listTable(bs.toString(), param.toArray());
+        List<String> list=new ArrayList();
+        List<HashMap> listDate=new ArrayList<>();
+        //鏋勯�犳墍闇�瑕佺殑鏍煎紡
+        for(int i=0;i<dataTableEntity.getRows();i++){
+            FieldSetEntity fieldSetEntity = dataTableEntity.getData().get(i);
+            if(!list.contains(fieldSetEntity.getValue("room_name").toString())){
+                HashMap<String,Object> hashMap=new HashMap<>();
+                hashMap.put("room_name",fieldSetEntity.getValue("room_name").toString());
+                hashMap.put("uuid",fieldSetEntity.getValue("meet_room_uuid").toString());
+                Object getStartTime = dataTableEntity.getData().get(0).getValue("start_time");
+                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                String time = dateFormat.format(getStartTime);
+                hashMap.put("start_time",time);
+                list.add(fieldSetEntity.getValue("room_name").toString());
+                listDate.add(hashMap);
+
+            }
+            fieldSetEntity.setValue("parent",fieldSetEntity.getValue("meet_room_uuid").toString());
+            HashMap<String,Object> hashMap=new HashMap<>();
+            for (int j = 0; j < fieldSetEntity.getValues().keySet().size(); j++) {
+                if(fieldSetEntity.getValues().keySet().toArray()[j].toString().equals("start_time") || fieldSetEntity.getValues().keySet().toArray()[j].toString().equals("end_time")){
+                    Object meeting_time = fieldSetEntity.getValue(fieldSetEntity.getValues().keySet().toArray()[j].toString());
+                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                    String time = dateFormat.format(meeting_time);
+                    hashMap.put(fieldSetEntity.getValues().keySet().toArray()[j].toString(),time);
+                }else {
+                    hashMap.put(fieldSetEntity.getValues().keySet().toArray()[j].toString(),fieldSetEntity.getValue(fieldSetEntity.getValues().keySet().toArray()[j].toString()));
+                }
+
+            }
+            listDate.add(hashMap);
+
+        }
+        return  listDate;
+    }
+
+    @Override
+    public DataTableEntity getMeetingDetails(FieldSetEntity fse) throws BaseException {
+
+        //String uuid = fse.getString("uuid");
+        String uuid="96f161b4-6360-40ba-8dc1-72bb39d56be4";
+        /*if(!StringUtils.isEmpty(uuid)){*/
+            List<Object>param=new ArrayList<>();
+            param.add(uuid);
+            StringBuilder sb=new StringBuilder();
+            sb.append(" SELECT b.uuid,b.start_time,b.end_time,b.record_man,b.record_master,b.status, ");
+            sb.append(" CONCAT(DATE_FORMAT(b.start_time,\"%H-%i-%S\"),'~',DATE_FORMAT(b.end_time,\"%H-%i-%S\"))  as time_quantum,");
+            sb.append(" DATE_FORMAT(b.start_time,\"%Y-%m-%d\") as meeting_date,");
+            sb.append(" GROUP_CONCAT(b.dict_label   SEPARATOR ',') AS meeting_resouces ");
+            sb.append(" FROM (");
+            sb.append(" SELECT DISTINCT a.uuid,a.start_time,a.end_time,a.record_man,a.record_master,a.status,t.dict_label ");
+            sb.append(" FROM (");
+            sb.append("  SELECT T1.*, ");
+            sb.append(" SUBSTRING_INDEX( SUBSTRING_INDEX( T1.meeting_resource, ',', T2.digit + 1 ), ',',- 1 ) AS type ");
+            sb.append(" FROM product_oa_conference_apply T1 ");
+            sb.append(" JOIN ( SELECT 0 AS digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 ) T2");
+            sb.append(" ON T2.digit < ( length( T1.meeting_resource )- length( REPLACE ( T1.meeting_resource, ',', '' ))+ 1 )");
+            sb.append(" WHERE t1.uuid = ? ");
+            sb.append(" ) a");
+            sb.append(" LEFT JOIN product_sys_dict t ON a.type = t.dict_value ");
+            sb.append(" AND t.dict_name = '浼氳瀹よ祫婧�'");
+            sb.append(" )b ");
+            sb.append(" group by b.uuid,b.start_time,b.end_time,b.record_man,b.record_master,b.status ");
+            DataTableEntity dataTableEntity = baseDao.listTable(sb.toString(), param.toArray());
+
+            for (int i = 0; i < dataTableEntity.getRows(); i++) {
+                Date date = new Date();
+                String uuid1 = dataTableEntity.getData().get(0).getString("uuid");
+                String filter="uuid = '"+uuid1+"'";
+                DataTableEntity product_oa_conference_apply = baseDao.listTable("product_oa_conference_apply", filter, new Object[]{});
+                if(date.before(dataTableEntity.getData().get(0).getDate("start_time"))){
+                    product_oa_conference_apply.getData().get(0).setValue("status","鏈紑濮�");
+                }else if(date.after(dataTableEntity.getData().get(0).getDate("end_time"))){
+                    product_oa_conference_apply.getData().get(0).setValue("status","宸插彇娑�");
+
+                }else {
+                    product_oa_conference_apply.getData().get(0).setValue("status","浼氳涓�");
+                }
+                baseDao.update(product_oa_conference_apply);
+            }
+            return  dataTableEntity;
+       /* }else {
+            return null;
+        }*/
+
+    }
+
 
     /**
      * 浼氳瀹や娇鐢ㄦ儏鍐�
diff --git a/src/main/java/com/product/administration/service/CooperatesService.java b/src/main/java/com/product/administration/service/CooperatesService.java
index fea9564..db00d55 100644
--- a/src/main/java/com/product/administration/service/CooperatesService.java
+++ b/src/main/java/com/product/administration/service/CooperatesService.java
@@ -79,7 +79,13 @@
 		FieldSetEntity fse = baseDao.getFieldSetEntity(CmnConst.PRODUCT_OA_COOPERATES, fs.getString(CmnConst.UUID), true);
 		DataTableEntity copsub = fse.getSubDataTable(CmnConst.PRODUCT_OA_COOPERATE_SUB);
 		baseDao.loadPromptData(copsub);
-
+		for (int i = 0; i <copsub.getRows() ; i++) {
+			String userId = copsub.getString(i, "created_by_save_value");
+			String userAvatar = userService.getUserAvatar(userId);
+			if (!StringUtils.isEmpty(userAvatar)) {
+					copsub.setFieldValue(i, "avatar", userAvatar);
+			}
+		}
 		StringBuilder stringBuilder = new StringBuilder();
 		stringBuilder.append(" select ifnull(concat(tricode,'-',receiver) ,receiver) code,uuid,title,cooperate_uuid,grade,receiver as id,receiver,sender, ");
 		stringBuilder.append(" receiver_name,(select user_name FROM product_sys_users where user_id=receiver) label,sender_name,status, ");
diff --git a/src/main/java/com/product/administration/service/CustomerInfoService.java b/src/main/java/com/product/administration/service/CustomerInfoService.java
index 480c465..638814f 100644
--- a/src/main/java/com/product/administration/service/CustomerInfoService.java
+++ b/src/main/java/com/product/administration/service/CustomerInfoService.java
@@ -8,7 +8,6 @@
 
 import com.product.administration.config.CmnConst;
 import com.product.administration.service.ide.ICustomerInfoService;
-import com.product.common.lang.StringUtils;
 import com.product.core.dao.BaseDao;
 import com.product.core.entity.DataTableEntity;
 import com.product.core.entity.FieldSetEntity;
@@ -49,7 +48,10 @@
 		sbSql.append("	CONCAT(B.linkman, '-', B.mobile) AS customer_contact \n");
 		sbSql.append("FROM product_project_customer A \n");
 		sbSql.append("LEFT JOIN product_project_customer_sub B ON B.customer_uuid = A.uuid \n");
-		sbSql.append(searchFilter);
+		if (!BaseUtil.strIsNull(searchFilter)) {
+			sbSql.append("WHERE ").append(searchFilter);
+		}
+		
 //		if(!StringUtils.isEmpty(dataFilter)) {
 //			if (!StringUtils.isEmpty(searchFilter)) {
 //				dataFilter+=" AND "+ searchFilter;
diff --git a/src/main/java/com/product/administration/service/EarlyWarningManagerService.java b/src/main/java/com/product/administration/service/EarlyWarningManagerService.java
index b3c34e0..ac7b876 100644
--- a/src/main/java/com/product/administration/service/EarlyWarningManagerService.java
+++ b/src/main/java/com/product/administration/service/EarlyWarningManagerService.java
@@ -27,6 +27,7 @@
 import com.product.org.admin.service.StaffManagerService;
 import com.product.quartz.service.impl.SysJobService;
 import com.product.util.BaseUtil;
+import com.product.util.SystemParamReplace;
 import org.apache.commons.codec.binary.Base64;
 import org.quartz.SchedulerException;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -304,13 +305,15 @@
         Map<String, String> fieldReference = new HashMap<>();    //缁勫悎鐩稿叧瀛楁鐨勫弬鐓�,tableName1fieldName-->referenceName
         StringBuilder concatField = new StringBuilder();        //缁勫悎鐩稿叧瀛楁,tableName1.fieldName tableName1fieldName
         earlyWarningServer.parseWarningContent(warnCondition, concatField, tableNameAndAlias, fieldAndAlias, fieldReference);
+        // 鏇挎崲绯荤粺鍙傛暟
+        warnCondition = SystemParamReplace.systemParamsReplace(warnCondition);
 
         //鐢熸垚涓诲瓙琛ㄥ叧鑱擲QL
         String relationSQL = earlyWarningServer.createTableRelation(tableNameAndAlias, mainTableName);
 
         StringBuilder serviceSQL = new StringBuilder();
         serviceSQL.append(" SELECT ");
-        serviceSQL.append(concatField.subSequence(1, concatField.length()));
+        serviceSQL.append(StringUtils.isEmpty(concatField) ? "*" : concatField.subSequence(1, concatField.length()));
         serviceSQL.append(" FROM ");
         serviceSQL.append(relationSQL);
         serviceSQL.append(" WHERE ");
@@ -492,4 +495,39 @@
         }
         return dte;
     }
+
+    /**
+     * 杞彂
+     * @param fse
+     */
+    @Override
+    public void transmit(FieldSetEntity fse) {
+        String uuid = fse.getUUID();
+        String messageAccepter = fse.getString("user");
+        FieldSetEntity warnMsgFse = baseDao.getFieldSetEntity(CmnConst.PRODUCT_SYS_EARLY_WARNING_INFO, uuid, false);
+        String preReceiver = warnMsgFse.getString(CmnConst.RECEIVER);
+        Set<String> preReceiverSet = Sets.newHashSet(preReceiver.split(","));
+        if (StringUtils.isEmpty(messageAccepter)) {
+            throw new BaseException(SystemCode.WARN_TRANSMIT_USER_IS_NULL);
+        }
+        Set<String> transmitUserSet = Sets.newHashSet(messageAccepter.split(","));
+        transmitUserSet.forEach(transmitUser -> {
+            if (preReceiverSet.contains(transmitUser)) {
+                FieldSetEntity transmitUserFse = baseDao.getFieldSetByFilter(CmnConst.PRODUCT_SYS_USERS, "user_id=?", new Object[]{transmitUser}, false);
+                throw new BaseException(SystemCode.WARN_TRANSMIT_USER_REPEAT.getValue(), String.format("%s:%s", SystemCode.WARN_TRANSMIT_USER_REPEAT.getText(), transmitUserFse.getString(CmnConst.USER_NAME)));
+            }
+        });
+        // 鏇存柊棰勮淇℃伅琛�
+        warnMsgFse.setValue(CmnConst.RECEIVER, preReceiver + "," + messageAccepter);
+        baseDao.saveFieldSetEntity(warnMsgFse);
+
+        // 鍙戦�佹秷鎭粰杞彂浜�
+        SystemUser curUser = SpringMVCContextHolder.getCurrentUser();
+        FieldSetEntity msgFse = baseDao.getFieldSetByFilter(CmnConst.PRODUCT_SYS_MESSAGE, "source_table=? and source_uuid=?", new Object[]{CmnConst.PRODUCT_SYS_EARLY_WARNING_INFO, uuid}, false);
+        String title = String.format("%s鍚戞偍杞彂浜嗛璀︽秷鎭��%s銆�", curUser.getUser_name(), msgFse.getString(CmnConst.TITLE));
+        String content = msgFse.getString("content");
+        WebsocketMesssageServiceThread.getInstance().appendMessage(messageAccepter, content, title, curUser.getUser_id(),
+                "31", CmnConst.BUTTON_URL_WARN_MESSAGE_INFO + "?uuid=" + fse.getUUID(),
+                CmnConst.PRODUCT_SYS_EARLY_WARNING_INFO, fse.getUUID(), curUser.getUser_id(), 0, 0, null);
+    }
 }
diff --git a/src/main/java/com/product/administration/service/EarlyWarningServer.java b/src/main/java/com/product/administration/service/EarlyWarningServer.java
index 8061dfe..d640dd8 100644
--- a/src/main/java/com/product/administration/service/EarlyWarningServer.java
+++ b/src/main/java/com/product/administration/service/EarlyWarningServer.java
@@ -3,10 +3,14 @@
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.cron.CronUtil;
 import com.google.common.collect.Sets;
 import com.product.administration.config.SystemCode;
 import com.product.common.collect.SetUtils;
+import com.product.quartz.util.CronUtils;
 import com.product.util.SystemParamReplace;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -30,10 +34,10 @@
 
 	@Autowired
 	BaseDao baseDao;
-	
+
 	@Autowired
 	FlowService flowService;
-	
+
 
 	public BaseDao getBaseDao() {
 		return baseDao;
@@ -60,6 +64,7 @@
 
 	/**
 	 * 棰勮-缁欏畾uuid鍗曚釜棰勮锛岄�氬父涓哄畾鏃朵换鍔¤Е鍙�
+	 *
 	 * @param uuid
 	 */
 	public void triggerSingleWarningTask(String uuid) {
@@ -76,6 +81,7 @@
 
 	/**
 	 * 鍗曚釜棰勮
+	 *
 	 * @param fseWarningConfig
 	 */
 	private void singleWarningTask(FieldSetEntity fseWarningConfig) {
@@ -95,6 +101,22 @@
 
 		String flowCode = fseWarningConfig.getString(CmnConst.FLOW_CODE);                        //娴佺▼type_code
 		String flowParam = fseWarningConfig.getString(CmnConst.FLOW_PARAM);                        //娴佺▼鍙傛暟杞崲
+
+		//鑾峰彇鍙戦�佹秷鎭鐜�
+		Double cronExpression = fseWarningConfig.getDouble("reminder_frequency");
+
+		//鍙戦�佹秷鎭殑棰戠巼 1.23 灏忔暟鐐瑰墠闈唬琛ㄥぉ 灏忔暟鐐瑰悗闈唬琛ㄥ皬鏃�
+		double seconds = 0;
+		if (cronExpression != null && cronExpression > 0) {
+
+			//灏嗗彂閫佹秷鎭鐜囪浆鎹负灏忔椂
+			double hours = cronExpression * 24;
+			//灏嗗彂閫佹秷鎭鐜囪浆鎹负鍒嗛挓
+			double minutes = hours * 60;
+			//灏嗗彂閫佹秷鎭鐜囪浆鎹负绉�
+			seconds = minutes * 60;
+		}
+
 
 		Map<String, String> tableNameAndAlias = new HashMap<>();    //鐩稿叧琛ㄥ悕-->琛ㄥ埆鍚�,tableName-->tableName1
 		Map<String, String> fieldAndAlias = new HashMap<>();        //鐩稿叧瀛楁-->瀛楁鍒悕,tableName.fieldName-->tableName1fieldName
@@ -140,13 +162,53 @@
 		//鏌ヨ绗﹀悎棰勮鐨勬暟鎹�
 		DataTableEntity dtService = baseDao.listTable(serviceSQL.toString(), new Object[]{});
 		if (!BaseUtil.dataTableIsEmpty(dtService)) {
+			List<String> collect = dtService.getData().stream().map(item -> item.getString(mainTableAlias + "uuid")).collect(Collectors.toList());
+			//棰勮uuid
+			String warnUUID = fseWarningConfig.getUUID();
+			//灏嗛璀uid鏀惧埌collect 鐨勭涓�涓�
+
+			collect.add(0, warnUUID);
+			StringBuilder sql = new StringBuilder();
+			//鏌ヨ鏄惁宸茬粡瀛樺湪棰勮濡傛湁鐩稿悓data_uuid鐨勬暟鎹煡璇㈠嚭鏈�杩戠殑涓�鏉℃牴鎹璀︽椂闂村瓧娈� early_warning_datetime
+//			SELECT e.*
+//			FROM product_sys_early_warning_info e
+//			JOIN (
+//					SELECT data_uuid, MAX(early_warning_datetime) AS latest_datetime
+//					FROM product_sys_early_warning_info
+//					GROUP BY data_uuid
+//			) AS latest
+//			ON e.data_uuid = latest.data_uuid AND e.early_warning_datetime = latest.latest_datetime;
+			sql.append("SELECT e.* FROM product_sys_early_warning_info e JOIN (");
+			sql.append("SELECT data_uuid, MAX(early_warning_datetime) AS latest_datetime FROM product_sys_early_warning_info ");
+			sql.append(" where early_warning_uuid=? and (").append(BaseUtil.buildQuestionMarkFilter("data_uuid", collect.size(), true)).append(") ");
+			sql.append("GROUP BY data_uuid) AS latest ON e.data_uuid = latest.data_uuid AND e.early_warning_datetime = latest.latest_datetime");
+			DataTableEntity dt = baseDao.listTable(sql.toString(), collect.toArray());
+
+			Map<String, FieldSetEntity> ff = new HashMap<>();
+			if (!DataTableEntity.isEmpty(dt)) {
+				for (int j = 0; j < dt.getRows(); j++) {
+					FieldSetEntity fse = dt.getFieldSetEntity(j);
+					ff.put(fse.getString("data_uuid"), fse);
+				}
+			}
+
+			//浠ata_uuid 杩涜鍒嗙粍
 			for (int j = 0; j < dtService.getRows(); j++) {
 				FieldSetEntity fseService = dtService.getFieldSetEntity(j);
 
 				//涓氬姟uuid
 				String serviceId = fseService.getString(mainTableAlias + "uuid");
-				//棰勮uuid
-				String warnUUID = fseWarningConfig.getUUID();
+
+				if (ff.containsKey(serviceId) && StringUtils.isEmpty(cronExpression)) {
+					//濡傛灉宸茬粡瀛樺湪棰勮淇℃伅 鏍规嵁cron琛ㄨ揪寮忓垽鏂槸鍚﹂渶瑕佸啀娆¢璀�
+					Date preTime = ff.get(serviceId).getDate("early_warning_datetime");
+					if (preTime != null) {
+						long time = new Date().getTime() - preTime.getTime();
+						if (time < seconds * 1000) {
+							continue;
+						}
+					}
+				}
 
 				//淇℃伅鎺ユ敹浜�
 				Set<String> receiverSet = Sets.newTreeSet();
@@ -241,20 +303,21 @@
 			}
 		}
 	}
-	
-	
+
+
 	/**
-	 * 	鏍规嵁鎻愰啋鍐呭涓殑琛ㄥ睘鎬э紝杩涜鎷兼帴鎴愭爣鍑嗘牸寮�
-	 * @param content				棰勮鍐呭
-	 * @param concatField			缁勫悎瀛楁
-	 * @param tableNameAndAlias		琛ㄥ悕鍙婂埆鍚�
-	 * @param fieldAndAlias			瀛楁鍚嶅強鍒悕
-	 * @param fieldReference		瀛楁鍙婂弬鐓�
+	 * 鏍规嵁鎻愰啋鍐呭涓殑琛ㄥ睘鎬э紝杩涜鎷兼帴鎴愭爣鍑嗘牸寮�
+	 *
+	 * @param content           棰勮鍐呭
+	 * @param concatField       缁勫悎瀛楁
+	 * @param tableNameAndAlias 琛ㄥ悕鍙婂埆鍚�
+	 * @param fieldAndAlias     瀛楁鍚嶅強鍒悕
+	 * @param fieldReference    瀛楁鍙婂弬鐓�
 	 * @return
 	 */
-	public Object[] parseWarningContent(String warnContent, StringBuilder concatField, Map<String, String> tableNameAndAlias, Map<String, String>fieldAndAlias, Map<String, String> fieldReference) {
+	public Object[] parseWarningContent(String warnContent, StringBuilder concatField, Map<String, String> tableNameAndAlias, Map<String, String> fieldAndAlias, Map<String, String> fieldReference) {
 		int s = 0;
-		String tableAndField=null;
+		String tableAndField = null;
 		while (s >= 0) {
 			int c = warnContent.indexOf("{#", s);
 			if (c == -1) {
@@ -263,155 +326,158 @@
 			}
 			int m = warnContent.indexOf("#}", c);
 			s = c + 2;
-			
+
 			//琛ㄥ悕.瀛楁鍚�
-			tableAndField=warnContent.substring(s, m);
-			
+			tableAndField = warnContent.substring(s, m);
+
 			//鑾峰彇琛ㄥ悕
-			String relationTable=tableAndField.split("\\.")[0];
+			String relationTable = tableAndField.split("\\.")[0];
 			//琛ㄥ埆鍚�
-			String relationTableAlias=relationTable+"1";
+			String relationTableAlias = relationTable + "1";
 			//瀛楁鍚�
-			String fieldName=tableAndField.split("\\.")[1];
-			
-			if (tableNameAndAlias.get(relationTable)==null) {
+			String fieldName = tableAndField.split("\\.")[1];
+
+			if (tableNameAndAlias.get(relationTable) == null) {
 				concatField.append(",");
 				concatField.append(relationTableAlias);
 				concatField.append(".uuid ");
 				concatField.append(relationTableAlias);
 				concatField.append("uuid");
-				fieldAndAlias.put(relationTable+".uuid", relationTable+"1uuid");
+				fieldAndAlias.put(relationTable + ".uuid", relationTable + "1uuid");
 				tableNameAndAlias.put(relationTable, relationTableAlias);
 			}
-			
+
 			//鐢熸垚瀛楁鍒悕-->琛ㄥ悕1瀛楁鍚�
-			String tableFieldAlias=tableAndField.replace(".", "1");
-			
-			if (fieldAndAlias.get(tableAndField)==null) {
-				fieldAndAlias.put(tableAndField,tableFieldAlias);
+			String tableFieldAlias = tableAndField.replace(".", "1");
+
+			if (fieldAndAlias.get(tableAndField) == null) {
+				fieldAndAlias.put(tableAndField, tableFieldAlias);
 				concatField.append(",");
-				concatField.append(relationTableAlias+"."+fieldName);
+				concatField.append(relationTableAlias + "." + fieldName);
 				concatField.append(" ");
 				concatField.append(tableFieldAlias);
 				fieldReference.put(tableFieldAlias, getReferenceByField(tableAndField));
 			}
 		}
-		return new Object[]{concatField,tableNameAndAlias,fieldAndAlias,fieldReference};
+		return new Object[]{concatField, tableNameAndAlias, fieldAndAlias, fieldReference};
 	}
-	
+
 	/**
-	 * 	鏍规嵁鎻愰啋鍐呭涓殑琛ㄥ睘鎬э紝杩涜鎷兼帴鎴愭爣鍑嗘牸寮�
-	 * @param flowParam				棰勮鍐呭
-	 * @param concatField			缁勫悎瀛楁
-	 * @param tableNameAndAlias		琛ㄥ悕鍙婂埆鍚�
-	 * @param fieldAndAlias			瀛楁鍚嶅強鍒悕
-	 * @param fieldReference		瀛楁鍙婂弬鐓�
+	 * 鏍规嵁鎻愰啋鍐呭涓殑琛ㄥ睘鎬э紝杩涜鎷兼帴鎴愭爣鍑嗘牸寮�
+	 *
+	 * @param flowParam         棰勮鍐呭
+	 * @param concatField       缁勫悎瀛楁
+	 * @param tableNameAndAlias 琛ㄥ悕鍙婂埆鍚�
+	 * @param fieldAndAlias     瀛楁鍚嶅強鍒悕
+	 * @param fieldReference    瀛楁鍙婂弬鐓�
 	 * @return
 	 */
-	public Object[] parseFlowParam(String flowParam, StringBuilder concatField, Map<String, String> tableNameAndAlias, Map<String, String>fieldAndAlias, Map<String, String> fieldReference) {
-		
-		String[] warnAndFlows=flowParam.split(",");
+	public Object[] parseFlowParam(String flowParam, StringBuilder concatField, Map<String, String> tableNameAndAlias, Map<String, String> fieldAndAlias, Map<String, String> fieldReference) {
+
+		String[] warnAndFlows = flowParam.split(",");
 		for (int i = 0; i < warnAndFlows.length; i++) {
-			String[] warnAndFlow=warnAndFlows[i].split("=");
-			String tableAndField=warnAndFlow[0];
-			
+			String[] warnAndFlow = warnAndFlows[i].split("=");
+			String tableAndField = warnAndFlow[0];
+
 			//鑾峰彇琛ㄥ悕
-			String relationTable=tableAndField.split("\\.")[0];
+			String relationTable = tableAndField.split("\\.")[0];
 			//琛ㄥ埆鍚�
-			String relationTableAlias=relationTable+"1";
+			String relationTableAlias = relationTable + "1";
 			//瀛楁鍚�
-			String fieldName=tableAndField.split("\\.")[1];
-			
-			if (tableNameAndAlias.get(relationTable)==null) {
+			String fieldName = tableAndField.split("\\.")[1];
+
+			if (tableNameAndAlias.get(relationTable) == null) {
 				concatField.append(",");
 				concatField.append(relationTableAlias);
 				concatField.append(".uuid ");
 				concatField.append(relationTableAlias);
 				concatField.append("uuid");
-				fieldAndAlias.put(relationTable+".uuid", relationTable+"1uuid");
+				fieldAndAlias.put(relationTable + ".uuid", relationTable + "1uuid");
 				tableNameAndAlias.put(relationTable, relationTableAlias);
 			}
-			
+
 			//鐢熸垚瀛楁鍒悕-->琛ㄥ悕1瀛楁鍚�
-			String tableFieldAlias=tableAndField.replace(".", "1");
-			
-			if (fieldAndAlias.get(tableAndField)==null) {
-				fieldAndAlias.put(tableAndField,tableFieldAlias);
+			String tableFieldAlias = tableAndField.replace(".", "1");
+
+			if (fieldAndAlias.get(tableAndField) == null) {
+				fieldAndAlias.put(tableAndField, tableFieldAlias);
 				concatField.append(",");
-				concatField.append(relationTableAlias+"."+fieldName);
+				concatField.append(relationTableAlias + "." + fieldName);
 				concatField.append(" ");
 				concatField.append(tableFieldAlias);
 				fieldReference.put(tableFieldAlias, getReferenceByField(tableAndField));
 			}
 		}
-		return new Object[]{concatField,tableNameAndAlias,fieldAndAlias,fieldReference};
+		return new Object[]{concatField, tableNameAndAlias, fieldAndAlias, fieldReference};
 	}
-	
+
 	/**
-	 * 	鏍规嵁琛ㄥ悕鍜屽瓧娈电殑鑾峰彇瀵瑰簲鍙傜収
-	 * @param tableAndField	琛ㄥ埆鍚�.瀛楁鍚�
+	 * 鏍规嵁琛ㄥ悕鍜屽瓧娈电殑鑾峰彇瀵瑰簲鍙傜収
+	 *
+	 * @param tableAndField 琛ㄥ埆鍚�.瀛楁鍚�
 	 * @return 鍙傜収鍚�
 	 */
 	public String getReferenceByField(String tableAndField) {
-		String [] tableField=tableAndField.replace("1.", ".").split("\\.");
-		String tableName=tableField[0];
-		String fieldName=tableField[1];
-		FieldSetEntity fseTableInfo=baseDao.getFieldSetEntityByFilter("product_sys_datamodel_table", "table_name=?",new Object[] {tableName}, false);
-		FieldSetEntity fseFieldInfo=baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_DATAMODEL_FIELD, "table_uuid=? and field_name=?", new Object[] {fseTableInfo.getUUID(),fieldName}, false);
-		if (fseFieldInfo==null) {
+		String[] tableField = tableAndField.replace("1.", ".").split("\\.");
+		String tableName = tableField[0];
+		String fieldName = tableField[1];
+		FieldSetEntity fseTableInfo = baseDao.getFieldSetEntityByFilter("product_sys_datamodel_table", "table_name=?", new Object[]{tableName}, false);
+		FieldSetEntity fseFieldInfo = baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_DATAMODEL_FIELD, "table_uuid=? and field_name=?", new Object[]{fseTableInfo.getUUID(), fieldName}, false);
+		if (fseFieldInfo == null) {
 			throw new BaseException("", "", this.getClass(), "");
 		}
-		String fieldType=fseFieldInfo.getString(CmnConst.FIELD_TYPE);
+		String fieldType = fseFieldInfo.getString(CmnConst.FIELD_TYPE);
 		if (CmnConst.USERID.equals(fieldType)) {
 			return CmnConst.USERID;
-		}else {
+		} else {
 			return fseFieldInfo.getString(CmnConst.FIELD_REFERENCE);
 		}
 	}
-	
+
 	/**
-	 * 	鐢熸垚鍏宠仈SQL
+	 * 鐢熸垚鍏宠仈SQL
+	 *
 	 * @param tableNameAndAlias
-	 * @param subTable	褰撳墠琛�
+	 * @param subTable          褰撳墠琛�
 	 * @return
 	 */
-	public String createTableRelation(Map<String,String>tableNameAndAlias, String subTable) {
+	public String createTableRelation(Map<String, String> tableNameAndAlias, String subTable) {
 		//鍏宠仈SQL
-		StringBuilder relationSql=new StringBuilder();
-		relationSql.append(subTable+" ");
-		relationSql.append(subTable+"1");
-		
+		StringBuilder relationSql = new StringBuilder();
+		relationSql.append(subTable + " ");
+		relationSql.append(subTable + "1");
+
 		//鍒ゆ柇鏄惁浣跨敤瀛愯〃
-		if (tableNameAndAlias!=null) {
+		if (tableNameAndAlias != null) {
 			//鏍规嵁鍏宠仈瀛愯〃鐢熸垚鍏宠仈SQL
 			for (String mainTableName : tableNameAndAlias.keySet()) {
 				//鑾峰彇澶栭敭瀛楁
-				String foreignKey=baseDao.getSubTableRelation(mainTableName, subTable);
+				String foreignKey = baseDao.getSubTableRelation(mainTableName, subTable);
 				if (!StringUtils.isEmpty(foreignKey)) {
 					relationSql.append(" LEFT JOIN ");
-					relationSql.append(mainTableName+" ");
-					relationSql.append(mainTableName+"1");
+					relationSql.append(mainTableName + " ");
+					relationSql.append(mainTableName + "1");
 					relationSql.append(" ON ");
-					relationSql.append(mainTableName+"1.uuid=");
-					relationSql.append(subTable+"1."+foreignKey);
+					relationSql.append(mainTableName + "1.uuid=");
+					relationSql.append(subTable + "1." + foreignKey);
 				}
 			}
 		}
 		return relationSql.toString();
 	}
-	
-	
-	public String getContentByTableSource(FieldSetEntity fse,String content, Map<String, String> concatFieldReference) {
-		if (content.indexOf("{#")==-1) {
+
+
+	public String getContentByTableSource(FieldSetEntity fse, String content, Map<String, String> concatFieldReference) {
+		if (content.indexOf("{#") == -1) {
 			return content;
 		}
-		content=content.replace(".", "1");
+		content = content.replace(".", "1");
 		return replaceParamText(content, fse, concatFieldReference);
 	}
-	
+
 	/**
 	 * 鏇挎崲鏂囨湰鍙傛暟
-	 * 
+	 *
 	 * @param paramText 鍘熸枃鏈�
 	 * @param fseData   涓氬姟鏁版嵁
 	 * @return 鏂版枃鏈�
@@ -428,8 +494,8 @@
 		Matcher m = p3.matcher(str);
 		while (m.find()) {
 			String group = m.group(2);
-			String replaceValue= SystemParamReplace.replaceSystemParameter(group);
-			if(StringUtils.isEmpty(replaceValue)) {
+			String replaceValue = SystemParamReplace.replaceSystemParameter(group);
+			if (StringUtils.isEmpty(replaceValue)) {
 				continue;
 			}
 			m.appendReplacement(sb1, replaceValue);
@@ -445,8 +511,8 @@
 				if (null != value) {
 					if (StringUtils.isEmpty(concatFieldReference.get(group))) {
 						m.appendReplacement(sb2, value);
-					}else {
-						m.appendReplacement(sb2, parseReference(concatFieldReference.get(group),value,fseData));
+					} else {
+						m.appendReplacement(sb2, parseReference(concatFieldReference.get(group), value, fseData));
 					}
 				}
 			}
@@ -454,136 +520,140 @@
 		}
 		return sb2.toString();
 	}
-	
+
 	/**
-	 * 	鍙傜収鏇挎崲
+	 * 鍙傜収鏇挎崲
+	 *
 	 * @param referenceName
 	 * @param originValue
 	 * @param fseData
 	 * @return
 	 */
 	public String parseReference(String referenceName, String originValue, FieldSetEntity fseData) {
-		if (CmnConst.USERID.equals(referenceName)) {	//浜哄憳
-			FieldSetEntity fseUser=baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_USERS, "user_id=?", new Object[] {originValue}, false);
-			if (fseUser==null) {
+		if (CmnConst.USERID.equals(referenceName)) {    //浜哄憳
+			FieldSetEntity fseUser = baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_USERS, "user_id=?", new Object[]{originValue}, false);
+			if (fseUser == null) {
 				throw new BaseException("", "", this.getClass(), "");
-			}else {
+			} else {
 				return fseUser.getString(CmnConst.USER_NAME);
 			}
-		}else if (referenceName.indexOf("銆�")>-1) {	//鏁版嵁瀛楀吀
+		} else if (referenceName.indexOf("銆�") > -1) {    //鏁版嵁瀛楀吀
 			referenceName.replace("銆�", "").replace("銆�", "");
-			FieldSetEntity fseDict=baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_DICT, "dict_name=? AND dict_value=?", new Object[] {referenceName, originValue}, false);
-			if (fseDict==null) {
+			FieldSetEntity fseDict = baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_DICT, "dict_name=? AND dict_value=?", new Object[]{referenceName, originValue}, false);
+			if (fseDict == null) {
 				throw new BaseException("", "", this.getClass(), "");
-			}else {
+			} else {
 				return fseDict.getString(CmnConst.DICT_LABEL);
 			}
-		}else {	//楂樼骇鍙傜収
-			FieldSetEntity fsePrompt=baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_PROMPT, "prompt_name=?", new Object[] {referenceName}, false);
-			if (fsePrompt==null) {
-				throw new BaseException("", "",this.getClass(),"");
-			}else {
-				String valueField=fsePrompt.getString("value_field");
-				String viewField=fsePrompt.getString("view_fields");
-				String sourceTable=fsePrompt.getString("source_table");
-				FieldSetEntity fsePromptData=baseDao.getFieldSetEntityByFilter(sourceTable, valueField+"=?", new Object[] {originValue}, false);
-				if (fsePromptData!=null) {
+		} else {    //楂樼骇鍙傜収
+			FieldSetEntity fsePrompt = baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_PROMPT, "prompt_name=?", new Object[]{referenceName}, false);
+			if (fsePrompt == null) {
+				throw new BaseException("", "", this.getClass(), "");
+			} else {
+				String valueField = fsePrompt.getString("value_field");
+				String viewField = fsePrompt.getString("view_fields");
+				String sourceTable = fsePrompt.getString("source_table");
+				FieldSetEntity fsePromptData = baseDao.getFieldSetEntityByFilter(sourceTable, valueField + "=?", new Object[]{originValue}, false);
+				if (fsePromptData != null) {
 					return fsePromptData.getString(viewField);
 				}
 			}
 		}
-		
+
 		return originValue;
 	}
-	
+
 	/**
-	 * 	瑙f瀽鏉′欢琛ㄨ揪寮�
+	 * 瑙f瀽鏉′欢琛ㄨ揪寮�
+	 *
 	 * @param warnCOnditon
 	 * @param tableNameAndAlias
 	 * @return
 	 */
 	public String parseWarnCondition(String warnConditon, Map<String, String> tableNameAndAlias) {
 		for (String tableName : tableNameAndAlias.keySet()) {
-			if (warnConditon.indexOf(tableName)>-1) {
-				warnConditon=warnConditon.replace(tableName, tableNameAndAlias.get(tableName));
+			if (warnConditon.indexOf(tableName) > -1) {
+				warnConditon = warnConditon.replace(tableName, tableNameAndAlias.get(tableName));
 			}
 		}
-		warnConditon=warnConditon.replace("{#", "").replace("#}", "");
-		warnConditon=warnConditon.replace("{%", "").replace("%}", "");
+		warnConditon = warnConditon.replace("{#", "").replace("#}", "");
+		warnConditon = warnConditon.replace("{%", "").replace("%}", "");
 		return warnConditon;
 	}
-	
+
 	/**
-	 * 	棰勮鍙戦偖浠惰В鏋�
+	 * 棰勮鍙戦偖浠惰В鏋�
+	 *
 	 * @param content
 	 * @param receiver
 	 */
-	public void parseMail(String content,String receiver) {
-		String[] user_ids=receiver.split(",");
+	public void parseMail(String content, String receiver) {
+		String[] user_ids = receiver.split(",");
 		for (int i = 0; i < user_ids.length; i++) {
-			FieldSetEntity fseStaff=baseDao.getFieldSetEntityByFilter("product_sys_staffs", "user_id=?", new Object[] {user_ids[i]}, false);
-			if (fseStaff==null) {
+			FieldSetEntity fseStaff = baseDao.getFieldSetEntityByFilter("product_sys_staffs", "user_id=?", new Object[]{user_ids[i]}, false);
+			if (fseStaff == null) {
 				continue;
 			}
-			String org_level_uuid=fseStaff.getString(CmnConst.ORG_LEVEL_UUID);
-			String userEmail=fseStaff.getString("staff_email");
-			FieldSetEntity fseCompanySmtp=baseDao.getFieldSetEntityByFilter("product_sys_company_email_smtp", "org_level_uuid=?", new Object[] {org_level_uuid}, false);
-			
-			FieldSetEntity fseMailInfo=new FieldSetEntity();
+			String org_level_uuid = fseStaff.getString(CmnConst.ORG_LEVEL_UUID);
+			String userEmail = fseStaff.getString("staff_email");
+			FieldSetEntity fseCompanySmtp = baseDao.getFieldSetEntityByFilter("product_sys_company_email_smtp", "org_level_uuid=?", new Object[]{org_level_uuid}, false);
+
+			FieldSetEntity fseMailInfo = new FieldSetEntity();
 			fseMailInfo.setTableName(CmnConst.PRODUCT_SYS_MAIL_SEND);
 			fseMailInfo.setValue(CmnConst.ORG_LEVEL_UUID, org_level_uuid);
 			fseMailInfo.setValue(CmnConst.ADDRESSEE, userEmail);
 			fseMailInfo.setValue(CmnConst.MAIL_TITLE, "棰勮淇℃伅");
 			fseMailInfo.setValue(CmnConst.MAIL_CONTENT, content);
-			if (fseCompanySmtp!=null) {
+			if (fseCompanySmtp != null) {
 				fseMailInfo.setValue(CmnConst.SMTP_SERVER_HOST, fseCompanySmtp.getString(CmnConst.SMTP_SERVER_HOST));
 				fseMailInfo.setValue(CmnConst.SMTP_SERVER_PORT, fseCompanySmtp.getString(CmnConst.SMTP_SERVER_PORT));
 				fseMailInfo.setValue(CmnConst.SMTP_USERNAME, fseCompanySmtp.getString(CmnConst.SMTP_USERNAME));
 				fseMailInfo.setValue(CmnConst.SMTP_LICENSE_CODE, fseCompanySmtp.getString(CmnConst.SMTP_LICENSE_CODE));
-			}else {
-				fseMailInfo.setValue(CmnConst.SMTP_SERVER_HOST, Global.getSystemConfig("spring.mail.host",""));
-				fseMailInfo.setValue(CmnConst.SMTP_SERVER_PORT, Global.getSystemConfig("spring.mail.port",""));
-				fseMailInfo.setValue(CmnConst.SMTP_USERNAME, Global.getSystemConfig("spring.mail.username",""));
-				fseMailInfo.setValue(CmnConst.SMTP_LICENSE_CODE, Global.getSystemConfig("spring.mail.password",""));
+			} else {
+				fseMailInfo.setValue(CmnConst.SMTP_SERVER_HOST, Global.getSystemConfig("spring.mail.host", ""));
+				fseMailInfo.setValue(CmnConst.SMTP_SERVER_PORT, Global.getSystemConfig("spring.mail.port", ""));
+				fseMailInfo.setValue(CmnConst.SMTP_USERNAME, Global.getSystemConfig("spring.mail.username", ""));
+				fseMailInfo.setValue(CmnConst.SMTP_LICENSE_CODE, Global.getSystemConfig("spring.mail.password", ""));
 			}
 			fseMailInfo.setValue("send_mode", "smtp");
-			SmtpSendMail.sendMail(fseMailInfo,null);
+			SmtpSendMail.sendMail(fseMailInfo, null);
 
 			//鍒涘缓浜哄拰鍒涘缓鏃堕棿
-			if (SpringMVCContextHolder.getCurrentUser()!=null) {
+			if (SpringMVCContextHolder.getCurrentUser() != null) {
 				fseMailInfo.setValue(CmnConst.CREATED_BY, SpringMVCContextHolder.getCurrentUser().getUser_id());
 			}
-			fseMailInfo.setValue(CmnConst.CREATED_UTC_DATETIME,new Date());
+			fseMailInfo.setValue(CmnConst.CREATED_UTC_DATETIME, new Date());
 			baseDao.add(fseMailInfo);
 		}
 	}
-	
+
 	/**
-	 * 	棰勮鍙戠煭淇¤В鏋�
+	 * 棰勮鍙戠煭淇¤В鏋�
+	 *
 	 * @param content
 	 * @param receiver
 	 */
-	public void parseSMS(String content,String receiver) {
-		String[] user_ids=receiver.split(",");
+	public void parseSMS(String content, String receiver) {
+		String[] user_ids = receiver.split(",");
 		for (int i = 0; i < user_ids.length; i++) {
-			FieldSetEntity fseuser=baseDao.getFieldSetEntityByFilter("product_sys_users", "user_id=?", new Object[] {user_ids[i]}, false);
-			FieldSetEntity fseStaff=baseDao.getFieldSetEntityByFilter("product_sys_staffs", "user_id=?", new Object[] {user_ids[i]}, false);
-			if (fseStaff==null) {
+			FieldSetEntity fseuser = baseDao.getFieldSetEntityByFilter("product_sys_users", "user_id=?", new Object[]{user_ids[i]}, false);
+			FieldSetEntity fseStaff = baseDao.getFieldSetEntityByFilter("product_sys_staffs", "user_id=?", new Object[]{user_ids[i]}, false);
+			if (fseStaff == null) {
 				continue;
 			}
-			String org_level_uuid=fseStaff.getString(CmnConst.ORG_LEVEL_UUID);
-			String userPhone=fseuser.getString("user_phone_number");
-			
-			FieldSetEntity fseMessageInfo=new FieldSetEntity();
+			String org_level_uuid = fseStaff.getString(CmnConst.ORG_LEVEL_UUID);
+			String userPhone = fseuser.getString("user_phone_number");
+
+			FieldSetEntity fseMessageInfo = new FieldSetEntity();
 			fseMessageInfo.setTableName(CmnConst.PRODUCT_SYS_MESSAGE_SEND);
 			fseMessageInfo.setValue(CmnConst.ORG_LEVEL_UUID, org_level_uuid);
 			fseMessageInfo.setValue("send_user", "2");
-			fseMessageInfo.setValue("receive_user",userPhone);
+			fseMessageInfo.setValue("receive_user", userPhone);
 			fseMessageInfo.setValue("content", content);
-			
-			
-			FieldSetEntity fseCompanyMessage=baseDao.getFieldSetEntityByFilter("product_sys_company_email_smtp", "org_level_uuid=?", new Object[] {org_level_uuid}, false);
-			if (fseCompanyMessage!=null) {
+
+
+			FieldSetEntity fseCompanyMessage = baseDao.getFieldSetEntityByFilter("product_sys_company_email_smtp", "org_level_uuid=?", new Object[]{org_level_uuid}, false);
+			if (fseCompanyMessage != null) {
 				fseMessageInfo.setValue(CmnConst.USER_ACCOUNT, fseCompanyMessage.getString(CmnConst.USER_ACCOUNT));
 				fseMessageInfo.setValue(CmnConst.SECRETKEY, fseCompanyMessage.getString(CmnConst.SECRETKEY));
 				fseMessageInfo.setValue(CmnConst.ECNAME, fseCompanyMessage.getString(CmnConst.ECNAME));
@@ -591,7 +661,7 @@
 				fseMessageInfo.setValue(CmnConst.ADDSERIAL, fseCompanyMessage.getString(CmnConst.ADDSERIAL));
 				fseMessageInfo.setValue(CmnConst.URL, fseCompanyMessage.getString(CmnConst.URL));
 				fseMessageInfo.setValue(CmnConst.TREATY, fseCompanyMessage.getString(CmnConst.TREATY));
-			}else {
+			} else {
 				fseMessageInfo.setValue(CmnConst.USER_ACCOUNT, "zgctjt");
 				fseMessageInfo.setValue(CmnConst.SECRETKEY, "zgctjt2019");
 				fseMessageInfo.setValue(CmnConst.ECNAME, "鑷础甯傚煄甯傚缓璁炬姇璧勫紑鍙戦泦鍥㈡湁闄愬叕鍙�");
@@ -601,43 +671,44 @@
 				fseMessageInfo.setValue(CmnConst.TREATY, "HTTP");
 			}
 			fseMessageInfo.setValue("send_mode", "smtp");
-			
+
 			HttpSmsSendUtil.sendMsg(fseMessageInfo);
 			fseMessageInfo.setValue(CmnConst.CREATED_BY, 1);
-			fseMessageInfo.setValue(CmnConst.CREATED_UTC_DATETIME,new Date());
+			fseMessageInfo.setValue(CmnConst.CREATED_UTC_DATETIME, new Date());
 			baseDao.add(fseMessageInfo);
 		}
 	}
-	
-	
+
+
 	/**
-	 * 	鑷姩鍙戣捣娴佺▼
+	 * 鑷姩鍙戣捣娴佺▼
+	 *
 	 * @param flowCode
 	 * @param flowParam
 	 * @param fseService
 	 * @param fieldAndAlias
 	 */
-	public void autoStartFlow(String warnName,String flowCode, String flowParam, FieldSetEntity fseService, Map<String, String>fieldAndAlias, Integer createdBy) {
-		
-		if (flowCode==null) {
-			return ;
+	public void autoStartFlow(String warnName, String flowCode, String flowParam, FieldSetEntity fseService, Map<String, String> fieldAndAlias, Integer createdBy) {
+
+		if (flowCode == null) {
+			return;
 		}
-		
-		FieldSetEntity fseFlowService=new FieldSetEntity();
-		
-		String [] warnAndFlows=flowParam.split(",");
+
+		FieldSetEntity fseFlowService = new FieldSetEntity();
+
+		String[] warnAndFlows = flowParam.split(",");
 		for (int i = 0; i < warnAndFlows.length; i++) {
-			String [] warnAndFlow=warnAndFlows[i].split("=");
-			String warnField=warnAndFlow[0];
-			String flowField=warnAndFlow[1];
-			
+			String[] warnAndFlow = warnAndFlows[i].split("=");
+			String warnField = warnAndFlow[0];
+			String flowField = warnAndFlow[1];
+
 			fseFlowService.setTableName(flowField.split("\\.")[0]);
 			fseFlowService.setValue(flowField.split("\\.")[1], fseService.getObject(fieldAndAlias.get(warnField.replace("{#", "").replace("#}", ""))));
 		}
-		
+
 		baseDao.add(fseFlowService);
-		
-		FieldSetEntity fseFLow=new FieldSetEntity();
+
+		FieldSetEntity fseFLow = new FieldSetEntity();
 		fseFLow.setTableName(fseFlowService.getTableName());
 		fseFLow.setValue("flow_title", warnName);
 		fseFLow.setValue("uuid", fseFlowService.getUUID());
diff --git a/src/main/java/com/product/administration/service/LeaveRequestService.java b/src/main/java/com/product/administration/service/LeaveRequestService.java
index 8d32b7d..3eb4b21 100644
--- a/src/main/java/com/product/administration/service/LeaveRequestService.java
+++ b/src/main/java/com/product/administration/service/LeaveRequestService.java
@@ -61,16 +61,23 @@
 	 * 璇峰亣鐢宠淇濆瓨
 	 */
 	public String saveLeaveRequest(FieldSetEntity fs) throws BaseException {
-//		fs.setValue("org_level_uuid", SpringMVCContextHolder.getCurrentUser().getOrg_level_uuid());//鍏徃
-//		fs.setValue("fill_in_time", new Date());//濉崟鏃堕棿
-//		fs.setValue("department_uuid", SpringMVCContextHolder.getCurrentUser().getOrg_level_uuid());//閮ㄩ棬
-		fs.setValue("created_by", SpringMVCContextHolder.getCurrentUser().getUser_id());//濮撳悕
-		fs.setValue("flow_flag", 0);
-		if(StringUtils.isEmpty(fs.getString(CmnConst.UUID))){
-			return baseDao.add(fs);
+		DataTableEntity dataTableEntity = baseDao.listTable(CmnConst.PRODUCT_SYS_ASK_FOR_LEAVE, " uuid  not in (?) and user_id=? and ((start_time<=? and end_time>=?) or(start_time<=? and end_time>=?))"
+				, new String[]{StringUtils.isEmpty(fs.getUUID())?"":fs.getUUID(), fs.getString("user_id"), fs.getString("start_time"), fs.getString("start_time"), fs.getString("end_time"), fs.getString("end_time")});
+        if (dataTableEntity.getRows()>0){
+			return "1";
 		}else {
-			baseDao.update(fs);
-			return fs.getString(CmnConst.UUID);
+			if (StringUtils.isEmpty(fs.getString(CmnConst.UUID))) {
+				fs.setValue("created_by", SpringMVCContextHolder.getCurrentUser().getUser_id());
+				fs.setValue("created_utc_datetime", new Date());
+				fs.setValue("org_level_uuid", SpringMVCContextHolder.getCurrentUser().getOrg_level_uuid());
+				return baseDao.add(fs);
+			} else {
+				fs.setValue("updated_by", SpringMVCContextHolder.getCurrentUser().getUser_id());
+				fs.setValue("updated_utc_datetime", new Date());
+				baseDao.update(fs);
+				return fs.getString(CmnConst.UUID);
+			}
+
 		}
 	}
 	/**
diff --git a/src/main/java/com/product/administration/service/PunchRecordService.java b/src/main/java/com/product/administration/service/PunchRecordService.java
index cbfc2c6..83f72f5 100644
--- a/src/main/java/com/product/administration/service/PunchRecordService.java
+++ b/src/main/java/com/product/administration/service/PunchRecordService.java
@@ -1,11 +1,23 @@
 package com.product.administration.service;
 
+
+
+
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
+
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -34,29 +46,264 @@
 
 	@Autowired
 	BaseDao baseDao;
-	
+
 	/**
 	 * 	鑰冨嫟鎵撳崱鍒楄〃
 	 * @param fse
 	 * @return
 	 */
-	public DataTableEntity listRecordInfo(FieldSetEntity fse) {
+	public DataTableEntity listRecordInfo(FieldSetEntity fse) throws ParseException {
 		DataTableEntity dt=baseDao.listTable(CmnConst.PRODUCT_OA_PUNCH_RECORD, "created_by=?", new Object[] {SpringMVCContextHolder.getCurrentUser().getUser_id()}, null, CmnConst.CREATED_UTC_DATETIME+" DESC", fse.getInteger(CmnConst.PAGESIZE), fse.getInteger(CmnConst.CPAGE));
-		dt.setFieldFormat("punch_time_one", "yyyy-MM-dd HH:mm:ss");
-		dt.setFieldFormat("punch_time_three", "yyyy-MM-dd HH:mm:ss");
+		for (int i=0;i<dt.getRows();i++){
+			FieldSetEntity fieldSetEntity = dt.getData().get(i);
+			String punch_time_one = fieldSetEntity.getValue("punch_time_one").toString();
+			Date date1=new Date(punch_time_one);
+			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+			String sign_date = dateFormat.format(date1);
+			fieldSetEntity.setValue("sign_date",sign_date);
+			DateFormat dateFormatGet = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+			//鑾峰彇鏃╅��杩熷埌鐨勫垎閽熸暟
+			List<Object>param1=new ArrayList<>();
+			param1.add(fieldSetEntity.getValue("created_by").toString());
+			param1.add(fieldSetEntity.getValue("punch_congfig_uuid").toString());
+			param1.add(fieldSetEntity.getValue("created_by").toString()+",");
+
+			//鑾峰彇浣跨敤鍒扮殑璁剧疆瑙勫垯
+			StringBuilder sbPunchTime=new StringBuilder();
+			sbPunchTime.append(" SELECT c.* ");
+			sbPunchTime.append(" FROM ( ");
+			sbPunchTime.append(" SELECT d.* ");
+			sbPunchTime.append(" FROM product_oa_punch_time d ");
+			sbPunchTime.append(" left JOIN product_oa_punch_record b ");
+			sbPunchTime.append(" on d.punch_site_uuid=b.punch_congfig_uuid and d.created_by=? where d.punch_site_uuid= ? ");
+			sbPunchTime.append(" ) c ");
+			sbPunchTime.append(" where  c.uuid in ( ");
+			sbPunchTime.append(" SELECT DISTINCT uuid ");
+			sbPunchTime.append(" FROM product_oa_punch_time ");
+			sbPunchTime.append(" where LOCATE(?, concat(attendance_object,','))>0 ");
+			sbPunchTime.append(" ) ");
+			DataTableEntity dataTableEntity = baseDao.listTable(sbPunchTime.toString(), param1.toArray());
+
+
+			//澶勭悊琛ュ崱鐨勬儏鍐�
+			List<Object>param2=new ArrayList<>();
+			param2.add(fieldSetEntity.getValue("created_by").toString());
+			param2.add(sign_date);
+
+			StringBuilder sbReplenish=new StringBuilder();
+			sbReplenish.append(" SELECT T1.id,T1.uuid,T1.created_by,T1.applicant,T1.replenish_date,T1.reason,");
+			sbReplenish.append(" SUBSTRING_INDEX( SUBSTRING_INDEX( T1.replacement_card_type, ',', T2.digit + 1 ), ',',- 1 ) AS type ");
+			sbReplenish.append(" FROM product_oa_replenish_punch T1 ");
+			sbReplenish.append(" JOIN ( SELECT 0 AS digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 ) T2");
+			sbReplenish.append(" ON T2.digit < ( length( T1.replacement_card_type )- length( REPLACE ( T1.replacement_card_type, ',', '' ))+ 1 )");
+			sbReplenish.append(" where t1.created_by=? ");
+			sbReplenish.append(" and DATE_FORMAT( t1.replenish_date, '%Y-%m-%d' )=? ");
+			DataTableEntity dataTableEntity1 = baseDao.listTable(sbReplenish.toString(), param2.toArray());
+			if(dataTableEntity1.getRows()!=0){
+
+				for(int j=0;j<dataTableEntity1.getRows();j++){
+					String type = dataTableEntity1.getData().get(j).getValue("type").toString();
+					if(type.equals("1")){
+						String morning_work = dataTableEntity.getData().get(0).getValue("morning_work").toString();
+						Date parse = dateFormatGet.parse(morning_work);
+						fieldSetEntity.setValue("punch_time_one", new Timestamp(parse.getTime()));
+					}
+
+					if(type.equals("2")){
+						String morning_work_off = dataTableEntity.getData().get(0).getValue("morning_work_off").toString();
+						Date parse = dateFormatGet.parse(morning_work_off);
+						fieldSetEntity.setValue("punch_time_two", new Timestamp(parse.getTime()));
+					}
+
+					if(type.equals("3")){
+						String afternoon_work = dataTableEntity.getData().get(0).getValue("afternoon_work").toString();
+						Date parse = dateFormatGet.parse(afternoon_work);
+						fieldSetEntity.setValue("punch_time_three", new Timestamp(parse.getTime()));
+					}
+
+					if(type.equals("4")){
+						String afternoon_work_off = dataTableEntity.getData().get(0).getValue("afternoon_work_off").toString();
+						Date parse = dateFormatGet.parse(afternoon_work_off);
+						fieldSetEntity.setValue("punch_time_four", new Timestamp(parse.getTime()));
+					}
+				}
+			}
+
+			long beLate1 = 0;
+			long beLate2 = 0;
+			long beEarily1 = 0;
+			long beEarily2 = 0;
+			if(dataTableEntity.getRows()!=0){
+
+				String morning_work="";
+				String morning_work_off="";
+				String afternoon_work="";
+				String afternoon_work_off="";
+				Date  morning_work_date;
+				Date  morning_work_off_date;
+				Date  afternoon_work_date;
+				Date  afternoon_work_off_date;
+
+				DateTime punch_time_one_date;
+				DateTime punch_time_two_date;
+				DateTime punch_time_three_date;
+				DateTime punch_time_four_date;
+
+				SimpleDateFormat dateFormatHHmmss = new SimpleDateFormat("HH:mm:ss");
+
+				StringBuilder  lateSb=new StringBuilder();
+				StringBuilder   earilySb=new StringBuilder();
+				StringBuilder supereffective_distance=new StringBuilder();
+
+
+				if(!ObjectUtil.isNotEmpty(dataTableEntity.getData().get(0).getValue("morning_work_off")) && !ObjectUtil.isNotEmpty(dataTableEntity.getData().get(0).getValue("afternoon_work"))){
+
+					morning_work = dataTableEntity.getData().get(0).getValue("morning_work").toString();
+					afternoon_work_off = dataTableEntity.getData().get(0).getValue("afternoon_work_off").toString();
+					morning_work_date= DateUtil.parse(morning_work.split(" ")[1]);
+					afternoon_work_off_date= DateUtil.parse(afternoon_work_off.split(" ")[1]);
+					int distance = Integer.parseInt(dataTableEntity.getData().get(0).getValue("distance").toString());
+					if(ObjectUtil.isNotEmpty(fieldSetEntity.getValue("punch_time_one"))){
+						String punch_time_one1 = dateFormatHHmmss.format(fieldSetEntity.getValue("punch_time_one"));
+						punch_time_one_date = DateUtil.parse(punch_time_one1);
+						if(punch_time_one_date.after(morning_work_date)){
+							beLate1 = DateUtil.between(punch_time_one_date, morning_work_date, DateUnit.MINUTE);
+							lateSb.append("杩熷埌:"+beLate1+"鍒嗛挓");
+							//璁$畻瓒呭嚭鐨勬湁鏁堣窛绂�
+							int punch_range_one = Integer.parseInt(fieldSetEntity.getValue("punch_range_one").toString());
+							if(punch_range_one>distance){
+								int distanceMorning = punch_range_one- distance;
+								fieldSetEntity.setValue("supereffective_distance","涓婄彮瓒呮湁鏁堣窛绂�:"+distanceMorning);
+							}
+						}
+
+					}else {
+						lateSb.append("涓婄彮鏈墦鍗�");
+					}
+
+					if(ObjectUtil.isNotEmpty(fieldSetEntity.getValue("punch_time_four"))){
+						String punch_time_four = dateFormatHHmmss.format(fieldSetEntity.getValue("punch_time_four"));
+						punch_time_four_date = DateUtil.parse(punch_time_four);
+						if(punch_time_four_date.before(afternoon_work_off_date)){
+							beEarily2 = DateUtil.between(punch_time_four_date, afternoon_work_off_date, DateUnit.MINUTE);
+							earilySb.append("鏃╅��:"+beEarily2+"鍒嗛挓");
+							int punch_range_four = Integer.parseInt(fieldSetEntity.getValue("punch_range_four").toString());
+							if(punch_range_four>distance){
+								int distanceMorning = punch_range_four- distance;
+								fieldSetEntity.setValue("supereffective_distance","涓嬬彮瓒呮湁鏁堣窛绂�:"+distanceMorning);
+							}
+						}
+
+					}else {
+						earilySb.append("涓嬬彮鏈墦鍗�");
+					}
+
+				}else {
+
+					morning_work = dataTableEntity.getData().get(0).getValue("morning_work").toString();
+					morning_work_date= DateUtil.parse(morning_work.split(" ")[1]);
+					morning_work_off = dataTableEntity.getData().get(0).getValue("morning_work_off").toString();
+					morning_work_off_date= DateUtil.parse(morning_work_off.split(" ")[1]);
+					afternoon_work =dataTableEntity.getData().get(0).getValue("afternoon_work").toString();
+					afternoon_work_date= DateUtil.parse(afternoon_work.split(" ")[1]);
+					afternoon_work_off = dataTableEntity.getData().get(0).getValue("afternoon_work_off").toString();
+					afternoon_work_off_date= DateUtil.parse(afternoon_work_off.split(" ")[1]);
+
+
+					int distance = Integer.parseInt(dataTableEntity.getData().get(0).getValue("distance").toString());
+
+					if(ObjectUtil.isNotEmpty(fieldSetEntity.getValue("punch_time_one"))){
+						String punch_time_one1 = dateFormatHHmmss.format(fieldSetEntity.getValue("punch_time_one"));
+						punch_time_one_date = DateUtil.parse(punch_time_one1);
+						if(punch_time_one_date.after(morning_work_date)){
+							beLate1 = DateUtil.between(punch_time_one_date, morning_work_date, DateUnit.MINUTE);
+							lateSb.append("鏃╀笂鐝繜鍒�:"+beLate1+" ");
+							int punch_range_one = Integer.parseInt(fieldSetEntity.getValue("punch_range_one").toString());
+							if(punch_range_one>distance){
+								int distanceMorning = punch_range_one- distance;
+								supereffective_distance.append("鏃╀笂鐝秴鏈夋晥璺濈:"+distanceMorning);
+							}
+
+						}
+
+					}else {
+						lateSb.append("鏃╀笂鐝湭鎵撳崱"+" ");
+
+					}
+
+					if(ObjectUtil.isNotEmpty(fieldSetEntity.getValue("punch_time_two"))){
+						String punch_time_two= dateFormatHHmmss.format(fieldSetEntity.getValue("punch_time_two"));
+						punch_time_two_date = DateUtil.parse(punch_time_two);
+						if(punch_time_two_date.before(morning_work_off_date)){
+							beEarily1 = DateUtil.between(punch_time_two_date, morning_work_off_date, DateUnit.MINUTE);
+							earilySb.append("鏃╀笅鐝棭閫�:"+beEarily1+" ");
+							int punch_range_two = Integer.parseInt(fieldSetEntity.getValue("punch_range_two").toString());
+							if(punch_range_two>distance){
+								int distanceMorningoff = punch_range_two- distance;
+								supereffective_distance.append("鏃╀笅鐝秴鏈夋晥璺濈:"+distanceMorningoff);
+							}
+						}
+
+					}else {
+						earilySb.append("鏃╀笅鐝湭鎵撳崱"+" ");
+					}
+					if(ObjectUtil.isNotEmpty(fieldSetEntity.getValue("punch_time_three"))){
+						String punch_time_three = dateFormatHHmmss.format(fieldSetEntity.getValue("punch_time_three"));
+						punch_time_three_date = DateUtil.parse(punch_time_three);
+						if(punch_time_three_date.after(afternoon_work_date)){
+							beLate2 = DateUtil.between(punch_time_three_date, afternoon_work_date, DateUnit.MINUTE);
+							lateSb.append("涓嬪崍涓婄彮杩熷埌:"+beLate2+" ");
+							int punch_range_three = Integer.parseInt(fieldSetEntity.getValue("punch_range_three").toString());
+							if(punch_range_three>distance){
+								int distanceAfternoon = punch_range_three- distance;
+								supereffective_distance.append("涓嬪崍涓婄彮瓒呮湁鏁堣窛绂�:"+distanceAfternoon);
+							}
+						}
+					}else {
+						lateSb.append("鏃╀笂鐝湭鎵撳崱"+" ");
+					}
+					if(ObjectUtil.isNotEmpty(fieldSetEntity.getValue("punch_time_four"))){
+						String punch_time_four = dateFormatHHmmss.format(fieldSetEntity.getValue("punch_time_four"));
+						punch_time_four_date = DateUtil.parse(punch_time_four);
+						if(punch_time_four_date.before(afternoon_work_off_date)){
+							beEarily2 = DateUtil.between(punch_time_four_date, afternoon_work_off_date, DateUnit.MINUTE);
+							earilySb.append("涓嬪崍涓嬬彮鏃╅��:"+beEarily2+" ");
+							int punch_range_four = Integer.parseInt(fieldSetEntity.getValue("punch_range_four").toString());
+							if(punch_range_four>distance){
+								int distanceAfternoonoff = punch_range_four- distance;
+								supereffective_distance.append("涓嬪崍涓嬬彮瓒呮湁鏁堣窛绂�:"+distanceAfternoonoff);
+							}
+
+						}
+					}else {
+						earilySb.append("涓嬪崍涓嬬彮鏈墦鍗�"+" ");
+					}
+
+				}
+				fieldSetEntity.setValue("be_late",lateSb);
+				fieldSetEntity.setValue("ealy_leave",earilySb);
+				fieldSetEntity.setValue("supereffective_distance",supereffective_distance.toString());
+			}
+
+		}
+		dt.setFieldFormat("punch_time_one", " HH:mm");
+		dt.setFieldFormat("punch_time_two", " HH:mm");
+		dt.setFieldFormat("punch_time_three", " HH:mm");
+		dt.setFieldFormat("punch_time_four", " HH:mm");
 		baseDao.loadPromptData(dt);
 		return dt;
 	}
-	
+
 	/**
 	 * 	鑰冨嫟鎵撳崱璇︽儏
 	 * @param uuid
-	 * @return 
+	 * @return
 	 */
 	public FieldSetEntity findRecordInfo(String uuid) {
 		return baseDao.getFieldSetEntity(CmnConst.PRODUCT_OA_PUNCH_RECORD, uuid, true);
 	}
-	
+
 	/**
 	 * 	鑰冨嫟鎵撳崱鏂板
 	 * @param fse
@@ -64,18 +311,18 @@
 	 */
 	public String addRecordInfo(FieldSetEntity fse) {
 		SimpleDateFormat df = new SimpleDateFormat(CmnConst.YYYYMMDDHHMMSS);
-		
+
 		SystemUser currentUser=SpringMVCContextHolder.getCurrentUser();	//鑾峰彇鎵撳崱浜�
 		Date created_datetime=fse.getDate("created_datetime");			//鑾峰彇鎵撳崱鏃堕棿
 //		Date created_datetime=new Date();								//鑾峰彇鎵撳崱鏃堕棿
 		String string_created_datetime=df.format(created_datetime);		//鏃堕棿杞瑂tring
-		
+
 		//鑾峰彇鍏徃鎵撳崱鏃堕棿閰嶇疆淇℃伅
 		FieldSetEntity fseCompanyPunch=baseDao.getFieldSetEntityByFilter("product_oa_punch_time", "org_level_uuid=?", new Object[] {currentUser.getOrg_level_uuid()}, false);
 		if (fseCompanyPunch==null) {
 			throw new BaseException(SystemCode.SYSTEM_CONMAPNY_PUNCH_NO_EXIST.getValue(), SystemCode.SYSTEM_CONMAPNY_PUNCH_NO_EXIST.getText(), this.getClass(), "addRecordInfo");
 		}
-		
+
 		//鑾峰彇褰撳ぉ鎵撳崱淇℃伅
 		FieldSetEntity fsePunchInfo=baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_OA_PUNCH_RECORD, "created_by=? and DATE_FORMAT(created_utc_datetime,'%Y-%m-%d')like ?", new Object[] {currentUser.getUser_id(),string_created_datetime.substring(0, 10)+"%"}, false);
 		if (fsePunchInfo==null) {
@@ -89,13 +336,13 @@
 			//鏂板鎵撳崱淇℃伅
 			return baseDao.add(fseNewPunchInfo);
 		}else {
-			
+
 			//鎵撳崱妯″紡(0:鍙屽崱  1:鍥涘崱)
 			int punchMode=0;
 			if (StringUtils.isEmpty(fseCompanyPunch.getString("work_time_two"))) {
 				punchMode=1;
 			}
-			
+
 			String punch_time_one=fsePunchInfo.getDate("punch_time_one", CmnConst.YYYYMMDDHHMMSS);
 			String punch_time_two=fsePunchInfo.getDate("punch_time_two", CmnConst.YYYYMMDDHHMMSS);
 			String punch_time_three=fsePunchInfo.getDate("punch_time_three", CmnConst.YYYYMMDDHHMMSS);
@@ -115,7 +362,7 @@
 			}
 			list.add(string_created_datetime);
 			Collections.sort(list);
-			
+
 			for (int i = 0; i < list.size(); i++) {
 				if (punchMode==1) {
 					if (i==0) {
@@ -140,5 +387,5 @@
 			return fsePunchInfo.getUUID();
 		}
 	}
-	
+
 }
diff --git a/src/main/java/com/product/administration/service/WorkAttendanceKanbanService.java b/src/main/java/com/product/administration/service/WorkAttendanceKanbanService.java
index 09617fe..9ca15d7 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.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
+import cn.hutool.core.util.ObjectUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -25,7 +27,7 @@
 
 	@Autowired
 	BaseDao baseDao;
-	
+
 	/**
 	 * 	鑰冨嫟鎶ヨ〃
 	 * @param dept_uuid		閮ㄩ棬
@@ -36,8 +38,8 @@
 		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++) {
@@ -68,10 +70,10 @@
 		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
@@ -82,173 +84,366 @@
 		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<Object> 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')>?,'杩熷埌','姝e父'),'鏈墦鍗�')result_one, ");
+		sb.append(" punch_time_one,IF(punch_time_one IS TRUE,IF(DATE_FORMAT(punch_time_one,'%H:%i:%S')>?,'杩熷埌','姝e父'),'涓婂崍涓婄彮鏈墦鍗�')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')<?,'鏃╅��','姝e父'),'鏈墦鍗�')result_two, ");
+			sb.append(" punch_time_two,IF(punch_time_two IS TRUE,IF(DATE_FORMAT(punch_time_two,'%H:%i:%S')<?,'鏃╅��','姝e父'),'涓婂崍涓嬬彮鏈墦鍗�')result_two, ");
 			param.add(fseCompanyPunch.getDate("work_time_two","HH:mm:ss"));
-			sb.append(" punch_time_three,IF(punch_time_three IS TRUE,IF(DATE_FORMAT(punch_time_three,'%H:%i:%S')>?,'杩熷埌','姝e父'),'鏈墦鍗�')result_three, ");
+			sb.append(" punch_time_three,IF(punch_time_three IS TRUE,IF(DATE_FORMAT(punch_time_three,'%H:%i:%S')>?,'杩熷埌','姝e父'),'涓嬪崍涓婄彮鏈墦鍗�')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')<?,'鏃╅��','姝e父'),'鏈墦鍗�')result_four ");
+
+		sb.append(" punch_time_four,IF(punch_time_four IS TRUE,IF(DATE_FORMAT(punch_time_four,'%H:%i:%S')<?,'鏃╅��','姝e父'),'涓嬪崍涓婄彮鏈墦鍗�')result_four ");
 		param.add(fseCompanyPunch.getDate("work_time_four","HH:mm:ss"));
-		
+
 		sb.append(" FROM product_oa_punch_record WHERE created_by=?");
 		sb.append(" AND DATE_FORMAT(created_utc_datetime,'%Y-%m')=? ");
 		sb.append(" AND DATE_FORMAT(created_utc_datetime,'%Y-%m-%d') NOT IN (SELECT DATE_FORMAT(date_holiday,'%Y-%m-%d')FROM product_sys_company_holiday WHERE org_level_uuid=?) ");
 		param.add(user_id);
 		param.add(yearAndMonth);
 		param.add(org_level_uuid);
-		
+
 		return baseDao.listTable(sb.toString(), param.toArray());
 	}
-	
+	/**
+	 * 	鎵撳崱鏈堢湅鏉�(鏂�)
+	 * @param fse
+	 * @return
+	 */
+	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");
+		}
+
+
+		StringBuilder sb=new StringBuilder();
+		List<Object> 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 c.dict_label 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.morning_work_off, '%H:%i:%S') and f.morning_work_off is not null, CONCAT('涓婂崍鏃╅��',TIMESTAMPDIFF(MINUTE,d.punch_time_two,DATE_FORMAT(CONCAT(a.punch_date,' ',DATE_FORMAT(f.morning_work_off, '%H:%i:%S')),'%Y-%m-%d %H:%i:%S')),'鍒嗛挓'), 0 ), '涓婂崍涓嬬彮鏈墦鍗�' ) ");
+		sb.append(" ,',',IF(d.punch_time_three IS TRUE, IF ( DATE_FORMAT(d.punch_time_three, '%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(f.afternoon_work_off, '%H:%i:%S'), CONCAT('涓嬪崍鏃╅��',TIMESTAMPDIFF(MINUTE,d.punch_time_four,DATE_FORMAT(CONCAT(a.punch_date,' ',DATE_FORMAT(f.afternoon_work_off, '%H:%i:%S')),'%Y-%m-%d %H:%i:%S')),'鍒嗛挓'), 0 ), '涓嬪崍涓嬬彮鏈墦鍗�' )) ");
+		sb.append(" ELSE '鍏ㄥぉ鏈墦鍗�' END END reidis,CASE  WHEN b.uuid is not null THEN 1 ELSE CASE  WHEN d.uuid is not null THEN 0 ELSE 2 END END type ");
+		sb.append(" FROM (SELECT CONCAT(DATE_FORMAT(?, '%Y-%m-'),IF(i<9,CONCAT('0',i + 1),i + 1)) punch_date  ");
+		param.add(yearAndMonth+"-01");
+		sb.append(" FROM (SELECT @row := @row + 1 as i FROM ");
+		sb.append(" (SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) t1, ");
+		sb.append(" (SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) t2, ");
+		sb.append(" (SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) t3, ");
+		sb.append(" (SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) t4, ");
+		sb.append(" (SELECT @row := -1) t0) d WHERE i < DAY(last_day(DATE_FORMAT(?, '%Y-%m-01')))) a ");
+		param.add(yearAndMonth+"-01");
+		sb.append(" LEFT JOIN (SELECT * FROM product_oa_ask_for_leave WHERE user_id=?) b ");
+		param.add(user_id);
+		sb.append(" on DATE_FORMAT( a.punch_date, '%Y-%m-%d' )>= 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 (SELECT * FROM product_sys_dict where dict_name='Leave_Type') c on b.leave_type =c.dict_value ");
+		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=? 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);
+			//鑾峰彇琛ュ崱鏍囪瘑
+			List<String> bk=new ArrayList<>();
+			if (!StringUtils.isEmpty(fs.getString("bk"))){
+				bk= Arrays.asList(fs.getString("bk").split(","));
+			}
+			if (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 ("1".equals(a)){
+					fs.setValue("type",a);
+					fs.setValue("result_one","姝e父鎵撳崱");
+				}
+
+			}else {
+				fs.setValue("result_one",fs.getString("reidis"));
+			}
+		}
+		return dt;
+	}
 	/**
 	 * 	鑰冨嫟缁熻鎶ヨ〃
 	 * @param fse
 	 * @return
 	 */
 	public DataTableEntity listMonthReport(FieldSetEntity fse) {
-		
+
 		//鑾峰彇褰撳墠浜轰俊鎭�
 		SystemUser currentUser=SpringMVCContextHolder.getCurrentUser();
-		String org_level_uuid=currentUser.getOrg_level_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(), "listMonthReport");
+		List<Object>param1=new ArrayList<>();
+		param1.add(currentUser.getUser_id());
+		param1.add(currentUser.getUser_id()+",");
+       //鑾峰彇浣跨敤鍒扮殑璁剧疆瑙勫垯
+		StringBuilder sbPunchTime=new StringBuilder();
+		sbPunchTime.append(" SELECT DISTINCT c.* ");
+		sbPunchTime.append(" FROM ( ");
+		sbPunchTime.append(" SELECT d.* ");
+		sbPunchTime.append(" FROM product_oa_punch_time d ");
+		sbPunchTime.append(" left JOIN product_oa_punch_record b ");
+		sbPunchTime.append(" on d.punch_site_uuid=b.punch_congfig_uuid and d.created_by=? ");
+		sbPunchTime.append(" ) c ");
+		sbPunchTime.append(" where  c.uuid in ( ");
+		sbPunchTime.append(" SELECT DISTINCT uuid ");
+		sbPunchTime.append(" FROM product_oa_punch_time ");
+		sbPunchTime.append(" where LOCATE(?, concat(attendance_object,','))>0 ");
+		sbPunchTime.append(" ) ");
+		DataTableEntity dataTableEntity = baseDao.listTable(sbPunchTime.toString(), param1.toArray());
+		List<DataTableEntity> dataTableEntityLits=new ArrayList<>();
+		for(int i=0;i<dataTableEntity.getRows();i++){
+
+			FieldSetEntity fseCompanyPunch = dataTableEntity.getData().get(i);
+			if (fseCompanyPunch==null) {
+				throw new BaseException(SystemCode.COMPANY_PUNCH_TIME_NOT_CONFIG.getValue(), SystemCode.COMPANY_PUNCH_TIME_NOT_CONFIG.getText(), this.getClass(), "listMonthReport");
+			}
+			//鑾峰彇鏌ヨ鏈堜唤
+			String yearAndMonth=fse.getString("yearAndMonth");
+			if (StringUtils.isEmpty(yearAndMonth)) {
+				yearAndMonth=DateUtils.formatDate(new Date(), "yyyy-MM");
+			}
+
+         //鑾峰彇姣忔湀澶╂暟
+			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();
+			}
+
+
+			StringBuilder sb=new StringBuilder();
+			List<Object>param=new ArrayList<>();
+			String morinng_work = fseCompanyPunch.getValue("morning_work").toString().split(" ")[1];
+			param.add(morinng_work);
+			if(ObjectUtil.isNotEmpty(fseCompanyPunch.getValue("morning_work_off"))&& ObjectUtil.isNotEmpty(fseCompanyPunch.getValue("afternoon_work"))){
+				String morinng_work_off = fseCompanyPunch.getValue("morning_work_off").toString().split(" ")[1];
+				String afternoon_work = fseCompanyPunch.getValue("afternoon_work").toString().split(" ")[1];
+				param.add(afternoon_work);
+				param.add(morinng_work_off);
+			}
+
+			String afternoon_work_off = fseCompanyPunch.getValue("afternoon_work_off").toString().split(" ")[1];
+			String uuid = fseCompanyPunch.getValue("uuid").toString();
+
+			param.add(afternoon_work_off);
+			param.add(yearAndMonth);
+			param.add(uuid);
+			param.add(yearAndMonth);
+			param.add(yearAndMonth);
+			sb.append(" SELECT ");
+			sb.append(" (SELECT user_name FROM product_sys_users WHERE user_id=a.created_by)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,casual_leave,medical_leave,marriage_leave,paid_leave,other_leave,(dayOfWork-workDayOfMonth)absenteeism ");
+			sb.append(" FROM ( ");
+			if(ObjectUtil.isNotEmpty(fseCompanyPunch.getValue("morning_work_off"))&& ObjectUtil.isNotEmpty(fseCompanyPunch.getValue("afternoon_work"))){
+				sb.append(" SELECT b.created_by,b.dayOfWork,b.workDayOfMonth,b.dept_uuid,b.lateCome1+b.lateCome2 lateCome,b.leaveEarly1+b.leaveEarly2 leaveEarly");
+			}else {
+				sb.append(" SELECT b.created_by,b.dayOfWork,b.workDayOfMonth,b.dept_uuid,b.lateCome1 lateCome,b.leaveEarly2 leaveEarly");
+			}
+
+			sb.append(" FROM ( ");
+			sb.append(" SELECT ");
+			sb.append(" a.created_by,"+dayOfWork+" dayOfWork,COUNT(day_of_month)workDayOfMonth,a.dept_uuid, ");
+			sb.append(" COUNT(");
+			sb.append(" IF ");
+			sb.append(" ( result1 = '杩熷埌', TRUE, NULL )) lateCome1,");
+			if(ObjectUtil.isNotEmpty(fseCompanyPunch.getValue("morning_work_off"))&& ObjectUtil.isNotEmpty(fseCompanyPunch.getValue("afternoon_work"))){
+				sb.append(" COUNT(");
+				sb.append(" IF ");
+				sb.append(" ( result2 = '杩熷埌', TRUE, NULL )) lateCome2,");
+				sb.append(" COUNT(");
+				sb.append(" IF ");
+				sb.append(" ( result3 = '鏃╅��', TRUE, NULL )) leaveEarly1,");
+
+			}
+			sb.append(" COUNT(");
+			sb.append(" IF ");
+			sb.append(" ( result4 = '鏃╅��', TRUE, NULL )) leaveEarly2 ");
+			sb.append(" FROM ( ");
+			sb.append(" SELECT d.created_by,d.dept_uuid,DATE_FORMAT( d.created_utc_datetime, '%Y-%m-%d' ) day_of_month,punch_time_one, ");
+			sb.append(" IF ");
+			sb.append(" ( punch_time_one IS TRUE, IF ( DATE_FORMAT( punch_time_one, '%H:%i:%S' )> ?, '杩熷埌', '姝e父' ), '鏈墦鍗�' ) ");
+			sb.append(" result1 ,");
+			if(ObjectUtil.isNotEmpty(fseCompanyPunch.getValue("morning_work_off"))&& ObjectUtil.isNotEmpty(fseCompanyPunch.getValue("afternoon_work"))){
+				sb.append(" IF ");
+				sb.append(" ( punch_time_three IS TRUE, IF ( DATE_FORMAT( punch_time_three, '%H:%i:%S' )> ?, '杩熷埌', '姝e父' ), '鏈墦鍗�' ) ");
+				sb.append(" result2 ,");
+				sb.append(" IF ");
+				sb.append(" ( punch_time_two IS TRUE, IF ( DATE_FORMAT( punch_time_two, '%H:%i:%S' )< ?, '鏃╅��', '姝e父' ), '鏈墦鍗�' ) ");
+				sb.append(" result3 ,");
+			}
+
+			sb.append(" IF ");
+			sb.append(" ( punch_time_four IS TRUE, IF ( DATE_FORMAT( punch_time_four, '%H:%i:%S' ) < ?, '鏃╅��', '姝e父' ), '鏈墦鍗�' ) ");
+			sb.append(" result4 ");
+			sb.append(" FROM product_oa_punch_record d ");
+			sb.append(" left JOIN   product_oa_punch_time e ");
+			sb.append(" on d.punch_congfig_uuid=e.punch_site_uuid ");
+			sb.append(" and DATE_FORMAT( d.created_utc_datetime,'%Y-%m')=? AND DATE_FORMAT(punch_time_one,'%Y-%m-%d') NOT IN(SELECT date_holiday FROM product_sys_company_holiday) ");
+			sb.append(" where e.uuid=? ");
+			sb.append(" )a  ");
+			sb.append(" GROUP BY a.created_by,a.dept_uuid ");
+			sb.append(" )b");
+			sb.append(" )a ");
+			sb.append(" LEFT JOIN (SELECT user_id, sum( duration ) total_hours FROM product_oa_work_overtime o left join product_oa_work_overtime_sub b on o.uuid=b.main_uuid and   DATE_FORMAT( b.start_time, '%Y-%m' )=? GROUP BY o.user_id)b  ");
+			sb.append(" ON a.created_by=b.user_id ");
+			sb.append(" LEFT JOIN ( ");
+			sb.append(" SELECT ");
+			sb.append(" created_by,sum(IF(leave_type=1,TRUE,0))casual_leave,sum(IF(leave_type=2,TRUE,0))medical_leave, ");
+			sb.append(" sum(IF(leave_type=9,TRUE,0))marriage_leave,sum(IF(leave_type=4,TRUE,0))paid_leave, ");
+			sb.append(" sum(IF(leave_type!=1 && leave_type!=2 && leave_type!=4 && leave_type!=9,TRUE,0))other_leave ");
+			sb.append(" FROM product_oa_ask_for_leave ");
+			sb.append(" WHERE DATE_FORMAT(start_time,'%Y-%m')=? ");
+			sb.append(" GROUP BY created_by ");
+			sb.append(" )c ");
+			sb.append(" ON a.created_by=c.created_by ");
+			sb.append(" ORDER BY dept_uuid,a.created_by ");
+			DataTableEntity dataTableEntityReport = baseDao.listTable(sb.toString(), param.toArray());
+			if(dataTableEntityReport.getRows()!=0){
+				dataTableEntityLits.add(baseDao.listTable(sb.toString(), param.toArray()));
+			}
+
 		}
-		
-		//鑾峰彇鏌ヨ鏈堜唤
-		String yearAndMonth=fse.getString("yearAndMonth");
-		if (StringUtils.isEmpty(yearAndMonth)) {
-			yearAndMonth=DateUtils.formatDate(new Date(), "yyyy-MM");
+		DataTableEntity dataTableEntity1=new DataTableEntity();
+		if(ObjectUtil.isNotEmpty(dataTableEntityLits)){
+			dataTableEntity1=dataTableEntityLits.get(0);
+			//鏈湀鍐呰繜鍒版棭閫�鏁扮殑绱姞
+			for (int i = 1; i < dataTableEntityLits.size(); i++) {
+				FieldSetEntity fieldSetEntity = dataTableEntityLits.get(i).getData().get(0);
+				FieldSetEntity fieldSetEntity1 = dataTableEntity1.getData().get(0);
+				dataTableEntity1.getData().get(0).setValue("lateCome",Integer.parseInt(fieldSetEntity.getValue("lateCome").toString())+Integer.parseInt(fieldSetEntity1.getValue("lateCome").toString()));
+				dataTableEntity1.getData().get(0).setValue("leaveEarly",Integer.parseInt(fieldSetEntity.getValue("leaveEarly").toString())+Integer.parseInt(fieldSetEntity1.getValue("leaveEarly").toString()));
+				dataTableEntity1.getData().get(0).setValue("workDayOfMonth",Integer.parseInt(fieldSetEntity.getValue("workDayOfMonth").toString())+Integer.parseInt(fieldSetEntity1.getValue("workDayOfMonth").toString()));
+				dataTableEntity1.getData().get(0).setValue("absenteeism",Integer.parseInt(fieldSetEntity1.getValue("absenteeism").toString())-Integer.parseInt(fieldSetEntity.getValue("workDayOfMonth").toString()));
+			}
+
+
+
 		}
-		
-		//鑾峰彇姣忔湀澶╂暟
-		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();
+
+		//澶勭悊琛ュ崱鐨勬儏鍐�
+		List<Object>param2=new ArrayList<>();
+		param2.add(currentUser);
+		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(" created_by =? ");
+		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_one, '%Y-%m-%d') as record_data  from  product_oa_punch_record ");
+		sbReplenish.append(" union all select  DATE_FORMAT(punch_time_two, '%Y-%m-%d') as record_data  from  product_oa_punch_record");
+		sbReplenish.append(" union all select  DATE_FORMAT(punch_time_three, '%Y-%m-%d') as record_data  from  product_oa_punch_record");
+		sbReplenish.append(" union all select  DATE_FORMAT(punch_time_four, '%Y-%m-%d') as record_data  from  product_oa_punch_record");
+		sbReplenish.append(" )n )");
+		DataTableEntity dataTableEntityReplenish = baseDao.listTable(sbReplenish.toString(), param2.toArray());
+		if(dataTableEntityReplenish.getRows()!=0){
+			dataTableEntity1.getData().get(0).setValue("workDayOfMonth",Integer.parseInt(dataTableEntity1.getData().get(0).getString("workDayOfMonth"))+dataTableEntityReplenish.getRows());
+			dataTableEntity1.getData().get(0).setValue("dayOfWork",Integer.parseInt(dataTableEntity1.getData().get(0).getString("dayOfWork"))-dataTableEntityReplenish.getRows());
 		}
-		
-		//workTimeMethod 0:涓婂崍涓婄彮锛屼笅鍗堜笅鐝�  1:涓�鍗� 2:鍥涘崱  3:涓婂崍涓婄彮锛屼笅鍗堜笂鐝�
-		int workTimeMethod=0;
-		 if (StringUtils.isEmpty(fseCompanyPunch.getString("work_time_two")) && StringUtils.isEmpty(fseCompanyPunch.getString("work_time_three")) && StringUtils.isEmpty(fseCompanyPunch.getString("work_time_four"))) {
-			 workTimeMethod=1;
-		} else if (!StringUtils.isEmpty(fseCompanyPunch.getString("work_time_two")) && !StringUtils.isEmpty(fseCompanyPunch.getString("work_time_three")) && !StringUtils.isEmpty(fseCompanyPunch.getString("work_time_four"))) {
-			workTimeMethod=2;
-		} else if (StringUtils.isEmpty(fseCompanyPunch.getString("work_time_two")) && StringUtils.isEmpty(fseCompanyPunch.getString("work_time_four"))) {
-			workTimeMethod=3;
-		} 
-		
-		StringBuilder sb=new StringBuilder();
-		List<Object>param=new ArrayList<>();
-		param.add(yearAndMonth);
-		param.add(yearAndMonth);
-		param.add(yearAndMonth);
-		sb.append(" SELECT ");
-		sb.append(" (SELECT user_name FROM product_sys_users WHERE user_id=a.created_by)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,casual_leave,medical_leave,marriage_leave,paid_leave,other_leave,(dayOfWork-workDayOfMonth)absenteeism ");
-		sb.append(" FROM ( ");
-		sb.append(" SELECT ");
-		sb.append(" a.created_by,"+dayOfWork+" dayOfWork,COUNT(day_of_month)workDayOfMonth,a.dept_uuid, ");
-		
-		if (workTimeMethod==0) {
-			sb.append(" COUNT(IF(result1='杩熷埌',TRUE,NULL)) lateCome, ");
-			sb.append(" COUNT(IF(result4='鏃╅��',TRUE,NULL)) leaveEarly ");
-		}else if (workTimeMethod==1) {
-			sb.append(" COUNT(IF(result1='杩熷埌',TRUE,NULL)) lateCome, ");
-			sb.append(" 0 leaveEarly ");
-		}else if (workTimeMethod==2) {
-			sb.append(" COUNT(IF(result1='杩熷埌',TRUE,NULL))+COUNT(IF(result3='杩熷埌',TRUE,NULL)) lateCome, ");
-			sb.append(" COUNT(IF(result2='鏃╅��',TRUE,NULL))+COUNT(IF(result4='鏃╅��',TRUE,NULL)) leaveEarly ");
-		}else if (workTimeMethod==3) {
-			sb.append(" COUNT(IF(result1='杩熷埌',TRUE,NULL))+COUNT(IF(result3='杩熷埌',TRUE,NULL)) lateCome, ");
-			sb.append(" 0 leaveEarly ");
-		}
-		/*
-		if (workTimeMethod==1) {
-			sb.append(" COUNT(IF(result1='杩熷埌',TRUE,NULL))+COUNT(IF(result3='杩熷埌',TRUE,NULL)) lateCome, ");
-			sb.append(" COUNT(IF(result2='鏃╅��',TRUE,NULL))+COUNT(IF(result4='鏃╅��',TRUE,NULL)) leaveEarly ");
-		} else if (workTimeMethod==2) {
-			sb.append("");
-		} else if (workTimeMethod==3) {
-			
-		} else {
-			sb.append(" COUNT(IF(result1='杩熷埌',TRUE,NULL)) lateCome, ");
-			sb.append(" COUNT(IF(result4='鏃╅��',TRUE,NULL)) leaveEarly ");
-		}
-		*/
-		sb.append(" FROM ( ");
-		sb.append(" SELECT ");
-		sb.append(" created_by,dept_uuid, ");
-		sb.append(" DATE_FORMAT(created_utc_datetime,'%Y-%m-%d') day_of_month, ");
-		sb.append(" punch_time_one,IF(punch_time_one IS TRUE,IF(DATE_FORMAT(punch_time_one,'%H:%i:%S')>'09:00:00','杩熷埌','姝e父'),'鏈墦鍗�') result1 ");
-		
-//		sb.append(" punch_time_two,IF(punch_time_two IS TRUE,IF(DATE_FORMAT(punch_time_two,'%H:%i:%S')<'12:00:00','鏃╅��','姝e父'),'鏈墦鍗�') result2, ");
-//		sb.append(" punch_time_three,IF(punch_time_three IS TRUE,IF(DATE_FORMAT(punch_time_three,'%H:%i:%S')>'14:00:00','杩熷埌','姝e父'),'鏈墦鍗�') result3, ");
-//		sb.append(" punch_time_four,IF(punch_time_four IS TRUE,IF(DATE_FORMAT(punch_time_four,'%H:%i:%S')<'17:00:00','鏃╅��','姝e父'),'鏈墦鍗�') result4 ");
-		if (workTimeMethod==0) {
-			sb.append(", punch_time_four,IF(punch_time_four IS TRUE,IF(DATE_FORMAT(punch_time_four,'%H:%i:%S')<'17:00:00','鏃╅��','姝e父'),'鏈墦鍗�') result4 ");
-		}else if (workTimeMethod==2) {
-			sb.append(", punch_time_two,IF(punch_time_two IS TRUE,IF(DATE_FORMAT(punch_time_two,'%H:%i:%S')<'12:00:00','鏃╅��','姝e父'),'鏈墦鍗�') result2 ");
-			sb.append(", punch_time_three,IF(punch_time_three IS TRUE,IF(DATE_FORMAT(punch_time_three,'%H:%i:%S')>'14:00:00','杩熷埌','姝e父'),'鏈墦鍗�') result3 ");
-			sb.append(", punch_time_four,IF(punch_time_four IS TRUE,IF(DATE_FORMAT(punch_time_four,'%H:%i:%S')<'17:00:00','鏃╅��','姝e父'),'鏈墦鍗�') result4 ");
-		}else if (workTimeMethod==3) {
-			sb.append(", punch_time_three,IF(punch_time_three IS TRUE,IF(DATE_FORMAT(punch_time_three,'%H:%i:%S')>'14:00:00','杩熷埌','姝e父'),'鏈墦鍗�') result3 ");
-		}
-		
-		sb.append(" FROM product_oa_punch_record ");
-		sb.append(" WHERE DATE_FORMAT(created_utc_datetime,'%Y-%m')=? AND DATE_FORMAT(punch_time_one,'%Y-%m-%d') NOT IN(SELECT date_holiday FROM product_sys_company_holiday) ");
-		sb.append(" )a  ");
-		sb.append(" GROUP BY a.created_by,a.dept_uuid ");
-		sb.append(" )a ");
-		sb.append(" LEFT JOIN (SELECT user_id,sum(total_hours)total_hours FROM product_oa_work_overtime WHERE flow_flag=2 AND DATE_FORMAT(start_time,'%Y-%m')=? GROUP BY user_id)b  ");
-		sb.append(" ON a.created_by=b.user_id ");
-		sb.append(" LEFT JOIN ( ");
-		sb.append(" SELECT ");
-		sb.append(" created_by,sum(IF(leave_type=1,TRUE,0))casual_leave,sum(IF(leave_type=2,TRUE,0))medical_leave, ");
-		sb.append(" sum(IF(leave_type=9,TRUE,0))marriage_leave,sum(IF(leave_type=4,TRUE,0))paid_leave, ");
-		sb.append(" sum(IF(leave_type!=1 && leave_type!=2 && leave_type!=4 && leave_type!=9,TRUE,0))other_leave ");
-		sb.append(" FROM product_oa_ask_for_leave ");
-		sb.append(" WHERE DATE_FORMAT(start_time,'%Y-%m')=? ");
-		sb.append(" GROUP BY created_by ");
-		sb.append(" )c ");
-		sb.append(" ON a.created_by=c.created_by ");
-		sb.append(" ORDER BY dept_uuid,a.created_by ");
-		
-		return baseDao.listTable(sb.toString(), param.toArray());
+
+		return  dataTableEntity1;
+
 	}
+
+
+
+
 }
diff --git a/src/main/java/com/product/administration/service/ide/IConferenceManagerService.java b/src/main/java/com/product/administration/service/ide/IConferenceManagerService.java
index 5e81d26..a842460 100644
--- a/src/main/java/com/product/administration/service/ide/IConferenceManagerService.java
+++ b/src/main/java/com/product/administration/service/ide/IConferenceManagerService.java
@@ -1,7 +1,10 @@
 package com.product.administration.service.ide;
 
+import com.product.core.entity.DataTableEntity;
 import com.product.core.entity.FieldSetEntity;
 import com.product.core.exception.BaseException;
+
+import java.util.List;
 
 /**
  * 浼氳瀹ょ鐞�
@@ -29,4 +32,9 @@
 
     boolean delConferenceApply(FieldSetEntity fse)throws BaseException;
 
+    List getKbData(FieldSetEntity fse)throws  BaseException;
+
+    DataTableEntity  getMeetingDetails(FieldSetEntity fse)throws  BaseException;
+
+
 }
diff --git a/src/main/java/com/product/administration/service/ide/IEarlyWarningManager.java b/src/main/java/com/product/administration/service/ide/IEarlyWarningManager.java
index 2a9a4b6..67cd05c 100644
--- a/src/main/java/com/product/administration/service/ide/IEarlyWarningManager.java
+++ b/src/main/java/com/product/administration/service/ide/IEarlyWarningManager.java
@@ -7,30 +7,30 @@
 import com.product.core.exception.BaseException;
 
 public interface IEarlyWarningManager {
-	
+
 	/**
 	 * 	棰勮閰嶇疆鏂板
 	 * @param fse
 	 * @return
 	 */
 	String addWarning(FieldSetEntity fse) throws BaseException, SchedulerException, TaskException;
-	
+
 	/**
 	 * 	棰勮閰嶇疆淇敼
 	 * @param fse
 	 * @return
-	 * @throws TaskException 
-	 * @throws SchedulerException 
-	 * @throws BaseException 
+	 * @throws TaskException
+	 * @throws SchedulerException
+	 * @throws BaseException
 	 */
 	boolean updateWarning(FieldSetEntity fse) throws BaseException, SchedulerException, TaskException;
-	
+
 	/**
 	 * 	棰勮閰嶇疆鍒犻櫎
 	 * @param uuid
 	 * @return
-	 * @throws SchedulerException 
-	 * @throws BaseException 
+	 * @throws SchedulerException
+	 * @throws BaseException
 	 */
 	boolean deleteWarning(String uuid) throws BaseException, SchedulerException;
 
@@ -42,4 +42,10 @@
 	 * @throws BaseException
 	 */
 	boolean updateEarlyWarningTime(FieldSetEntity fse)throws BaseException, SchedulerException, TaskException;
+
+	/**
+	 * 杞彂
+	 * @param fse
+	 */
+	void transmit(FieldSetEntity fse);
 }

--
Gitblit v1.9.2