Forráskód Böngészése

考勤异常工时提醒

QuYueTing 3 napja
szülő
commit
f9be7ac3e3

+ 5 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -3095,6 +3095,11 @@ public class ReportController {
         return reportService.changeReminder(request,createDate,userId,startDate,endDate);
     }
 
+    @RequestMapping("/rejectAbnormalReportTime")
+    public HttpRespMsg rejectAbnormalReportTime(String ymonth) throws Exception {
+        return reportService.rejectAbnormalReportTime(request,ymonth);
+    }
+
     @RequestMapping("/cancelReminder")
     public HttpRespMsg cancelReminder(String createDate,String userId) throws Exception {
         return reportService.cancelReminder(request,createDate,userId);

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java

@@ -177,4 +177,5 @@ public interface ReportService extends IService<Report> {
 
     void checkAndAlertFVReportTimeLessThanCardTimeList(LocalDate startDate, LocalDate endDate, Integer companyId);
 
+    HttpRespMsg rejectAbnormalReportTime(HttpServletRequest request, String ymonth);
 }

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -2337,7 +2337,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         List<User> userList = userMapper.selectList(new QueryWrapper<User>().in("id", auditorIds));
                         System.out.println("有auditor===");
                         List<User> newUserList = userList.stream()
-                                .filter(u->!oldAuditorList.stream().anyMatch(old->old.getAuditorId().equals(u.getId())))
+                                .filter(u->!oldAuditorList.stream().anyMatch(old->u.getId().equals(old.getAuditorId())))
                                 .collect(Collectors.toList());
                         if (newUserList.size() > 0) {
                             for (User u : newUserList) {

+ 78 - 17
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -10889,6 +10889,70 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         }
     }
 
+    @Override
+    public HttpRespMsg rejectAbnormalReportTime(HttpServletRequest request, String ymonth) {
+        HttpRespMsg msg=new HttpRespMsg();
+        DateTimeFormatter df =DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        User operator = userMapper.selectById(request.getHeader("token"));
+        Integer companyId = operator.getCompanyId();
+        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, companyId));
+        List<Information> informationList = new ArrayList<>();
+        LocalDate firstDay = LocalDate.parse(ymonth + "-01");
+        LocalDate lastDay = firstDay.with(TemporalAdjusters.lastDayOfMonth());
+        List<Map<String, Object>> exceedCardTimeList = getReportTimeLessThanCardTimeList(firstDay,lastDay,null,null, companyId, false);
+        if(exceedCardTimeList.size()>0){
+            exceedCardTimeList.forEach(e->{
+                Information information=new Information();
+                String curUserid = String.valueOf(e.get("userId"));
+                String date = String.valueOf(e.get("createDate"));
+                String userName = String.valueOf(e.get("name"));
+                information.setUserId(curUserid);
+                information.setTime(LocalDateTime.now());
+                information.setContent(date);
+                information.setType(0);
+                String reason = "您在"+date+"的日报工时与考勤不一致,请修改后提交";
+                information.setMsg(reason);
+                informationList.add(information);
+
+                //查询出日报
+                List<Report> rList = reportMapper.selectList(new QueryWrapper<Report>().eq("create_date", date).eq("creator_id", curUserid));
+                if (rList.size() > 0) {
+                    //审批流里面增加驳回的记录
+                    ReportAuditLog log = new ReportAuditLog();
+                    log.setAuditChannel(1);
+                    log.setCompanyId(companyId);
+                    //log.setResult("驳回"+(StringUtils.isEmpty(reason)?"":"("+reason+")"));
+                    log.setResult(MessageUtils.message("stages.reject")+(StringUtils.isEmpty(reason)?"":"("+reason+")"));
+                    log.setUserId(operator.getId());
+                    log.setUserName(operator.getName());
+                    reportAuditLogMapper.insert(log);
+                    //员工的日期
+                    ReportAlogMembdate membdate = new ReportAlogMembdate();
+                    membdate.setRlogId(log.getId());
+                    membdate.setState(2);//驳回
+                    membdate.setCreateDate(LocalDate.parse(date,df));
+                    membdate.setUserId(curUserid);
+                    membdate.setUserName(userName);
+                    reportAlogMembdateMapper.insert(membdate);
+                    saveDenyReportLog(rList, curUserid, userName, reason);
+
+                    //todo: 增加客户操作记录
+                    reportMapper.denyReportWithUserAndCreateDate(String.valueOf(e.get("userId")),String.valueOf(e.get("createDate")), operator.getId(), operator.getName(), reason);
+                }
+
+                //发送企业微信消息
+                if(wxCorpInfo!=null&&e.get("corpwxUserId")!=null){
+                    wxCorpInfoService.sendWXCorpMsg(wxCorpInfo,String.valueOf(e.get("corpwxUserId")), reason, null, WxCorpInfoServiceImpl.TEXT_CARD_MSG_REPORT_ABNOEMAL);
+                }
+            });
+        }
+        if(informationList.size()>0){
+            informationService.saveBatch(informationList);
+        }
+        msg.setMsg("考勤异常日报已驳回并发送消息提醒");
+        return msg;
+    }
+
     @Override
     public List<Map<String, Object>> getReportTimeLessThanCardTimeList(LocalDate firstDay, LocalDate lastDay, Integer deptId, String userId, Integer companyId, boolean getAll) {
         //获取自己的考勤未填满的记录
@@ -11104,6 +11168,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     Map<String, Object> map = new HashMap<>();
                     if (targetUser != null) {
                         map.put("userId", targetUser.getId());
+                        map.put("corpwxUserId", targetUser.getCorpwxUserid());
                     }
                     map.put("name", corpwxTime.getName());
                     map.put("createDate", dateTimeFormatter.format(corpwxTime.getCreateDate()));
@@ -11130,27 +11195,22 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             break;
                         }
                     }
