Jelajahi Sumber

请假加到甘特图上

QuYueTing 1 bulan lalu
induk
melakukan
685cff9014

+ 103 - 0
fhKeeper/formulahousekeeper/management-platform-mld/src/main/java/com/management/platform/controller/BusinessTripController.java

@@ -1,17 +1,30 @@
 package com.management.platform.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.BusinessTrip;
 import com.management.platform.entity.LeaveSheet;
+import com.management.platform.entity.TimeType;
+import com.management.platform.entity.User;
+import com.management.platform.mapper.TimeTypeMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.BusinessTripService;
+import com.management.platform.util.DockWithMLD;
 import com.management.platform.util.HttpRespMsg;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
 
 /**
  * <p>
@@ -31,6 +44,8 @@ public class BusinessTripController {
     BusinessTripService businessTripService;
     @Resource
     private HttpServletRequest request;
+    @Resource
+    private TimeTypeMapper timeTypeMapper;
 
 
 
@@ -97,5 +112,93 @@ public class BusinessTripController {
         String userId = request.getHeader("Token");
         return businessTripService.exportData(sheet,keyword, startDate, endDate, userId);
     }
+    @RequestMapping("/syncData")
+    public HttpRespMsg syncData(String startDate, String endDate){
+        HttpRespMsg msg=new HttpRespMsg();
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        TimeType one = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", companyId).eq("sync_fanwei", 1));
+        if(one==null){
+            msg.setError("暂无请假数据待同步");
+            return msg;
+        }
+        if (StringUtils.isEmpty(startDate)) {
+            msg.setError("开始时间不能为空");
+            return msg;
+        }
+        //时间跨度不能超过1个月
+        if (StringUtils.isEmpty(endDate)) {
+            msg.setError("结束时间不能为空");
+            return msg;
+        }
+        DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        LocalDate parse = LocalDate.parse(startDate, df);
+        LocalDate parse1 = LocalDate.parse(endDate, df);
+        long between = parse1.toEpochDay() - parse.toEpochDay();
+        if (between > 31) {
+            msg.setError("时间跨度不能超过1个月");
+            return msg;
+        }
+        JSONObject jsonObject=new JSONObject();
+        DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        String date = startDate + " 00:00:00," + endDate + " 23:59:59";
+        jsonObject.put("gmtFinished",date);
+        String jsonString = jsonObject.toJSONString();
+        List<User> allUserList=userMapper.selectList(new QueryWrapper<User>().eq("company_id",companyId));
+        List<BusinessTrip> businessTripList=new ArrayList<>();
+        List<BusinessTrip> oldBusinessTripList = businessTripService.list(new QueryWrapper<BusinessTrip>().eq("company_id", companyId));
+        DockWithMLD dockWithMLD=new DockWithMLD();
+        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) {
+            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();
+            BusinessTrip businessTrip=new BusinessTrip();
+            businessTrip.setCompanyId(user.getCompanyId());
+            businessTrip.setOwnerId(user.getId());
+            businessTrip.setOwnerName(user.getName());
+            businessTrip.setStartDate(LocalDate.parse(String.valueOf(map.get("startDate")),dtf1));
+            businessTrip.setEndDate(LocalDate.parse(String.valueOf(map.get("endDate")),dtf1));
+            Integer way=null;
+            switch (String.valueOf(map.get("way"))){
+                case "飞机":way=0;
+                    break;
+                case "高铁/火车":way=1;
+                    break;
+                case "汽车":way=2;
+                    break;
+                case "轮船":way=3;
+                    break;
+                case "其他":way=4;
+                    break;
+            }
+            businessTrip.setWay(way);
+            businessTrip.setCityFrom((String) map.get("cityFrom"));
+            businessTrip.setCityTo((String) map.get("cityTo"));
+            Integer goBack=null;
+            switch (String.valueOf(map.get("goBack"))){
+                case "单程":goBack=0;
+                    break;
+                case "往返":goBack=1;
+                    break;
+            }
+            businessTrip.setGoBack(goBack);
+            Double dayCount =Double.valueOf(String.valueOf(map.get("dayCount")));
+            businessTrip.setDayCount(dayCount.intValue());
+            businessTrip.setProcinstId((String) map.get("id"));
+            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())&&(ol.getProcinstId()!=null&& ol.getProcinstId().equals(businessTrip.getProcinstId()))).findFirst();
+            if(first.isPresent()){
+                businessTrip.setId(first.get().getId());
+            }
+            businessTripList.add(businessTrip);
+        }
+        if(businessTripList.size()>0){
+            businessTripService.saveOrUpdateBatch(businessTripList);
+        }
+        return msg;
+    }
 }
 

+ 21 - 3
fhKeeper/formulahousekeeper/management-platform-mld/src/main/java/com/management/platform/controller/LeaveSheetController.java

@@ -15,6 +15,7 @@ import com.management.platform.service.DepartmentService;
 import com.management.platform.service.LeaveSheetService;
 import com.management.platform.util.DockWithMLD;
 import com.management.platform.util.HttpRespMsg;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -160,7 +161,7 @@ public class LeaveSheetController {
     }
 
     @RequestMapping("/syncLeaveSheet")
-    public HttpRespMsg syncLeaveSheet(){
+    public HttpRespMsg syncLeaveSheet(String startDate, String endDate){
         HttpRespMsg msg=new HttpRespMsg();
         Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
         TimeType one = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", companyId).eq("sync_fanwei", 1));
@@ -168,11 +169,28 @@ public class LeaveSheetController {
             msg.setError("暂无请假数据待同步");
             return msg;
         }
+        if (StringUtils.isEmpty(startDate)) {
+            msg.setError("开始时间不能为空");
+            return msg;
+        }
+        //时间跨度不能超过1个月
+        if (StringUtils.isEmpty(endDate)) {
+            msg.setError("结束时间不能为空");
+            return msg;
+        }
+        DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        LocalDate parse = LocalDate.parse(startDate, df);
+        LocalDate parse1 = LocalDate.parse(endDate, df);
+        long between = parse1.toEpochDay() - parse.toEpochDay();
+        if (between > 31) {
+            msg.setError("时间跨度不能超过1个月");
+            return msg;
+        }
         DockWithMLD dockWithMLD=new DockWithMLD();
         JSONObject jsonObject=new JSONObject();
         DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        String startDate = dtf1.format(LocalDateTime.now().withHour(0).withMinute(0).withSecond(0)) + "," + dtf1.format(LocalDateTime.now().withHour(23).withMinute(59).withSecond(59));
-        jsonObject.put("gmtFinished",startDate);
+        String date = startDate + " 00:00:00," + endDate + " 23:59:59";
+        jsonObject.put("gmtFinished",date);
         String jsonString = jsonObject.toJSONString();
         TimeType allDay = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", companyId));
         List<User> allUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));

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

@@ -4810,7 +4810,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         if (functionList.size() == 0) {
             //担任部门主要负责人
             if (user.getManageDeptId() != null && user.getManageDeptId() != 0) {
-                List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("department_id", user.getManageDeptId()));
+                List<Integer> allMainManagedDeptIdList = departmentService.getAllMainManagedDeptIdList(user, departmentList);
+                List<User> userList = userMapper.selectList(new QueryWrapper<User>().in("department_id", allMainManagedDeptIdList));
                 userIds = userList.stream().map(User::getId).collect(Collectors.toList());
             }
             //检查是否是项目负责人
@@ -4861,6 +4862,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 String lsLastItemId = null;
                 String btLastItemId = null;
                 //按人员获取
+                System.out.println("userIds.size()============"+userIds.size());
                 ganttData = projectMapper.getTaskPlanByMemb(userIds, startDate + " 00:00:00" ,endDate + " 23:59:59", user.getCompanyId(),user.getId());
                 QueryWrapper<BusinessTrip> btQueryWrapper =new QueryWrapper<>();
                 btQueryWrapper.in("owner_id", userIds);
@@ -4917,6 +4919,73 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     }
                 }
 
+                QueryWrapper<LeaveSheet> lsQueryWrapper=new QueryWrapper();
+                lsQueryWrapper.in("owner_id", userIds);
+                if (startDate != null && endDate != null) {
+                    lsQueryWrapper.le("start_date", endDate).ge("end_date", startDate);
+                }
+                List<LeaveSheet> leaveSheetList = leaveSheetMapper.selectList(lsQueryWrapper);
+                for(int i=0;i<leaveSheetList.size();i++){
+                    GanttDataItem curItem = new GanttDataItem();;
+                    if (!leaveSheetList.get(i).getOwnerId().equals(lsLastItemId)) {
+                        //抽取父级对象,人员名称
+                        int finalI = i;
+                        Optional<User> first = AllUser.stream().filter(us -> us.getId().equals(leaveSheetList.get(finalI).getOwnerId())).findFirst();
+                        Integer departmentId =null;
+                        if(first.isPresent()){
+                            departmentId=first.get().getDepartmentId();
+                        }
+                        GanttDataItem parent = new GanttDataItem();
+                        parent.id = leaveSheetList.get(i).getOwnerId();
+                        parent.userId = leaveSheetList.get(i).getOwnerId();
+                        parent.text = leaveSheetList.get(i).getOwnerName();
+                        parent.render = "split";
+                        parent.start_date = leaveSheetList.get(i).getStartDate().toString();
+                        parent.end_date = leaveSheetList.get(i).getEndDate().toString();
+                        parent.time = 0.0;
+                        parent.parent=String.valueOf(departmentId);
+                        parent.setObjType(0);
+                        itemList.add(parent);
+                        lsLastItemId =leaveSheetList.get(i).getOwnerId();
+                    }
+                    curItem.id = "请假_"+leaveSheetList.get(i).getId();
+                    curItem.userId = leaveSheetList.get(i).getOwnerId();
+                    switch (leaveSheetList.get(i).getLeaveType()){
+                        //case 0:curItem.text = "事假";
+                        case 0:curItem.text = MessageUtils.message("leave.thing");
+                            break;
+                        //case 1:curItem.text = "病假";
+                        case 1:curItem.text = MessageUtils.message("leave.illness");
+                            break;
+                        //case 2:curItem.text = "年假";
+                        case 2:curItem.text = MessageUtils.message("leave.year");
+                            break;
+                        //case 3:curItem.text = "产假";
+                        case 3:curItem.text = MessageUtils.message("leave.maternity");
+                            break;
+                        //case 4:curItem.text = "婚假";
+                        case 4:curItem.text = MessageUtils.message("leave.marry");
+                            break;
+                        //case 5:curItem.text = "丧假";
+                        case 5:curItem.text = MessageUtils.message("leave.die");
+                            break;
+                        //case 6:curItem.text = "调休假";
+                        case 6:curItem.text = MessageUtils.message("leave.compensatory");
+                            break;
+                        //case 7:curItem.text = "陪产假";
+                        case 7:curItem.text = MessageUtils.message("leave.paternity");
+                            break;
+                        //case 8:curItem.text = "其他";
+                        case 8:curItem.text = MessageUtils.message("leave.other");
+                            break;
+                    }
+                    curItem.start_date = leaveSheetList.get(i).getStartDate().toString();
+                    curItem.end_date =leaveSheetList.get(i).getEndDate().toString();
+                    curItem.parent = lsLastItemId;
+                    itemList.add(curItem);
+                    lsLastItemId = leaveSheetList.get(i).getOwnerId();
+                }
+
                 for(int i=0;i<businessTripList.size();i++){
                     GanttDataItem curItem = new GanttDataItem();;
                     if (!businessTripList.get(i).getOwnerId().equals(btLastItemId)) {
@@ -4990,6 +5059,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 if (startDate != null && endDate != null) {
                     bpQueryWrapper.le("start_date", endDate).ge("end_date", startDate);
                 }
+
                 List<Integer> btIdList=new ArrayList<>();
                 List<BusinessTrip> businessTripList = businessTripMapper.selectList(btQueryWrapper);
                 if(businessTripList.size()>0){
@@ -5057,6 +5127,21 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 //String exeId = "任务_"+map.get("task_id") +"_"+ (type==0?(Integer) map.get("exe_id"):userId);
                 String exeId = MessageUtils.message("excel.task") + "_"+map.get("task_id") +"_"+ (type==0?(Integer) map.get("exe_id"):userId);
                 String taskId = ""+ (Integer) map.get("task_id");
+                //跳过重叠的请假任务
+                boolean findMatch = itemList.stream().anyMatch(item->{
+                    if (item.id.startsWith("请假_") && userId.equals(item.userId)) {
+                        String trimStartDate = start_date.substring(0, "yyyy-MM-dd".length());
+                        String trimEndDate = end_date.substring(0, "yyyy-MM-dd".length());
+                        if (trimStartDate.equals(item.start_date) && trimEndDate.equals(item.end_date)) {
+                            return true;
+                        }
+                    }
+                    return false;
+                });
+                if (findMatch) {
+                    continue;
+                }
+
 
                 GanttDataItem curItem = new GanttDataItem();;
                 if (type == 0) {