浏览代码

钉钉推送填报提醒消息

seyason 1 年之前
父节点
当前提交
75fff2acbe

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Department.java

@@ -58,13 +58,13 @@ public class Department extends Model<Department> {
     /**
     /**
      * 部门负责人id
      * 部门负责人id
      */
      */
-    @TableField(value = "manager_id", updateStrategy = FieldStrategy.IGNORED)
+    @TableField(value = "manager_id")
     private String managerId;
     private String managerId;
 
 
     /**
     /**
      * 日报导入审核人
      * 日报导入审核人
      */
      */
-    @TableField(value = "report_audit_userid", updateStrategy = FieldStrategy.IGNORED)
+    @TableField(value = "report_audit_userid")
     private String reportAuditUserid;
     private String reportAuditUserid;
 
 
 
 

+ 35 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -2051,6 +2051,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             log.setUserId(user.getId());
             log.setUserId(user.getId());
             log.setUserName(user.getName());
             log.setUserName(user.getName());
             log.setProjectName(pNames);
             log.setProjectName(pNames);
+            if (pNames.length() > 2000) {
+                log.setProjectName(pNames.substring(0, 2000));
+            }
             reportAuditLogMapper.insert(log);
             reportAuditLogMapper.insert(log);
             //员工的日期
             //员工的日期
             ReportAlogMembdate membdate = new ReportAlogMembdate();
             ReportAlogMembdate membdate = new ReportAlogMembdate();
@@ -2550,6 +2553,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             log.setUserId(user.getId());
             log.setUserId(user.getId());
             log.setUserName(user.getName());
             log.setUserName(user.getName());
             log.setProjectName(pNames);
             log.setProjectName(pNames);
+            if (pNames.length() > 2000) {
+                log.setProjectName(pNames.substring(0, 2000));
+            }
             reportAuditLogMapper.insert(log);
             reportAuditLogMapper.insert(log);
             //员工的日期
             //员工的日期
             ReportAlogMembdate membdate = new ReportAlogMembdate();
             ReportAlogMembdate membdate = new ReportAlogMembdate();
@@ -2843,6 +2849,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         log.setUserId(user.getId());
         log.setUserId(user.getId());
         log.setUserName(user.getName());
         log.setUserName(user.getName());
         log.setProjectName(pNames);
         log.setProjectName(pNames);
+        if (pNames.length() > 2000) {
+            log.setProjectName(pNames.substring(0, 2000));
+        }
         reportAuditLogMapper.insert(log);
         reportAuditLogMapper.insert(log);
         //员工的日期
         //员工的日期
         ReportAlogMembdate membdate = new ReportAlogMembdate();
         ReportAlogMembdate membdate = new ReportAlogMembdate();
@@ -3772,6 +3781,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             log.setResult(MessageUtils.message("profession.batchPass"));
             log.setResult(MessageUtils.message("profession.batchPass"));
             log.setUserId(user.getId());
             log.setUserId(user.getId());
             log.setUserName(user.getName());
             log.setUserName(user.getName());
+            if (s.length()>2000) {
+                s = s.substring(0, 2000);
+            }
             log.setProjectName(s);
             log.setProjectName(s);
             reportAuditLogMapper.insert(log);
             reportAuditLogMapper.insert(log);
 
 
@@ -3886,6 +3898,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         log.setUserId(user.getId());
         log.setUserId(user.getId());
         log.setUserName(user.getName());
         log.setUserName(user.getName());
         log.setProjectName(s);
         log.setProjectName(s);
+        if (s.length() > 2000) {
+            s = s.substring(0, 2000);
+        }
         reportAuditLogMapper.insert(log);
         reportAuditLogMapper.insert(log);
         List<Report> allReports = reportMapper.selectList(new QueryWrapper<Report>().in("id", ids));
         List<Report> allReports = reportMapper.selectList(new QueryWrapper<Report>().in("id", ids));
         saveDenyReportLog(allReports, user.getId(), user.getName(), reason);
         saveDenyReportLog(allReports, user.getId(), user.getName(), reason);
@@ -6080,9 +6095,22 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     public List<Map<String, Object>> getNotFullReportUserList(Integer companyId, LocalDate localStart, LocalDate localEnd) {
     public List<Map<String, Object>> getNotFullReportUserList(Integer companyId, LocalDate localStart, LocalDate localEnd) {
         List<Report> reportList  = reportMapper.selectList(new QueryWrapper<Report>().select("id,create_date,creator_id, state").eq("company_id", companyId).between("create_date", localStart, localEnd));
         List<Report> reportList  = reportMapper.selectList(new QueryWrapper<Report>().select("id,create_date,creator_id, state").eq("company_id", companyId).between("create_date", localStart, localEnd));
         List<User> allRangeUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId).eq("report_status",0));
         List<User> allRangeUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId).eq("report_status",0));
