“djh”
2025-11-07 87d56f38263bbc1630309f80ffab7a5eb8d8f0a4
修改
已添加5个文件
已修改6个文件
420 ■■■■■ 文件已修改
multi-admin/src/main/java/com/gkhy/exam/admin/controller/app/AppItemReviewController.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/QualityController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/domain/ItemReview.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/domain/ItemReviewUser.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/domain/vo/ItemReviewUserVo.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/mapper/ItemReviewMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/mapper/ItemReviewUserMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/service/ItemReviewService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/service/impl/ItemReviewServiceImpl.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/resources/mapper/system/ItemReviewMapper.xml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/resources/mapper/system/ItemReviewUserMapper.xml 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-admin/src/main/java/com/gkhy/exam/admin/controller/app/AppItemReviewController.java
对比新文件
@@ -0,0 +1,45 @@
package com.gkhy.exam.admin.controller.app;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.system.domain.ItemReviewUser;
import com.gkhy.exam.system.service.ItemReviewService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@Api(tags = "APP项目审批前端控制器")
@RestController
@RequestMapping("/app/item/review")
public class AppItemReviewController {
    @Autowired
    private ItemReviewService itemReviewService;
    /**
     * 待审批
     * @param userId
     * @return
     */
    @ApiOperation(value = "待审批列表")
    @GetMapping("/approvalList")
    public CommonResult approvalList(@RequestParam("userId") Integer userId){
        return itemReviewService.approvalList(userId);
    }
    /**
     * 审批
     * @param itemReviewUser
     * @return
     */
    @ApiOperation(value = "审批")
    @PostMapping("/approval")
    public CommonResult approval(@RequestBody ItemReviewUser itemReviewUser){
        return itemReviewService.approval(itemReviewUser);
    }
}
multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/QualityController.java
@@ -506,5 +506,16 @@
        return itemReviewService.deletedItem(itemReviewId);
    }
    /**
     * 发送
     * @param itemReviewId
     * @return
     */
    @ApiOperation(value = "发送")
    @GetMapping("/review/send")
    public CommonResult sendItemReview(@RequestParam("itemReviewId") Integer itemReviewId){
        return itemReviewService.sendItem(itemReviewId);
    }
}
multi-system/src/main/java/com/gkhy/exam/system/domain/ItemReview.java
@@ -4,12 +4,14 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
@Data
@TableName("item_review")
@@ -32,17 +34,73 @@
    @TableField(exist = false)
    private String itemName;
    @ApiModelProperty(value = "项目id")
    @TableField("num")
    private String num;
    @ApiModelProperty(value = "设计和开发阶段")
    @TableField("stage")
    private String stage;
    @ApiModelProperty(value = "项目id")
    @ApiModelProperty(value = "文件名称(线下)")
    @TableField("file_name")
    private String fileName;
    @ApiModelProperty(value = "项目id")
    @ApiModelProperty(value = "文件名称(线下)")
    @TableField("file_path")
    private String filePath;
    @ApiModelProperty(value = "类型 1线上  2线下")
    @TableField("type")
    private Integer type;
    @ApiModelProperty(value = "项目代码(线上)")
    @TableField("project_code")
    private String projectCode;
    @ApiModelProperty(value = "项目编号(线上)")
    @TableField("project_num")
    private String projectNum;
    @ApiModelProperty(value = "评审级别(线上)")
    @TableField("review_level")
    private String reviewLevel;
//    @ApiModelProperty(value = "评审依据(线上)")
//    @TableField("review_basis")
//    private String reviewBasis;
    @ApiModelProperty(value = "评审内容(线上)")
    @TableField("review_content")
    private String reviewContent;
//    @ApiModelProperty(value = "评审意见(线上)")
//    @TableField("review_opinion")
//    private String reviewOpinion;
//    @ApiModelProperty(value = "评审组长(线上)")
//    @TableField("group_id")
//    private Integer groupId;
//
//    @TableField(exist = false)
//    private String groupName;
//
//    @ApiModelProperty(value = "组长评审时间(线上)")
//    @TableField("group_time")
//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
//    private LocalDateTime groupTime;
//
//    @ApiModelProperty(value = "评审领导(线上)")
//    @TableField("leader_id")
//    private Integer leaderId;
//
//    @TableField(exist = false)
//    private String leaderName;
//
//    @ApiModelProperty(value = "领导评审时间(线上)")
//    @TableField("leader_time")
//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
//    private LocalDateTime leaderTime;
    @ApiModelProperty(value = "评审依据文件(线上)")
    @TableField("product_item_ids")
    private String productItemIds;
    @TableField("del_flag")
    private Integer delFlag;
@@ -59,6 +117,14 @@
    @TableField("update_time")
    private LocalDateTime updateTime;
    @ApiModelProperty(value = "1待发送  2已发送")
    @TableField("status")
    private Integer status;
    @TableField(exist = false)
    private List<ProductItem> productItems;
    @TableField(exist = false)
    private List<ItemReviewUser> reviewUsers;
}
multi-system/src/main/java/com/gkhy/exam/system/domain/ItemReviewUser.java
对比新文件
@@ -0,0 +1,75 @@
package com.gkhy.exam.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@TableName("item_review_user")
@ApiModel(value = "ItemReviewUser", description = "项目评审人员")
public class ItemReviewUser implements Serializable {
    @ApiModelProperty("主键")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty(value = "主表id")
    @TableField("review_id")
    private Integer reviewId;
    @ApiModelProperty(value = "评审组")
    @TableField("review_type")
    private String reviewType;
    @ApiModelProperty(value = "人员id")
    @TableField("review_user_id")
    private Integer reviewUserId;
    @TableField(exist = false)
    private String reviewUserName;
    @ApiModelProperty(value = "人员部门")
    @TableField("user_dept")
    private String userDept;
    @ApiModelProperty(value = "人员职务")
    @TableField("user_duty")
    private String userDuty;
    @ApiModelProperty(value = "评审意见(线上) 1同意  2不同意")
    @TableField("review_opinion")
    private Integer reviewOpinion;
    @ApiModelProperty(value = "评审时间")
    @TableField("review_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime reviewTime;
    @ApiModelProperty(value = "人员签名")
    @TableField("sign")
    private String sign;
    @TableField("del_flag")
    private Integer delFlag;
    @ApiModelProperty(value = "状态1待发送  2待审批  3已审批")
    @TableField("status")
    private Integer status;
}
multi-system/src/main/java/com/gkhy/exam/system/domain/vo/ItemReviewUserVo.java
对比新文件
@@ -0,0 +1,16 @@
package com.gkhy.exam.system.domain.vo;
import com.gkhy.exam.system.domain.ItemReviewUser;
import com.gkhy.exam.system.domain.ProductItem;
import lombok.Data;
import java.util.List;
@Data
public class ItemReviewUserVo extends ItemReviewUser {
    private String itemName;
    private String stage;
    private String reviewContent;
    private String productItemIds;
    private List<ProductItem> productItems;
}
multi-system/src/main/java/com/gkhy/exam/system/mapper/ItemReviewMapper.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gkhy.exam.system.domain.ItemReview;
import org.apache.ibatis.annotations.Param;
import org.mapstruct.Mapper;
import java.util.List;
@@ -9,4 +10,5 @@
@Mapper
public interface ItemReviewMapper extends BaseMapper<ItemReview> {
    List<ItemReview> selectReviewList(ItemReview itemReview);
}
multi-system/src/main/java/com/gkhy/exam/system/mapper/ItemReviewUserMapper.java
对比新文件
@@ -0,0 +1,22 @@
package com.gkhy.exam.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gkhy.exam.system.domain.ItemReviewUser;
import com.gkhy.exam.system.domain.vo.ItemReviewUserVo;
import org.apache.ibatis.annotations.Param;
import org.mapstruct.Mapper;
import java.util.List;
@Mapper
public interface ItemReviewUserMapper extends BaseMapper<ItemReviewUser> {
    List<ItemReviewUser> selectByReviewId(@Param("id") Integer id);
    void insertBatchs(@Param("reviewUsers") List<ItemReviewUser> reviewUsers);
    void deleteByReviewId(@Param("id") Integer id);
    int updateByReviewId(@Param("itemReviewId") Integer itemReviewId);
    List<ItemReviewUserVo> selectByUserId(@Param("userId") Integer userId);
}
multi-system/src/main/java/com/gkhy/exam/system/service/ItemReviewService.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.ItemReview;
import com.gkhy.exam.system.domain.ItemReviewUser;
public interface ItemReviewService extends IService<ItemReview> {
    CommonPage selectItemList(ItemReview itemReview);
@@ -13,4 +14,10 @@
    CommonResult updateItem(ItemReview item);
    CommonResult deletedItem(Integer itemReviewId);
    CommonResult sendItem(Integer itemReviewId);
    CommonResult approvalList(Integer userId);
    CommonResult approval(ItemReviewUser itemReviewUser);
}
multi-system/src/main/java/com/gkhy/exam/system/service/impl/ItemReviewServiceImpl.java
@@ -5,20 +5,37 @@
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.utils.PageUtils;
import com.gkhy.exam.common.utils.SecurityUtils;
import com.gkhy.exam.common.utils.StringUtils;
import com.gkhy.exam.system.domain.ItemReview;
import com.gkhy.exam.system.domain.ItemReviewUser;
import com.gkhy.exam.system.domain.ProductItem;
import com.gkhy.exam.system.domain.vo.ItemReviewUserVo;
import com.gkhy.exam.system.mapper.ItemReviewMapper;
import com.gkhy.exam.system.mapper.ItemReviewUserMapper;
import com.gkhy.exam.system.mapper.ProductItemMapper;
import com.gkhy.exam.system.service.ItemReviewService;
import org.checkerframework.checker.units.qual.A;
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.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class ItemReviewServiceImpl extends ServiceImpl<ItemReviewMapper, ItemReview> implements ItemReviewService {
    @Autowired
    private ItemReviewMapper itemReviewMapper;
    @Autowired
    private ItemReviewUserMapper itemReviewUserMapper;
    @Autowired
    private ProductItemMapper productItemMapper;
    @Override
    public CommonPage selectItemList(ItemReview itemReview) {
@@ -29,9 +46,19 @@
        }
        PageUtils.startPage();
        List<ItemReview> itemReviews = itemReviewMapper.selectReviewList(itemReview);
        for (ItemReview review : itemReviews) {
            if (review.getType()==1){
                List<ItemReviewUser> itemReviewUsers = itemReviewUserMapper.selectByReviewId(review.getId());
                review.setReviewUsers(itemReviewUsers);
            }
            List<String> list = Arrays.asList(review.getProductItemIds().split(","));
            List<ProductItem> productItems = productItemMapper.selectBatchIds(list);
            review.setProductItems(productItems);
        }
        return CommonPage.restPage(itemReviews);
    }
    @Transactional
    @Override
    public CommonResult insertItem(ItemReview item) {
        item.setCreateBy(SecurityUtils.getUsername());
@@ -39,7 +66,17 @@
        if (item.getCompanyId()==null){
            item.setCompanyId(SecurityUtils.getCompanyId());
        }
        if (item.getType()==1){
            item.setStatus(1);
        }
        int insert = itemReviewMapper.insert(item);
        if (insert>0 && item.getType()==1){
            List<ItemReviewUser> reviewUsers = item.getReviewUsers();
            for (ItemReviewUser reviewUser : reviewUsers) {
                reviewUser.setReviewId(item.getId());
            }
            itemReviewUserMapper.insertBatchs(reviewUsers);
        }
        return CommonResult.success();
    }
@@ -48,11 +85,25 @@
        item.setUpdateBy(SecurityUtils.getUsername());
        item.setUpdateTime(LocalDateTime.now());
        int update = itemReviewMapper.updateById(item);
        if (update>0 && item.getType()==1){
            itemReviewUserMapper.deleteByReviewId(item.getId());
            List<ItemReviewUser> reviewUsers = item.getReviewUsers();
            for (ItemReviewUser reviewUser : reviewUsers) {
                reviewUser.setReviewId(item.getId());
            }
            itemReviewUserMapper.insertBatchs(reviewUsers);
        }
        return CommonResult.success();
    }
    @Override
    public CommonResult deletedItem(Integer itemReviewId) {
        ItemReview itemReview1 = itemReviewMapper.selectById(itemReviewId);
        if (itemReview1.getStatus()==2){
            if (!SecurityUtils.adminUser()){
                return CommonResult.failed("已发送,非管理员不可删除");
            }
        }
        ItemReview itemReview = new ItemReview();
        itemReview.setId(itemReviewId);
        itemReview.setUpdateTime(LocalDateTime.now());
@@ -61,4 +112,35 @@
        itemReviewMapper.updateById(itemReview);
        return CommonResult.success();
    }
    @Override
    public CommonResult sendItem(Integer itemReviewId) {
        ItemReview itemReview = new ItemReview();
        itemReview.setStatus(2);
        itemReview.setId(itemReviewId);
        int update1 = itemReviewMapper.updateById(itemReview);
        int update = itemReviewUserMapper.updateByReviewId(itemReviewId);
        return CommonResult.success();
    }
    @Override
    public CommonResult approvalList(Integer userId) {
        List<ItemReviewUserVo> itemReviewUserVos = itemReviewUserMapper.selectByUserId(userId);
        for (ItemReviewUserVo itemReviewUserVo : itemReviewUserVos) {
            List<String> list = Arrays.asList(itemReviewUserVo.getProductItemIds().split(","));
            List<ProductItem> productItems = productItemMapper.selectBatchIds(list);
            itemReviewUserVo.setProductItems(productItems);
        }
        return CommonResult.success(itemReviewUserVos);
    }
    @Override
    public CommonResult approval(ItemReviewUser itemReviewUser) {
        if (!StringUtils.isEmpty(itemReviewUser.getSign())){
            itemReviewUser.setStatus(3);
            itemReviewUser.setReviewTime(LocalDateTime.now());
        }
        int update = itemReviewUserMapper.updateById(itemReviewUser);
        return CommonResult.success();
    }
}
multi-system/src/main/resources/mapper/system/ItemReviewMapper.xml
@@ -8,17 +8,24 @@
            ir.`company_id`,
            ir.`item_id`,
            i.`item_name`,
            ir.`num`,
            ir.`type`,
            ir.`stage`,
            ir.`file_name`,
            ir.`file_path`,
            ir.`project_code`,
            ir.`project_num`,
            ir.`review_level`,
            ir.`review_content`,
            ir.`product_item_ids`,
            ir.`del_flag`,
            ir.`create_by`,
            ir.`create_time`,
            ir.`update_by`,
            ir.`update_time`
            ir.`update_time`,
            ir.`status`
        FROM
            `item_review` ir
                LEFT JOIN item i ON ir.item_id = i.id
            LEFT JOIN item i ON ir.item_id = i.id
        WHERE
            ir.del_flag = 0
        <if test="companyId!=null">
