Quellcode durchsuchen

Merge branch 'master' of http://47.100.37.243:10080/wutt/manHourHousekeeper

ggooalice vor 2 Jahren
Ursprung
Commit
6af2440dc1
22 geänderte Dateien mit 879 neuen und 261 gelöschten Zeilen
  1. 2 6
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ExpenseTypeController.java
  2. 16 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  3. 17 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskCommentController.java
  4. 19 21
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java
  5. 9 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserCorpwxTimeController.java
  6. 71 61
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java
  7. 8 5
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/WxOrder.java
  8. 4 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/GanttDataItem.java
  9. 4 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  10. 27 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceServiceImpl.java
  11. 504 19
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  12. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskProgressServiceImpl.java
  13. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java
  14. 5 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/MessageUtils.java
  15. 3 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/i18n/messages.properties
  16. 3 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/i18n/messages_en_US.properties
  17. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/BusinessTripMapper.xml
  18. 12 16
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml
  19. 2 2
      fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue
  20. 41 33
      fhKeeper/formulahousekeeper/timesheet/src/views/project/project_gantt.vue
  21. 125 79
      fhKeeper/formulahousekeeper/timesheet/src/views/project/vueGantt.vue
  22. 2 2
      fhKeeper/formulahousekeeper/timesheet/src/views/task/list.vue

+ 2 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ExpenseTypeController.java

@@ -41,7 +41,7 @@ public class ExpenseTypeController {
     public HttpRespMsg getList() {
         User user = userMapper.selectById(request.getHeader("token"));
         HttpRespMsg msg = new HttpRespMsg();
-        msg.data=expenseTypeMapper.selectList(new QueryWrapper<ExpenseType>().eq("company_id",user.getCompanyId()));
+        msg.data=expenseTypeMapper.selectList(new QueryWrapper<ExpenseType>().eq("company_id",user.getCompanyId()).orderByDesc("mainType"));
         return msg;
     }
 
@@ -71,11 +71,7 @@ public class ExpenseTypeController {
                 //msg.setError("该名称已存在");
                 msg.setError(MessageUtils.message("Company.nameRepeat"));
             } else {
-                //检查名称是否有变化
-                ExpenseType oldSetting = expenseTypeMapper.selectById(setting.getId());
-                if (!setting.getTypeName().equals(oldSetting.getTypeName())) {
-                    expenseTypeMapper.updateById(setting);
-                }
+                expenseTypeMapper.updateById(setting);
                 msg.data = expenseTypeMapper.selectList(new QueryWrapper<ExpenseType>().eq("company_id", companyId));
             }
         }

+ 16 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java

@@ -1,6 +1,7 @@
 package com.management.platform.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.*;
 import com.management.platform.mapper.*;
@@ -13,11 +14,16 @@ import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.ss.util.CellRangeAddressList;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
@@ -477,6 +483,11 @@ public class ProjectController {
         return projectService.getGanttData(type, startDate, endDate, userId, projectId, groupName,taskType, request);
     }
 
+    @RequestMapping("/getGanttDataNew")
+    public HttpRespMsg getGanttDataNew(@RequestParam(required = false, defaultValue = "0") Integer type, String startDate, String endDate, String userId, Integer projectId, String groupName,Integer taskType, HttpServletRequest request) {
+        return projectService.getGanttDataNew(type, startDate, endDate, userId, projectId, groupName,taskType, request);
+    }
+
     /**
      *
      * @param projectId 项目id, 非必传
@@ -1100,14 +1111,15 @@ public class ProjectController {
 
     //部门参与项目情况表
     @RequestMapping("/deptPartInProjects")
-    public HttpRespMsg deptPartInProjects(@RequestParam Integer pageIndex, @RequestParam Integer pageSize,String startDate,String endDate,Integer departmentId,HttpServletRequest request){
-        return projectService.deptPartInProjects(pageIndex,pageSize,startDate,endDate,departmentId,request);
+    public HttpRespMsg deptPartInProjects(@RequestParam Integer pageIndex, @RequestParam Integer pageSize,String month,Integer departmentId,HttpServletRequest request){
+        return projectService.deptPartInProjects(pageIndex,pageSize,month,departmentId,request);
     }
 
     //导出部门参与项目情况表
     @RequestMapping("/exportDeptPartInProjects")
-    public HttpRespMsg exportDeptPartInProjects(String startDate,String endDate,Integer departmentId,HttpServletRequest request){
-        return projectService.exportDeptPartInProjects(startDate,endDate,departmentId,request);
+    public HttpRespMsg exportDeptPartInProjects(String month,Integer departmentId,HttpServletRequest request){
+        return projectService.exportDeptPartInProjects(month,departmentId,request);
     }
+
 }
 

+ 17 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskCommentController.java

@@ -4,6 +4,9 @@ package com.management.platform.controller;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.TaskComment;
 import com.management.platform.entity.User;
+import com.management.platform.entity.WxCorpInfo;
+import com.management.platform.mapper.UserMapper;
+import com.management.platform.mapper.WxCorpInfoMapper;
 import com.management.platform.service.TaskCommentService;
 import com.management.platform.service.UserService;
 import com.management.platform.util.HttpRespMsg;
@@ -33,11 +36,12 @@ public class TaskCommentController {
     private TaskCommentService taskCommentService;
     @Resource
     private UserService userService;
+    @Resource
+    private WxCorpInfoMapper wxCorpInfoMapper;
+    @Resource
+    private UserMapper userMapper;
     /**
      * 添加任务留言
-     * @param taskId 任务id
-     * @param userId 用户id
-     * @param content 内容
      * @return
      */
     @RequestMapping("/add")