-
         List<Map<String, Object>> noReportDataList = new ArrayList<Map<String, Object>>();
         List<Map<String, Object>> noReportDataList = new ArrayList<Map<String, Object>>();
         long cnt = localStart.until(localEnd, ChronoUnit.DAYS);
         long cnt = localStart.until(localEnd, ChronoUnit.DAYS);
+        //判断用户注册的平台类型
+//        int platform = 0;
+//        if (allRangeUserList.size() > 0) {
+//            User user = allRangeUserList.get(0);
+//            if (user.getCorpwxUserid() != null) {
+//                platform = 1;
+//            } else if (user.getWxOpenid() != null) {
+//                platform = 2;
+//            } else if (user.getDingdingUserid() != null) {
+//                platform = 3;
+//            } else if (user.getFeishuUserid() != null) {
+//                platform = 4;
+//            }
+//        }
         //已驳回的数据
         //已驳回的数据
         //按人员过滤
         //按人员过滤
         for (User curUser: allRangeUserList){
         for (User curUser: allRangeUserList){
@@ -6105,14 +6133,18 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 if (!reportList.stream().anyMatch(item->item.getCreatorId().equals(curUser.getId())&&item.getCreateDate().isEqual(date)&&(item.getState() == 0 || item.getState() == 1))) {
                 if (!reportList.stream().anyMatch(item->item.getCreatorId().equals(curUser.getId())&&item.getCreateDate().isEqual(date)&&(item.getState() == 0 || item.getState() == 1))) {
                     HashMap map = new HashMap();
                     HashMap map = new HashMap();
                     map.put("corpwxUserid", curUser.getCorpwxUserid());
                     map.put("corpwxUserid", curUser.getCorpwxUserid());
+                    map.put("dingdingUserid", curUser.getDingdingUserid());
+                    map.put("wxOpenid", curUser.getWxOpenid());
+                    map.put("feishuUserid", curUser.getFeishuUserid());
+                    map.put("id", curUser.getId());
                     map.put("name", curUser.getName());
                     map.put("name", curUser.getName());
                     map.put("days", 1);
                     map.put("days", 1);
                     map.put("daysTxt", date.format(DateTimeFormatter.ofPattern("MM/dd")));
                     map.put("daysTxt", date.format(DateTimeFormatter.ofPattern("MM/dd")));
-                    if (!noReportDataList.stream().anyMatch(noItem->noItem.get("corpwxUserid").equals(curUser.getCorpwxUserid()))) {
+                    if (!noReportDataList.stream().anyMatch(noItem->noItem.get("id").equals(curUser.getId()))) {
                         noReportDataList.add(map);
                         noReportDataList.add(map);
                     } else {
                     } else {
                         //已经添加过了,需要更新天数
                         //已经添加过了,需要更新天数
-                        Optional<Map<String, Object>> optional = noReportDataList.stream().filter(data -> data.get("corpwxUserid").equals(curUser.getCorpwxUserid())).findFirst();
+                        Optional<Map<String, Object>> optional = noReportDataList.stream().filter(data -> data.get("id").equals(curUser.getId())).findFirst();
                         if (optional.isPresent()) {
                         if (optional.isPresent()) {
                             Map<String, Object> findUser = optional.get();
                             Map<String, Object> findUser = optional.get();
                             Object days = findUser.get("days");
                             Object days = findUser.get("days");

+ 28 - 19
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -1630,27 +1630,36 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                         }
                         }
                         //针对赛元微电子,请半天假的情况下。重新校正打卡和工作时长
                         //针对赛元微电子,请半天假的情况下。重新校正打卡和工作时长
                         if (corpInfo.getCorpid().equals("wpy9TkCAAAgNp4jvqxKTpXrhvwFvyFHg")) {
                         if (corpInfo.getCorpid().equals("wpy9TkCAAAgNp4jvqxKTpXrhvwFvyFHg")) {
-                            if ((morningLeave && afternoonLeave) || isWholeDayLeave) {
-                                ct.setAskLeaveTime(baseMorningWorkTime + baseAfternoonWorkTime);
+                            if (dtf.format(ct.getCreateDate()).equals("2024-02-09") ) {
+                                //硬编码,这天由于特殊情况,考勤有数据但是他们没有上班,需要修正为0
                                 ct.setWorkHours(0.0);
                                 ct.setWorkHours(0.0);
                                 ct.setCardTime(0.0);
                                 ct.setCardTime(0.0);
-                                ct.setStartTime(baseMorningStart);
-                                ct.setEndTime(baseAfternoonEnd);
-                                if (showLog) System.out.println("再次校正,全天请假");
-                            } else if (morningLeave){
-                                ct.setAskLeaveTime(baseMorningWorkTime);
-                                ct.setWorkHours(baseAfternoonWorkTime);
-                                ct.setCardTime(baseAfternoonWorkTime);
-                                ct.setStartTime(baseAfternoonStart);
-                                ct.setEndTime(baseAfternoonEnd);
-                                if (showLog) System.out.println("再次校正,上午请假");
-                            } else if (afternoonLeave) {
-                                ct.setAskLeaveTime(baseAfternoonWorkTime);
-                                ct.setWorkHours(baseMorningWorkTime);
-                                ct.setCardTime(baseMorningWorkTime);
-                                ct.setStartTime(baseMorningStart);
-                                ct.setEndTime(baseMorningEnd);
-                                if (showLog) System.out.println("再次校正,下午请假");
+                                ct.setStartTime("00:00");
+                                ct.setEndTime("00:00");
+                                ct.setAskLeaveTime(0.0);
+                            } else {
+                                if ((morningLeave && afternoonLeave) || isWholeDayLeave) {
+                                    ct.setAskLeaveTime(baseMorningWorkTime + baseAfternoonWorkTime);
+                                    ct.setWorkHours(0.0);
+                                    ct.setCardTime(0.0);
+                                    ct.setStartTime(baseMorningStart);
+                                    ct.setEndTime(baseAfternoonEnd);
+                                    if (showLog) System.out.println("再次校正,全天请假");
+                                } else if (morningLeave){
+                                    ct.setAskLeaveTime(baseMorningWorkTime);
+                                    ct.setWorkHours(baseAfternoonWorkTime);
+                                    ct.setCardTime(baseAfternoonWorkTime);
+                                    ct.setStartTime(baseAfternoonStart);
+                                    ct.setEndTime(baseAfternoonEnd);
+                                    if (showLog) System.out.println("再次校正,上午请假");
+                                } else if (afternoonLeave) {
+                                    ct.setAskLeaveTime(baseAfternoonWorkTime);
+                                    ct.setWorkHours(baseMorningWorkTime);
+                                    ct.setCardTime(baseMorningWorkTime);
+                                    ct.setStartTime(baseMorningStart);
+                                    ct.setEndTime(baseMorningEnd);
+                                    if (showLog) System.out.println("再次校正,下午请假");
+                                }
                             }
                             }
                         }
                         }
                     }
                     }

+ 15 - 38
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -1400,47 +1400,16 @@ public class TimingTask {
                         LocalDate endDate = localDate.minusMonths(1).with(TemporalAdjusters.lastDayOfMonth());
                         LocalDate endDate = localDate.minusMonths(1).with(TemporalAdjusters.lastDayOfMonth());
                         userList = reportService.getNotFullReportUserList(company.getId(), startDate, endDate);
                         userList = reportService.getNotFullReportUserList(company.getId(), startDate, endDate);
                     }
                     }
+                } else if (t.getAlertType() == 4) {
+                    //4--每周提醒上周漏填
+                    LocalDate lastSunday = localDate.with(DayOfWeek.SUNDAY).minusWeeks(1);
+                    LocalDate lastMonday = lastSunday.minusDays(6);
+                    userList = reportService.getNotFullReportUserList(company.getId(), lastMonday, lastSunday);
+                    System.out.println("用户数量="+userList.size());
+                    lastWeekNotFill = true;
                 }
                 }
                 List<WxCorpInfo> cpList = wxCorpInfoMapper.selectList(new QueryWrapper<WxCorpInfo>().eq("company_id", t.getCompanyId()));
                 List<WxCorpInfo> cpList = wxCorpInfoMapper.selectList(new QueryWrapper<WxCorpInfo>().eq("company_id", t.getCompanyId()));
                 final boolean finalLastWeekNotFill = lastWeekNotFill;
                 final boolean finalLastWeekNotFill = lastWeekNotFill;
-//                userList.forEach(u->{
-//                    if (u.get("corpwxUserid") != null){
-//                        //推送到企业微信
-//                        String corpUid = (String) u.get("corpwxUserid");
-//                        JSONObject json=new JSONObject();
-//                        JSONArray dataJson = new JSONArray();
-//                        JSONObject jsonObj = new JSONObject();
-//                        jsonObj.put("key", "提示");
-//                        if (t.getAlertType() == 3) {
-//                            //每月提醒上个月的
-//                            if ((Integer)u.get("days") > 3) {
-//                                jsonObj.put("value", "您上个月有"+u.get("daysTxt")+"...共"+(Integer)u.get("days")+"天未填写工时报告,请尽快填写");
-//                            } else {
-//                                jsonObj.put("value", "您上个月有"+u.get("daysTxt")+"共"+(Integer)u.get("days")+"天未填写工时报告,请尽快填写");
-//                            }
-//                        } else {
-//                            if (finalLastWeekNotFill) {
-//                                jsonObj.put("value", "您上周有"+(Integer)u.get("days")+"天未填写工时报告,请尽快填写");
-//                            } else {
-//                                jsonObj.put("value", StringUtils.isEmpty(t.getAlertMsg())?"":t.getAlertMsg());
-//                            }
-//                        }
-//                        dataJson.add(jsonObj);
-//                        if(isPrivateDeploy){
-//                            json.put("content",StringUtils.isEmpty(t.getAlertMsg())?"":t.getAlertMsg()+"\\n<a href=\\\"https://open.weixin.qq.com/connect/oauth2/authorize?appid="+suitId+"&redirect_uri="+pcUrl+"/api/corpInsideWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect\\\">去填写</a>");
-//                        }else {
-//                            json.put("template_id","tty9TkCAAAYoevY-40ciWD5lDncDfR5w");
-//                            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=0#wechat_redirect");
-//                            json.put("content_item",dataJson);
-//                        }
-//                        if (cpList.size() > 0) {
-////                            System.out.println("发送企业微信漏填提醒:" + LocalDateTime.now().toString() + ", corpUid=" + corpUid + ", json=" + json.toJSONString());
-//                            wxCorpInfoService.sendWXCorpTemplateMsg(cpList.get(0), corpUid, json);
-//                        }
-//                    } else if (u.get("wxOpenid") != null) {
-//                        push(u, t.getAlertMsg());
-//                    }
-//                });
                 //今天或者明天统一提醒,提醒内容大家都一样
                 //今天或者明天统一提醒,提醒内容大家都一样
                 if (t.getAlertType() == 0 || t.getAlertType() == 1) {
                 if (t.getAlertType() == 0 || t.getAlertType() == 1) {
                     //判断是企业微信用户还是微信用户
                     //判断是企业微信用户还是微信用户
@@ -1514,6 +1483,13 @@ public class TimingTask {
                             push(u, t.getAlertMsg());
                             push(u, t.getAlertMsg());
                         }
                         }
                     });
                     });
