multi-admin/src/main/java/com/gkhy/exam/admin/controller/app/AppItemReviewController.java
@@ -1,9 +1,12 @@ package com.gkhy.exam.admin.controller.app; import com.gkhy.exam.common.api.CommonResult; import com.gkhy.exam.system.domain.ContractReviewMess; import com.gkhy.exam.system.domain.ItemReviewUser; import com.gkhy.exam.system.domain.Proclaim; import com.gkhy.exam.system.domain.UseSealApplyFlow; import com.gkhy.exam.system.domain.req.ContractReviewReq; import com.gkhy.exam.system.service.ContractReviewService; import com.gkhy.exam.system.service.ItemReviewService; import com.gkhy.exam.system.service.ProclaimService; import com.gkhy.exam.system.service.useSealApply.UseSealApplyService; @@ -25,6 +28,9 @@ @Autowired private ProclaimService proclaimService; @Autowired private ContractReviewService contractReviewService; @@ -98,5 +104,29 @@ return proclaimService.approveProclaim(proclaim); } /** * 合同评审待审批 * @param userId * @return */ @ApiOperation(value = "待审批列表") @GetMapping("contract/List") public CommonResult contractList(@RequestParam("userId") Integer userId){ return contractReviewService.contractList(userId); } /** * 合同评审审批 * @param contractReviewReq * @return */ @ApiOperation(value = "审批") @PostMapping("contract/check") public CommonResult contractcheck(@RequestBody ContractReviewReq contractReviewReq){ return contractReviewService.contractcheck(contractReviewReq); } } multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReview.java
@@ -128,6 +128,16 @@ @TableField("update_time") private LocalDateTime updateTime; @TableField("file_name") private String fileName; @TableField("file_path") private String filePath; @ApiModelProperty(value = "状态0评审中 1已评审") @TableField("status") private Integer status; @TableField(exist = false) private List<ContractReviewRequire> contractReviewRequires; multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReviewMess.java
@@ -25,12 +25,31 @@ private Integer reviewId; @ApiModelProperty(value = "评审变更部门") @TableField("dept_name") private String deptName; @TableField("dept_id") private Integer deptId; @TableField(exist = false) private List<ContractReviewMessb> contractReviewMessbs; private String deptName; @ApiModelProperty(value = "评审变更内容") @TableField("review_mess") private String reviewMess; @ApiModelProperty(value = "评审变更意见") @TableField("review_opinion") private String reviewOpinion; @ApiModelProperty(value = "人员") @TableField("review_user") private Integer reviewUser; @TableField(exist = false) private String reviewName; @ApiModelProperty(value = "状态 0待审批 1已审批") @TableField("status") private Integer status; multi-system/src/main/java/com/gkhy/exam/system/domain/req/ContractReviewReq.java
New file @@ -0,0 +1,11 @@ package com.gkhy.exam.system.domain.req; import lombok.Data; @Data public class ContractReviewReq { private Integer id; private Integer userId; private String reviewOpinion; private Integer type; } multi-system/src/main/java/com/gkhy/exam/system/domain/vo/ContractReviewVo.java
New file @@ -0,0 +1,14 @@ package com.gkhy.exam.system.domain.vo; import com.gkhy.exam.system.domain.ContractReview; import com.gkhy.exam.system.domain.ContractReviewMess; import lombok.Data; import lombok.EqualsAndHashCode; import java.util.List; @EqualsAndHashCode(callSuper = true) @Data public class ContractReviewVo extends ContractReview { private Integer signType; } multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractReviewMapper.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.gkhy.exam.system.domain.ContractReview; import com.gkhy.exam.system.domain.vo.ContractReviewVo; import org.apache.ibatis.annotations.Param; import org.mapstruct.Mapper; @@ -12,4 +13,10 @@ List<ContractReview> selectReviewList(ContractReview contractReview); Integer selectByContractId(@Param("contractId") Integer contractId); List<ContractReviewVo> selectByUserId(@Param("userId") Integer userId); List<ContractReviewVo> selectByUserIdMain(@Param("userId") Integer userId); void updateByUserid(ContractReview contractReview); } multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractReviewMessMapper.java
@@ -16,7 +16,10 @@ void deleteByReviewId(@Param("id") Integer id); List<ContractReviewMessb> selectByMessId(@Param("id") Integer id); void updateByUserId(ContractReviewMess contractReviewMess); void insertMessbs(@Param("contractReviewMessbs") List<ContractReviewMessb> contractReviewMessbs); int CountByReviewId(@Param("id") Integer id); List<ContractReviewMess> selectByReviewIdAndUserId(@Param("id") Integer id, @Param("userId") Integer userId); } multi-system/src/main/java/com/gkhy/exam/system/service/ContractReviewService.java
@@ -4,6 +4,7 @@ import com.gkhy.exam.common.api.CommonPage; import com.gkhy.exam.common.api.CommonResult; import com.gkhy.exam.system.domain.ContractReview; import com.gkhy.exam.system.domain.req.ContractReviewReq; public interface ContractReviewService extends IService<ContractReview> { CommonPage selectContractReviewList(ContractReview contractReview); @@ -13,4 +14,8 @@ CommonResult updateContractReview(ContractReview contractReview); CommonResult deletedContractReview(Integer reviewId); CommonResult contractList(Integer userId); CommonResult contractcheck(ContractReviewReq contractReviewReq); } multi-system/src/main/java/com/gkhy/exam/system/service/impl/ContractReviewServiceImpl.java
@@ -10,17 +10,20 @@ import com.gkhy.exam.system.domain.ContractReviewMess; import com.gkhy.exam.system.domain.ContractReviewMessb; import com.gkhy.exam.system.domain.ContractReviewRequire; import com.gkhy.exam.system.domain.req.ContractReviewReq; import com.gkhy.exam.system.domain.vo.ContractReviewVo; import com.gkhy.exam.system.mapper.ContractReviewMapper; import com.gkhy.exam.system.mapper.ContractReviewMessMapper; import com.gkhy.exam.system.mapper.ContractReviewRequireMapper; import com.gkhy.exam.system.service.ContractReviewService; import org.apache.tomcat.websocket.AuthenticationException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.*; import java.util.stream.Collectors; @Service public class ContractReviewServiceImpl extends ServiceImpl<ContractReviewMapper, ContractReview> implements ContractReviewService { @@ -76,21 +79,6 @@ } contractReviewMessMapper.insertMesses(reviewMesses); // 收集所有ContractReviewMessb List<ContractReviewMessb> allMessbs = new ArrayList<>(); for (ContractReviewMess reviewMess : reviewMesses) { List<ContractReviewMessb> contractReviewMessbs = reviewMess.getContractReviewMessbs(); if (contractReviewMessbs != null && !contractReviewMessbs.isEmpty()) { for (ContractReviewMessb contractReviewMessb : contractReviewMessbs) { contractReviewMessb.setMessId(reviewMess.getId()); } allMessbs.addAll(contractReviewMessbs); } } // 批量插入ContractReviewMessb if (!allMessbs.isEmpty()) { contractReviewMessMapper.insertMessbs(allMessbs); } // 批量插入ContractReviewRequire for (ContractReviewRequire contractReviewRequire : contractReviewRequires) { @@ -123,21 +111,6 @@ reviewMess.setReviewId(reviewId); } contractReviewMessMapper.insertMesses(reviewMesses); // 处理ContractReviewMessb子项 List<ContractReviewMessb> allMessbs = new ArrayList<>(); for (ContractReviewMess reviewMess : reviewMesses) { List<ContractReviewMessb> contractReviewMessbs = reviewMess.getContractReviewMessbs(); if (contractReviewMessbs != null && !contractReviewMessbs.isEmpty()) { for (ContractReviewMessb contractReviewMessb : contractReviewMessbs) { contractReviewMessb.setMessId(reviewMess.getId()); } allMessbs.addAll(contractReviewMessbs); } } // 批量插入ContractReviewMessb if (!allMessbs.isEmpty()) { contractReviewMessMapper.insertMessbs(allMessbs); } } // 插入新的ContractReviewRequire数据 if (contractReviewRequires != null && !contractReviewRequires.isEmpty()) { @@ -168,4 +141,55 @@ } return CommonResult.failed(); } @Override public CommonResult contractList(Integer userId) { List<ContractReviewVo> result = new ArrayList<>(); List<ContractReviewVo> contractReviewVos = contractReviewMapper.selectByUserId(userId); List<ContractReviewVo> contractReviewVos1 = contractReviewMapper.selectByUserIdMain(userId); Set<Integer> existIdSet = new HashSet<>(); // 处理signType=1并缓存id for (ContractReviewVo contractReviewVo : contractReviewVos) { List<ContractReviewMess> contractReviewMesses = contractReviewMessMapper.selectByReviewIdAndUserId(contractReviewVo.getId(),userId); contractReviewVo.setReviewMesses(contractReviewMesses); contractReviewVo.setSignType(1); result.add(contractReviewVo); existIdSet.add(contractReviewVo.getId()); // 存入已存在的id } // 处理signType=2,通过Set快速判断id是否存在 for (ContractReviewVo contractReviewVo : contractReviewVos1) { int update = contractReviewMessMapper.CountByReviewId(contractReviewVo.getId()); if (update==0){ if (!existIdSet.contains(contractReviewVo.getId())) { List<ContractReviewMess> contractReviewMesses = contractReviewMessMapper.selectByReviewIdAndUserId(contractReviewVo.getId(),userId); contractReviewVo.setReviewMesses(contractReviewMesses); contractReviewVo.setSignType(2); result.add(contractReviewVo); existIdSet.add(contractReviewVo.getId()); // 同步更新Set } } } return CommonResult.success(result); } @Override public CommonResult contractcheck(ContractReviewReq contractReviewReq) { if (contractReviewReq.getType()==2){ ContractReview contractReview = new ContractReview(); contractReview.setId(contractReviewReq.getId()); contractReview.setLegalPerson(contractReviewReq.getUserId()); contractReview.setSuggest(contractReviewReq.getReviewOpinion()); contractReviewMapper.updateByUserid(contractReview); } if (contractReviewReq.getType()==1){ ContractReviewMess contractReviewMess = new ContractReviewMess(); contractReviewMess.setId(contractReviewReq.getId()); contractReviewMess.setReviewOpinion(contractReviewReq.getReviewOpinion()); contractReviewMess.setReviewUser(contractReviewReq.getUserId()); contractReviewMessMapper.updateByUserId(contractReviewMess); } return CommonResult.success(); } } multi-system/src/main/resources/mapper/system/ContractReviewMapper.xml
@@ -1,6 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.gkhy.exam.system.mapper.ContractReviewMapper"> <update id="updateByUserid"> update contract_review set status = 1 ,suggest=#{suggest} where id = #{id} and legal_person = #{legalPerson} </update> <select id="selectReviewList" resultType="com.gkhy.exam.system.domain.ContractReview"> SELECT @@ -31,7 +34,10 @@ cr.`create_by`, cr.`create_time`, cr.`update_by`, cr.`update_time` cr.`update_time`, cr.`file_name`, cr.`file_path`, cr.`status` FROM `contract_review` cr LEFT JOIN sys_company sc ON cr.company_id = sc.id @@ -43,10 +49,50 @@ <if test="companyId!=null"> and cr.company_id =#{companyId} </if> <if test="status !=null"> and cr.status = #{status} </if> <if test="type!=null"> and cr.type = #{type} </if> ORDER BY cr.create_time DESC </select> <select id="selectByContractId" resultType="java.lang.Integer"> select count(*) from contract_review where contract_id =#{contractId} and type = 1 </select> <select id="selectByUserId" resultType="com.gkhy.exam.system.domain.vo.ContractReviewVo"> SELECT cr.`id`, cr.`type`, cl.`contract_name`, cr.`file_name`, cr.`file_path` FROM `contract_review` cr LEFT JOIN contract_ledger cl ON cr.contract_id = cl.id LEFT JOIN contract_review_mess crm ON cr.id = crm.review_id WHERE cr.`status` = 0 AND cr.del_flag = 1 AND ( crm.review_user = #{userId} AND crm.`status` = 0) </select> <select id="selectByUserIdMain" resultType="com.gkhy.exam.system.domain.vo.ContractReviewVo"> SELECT cr.`id`, cr.`type`, cl.`contract_name`, cr.`file_name`, cr.`file_path` FROM `contract_review` cr LEFT JOIN contract_ledger cl ON cr.contract_id = cl.id LEFT JOIN contract_review_mess crm ON cr.id = crm.review_id WHERE cr.`status` = 0 AND cr.del_flag = 1 and cr.legal_person = #{userId} </select> </mapper> multi-system/src/main/resources/mapper/system/ContractReviewMessMapper.xml
@@ -4,56 +4,68 @@ <insert id="insertMesses" keyProperty="id" useGeneratedKeys="true"> INSERT INTO `contract_review_mess` (`review_id`, `dept_name` ) INSERT INTO `contract_review_mess` (`review_id`, `dept_id`,`review_mess`,`review_opinion`,`review_user` ) VALUES <foreach collection="reviewMesses" item="item" separator=","> (#{item.reviewId}, #{item.deptName}) #{item.deptId}, #{item.reviewMess}, #{item.reviewOpinion}, #{item.reviewUser} ) </foreach> </insert> <insert id="insertMessbs"> INSERT INTO `contract_review_mess_b` (`mess_id`, `review_mess`,`review_opinion`,`review_sign` ) VALUES <foreach collection="contractReviewMessbs" item="item" separator=","> (#{item.messId}, #{item.reviewMess}, #{item.reviewOpinion}, #{item.reviewSign}) </foreach> </insert> <update id="updateByUserId"> update contract_review_mess set status = 1 ,review_opinion = #{reviewOpinion} where id = #{id} and review_user = #{reviewUser} </update> <delete id="deleteByReviewId"> delete from contract_review_mess where review_id = #{id} </delete> <resultMap id="ContractReviewMessResult" type="com.gkhy.exam.system.domain.ContractReviewMess"> <id property="id" column="id"/> <result property="reviewId" column="review_id"/> <result property="deptId" column="dept_id"/> <result property="deptName" column="dept_name"/> <collection property="contractReviewMessbs" column="id" select="selectByMessId" fetchType="lazy"/> <result property="reviewMess" column="review_mess"/> <result property="reviewOpinion" column="review_opinion"/> <result property="reviewUser" column="review_user"/> <result property="reviewName" column="review_name"/> <result property="status" column="status"/> </resultMap> <select id="selectByReviewId" resultMap="ContractReviewMessResult"> SELECT `id`, `review_id`, `dept_name` crm.`id`, crm.`review_id`, crm.`dept_id`, sd.`dept_name`, crm.`review_mess`, crm.`review_opinion`, crm.`review_user`, su.`name` as review_name, crm.`status` FROM `contract_review_mess` `contract_review_mess` crm left join sys_user su on crm.review_user = su.id left join sys_dept sd on crm.dept_id = sd.dept_id where review_id = #{id} </select> <select id="selectByMessId" resultType="com.gkhy.exam.system.domain.ContractReviewMessb"> <select id="CountByReviewId" resultType="java.lang.Integer"> SELECT `id`, `mess_id`, `review_mess`, `review_opinion`, `review_sign` COUNT(*) FROM `contract_review_mess_b` where mess_id = #{id} contract_review cr LEFT JOIN contract_review_mess crm ON cr.id = crm.review_id WHERE crm.STATUS = 0 AND cr.del_flag = 1 and cr.id = #{id} </select> <select id="selectByReviewIdAndUserId" resultType="com.gkhy.exam.system.domain.ContractReviewMess"> select * from contract_review_mess where review_user=#{userId} and review_id = #{id} </select> </mapper> multi-system/src/main/resources/mapper/system/ItemReviewUserMapper.xml
@@ -51,6 +51,7 @@ iru.`user_dept`, iru.`user_duty`, iru.`sign`, iru.`review_opinion`, iru.`del_flag`, iru.`status`, ir.`stage`, multi-system/src/main/resources/mapper/system/MemoMapper.xml
@@ -71,5 +71,22 @@ WHERE a.del_flag = 0 AND a.check_id = #{userId} AND a.`status` = 0 and a.company_id = #{companyId} UNION ALL SELECT cl.contract_name AS title, '8' AS type, cr.id AS dataId FROM contract_review cr LEFT JOIN contract_ledger cl ON cr.contract_id = cl.id WHERE cr.del_flag = 1 and cr.status = 0 AND ( EXISTS ( SELECT 1 FROM contract_review_mess crm WHERE crm.review_id = cr.id AND crm.STATUS = 0 AND crm.review_user = #{userId} ) OR ( NOT EXISTS ( SELECT 1 FROM contract_review_mess crm WHERE crm.review_id = cr.id AND crm.STATUS = 0 ) AND cr.legal_person = #{userId} ) ) </select> </mapper>