Browse Source

组织架构中 同步企微通讯录 新增【可见范围设置】按钮
美莱德数据先处理
合同管理 合同类型删除报文错误修改
登录获取企业管理员列表
任务列表增加字段canAddTask

yurk 2 years ago
parent
commit
500ff31bc8

+ 37 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java

@@ -86,6 +86,8 @@ public class TaskController {
     private DepartmentService departmentService;
     @Resource
     private TaskGroupService taskGroupService;
+    @Resource
+    private TaskAddCtrlMapper taskAddCtrlMapper;
 
     @RequestMapping("/save")
     @Transactional
@@ -612,6 +614,7 @@ public class TaskController {
     public HttpRespMsg getTask(Integer id) {
         HttpRespMsg msg = new HttpRespMsg();
         String userId = request.getHeader("Token");
+        User user = userMapper.selectById(userId);
         Task t = taskService.getById(id);
         if (t == null) {
             //msg.setError("该任务已不存在");
@@ -637,6 +640,40 @@ public class TaskController {
         TaskGroup group = taskGroupService.getOne(new QueryWrapper<TaskGroup>().eq("id", t.getGroupId()));
         t.setProjectInchargerId(project.getInchargerId()==null?"":project.getInchargerId());
         t.setGroupInchargerId(group.getInchargerId()==null?"":group.getInchargerId());
+        //判断当前用户是否有权限创建任务: 有权限的包括管理全部项目,项目创建人,项目PM, 分组负责人,分组参与人
+        List<SysRichFunction> manageAllProjects = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "管理全部项目");
+        boolean canAddTask = false;
+        Integer companyId = user.getCompanyId();
+        TaskAddCtrl taskAddCtrl = taskAddCtrlMapper.selectById(companyId);
+        if (taskAddCtrl == null) {
+            //没有的话,默认生成一个
+            taskAddCtrl = new TaskAddCtrl();
+            taskAddCtrl.setCompanyId(companyId);
+            taskAddCtrl.setCtrlType(1);//0-普通项目参与人不可添加任务,1-项目参与人可添加,2-仅分组参与人可添加
+            taskAddCtrlMapper.insert(taskAddCtrl);
+        }
+        if (manageAllProjects.size() > 0 || userId.equals(project.getCreatorId()) || userId.equals(project.getInchargerId())) {
+            canAddTask = true;
+        }
+        if (!canAddTask) {
+            //进一步判断是否是分组的负责人,参与人
+            if (userId.equals(group.getInchargerId())) {
+                canAddTask = true;
+            }
+            if (!canAddTask) {
+                Integer ctrlType = taskAddCtrl.getCtrlType();
+                if (ctrlType == 1) {
+                    canAddTask = true;
+                } else if (ctrlType == 2) {
+                    //分组参与人可以创建任务
+                    int count = groupParticipatorMapper.selectCount(new QueryWrapper<GroupParticipator>().eq("user_id", userId).eq("group_id", group.getId()));
+                    if (count > 0) {
+                        canAddTask = true;
+                    }
+                }
+            }
+        }
+        t.setCanAddTask(canAddTask);
         msg.data = t;
         return msg;
     }

+ 3 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Task.java

@@ -218,6 +218,9 @@ public class Task extends Model<Task> {
     @TableField(exist = false)
     private String departmentName;
 
+    @TableField(exist = false)
+    private boolean canAddTask;
+
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 17 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/User.java

@@ -21,7 +21,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2022-10-08
+ * @since 2023-01-05
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -43,7 +43,7 @@ public class User extends Model<User> {
     private String name;
 
     /**
-     * 手机号 登录账号
+     * 手机号 登录账号,全系统唯一
      */
     @TableField("phone")
     private String phone;
@@ -164,7 +164,7 @@ public class User extends Model<User> {
     private String dingdingUnionid;
 
     /**
-     * 企业微信用户id
+     * 企业微信用户openuserid
      */
     @TableField("corpwx_userid")
     private String corpwxUserid;
@@ -197,6 +197,9 @@ public class User extends Model<User> {
     @TableField("report_status")
     private Integer reportStatus;
 
+    /**
+     * 直属上级
+     */
     @TableField("superior_id")
     private String superiorId;
 
@@ -220,7 +223,11 @@ public class User extends Model<User> {
 
     @TableField(exist = false)
     private double totalHours;
-
+    /**
+     * 是否可以登录八爪鱼系统
+     */
+    @TableField("is_ops")
+    private Integer isOps;
     /**
      * 员工工号,公司内唯一
      */
@@ -251,6 +258,12 @@ public class User extends Model<User> {
     @TableField("corpwx_real_userid")
     private String corpwxRealUserid;
 
+    /**
+     * 0-否 1-是
+     */
+    @TableField("is_first_login")
+    private Integer isFirstLogin;
+
 
     @Override
     protected Serializable pkVal() {

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/UserVO.java

@@ -26,4 +26,6 @@ public class UserVO extends User {
 
     private boolean hasAuditDept;
 
+    private boolean isManager;
+
 }

+ 3 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/WxCorpInfoService.java

@@ -30,6 +30,9 @@ public interface WxCorpInfoService extends IService<WxCorpInfo> {
 
     public String testDownloadFile();
 
+    //获取企业管理员列表
+    List<User> getAdminList(Integer companyId)throws Exception;
+
     public HttpRespMsg getUserCheckInDayData(int companyId, String userId, LocalDateTime startDateTime, LocalDateTime endDateTime, boolean showLog);
 
     HttpRespMsg syncMembByCardTime(WxCorpInfo wxCorpInfo);

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ContractTypeServiceImpl.java

@@ -124,10 +124,10 @@ public class ContractTypeServiceImpl extends ServiceImpl<ContractTypeMapper, Con
         List<Contract> types = contractMapper.selectList(new QueryWrapper<Contract>().eq("type_id", deleteId));
         if (types.size() > 0){
             //该类型尚有合同在使用,无法删除!
-            httpRespMsg.msg = MessageUtils.message("Contract.typeDelError");
+            httpRespMsg.setError(MessageUtils.message("Contract.typeDelError"));
         }else {
             contractTypeMapper.deleteById(deleteId);
-            httpRespMsg.msg = MessageUtils.message("file.deleteSuc");
+            httpRespMsg.setError(MessageUtils.message("file.deleteSuc"));
         }
         return httpRespMsg;
     }

+ 25 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -167,7 +167,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     public static long providerTokenExpireTime = 0L;
     //登录网页端
     @Override
-    public HttpRespMsg loginAdmin(String username, String password) {
+    public HttpRespMsg loginAdmin(String username, String password){
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         //根据电话号码获取账号信息
         List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("phone", username));
@@ -199,6 +199,13 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                     }
                 }
             }
+            //获取所在企业管理员列表
+            List<User> adminList=new ArrayList<>();
+            try {
+                adminList = wxCorpInfoService.getAdminList(company.getId());
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
             //检测密码正确时
             UserVO userVO = new UserVO().setCompanyName(company.getCompanyName());
             userVO.setCompany(company);
@@ -227,10 +234,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 num = auditWorkflowTimeSettingMapper.selectCount(new QueryWrapper<AuditWorkflowTimeSetting>().in("audit_dept_id", deptIds));
             }
             userVO.setHasAuditDept(num>0);
+            boolean match = adminList.stream().anyMatch(al -> al.getCorpwxUserid().equals(userVO.getCorpwxUserid()));
+            userVO.setManager(match);
             //获取当前角色的权限菜单
             setUserRoleMenu(userVO);
-
             httpRespMsg.data = userVO;
+            //记录第一次登录
+            userList.get(0).setIsFirstLogin(0);
+            userMapper.updateById(userList.get(0));
         } else {
             httpRespMsg.setError(MessageUtils.message("user.pwdError"));
         }
@@ -2328,7 +2339,13 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         if (info != null) {
             user.setUserNameNeedTranslate(info.getSaasSyncContact());
         }
-
+        //获取所在企业管理员列表
+        List<User> adminList=new ArrayList<>();
+        try {
+            adminList = wxCorpInfoService.getAdminList(company.getId());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
 
         UserVO userVO = new UserVO().setCompanyName(company.getCompanyName());
         userVO.setCompany(company);
@@ -2348,9 +2365,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             num = auditWorkflowTimeSettingMapper.selectCount(new QueryWrapper<AuditWorkflowTimeSetting>().in("audit_dept_id", deptIds));
         }
         userVO.setHasAuditDept(num>0);
+        boolean match = adminList.stream().anyMatch(al -> al.getCorpwxUserid().equals(userVO.getCorpwxUserid()));
+        userVO.setManager(match);
         //获取当前角色的权限菜单
         setUserRoleMenu(userVO);
         httpRespMsg.data = userVO;
+        //记录第一次登录
+        user.setIsFirstLogin(0);
+        userMapper.updateById(user);
         return httpRespMsg;
     }
 

+ 35 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -70,6 +70,9 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
 
     public static final String GET_BATCH_SEARCH_USER_INFO = "https://qyapi.weixin.qq.com/cgi-bin/service/contact/batchsearch?provider_access_token=ACCESS_TOKEN";
 
+    //获取企业管理员列表
+    public static final String GET_ADMIN_LIST = "https://qyapi.weixin.qq.com/cgi-bin/service/get_admin_list?suite_access_token=SUITE_ACCESS_TOKEN";
+
     public static final int TEXT_CARD_MSG_BUSTRIP_WAITING_AUDIT = 0;//出差待审核
     public static final int TEXT_CARD_MSG_BUSTRIP_AGREE = 1;//出差审核通过
     public static final int TEXT_CARD_MSG_BUSTRIP_DENY = 2;//出差审核驳回
@@ -469,6 +472,38 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
         return WeiXinCorpController.SUITE_ACCESS_TOKEN;
     }
 
+    //获取企业管理员列表
+    @Override
+    public List<User> getAdminList(Integer companyId)throws Exception{
+        List<User> userList=new ArrayList<>();
+        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
+        String url=GET_ADMIN_LIST.replaceAll("SUITE_ACCESS_TOKEN",getSuiteAccessToken());
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        JSONObject reqParam = new JSONObject();
+        reqParam.put("auth_corpid",  wxCorpInfo.getCorpid());
+        reqParam.put("agentid",  wxCorpInfo.getAgentid());
+        HttpEntity<String> requestEntity = new HttpEntity<String>(reqParam.toJSONString(), headers);
+        ResponseEntity<String> responseEntity = this.restTemplate.exchange(url,
+                HttpMethod.POST, requestEntity, String.class);
+        if (responseEntity.getStatusCode() == HttpStatus.OK) {
+            String resp = responseEntity.getBody();
+            JSONObject json = JSONObject.parseObject(resp);
+            if (json.getIntValue("errcode") == 0) {
+                JSONArray adminList = json.getJSONArray("admin");
+                for (int i = 0; i < adminList.size(); i++) {
+                    JSONObject object = adminList.getJSONObject(i);
+                    String userid = String.valueOf(object.get("userid"));
+                    User user = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_userid", userid));
+                    userList.add(user);
+                }
+            } else {
+                throw new Exception(json.toJSONString());
+            }
+        }
+        return userList;
+    }
+
     //获取企业AccessToken
     private String getCorpAccessToken(WxCorpInfo corpInfo) throws Exception {
         if (corpInfo.getExpireTime().isBefore(LocalDateTime.now())) {

+ 96 - 57
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -278,11 +278,11 @@ public class TimingTask {
     }
 
 
-    //每天2:11 同步钉钉用户前2天到未来30天时间段的打卡,请假,出差数据
+    //每天2:11 同步泛微用户前2天到未来30天时间段的打卡,请假,出差数据
     @Scheduled(cron = "0 11 2 ? * *")
     private void synFanWeiWorkData() {
-        if (isDev) return;
-        if(!isPrivateDeploy) return;
+        /*if (isDev) return;
+        if(!isPrivateDeploy) return;*/
         List<TimeType> timeTypeList = timeTypeMapper.selectList(new QueryWrapper<TimeType>().eq("sync_fanwei", 1));
         List<Integer> compIds = timeTypeList.stream().map(TimeType::getCompanyId).collect(Collectors.toList());
         if(compIds.isEmpty()){
@@ -294,85 +294,113 @@ public class TimingTask {
             DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
             DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
             DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("HH:mm");
-            LocalDateTime yesterday = LocalDateTime.now().minusDays(2);
+            //需要修改************************************************  日期
+            LocalDateTime yesterday = LocalDateTime.now().minusDays(100);
             String startDate = dtf.format(yesterday);
-            String endDate = dtf.format(yesterday.plusDays(32));
+            String endDate = dtf.format(yesterday.plusDays(30));
             List<UserFvTime> oldUserFvTimeList = userFvTimeService.list(new QueryWrapper<UserFvTime>().eq("company_id", compId));
             List<LeaveSheet> oldLeaveSheetList = leaveSheetService.list(new QueryWrapper<LeaveSheet>().eq("company_id", compId));
             List<BusinessTrip> oldBusinessTripList = businessTripService.list(new QueryWrapper<BusinessTrip>().eq("company_id", compId));
-            jsonObject.put("startDate",startDate);
+            /*jsonObject.put("startDate",startDate);
             jsonObject.put("endDate",endDate);
+            jsonObject.put("workDate",startDate);*/
             String jsonString = jsonObject.toJSONString();
             List<UserFvTime> userFvTimeList=new ArrayList<>();
             List<LeaveSheet> leaveSheetList=new ArrayList<>();
             List<BusinessTrip> businessTripList=new ArrayList<>();
             TimeType allDay = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", compId));
+            List<User> allUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", compId));
             //获取休息设置
             TimeAutoExclude timeAutoExclude = timeAutoExcludeMapper.selectOne(new QueryWrapper<TimeAutoExclude>().eq("company_id", compId));
-            //Todo: 获取打卡数据
+            //Todo: 获取考勤打卡数据
             HttpRespMsg workDataMsg = dockWithMLD.getResult("http://10.1.10.51:20175/api/cube/restful/interface/getModeDataPageList/getWorkData", jsonString);
             List<Map<String,Object>> workDataList= (List<Map<String, Object>>) workDataMsg.data;
-            List<String> userIds = workDataList.stream().map(map -> String.valueOf(map.get("userId"))).collect(Collectors.toList());
+            //Todo: 获取外出打卡数据
+            HttpRespMsg outWorkDataMsg = dockWithMLD.getResult("http://10.1.10.51:20175/api/cube/restful/interface/getModeDataPageList/getOutRecord", jsonString);
+            List<Map<String,Object>> outWorkDataList= (List<Map<String, Object>>) outWorkDataMsg.data;
+            //Todo: 获取考勤补卡数据
+            HttpRespMsg replaceWorkDataMsg = dockWithMLD.getResult("http://10.1.10.51:20175/api/cube/restful/interface/getModeDataPageList/getReplaceRecord", jsonString);
+            List<Map<String,Object>> replaceWorkDataList= (List<Map<String, Object>>) replaceWorkDataMsg.data;
+            List<String> userIds = workDataList.stream().map(map -> String.valueOf(map.get("userId"))).distinct().collect(Collectors.toList());
             List<User> userList = userMapper.selectList(new QueryWrapper<User>().in("job_number", userIds));
+            List<LocalDateTime> dateTimeList = getDays(yesterday, yesterday.plusDays(132));
             for (User user : userList) {
-                System.out.println("需要同步的用户列表-----"+userList);
-                LocalTime startTime=null;
-                LocalTime endTime=null;
-                LocalDate workDate=null;
-                for (Map<String, Object> map : workDataList) {
-                    if (map.get("userId").equals(user.getJobNumber())) {
-                        if(String.valueOf(map.get("signtype")).equals("签到")){
+                for (LocalDateTime localDateTime : dateTimeList) {
+                    LocalDate workDate=localDateTime.toLocalDate();
+                    //当天的考勤记录
+                    List<Map<String, Object>> list = workDataList.stream().filter(wl -> wl.get("userId").equals(user.getJobNumber())&&wl.get("workDate").equals(workDate.format(dtf))).collect(Collectors.toList());
+                    UserFvTime userFvTime=new UserFvTime();
+                    userFvTime.setWorkDate(workDate);
+                    LocalTime startTime=null;
+                    LocalTime endTime=null;
+                    for (Map<String, Object> map : list) {
+                        if(String.valueOf(map.get("signtype")).equals("签到")&&!map.get("signtime").equals("")){
                             startTime=LocalTime.parse(String.valueOf(map.get("signtime")), dtf2);
-                            workDate= LocalDate.parse(String.valueOf(map.get("workDate")), dtf);
                         }
-                        if(String.valueOf(map.get("signtype")).equals("签退")){
+                        if(String.valueOf(map.get("signtype")).equals("签退")&&!map.get("signtime").equals("")){
                             endTime=LocalTime.parse(String.valueOf(map.get("signtime")), dtf2);
-                            workDate=LocalDate.parse(String.valueOf(map.get("workDate")),dtf);
                         }
+                        //处理外出记录 有外出记录默认以默认规则作为考勤数据来源
+                        Optional<Map<String, Object>> outFirst = outWorkDataList.stream().filter(ol -> ol.get("ycbgkssj").equals(map.get("workDate")) && ol.get("rybh").equals(map.get("userId"))).findFirst();
+                        if(outFirst.isPresent()){
+                            if(startTime==null||LocalTime.parse(String.valueOf(outFirst.get().get("kssj")), dtf2).isBefore(startTime)){
+                                startTime=LocalTime.parse(String.valueOf(outFirst.get().get("kssj")), dtf2);
+                            }
+                            if(endTime==null||LocalTime.parse(String.valueOf(outFirst.get().get("jssj")), dtf2).isBefore(endTime)){
+                                endTime=LocalTime.parse(String.valueOf(outFirst.get().get("jssj")), dtf2);
+                            }
+                        }
+                        //处理补卡记录 有补卡记录以补卡记录作为考勤数据来源
+                        Optional<Map<String, Object>> replaceFirst = replaceWorkDataList.stream().filter(rl -> rl.get("kqrq").equals(map.get("workDate")) && rl.get("rybh").equals(map.get("userId"))).findFirst();
+                        if(replaceFirst.isPresent()){
+                            if(startTime==null||replaceFirst.get().get("bklx").equals("上班")){
+                                startTime=LocalTime.parse(String.valueOf(replaceFirst.get().get("bksj")), dtf2);
+                            }
+                            if(endTime==null||replaceFirst.get().get("bklx").equals("下班")){
+                                endTime=LocalTime.parse(String.valueOf(replaceFirst.get().get("bksj")), dtf2);
+                            }
+                        }
+                        }
+                    if(compIds.contains(user.getCompanyId())){
+                        if(startTime==null||endTime==null){
+                            continue;
+                        }
+                        Duration between = Duration.between(startTime, endTime);
+                        userFvTime.setStartTime(startTime.format(dtf2));
+                        userFvTime.setEndTime(endTime.format(dtf2));
+                        userFvTime.setCompanyId(user.getCompanyId());
+                        userFvTime.setUserId(user.getId());
+                        long workHours = between.toHours();
+                        long restHours;
+                        if(startTime.isBefore(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2))
+                                &&endTime.isAfter(LocalTime.parse(timeAutoExclude.getEndTime(),dtf2))){
+                            Duration bt = Duration.between(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2), LocalTime.parse(timeAutoExclude.getEndTime(),dtf2));
+                            restHours=bt.toHours();
+                        }else {
+                            restHours=0;
+                        }
+                        userFvTime.setWorkHours(BigDecimal.valueOf(workHours).subtract(BigDecimal.valueOf(restHours)).floatValue());
+                        Optional<UserFvTime> first = oldUserFvTimeList.stream().filter(ol -> ol.getWorkDate().isEqual(userFvTime.getWorkDate()) && ol.getUserId().equals(userFvTime.getUserId())).findFirst();
+                        if(first.isPresent()){
+                            userFvTime.setId(first.get().getId());
+                        }
+                        userFvTimeList.add(userFvTime);
                     }
                 }
-                UserFvTime userFvTime=new UserFvTime();
-                System.out.println("泛微同步人员打卡数据----"+user.getName());
-                if(compIds.contains(user.getCompanyId())){
-                    if(startTime==null||endTime==null){
-                        System.out.println("缺少上班或者下班打卡时间----"+user.getName());
-                        continue;
-                    }
-                    userFvTime.setWorkDate(workDate);
-                    Duration between = Duration.between(startTime, endTime);
-                    userFvTime.setStartTime(startTime.format(dtf2));
-                    userFvTime.setEndTime(endTime.format(dtf2));
-                    userFvTime.setCompanyId(user.getCompanyId());
-                    userFvTime.setUserId(user.getId());
-                    long workHours = between.toHours();
-                    long restHours;
-                    if(startTime.isBefore(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2))
-                            &&endTime.isAfter(LocalTime.parse(timeAutoExclude.getEndTime(),dtf2))){
-                        Duration bt = Duration.between(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2), LocalTime.parse(timeAutoExclude.getEndTime(),dtf2));
-                        restHours=bt.toHours();
-                    }else {
-                        restHours=0;
-                    }
-                    userFvTime.setWorkHours(BigDecimal.valueOf(workHours).subtract(BigDecimal.valueOf(restHours)).floatValue());
-                    Optional<UserFvTime> first = oldUserFvTimeList.stream().filter(ol -> ol.getWorkDate().isEqual(userFvTime.getWorkDate()) && ol.getUserId().equals(userFvTime.getUserId())).findFirst();
-                    if(first.isPresent()){
-                        userFvTime.setId(first.get().getId());
-                    }
-                    userFvTimeList.add(userFvTime);
-                }
             }
             if(userFvTimeList.size()>0){
                 userFvTimeService.saveOrUpdateBatch(userFvTimeList);
             }
-            System.out.println(workDataList);
+            System.out.println(userFvTimeList);
             //Todo: 获取请假数据
             HttpRespMsg leaveRecordMsg = dockWithMLD.getResult("http://10.1.10.51:20175/api/cube/restful/interface/getModeDataPageList/getLeaveRecord", jsonString);
             List<Map<String,Object>> leaveRecordList= (List<Map<String, Object>>) leaveRecordMsg.data;
             for (Map<String, Object> map : leaveRecordList) {
-                User user = userMapper.selectOne(new QueryWrapper<User>().eq("job_number", map.get("rybh")));
-                if(user==null){
+                Optional<User> optional=allUserList.stream().filter(al->al.getJobNumber()!=null&&al.getJobNumber().equals(map.get("rybh"))).findFirst();
+                if(!optional.isPresent()){
                     continue;
                 }
+                User user=optional.get();
                 System.out.println("泛微同步人员请假数据----"+user.getName());
                 if(compIds.contains(user.getCompanyId())){
                     LeaveSheet leaveSheet=new LeaveSheet();
@@ -396,7 +424,7 @@ public class TimingTask {
                     }else {
                         leaveSheet.setTimeHours(Float.parseFloat(((String) map.get("timeHours")).equals("")?"0.00":((String) map.get("timeHours"))));
                     }
-                    Integer leaveType=null;
+                    Integer leaveType;
                     switch (String.valueOf(map.get("leaveType"))){
                         case "事假":leaveType=0;
                             break;
@@ -419,7 +447,7 @@ public class TimingTask {
                     leaveSheet.setLeaveType(leaveType);
                     leaveSheet.setProcinstId(String.valueOf(map.get("procinstId")));
                     leaveSheet.setGmtFinished(String.valueOf(map.get("gmtFinished")));
-                    Optional<LeaveSheet> first = oldLeaveSheetList.stream().filter(ol -> ol.getStartDate().isEqual(leaveSheet.getStartDate())&&ol.getEndDate().isEqual(leaveSheet.getEndDate()) && ol.getOwnerId().equals(leaveSheet.getOwnerId())).findFirst();
+                    Optional<LeaveSheet> first = oldLeaveSheetList.stream().filter(ol -> ol.getStartDate().isEqual(leaveSheet.getStartDate())&&ol.getEndDate().isEqual(leaveSheet.getEndDate()) && ol.getOwnerId().equals(leaveSheet.getOwnerId())&&ol.getProcinstId().equals(leaveSheet.getProcinstId())).findFirst();
                     if(first.isPresent()){
                         leaveSheet.setId(first.get().getId());
                     }
@@ -434,11 +462,11 @@ public class TimingTask {
             HttpRespMsg travelRecordMsg = dockWithMLD.getResult("http://10.1.10.51:20175/api/cube/restful/interface/getModeDataPageList/getTravelRecord", jsonString);
             List<Map<String,Object>> travelRecordList= (List<Map<String, Object>>) travelRecordMsg.data;
             for (Map<String, Object> map : travelRecordList) {
-                User user = userMapper.selectOne(new QueryWrapper<User>().eq("job_number", map.get("rybh")));
-                if(user==null){
+                Optional<User> optional=allUserList.stream().filter(al->al.getJobNumber()!=null&&al.getJobNumber().equals(map.get("rybh"))).findFirst();
+                if(!optional.isPresent()){
                     continue;
                 }
-                System.out.println("泛微同步人员出差数据----"+user.getName());
+                User user=optional.get();
                 if(compIds.contains(user.getCompanyId())){
                     BusinessTrip businessTrip=new BusinessTrip();
                     businessTrip.setCompanyId(user.getCompanyId());
@@ -470,10 +498,11 @@ public class TimingTask {
                             break;
                     }
                     businessTrip.setGoBack(goBack);
-                    businessTrip.setDayCount(Integer.parseInt(String.valueOf(map.get("dayCount")).substring(0,1)));
+                    Double dayCount =Double.valueOf(String.valueOf(map.get("dayCount")));
+                    businessTrip.setDayCount(dayCount.intValue());
                     businessTrip.setProcinstId((String) map.get("procinstId"));
                     businessTrip.setGmtFinished((String)map.get("gmtFinished"));
-                    Optional<BusinessTrip> first = oldBusinessTripList.stream().filter(ol -> ol.getStartDate().isEqual(businessTrip.getStartDate())&&ol.getEndDate().isEqual(businessTrip.getEndDate()) && ol.getOwnerId().equals(businessTrip.getOwnerId())).findFirst();
+                    Optional<BusinessTrip> first = oldBusinessTripList.stream().filter(ol -> ol.getStartDate().isEqual(businessTrip.getStartDate())&&ol.getEndDate().isEqual(businessTrip.getEndDate()) && ol.getOwnerId().equals(businessTrip.getOwnerId())&&ol.getProcinstId().equals(businessTrip.getProcinstId())).findFirst();
                     if(first.isPresent()){
                         businessTrip.setId(first.get().getId());
                     }
@@ -486,6 +515,16 @@ public class TimingTask {
         }
     }
 
+    private  List<LocalDateTime> getDays(LocalDateTime start, LocalDateTime end) {
+        List<LocalDateTime> result = new ArrayList();
+        while (start.isBefore(end)) {
+            result.add(start);
+            start=start.plusDays(1);
+        }
+        result.add(start);
+        return result;
+    }
+
     //每天1:00 同步昨天的微信请假信息
     @Scheduled(cron = "0 0 1 ? * *")
     public void synWxLeave() throws Exception {

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/DockWithMLD.java

@@ -79,7 +79,7 @@ public class DockWithMLD {
         //分页参数 处理全部数据 不需要进行分页
         JSONObject pageInfo = new JSONObject();
         pageInfo.put("pageNo", 1);
-        pageInfo.put("pageSize",10000);
+        pageInfo.put("pageSize",99999);
         paramDatajson.put("pageInfo",pageInfo);
         //封装 mainTable 参数
         JSONObject mainTable  = JSON.parseObject(screenString);

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

@@ -41,6 +41,7 @@
         <result column="job_number" property="jobNumber" />
         <result column="corpwx_deptid" property="corpwxDeptid" />
         <result column="corpwx_real_userid" property="corpwxRealUserid" />
+        <result column="is_first_login" property="isFirstLogin" />
     </resultMap>
     <resultMap id="BaseResultMap2" type="com.management.platform.entity.User">
         <id column="id" property="id" />
@@ -50,7 +51,7 @@
     </resultMap>
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, name, phone, password, portrait_url, create_time, role, company_id, department_id, department_cascade, cost, month_cost, salary_type, manage_dept_id, color, is_active, wx_openid, role_id, role_name, cost_apply_date, dingding_userid, dingding_unionid, corpwx_userid, induction_date, inactive_date, position, report_status, superior_id, plate1, plate2, plate3, plate4, plate5, is_ops, job_number, corpwx_deptid, corpwx_real_userid
+        id, name, phone, password, portrait_url, create_time, role, company_id, department_id, department_cascade, cost, month_cost, salary_type, manage_dept_id, color, is_active, wx_openid, role_id, role_name, cost_apply_date, dingding_userid, dingding_unionid, corpwx_userid, induction_date, inactive_date, position, report_status, superior_id, plate1, plate2, plate3, plate4, plate5, is_ops, job_number, corpwx_deptid, corpwx_real_userid, is_first_login
     </sql>
     <!--单独分页获取人员-->
     <select id="getUserByDepartment" resultType="java.util.Map">