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>