Selaa lähdekoodia

解除钉钉通讯录加密

QuYueTing 9 kuukautta sitten
vanhempi
commit
e1590f666c

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

@@ -2784,5 +2784,14 @@ public class ReportController {
     public HttpRespMsg transferReport(String reportIds,@RequestParam Integer projectId,@RequestParam Integer groupId,Integer stageId){
         return reportService.transferReport(reportIds,projectId,groupId,stageId);
     }
+
+    @RequestMapping("/getNotFullReportUserList")
+    public HttpRespMsg getNotFullReportUserList(Integer companyId, String startDate, String endDate){
+        HttpRespMsg msg = new HttpRespMsg();
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        msg.data = reportService.getNotFullReportUserList(companyId, LocalDate.parse(startDate, dateTimeFormatter), LocalDate.parse(endDate, dateTimeFormatter));
+        return msg;
+    }
+
 }
 

+ 7 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java

@@ -16,6 +16,7 @@ import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.MessageUtils;
 import org.apache.poi.hssf.usermodel.*;
 import org.assertj.core.util.Lists;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
@@ -114,6 +115,8 @@ public class TaskController {
     //用于控制线程锁
     public static HashMap<String, CorpwxJobResult> corpwxJobCenter = new HashMap();
     public static HashMap<String, Integer> corpddJobCenter = new HashMap();
+    @Autowired
+    private ProjectCategoryMapper projectCategoryMapper;
 
     @RequestMapping("/save")
     @Transactional
@@ -189,7 +192,10 @@ public class TaskController {
             if(user.getCompanyId()==3092){
                 Project project = projectService.getById(task.getProjectId());
                 //除了报价项目  售后报价项目和研发项目不管控  其它项目都管控
-                if(task.getGroupId()!=null&&(project.getCategory()!=null && !(project.getCategory()==644 || project.getCategory()==647 || project.getCategory()==697 ||project.getCategory()==804 ))){
+                List<String> excludeCategoryNames = Arrays.asList(new String[]{"报价项目","售后报价项目","研发项目","运维项目","数字化服务项目"});
+                List<ProjectCategory> extList = projectCategoryMapper.selectList(new QueryWrapper<ProjectCategory>().eq("company_id", user.getCompanyId()).in("name", excludeCategoryNames));
+                List<Integer> extIds = extList.stream().map(ProjectCategory::getId).collect(Collectors.toList());
+                if(task.getGroupId()!=null&&(project.getCategory()!=null && !extIds.contains(project.getCategory()))){
                     TaskGroup taskGroup = taskGroupService.getById(task.getGroupId());
                     if(taskGroup.getManDay()==null){
                         msg.setError("创建失败,请先分配任务分组的预估工时");

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

@@ -20,5 +20,5 @@ public interface TimeTypeService extends IService<TimeType> {
      * @param date
      * @return
      */
-    Boolean isWorkDay(Integer companyId, LocalDate date);
+    Boolean isWorkDay(Integer companyId, LocalDate date, TimeType timeType);
 }

+ 6 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java

@@ -500,7 +500,7 @@ public class DingDingServiceImpl implements DingDingService {
         if (oldD == null) {
             //新开通的情况,给字段默认值
             dingding.setSyncContact(1);
-//            dingding.setContactNeedTranslate(1);//上架到钉钉应用市场,通讯录为加密模式,需要转译;暂时不上,待定
+//            dingding.setContactNeedTranslate(1);//上架到钉钉应用市场,采用数据安全中心的方式,不需要转译了。
             //第一次,查询对方企业的accessToken
             SysConfig config = sysConfigMapper.selectOne(new QueryWrapper<SysConfig>().eq("param_key", "dingding_suite_ticket"));
             String suiteTicket = config.getParamValue();
@@ -958,13 +958,11 @@ public class DingDingServiceImpl implements DingDingService {
                 User upUser = new User();
                 upUser.setId(oldUser.getId());
                 boolean changed = false;
-                //暂时不更新姓名,避免出现老钉钉用户姓名被冲掉的情况
-                //仅针对老用户,不需要转译的情况下,才可能出现姓名变更的情况
-//                if (dingding.getContactNeedTranslate() == 0 && duser.getName() != null && (oldUser.getName() == null || !oldUser.getName().equals(duser.getName()))) {
-//                    upUser.setName(duser.getName());
-//                    System.out.println("更新用户姓名==userId==" + oldUser.getId() + ", oldName="+ oldUser.getName()+", newName="+duser.getName());
-//                    changed = true;
-//                }
+
+                if (dingding.getContactNeedTranslate() == 0 && duser.getName() != null && (oldUser.getName() == null || !oldUser.getName().equals(duser.getName()))) {
+                    upUser.setName(duser.getName());
+                    changed = true;
+                }
                 //可能需要更新工号
                 if (!StringUtils.isEmpty(duser.getJobNumber()) && (oldUser.getJobNumber() == null || !oldUser.getJobNumber().equals(duser.getJobNumber()))) {
                     upUser.setJobNumber(duser.getJobNumber());

+ 15 - 18
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -6425,6 +6425,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         User user = userMapper.selectById(request.getHeader("TOKEN"));
         List<User> allRangeUserList = new ArrayList<>();
         Integer companyId = user.getCompanyId();
+        TimeType timeType = timeTypeMapper.selectById(companyId);
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
         //获取部门的所有子部门
         List<Department> departments = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id",companyId));
@@ -6514,7 +6515,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         continue;
                     }
                     //去掉非工作日
-                    Boolean workDay = timeTypeService.isWorkDay(companyId, date);
+                    Boolean workDay = timeTypeService.isWorkDay(companyId, date, timeType);
                     if (!workDay){
                         continue;
                     }
@@ -6620,24 +6621,13 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         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<Map<String, Object>> noReportDataList = new ArrayList<Map<String, Object>>();
+        TimeType timeType = timeTypeMapper.selectById(companyId);
         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;
-//            }
-//        }
-        //已驳回的数据
+        //查询请假数据,请假的不算漏填,状态为已通过(0)或者待审核的(1)
+        List<LeaveSheet> leaveSheetList = leaveSheetMapper.selectList(new QueryWrapper<LeaveSheet>().select("owner_id,start_date, end_date").eq("company_id", companyId).le("status", 1).gt("end_date", localStart).lt("start_date",localEnd));
         //按人员过滤
         for (User curUser: allRangeUserList){
+            //判断此用户当天是否请假,请假的不算
             for (int i=0;i<=cnt; i++) {
                 LocalDate date = localStart.plusDays(i);
                 //入职日期以前 不需要添加 跳出
@@ -6649,10 +6639,17 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     continue;
                 }
                 //去掉非工作日
-                Boolean workDay = timeTypeService.isWorkDay(companyId, date);
+                Boolean workDay = timeTypeService.isWorkDay(companyId, date, timeType);
                 if (!workDay){
                     continue;
                 }
+                List<LeaveSheet> findList = leaveSheetList.stream().filter(leaveSheet -> leaveSheet.getOwnerId().equals(curUser.getId())).collect(Collectors.toList());
+                boolean leaveOnTheDay = leaveSheetList.stream().anyMatch(leaveSheet -> leaveSheet.getOwnerId().equals(curUser.getId()) &&
+                                ((date.isEqual(leaveSheet.getStartDate()) || date.isAfter(leaveSheet.getStartDate()))
+                                && (date.isEqual(leaveSheet.getEndDate()) || date.isBefore(leaveSheet.getEndDate()))));
+                if (leaveOnTheDay) {
+                    continue;
+                }
                 //不存在已提交或者已通过的日报,视为未提交。包括未填写,待提交,已驳回,已撤销这些状态
                 if (!reportList.stream().anyMatch(item->item.getCreatorId().equals(curUser.getId())&&item.getCreateDate().isEqual(date)&&(item.getState() == 0 || item.getState() == 1))) {
                     HashMap map = new HashMap();
@@ -7642,7 +7639,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             if (user.getIsActive() == 1 && user.getInductionDate() != null && i.isBefore(user.getInductionDate())){
                 continue;
             }
-            Boolean workDay = timeTypeService.isWorkDay(user.getCompanyId(), i);
+            Boolean workDay = timeTypeService.isWorkDay(user.getCompanyId(), i, timeType);
             if (workDay){
                 Double workTime = 0.0;
                 //添加该日日报进入集合

+ 5 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TimeTypeServiceImpl.java

@@ -34,10 +34,12 @@ public class TimeTypeServiceImpl extends ServiceImpl<TimeTypeMapper, TimeType> i
      * @return
      */
     @Override
-    public Boolean isWorkDay(Integer companyId, LocalDate date) {
+    public Boolean isWorkDay(Integer companyId, LocalDate date, TimeType timeType) {
         Boolean workDay = true;
-        TimeType t = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", companyId));
-        String alertNonWorkday = t.getAlertNonWorkday().toString();
+        if (timeType == null) {
+            timeType = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", companyId));
+        }
+        String alertNonWorkday = timeType.getAlertNonWorkday().toString();
         if (alertNonWorkday.length() == 1){
             alertNonWorkday = "00" +alertNonWorkday;
         } else if (alertNonWorkday.length() == 2){

+ 5 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -840,9 +840,10 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
             LocalDate endLocalDate = endDateTime.toLocalDate();
             int i=0;
             DateTimeFormatter dateTimeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            TimeType timeType = timeTypeMapper.selectById(companyId);
             while (true) {
                 LocalDate day = date.plusDays(i);
-                if (timeTypeService.isWorkDay(corpInfo.getCompanyId(), day)) {
+                if (timeTypeService.isWorkDay(corpInfo.getCompanyId(), day, timeType)) {
                     System.out.println("============="+dateTimeFormat.format(day)+"==============");
                     List<String> missRecordUserCorpIds = new ArrayList<>();
                     List<User> filterusers = new ArrayList<>();
@@ -1172,7 +1173,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
         HttpEntity<String> requestEntity = new HttpEntity<String>(reqParam.toJSONString(), headers);
         ResponseEntity<String> responseEntity = this.restTemplate.exchange(url,
                 HttpMethod.POST, requestEntity, String.class);
-
+        TimeType timeType = timeTypeMapper.selectById(corpInfo.getCompanyId());
         if (responseEntity.getStatusCode() == HttpStatus.OK) {
             String resp = responseEntity.getBody();
             if (showLog) System.out.println(resp);
@@ -1260,7 +1261,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                     ct.setWorkHours(0.0);
                     ct.setOutdoorTime(0.0);
                     //工作日或者非工作日有打卡,需要校正请假,外出的时长数据
-                    if (timeTypeService.isWorkDay(corpInfo.getCompanyId(), localDate) || sTime > 0 || eTime > 0) {
+                    if (timeTypeService.isWorkDay(corpInfo.getCompanyId(), localDate, timeType) || sTime > 0 || eTime > 0) {
                         JSONArray holidayItems = jsonObject.getJSONArray("holiday_infos");
                         //开始时间和结束时间一样,说明下班没有打卡,需要提取请假的最晚时间作为下班打卡时间
                         boolean needRecaculate = false;
@@ -1712,7 +1713,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                             userCorpwxTimeMapper.insert(ct);
                         } else {
                             //调用打卡详情去获取,弥补外出打卡且时间不在自动同步范围内的情况; 仅对工作日有效
-                            if (timeTypeService.isWorkDay(corpInfo.getCompanyId(), localDate)) {
+                            if (timeTypeService.isWorkDay(corpInfo.getCompanyId(), localDate, timeType)) {
                                 System.out.println("=========获取日打卡详情========="+localDate.toString());
                                 User user = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_userid", curUserid));
                                 if (user != null) {

+ 9 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -1496,10 +1496,17 @@ public class TimingTask {
         typeList.forEach(t->{
             if (str.equals(t.getAlertTime())) {
                 //节假日是否提醒
-                Boolean workDay = timeTypeService.isWorkDay(t.getCompanyId(), localDate);
+                Boolean workDay = timeTypeService.isWorkDay(t.getCompanyId(), localDate, t);
                 if ((t.getAlertType() == 0 || t.getAlertType() == 1) && !workDay){
                     return;
                 }
+                //每周几提醒上周的情况下,需要校验当前是周几
+                if (t.getAlertType() == 4) {
+                    if (t.getAlertDay() != LocalDate.now().getDayOfWeek().getValue()) {
+                        //不是设置好的日期,不提醒
+                        return;
+                    }
+                }
                 //发送推送提醒
                 Company company = companyMapper.selectById(t.getCompanyId());
                 //过期公司不提醒
@@ -1707,7 +1714,7 @@ public class TimingTask {
 
                     //节假日不提醒,判断当前是否是工作日
                     if (compWorkDayMap.get(curCompanyId) == null) {
-                        Boolean workDay = timeTypeService.isWorkDay(curCompanyId, localDate);
+                        Boolean workDay = timeTypeService.isWorkDay(curCompanyId, localDate, null);
                         compWorkDayMap.put(curCompanyId, workDay);
                     }
                     Boolean workDay = compWorkDayMap.get(curCompanyId);

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml

@@ -2204,7 +2204,7 @@
         left join task t on t.id=te.task_id
         left join project p on p.id=t.project_id
         left join project_category pc on pc.id=p.category
-        where u.company_id=#{companyId} and te.project_id is not null  and pc.name not in ('报价项目','售后报价项目','研发项目','运维项目')
+        where u.company_id=#{companyId} and te.project_id is not null  and pc.name not in ('报价项目','售后报价项目','研发项目','运维项目','数字化服务项目')
         <if test="projectId!=null">
             and p.id=#{projectId}
         </if>
@@ -2235,7 +2235,7 @@
         left join task t on t.id=te.task_id
         left join project p on p.id=t.project_id
         left join project_category pc on pc.id=p.category
-        where u.company_id=#{companyId} and te.project_id is not null  and pc.name not in ('报价项目','售后报价项目','研发项目','运维项目')
+        where u.company_id=#{companyId} and te.project_id is not null  and pc.name not in ('报价项目','售后报价项目','研发项目','运维项目','数字化服务项目')
         <if test="projectId!=null">
             and p.id=#{projectId}
         </if>