Browse Source

Merge branch 'master' of http://47.100.37.243:10191/wutt/manHourHousekeeper

Min 11 tháng trước cách đây
mục cha
commit
4a99c2539c

+ 19 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java

@@ -17,7 +17,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2024-03-26
+ * @since 2024-06-06
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -297,7 +297,7 @@ public class TimeType extends Model<TimeType> {
     private Integer mainProjectState;
 
     /**
-     * 日报的审核类型, 0-项目审核人审核,1-分组负责人审核,2-先分组负责人审核再项目负责人(PM)审核;3-员工自由选择审批人 4-项目所属BU审核 5-直属审核人或部门负责人审核,6-直属或部门负责人审核->项目日报审核人审核
+     * 日报的审核类型, 0-项目审核人审核,1-分组负责人审核,2-先分组负责人审核再项目负责人(PM)审核;3-员工自由选择审批人 4-项目所属BU审核 5-直属审核人或部门负责人审核,6-直属或部门负责人审核->项目日报审核人审核,7-项目和部门并行审核
      */
     @TableField("report_audit_type")
     private Integer reportAuditType;
@@ -560,6 +560,12 @@ public class TimeType extends Model<TimeType> {
     @TableField("hide_subproject")
     private Integer hideSubproject;
 
+    /**
+     * 开启日报审批流的本部门负责人由上级部门负责人审核
+     */
+    @TableField("report_audit_flow_enable_super_dept_aduit")
+    private Integer reportAuditFlowEnableSuperDeptAduit;
+
     /**
      * 是否开启设置可填报部门 0-否 1-是
      */
@@ -567,10 +573,17 @@ public class TimeType extends Model<TimeType> {
     private Integer userWithMultiDept;
 
     /**
-     * 开启日报审批流的本部门负责人由上级部门负责人审核
+     * 提醒审核日,默认周一
      */
-    @TableField("report_audit_flow_enable_super_dept_aduit")
-    private Integer reportAuditFlowEnableSuperDeptAduit;
+    @TableField("alert_check_day")
+    private Integer alertCheckDay;
+
+    /**
+     * 提醒审核的文字消息
+     */
+    @TableField("alert_check_msg")
+    private String alertCheckMsg;
+
 
     @TableField(exist = false)
     private List<User> userList;
@@ -579,6 +592,7 @@ public class TimeType extends Model<TimeType> {
     @TableField(exist = false)
     private Integer saasSyncContact;
 
+
     @Override
     protected Serializable pkVal() {
         return this.companyId;

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportMapper.java

@@ -218,4 +218,5 @@ public interface ReportMapper extends BaseMapper<Report> {
     void denyReportWithUserAndCreateDate(String userId, String createDate);
 
     List<Map<String, Object>> getUserDailyWorkTimeReminder(Integer companyId,String startDate, String endDate,@Param("list") List<Integer> deptIds,Integer deptId,String leaderId);
+
 }

+ 196 - 73
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -936,90 +936,205 @@ public class TimingTask {
     private void alertWaitingApprove() {
         if (isDev) return;
         LocalDateTime now = LocalDateTime.now();
-        DateTimeFormatter df=DateTimeFormatter.ofPattern("HH:mm");
+        DateTimeFormatter df = DateTimeFormatter.ofPattern("HH:mm");
         List<TimeType> timeTypeList = timeTypeMapper.selectList(new QueryWrapper<TimeType>().eq("wait_check_alert_time", df.format(now.toLocalTime())));
         List<Integer> companyIds = timeTypeList.stream().map(TimeType::getCompanyId).distinct().collect(Collectors.toList());
         companyIds.add(-1);
         List<CompanyDingding> list = companyDingdingMapper.getDingdingCompanyList(companyIds);
         for (CompanyDingding companyDingding : list) {
-            List<Map<String, Object>> result = reportMapper.getProWaitingApproveCnt(companyDingding.getCompanyId());
-            List<Map<String, Object>> result1 = reportMapper.getDeptWaitingApproveCnt(companyDingding.getCompanyId());
-            List<Object> resultCorpwxUserIds = result.stream().map(rl -> rl.get("auditorDDId")).collect(Collectors.toList());
-            for (Map<String, Object> map : result) {
-                Optional<Map<String, Object>> first = result1.stream().filter(r1 -> r1.get("auditorDDId") != null && r1.get("auditorDDId").equals(map.get("auditorDDId"))).findFirst();
-                Long num = Long.valueOf(String.valueOf(map.get("num")));
-                BigDecimal bigDecimal=new BigDecimal(num);
-                if(first.isPresent()){
-                    bigDecimal=bigDecimal.add(new BigDecimal(String.valueOf(first.get().get("num"))));
-                }
-                companyDingdingService.sendReportWaitingApplyMsg(companyDingding.getCompanyId(), companyDingding.getAgentId(),
-                        bigDecimal.longValue(), (String)map.get("auditorDDId"));
+            //发送推送提醒
+            Integer companyId = companyDingding.getCompanyId();
+            Company company = companyMapper.selectById(companyId);
+            //过期公司不提醒
+            if(company.getExpirationDate().isBefore(LocalDateTime.now())){
+                continue;
             }
-            for (Map<String, Object> map : result1) {
-                if(!resultCorpwxUserIds.stream().anyMatch(ol->ol != null && ((String)ol).equals(map.get("auditorDDId")))){
-                    Long num = Long.valueOf(String.valueOf(map.get("num")));
-                    BigDecimal bigDecimal=new BigDecimal(num);
-                    companyDingdingService.sendReportWaitingApplyMsg(companyDingding.getCompanyId(), companyDingding.getAgentId(),
-                            bigDecimal.longValue(), (String)map.get("auditorDDId"));
+            //判断日报审核类型
+            timeTypeList.stream().filter(timeType -> timeType.getCompanyId().equals(companyId)).findFirst().ifPresent(timeType -> {
+                if (timeType.getReportAuditType() == 7) {//并行审核模式
+                    List<User> userList = userMapper.selectList(new QueryWrapper<User>().select("id,dingding_userid", "corpwx_userid").eq("company_id", companyId));
+                    List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().select("id, project_auditor_id, audit_dept_managerid,project_audit_state,department_audit_state").eq("company_id", companyId).eq("state", 0));
+                    HashMap<String, Long> auditorMap = new HashMap();
+                    for (Report report : reportList) {
+                        //按审核人汇总统计
+                        String pAuditorId = null;
+                        if (report.getProjectAuditState() == 0) {
+                            pAuditorId = report.getProjectAuditorId();
+                            if (auditorMap.get(pAuditorId) == null) {
+                                auditorMap.put(pAuditorId, 1L);
+                            } else {
+                                auditorMap.put(pAuditorId, auditorMap.get(pAuditorId) + 1);
+                            }
+                        }
+                        String deptAuditorId = null;
+                        if (report.getDepartmentAuditState() == 0) {
+                            deptAuditorId = report.getAuditDeptManagerid();
+                            if (!deptAuditorId.equals(pAuditorId)) {
+                                //不是同一个人,需要单独统计
+                                if (auditorMap.get(deptAuditorId) == null) {
+                                    auditorMap.put(deptAuditorId, 1L);
+                                } else {
+                                    auditorMap.put(deptAuditorId, auditorMap.get(deptAuditorId) + 1);
+                                }
+                            }
+                        }
+                    }
+                    for (Map.Entry<String, Long> entry : auditorMap.entrySet()) {
+                        String auditorId = entry.getKey();
+                        Long num = entry.getValue();
+                        Optional<User> first = userList.stream().filter(ul -> ul.getId().equals(auditorId)).findFirst();
+                        if (first.isPresent()) {
+                            companyDingdingService.sendReportWaitingApplyMsg(companyId, companyDingding.getAgentId(), num, first.get().getDingdingUserid());
+                        }
+                    }
+                } else {
+                    List<Map<String, Object>> result = reportMapper.getProWaitingApproveCnt(companyDingding.getCompanyId());
+                    List<Map<String, Object>> result1 = reportMapper.getDeptWaitingApproveCnt(companyDingding.getCompanyId());
+                    List<Object> resultCorpwxUserIds = result.stream().map(rl -> rl.get("auditorDDId")).collect(Collectors.toList());
+                    for (Map<String, Object> map : result) {
+                        Optional<Map<String, Object>> first = result1.stream().filter(r1 -> r1.get("auditorDDId") != null && r1.get("auditorDDId").equals(map.get("auditorDDId"))).findFirst();
+                        Long num = Long.valueOf(String.valueOf(map.get("num")));
+                        BigDecimal bigDecimal=new BigDecimal(num);
+                        if(first.isPresent()){
+                            bigDecimal=bigDecimal.add(new BigDecimal(String.valueOf(first.get().get("num"))));
+                        }
+                        companyDingdingService.sendReportWaitingApplyMsg(companyId, companyDingding.getAgentId(),
+                                bigDecimal.longValue(), (String)map.get("auditorDDId"));
+                    }
+                    for (Map<String, Object> map : result1) {
+                        if(!resultCorpwxUserIds.stream().anyMatch(ol->ol != null && ((String)ol).equals(map.get("auditorDDId")))){
+                            Long num = Long.valueOf(String.valueOf(map.get("num")));
+                            BigDecimal bigDecimal=new BigDecimal(num);
+                            companyDingdingService.sendReportWaitingApplyMsg(companyId, companyDingding.getAgentId(),
+                                    bigDecimal.longValue(), (String)map.get("auditorDDId"));
+                        }
+                    }
                 }
-            }
+            });
         }
         List<WxCorpInfo> wxCorpInfoList = wxCorpInfoMapper.getWxCompanyList(companyIds);
         for (WxCorpInfo wxCorpInfo : wxCorpInfoList) {
             if (wxCorpInfo!=null) {
-                List<Map<String, Object>> result = reportMapper.getProWaitingApproveCnt(wxCorpInfo.getCompanyId());
-                List<Map<String, Object>> result1 = reportMapper.getDeptWaitingApproveCnt(wxCorpInfo.getCompanyId());
-                List<Object> resultCorpwxUserIds = result.stream().map(rl -> rl.get("corpwxUserid")).collect(Collectors.toList());
-                for (Map<String, Object> map : result) {
-                    Optional<Map<String, Object>> first = result1.stream().filter(r1 -> r1.get("corpwxUserid") != null && r1.get("corpwxUserid").equals(map.get("corpwxUserid"))).findFirst();
-                    if(map.get("corpwxUserid")!=null){
-                    String corpwxUserid = (String) map.get("corpwxUserid");
-                    //推送到企业微信
-                    JSONObject json=new JSONObject();
-                    JSONArray dataJson=new JSONArray();
-                    JSONObject jsonObj=new JSONObject();
-                    Integer num = Integer.valueOf(String.valueOf(map.get("num")));
-                    BigDecimal bigDecimal=new BigDecimal(num);
-                    if(first.isPresent()){
-                        bigDecimal=bigDecimal.add(new BigDecimal(String.valueOf(first.get().get("num"))));
-                    }
-                    jsonObj.put("key", "待审核数量");
-                    jsonObj.put("value",bigDecimal.toPlainString());
-                    dataJson.add(jsonObj);
-                    if(isPrivateDeploy){
-                        json.put("content","待审核数量: "+(bigDecimal.toPlainString())+"\\n<a href=\\\"https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri="+pcUrl+"/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect\\\">去审核</a>");
-                    }else {
-                        json.put("template_id","tty9TkCAAAuPvPjabDdQXGocnG0K24EQ");
-                        json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=review#wechat_redirect");
-                        json.put("content_item",dataJson);
-                    }
-                    wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfo, corpwxUserid, json);
-                    }
+                //发送推送提醒
+                Company company = companyMapper.selectById(wxCorpInfo.getCompanyId());
+                Integer companyId = company.getId();
+                //过期公司不提醒
+                if(company.getExpirationDate().isBefore(LocalDateTime.now())){
+                    continue;
                 }
-                for (Map<String, Object> map : result1) {
-                    if(!resultCorpwxUserIds.stream().anyMatch(ol->ol != null && ((String)ol).equals(map.get("corpwxUserid")))){
-                        if(map.get("corpwxUserid")!=null){
-                            String corpwxUserid = (String) map.get("corpwxUserid");
-                            //推送到企业微信
-                            JSONObject json=new JSONObject();
-                            JSONArray dataJson=new JSONArray();
-                            JSONObject jsonObj=new JSONObject();
-                            Integer num = Integer.valueOf(String.valueOf(map.get("num")));
-                            BigDecimal bigDecimal=new BigDecimal(num);
-                            jsonObj.put("key", "待审核数量");
-                            jsonObj.put("value",bigDecimal.toPlainString());
-                            dataJson.add(jsonObj);
-                            if(isPrivateDeploy){
-                                json.put("content","待审核数量: "+(bigDecimal.toPlainString())+"\\n<a href=\\\"https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri="+pcUrl+"/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect\\\">去审核</a>");
-                            }else {
-                                json.put("template_id","tty9TkCAAAuPvPjabDdQXGocnG0K24EQ");
-                                json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=review#wechat_redirect");
-                                json.put("content_item",dataJson);
+                //判断日报审核类型
+                timeTypeList.stream().filter(timeType -> timeType.getCompanyId().equals(companyId)).findFirst().ifPresent(timeType -> {
+                    if (timeType.getReportAuditType() == 7) {//并行审核模式
+                        List<User> userList = userMapper.selectList(new QueryWrapper<User>().select("id,dingding_userid", "corpwx_userid").eq("company_id", companyId));
+                        List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().select("id, project_auditor_id, audit_dept_managerid,project_audit_state,department_audit_state").eq("company_id", companyId).eq("state", 0));
+                        HashMap<String, Long> auditorMap = new HashMap();
+                        for (Report report : reportList) {
+                            //按审核人汇总统计
+                            String pAuditorId = null;
+                            if (report.getProjectAuditState() == 0) {
+                                pAuditorId = report.getProjectAuditorId();
+                                if (auditorMap.get(pAuditorId) == null) {
+                                    auditorMap.put(pAuditorId, 1L);
+                                } else {
+                                    auditorMap.put(pAuditorId, auditorMap.get(pAuditorId) + 1);
+                                }
+                            }
+                            String deptAuditorId = null;
+                            if (report.getDepartmentAuditState() == 0) {
+                                deptAuditorId = report.getAuditDeptManagerid();
+                                if (!deptAuditorId.equals(pAuditorId)) {
+                                    //不是同一个人,需要单独统计
+                                    if (auditorMap.get(deptAuditorId) == null) {
+                                        auditorMap.put(deptAuditorId, 1L);
+                                    } else {
+                                        auditorMap.put(deptAuditorId, auditorMap.get(deptAuditorId) + 1);
+                                    }
+                                }
+                            }
+                        }
+                        for (Map.Entry<String, Long> entry : auditorMap.entrySet()) {
+                            String auditorId = entry.getKey();
+                            Long num = entry.getValue();
+                            Optional<User> first = userList.stream().filter(ul -> ul.getId().equals(auditorId)).findFirst();
+                            if (first.isPresent()) {
+                                if (first.get().getCorpwxUserid() != null) {
+                                    String corpwxUserid = first.get().getCorpwxUserid();
+                                    //推送到企业微信
+                                    JSONObject json=new JSONObject();
+                                    JSONArray dataJson=new JSONArray();
+                                    JSONObject jsonObj=new JSONObject();
+                                    jsonObj.put("key", "待审核数量");
+                                    jsonObj.put("value",num+"");
+                                    dataJson.add(jsonObj);
+                                    if(isPrivateDeploy){
+                                        json.put("content","待审核数量: "+num+"\\n<a href=\\\"https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri="+pcUrl+"/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect\\\">去审核</a>");
+                                    }else {
+                                        json.put("template_id","tty9TkCAAAuPvPjabDdQXGocnG0K24EQ");
+                                        json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=review#wechat_redirect");
+                                        json.put("content_item",dataJson);
+                                    }
+//                                    System.out.println("发送企业微信消息==用户:"+first.get().getId()+", name="+first.get().getName()+", "+json.toJSONString());
+                                    wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfo, corpwxUserid, json);
+                                }
+                            }
+                        }
+                    } else {
+                        List<Map<String, Object>> result = reportMapper.getProWaitingApproveCnt(wxCorpInfo.getCompanyId());
+                        List<Map<String, Object>> result1 = reportMapper.getDeptWaitingApproveCnt(wxCorpInfo.getCompanyId());
+                        List<Object> resultCorpwxUserIds = result.stream().map(rl -> rl.get("corpwxUserid")).collect(Collectors.toList());
+                        for (Map<String, Object> map : result) {
+                            Optional<Map<String, Object>> first = result1.stream().filter(r1 -> r1.get("corpwxUserid") != null && r1.get("corpwxUserid").equals(map.get("corpwxUserid"))).findFirst();
+                            if(map.get("corpwxUserid")!=null){
+                                String corpwxUserid = (String) map.get("corpwxUserid");
+                                //推送到企业微信
+                                JSONObject json=new JSONObject();
+                                JSONArray dataJson=new JSONArray();
+                                JSONObject jsonObj=new JSONObject();
+                                Integer num = Integer.valueOf(String.valueOf(map.get("num")));
+                                BigDecimal bigDecimal=new BigDecimal(num);
+                                if(first.isPresent()){
+                                    bigDecimal=bigDecimal.add(new BigDecimal(String.valueOf(first.get().get("num"))));
+                                }
+                                jsonObj.put("key", "待审核数量");
+                                jsonObj.put("value",bigDecimal.toPlainString());
+                                dataJson.add(jsonObj);
+                                if(isPrivateDeploy){
+                                    json.put("content","待审核数量: "+(bigDecimal.toPlainString())+"\\n<a href=\\\"https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri="+pcUrl+"/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect\\\">去审核</a>");
+                                }else {
+                                    json.put("template_id","tty9TkCAAAuPvPjabDdQXGocnG0K24EQ");
+                                    json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=review#wechat_redirect");
+                                    json.put("content_item",dataJson);
+                                }
+                                wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfo, corpwxUserid, json);
+                            }
+                        }
+                        for (Map<String, Object> map : result1) {
+                            if(!resultCorpwxUserIds.stream().anyMatch(ol->ol != null && ((String)ol).equals(map.get("corpwxUserid")))){
+                                if(map.get("corpwxUserid")!=null){
+                                    String corpwxUserid = (String) map.get("corpwxUserid");
+                                    //推送到企业微信
+                                    JSONObject json=new JSONObject();
+                                    JSONArray dataJson=new JSONArray();
+                                    JSONObject jsonObj=new JSONObject();
+                                    Integer num = Integer.valueOf(String.valueOf(map.get("num")));
+                                    BigDecimal bigDecimal=new BigDecimal(num);
+                                    jsonObj.put("key", "待审核数量");
+                                    jsonObj.put("value",bigDecimal.toPlainString());
+                                    dataJson.add(jsonObj);
+                                    if(isPrivateDeploy){
+                                        json.put("content","待审核数量: "+(bigDecimal.toPlainString())+"\\n<a href=\\\"https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri="+pcUrl+"/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect\\\">去审核</a>");
+                                    }else {
+                                        json.put("template_id","tty9TkCAAAuPvPjabDdQXGocnG0K24EQ");
+                                        json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=review#wechat_redirect");
+                                        json.put("content_item",dataJson);
+                                    }
+                                    wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfo, corpwxUserid, json);
+                                }
                             }
-                            wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfo, corpwxUserid, json);
                         }
                     }
-                }
+                });
+
             }
         }
     }
@@ -1341,7 +1456,7 @@ public class TimingTask {
             if (str.equals(t.getAlertTime())) {
                 //节假日是否提醒
                 Boolean workDay = timeTypeService.isWorkDay(t.getCompanyId(), localDate);
-                if (!workDay){
+                if ((t.getAlertType() == 0 || t.getAlertType() == 1) && !workDay){
                     return;
                 }
                 //发送推送提醒
@@ -1455,6 +1570,9 @@ public class TimingTask {
                         if (u.get("corpwxUserid") != null){
                             //推送到企业微信
                             String corpUid = (String) u.get("corpwxUserid");
+                            if ("woy9TkCAAAyVAc5oXhGwCO-DFWF8SfKg".equals(corpUid)){
+                                System.out.println("发送给 【顾焕峰】漏填提醒");
+                            }
                             JSONObject json=new JSONObject();
                             JSONArray dataJson = new JSONArray();
                             JSONObject jsonObj = new JSONObject();
@@ -1468,7 +1586,13 @@ public class TimingTask {
                                 }
                             } else {
                                 if (finalLastWeekNotFill) {
-                                    jsonObj.put("value", "您上周有"+(Integer)u.get("days")+"天未填写工时报告,请尽快填写");
+                                    String text = null;
+                                    if (!StringUtils.isEmpty(t.getAlertMsg()) && t.getAlertMsg().contains("{0}")) {
+                                        text = t.getAlertMsg().replace("{0}", u.get("daysTxt").toString());
+                                    } else {
+                                        text = "您上周有"+(Integer)u.get("days")+"天未填写工时报告,请尽快填写";
+                                    }
+                                    jsonObj.put("value", text);
                                 } else {
                                     jsonObj.put("value", StringUtils.isEmpty(t.getAlertMsg())?"":t.getAlertMsg());
                                 }
@@ -1482,7 +1606,7 @@ public class TimingTask {
                                 json.put("content_item",dataJson);
                             }
                             if (cpList.size() > 0) {
-//                            System.out.println("发送企业微信漏填提醒:" + LocalDateTime.now().toString() + ", corpUid=" + corpUid + ", json=" + json.toJSONString());
+                                System.out.println("发送企业微信漏填提醒:" + LocalDateTime.now().toString() + ", corpUid=" + corpUid + ", json=" + json.toJSONString());
                                 wxCorpInfoService.sendWXCorpTemplateMsg(cpList.get(0), corpUid, json);
                             }
                         } else if (u.get("wxOpenid") != null) {
@@ -1497,7 +1621,6 @@ public class TimingTask {
                         companyDingdingService.sendFillReportAlertMsg(t.getCompanyId(), compDingding.getAgentId(), t.getAlertMsg(), idStr);
                     }
                 }
-
             }
         });
         if (isDev) {

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml

@@ -980,7 +980,7 @@
     </select>
     <select id="getDeptWaitingApproveCnt" resultType="java.util.HashMap">
         select COUNT(1) as num, user.dingding_userid as auditorDDId ,user.corpwx_userid as corpwxUserid from report
-                                                                                                                 left join `user` on `user`.id = audit_dept_managerid
+        left join `user` on `user`.id = audit_dept_managerid
         where state = 0 and department_audit_state = 0 and is_dept_audit = 1
           and report.company_id =#{companyId}
           and `user`.is_active=1

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml