“djh”
2025-12-22 ab0682fb16c1cd1d1f1b054184296bbaae158d2b
修改合同评审
11 files modified
2 files added
329 ■■■■ changed files
multi-admin/src/main/java/com/gkhy/exam/admin/controller/app/AppItemReviewController.java 30 ●●●●● patch | view | raw | blame | history
multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReview.java 10 ●●●●● patch | view | raw | blame | history
multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReviewMess.java 27 ●●●● patch | view | raw | blame | history
multi-system/src/main/java/com/gkhy/exam/system/domain/req/ContractReviewReq.java 11 ●●●●● patch | view | raw | blame | history
multi-system/src/main/java/com/gkhy/exam/system/domain/vo/ContractReviewVo.java 14 ●●●●● patch | view | raw | blame | history
multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractReviewMapper.java 7 ●●●●● patch | view | raw | blame | history
multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractReviewMessMapper.java 7 ●●●● patch | view | raw | blame | history
multi-system/src/main/java/com/gkhy/exam/system/service/ContractReviewService.java 5 ●●●●● patch | view | raw | blame | history
multi-system/src/main/java/com/gkhy/exam/system/service/impl/ContractReviewServiceImpl.java 88 ●●●●● patch | view | raw | blame | history
multi-system/src/main/resources/mapper/system/ContractReviewMapper.xml 48 ●●●●● patch | view | raw | blame | history
multi-system/src/main/resources/mapper/system/ContractReviewMessMapper.xml 64 ●●●●● patch | view | raw | blame | history
multi-system/src/main/resources/mapper/system/ItemReviewUserMapper.xml 1 ●●●● patch | view | raw | blame | history
multi-system/src/main/resources/mapper/system/MemoMapper.xml 17 ●●●●● patch | view | raw | blame | history
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>