-                }
-
-                if (!isMatch) {
-                    Map<String, Object> map = new HashMap<>();
-                    map.put("userId", fvTime.getUserId());
-                    map.put("name", fvTime.getName());
-                    map.put("createDate", dateTimeFormatter.format(fvTime.getWorkDate()));
-                    map.put("workHours", fvTime.getWorkHours());
-                    map.put("reportTime", reportTime);
-                    if (fvTime.getProcinstId() != null && fvTime.getProcinstId().startsWith("bustrip")) {
-                        map.put("isBusTrip", true);
+                    if (!isMatch) {
+                        Map<String, Object> map = new HashMap<>();
+                        map.put("userId", fvTime.getUserId());
+                        map.put("corpwxUserId", targetUser.getCorpwxUserid());
+                        map.put("name", fvTime.getName());
+                        map.put("createDate", dateTimeFormatter.format(fvTime.getWorkDate()));
+                        map.put("workHours", fvTime.getWorkHours());
+                        map.put("reportTime", reportTime);
+                        if (fvTime.getProcinstId() != null && fvTime.getProcinstId().startsWith("bustrip")) {
+                            map.put("isBusTrip", true);
+                        }
+                        resultList.add(map);
                     }
-                    resultList.add(map);
                 }
             }
         }
-        for (UserFvTime time : userFvTimeList) {
-            if (time.getUserId().equals("8603257582743396361")) {
-                System.out.println("张南考勤==" + time.getWorkDate()+"=="+time.getWorkHours());
-            }
-        }
         //反向,检测有填报日报但是没有考勤的数据
         for (Report report : reportList) {
             boolean hasCardTime = false;
@@ -11187,6 +11247,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             if (!hasCardTime) {
                 Map<String, Object> map = new HashMap<>();
                 map.put("userId", targetUser.getId());
+                map.put("corpwxUserId", targetUser.getCorpwxUserid());
                 map.put("name", targetUser.getName());
                 map.put("createDate", dateTimeFormatter.format(report.getCreateDate()));
                 map.put("workHours", 0);

+ 44 - 5
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -1773,7 +1773,15 @@
                         <el-button slot="append" @click="searchScreen(2)" icon="el-icon-search"></el-button>
                     </el-input>
                     <selectCat v-if="user.userNameNeedTranslate == '1'" :filterable="true" :searchBoxTop="'1'" :size="'small'" :subject="usersList" :subjectId="usersListId" :distinction="'15'" :clearable="true" @selectCal="selectCal"></selectCat>
-
+                    <div style="float: right; vertical-align: middle;height:32px">
+                        <el-link
+                        type="primary" v-loading="remindering"
+                        @click="batchRejectAndRemind()" >一键驳回并提醒</el-link>
+                        <!-- <el-link
+                        type="primary"
+                        @click="exportMembWorkHoursReminder()"
+                        >{{$t('export.exportData')}}</el-link> -->
+                    </div>
                     <!-- <el-link
                         type="primary"
                         style="float: right; vertical-align: middle;height:32px"
@@ -1859,13 +1867,11 @@
               <el-link
               type="primary" v-loading="remindering"
               @click="changeReminder()"
-              >{{ $t('bianGengTiXing') }}</el-link
-              >
+              >{{ $t('bianGengTiXing') }}</el-link>
               <el-link
               type="primary"
               @click="exportMembWorkHoursReminder()"
-              >{{$t('export.exportData')}}</el-link
-             >
+              >{{$t('export.exportData')}}</el-link>
             </div>
             
           </div>
@@ -9079,6 +9085,39 @@
                     })
                 })
             },
+            //考勤工时异常,一键驳回并提醒修改
+            batchRejectAndRemind(item){
+                this.$confirm('您确定要一键驳回异常考勤工时的日报并发送消息提醒吗?',this.$t('other.prompts'), {
+                    confirmButtonText: this.$t('btn.determine'),
+                    cancelButtonText: this.$t('btn.cancel'),
+                    type: "warning"
+                })
+                .then(() => {
+                    let parameter={
+                        ymonth: this.notfullSelectDateMonth
+                    }
+                    this.remindering = true;
+                    this.http.post('/report/rejectAbnormalReportTime',parameter,res => {
+                        this.remindering = false;
+                        if(res.code == 'ok'){
+                            this.$message({
+                                message: res.msg,
+                                type: 'success'
+                            })
+                        }else{
+                            this.$message({
+                                message: res.msg,
+                                type: 'error'
+                            })
+                        }
+                    },err => {
+                        this.$message({
+                            message: err,
+                            type: 'error'
+                        })
+                    })
+                }).catch(() => {this.startDeleting = false});
+            },
             //景昱变更提醒
             changeReminder(item){
                 let parameter={