luohairen
2024-12-04 fc6b946b1020ddff4fe2b01c9e439680cbda6b47
分角色展示项目计划,实现不同角色的功能
13个文件已修改
136 ■■■■ 已修改文件
business/src/main/java/com/ycl/controller/ProjectPlanInfoController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/domain/entity/ProjectPlanInfo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/domain/form/ProjectPlanExamineRecordForm.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/domain/form/ProjectPlanInfoForm.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/domain/vo/DepartmentApprovalResponseVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/ProjectPlanInfoService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/impl/ProjectPlanExamineRecordServiceImpl.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/resources/mapper/ProjectInfoMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/resources/mapper/ProjectPlanExamineRecordMapper.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/controller/ProjectPlanInfoController.java
@@ -89,9 +89,14 @@
        return projectPlanInfoService.addPlanInfo(request);
    }
    @PostMapping("/savePlanInfo")
    public Result savePlanInfo(@RequestBody ProjectPlanInfo item) {
        return projectPlanInfoService.savePlanInfo(item);
    @PostMapping("/resubmitPlanInfo")
    public Result resubmitPlanInfo(@RequestBody ProjectPlanInfoForm form) {
        return projectPlanInfoService.resubmitPlanInfo(form);
    }
    @PostMapping("/savePlanInfo/{planRecordId}")
    public Result savePlanInfo(@RequestBody ProjectPlanInfo item, @PathVariable("planRecordId") Integer planRecordId) {
        return projectPlanInfoService.savePlanInfo(item, planRecordId);
    }
    @PostMapping("/delayPlanInfo")
business/src/main/java/com/ycl/domain/entity/ProjectPlanInfo.java
@@ -31,6 +31,10 @@
    /** 事项名称 */
    private String title;
    @TableField("plan_status")
    /** 状态(未审核:0,已驳回:1,已通过:2) */
    private Integer planStatus;
    @TableField("progress_status")
    /** 状态(0:未完成,1:待审核,2:已驳回,3:已完成) */
    private Integer progressStatus;
business/src/main/java/com/ycl/domain/form/ProjectPlanExamineRecordForm.java
@@ -27,6 +27,8 @@
    @ApiModelProperty("项目计划记录id")
    private Long projectPlanRecordId;
    private Long projectPlanInfoId;
    @NotNull(message = "上级部门审核人不能为空", groups = {Add.class, Update.class})
    @ApiModelProperty("上级部门审核人")
    private Long departmentUserId;
business/src/main/java/com/ycl/domain/form/ProjectPlanInfoForm.java
@@ -33,6 +33,8 @@
    @ApiModelProperty("事项名称")
    private String title;
    private Integer planStatus;
    @NotNull(message = "状态(0:未完成,1:待审核,2:已驳回,3:已完成)不能为空", groups = {Add.class, Update.class})
    @ApiModelProperty("状态(0:未完成,1:待审核,2:已驳回,3:已完成)")
    private Integer progressStatus;
business/src/main/java/com/ycl/domain/vo/DepartmentApprovalResponseVO.java
@@ -12,6 +12,7 @@
@NoArgsConstructor
public class DepartmentApprovalResponseVO {
    private Long id;
    private Long projectPlanInfoId;
    private String title;
    private Integer departmentExamine;
    private String departmentApproval;
@@ -21,4 +22,5 @@
    private String manageApprovalReply;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date gmtCreate;
    private Integer planStatus;
}
business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java
@@ -36,4 +36,6 @@
    List<ProjectVO> homeCount();
    List<ProjectVO> selectProjectDetailByIds(@Param("dataIdList") List<Long> dataIdList);
    ProjectInfo queryById(Integer recordId);
}
business/src/main/java/com/ycl/service/ProjectPlanInfoService.java
@@ -75,11 +75,13 @@
     * 保存计划项
     * @return
     */
    Result savePlanInfo(ProjectPlanInfo item);
    Result savePlanInfo(ProjectPlanInfo item, Integer planRecordId);
    /**
     * 延期
     * @return
     */
    Result delayPlanInfo(ProjectPlanInfoForm request);
    Result resubmitPlanInfo(ProjectPlanInfoForm form);
}
business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java
@@ -1,7 +1,8 @@
package com.ycl.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
business/src/main/java/com/ycl/service/impl/ProjectPlanExamineRecordServiceImpl.java
@@ -4,10 +4,12 @@
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.ycl.common.utils.SecurityUtils;
import com.ycl.domain.entity.ProjectPlanExamineRecord;
import com.ycl.domain.entity.ProjectPlanInfo;
import com.ycl.domain.entity.ProjectPlanRecord;
import com.ycl.domain.vo.DepartmentApprovalResponseVO;
import com.ycl.domain.vo.ProjectProcessToDoVo;
import com.ycl.mapper.ProjectPlanExamineRecordMapper;
import com.ycl.mapper.ProjectPlanInfoMapper;
import com.ycl.mapper.ProjectPlanRecordMapper;
import com.ycl.service.ProjectPlanExamineRecordService;
import com.ycl.common.base.Result;
@@ -37,6 +39,7 @@
    private final ProjectPlanExamineRecordMapper projectPlanExamineRecordMapper;
    private final ProjectPlanRecordMapper projectPlanRecordMapper;
    private final ProjectPlanInfoMapper projectPlanInfoMapper;
    /**
     * 添加
@@ -162,22 +165,33 @@
    @Override
    public Result saveExamine(ProjectPlanExamineRecordForm form) {
        // 判断,如果都同意,则直接更新审批记录
        // 更新审批记录
        ProjectPlanExamineRecord item = ProjectPlanExamineRecordForm.getEntityByForm(form, null);
        item.setId(form.getId().longValue());
        item.setDepartmentUserId(SecurityUtils.getUserId());
        item.setManagerUserId(SecurityUtils.getUserId());
        baseMapper.updateById(item);
        Long projectPlanRecordId = baseMapper.selectById(item.getId()).getProjectPlanRecordId();
        // 如果同意,计划项状态为已通过,并且新增一条项目进度审核记录,否则为已驳回
        if (null != form.getDepartmentExamine() && null != form.getManageExamine() && form.getDepartmentExamine() == 0 && form.getManageExamine() == 0) {
            ProjectPlanExamineRecord projectPlanExamineRecord = ProjectPlanExamineRecordForm.getEntityByForm(form, null);
            projectPlanExamineRecord.setId(form.getId().longValue());
            projectPlanExamineRecord.setDepartmentUserId(SecurityUtils.getUserId());
            projectPlanExamineRecord.setManagerUserId(SecurityUtils.getUserId());
            baseMapper.updateById(projectPlanExamineRecord);
            new LambdaUpdateChainWrapper<>(projectPlanInfoMapper)
                    .eq(ProjectPlanInfo::getId, form.getProjectPlanInfoId())
                    .set(ProjectPlanInfo::getPlanStatus, 2)
                    .update();
            // 新增项目进度审核记录
            ProjectPlanExamineRecord newItem = new ProjectPlanExamineRecord();
            newItem.setProjectPlanRecordId(projectPlanRecordId); // 项目计划记录ID
            newItem.setProjectPlanInfoId(item.getProjectPlanInfoId()); // 项目计划项ID
            newItem.setEventType(2); // 进度上报
            newItem.setDeleted(0); // 未删除
            baseMapper.insert(newItem);
        }else{
            new LambdaUpdateChainWrapper<>(projectPlanInfoMapper)
                    .eq(ProjectPlanInfo::getId, form.getProjectPlanInfoId())
                    .set(ProjectPlanInfo::getPlanStatus, 1)
                    .update();
        }
        // 否则,将项目记录设置为未上报,并将记录逻辑删除
        new LambdaUpdateChainWrapper<>(projectPlanRecordMapper)
                .eq(ProjectPlanRecord::getId, form.getProjectPlanRecordId())
                .set(ProjectPlanRecord::getReportStatus, 1);
        new LambdaUpdateChainWrapper<>(baseMapper)
                .eq(ProjectPlanExamineRecord::getProjectPlanRecordId, form.getProjectPlanRecordId())
                .remove();
        return Result.ok("回复成功");
        return Result.ok("审批成功");
    }
    @Override
business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java
@@ -148,11 +148,12 @@
        request.getAddList().forEach(item -> {
            ProjectPlanInfo projectPlanInfo = new ProjectPlanInfo();
            projectPlanInfo.setProjectPlanRecordId(request.getProjectPlanRecordId().longValue());
            projectPlanInfo.setTitle(item.getTitle());
            projectPlanInfo.setProgressStatus(0);
            projectPlanInfo.setStartTime(item.getStartTime());
            projectPlanInfo.setEndTime(item.getEndTime());
            projectPlanInfo.setDeleted(0);
            projectPlanInfo.setTitle(item.getTitle()); // 计划项标题
            projectPlanInfo.setPlanStatus(0); // 计划项状态为未开始
            projectPlanInfo.setProgressStatus(0); // 计划项进度为未开始
            projectPlanInfo.setStartTime(item.getStartTime()); // 计划项开始时间
            projectPlanInfo.setEndTime(item.getEndTime()); // 计划项结束时间
            projectPlanInfo.setDeleted(0);// 未删除
            list.add(projectPlanInfo);
        });
        list.stream().forEach(i -> {
@@ -168,23 +169,25 @@
        // 新增一条审核记录
        ProjectPlanExamineRecord item = new ProjectPlanExamineRecord();
        item.setProjectPlanRecordId(request.getProjectPlanRecordId().longValue());
        item.setEventType(0);
        item.setGmtCreate(new Date());
        item.setDeleted(0);
        item.setEventType(0); // 计划上报
        item.setGmtCreate(new Date());  // 创建时间
        item.setDeleted(0); // 未删除
        list.stream().forEach(i -> {
            item.setProjectPlanInfoId(i.getId().longValue());
            projectPlanExamineRecordMapper.insertOne(item);
//            projectPlanExamineRecordMapper.insertOne(item);
        });
        return Result.ok("添加成功");
    }
    @Override
    public Result savePlanInfo(ProjectPlanInfo item) {
        item.setProgressStatus(0);
    public Result savePlanInfo(ProjectPlanInfo item, Integer planRecordId) {
        item.setProjectPlanRecordId(planRecordId.longValue()); // 项目计划记录id
        item.setProgressStatus(0); // 未开始
        item.setDeleted(0); // 未删除
        item.setPlanStatus(0); // 未审核
        // 判断id是否存在,存在则更新,不存在则新增
        if (item.getId() == null) {
            baseMapper.insertOne(item);
            baseMapper.insert(item);
        } else {
            new LambdaUpdateChainWrapper<>(baseMapper).eq(ProjectPlanInfo::getId, item.getId())
                    .set(ProjectPlanInfo::getTitle, item.getTitle())
@@ -216,4 +219,28 @@
        projectPlanExamineRecordMapper.insertOne(item);
        return Result.ok("延期成功");
    }
    @Override
    public Result resubmitPlanInfo(ProjectPlanInfoForm form) {
        // 更新重新上报后的内容
        new LambdaUpdateChainWrapper<>(baseMapper)
                .eq(ProjectPlanInfo::getId, form.getId())
                .set(ProjectPlanInfo::getTitle, form.getTitle())
                .set(ProjectPlanInfo::getStartTime, form.getStartTime())
                .set(ProjectPlanInfo::getEndTime, form.getEndTime())
                .set(ProjectPlanInfo::getPlanStatus, 0) // 将该计划项设置为未审核的状态
                .update();
        // 新增一条计划上报的审核记录
        ProjectPlanExamineRecord item = new ProjectPlanExamineRecord();
        item.setProjectPlanRecordId(form.getProjectPlanRecordId().longValue());
        item.setProjectPlanInfoId(form.getId().longValue());
        item.setEventType(0); // 计划上报
        item.setDelayStartTime(form.getStartTime());
        item.setDelayEndTime(form.getEndTime());
        item.setGmtCreate(new Date());
        item.setDeleted(0); // 未删除
        projectPlanExamineRecordMapper.insertOne(item);
        return Result.ok("重新上报成功");
    }
}
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -1,6 +1,6 @@
package com.ycl.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -34,6 +34,7 @@
import org.apache.commons.lang3.StringUtils;
import org.flowable.bpmn.model.*;
import org.flowable.bpmn.model.Process;
import org.flowable.common.engine.impl.util.CollectionUtil;
import org.flowable.engine.*;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.repository.ProcessDefinition;
business/src/main/resources/mapper/ProjectInfoMapper.xml
@@ -181,4 +181,7 @@
            </if>
        </where>
    </select>
    <select id="queryById" resultType="com.ycl.domain.entity.ProjectInfo">
        select * from t_project_info where id = #{id} and deleted = 0
    </select>
</mapper>
business/src/main/resources/mapper/ProjectPlanExamineRecordMapper.xml
@@ -143,6 +143,7 @@
    <select id="selectInfo" resultType="com.ycl.domain.vo.DepartmentApprovalResponseVO">
        SELECT
            ranked.id,
            ppi.id AS project_plan_info_id,
            (SELECT title FROM t_project_plan_info WHERE id = ranked.project_plan_info_id) as title,
            ranked.department_examine,
            ranked.department_approval,
@@ -150,7 +151,8 @@
            ranked.manage_examine,
            ranked.manage_approval,
            ranked.manage_approval_reply,
            ranked.gmt_create
            ranked.gmt_create,
            ppi.plan_status
        FROM (
                 SELECT
                     *,
@@ -158,6 +160,7 @@
                 FROM t_project_plan_examine_record AS pper
                 WHERE project_plan_record_id = #{projectPlanRecordId}
             ) AS ranked
        LEFT JOIN t_project_plan_info ppi ON ranked.project_plan_info_id = ppi.id
        WHERE rn = 1 AND ranked.deleted = 0
        Order by gmt_create DESC
    </select>
@@ -176,6 +179,8 @@
        FROM t_project_plan_examine_record AS pper
        WHERE
            pper.project_plan_record_id = #{projectPlanRecordId}
            AND pper.event_type = 0
            AND pper.deleted = 0
        ORDER BY gmt_update DESC
    </select>
    <select id="todoList" resultMap="selectToDoResultMap">