소스 검색

工作计划需求编写

yusm 1 개월 전
부모
커밋
39966113f8

+ 10 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java

@@ -1612,5 +1612,15 @@ public class ProjectController {
     public HttpRespMsg transferProjectReviwer(String userId, String targetAuditorId){
         return projectService.transferProjectReviwer(userId,targetAuditorId);
     }
+
+    /**
+     * 添加任务计划的时候 项目是小组长参与的项目
+     * @param request
+     * @return
+     */
+    @RequestMapping("/getProjectByLeader")
+    public HttpRespMsg getProjectByLeader(HttpServletRequest request){
+        return projectService.getProjectByLeader(request);
+    }
 }
 

+ 77 - 24
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java

@@ -5,13 +5,16 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.constant.Constant;
 import com.management.platform.entity.*;
 import com.management.platform.entity.bo.QueryTaskChargePage;
 import com.management.platform.entity.vo.SysRichFunction;
 import com.management.platform.mapper.*;
 import com.management.platform.service.*;
+import com.management.platform.service.impl.WxCorpInfoServiceImpl;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.MessageUtils;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.poi.hssf.usermodel.*;
 import org.assertj.core.util.Lists;
@@ -46,6 +49,7 @@ import java.util.stream.Collectors;
  */
 @RestController
 @RequestMapping("/task")
+@Slf4j
 public class TaskController {
     @Resource
     private HttpServletRequest request;
@@ -187,13 +191,19 @@ public class TaskController {
         User user = userMapper.selectById(userId);
         HttpRespMsg msg = new HttpRespMsg();
         WxCorpInfo wxCorpInfo = wxCorpInfoService.getOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
+        int isInsert=0;
         //新建的任务,需要设置创建人,创建时间
         if (task.getId() == null) {
+            isInsert=1;
             task.setCreateDate(LocalDate.now());
             task.setCreaterId(userId);
             task.setCreaterName(user.getName());
             task.setCreatorColor(user.getColor());
             task.setCompanyId(user.getCompanyId());
+
+            if (user.getCompanyId()==Constant.MLD_COMPANY_ID&&task.getIsTaskPlan()==1){
+                task.setTaskStatus(3);
+            }
 //            TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
 //            Integer taskFileCharge = timeType.getTaskFileCharge();
 //            if(1 == taskFileCharge){
@@ -444,8 +454,45 @@ public class TaskController {
             if ((oldTask.getTaskType() == 1 && task.getTaskType() != 1) || (oldTask.getTaskType() != 1 && task.getTaskType() == 1)) {
                 needRecalculateProgress = true;
             }
+            // 未驳回之前 第一审核人 修改工作计划
+            if (user.getCompanyId()==Constant.MLD_COMPANY_ID
+                    &&task.getIsTaskPlan()==1
+                    && org.apache.commons.lang3.StringUtils.isNotEmpty(task.getCheckFirstId())
+                    &&task.getCheckFirstId().equals(userId)
+                    &&task.getTaskStatus()==3){
+                task.setTaskStatus(4);//待第二审核人审核
+            } else if (user.getCompanyId() == Constant.MLD_COMPANY_ID
+                    && task.getIsTaskPlan() == 1
+                    && org.apache.commons.lang3.StringUtils.isNotEmpty(task.getCheckSecondId())
+                    && task.getCheckSecondId().equals(userId)
+                    &&task.getTaskStatus()==4) {
+                task.setTaskStatus(0);//变化为进行中
+                task.setIsTaskPlan(0);//不再是计划
+            }
+            // 未驳回之前 第一审核人 修改工作计划
+            if (user.getCompanyId()==Constant.MLD_COMPANY_ID
+                    &&task.getIsTaskPlan()==1
+                    &&task.getTaskStatus()==5){
+                task.setTaskStatus(3);//待第一审核人审核
+            }
+        }
+        boolean saved = taskService.saveOrUpdate(task);
+        //新增成功,给第一审核人发送信息提醒
+        if (saved&&isInsert==1){
+            if (user.getCompanyId()==Constant.MLD_COMPANY_ID&&task.getIsTaskPlan()==1&& org.apache.commons.lang3.StringUtils.isNotEmpty(task.getCheckFirstId())){
+                //给第一审核人发送信息提醒
+                log.info("添加工作计划,给第一审核人发送信息提醒");
+                User owner = userMapper.selectById(task.getCheckFirstId());
+                if (wxCorpInfo != null) {
+                    //推送到企业微信
+                    StringBuilder stringBuilder = new StringBuilder();
+                    stringBuilder.append("$userName="+owner.getCorpwxUserid()+"$")
+                            .append(":有新的工作计划待审核");
+                    wxCorpInfoService.sendWXCorpMsg(wxCorpInfo,owner.getCorpwxUserid(), stringBuilder.toString(), "task",
+                            WxCorpInfoServiceImpl.TEXT_CARD_MSG_TASK_PLAN_NEED_CHECK);
+                }
+            }
         }
-        taskService.saveOrUpdate(task);
         if (task.getExecutorId() == null) {
             //清空执行人
             if (!isNew) {
@@ -482,30 +529,32 @@ public class TaskController {
                 informationService.save(new Information().setType(1).setContent(String.valueOf(task.getProjectId())).setUserId(msgRecepient));
             });
             List<User> recpUserList = userMapper.selectList(new QueryWrapper<User>().in("id", msgRecepientList));
-            if (recpUserList.size() > 0) {
-                if (recpUserList.get(0).getDingdingUserid() != null) {
-                    //钉钉用户
-                    CompanyDingding dingding = companyDingdingService.getOne(new QueryWrapper<CompanyDingding>().eq("company_id", user.getCompanyId()));
-                    LocalDate endDate = task.getEndDate();
-                    String endStr = "";
-                    if (endDate != null) {
-                        endStr = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(endDate);
+            if(user.getCompanyId()!=Constant.MLD_COMPANY_ID||task.getIsTaskPlan()!=1) {
+                if (recpUserList.size() > 0) {
+                    if (recpUserList.get(0).getDingdingUserid() != null) {
+                        //钉钉用户
+                        CompanyDingding dingding = companyDingdingService.getOne(new QueryWrapper<CompanyDingding>().eq("company_id", user.getCompanyId()));
+                        LocalDate endDate = task.getEndDate();
+                        String endStr = "";
+                        if (endDate != null) {
+                            endStr = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(endDate);
+                        }
+                        companyDingdingService.sendNewTaskMsg(dingding, recpUserList.stream().map(User::getDingdingUserid).collect(Collectors.joining(",")),
+                                task.getName(), endStr);
+                    } else if (recpUserList.get(0).getCorpwxUserid() != null) {
+                        String corpUid = recpUserList.stream().map(User::getCorpwxUserid).distinct().collect(Collectors.joining("|"));
+                        JSONObject json = new JSONObject();
+                        JSONArray dataJson = new JSONArray();
+                        JSONObject jsonObj = new JSONObject();
+                        jsonObj.put("key", "任务内容");
+                        jsonObj.put("value", task.getName());
+                        dataJson.add(jsonObj);
+                        json.put("template_id", "tty9TkCAAAovv416zsWtn0e06CJ635HA");
+                        json.put("url", "https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=task#wechat_redirect");
+                        json.put("content_item", dataJson);
+                        //todo:发送消息提醒任务
+                        wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfo, corpUid, json);
                     }
-                    companyDingdingService.sendNewTaskMsg(dingding, recpUserList.stream().map(User::getDingdingUserid).collect(Collectors.joining(",")),
-                            task.getName(), endStr);
-                } else if (recpUserList.get(0).getCorpwxUserid() != null) {
-                    String corpUid = recpUserList.stream().map(User::getCorpwxUserid).distinct().collect(Collectors.joining("|"));
-                    JSONObject json=new JSONObject();
-                    JSONArray dataJson=new JSONArray();
-                    JSONObject jsonObj=new JSONObject();
-                    jsonObj.put("key", "任务内容");
-                    jsonObj.put("value",task.getName());
-                    dataJson.add(jsonObj);
-                    json.put("template_id","tty9TkCAAAovv416zsWtn0e06CJ635HA");
-                    json.put("url", "https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=task#wechat_redirect");
-                    json.put("content_item",dataJson);
-                    //todo:发送消息提醒任务
-                    wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfo, corpUid, json);
                 }
             }
         }
@@ -1410,6 +1459,10 @@ public class TaskController {
         if(pageIndex!=null&&pageSize!=null){
             pageStart = (pageIndex - 1) * pageSize;
         }
+        if (companyId==Constant.MLD_COMPANY_ID){
+            //美莱德 任务计划状态是1
+            queryWrapper.ne("is_task_plan",1);
+        }
         List<Task> list = taskMapper.getTaskWithProjectName(queryWrapper,pageStart, pageSize,companyId,branchDepartment);
         List<Integer> collect = list.stream().map(l -> l.getId()).distinct().collect(Collectors.toList());
         collect.add(-1);

+ 18 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserController.java

@@ -174,12 +174,30 @@ public class UserController {
     public HttpRespMsg getFirstCheckUserList() {
         return userService.getFirstCheckUserList(request);
     }
+    @RequestMapping("/getChargeUserByProjectId")
+    public HttpRespMsg getChargeUserByProjectId(Integer projectId){
+        return userService.getChargeUserByProjectId(projectId,request);
+    }
 
+    /**
+     * mld工作计划二级审核人
+     * @return
+     */
     @RequestMapping("/getSecondCheckUser")
     public HttpRespMsg getSecondCheckUser() {
         return userService.getSecondCheckUserList(request);
     }
 
+    /**
+     *获取项目参与者信息
+     * @param projectId
+     * @return
+     */
+    @RequestMapping("/getUserByProject")
+    public HttpRespMsg getUserByProject(Integer projectId) {
+        return userService.getUserByProject(projectId,request);
+    }
+
     @RequestMapping("/getSimpleActiveUserListPage")
     public HttpRespMsg getSimpleActiveUserListPage(@RequestParam Integer pageIndex, @RequestParam Integer pageSize,Integer departmentId,String keyword,String cursor,@RequestParam(required = false) String userIds) throws Exception {
         return userService.getSimpleActiveUserListPage(pageIndex,pageSize,departmentId,request,keyword,cursor,userIds);

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

@@ -1,5 +1,6 @@
 package com.management.platform.entity.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import lombok.Data;
 
 import java.util.List;
@@ -24,4 +25,9 @@ public class GanttDataItem {
     public Integer level;
     public List<GanttDataItem> children;
     public Integer objType;//对象类型:0是人员,1是部门,2是项目
+    private Integer taskPlanType;
+    private Integer isTaskPlan;
+    private String checkFirstId;
+    private String checkSecondId;
+    private Integer taskStatus;
 }

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

@@ -324,4 +324,6 @@ public interface ProjectService extends IService<Project> {
     HttpRespMsg exportProjectTaskPlanAndRealCost(Integer projectId, HttpServletRequest request, Integer taskType);
 
     HttpRespMsg transferProjectReviwer(String userId, String targetAuditorId);
+
+    HttpRespMsg getProjectByLeader(HttpServletRequest request);
 }

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/UserService.java

@@ -118,4 +118,8 @@ public interface UserService extends IService<User> {
     HttpRespMsg getFirstCheckUserList(HttpServletRequest request);
 
     HttpRespMsg getSecondCheckUserList(HttpServletRequest request);
+
+    HttpRespMsg getUserByProject(Integer projectId, HttpServletRequest request);
+
+    HttpRespMsg getChargeUserByProjectId(Integer projectId, HttpServletRequest request);
 }

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

@@ -1236,6 +1236,24 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         return msg;
     }
 
+    @Override
+    public HttpRespMsg getProjectByLeader(HttpServletRequest request) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("Token"));
+        Integer companyId = user.getCompanyId();
+        List<ProjectLeader> leaderList = projectLeaderService.list(new QueryWrapper<ProjectLeader>()
+                .eq("company_id", companyId).eq("leader_id", user.getId()));
+        if(leaderList!=null&& !leaderList.isEmpty()){
+            List<Integer> projectIds = leaderList.stream().map(ProjectLeader::getProjectId).distinct().collect(Collectors.toList());
+            List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>()
+                    .in("project_id", projectIds).eq("status",1));
+            httpRespMsg.setData(projectList);
+        }else {
+            httpRespMsg.setData(new ArrayList<Project>());
+        }
+        return httpRespMsg;
+    }
+
     public HttpRespMsg getProjectEstimatedWork(Integer pageIndex, Integer pageSize, Integer projectId, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         //通过公司id获取该公司所有的项目列表
@@ -4954,6 +4972,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     itemList.add(curItem);
                     btLastItemId = businessTripList.get(i).getOwnerId();
                 }
+
             }
             else {
                 //按照项目获取
@@ -5085,6 +5104,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     curItem.text = (String) map.get("project_name")+"/"+(String)map.get("task_name");
                     curItem.start_date = start_date;
 
+                    curItem.setTaskPlanType(map.get("taskPlanType")==null?null:(Integer)map.get("taskPlanType"));
+                    curItem.setIsTaskPlan(map.get("isTaskPlan")==null?null:(Integer)map.get("isTaskPlan"));
+                    curItem.setCheckFirstId(map.get("checkFirstId")==null?null:(String) map.get("checkFirstId"));
+                    curItem.setCheckSecondId(map.get("checkSecondId")==null?null:(String) map.get("checkSecondId"));
+                    curItem.setTaskStatus(map.get("taskStatus")==null?null:(Integer)map.get("taskStatus"));
                     curItem.end_date = end_date;
                     curItem.time = (Integer)map.get("duration");
                     curItem.parent = lastItemId;
@@ -5110,6 +5134,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     curItem.id = projectId+"_"+exeId;
                     curItem.userId = (String) map.get("user_id");
                     curItem.text = (String) map.get("name")+"/"+(String)map.get("task_name");
+                    curItem.setTaskPlanType(map.get("taskPlanType")==null?null:(Integer)map.get("taskPlanType"));
+                    curItem.setIsTaskPlan(map.get("isTaskPlan")==null?null:(Integer)map.get("isTaskPlan"));
+                    curItem.setCheckFirstId(map.get("checkFirstId")==null?null:(String) map.get("checkFirstId"));
+                    curItem.setCheckSecondId(map.get("checkSecondId")==null?null:(String) map.get("checkSecondId"));
+                    curItem.setTaskStatus(map.get("taskStatus")==null?null:(Integer)map.get("taskStatus"));
                     curItem.start_date = start_date;
                     curItem.end_date = end_date;
                     curItem.time = (Integer)map.get("duration");

+ 23 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -2825,7 +2825,30 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         }
     }
 
+    @Override
+    public HttpRespMsg getUserByProject(Integer projectId, HttpServletRequest request) {
+        HttpRespMsg msg = new HttpRespMsg();
+        List<Map<String, Object>> mapList = participationMapper.getParticipator(projectId);
+        msg.setData(mapList);
+        return msg;
+    }
 
+    @Override
+    public HttpRespMsg getChargeUserByProjectId(Integer projectId, HttpServletRequest request) {
+        HttpRespMsg msg = new HttpRespMsg();
+
+        Project project = projectMapper.selectById(projectId);
+        if (project!=null&&project.getInchargerId()!=null){
+            User user = userMapper.selectById(project.getInchargerId());
+            HashMap<String, Object> map = new HashMap<>();
+            map.put("id",user.getId());
+            map.put("name",user.getName());
+            msg.setData(map);
+        }else {
+            msg.setData(new HashMap<>());
+        }
+        return msg;
+    }
 
 
     @Override

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

@@ -120,6 +120,8 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
 
     public static final int TEXT_CARD_MSG_TASK_FILE_CHECK = 28;//任务文件驳回
 
+    public static final int TEXT_CARD_MSG_TASK_PLAN_NEED_CHECK = 29;//工作计划待审核
+
     private static Object userLock = new Object();
 
     @Value("${suitId}")
@@ -403,6 +405,9 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                 else if ("task".equals(pageRouter)) {
                     //费用报销
                     title = "工时管家:任务到期通知";
+                    if (msgType.equals(TEXT_CARD_MSG_TASK_PLAN_NEED_CHECK)) {
+                        title = "工作计划待审核";
+                    }
                 }
                 else if (pageRouter.contains("projectInside")) {
                     //预估工时审核

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

@@ -731,7 +731,10 @@
 
     <select id="getTaskPlanByMemb" resultType="java.util.Map">
         SELECT user.`id` as user_id, user.`name`,project.id, project.`project_name`,task.id as task_id, task.name as task_name,task_executor.id as exe_id,
-        IFNULL(task.`start_date`, task.end_date) as start_date, task.`end_date`, task_executor.plan_hours as duration, task.task_level as level FROM user
+        IFNULL(task.`start_date`, task.end_date) as start_date, task.`end_date`, task_executor.plan_hours as duration, task.task_level as level ,
+        task.task_plan_type as taskPlanType,task.is_task_plan as isTaskPlan,task.check_first_id as checkFirstId,task.check_second_id as checkSecondId,
+        task.task_status as taskStatus
+        FROM user
         LEFT JOIN task_executor ON user.id = task_executor.`executor_id`
         left join task on task.id = task_executor.task_id
         LEFT JOIN project ON project.`id` = task.`project_id`
@@ -747,6 +750,8 @@
 
     <select id="getTaskPlanByProject" resultType="java.util.Map">
         SELECT task.executor_id as user_id, task.executor_name as `name`,project.id, project.`project_name`,task.id as task_id, task.name as task_name,
+        task.task_plan_type as taskPlanType,task.is_task_plan as isTaskPlan,task.check_first_id as checkFirstId,task.check_second_id as checkSecondId
+        ,task.task_status as taskStatus,
         IFNULL(task.`start_date`, task.end_date) as start_date, task.`end_date`, task.plan_hours as duration FROM project
         LEFT JOIN task ON task.project_id = project.id
         WHERE project.company_id = #{companyId}