Commit e3ec743311d672ebfdcaabc7a47415cc5f3a9563

Authored by 房远帅
1 parent db7ac74a

报价:基础表单问题修改

@@ -1630,10 +1630,10 @@ CREATE TABLE `base_data_breed_relationship` @@ -1630,10 +1630,10 @@ CREATE TABLE `base_data_breed_relationship`
1630 ( 1630 (
1631 `id` varchar(32) NOT NULL COMMENT 'ID', 1631 `id` varchar(32) NOT NULL COMMENT 'ID',
1632 `product_name` varchar(200) NOT NULL COMMENT '品名', 1632 `product_name` varchar(200) NOT NULL COMMENT '品名',
1633 - `code` varchar(200) NOT NULL COMMENT '代号',  
1634 - `type` varchar(200) NOT NULL COMMENT '类型',  
1635 - `attrition_rate` decimal(18, 10) NOT NULL COMMENT '损耗率',  
1636 - `miscellaneous_tax_rate` decimal(18, 10) NOT NULL COMMENT '杂率', 1633 + `code` varchar(200) DEFAULT NULL COMMENT '代号',
  1634 + `type` varchar(200) DEFAULT NULL COMMENT '类型',
  1635 + `attrition_rate` decimal(18, 10) DEFAULT NULL COMMENT '损耗率',
  1636 + `miscellaneous_tax_rate` decimal(18, 10) DEFAULT NULL COMMENT '杂率',
1637 `create_by_id` varchar(32) DEFAULT NULL COMMENT '创建人ID', 1637 `create_by_id` varchar(32) DEFAULT NULL COMMENT '创建人ID',
1638 `create_by` varchar(64) DEFAULT NULL COMMENT '创建人', 1638 `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
1639 `update_by_id` varchar(32) DEFAULT NULL COMMENT '更新人ID', 1639 `update_by_id` varchar(32) DEFAULT NULL COMMENT '更新人ID',
@@ -93,6 +93,18 @@ public class QueryBreedRelationshipBo extends BaseBo<BreedRelationship> { @@ -93,6 +93,18 @@ public class QueryBreedRelationshipBo extends BaseBo<BreedRelationship> {
93 @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) 93 @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN)
94 private LocalDateTime updateTime; 94 private LocalDateTime updateTime;
95 95
  96 + /**
  97 + * 是否可编辑
  98 + */
  99 + @ApiModelProperty("是否可编辑")
  100 + private Boolean canEdit = true;
  101 +
  102 + /**
  103 + * 是否可删除
  104 + */
  105 + @ApiModelProperty("是否可删除")
  106 + private Boolean canDelete = true;
  107 +
96 public QueryBreedRelationshipBo() { 108 public QueryBreedRelationshipBo() {
97 109
98 } 110 }
@@ -76,6 +76,18 @@ public class QueryPriceBo extends BaseBo<Price> { @@ -76,6 +76,18 @@ public class QueryPriceBo extends BaseBo<Price> {
76 @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) 76 @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN)
77 private LocalDateTime updateTime; 77 private LocalDateTime updateTime;
78 78
  79 + /**
  80 + * 是否可编辑
  81 + */
  82 + @ApiModelProperty("是否可编辑")
  83 + private Boolean canEdit = true;
  84 +
  85 + /**
  86 + * 是否可删除
  87 + */
  88 + @ApiModelProperty("是否可删除")
  89 + private Boolean canDelete = true;
  90 +
79 91
80 public QueryPriceBo() { 92 public QueryPriceBo() {
81 93
1 package com.lframework.xingyun.basedata.controller; 1 package com.lframework.xingyun.basedata.controller;
2 2
  3 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
3 import com.lframework.starter.web.core.annotations.security.HasPermission; 4 import com.lframework.starter.web.core.annotations.security.HasPermission;
4 import com.lframework.starter.web.core.controller.DefaultBaseController; 5 import com.lframework.starter.web.core.controller.DefaultBaseController;
5 import com.lframework.starter.web.core.utils.PageResultUtil; 6 import com.lframework.starter.web.core.utils.PageResultUtil;
@@ -8,7 +9,9 @@ import com.lframework.starter.web.core.components.resp.InvokeResult; @@ -8,7 +9,9 @@ import com.lframework.starter.web.core.components.resp.InvokeResult;
8 import javax.validation.constraints.NotBlank; 9 import javax.validation.constraints.NotBlank;
9 import com.lframework.xingyun.basedata.bo.breed.QueryBreedRelationshipBo; 10 import com.lframework.xingyun.basedata.bo.breed.QueryBreedRelationshipBo;
10 import com.lframework.xingyun.basedata.entity.BreedRelationship; 11 import com.lframework.xingyun.basedata.entity.BreedRelationship;
  12 +import com.lframework.xingyun.basedata.entity.PriceSubTable;
11 import com.lframework.xingyun.basedata.service.breed.BreedRelationshipService; 13 import com.lframework.xingyun.basedata.service.breed.BreedRelationshipService;
  14 +import com.lframework.xingyun.basedata.service.price.PriceSubTableService;
12 import com.lframework.xingyun.basedata.vo.breed.CreateBreedRelationshipVo; 15 import com.lframework.xingyun.basedata.vo.breed.CreateBreedRelationshipVo;
13 import com.lframework.xingyun.basedata.vo.breed.QueryBreedRelationshipVo; 16 import com.lframework.xingyun.basedata.vo.breed.QueryBreedRelationshipVo;
14 import com.lframework.xingyun.basedata.vo.breed.UpdateBreedRelationshipVo; 17 import com.lframework.xingyun.basedata.vo.breed.UpdateBreedRelationshipVo;
@@ -23,7 +26,10 @@ import org.springframework.beans.factory.annotation.Autowired; @@ -23,7 +26,10 @@ import org.springframework.beans.factory.annotation.Autowired;
23 import org.springframework.validation.annotation.Validated; 26 import org.springframework.validation.annotation.Validated;
24 import org.springframework.web.bind.annotation.*; 27 import org.springframework.web.bind.annotation.*;
25 import javax.validation.Valid; 28 import javax.validation.Valid;
  29 +import java.util.Collections;
  30 +import java.util.HashSet;
26 import java.util.List; 31 import java.util.List;
  32 +import java.util.Set;
27 import java.util.stream.Collectors; 33 import java.util.stream.Collectors;
28 34
29 /** 35 /**
@@ -39,6 +45,9 @@ public class BreedRelationshipController extends DefaultBaseController { @@ -39,6 +45,9 @@ public class BreedRelationshipController extends DefaultBaseController {
39 @Autowired 45 @Autowired
40 private BreedRelationshipService breedRelationshipService; 46 private BreedRelationshipService breedRelationshipService;
41 47
  48 + @Autowired
  49 + private PriceSubTableService priceSubTableService;
  50 +
42 /** 51 /**
43 * 查询列表 52 * 查询列表
44 */ 53 */
@@ -54,6 +63,7 @@ public class BreedRelationshipController extends DefaultBaseController { @@ -54,6 +63,7 @@ public class BreedRelationshipController extends DefaultBaseController {
54 63
55 if (!CollectionUtil.isEmpty(datas)) { 64 if (!CollectionUtil.isEmpty(datas)) {
56 results = datas.stream().map(QueryBreedRelationshipBo::new).collect(Collectors.toList()); 65 results = datas.stream().map(QueryBreedRelationshipBo::new).collect(Collectors.toList());
  66 + fillCanOperate(results);
57 } 67 }
58 68
59 return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); 69 return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results));
@@ -74,6 +84,7 @@ public class BreedRelationshipController extends DefaultBaseController { @@ -74,6 +84,7 @@ public class BreedRelationshipController extends DefaultBaseController {
74 } 84 }
75 85
76 QueryBreedRelationshipBo result = new QueryBreedRelationshipBo(data); 86 QueryBreedRelationshipBo result = new QueryBreedRelationshipBo(data);
  87 + fillCanOperate(Collections.singletonList(result));
77 88
78 return InvokeResultBuilder.success(result); 89 return InvokeResultBuilder.success(result);
79 } 90 }
@@ -117,4 +128,24 @@ public class BreedRelationshipController extends DefaultBaseController { @@ -117,4 +128,24 @@ public class BreedRelationshipController extends DefaultBaseController {
117 128
118 return InvokeResultBuilder.success(); 129 return InvokeResultBuilder.success();
119 } 130 }
  131 +
  132 + private void fillCanOperate(List<QueryBreedRelationshipBo> results) {
  133 + if (CollectionUtil.isEmpty(results)) {
  134 + return;
  135 + }
  136 +
  137 + List<String> ids = results.stream().map(QueryBreedRelationshipBo::getId).collect(Collectors.toList());
  138 + Set<String> referencedIds = priceSubTableService.list(Wrappers.lambdaQuery(PriceSubTable.class)
  139 + .select(PriceSubTable::getProductId)
  140 + .in(PriceSubTable::getProductId, ids))
  141 + .stream()
  142 + .map(PriceSubTable::getProductId)
  143 + .collect(Collectors.toCollection(HashSet::new));
  144 +
  145 + results.forEach(item -> {
  146 + boolean referenced = referencedIds.contains(item.getId());
  147 + item.setCanEdit(!referenced);
  148 + item.setCanDelete(!referenced);
  149 + });
  150 + }
120 } 151 }
@@ -29,7 +29,9 @@ import org.springframework.transaction.annotation.Transactional; @@ -29,7 +29,9 @@ import org.springframework.transaction.annotation.Transactional;
29 import javax.annotation.Resource; 29 import javax.annotation.Resource;
30 import java.io.Serializable; 30 import java.io.Serializable;
31 import java.util.ArrayList; 31 import java.util.ArrayList;
  32 +import java.util.HashSet;
32 import java.util.List; 33 import java.util.List;
  34 +import java.util.Set;
33 import java.util.stream.Collectors; 35 import java.util.stream.Collectors;
34 36
35 @Service 37 @Service
@@ -72,6 +74,7 @@ public class PriceServiceImpl extends BaseMpServiceImpl<PriceMapper, Price> impl @@ -72,6 +74,7 @@ public class PriceServiceImpl extends BaseMpServiceImpl<PriceMapper, Price> impl
72 @Override 74 @Override
73 public String create(CreatePriceVo vo) { 75 public String create(CreatePriceVo vo) {
74 checkCodeUnique(vo.getCode(), null); 76 checkCodeUnique(vo.getCode(), null);
  77 + checkPriceSubTableDuplicateCreate(vo.getPriceSubTableList());
75 78
76 Price data = new Price(); 79 Price data = new Price();
77 data.setId(IdUtil.getId()); 80 data.setId(IdUtil.getId());
@@ -104,6 +107,7 @@ public class PriceServiceImpl extends BaseMpServiceImpl<PriceMapper, Price> impl @@ -104,6 +107,7 @@ public class PriceServiceImpl extends BaseMpServiceImpl<PriceMapper, Price> impl
104 throw new DefaultClientException("价格表不存在!"); 107 throw new DefaultClientException("价格表不存在!");
105 } 108 }
106 checkCodeUnique(vo.getCode(), vo.getId()); 109 checkCodeUnique(vo.getCode(), vo.getId());
  110 + checkPriceSubTableDuplicateUpdate(vo.getPriceSubTableList());
107 111
108 LambdaUpdateWrapper<Price> updateWrapper = Wrappers.lambdaUpdate(Price.class) 112 LambdaUpdateWrapper<Price> updateWrapper = Wrappers.lambdaUpdate(Price.class)
109 .set(Price::getCode, vo.getCode()) 113 .set(Price::getCode, vo.getCode())
@@ -193,6 +197,32 @@ public class PriceServiceImpl extends BaseMpServiceImpl<PriceMapper, Price> impl @@ -193,6 +197,32 @@ public class PriceServiceImpl extends BaseMpServiceImpl<PriceMapper, Price> impl
193 } 197 }
194 } 198 }
195 199
  200 + private void checkPriceSubTableDuplicateCreate(List<CreatePriceSubTableVo> priceSubTableList) {
  201 + if (CollectionUtils.isEmpty(priceSubTableList)) {
  202 + return;
  203 + }
  204 +
  205 + Set<String> productIds = new HashSet<>(priceSubTableList.size());
  206 + for (CreatePriceSubTableVo priceSubTableVo : priceSubTableList) {
  207 + if (!productIds.add(priceSubTableVo.getProductId())) {
  208 + throw new DefaultClientException("不允许重复选择同一个品种!");
  209 + }
  210 + }
  211 + }
  212 +
  213 + private void checkPriceSubTableDuplicateUpdate(List<UpdatePriceSubTableVo> priceSubTableList) {
  214 + if (CollectionUtils.isEmpty(priceSubTableList)) {
  215 + return;
  216 + }
  217 +
  218 + Set<String> productIds = new HashSet<>(priceSubTableList.size());
  219 + for (UpdatePriceSubTableVo priceSubTableVo : priceSubTableList) {
  220 + if (!productIds.add(priceSubTableVo.getProductId())) {
  221 + throw new DefaultClientException("不允许重复选择同一个品种!");
  222 + }
  223 + }
  224 + }
  225 +
196 @Override 226 @Override
197 public void cleanCacheByKey(Serializable key) { 227 public void cleanCacheByKey(Serializable key) {
198 228
@@ -27,24 +27,21 @@ public class CreateBreedRelationshipVo implements BaseVo, Serializable { @@ -27,24 +27,21 @@ public class CreateBreedRelationshipVo implements BaseVo, Serializable {
27 /** 27 /**
28 * 代号 28 * 代号
29 */ 29 */
30 - @ApiModelProperty(value = "代号", required = true)  
31 - @NotBlank(message = "请输入代号!") 30 + @ApiModelProperty("代号")
32 @Length(message = "代号最多允许200个字符!") 31 @Length(message = "代号最多允许200个字符!")
33 private String code; 32 private String code;
34 33
35 /** 34 /**
36 * 类型 35 * 类型
37 */ 36 */
38 - @ApiModelProperty(value = "类型", required = true)  
39 - @NotBlank(message = "请输入类型!") 37 + @ApiModelProperty("类型")
40 @Length(message = "类型最多允许200个字符!") 38 @Length(message = "类型最多允许200个字符!")
41 private String type; 39 private String type;
42 40
43 /** 41 /**
44 * 损耗率 42 * 损耗率
45 */ 43 */
46 - @ApiModelProperty(value = "损耗率", required = true)  
47 - @NotNull(message = "请输入损耗率!") 44 + @ApiModelProperty("损耗率")
48 @TypeMismatch(message = "损耗率格式有误!") 45 @TypeMismatch(message = "损耗率格式有误!")
49 @IsNumberPrecision(message = "损耗率最多允许10位小数!", value = 10) 46 @IsNumberPrecision(message = "损耗率最多允许10位小数!", value = 10)
50 private BigDecimal attritionRate; 47 private BigDecimal attritionRate;
@@ -52,8 +49,7 @@ public class CreateBreedRelationshipVo implements BaseVo, Serializable { @@ -52,8 +49,7 @@ public class CreateBreedRelationshipVo implements BaseVo, Serializable {
52 /** 49 /**
53 * 杂率 50 * 杂率
54 */ 51 */
55 - @ApiModelProperty(value = "杂率", required = true)  
56 - @NotNull(message = "请输入杂率!") 52 + @ApiModelProperty("杂率")
57 @TypeMismatch(message = "杂率格式有误!") 53 @TypeMismatch(message = "杂率格式有误!")
58 @IsNumberPrecision(message = "杂率最多允许10位小数!", value = 10) 54 @IsNumberPrecision(message = "杂率最多允许10位小数!", value = 10)
59 private BigDecimal miscellaneousTaxRate; 55 private BigDecimal miscellaneousTaxRate;
@@ -34,34 +34,30 @@ public class UpdateBreedRelationshipVo implements BaseVo, Serializable { @@ -34,34 +34,30 @@ public class UpdateBreedRelationshipVo implements BaseVo, Serializable {
34 /** 34 /**
35 * 代号 35 * 代号
36 */ 36 */
37 - @ApiModelProperty(value = "代号", required = true)  
38 - @NotBlank(message = "请输入代号!") 37 + @ApiModelProperty("代号")
39 @Length(message = "代号最多允许200个字符!") 38 @Length(message = "代号最多允许200个字符!")
40 private String code; 39 private String code;
41 40
42 /** 41 /**
43 * 类型 42 * 类型
44 */ 43 */
45 - @ApiModelProperty(value = "类型", required = true)  
46 - @NotBlank(message = "请输入类型!") 44 + @ApiModelProperty("类型")
47 @Length(message = "类型最多允许200个字符!") 45 @Length(message = "类型最多允许200个字符!")
48 private String type; 46 private String type;
49 47
50 /** 48 /**
51 * 损耗率 49 * 损耗率
52 */ 50 */
53 - @ApiModelProperty(value = "损耗率", required = true) 51 + @ApiModelProperty("损耗率")
54 @TypeMismatch(message = "损耗率格式有误!") 52 @TypeMismatch(message = "损耗率格式有误!")
55 - @NotNull(message = "请输入损耗率!")  
56 @IsNumberPrecision(message = "损耗率最多允许10位小数!", value = 10) 53 @IsNumberPrecision(message = "损耗率最多允许10位小数!", value = 10)
57 private BigDecimal attritionRate; 54 private BigDecimal attritionRate;
58 55
59 /** 56 /**
60 * 杂率 57 * 杂率
61 */ 58 */
62 - @ApiModelProperty(value = "杂率", required = true) 59 + @ApiModelProperty("杂率")
63 @TypeMismatch(message = "杂率格式有误!") 60 @TypeMismatch(message = "杂率格式有误!")
64 - @NotNull(message = "请输入杂率!")  
65 @IsNumberPrecision(message = "杂率最多允许10位小数!", value = 10) 61 @IsNumberPrecision(message = "杂率最多允许10位小数!", value = 10)
66 private BigDecimal miscellaneousTaxRate; 62 private BigDecimal miscellaneousTaxRate;
67 63
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 <mapper namespace="com.lframework.xingyun.basedata.mappers.PriceMapper"> 3 <mapper namespace="com.lframework.xingyun.basedata.mappers.PriceMapper">
4 4
5 - <resultMap id="PriceSubTable" type="com.lframework.xingyun.basedata.entity.Price"> 5 + <resultMap id="Price" type="com.lframework.xingyun.basedata.entity.Price">
6 <id column="id" property="id"/> 6 <id column="id" property="id"/>
7 <result column="code" property="code"/> 7 <result column="code" property="code"/>
8 <result column="create_by_id" property="createById"/> 8 <result column="create_by_id" property="createById"/>
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 <result column="update_time" property="updateTime"/> 13 <result column="update_time" property="updateTime"/>
14 </resultMap> 14 </resultMap>
15 15
16 - <sql id="PriceSubTable_sql"> 16 + <sql id="Price_sql">
17 SELECT 17 SELECT
18 tb.id, 18 tb.id,
19 tb.code, 19 tb.code,
@@ -23,14 +23,14 @@ @@ -23,14 +23,14 @@
23 tb.update_by, 23 tb.update_by,
24 tb.create_time, 24 tb.create_time,
25 tb.update_time 25 tb.update_time
26 - FROM base_data_price_sub_table AS tb 26 + FROM base_data_price AS tb
27 </sql> 27 </sql>
28 28
29 - <select id="query" resultMap="PriceSubTable">  
30 - <include refid="PriceSubTable_sql"/> 29 + <select id="query" resultMap="Price">
  30 + <include refid="Price_sql"/>
31 <where> 31 <where>
32 <if test="vo.code != null and vo.code != ''"> 32 <if test="vo.code != null and vo.code != ''">
33 - AND tb.code =LIKE CONCAT('%', #{vo.code},'%') 33 + AND tb.code LIKE CONCAT('%', #{vo.code},'%')
34 </if> 34 </if>
35 <if test="vo.createBy != null and vo.createBy != ''"> 35 <if test="vo.createBy != null and vo.createBy != ''">
36 AND tb.create_by LIKE CONCAT('%', #{vo.createBy},'%') 36 AND tb.create_by LIKE CONCAT('%', #{vo.createBy},'%')