@@ -61,6 +65,16 @@ public class TaskCommentController {
     @RequestMapping("getList")
     public HttpRespMsg getList(Integer taskId) {
         List<TaskComment> taskComments = taskCommentService.list(new QueryWrapper<TaskComment>().eq("task_id", taskId));
+        String token = request.getHeader("token");
+        User user = userMapper.selectById(token);
+        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id",user.getCompanyId()));
+        if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+            for (TaskComment taskComment : taskComments) {
+                String userName = taskComment.getUserName();
+                String content = taskComment.getContent();
+                taskComment.setContent(content.replace("userName", "$userName=" + userName + "$"));
+            }
+        }
         HttpRespMsg msg = new HttpRespMsg();
         msg.data = taskComments;
         return msg;

+ 19 - 21
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java

@@ -149,6 +149,7 @@ public class TaskController {
             task.setParentTname(taskService.getById(task.getParentTid()).getName());
         }
         boolean isNew = false;
+        boolean needRecalculateProgress = false;
         List<String> msgRecepientList = new ArrayList<>();
         List<Task> needReOrderList = new ArrayList<>();
         //新建的任务需要计算排序
@@ -175,6 +176,9 @@ public class TaskController {
             if (task.getExecutorId() != null) {
                 msgRecepientList = task.getExecutorList().stream().filter(exe->!StringUtils.isEmpty(exe.getExecutorId())).map(TaskExecutor::getExecutorId).collect(Collectors.toList());
             }
+            if (task.getTaskType() == 1) {
+                needRecalculateProgress = true;
+            }
         } else {
             //更新的情况,需要对比是否修改了任务标题,更新子任务的parentTname
             Task oldTask = taskService.getById(task.getId());
@@ -206,6 +210,9 @@ public class TaskController {
             if(task.getFinishDate()==null){
                 taskMapper.updateFinishDate(task.getId());
             }
+            if ((oldTask.getTaskType() == 1 && task.getTaskType() != 1) || (oldTask.getTaskType() != 1 && task.getTaskType() == 1)) {
+                needRecalculateProgress = true;
+            }
         }
         System.out.println(task.getStartDate());
         System.out.println(task.getEndDate());
@@ -237,8 +244,8 @@ public class TaskController {
         comment.setContent(user.getName()+(isNew?MessageUtils.message("entry.create"):MessageUtils.message("entry.editedTask"))+MessageUtils.message("entry.task"));
         taskCommentMapper.insert(comment);
 
-        //新增任务,需要重新计算项目进度
-        if (isNew) {
+        //需要重新计算项目进度
+        if (needRecalculateProgress) {
             updateProjectProgress(task.getProjectId());
         }
         if (msgRecepientList.size() > 0) {
@@ -281,10 +288,8 @@ public class TaskController {
     }
 
     private void updateProjectProgress(Integer projectId) {
-        //更新项目完成度
-        //只有第一级任务才更新项目进度, 非已撤销状态的
-        List<Task> all = taskMapper.simpleList(new QueryWrapper<Task>().eq("project_id", projectId).isNull("parent_tid").ne("task_status", 2).eq("task_type",1));
-
+        //只有里程碑才更新项目进度, 非已撤销状态的
+        List<Task> all = taskMapper.simpleList(new QueryWrapper<Task>().eq("project_id", projectId).ne("task_status", 2).eq("task_type",1));
         if (all.size() > 0) {
             long running = all.stream().filter(a -> a.getTaskStatus() == 1).count();
             int progress = ((int) running) * 100 / all.size();
@@ -366,23 +371,16 @@ public class TaskController {
             taskService.notifyMileStoneFinish(user.getCompanyId(), finishedMileStoneList);
         }
 
-        //更新项目完成度
-        Task item = taskService.getById(task.getId());
-        if (item.getParentTid() == null) {
-            //只有第一级任务才更新项目进度, 非已撤销状态的
-            long allProjectTaskCount =  taskService.count(new QueryWrapper<Task>().eq("project_id", item.getProjectId()).isNull("parent_tid").ne("task_status", 2).eq("task_type",1));
-            long finishTaskCount = taskService.count(new QueryWrapper<Task>().eq("project_id", item.getProjectId()).isNull("parent_tid").eq("task_status", 1).eq("task_type",1));
-            if (allProjectTaskCount > 0) {
-                int progress = ((int) finishTaskCount) * 100 / (int)allProjectTaskCount;
-                Project project = new Project();
-                project.setId(item.getProjectId());
-                project.setProgress(progress);
-                projectService.updateById(project);
-            }
+        //如果是里程碑,需要更新项目完成度
+        task = taskMapper.selectById(task.getId());
+        if (task.getTaskType() == 1) {
+            Integer projectId = task.getProjectId();
+            updateProjectProgress(projectId);
         }
         return msg;
     }
 
+
     @RequestMapping("/changeOrder")
     public HttpRespMsg changeOrder(Integer id, Integer oldIndex, Integer newIndex, Integer oldStagesId, Integer newStagesId) {
         HttpRespMsg msg = new HttpRespMsg();
@@ -727,8 +725,8 @@ public class TaskController {
         deleteSubTask(task);
 
 
-        //删除根任务,需要重新计算项目进度
-        if (task.getParentTid() == null) {
+        //删除里程碑,需要重新计算项目进度
+        if (task.getTaskType() == 1) {
             updateProjectProgress(task.getProjectId());
         }
         return new HttpRespMsg();

+ 9 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserCorpwxTimeController.java

@@ -16,6 +16,7 @@ import com.management.platform.util.MessageUtils;
 import com.management.platform.util.WorkDayCalculateUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
@@ -309,9 +310,15 @@ public class UserCorpwxTimeController {
     }
 
     @RequestMapping("/getPunchRecordBySelf")
-    public HttpRespMsg getUserPunchRecord(String date){
+    public HttpRespMsg getUserPunchRecord(String date, String userId){
         HttpRespMsg msg=new HttpRespMsg();
-        User user = userMapper.selectById(request.getHeader("token"));
+        User user = null;
+        if (StringUtils.isEmpty(userId)) {
+            user = userMapper.selectById(request.getHeader("token"));
+        } else {
+            user = userMapper.selectById(userId);
+        }
+
         Map<String,Object> resultMap =new HashMap<>();
         List<UserCorpwxTime> oldCorpwxTimes = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>()
                 .eq("corpwx_userid", user.getCorpwxUserid()).eq("create_date", date));

+ 71 - 61
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -540,11 +540,16 @@ public class WeiXinCorpController {
             jsonObject = jsonObject.getJSONObject("xml");
 
             //存储更新订单、更新公司续费情况
-            if (jsonObject.has("OrderId")){
-                boolean b = saveOrderAndUpCompany(jsonObject);
-                if (!b){
-                    System.out.println("+++++++++++++++++++微信应用市场付费回调处理失败+++++++++++++++++++++++");
-                    System.out.println(jsonObject);
+            if (jsonObject.has("InfoType")){
+                String infoType = jsonObject.getString("InfoType");
+                //open_order:下单成功通知; change_order:改单通知; pay_for_app_success:支付成功通知;
+                //refund:退款通知; change_editon:付费版本变更通知;
+                if ("open_order".equals(infoType) || "change_order".equals(infoType) || "pay_for_app_success".equals(infoType) || "refund".equals(infoType) || "change_editon".equals(infoType)){
+                    boolean b = saveOrderAndUpCompany(jsonObject);
+                    if (!b){
+                        System.out.println("+++++++++++++++++++微信应用市场付费回调处理失败+++++++++++++++++++++++");
+                        System.out.println(jsonObject);
+                    }
                 }
             }
 
@@ -1006,46 +1011,46 @@ public class WeiXinCorpController {
                         //生成费用报销默认条目
                         String[] expenseTypes = Constant.EXPENSE_TYPES;
                         List<String> commonly = new ArrayList<>();
-                        //commonly.add("材料费");
-                        commonly.add(MessageUtils.message("entry.materialCost"));
-                        //commonly.add("办公用品");
-                        commonly.add(MessageUtils.message("entry.workCost"));
-                        //commonly.add("培训费");
-                        commonly.add(MessageUtils.message("entry.trainCost"));
-                        //commonly.add("打印费");
-                        commonly.add(MessageUtils.message("entry.printCost"));
-                        //commonly.add("快递费");
-                        commonly.add(MessageUtils.message("entry.expressCost"));
-                        //commonly.add("制作费");
-                        commonly.add(MessageUtils.message("entry.makeCost"));
-                        //commonly.add("律师费");
-                        commonly.add(MessageUtils.message("entry.lawyerCost"));
-                        //commonly.add("水费");
-                        commonly.add(MessageUtils.message("entry.waterCost"));
-                        //commonly.add("电费");
-                        commonly.add(MessageUtils.message("entry.electricCost"));
-                        //commonly.add("团建费");
-                        commonly.add(MessageUtils.message("entry.leagueCost"));
-                        //commonly.add("其他");
-                        commonly.add(MessageUtils.message("entry.other"));
+                        commonly.add("材料费");
+                        //commonly.add(MessageUtils.message("entry.materialCost"));
+                        commonly.add("办公用品");
+                        //commonly.add(MessageUtils.message("entry.workCost"));
+                        commonly.add("培训费");
+                        //commonly.add(MessageUtils.message("entry.trainCost"));
+                        commonly.add("打印费");
+                        //commonly.add(MessageUtils.message("entry.printCost"));
+                        commonly.add("快递费");
+                        //commonly.add(MessageUtils.message("entry.expressCost"));
+                        commonly.add("制作费");
+                        //commonly.add(MessageUtils.message("entry.makeCost"));
+                        commonly.add("律师费");
+                        //commonly.add(MessageUtils.message("entry.lawyerCost"));
+                        commonly.add("水费");
+                        //commonly.add(MessageUtils.message("entry.waterCost"));
+                        commonly.add("电费");
+                        //commonly.add(MessageUtils.message("entry.electricCost"));
+                        commonly.add("团建费");
+                        //commonly.add(MessageUtils.message("entry.leagueCost"));
+                        commonly.add("其他");
+                        //commonly.add(MessageUtils.message("entry.other"));
                         List<String> travel  = new ArrayList<>();
-                        //travel.add("城市间交通费");
-                        travel.add(MessageUtils.message("entry.cityTrafficCost"));
-                        //travel.add("住宿费");
-                        travel.add(MessageUtils.message("entry.liveCost"));
-                        //travel.add("伙食补助费");
-                        travel.add(MessageUtils.message("entry.eatCost"));
-                        //travel.add("市内交通费");
-                        travel.add(MessageUtils.message("entry.insideCityCost"));
-                        //travel.add("其他差旅费");
-                        travel.add(MessageUtils.message("entry.otherLiveTraCost"));
+                        travel.add("城市间交通费");
+                        //travel.add(MessageUtils.message("entry.cityTrafficCost"));
+                        travel.add("住宿费");
+                        //travel.add(MessageUtils.message("entry.liveCost"));
+                        travel.add("伙食补助费");
+                        //travel.add(MessageUtils.message("entry.eatCost"));
+                        travel.add("市内交通费");
+                        //travel.add(MessageUtils.message("entry.insideCityCost"));
+                        travel.add("其他差旅费");
+                        //travel.add(MessageUtils.message("entry.otherLiveTraCost"));
                         List<String> outsource = new ArrayList<>();
-                        //outsource.add("项目外包费");
-                        outsource.add(MessageUtils.message("entry.projectCost"));
-                        //outsource.add("劳务外包费");
-                        outsource.add(MessageUtils.message("entry.labourCost"));
-                        //outsource.add("其他外包费");
-                        outsource.add(MessageUtils.message("entry.OtherOutsourceCost"));
+                        outsource.add("项目外包费");
+                        //outsource.add(MessageUtils.message("entry.projectCost"));
+                        outsource.add("劳务外包费");
+                        //outsource.add(MessageUtils.message("entry.labourCost"));
+                        outsource.add("其他外包费");
+                        //outsource.add(MessageUtils.message("entry.OtherOutsourceCost"));
                         List<ExpenseType> expenseTypeList=new ArrayList<>();
                         for (String expenseType : expenseTypes) {
                             ExpenseType item=new ExpenseType();
@@ -2700,9 +2705,10 @@ public class WeiXinCorpController {
     }
 
     private boolean saveOrderAndUpCompany(org.json.JSONObject jsonObject) throws Exception {
-        System.err.println("+++++++++++++++++++"+"订单回调开始"+"++++++++++++++++++++++");
+        System.err.println("+++++++++++++++++++订单回调开始++++++++++++++++++++++");
         String infoType = jsonObject.getString("InfoType");
         String suiteAccessToken = getSuiteAccessToken();
+        System.out.println("++++++++++++++++++++suiteAccessToken为:"+suiteAccessToken);
         HttpHeaders headers = new HttpHeaders();
         RestTemplate restTemplate = new RestTemplate();
         MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
@@ -2720,9 +2726,11 @@ public class WeiXinCorpController {
             HttpEntity<JSONObject> detailEntity = new HttpEntity<>(map, headers);
             ResponseEntity<String> detailResponseEntity = restTemplate.postForEntity(url, detailEntity, String.class);
             JSONObject json = JSONObject.parseObject(detailResponseEntity.getBody());
+            System.out.println("+++++++++++++++++++++++++版本更新信息为:"+json);
             if (json.containsKey("auth_corp_info")){
-                String editionName = json.getString("edition_id");
-                switch (editionName){
+                String edition_id = json.getJSONObject("edition_info").getJSONArray("agent")
+                        .getJSONObject(0).getString("edition_id");
+                switch (edition_id){
                     //基础版
                     case "sp17da4a6e6f2a91f8":
                         company.setPackageProject(0);
@@ -2825,26 +2833,28 @@ public class WeiXinCorpController {
                 }
                 //获取该公司对象
                 WxCorpInfo corpid = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("corpid", wxOrder.getPaidCorpid()));
-                Company company = companyMapper.selectById(corpid.getCompanyId());
-                if ("open_order".equals(infoType)){
-                    wxOrderMapper.insert(wxOrder);
-                }else if ("change_order".equals(infoType)){
-                    wxOrder.setOldOrderid(jsonObject.getString("OldOrderId"));
-                    wxOrderMapper.insert(wxOrder);
-                }else if("pay_for_app_success".equals(infoType)){
-                    wxOrderMapper.updateById(wxOrder);
-                    if (wxOrder.getOrderPeriod().equals(365)){
+                if (corpid!=null){
+                    Company company = companyMapper.selectById(corpid.getCompanyId());
+                    if("pay_for_app_success".equals(infoType)){
+                        wxOrderMapper.updateById(wxOrder);
+                        Integer orderPeriod = wxOrder.getOrderPeriod();
                         //若到期时间早已过期,则取当前时间加上开通时长
                         if (LocalDateTime.now().isAfter(company.getExpirationDate())){
-                            company.setExpirationDate(LocalDateTime.now().plusYears(1));
+                            company.setExpirationDate(LocalDateTime.now().plusDays(orderPeriod));
                         }else {
-                            company.setExpirationDate(company.getExpirationDate().plusYears(1));
+                            company.setExpirationDate(company.getExpirationDate().plusDays(orderPeriod));
                         }
+                    }else if ("refund".equals(infoType)){
+                        wxOrderMapper.updateById(wxOrder);
+                        //退款则将其到期时间设置为现在的时间减去一天
+                        company.setExpirationDate(LocalDateTime.now().minusDays(1));
                     }
-                }else if ("refund".equals(infoType)){
-                    wxOrderMapper.updateById(wxOrder);
-                    //退款则将其到期时间设置为现在的时间减去一天
-                    company.setExpirationDate(LocalDateTime.now().minusDays(1));
+                }
+                if ("open_order".equals(infoType)){
+                    wxOrderMapper.insert(wxOrder);
+                }else if ("change_order".equals(infoType)){
+                    wxOrder.setOldOrderid(jsonObject.getString("OldOrderId"));
+                    wxOrderMapper.insert(wxOrder);
                 }
             }else {
                 System.out.println("+++++++++++++"+"微信订单查询更新失败"+"+++++++++++++++");

+ 8 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/WxOrder.java

@@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2022-11-01
+ * @since 2022-11-09
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -88,7 +88,7 @@ public class WxOrder extends Model<WxOrder> {
      * 实付款金额,单位分
      */
     @TableField("price")
-    private Double price;
+    private Integer price;
 
     /**
      * 购买的人数
@@ -142,20 +142,23 @@ public class WxOrder extends Model<WxOrder> {
      * 服务商分成金额,单位分
      */
     @TableField("service_share_amount")
-    private String serviceShareAmount;
+    private Integer serviceShareAmount;
 
     /**
      * 平台分成金额,单位分
      */
     @TableField("platform_share_amount")
-    private String platformShareAmount;
+    private Integer platformShareAmount;
 
     /**
      * 代理商分成金额,单位分
      */
     @TableField("dealer_share_amount")
-    private String dealerShareAmount;
+    private Integer dealerShareAmount;
 
+    /**
+     * 代理商corpid
+     */
     @TableField("dealer_corpid")
     private String dealerCorpid;
 

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/GanttDataItem.java

@@ -2,6 +2,8 @@ package com.management.platform.entity.vo;
 
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class GanttDataItem {
     public String id;
@@ -16,4 +18,6 @@ public class GanttDataItem {
     public Integer projectId;
     public String render;
     public String type;
+    public String color;
+    public List<GanttDataItem> children;
 }

+ 4 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java

@@ -205,10 +205,11 @@ public interface ProjectService extends IService<Project> {
 
     HttpRespMsg exportEmpMonthHours(String month, HttpServletRequest request, String userId, Integer departmentId,Integer whether);
 
-    HttpRespMsg deptPartInProjects(Integer pageIndex, Integer pageSize, String startDate,String endDate, Integer departmentId, HttpServletRequest request);
-
-    HttpRespMsg exportDeptPartInProjects(String startDate,String endDate, Integer departmentId, HttpServletRequest request);
+    HttpRespMsg deptPartInProjects(Integer pageIndex, Integer pageSize, String month, Integer departmentId, HttpServletRequest request);
 
+    HttpRespMsg exportDeptPartInProjects(String month, Integer departmentId, HttpServletRequest request);
 
     HttpRespMsg exportReportTimelinessRateByQuarter(HttpServletRequest request, String year, Integer quarter);
+
+    HttpRespMsg getGanttDataNew(Integer type, String startDate, String endDate, String userId, Integer projectId, String groupName, Integer taskType, HttpServletRequest request);
 }

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

@@ -79,6 +79,8 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
     WxCorpInfoMapper wxCorpInfoMapper;
     @Resource
     ExcelExportService excelExportService;
+    @Resource
+    UserCustomMapper userCustomMapper;
 
     @Resource
     private ProjectMapper projectMapper;
@@ -471,6 +473,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
             boolean isSecret = timeType.getIsSecretSalary()==1?true:false;
             final List<FinanceTblcuscol> cusColList = financeTblcuscolMapper.selectList(new QueryWrapper<FinanceTblcuscol>().eq("company_id", companyId));
             List<Project> allProjects = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", companyId));
+            List<UserCustom> userCustoms = userCustomMapper.selectList(new QueryWrapper<UserCustom>().eq("company_id", companyId));
             Map<String, Object> resultMap = new HashMap<>();
             double totalCostTime = 0;
             BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
@@ -495,13 +498,15 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                 headList.add(MessageUtils.message("entry.projectName"));
                 //headList.add("人员");
                 headList.add(MessageUtils.message("entry.personnel"));
+                for (UserCustom userCustom : userCustoms) {
+                    headList.add(userCustom.getName());
+                }
                 //headList.add("工时(h)");
                 headList.add(MessageUtils.message("entry.workHours")+"(h)");
             } else {
                 //headList.add("项目分类");
                 headList.add(MessageUtils.message("entry.projectType"));
             }
-
             FinanceFixedcolname fixedItem = financeFixedcolnameService.getFixed(companyId);
             headList.add(fixedItem.getMonthCost()+"(元)");
             headList.add(fixedItem.getBonus()+"(元)");
@@ -847,6 +852,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                     rowData.add(p.projectCode);
                     rowData.add(p.project);
                     rowData.add("");
+                    userCustoms.forEach(userCustom -> {rowData.add("");});
                     rowData.add(p.workingTime+"");
                     rowData.add(p.salary.toPlainString());
                     rowData.add(p.bonus.toPlainString());
@@ -903,6 +909,25 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                             }else {
                                 membRowData.add(us.getName());
                             }
+                            for (int i = 0; i < userCustoms.size(); i++) {
+                                switch (i){
+                                    case 0:
+                                        membRowData.add(us.getPlate1()==null?"":us.getPlate1());
+                                        break;
+                                    case 1:
+                                        membRowData.add(us.getPlate2()==null?"":us.getPlate2());
+                                        break;
+                                    case 2:
+                                        membRowData.add(us.getPlate3()==null?"":us.getPlate3());
+                                        break;
+                                    case 3:
+                                        membRowData.add(us.getPlate4()==null?"":us.getPlate4());
+                                        break;
+                                    case 4:
+                                        membRowData.add(us.getPlate5()==null?"":us.getPlate5());
+                                        break;
+                                }
+                            }
                             membRowData.add(workingTime+"");
                             membRowData.add(salary.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString());
                             membRowData.add(bonus.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString());
@@ -1076,6 +1101,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
             if (groupByCategory == 0) {
                 sumRow.add("");
                 sumRow.add("");
+                userCustoms.forEach(userCustom ->{sumRow.add("");});
                 sumRow.add(""+totalCostTime);
             }
             sumRow.add(totalSalary.toString());

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

@@ -7,9 +7,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
 import com.management.platform.entity.*;
 import com.management.platform.entity.vo.*;
 import com.management.platform.mapper.*;
@@ -34,13 +31,10 @@ import org.apache.poi.xssf.usermodel.XSSFCell;
 import org.apache.poi.xssf.usermodel.XSSFRow;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.apache.tomcat.jni.Local;
 import org.assertj.core.util.Lists;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Isolation;
-import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -54,6 +48,7 @@ import java.math.BigDecimal;
 import java.sql.Timestamp;
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.Duration;
 import java.time.LocalDate;
@@ -65,8 +60,6 @@ import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static java.time.format.DateTimeFormatter.ISO_DATE;
-
 
 /**
  * <p>
@@ -2350,6 +2343,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     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;
@@ -7631,7 +7627,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 
     //部门参与项目情况表
     @Override
-    public HttpRespMsg deptPartInProjects(Integer pageIndex, Integer pageSize, String startDate,String endDate, Integer departmentId, HttpServletRequest request){
+    public HttpRespMsg deptPartInProjects(Integer pageIndex, Integer pageSize, String month, Integer departmentId, HttpServletRequest request){
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("token"));
         List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(user.getRoleId(),"全部部门参与项目情况表");
@@ -7665,6 +7661,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         if(departmentId!=null){
             branchDepartment = getBranchDepartment(departmentId, allDepartmentList);
         }
+        String startDate = null;
+        String endDate = null;
+        LocalDate time = LocalDate.parse(month, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        startDate = time.with(TemporalAdjusters.firstDayOfMonth()).toString();
+        endDate = time.with(TemporalAdjusters.lastDayOfMonth()).toString();
         //分页查询数据
         if(pageIndex!=null&&pageSize!=null){
             Integer size=pageSize;
@@ -7678,13 +7679,14 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             total = maps.size();
         }
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
-        System.err.println(resultList.toString());
         if (resultList.size() > 0){
+            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            LocalDate localStartDate = LocalDate.parse(startDate, dateTimeFormatter);
+            LocalDate localEndDate = LocalDate.parse(endDate, dateTimeFormatter);
             for (Map<String, Object> stringObjectMap : resultList) {
                 Department department = departmentMapper.selectById(stringObjectMap.get("deptId").toString());
-                if ("0".equals(stringObjectMap.get("deptId").toString())){
-                    stringObjectMap.put("deptName","未分配");
-                }else if (wxCorpInfo!=null && wxCorpInfo.getSaasSyncContact()==1 && department != null){
+                List<Map<String,Object>> businessTrips = null;
+                if (wxCorpInfo!=null && wxCorpInfo.getSaasSyncContact()==1 && department != null){
                     stringObjectMap.put("deptName",getWxDepartment(department));
                 }else {
                     stringObjectMap.put("deptName",getSupDepartment(department));
@@ -7694,14 +7696,42 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 stringObjectMap.put("centerCount",stringObjectMap.get("centerCount")==null?0:stringObjectMap.get("centerCount"));
                 stringObjectMap.put("peopleCount",stringObjectMap.get("peopleCount")==null?0:stringObjectMap.get("peopleCount"));
                 if (StringUtils.isEmpty(startDate) && StringUtils.isEmpty(endDate)){
-                    List<Map<String,Object>> businessTrips = businessTripMapper.selectBusiness(null, null,stringObjectMap.get("deptId").toString());
+                    businessTrips = businessTripMapper.selectBusiness(null, null,stringObjectMap.get("deptId").toString());
                     Integer dayCount = businessTrips.stream().collect(Collectors.summingInt((b) -> (int)b.get("dayCount")));
                     stringObjectMap.put("tripCount",dayCount==null?0:dayCount);
-                }else{
-                    List<Map<String,Object>> businessTrips = businessTripMapper.selectBusiness(startDate,endDate,stringObjectMap.get("deptId").toString());
+                }else {
+                    businessTrips = businessTripMapper.selectBusiness(startDate,endDate,stringObjectMap.get("deptId").toString());
                     for (Map<String, Object> businessTrip : businessTrips) {
-
+                        String tripStartS = businessTrip.get("startDate").toString();
+                        String tripEndS = businessTrip.get("endDate").toString();
+                        LocalDate tripStart = LocalDate.parse(tripStartS, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                        LocalDate tripEnd = LocalDate.parse(tripEndS, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                        //若出差开始时间不在本月内
+                        if(tripStart.isBefore(localStartDate)){
+                            long day = localStartDate.toEpochDay() - tripStart.toEpochDay();
+                            int dayCount = Integer.parseInt(businessTrip.get("dayCount").toString());
+                            businessTrip.put("dayCount",dayCount-day);
+                        }
+                        //若出差结束时间不在本月内
+                        if (tripEnd.isAfter(localEndDate)){
+                            long day = tripEnd.toEpochDay() - localEndDate.toEpochDay();
+                            int dayCount = Integer.parseInt(businessTrip.get("dayCount").toString());
+                            businessTrip.put("dayCount",dayCount-day);
+                        }
+                        System.err.println(stringObjectMap.get("deptId"));
+                        System.err.print(tripStart);
+                        System.err.println(tripEnd);
+                        System.err.println(businessTrip.get("dayCount"));
                     }
+                    Integer dayCount = businessTrips.stream().collect(Collectors.summingInt((b) -> Integer.parseInt(b.get("dayCount").toString())));
+                    stringObjectMap.put("tripCount",dayCount==null?0:dayCount);
+                }
+                Long peopleCount = null;
+                if (businessTrips!=null && businessTrips.size()!=0){
+                    peopleCount = businessTrips.stream().map((b) -> b.get("userId")).distinct().count();
+                    stringObjectMap.put("tripPeopleCount",peopleCount);
+                }else {
+                    stringObjectMap.put("tripPeopleCount",0);
                 }
             }
         }
@@ -7714,31 +7744,40 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 
     //导出员工月度工时表
     @Override
-    public HttpRespMsg exportDeptPartInProjects(String startDate,String endDate, Integer departmentId, HttpServletRequest request){
+    public HttpRespMsg exportDeptPartInProjects(String month, Integer departmentId, HttpServletRequest request){
         HttpRespMsg msg=new HttpRespMsg();
         String token = request.getHeader("token");
         User user = userMapper.selectById(token);
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
-        HttpRespMsg httpRespMsg = deptPartInProjects(null, null, startDate, endDate, departmentId, request);
+        HttpRespMsg httpRespMsg = deptPartInProjects(null, null, month, departmentId, request);
         Map<String, Object> data = (Map<String, Object>) (Map<String, Object>) httpRespMsg.data;
         List<Map<String, Object>> resultList = (List<Map<String, Object>>) data.get("resultList");
         List<String> titleList=new ArrayList<>();
         List<List<String>> dataList = new ArrayList<>();
 //        titleList.add("部门名称");
+//        titleList.add("部门人数");
 //        titleList.add("参与的项目的数量");
+//        titleList.add("参与的研究中心的数量");
 //        titleList.add("参与人次");
 //        titleList.add("出差的天数");
+//        titleList.add("出差的人次");
         titleList.add(MessageUtils.message("excel.deptName"));
+        titleList.add(MessageUtils.message("excel.deptHeadCount"));
         titleList.add(MessageUtils.message("excel.joinProCount"));
+        titleList.add(MessageUtils.message("excel.joinCenterCount"));
         titleList.add(MessageUtils.message("excel.joinPeopleCount"));
         titleList.add(MessageUtils.message("excel.tripDays"));
+        titleList.add(MessageUtils.message("excel.tripPeopleCount"));
         dataList.add(titleList);
         for (Map<String, Object> map : resultList) {
             List<String> item=new ArrayList<>();
             item.add(map.get("deptName").toString());
+            item.add(map.get("deptHeadCount").toString());
             item.add(map.get("projectCount").toString());
+            item.add(map.get("centerCount").toString());
             item.add(map.get("peopleCount").toString());
             item.add(map.get("tripCount").toString());
+            item.add(map.get("tripPeopleCount").toString());
             dataList.add(item);
         }
         //生成excel文件导出
@@ -7789,6 +7828,23 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 break;
         }
         HttpRespMsg msg = getUserReportTimelinessRate(request, startDate, endDate, null, null, null, null);
+        try {
+            List<String> monthList = SplitDateUtil.doDateByStatisticsType("month", startDate, endDate);
+            for (int i = 0; i < monthList.size(); i++) {
+                String sDate = monthList.get(i);
+                String eDate = monthList.get(i + 1);
+                i++;
+                List<String> weekList = SplitDateUtil.doDateByStatisticsType("week", sDate, eDate);
+                for (int i1 = 0; i1 < weekList.size(); i1++) {
+                    String sDate1 = weekList.get(i1);
+                    String eDate1 = weekList.get(i1 + 1);
+                    i1++;
+                    System.out.println(sDate1+"-----"+eDate1);
+                }
+            }
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
         HashMap map= (HashMap) msg.data;
         List<TimelinessRateVO> list = (List<TimelinessRateVO>) map.get("list");
         //String[] s={"人员","工号","部门","填报及时率"};
@@ -7819,4 +7875,433 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         return httpRespMsg;
     }
 
+    @Override
+    public HttpRespMsg getGanttDataNew(Integer type, String startDate, String endDate, String targetUserId, Integer targetProjectId, String groupName,Integer taskType, HttpServletRequest request) {
+        //根据人员权限来获取,
+        String token = request.getHeader("TOKEN");
+        User user = userMapper.selectById(token);
+        List<String> userIds = new ArrayList<>();
+        List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部项目");
+        List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
+        List<User> AllUser = userMapper.selectList(new QueryWrapper<User>().eq("company_id", user.getCompanyId()));
+        if (functionList.size() == 0) {
+            //看看是部门经理还是项目负责人
+            if (user.getManageDeptId() != null && user.getManageDeptId() != 0) {
+                List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("department_id", user.getManageDeptId()));
+                userIds = userList.stream().map(User::getId).collect(Collectors.toList());
+            } else {
+                //检查是否是项目负责人
+                List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("incharger_id", user.getId()));
+                if (projectList.size() > 0) {
+                    List<Integer> collect = projectList.stream().map(Project::getId).collect(Collectors.toList());
+                    List<Participation> participationList = participationMapper.selectList(new QueryWrapper<Participation>().in("project_id", collect));
+                    userIds = participationList.stream().map(Participation::getUserId).collect(Collectors.toList());
+                }
+                //把自己加进去
+                if (!userIds.contains(user.getId())) {
+                    userIds.add(user.getId());
+                }
+            }
+        } else {
+            //查看全部
+            List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", user.getCompanyId()));
+            userIds = userList.stream().map(User::getId).collect(Collectors.toList());
+        }
+        if (!StringUtils.isEmpty(targetUserId)) {
+            userIds = userIds.stream().filter(u->u.equals(targetUserId)).collect(Collectors.toList());
+        }
+        HttpRespMsg msg = new HttpRespMsg();
+        List<GanttDataItem> itemList = new ArrayList<>();
+
+        List<Integer> projectIds = null;
+        if (targetProjectId != null) {
+            projectIds = new ArrayList<>();
+            projectIds.add(targetProjectId);
+        } else {
+            if (functionList.size() == 0) {
+                //普通员工只看自己相关的
+                List<Participation> participationList
+                        = participationMapper.selectList(new QueryWrapper<Participation>().in("user_id", userIds));
+                projectIds = participationList.stream().map(Participation::getProjectId).collect(Collectors.toList());
+            } else {
+                projectIds = null;//查看全部的
+            }
+        }
+        List<Map> ganttData = null;
+        if (userIds.size() > 0) {
+            if (type == 0) {
+                String lsLastItemId = null;
+                String btLastItemId = null;
+                //按人员获取
+                ganttData = projectMapper.getTaskPlanByMemb(userIds, startDate ,endDate, user.getCompanyId());
+                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);
+                QueryWrapper<BusinessTrip> btQueryWrapper =new QueryWrapper<>();
+                btQueryWrapper.in("owner_id", userIds);
+                if (startDate != null && endDate != null) {
+                    btQueryWrapper.le("start_date", endDate).ge("end_date", startDate);
+                }
+                List<BusinessTrip> businessTripList = businessTripMapper.selectList(btQueryWrapper);
+                for(Department department:departmentList){
+                    GanttDataItem parent = new GanttDataItem();
+                    parent.id=department.getDepartmentId().toString();
+                    parent.time = 0;
+                    parent.text=department.getDepartmentName();
+                    parent.type="department";
+                    if(department.getSuperiorId()!=null){
+                        parent.parent=String.valueOf(department.getSuperiorId());
+                        parent.type="milestone";
+                    }
+                    parent= getGanttDataItemList(parent, department, departmentList);
+                    Set set=new HashSet();
+                    if(set.add(parent.id)&&department.getSuperiorId()==null){
+                        itemList.add(parent);
+                    }
+                }
+                //加上全部的人员(不含已离职),不要和已有任务的人员重复
+                List<String> extraUidList = new ArrayList<>();
+                for (String uid : userIds) {
+                    boolean find = false;
+                    for (Map userMap : ganttData) {
+                        String taskUid = (String)userMap.get("user_id");
+                        if (taskUid.equals(uid)) {
+                            find = true;
+                            break;
+                        }
+                    }
+                    if (!find) {
+                        extraUidList.add(uid);
+                    }
+                }
+                if (extraUidList.size() > 0) {
+                    List<User> userList = userMapper.selectList(new QueryWrapper<User>().in("id", extraUidList).eq("is_active", 1));
+                    for (User u : userList) {
+                        GanttDataItem userGantt = new GanttDataItem();
+                        userGantt.id = u.getId();
+                        userGantt.userId = u.getId();
+                        userGantt.text = u.getName();
+                        userGantt.render = "split";
+                        userGantt.start_date = null;
+                        userGantt.end_date = null;
+                        userGantt.time = 0;
+                        userGantt.color=u.getColor();
+                        userGantt.parent=String.valueOf(u.getDepartmentId());
+                        userGantt.children=new ArrayList<>();
+                        userGantt.type="user";
+                        itemList=getUserGanttDataItemList(userGantt,itemList);
+                    }
+                }
+
+
+                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();
+                        }
+                        System.out.println("====================="+departmentId+"======================");
+                        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;
+                        parent.parent=String.valueOf(departmentId);
+                        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;
+                    curItem.children=new ArrayList<>();
+                    itemList=getUserGanttDataItemList(curItem,itemList);
+                    lsLastItemId = leaveSheetList.get(i).getOwnerId();
+                }
+                for(int i=0;i<businessTripList.size();i++){
+                    GanttDataItem curItem = new GanttDataItem();;
+                    if (!businessTripList.get(i).getOwnerId().equals(btLastItemId)) {
+                        //抽取父级对象,人员名称
+                        int finalI = i;
+                        Optional<User> first = AllUser.stream().filter(us -> us.getId().equals(businessTripList.get(finalI).getOwnerId())).findFirst();
+                        Integer departmentId =null;
+                        if(first.isPresent()){
+                            departmentId=first.get().getDepartmentId();
+                        }
+                        GanttDataItem parent = new GanttDataItem();
+                        parent.id = businessTripList.get(i).getOwnerId();
+                        parent.userId = businessTripList.get(i).getOwnerId();
+                        parent.text = businessTripList.get(i).getOwnerName();
+                        parent.render = "split";
+                        parent.start_date = businessTripList.get(i).getStartDate().toString();
+                        parent.end_date = businessTripList.get(i).getEndDate().toString();
+                        parent.time = 0;
+                        parent.parent=String.valueOf(departmentId);
+                        btLastItemId =businessTripList.get(i).getOwnerId();
+                    }
+                    //curItem.id = "出差_"+businessTripList.get(i).getId();
+                    curItem.id = MessageUtils.message("leave.busTra") + "_" + businessTripList.get(i).getId();
+                    curItem.userId = businessTripList.get(i).getOwnerId();
+                    //curItem.text = "出差";
+                    curItem.text = MessageUtils.message("leave.busTra");
+                    curItem.start_date = businessTripList.get(i).getStartDate().toString();
+
+                    curItem.end_date =businessTripList.get(i).getEndDate().toString();
+                    curItem.parent = btLastItemId;
+                    curItem.children=new ArrayList<>();
+                    itemList=getUserGanttDataItemList(curItem,itemList);
+                    btLastItemId = businessTripList.get(i).getOwnerId();
+                }
+            } else {
+                //按照项目获取
+                String btLastItemId = null;
+                GanttDataItem btLastParentItem=null;
+                if (!StringUtils.isEmpty(groupName)) {
+                    List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", user.getCompanyId()));
+                    List<Integer> collect = projectList.stream().map(Project::getId).collect(Collectors.toList());
+                    List<TaskGroup> taskGroups = taskGroupMapper.selectList(new QueryWrapper<TaskGroup>().eq("name", groupName).in("project_id", collect));
+                    List filterPids = taskGroups.stream().map(TaskGroup::getProjectId).collect(Collectors.toList());
+                    if (projectIds == null) {
+                        projectIds = filterPids;
+                        if (projectIds.size() == 0) {
+                            projectIds.add(-1);
+                        }
+                    }
+                }
+                if (taskType!=null) {
+                    List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", user.getCompanyId()));
+                    List<Integer> collect = projectList.stream().map(Project::getId).collect(Collectors.toList());
+                    List<Task> tasks = taskMapper.selectList(new QueryWrapper<Task>().eq("task_type", taskType).in("project_id", collect));
+                    List filterPids = tasks.stream().map(Task::getProjectId).collect(Collectors.toList());
+                    if (projectIds == null) {
+                        projectIds = filterPids;
+                        if (projectIds.size() == 0) {
+                            projectIds.add(-1);
+                        }
+                    }
+                }
+                ganttData = projectMapper.getTaskPlanByProject(projectIds, startDate ,endDate, user.getCompanyId());
+                QueryWrapper<BusinessTrip> btQueryWrapper =new QueryWrapper<>();
+                QueryWrapper<BustripProject> bpQueryWrapper =new QueryWrapper<>();
+                btQueryWrapper.in("owner_id", userIds);
+                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){
+                    businessTripList.forEach(bt->{
+                        btIdList.add(bt.getId());
+                    });
+                    bpQueryWrapper.in("bustrip_id", btIdList);
+                    if(projectIds!=null){
+                        bpQueryWrapper.in("project_id", projectIds);
+                    }
+                }
+                List<BustripProject> bustripProjectList = bustripProjectMapper.selectList(bpQueryWrapper);
+                List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", user.getCompanyId()));
+                for(BusinessTrip businessTrip:businessTripList){
+                    List<BustripProject> collect = bustripProjectList.stream().filter(bp -> bp.getBustripId().equals(businessTrip.getId())).collect(Collectors.toList());
+                    for(BustripProject bustripProject:collect){
+                        GanttDataItem curItem = new GanttDataItem();
+                        if(bustripProject.getProjectId()!=null) {
+                            Project project = projectList.stream().filter(pro -> pro.getId().equals(bustripProject.getProjectId())).collect(Collectors.toList()).get(0);
+                            if (!bustripProject.getProjectId().equals(btLastItemId)) {
+                                //抽取父级对象,项目名称
+                                GanttDataItem parent = new GanttDataItem();
+                                parent.id = String.valueOf(bustripProject.getProjectId());
+                                parent.userId = businessTrip.getOwnerId();
+                                parent.text = project.getProjectName();
+                                parent.render = "split";
+                                parent.start_date = bustripProject.getStartDate().toString();
+                                parent.end_date = bustripProject.getEndDate().toString();
+                                parent.time = 0;
+                                parent.children=new ArrayList<>();
+                                itemList.add(parent);
+                                btLastItemId = String.valueOf(bustripProject.getProjectId());
+                            }
+                            //curItem.id = "出差_" + businessTrip.getId();
+                            curItem.id = MessageUtils.message("leave.busTra") + "_" + businessTrip.getId();
+                            curItem.userId = businessTrip.getOwnerId();
+                            //curItem.text = "出差/" + businessTrip.getOwnerName();
+                            curItem.text = MessageUtils.message("leave.busTra")+"/" + businessTrip.getOwnerName();
+                            curItem.start_date = bustripProject.getStartDate().toString();
+                            curItem.end_date = bustripProject.getEndDate().toString();
+                            curItem.type="user";
+                            curItem.parent = btLastItemId;
+                            itemList=getUserGanttDataItemList(curItem,itemList);
+                            btLastItemId = String.valueOf(bustripProject.getProjectId());
+                        }
+                    }
+                }
+            }
+            String lastItemId = null;
+            GanttDataItem lastParentItem = null;
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            for (int i=0;i<ganttData.size(); i++) {
+                Map map = ganttData.get(i);
+                String userId = (String) map.get("user_id");
+                List<Map> finalGanttData = ganttData;
+                int finalI = i;
+                Optional<User> first = AllUser.stream().filter(us -> us.getId().equals(finalGanttData.get(finalI).get("user_id"))).findFirst();
+                Integer departmentId =null;
+                if(first.isPresent()){
+                    departmentId=first.get().getDepartmentId();
+                }
+                String start_date = sdf.format((Date) map.get("start_date"));
+                String end_date = sdf.format((Date) map.get("end_date"));
+                String projectId = ""+ (Integer) map.get("id");
+                System.out.println(map);
+                //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");
+
+                GanttDataItem curItem = new GanttDataItem();;
+                if (type == 0) {
+                    if (!userId.equals(lastItemId)) {
+                        //抽取父级对象,人员名称
+                        GanttDataItem parent = new GanttDataItem();
+                        parent.id = userId;
+                        parent.userId = (String) map.get("user_id");
+                        parent.text = (String) map.get("name");
+                        parent.render = "split";
+                        parent.start_date = start_date;
+                        parent.end_date = end_date;
+                        parent.time = 0;
+                        parent.type="user";
+                        parent.parent=String.valueOf(departmentId);
+                        parent.children=new ArrayList<>();
+                        Optional<User> optional = AllUser.stream().filter(au -> au.getId().equals(userId)).findFirst();
+                        if(optional.isPresent()){
+                            parent.color=optional.get().getColor();
+                        }
+                        lastItemId = userId;
+                        itemList.add(parent);
+                        lastParentItem = parent;
+                    }
+
+                    curItem.id = exeId;
+                    curItem.userId = (String) map.get("user_id");
+                    curItem.text = (String) map.get("project_name")+"/"+(String)map.get("task_name");
+                    curItem.start_date = start_date;
+
+                    curItem.end_date = end_date;
+                    curItem.time = (Integer)map.get("duration");
+                    curItem.parent = lastItemId;
+                    curItem.children=new ArrayList<>();
+                    itemList=getUserGanttDataItemList(curItem,itemList);
+                    lastItemId = userId;
+                } else {
+                    if (!projectId.equals(lastItemId)) {
+                        //抽取父级对象,项目名称
+                        GanttDataItem parent = new GanttDataItem();
+                        parent.id = projectId;
+                        parent.userId = (String) map.get("user_id");
+                        parent.text = (String) map.get("project_name");
+                        parent.render = "split";
+                        parent.start_date = start_date;
+                        parent.end_date = end_date;
+                        parent.time = 0;
+                        parent.children=new ArrayList<>();
+                        lastItemId = projectId;
+                        itemList.add(parent);
+                        lastParentItem = parent;
+                    }
+                    curItem.id = projectId+"_"+exeId;
+                    curItem.userId = (String) map.get("user_id");
+                    curItem.text = (String) map.get("name")+"/"+(String)map.get("task_name");
+                    curItem.start_date = start_date;
+                    curItem.end_date = end_date;
+                    curItem.time = (Integer)map.get("duration");
+                    curItem.type="user";
+                    curItem.parent = lastItemId;
+                    itemList=getUserGanttDataItemList(curItem,itemList);
+                    lastItemId = projectId;
+                }
+                //校正父对象
+                if (curItem.start_date.compareTo(lastParentItem.start_date) < 0) {
+                    lastParentItem.start_date = curItem.start_date;
+                }
+                if (curItem.end_date.compareTo(lastParentItem.end_date) > 0) {
+                    lastParentItem.end_date = curItem.end_date;
+                }
+                lastParentItem.time = lastParentItem.time + curItem.time;
+            }
+        }
+
+        msg.data = itemList;
+
+        return msg;
+    }
+    private List<GanttDataItem> getUserGanttDataItemList(GanttDataItem userGantt, List<GanttDataItem> itemList) {
+        if(itemList==null){
+            itemList=new ArrayList<>();
+        }
+        for (GanttDataItem ganttDataItem : itemList) {
+                if(ganttDataItem.getId().equals(userGantt.parent)){
+                    ganttDataItem.children.add(userGantt);
+                }
+            getUserGanttDataItemList(userGantt,ganttDataItem.children);
+        }
+        return itemList;
+    }
+
+    private GanttDataItem getGanttDataItemList(GanttDataItem parent, Department department, List<Department> departmentList) {
+        List<Department> collect = departmentList.stream().filter(dl ->dl.getSuperiorId()!=null&& dl.getSuperiorId().equals(department.getDepartmentId())).collect(Collectors.toList());
+        parent.children=new ArrayList<>();
+        for (Department dept : collect) {
+            GanttDataItem subParent = new GanttDataItem();
+            subParent.id=dept.getDepartmentId().toString();
+            subParent.time = 0;
+            subParent.text=dept.getDepartmentName();
+            subParent.type="department";
+            if(dept.getSuperiorId()!=null){
+                subParent.parent=String.valueOf(dept.getSuperiorId());
+                subParent.type="milestone";
+            }
+            GanttDataItem sub = getGanttDataItemList(subParent, dept, departmentList);
+            parent.children.add(sub);
+        }
+        return parent;
+    }
+
 }

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

@@ -9,9 +9,11 @@ import com.management.platform.service.TprogressPaticipatorsService;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.ListUtil;
 import com.management.platform.util.MessageUtils;
+import org.apache.poi.ss.usermodel.Header;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
+import sun.misc.Request;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;

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

@@ -1141,7 +1141,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                     if (item != null) {
                         ct.setId(item.getId());
                         //已存在记录,但是如果老记录有工作时长,新记录无工作时长,也没有请假外出和打卡时长,说明新的记录是没有取到考勤的。 老记录是通过当天打卡数据获取到的,包含外出的时间
-                        if (item.getWorkHours() > 0 && ct.getWorkHours() == 0 && ct.getCardTime() == 0 && ct.getAskLeaveTime() == 0 && ct.getOutdoorTime() == 0) {
+                        if (item.getWorkHours() > 0 && ct.getWorkHours() == 0 && ct.getCardTime() >= 1.0 && ct.getAskLeaveTime() == 0 && ct.getOutdoorTime() == 0) {
                             //不处理
                         } else {
                             userCorpwxTimeMapper.updateById(ct);

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

@@ -4,6 +4,8 @@ package com.management.platform.util;
 import org.springframework.context.MessageSource;
 import org.springframework.context.i18n.LocaleContextHolder;
 
+import java.util.Locale;
+
 /**
  * 获取i18n资源文件
  *
@@ -18,7 +20,9 @@ public class MessageUtils {
      */
     public static String message(String code, Object... args) {
         MessageSource messageSource = SpringUtils.getBean(MessageSource.class);
-        return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
+        Locale locale = LocaleContextHolder.getLocale();
+//        System.out.println("本地为:" +locale.getDisplayName()+", code="+code);
+        return messageSource.getMessage(code, args, locale);
     }
 
 }

+ 3 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/i18n/messages.properties

@@ -682,6 +682,9 @@ excel.deptName = 部门名称
 excel.joinPeopleCount= 参与人次
 excel.tripDays = 出差的天数
 excel.validity = 有效期
+excel.deptHeadCount=部门人数
+excel.joinCenterCount=参与的研究中心的数量
+excel.tripPeopleCount=出差的人次
 #推送
 push.fillIn=您今天的工时填报还未完成
 push.name=屈跃庭

+ 3 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/i18n/messages_en_US.properties

@@ -682,6 +682,9 @@ excel.deptName = Department name
 excel.joinPeopleCount= Number of participants
 excel.tripDays = Days of business trip
 excel.validity = term of validity
+excel.deptHeadCount=Department headcount
+excel.joinCenterCount=Number of research centers involved
+excel.tripPeopleCount=Number of people on business trip
 #推送
 push.fillIn=Your work hour report for today has not been completed.
 push.name=Qu Yue ting

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

@@ -47,7 +47,7 @@
     </select>
 
     <select id="selectBusiness" resultType="java.util.Map">
-        SELECT `user`.department_id deptId,start_date startDate,end_date endDate,day_count dayCount
+        SELECT `user`.department_id deptId,owner_id userId,start_date startDate,end_date endDate,day_count dayCount
         FROM business_trip
         LEFT JOIN `user`
         on business_trip.owner_id = `user`.id
@@ -56,7 +56,7 @@
             and user.department_id = #{deptId}
         </if>
         <if test="startDate!=null and startDate!='' and endDate!=null and endDate!=''">
-            and business_trip.startDate &lt;= #{endDate} and business_trip.endDate >= #{startDate}
+            and business_trip.start_date &lt;= #{endDate} and business_trip.end_date >= #{startDate}
         </if>
     </select>
 </mapper>

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

@@ -1285,35 +1285,33 @@
     <select id="selectDeptPartInProjects" resultType="java.util.Map">
         SELECT department.department_id deptId,
         department_name deptName,
-        COUNT(`user`.id) deptHeadCount,
+        (select count(user.id) from user where user.id NOT IN (SELECT id FROM `user` WHERE company_id=#{companyId} and inactive_date IS NOT NULL AND inactive_date &lt; #{startDate} AND is_active = 0) AND user.department_id = department.department_id group by user.department_id) deptHeadCount,
         pro.projectCount projectCount,
         pro.centerCount centerCount,
         pcon.peopleCount peopleCount
         FROM department
-        LEFT JOIN `user`
-        ON `user`.department_id = department.department_id
         LEFT JOIN (
-            SELECT report.dept_id,COUNT(DISTINCT(report.project_id)) projectCount,
+            SELECT user.department_id dept_id,COUNT(DISTINCT(report.project_id)) projectCount,
             COUNT(DISTINCT(r.degree_id)) centerCount
             FROM report
             LEFT JOIN report r
             ON report.id = r.id AND r.degree_id != -1
+            LEFT JOIN `user`
+            ON report.creator_id = user.id
             WHERE report.state = 1
-            <if test="startDate!= null and startDate!= '' and endDate!=  null and endDate!= ''" >
-                And report.create_date BETWEEN #{startDate} AND #{endDate}
-            </if>
-            GROUP BY report.dept_id
+            And report.create_date BETWEEN #{startDate} AND #{endDate}
+            GROUP BY dept_id
         ) pro
-        ON pro.dept_id = department.department_id
+        on pro.dept_id = department.department_id
         LEFT JOIN (
             SELECT dept_id,sum(p.con) peopleCount
             FROM (
-            SELECT dept_id,count(DISTINCT project_id)con FROM report
+            SELECT user.department_id dept_id,count(DISTINCT project_id)con FROM report
+            LEFT JOIN `user`
+            ON report.creator_id = user.id
             WHERE report.state = 1
-            <if test="startDate!= null and startDate!= '' and endDate!=  null and endDate!= ''" >
-                And report.create_date BETWEEN #{startDate} AND #{endDate}
-            </if>
-            GROUP BY report.creator_id,report.dept_id
+            And report.create_date BETWEEN #{startDate} AND #{endDate}
+            GROUP BY report.creator_id,dept_id
         ) p  GROUP BY p.dept_id
         ) pcon
         ON pcon.dept_id = department.department_id
@@ -1330,8 +1328,6 @@
                 #{item}
             </foreach>
         </if>
-        GROUP BY department.department_id,projectCount,centerCount,peopleCount
-        ORDER BY projectCount
         <if test="size!=null and start!=null">
             limit #{start},#{size}
         </if>

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue

@@ -465,7 +465,7 @@
                             border="0"
                             :autosize="{ minRows: 2, maxRows: 6}"
                             :placeholder="$t('detailedprogressdescription')"
-                            v-model.trim="text2"
+                            v-model="text2"
                             style="margin:10px 0 0 0">
                             </el-input>
 
@@ -803,7 +803,7 @@
                             type="textarea"
                             :placeholder="$t('pleaseentercontent')"
                             :autosize="{ minRows: 6, maxRows: 6}"
-                            v-model.trim="textarea2"
+                            v-model="textarea2"
                             class="inputDeeps"
                             >
                             </el-input></div>

+ 41 - 33
fhKeeper/formulahousekeeper/timesheet/src/views/project/project_gantt.vue

@@ -75,13 +75,13 @@
       </div>
     </div>
 
-    <gantt v-if="isDataLoaded" ref="ganttTable1" class="left-container" :tasks="tasks" 
+    <gantt v-if="isDataLoaded && user.userNameNeedTranslate != 1" ref="ganttTable1" class="left-container" :tasks="tasks" 
     :stafforpro="radio1"
     :valueDate="valueDate"
     :key="updatakey1"></gantt>
-    <!-- <vueGantt v-if="isDataLoaded" ref="ganttTable1" :stafforpro="radio1"
+    <vueGantt v-if="isDataLoaded && user.userNameNeedTranslate == 1" ref="ganttTable1" :stafforpro="radio1"
     :valueDate="valueDate"
-    :key="updatakey1" :tasks="tasks"></vueGantt> -->
+    :key="updatakey1" :tasks="tasks"></vueGantt>
 
   <div class="demand-container" v-if="!isDataLoaded">
     <el-table height="90%" :loading="demandListLoading" :data="demandList">
@@ -497,8 +497,14 @@ export default {
             getlistcs.userId = this.valuex
           }
         }
-        
-        this.http.post('/project/getGanttData', getlistcs ,
+        var urls = ''
+        if(this.user.userNameNeedTranslate == '1') {
+          urls = '/project/getGanttDataNew'
+        } else {
+          urls = '/project/getGanttData'
+        }
+        this.http.post(urls, getlistcs ,
+        // this.http.post('/project/getGanttDataNew', getlistcs,
                         res => {
                             if (res.code == "ok") {
                                 for(var i in res.data) {
@@ -510,41 +516,43 @@ export default {
                                   }
                                 }
                                 this.tasks = {data:res.data};
-                                let taskson = []
-                                for(let m in this.tasks.data){
-                                  this.tasks.data[m].render = null
-                                  if(this.tasks.data[m].time != 0){
-                                    
-                                    if(this.tasks.data[m].id != this.tasks.data[m].userId){
-                                      this.tasks.data[m].render = 'split'
-                                      let item = JSON.parse(JSON.stringify(this.tasks.data[m]))
-                                      item.parent = this.tasks.data[m].id
-                                      item.id = this.tasks.data[m].id + 'son'
-                                      taskson.push(item)
-                                      this.tasks.data[m].time = 0
+                                if(this.user.userNameNeedTranslate != '1') {
+                                  let taskson = []
+                                  for(let m in this.tasks.data){
+                                    this.tasks.data[m].render = null
+                                    if(this.tasks.data[m].time != 0){
+                                      
+                                      if(this.tasks.data[m].id != this.tasks.data[m].userId){
+                                        this.tasks.data[m].render = 'split'
+                                        let item = JSON.parse(JSON.stringify(this.tasks.data[m]))
+                                        item.parent = this.tasks.data[m].id
+                                        item.id = this.tasks.data[m].id + 'son'
+                                        taskson.push(item)
+                                        this.tasks.data[m].time = 0
+                                      }
+                                      
                                     }
-                                    
-                                  }
-                                }
-                                this.tasks.data.push.apply(this.tasks.data,taskson) 
-                                for(let i in this.tasks.data){
-                                  if(this.tasks.data[i].time == 0){
-                                    delete this.tasks.data[i].start_date
-                                    delete this.tasks.data[i].end_date
-                                    this.tasks.data[i].type = 'milestone'
                                   }
-                                  if(this.tasks.data[i].end_date){
-                                    let date = new Date(this.tasks.data[i].end_date)
-                                    let date2 = new Date(date.getFullYear(),date.getMonth(),date.getDate() + 1)
-                                    let dmonth = date2.getMonth() + 1
-                                    let dday = date2.getDate()
-                                    this.tasks.data[i].end_date = date2.getFullYear() + '-' + (dmonth < 10 ? '0' + dmonth : dmonth) + '-' + (dday < 10 ? '0' + dday : dday)
+                                  this.tasks.data.push.apply(this.tasks.data,taskson) 
+                                  for(let i in this.tasks.data){
+                                    if(this.tasks.data[i].time == 0){
+                                      delete this.tasks.data[i].start_date
+                                      delete this.tasks.data[i].end_date
+                                      this.tasks.data[i].type = 'milestone'
+                                    }
+                                    if(this.tasks.data[i].end_date){
+                                      let date = new Date(this.tasks.data[i].end_date)
+                                      let date2 = new Date(date.getFullYear(),date.getMonth(),date.getDate() + 1)
+                                      let dmonth = date2.getMonth() + 1
+                                      let dday = date2.getDate()
+                                      this.tasks.data[i].end_date = date2.getFullYear() + '-' + (dmonth < 10 ? '0' + dmonth : dmonth) + '-' + (dday < 10 ? '0' + dday : dday)
+                                    }
                                   }
                                 }
                                 console.log('ganttData',this.tasks.data);
                                 this.$nextTick(()=>{
                                   this.updatakey1 += 1
-                          })
+                                })
                         
                             } else {
                                 this.$message({

+ 125 - 79
fhKeeper/formulahousekeeper/timesheet/src/views/project/vueGantt.vue

@@ -1,9 +1,29 @@
 <template>
   <div>
-     <el-table :data="treeDataList" height="490px" row-key="id" show-overflow-tooltip :cell-style="TableCellStyle" size="mini" :span-method="arraySpanMethod" style="width: 100%;margin-bottom: 20px;" border default-expand-all :tree-config="{children: 'children', expandAll: true}" :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
-        <el-table-column prop="text" label="姓名" width="240" fixed="left"></el-table-column>
+     <el-table :data="treeDataList" height="490px" row-key="id" :key="'1'" show-overflow-tooltip :cell-style="TableCellStyle" size="mini" :span-method="arraySpanMethod" style="width: 100%;margin-bottom: 20px;" border default-expand-all :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
+        <el-table-column prop="text" label="姓名" width="240" fixed="left" v-if="stafforpro != '按项目查看'">
+          <template slot-scope="scope">
+              <!-- user.userNameNeedTranslate == 1 -->
+              <span v-if="user.userNameNeedTranslate == 1 && scope.row.type == 'department'"><ww-open-data type='departmentName' :openid='scope.row.text'></ww-open-data></span>
+              <span v-if="user.userNameNeedTranslate == 1 && scope.row.type == 'user'"><ww-open-data type='userName' :openid='scope.row.text'></ww-open-data></span>
+              <span v-if="user.userNameNeedTranslate == 1 && (scope.row.type == 'null' || scope.row.type == null)">{{scope.row.text}}</span>
+              <span v-if="user.userNameNeedTranslate != 1">{{scope.row.text}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="text" label="项目" width="240" fixed="left" v-if="stafforpro == '按项目查看'">
+          <template slot-scope="scope">
+            <span v-if="user.userNameNeedTranslate == 1 && scope.row.type == 'user'">
+              <span v-for="(item, index) in scope.row.userNameList" :key="index">
+                <ww-open-data type='userName' :openid='scope.row.text'></ww-open-data>
+              </span>
+            </span>
+            <span v-if="user.userNameNeedTranslate == 1 && scope.row.type == 'user'">{{scope.row.proNameText}}</span>
+            <span v-if="user.userNameNeedTranslate == 1 && (scope.row.type == 'null' || scope.row.type == null)"> {{scope.row.text}}</span>
+            <span v-if="user.userNameNeedTranslate != 1">{{scope.row.text}}</span>
+          </template>
+        </el-table-column>
         <el-table-column :label="item.name" v-for="(item, index) in headerData" :key="index">
-            <el-table-column :label="items" v-for="items, idx in item.children" :key="idx" width="160px">
+            <el-table-column :label="items" v-for="items, idx in item.children" :key="idx" width="120px" align="center">
               <template slot-scope="scope">
                 <div>
                   {{scope.row.end_date | dataValue(scope.column, scope.row)}}
@@ -38,71 +58,21 @@ export default {
   components: {},
   data() {
     return {
-      tableData: [{
-          id: 1,
-          date: '2016-05-02',
-          name: '王小虎',
-          address: '上海市普陀区金沙江路 1518 弄'
-        }, {
-          id: 2,
-          date: '2016-05-04',
-          name: '王小虎',
-          address: '上海市普陀区金沙江路 1517 弄'
-        }, {
-          id: 3,
-          date: '2016-05-01',
-          name: '王小虎',
-          address: '上海市普陀区金沙江路 1519 弄',
-          children: [{
-              id: 31,
-              date: '2016-05-01',
-              name: '王小虎',
-              address: '上海市普陀区金沙江路 1519 弄'
-            }, {
-              id: 32,
-              date: '2016-05-01',
-              name: '王小虎',
-              address: '上海市普陀区金沙江路 1519 弄'
-          }]
-        }, {
-          id: 4,
-          date: '2016-05-03',
-          name: '王小虎',
-          address: '上海市普陀区金沙江路 1516 弄'
-        }],
-        tableData1: [{
-          id: 1,
-          date: '2016-05-02',
-          name: '王小虎',
-          address: '上海市普陀区金沙江路 1518 弄'
-        }, {
-          id: 2,
-          date: '2016-05-04',
-          name: '王小虎',
-          address: '上海市普陀区金沙江路 1517 弄'
-        }, {
-          id: 3,
-          date: '2016-05-01',
-          name: '王小虎',
-          address: '上海市普陀区金沙江路 1519 弄',
-          hasChildren: true
-        }, {
-          id: 4,
-          date: '2016-05-03',
-          name: '王小虎',
-          address: '上海市普陀区金沙江路 1516 弄'
-        }],
         initialMonth: '', // 开始月份
         headerData: [], // 表头数据
-        treeDataList: []
+        treeDataList: [],
+        num: 0,
+        mergeList: [],
+        valueDateList: [],
+        user: JSON.parse(sessionStorage.getItem("user")),
     };
   },
   filters: {
     dataValue: function (endDate, item, value) {
       if(endDate) {
-        let biaoto = item.label
-        if(biaoto >= value.start_date && biaoto < endDate) {
-          return value.text
+        let biaoto = item.label.split(' ')[0]
+        if(biaoto == value.end_date) {
+          // return value.text
         }
       }
     }
@@ -111,21 +81,85 @@ export default {
   watch: {},
   created() {},
   mounted() {
-    console.log(this.stafforpro)
-    console.log(this.valueDate)
-    console.log(this.updatakey1)
-    console.log(this.tasks)
+    console.log(this.stafforpro,'值')
+    // 重置两个属性值
+    this.num = 0,
+    this.mergeList = []
     let dataList = []
     let allDataList = []
+    this.valueDateList = this.valueDate
     let star = this.valueDate[0].split('-')
     let end = this.valueDate[1].split('-')
     this.initialMonth = star[0] + '-' + star[1]
     dataList = this.getYearAndMonth(star[0] + '-' + star[1], end[0] + '-' + end[1])
     allDataList = this.getdiffdate(this.valueDate[0], this.valueDate[1])
     this.combination(dataList, allDataList)
-    this.treeDataList = this.integrationTree(this.tasks.data)
+    // 递归加颜色
+    this.treeDataList = this.recursive(this.tasks.data);
+
+    // this.treeDataList = this.integrationTree(this.tasks.data)
+    console.log(this.mergeList, '合并数据')
   },
   methods: {
+    // 递归加颜色以及存储需要合并的数据
+    recursive(data) {
+      for (let i in data) {
+            if(this.stafforpro == '按项目查看') {
+              data[i].color = '#409EFF'
+              if(data[i].type == 'user' && data[i].text) {
+                let arr = []
+                if(data[i].text.indexOf('/') != '-1') {
+                  let str = data[i].text.split('/')[0]
+                  if(str.indexOf(',') != '-1') {
+                    let arrList = str.split(',')
+                    data[i].userNameList = arrList
+                  } else {
+                    arr.push(str)
+                    data[i].userNameList = arr
+                  }
+                  data[i].proNameText = data[i].text.split('/')[1]
+                }
+              }
+            }
+            this.num++
+            let obj = {
+              ins: this.num,
+              numDay: 1,
+              column: 1
+            }
+            if(data[i].end_date) {
+              let day = this.dayjs(data[i].end_date).diff(data[i].start_date, 'day') // 和并多少行
+              let column = this.dayjs(data[i].end_date).diff(this.valueDateList[0], 'day') // 从多少列开始
+              console.log(day)
+              if(day >= 1) {
+                if(day >= 3) {
+                  if(this.valueDateList[0] > data[i].start_date) {
+                    obj.column = 1
+                    day >= column ? obj.numDay = column : obj.numDay = day
+                  } else {
+                    let num = this.dayjs(data[i].start_date).diff(this.valueDateList[0], 'day')
+                    obj.column = +num + 1
+                    day >= column ? obj.numDay = column : obj.numDay = day
+                  }
+                } else {
+                  day >= column ? obj.numDay = column : obj.numDay = day
+                  obj.column = column
+                }
+              }
+            }
+            this.mergeList.push(obj)
+            if(data[i].id.indexOf(this.$t('chu-cha')) != '-1') {
+              data[i].color = '#E6A23C'
+            }
+            if(data[i].id.indexOf(this.$t('other.AskForLeave')) != '-1') {
+              data[i].color = '#F56C6C'
+            }
+            if (data[i].children) {
+                this.recursive(data[i].children);
+            }
+        }
+        return data
+    },
     // 截取两个日期的月份数
      getYearAndMonth(start, end) {
       console.log(start, end)
@@ -176,13 +210,15 @@ export default {
     combination(month, data) {
       let monthStr = [this.initialMonth, ...month]
       let arrList = []
+      let weekArrayList = ['周日', '周一', '周二', '周三', '周四', '周五', '周六',]
       for(let i in monthStr) {
         let obj = {}
         obj.name = monthStr[i]
         obj.children = []
         for(let j in data) {
-          if(data[j].indexOf(monthStr[i]) != '-1') {
-            obj.children.push(data[j])
+          let index = new Date(data[j]).getDay()
+          if(data[j].indexOf(monthStr[i]) != '-1') { 
+            obj.children.push(data[j] + ' (' + weekArrayList[index] + ')')
           }
         }
         arrList.push(obj)
@@ -217,21 +253,31 @@ export default {
        return treeData;
     },
     arraySpanMethod({ row, column, rowIndex, columnIndex }) {
-        if (rowIndex == 4) {
-          if (columnIndex == 4) {
-            return [1, 5];
-          } else if (columnIndex === 1) {
-            return [0, 0];
-          }
-        }
+        // if (rowIndex == 0) {
+        //   if (columnIndex == 2) {
+        //     return [1, 18];
+        //   } else if(columnIndex == 1){
+        //     return [0, 0];
+        //   }
+        // }
+
+        // if (rowIndex == +this.mergeList[rowIndex].ins -1) {
+        //   if (columnIndex == +this.mergeList[rowIndex].column + 1) {
+        //     return [1, +this.mergeList[rowIndex].numDay + 1];
+        //   } else if(columnIndex == 1){
+        //     return [0, 0];
+        //   }
+        // }
     },
     // 设置每一个单元格的样式
     TableCellStyle(row) {
       if(row.row.color) {
-        let biaoto = row.column.label
-        if(biaoto >= row.row.start_date && biaoto < row.row.end_date) {
-          console.log('进来了')
-          return 'background-color: '+ row.row.color +' !important;'
+        let biaoto = row.column.label.split(' ')[0]
+        // if(biaoto >= row.row.end_date || biaoto <= row.row.start_date) {
+        if(biaoto >= row.row.start_date && biaoto <= row.row.end_date) {
+          if(row.row.color) {
+            return 'background-color: '+ row.row.color +' !important;color: #fff'
+          }
         }
       }
     }

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/task/list.vue

@@ -298,7 +298,7 @@
                             border="0"
                             :autosize="{ minRows: 2, maxRows: 6}"
                             :placeholder="$t('detailedprogressdescription')"
-                            v-model.trim="text2"
+                            v-model="text2"
                             style="margin:10px 0 0 0">
                             </el-input>
 
@@ -465,7 +465,7 @@
                             type="textarea"
                             :placeholder="$t('pleaseentercontent')"
                             :autosize="{ minRows: 6, maxRows: 6}"
-                            v-model.trim="textarea2"
+                            v-model="textarea2"
                             class="inputDeeps"
                             >
                             </el-input></div>