@@ -27,6 +34,9 @@
        <if test="itemName!=null">
            and i.item_name like concat('%',#{itemName},'%')
        </if>
        <if test="type!=null">
            and ir.type = #{type}
        </if>
        ORDER BY
            ir.create_time DESC
    </select>
multi-system/src/main/resources/mapper/system/ItemReviewUserMapper.xml
对比新文件
@@ -0,0 +1,68 @@
<?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.ItemReviewUserMapper">
    <insert id="insertBatchs">
        INSERT INTO `item_review_user` ( `review_id`, `review_type`, `review_user_id`, `user_dept`, `user_duty` )
        VALUES
            <foreach collection="reviewUsers" separator="," item="item">
                (
                #{item.reviewId},
                #{item.reviewType},
                #{item.reviewUserId},
                #{item.userDept},
                #{item.userDuty}
                )
            </foreach>
    </insert>
    <update id="updateByReviewId">
        update item_review_user set status = 2 where review_id = #{itemReviewId} and status = 1
    </update>
    <delete id="deleteByReviewId">
        delete from item_review_user where review_id = #{id}
    </delete>
    <select id="selectByReviewId" resultType="com.gkhy.exam.system.domain.ItemReviewUser">
        SELECT
            iru.`id`,
            iru.`review_id`,
            iru.`review_type`,
            iru.`review_user_id`,
            es.`name` as review_user_name,
            iru.`user_dept`,
            iru.`user_duty`,
            iru.`sign`,
            iru.`del_flag`,
            iru.`status`
        FROM
            `item_review_user` iru
        left join ex_student es on iru.review_user_id = es.id
        WHERE
            iru.del_flag = 0
            AND iru.review_id =#{id}
    </select>
    <select id="selectByUserId" resultType="com.gkhy.exam.system.domain.vo.ItemReviewUserVo">
        SELECT
            iru.`id`,
            iru.`review_id`,
            iru.`review_type`,
            iru.`review_user_id`,
            iru.`user_dept`,
            iru.`user_duty`,
            iru.`sign`,
            iru.`del_flag`,
            iru.`status`,
            ir.`stage`,
            ir.`review_content`,
            ir.`product_item_ids`,
            i.item_name
        FROM
            `item_review_user` iru
                LEFT JOIN item_review ir on iru.review_id = ir.id
                LEFT JOIN item i on ir.item_id = i.id
        WHERE
            iru.del_flag = 0 and ir.del_flag = 0
          AND iru.review_user_id = #{userId}
          AND iru.STATUS = 2 and ir.status = 2
    </select>
</mapper>