+                    //针对钉钉发送提醒
+                    if (userList.size() > 0 && userList.get(0).get("dingdingUserid") != null) {
+                        CompanyDingding compDingding = companyDingdingMapper.selectOne(new QueryWrapper<CompanyDingding>().eq("company_id", t.getCompanyId()));
+                        String idStr = userList.stream().map(u -> (String) u.get("dingdingUserid")).collect(Collectors.joining(","));
+                        //TODO: 批量发送,最大支持1000个用户Id. 多的话需要分批发送; 目前尚无这么大的数据量
+                        companyDingdingService.sendFillReportAlertMsg(t.getCompanyId(), compDingding.getAgentId(), t.getAlertMsg(), idStr);
+                    }
                 }
                 }
 
 
             }
             }
@@ -1521,6 +1497,7 @@ public class TimingTask {
         if (isDev) {
         if (isDev) {
             return;
             return;
         }
         }
+        //针对钉钉提醒类型是0或者1的情况,发送提醒。(当天提醒或者今天提醒昨天漏填)
         List<Map<String, Object>> dingdingUserList = userMapper.getPushDingdingUserList(str, date);
         List<Map<String, Object>> dingdingUserList = userMapper.getPushDingdingUserList(str, date);
         //钉钉平台的用批量发送, 每分钟5000个
         //钉钉平台的用批量发送, 每分钟5000个
         int minuteSize = 5000;
         int minuteSize = 5000;