Commit e78c57139f3804b1c39a372c013d0f86433c9cea

Authored by 胡翰林
2 parents 9f6383ed acba59cf

Merge remote-tracking branch 'origin/master_0929' into master_0929

Showing 25 changed files with 536 additions and 20 deletions
@@ -154,11 +154,13 @@ create table if not exists `tbl_contract_distributor_line` @@ -154,11 +154,13 @@ create table if not exists `tbl_contract_distributor_line`
154 `length_tol_neg` DECIMAL(10, 4) COMMENT '长度公差负', 154 `length_tol_neg` DECIMAL(10, 4) COMMENT '长度公差负',
155 `status` VARCHAR(50) COMMENT '状态', 155 `status` VARCHAR(50) COMMENT '状态',
156 `quantity` DECIMAL(15, 4) COMMENT '数量', 156 `quantity` DECIMAL(15, 4) COMMENT '数量',
  157 + `processing_fee` DECIMAL(15, 4) COMMENT '加工费',
157 `unit_price` DECIMAL(15, 4) COMMENT '单价', 158 `unit_price` DECIMAL(15, 4) COMMENT '单价',
158 `amount_excluding_tax` DECIMAL(15, 2) COMMENT '不含税金额', 159 `amount_excluding_tax` DECIMAL(15, 2) COMMENT '不含税金额',
159 `total_amount` DECIMAL(15, 2) COMMENT '总金额', 160 `total_amount` DECIMAL(15, 2) COMMENT '总金额',
160 `delivery_date` DATE COMMENT '发货日期', 161 `delivery_date` DATE COMMENT '发货日期',
161 `show_order` INT DEFAULT 0 COMMENT '排序', 162 `show_order` INT DEFAULT 0 COMMENT '排序',
  163 + `item_id` varchar(50) COMMENT '前端用ID',
162 `create_by_id` varchar(32) not null comment '创建人ID', 164 `create_by_id` varchar(32) not null comment '创建人ID',
163 `create_by` varchar(20) not null comment '创建人', 165 `create_by` varchar(20) not null comment '创建人',
164 `update_by_id` varchar(32) not null comment '更新人ID', 166 `update_by_id` varchar(32) not null comment '更新人ID',
@@ -3,6 +3,8 @@ package com.lframework.xingyun.sc.bo.contract; @@ -3,6 +3,8 @@ package com.lframework.xingyun.sc.bo.contract;
3 import com.fasterxml.jackson.annotation.JsonFormat; 3 import com.fasterxml.jackson.annotation.JsonFormat;
4 import com.lframework.starter.common.constants.StringPool; 4 import com.lframework.starter.common.constants.StringPool;
5 import com.lframework.starter.web.core.bo.BaseBo; 5 import com.lframework.starter.web.core.bo.BaseBo;
  6 +import com.lframework.starter.web.core.components.validation.IsNumberPrecision;
  7 +import com.lframework.starter.web.core.components.validation.TypeMismatch;
6 import com.lframework.xingyun.sc.entity.ContractDistributorLine; 8 import com.lframework.xingyun.sc.entity.ContractDistributorLine;
7 import io.swagger.annotations.ApiModelProperty; 9 import io.swagger.annotations.ApiModelProperty;
8 import lombok.Data; 10 import lombok.Data;
@@ -79,6 +81,12 @@ public class GetContractDistributorLineBo extends BaseBo<ContractDistributorLine @@ -79,6 +81,12 @@ public class GetContractDistributorLineBo extends BaseBo<ContractDistributorLine
79 private BigDecimal quantity; 81 private BigDecimal quantity;
80 82
81 /** 83 /**
  84 + * 加工费
  85 + */
  86 + @ApiModelProperty(value = "加工费")
  87 + private BigDecimal processingFee;
  88 +
  89 + /**
82 * 单价 90 * 单价
83 */ 91 */
84 @ApiModelProperty("单价") 92 @ApiModelProperty("单价")
@@ -157,6 +165,12 @@ public class GetContractDistributorLineBo extends BaseBo<ContractDistributorLine @@ -157,6 +165,12 @@ public class GetContractDistributorLineBo extends BaseBo<ContractDistributorLine
157 @ApiModelProperty("长度公差负") 165 @ApiModelProperty("长度公差负")
158 private BigDecimal lengthTolNeg; 166 private BigDecimal lengthTolNeg;
159 167
  168 + /**
  169 + * 前端用ID
  170 + */
  171 + @ApiModelProperty(value = "前端用ID")
  172 + private String itemId;
  173 +
160 public GetContractDistributorLineBo() { 174 public GetContractDistributorLineBo() {
161 175
162 } 176 }
@@ -216,6 +216,12 @@ public class GetPurchaseOrderInfoBo extends BaseBo<PurchaseOrderInfo> { @@ -216,6 +216,12 @@ public class GetPurchaseOrderInfoBo extends BaseBo<PurchaseOrderInfo> {
216 @ApiModelProperty("订货单表物料行") 216 @ApiModelProperty("订货单表物料行")
217 private List<PurchaseOrderLine> purchaseOrderLineList; 217 private List<PurchaseOrderLine> purchaseOrderLineList;
218 218
  219 + /**
  220 + * 规格变更状态
  221 + */
  222 + @ApiModelProperty("规格变更状态")
  223 + private String specChangeStatus;
  224 +
219 225
220 226
221 public GetPurchaseOrderInfoBo() { 227 public GetPurchaseOrderInfoBo() {
@@ -454,7 +454,7 @@ public class ContractDistributorStandardController extends DefaultBaseController @@ -454,7 +454,7 @@ public class ContractDistributorStandardController extends DefaultBaseController
454 throw new DefaultClientException("参数错误!"); 454 throw new DefaultClientException("参数错误!");
455 } 455 }
456 456
457 - // todo ymk 锁规接口待完善 457 + contractDistributorStandardService.specificationLock(vo);
458 458
459 contractDistributorStandardService.cleanCacheByKey(vo.getId()); 459 contractDistributorStandardService.cleanCacheByKey(vo.getId());
460 460
@@ -3,6 +3,7 @@ package com.lframework.xingyun.sc.controller.order; @@ -3,6 +3,7 @@ package com.lframework.xingyun.sc.controller.order;
3 import com.lframework.starter.web.core.annotations.security.HasPermission; 3 import com.lframework.starter.web.core.annotations.security.HasPermission;
4 import com.lframework.starter.web.core.controller.DefaultBaseController; 4 import com.lframework.starter.web.core.controller.DefaultBaseController;
5 import com.lframework.xingyun.sc.bo.order.change.OrderSpecificationChangeRecordBo; 5 import com.lframework.xingyun.sc.bo.order.change.OrderSpecificationChangeRecordBo;
  6 +import com.lframework.xingyun.sc.enums.OrderSpecChangeStatus;
6 import com.lframework.xingyun.sc.vo.order.change.QueryOrderSpecificationChangeRecordVo; 7 import com.lframework.xingyun.sc.vo.order.change.QueryOrderSpecificationChangeRecordVo;
7 import com.lframework.xingyun.sc.service.order.OrderSpecificationChangeRecordService; 8 import com.lframework.xingyun.sc.service.order.OrderSpecificationChangeRecordService;
8 import com.lframework.xingyun.sc.vo.order.change.CreateOrderSpecificationChangeRecordVo; 9 import com.lframework.xingyun.sc.vo.order.change.CreateOrderSpecificationChangeRecordVo;
@@ -107,4 +108,16 @@ public class OrderSpecificationChangeRecordController extends DefaultBaseControl @@ -107,4 +108,16 @@ public class OrderSpecificationChangeRecordController extends DefaultBaseControl
107 orderSpecificationChangeRecordService.deleteById(id); 108 orderSpecificationChangeRecordService.deleteById(id);
108 return InvokeResultBuilder.success(); 109 return InvokeResultBuilder.success();
109 } 110 }
  111 +
  112 + /**
  113 + * 取消变更
  114 + */
  115 + @ApiOperation("取消变更")
  116 + @ApiImplicitParam(value = "id", name = "id", paramType = "query", required = true)
  117 + @HasPermission({"order:change:cancel"})
  118 + @GetMapping("/cancel")
  119 + public InvokeResult<Void> cancelById(@NotBlank(message = "id不能为空!") String id) {
  120 + orderSpecificationChangeRecordService.updateStatus(id, OrderSpecChangeStatus.CANCEL.getCode());
  121 + return InvokeResultBuilder.success();
  122 + }
110 } 123 }
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField; @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
5 import com.baomidou.mybatisplus.annotation.TableName; 5 import com.baomidou.mybatisplus.annotation.TableName;
6 import com.lframework.starter.web.core.dto.BaseDto; 6 import com.lframework.starter.web.core.dto.BaseDto;
7 import com.lframework.starter.web.core.entity.BaseEntity; 7 import com.lframework.starter.web.core.entity.BaseEntity;
  8 +import io.swagger.annotations.ApiModelProperty;
8 import lombok.Data; 9 import lombok.Data;
9 10
10 import java.math.BigDecimal; 11 import java.math.BigDecimal;
@@ -75,6 +76,11 @@ public class ContractDistributorLine extends BaseEntity implements BaseDto { @@ -75,6 +76,11 @@ public class ContractDistributorLine extends BaseEntity implements BaseDto {
75 private BigDecimal quantity; 76 private BigDecimal quantity;
76 77
77 /** 78 /**
  79 + * 加工费
  80 + */
  81 + private BigDecimal processingFee;
  82 +
  83 + /**
78 * 单价 84 * 单价
79 */ 85 */
80 private BigDecimal unitPrice; 86 private BigDecimal unitPrice;
@@ -100,6 +106,11 @@ public class ContractDistributorLine extends BaseEntity implements BaseDto { @@ -100,6 +106,11 @@ public class ContractDistributorLine extends BaseEntity implements BaseDto {
100 private Integer showOrder; 106 private Integer showOrder;
101 107
102 /** 108 /**
  109 + * 前端用ID
  110 + */
  111 + private String itemId;
  112 +
  113 + /**
103 * 创建人ID 114 * 创建人ID
104 */ 115 */
105 @TableField(fill = FieldFill.INSERT) 116 @TableField(fill = FieldFill.INSERT)
@@ -77,6 +77,11 @@ public class OrderSpecificationChangeRecord extends BaseEntity implements BaseDt @@ -77,6 +77,11 @@ public class OrderSpecificationChangeRecord extends BaseEntity implements BaseDt
77 private String status; 77 private String status;
78 78
79 /** 79 /**
  80 + * 变更原因及变更后的质量要求
  81 + */
  82 + private String description;
  83 +
  84 + /**
80 * 创建人ID 85 * 创建人ID
81 */ 86 */
82 @TableField(fill = FieldFill.INSERT) 87 @TableField(fill = FieldFill.INSERT)
@@ -175,6 +175,11 @@ public class PurchaseOrderInfo extends BaseEntity implements BaseDto { @@ -175,6 +175,11 @@ public class PurchaseOrderInfo extends BaseEntity implements BaseDto {
175 private String customerTier; 175 private String customerTier;
176 176
177 /** 177 /**
  178 + * 规格变更状态
  179 + */
  180 + private String specChangeStatus;
  181 +
  182 + /**
178 * 创建人ID 183 * 创建人ID
179 */ 184 */
180 @TableField(fill = FieldFill.INSERT) 185 @TableField(fill = FieldFill.INSERT)
  1 +package com.lframework.xingyun.sc.enums;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.EnumValue;
  4 +import com.lframework.starter.web.core.enums.BaseEnum;
  5 +
  6 +public enum OrderSpecChangeStatus implements BaseEnum<String> {
  7 +
  8 +
  9 + IN_PROGRESS("IN_PROGRESS", "变更中"),
  10 + COMPLETED("COMPLETED", "已完成"),
  11 + CANCEL("CANCEL", "已取消"),
  12 + ;
  13 +
  14 +
  15 + @EnumValue
  16 + private final String code;
  17 +
  18 + private final String desc;
  19 +
  20 + OrderSpecChangeStatus(String code, String desc) {
  21 + this.code = code;
  22 + this.desc = desc;
  23 + }
  24 +
  25 + @Override
  26 + public String getCode() {
  27 + return this.code;
  28 + }
  29 +
  30 + @Override
  31 + public String getDesc() {
  32 + return this.desc;
  33 + }
  34 +
  35 +
  36 + /**
  37 + * 通过code获取desc
  38 + *
  39 + * @param code 状态码
  40 + * @return 描述信息
  41 + */
  42 + public static String getDescByCode(String code) {
  43 + for (OrderSpecChangeStatus status : OrderSpecChangeStatus.values()) {
  44 + if (status.getCode().equals(code)) {
  45 + return status.getDesc();
  46 + }
  47 + }
  48 + return null;
  49 + }
  50 +}
@@ -73,6 +73,7 @@ public class ContractDistributorLineServiceImpl extends BaseMpServiceImpl<Contra @@ -73,6 +73,7 @@ public class ContractDistributorLineServiceImpl extends BaseMpServiceImpl<Contra
73 data.setLength(vo.getLength()); 73 data.setLength(vo.getLength());
74 data.setStatus(vo.getStatus()); 74 data.setStatus(vo.getStatus());
75 data.setQuantity(vo.getQuantity()); 75 data.setQuantity(vo.getQuantity());
  76 + data.setProcessingFee(vo.getProcessingFee());
76 data.setUnitPrice(vo.getUnitPrice()); 77 data.setUnitPrice(vo.getUnitPrice());
77 data.setAmountExcludingTax(vo.getAmountExcludingTax()); 78 data.setAmountExcludingTax(vo.getAmountExcludingTax());
78 data.setTotalAmount(vo.getTotalAmount()); 79 data.setTotalAmount(vo.getTotalAmount());
@@ -85,6 +86,7 @@ public class ContractDistributorLineServiceImpl extends BaseMpServiceImpl<Contra @@ -85,6 +86,7 @@ public class ContractDistributorLineServiceImpl extends BaseMpServiceImpl<Contra
85 data.setWidthTolNeg(vo.getWidthTolNeg()); 86 data.setWidthTolNeg(vo.getWidthTolNeg());
86 data.setLengthTolPos(vo.getLengthTolPos()); 87 data.setLengthTolPos(vo.getLengthTolPos());
87 data.setLengthTolNeg(vo.getLengthTolNeg()); 88 data.setLengthTolNeg(vo.getLengthTolNeg());
  89 + data.setItemId(vo.getItemId());
88 90
89 getBaseMapper().insert(data); 91 getBaseMapper().insert(data);
90 92
@@ -114,6 +116,7 @@ public class ContractDistributorLineServiceImpl extends BaseMpServiceImpl<Contra @@ -114,6 +116,7 @@ public class ContractDistributorLineServiceImpl extends BaseMpServiceImpl<Contra
114 .set(ContractDistributorLine::getLength, vo.getLength()) 116 .set(ContractDistributorLine::getLength, vo.getLength())
115 .set(ContractDistributorLine::getStatus, vo.getStatus()) 117 .set(ContractDistributorLine::getStatus, vo.getStatus())
116 .set(ContractDistributorLine::getQuantity, vo.getQuantity()) 118 .set(ContractDistributorLine::getQuantity, vo.getQuantity())
  119 + .set(ContractDistributorLine::getProcessingFee, vo.getProcessingFee())
117 .set(ContractDistributorLine::getUnitPrice, vo.getUnitPrice()) 120 .set(ContractDistributorLine::getUnitPrice, vo.getUnitPrice())
118 .set(ContractDistributorLine::getAmountExcludingTax, vo.getAmountExcludingTax()) 121 .set(ContractDistributorLine::getAmountExcludingTax, vo.getAmountExcludingTax())
119 .set(ContractDistributorLine::getTotalAmount, vo.getTotalAmount()) 122 .set(ContractDistributorLine::getTotalAmount, vo.getTotalAmount())
@@ -126,6 +129,7 @@ public class ContractDistributorLineServiceImpl extends BaseMpServiceImpl<Contra @@ -126,6 +129,7 @@ public class ContractDistributorLineServiceImpl extends BaseMpServiceImpl<Contra
126 .set(ContractDistributorLine::getWidthTolNeg, vo.getWidthTolNeg()) 129 .set(ContractDistributorLine::getWidthTolNeg, vo.getWidthTolNeg())
127 .set(ContractDistributorLine::getLengthTolPos, vo.getLengthTolPos()) 130 .set(ContractDistributorLine::getLengthTolPos, vo.getLengthTolPos())
128 .set(ContractDistributorLine::getLengthTolNeg, vo.getLengthTolNeg()) 131 .set(ContractDistributorLine::getLengthTolNeg, vo.getLengthTolNeg())
  132 + .set(ContractDistributorLine::getItemId, vo.getItemId())
129 .eq(ContractDistributorLine::getId, vo.getId()); 133 .eq(ContractDistributorLine::getId, vo.getId());
130 134
131 getBaseMapper().update(updateWrapper); 135 getBaseMapper().update(updateWrapper);
@@ -41,6 +41,7 @@ import org.springframework.transaction.annotation.Transactional; @@ -41,6 +41,7 @@ import org.springframework.transaction.annotation.Transactional;
41 41
42 import javax.annotation.Resource; 42 import javax.annotation.Resource;
43 import java.io.Serializable; 43 import java.io.Serializable;
  44 +import java.math.BigDecimal;
44 import java.time.LocalDate; 45 import java.time.LocalDate;
45 import java.time.LocalDateTime; 46 import java.time.LocalDateTime;
46 import java.util.ArrayList; 47 import java.util.ArrayList;
@@ -238,6 +239,7 @@ public class ContractDistributorStandardServiceImpl extends @@ -238,6 +239,7 @@ public class ContractDistributorStandardServiceImpl extends
238 createContractDistributorLineVo.setLength(updateContractDistributorLineVo.getLength()); 239 createContractDistributorLineVo.setLength(updateContractDistributorLineVo.getLength());
239 createContractDistributorLineVo.setStatus(updateContractDistributorLineVo.getStatus()); 240 createContractDistributorLineVo.setStatus(updateContractDistributorLineVo.getStatus());
240 createContractDistributorLineVo.setQuantity(updateContractDistributorLineVo.getQuantity()); 241 createContractDistributorLineVo.setQuantity(updateContractDistributorLineVo.getQuantity());
  242 + createContractDistributorLineVo.setProcessingFee(updateContractDistributorLineVo.getProcessingFee());
241 createContractDistributorLineVo.setUnitPrice(updateContractDistributorLineVo.getUnitPrice()); 243 createContractDistributorLineVo.setUnitPrice(updateContractDistributorLineVo.getUnitPrice());
242 createContractDistributorLineVo.setAmountExcludingTax(updateContractDistributorLineVo.getAmountExcludingTax()); 244 createContractDistributorLineVo.setAmountExcludingTax(updateContractDistributorLineVo.getAmountExcludingTax());
243 createContractDistributorLineVo.setTotalAmount(updateContractDistributorLineVo.getTotalAmount()); 245 createContractDistributorLineVo.setTotalAmount(updateContractDistributorLineVo.getTotalAmount());
@@ -250,6 +252,7 @@ public class ContractDistributorStandardServiceImpl extends @@ -250,6 +252,7 @@ public class ContractDistributorStandardServiceImpl extends
250 createContractDistributorLineVo.setWidthTolNeg(updateContractDistributorLineVo.getWidthTolNeg()); 252 createContractDistributorLineVo.setWidthTolNeg(updateContractDistributorLineVo.getWidthTolNeg());
251 createContractDistributorLineVo.setLengthTolPos(updateContractDistributorLineVo.getLengthTolPos()); 253 createContractDistributorLineVo.setLengthTolPos(updateContractDistributorLineVo.getLengthTolPos());
252 createContractDistributorLineVo.setLengthTolNeg(updateContractDistributorLineVo.getLengthTolNeg()); 254 createContractDistributorLineVo.setLengthTolNeg(updateContractDistributorLineVo.getLengthTolNeg());
  255 + createContractDistributorLineVo.setItemId(updateContractDistributorLineVo.getItemId());
253 256
254 contractDistributorLineService.create(createContractDistributorLineVo); 257 contractDistributorLineService.create(createContractDistributorLineVo);
255 } 258 }
@@ -558,6 +561,72 @@ public class ContractDistributorStandardServiceImpl extends @@ -558,6 +561,72 @@ public class ContractDistributorStandardServiceImpl extends
558 OpLogUtil.setExtra(vo); 561 OpLogUtil.setExtra(vo);
559 } 562 }
560 563
  564 + @Override
  565 + @OpLog(type = OtherOpLogType.class, name = "合同锁规,ID:{}", params = {"#vo.id"})
  566 + @Transactional(rollbackFor = Exception.class)
  567 + public void specificationLock(UpdateContractDistributorStandardVo vo) {
  568 + ContractDistributorStandard data = getBaseMapper().selectById(vo.getId());
  569 + if (ObjectUtil.isNull(data)) {
  570 + throw new DefaultClientException("合同不存在!");
  571 + }
  572 +
  573 + List<UpdateContractDistributorLineVo> lineVoList = vo.getContractDistributorLineList();
  574 + if (CollectionUtils.isEmpty(lineVoList)) {
  575 + throw new DefaultClientException("合同行数据为空!");
  576 + }
  577 +
  578 + Wrapper<ContractDistributorStandard> childWrapper = Wrappers.lambdaQuery(ContractDistributorStandard.class)
  579 + .eq(ContractDistributorStandard::getParentId, vo.getId());
  580 +
  581 + List<ContractDistributorStandard> childContractList = getBaseMapper().selectList(childWrapper);
  582 + BigDecimal allChildTotalQuantity = vo.getTotalQuantity().add(CollectionUtils.isEmpty(childContractList) ? new BigDecimal(0) : childContractList.get(0).getTotalQuantity());
  583 + if (allChildTotalQuantity.compareTo(data.getTotalQuantity()) > 0) {
  584 + throw new DefaultClientException("锁规总数量大于合同总数量,锁规失败!");
  585 + }
  586 +
  587 + // 判断锁规是否完成(锁规两次或锁规数量等于合同数量)
  588 + boolean checkPriceSpecLocked = CollectionUtils.isNotEmpty(childContractList) || (allChildTotalQuantity.compareTo(data.getTotalQuantity()) == 0);
  589 +
  590 + data.setId(IdUtil.getUUID());
  591 + data.setTotalQuantity(vo.getTotalQuantity());
  592 + data.setTotalAmountCapital(vo.getTotalAmountCapital());
  593 + data.setTotalAmountExcludingTax(vo.getTotalAmountExcludingTax());
  594 + data.setTotalAmountIncludingTax(vo.getTotalAmountIncludingTax());
  595 + data.setStatus("STANDARD");
  596 + data.setParentId(vo.getId());
  597 + getBaseMapper().insert(data);
  598 +
  599 + Wrapper<ContractDistributorLine> lineWrapper = Wrappers.lambdaQuery(ContractDistributorLine.class)
  600 + .eq(ContractDistributorLine::getContractId, vo.getId())
  601 + .orderByAsc(ContractDistributorLine::getShowOrder);
  602 + List<ContractDistributorLine> oldContractDistributorLineList = contractDistributorLineService.list(lineWrapper);
  603 + Map<String, ContractDistributorLine> contractDistributorLineMap = CollectionUtils.emptyIfNull(oldContractDistributorLineList)
  604 + .stream().collect(Collectors.toMap(ContractDistributorLine::getId, Function.identity()));
  605 +
  606 + for (UpdateContractDistributorLineVo lineVo : lineVoList) {
  607 + ContractDistributorLine contractDistributorLine = contractDistributorLineMap.remove(lineVo.getId());
  608 + if (contractDistributorLine == null) {
  609 + throw new DefaultClientException("合同行数据不存在!");
  610 + }
  611 +
  612 + contractDistributorLine.setId(IdUtil.getUUID());
  613 + contractDistributorLine.setContractId(data.getId());
  614 + contractDistributorLine.setQuantity(lineVo.getQuantity());
  615 + contractDistributorLine.setUnitPrice(lineVo.getUnitPrice());
  616 + contractDistributorLine.setAmountExcludingTax(lineVo.getAmountExcludingTax());
  617 + contractDistributorLine.setTotalAmount(lineVo.getTotalAmount());
  618 + contractDistributorLineService.getBaseMapper().insert(contractDistributorLine);
  619 + }
  620 +
  621 + Wrapper<ContractDistributorStandard> changeLocked = Wrappers.lambdaUpdate(ContractDistributorStandard.class)
  622 + .set(ContractDistributorStandard::getPriceSpecLocked, checkPriceSpecLocked)
  623 + .eq(ContractDistributorStandard::getId, vo.getId());
  624 + getBaseMapper().update(changeLocked);
  625 +
  626 + OpLogUtil.setVariable("id", vo.getId());
  627 + OpLogUtil.setExtra(vo);
  628 + }
  629 +
561 @CacheEvict(value = ContractDistributorStandard.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") 630 @CacheEvict(value = ContractDistributorStandard.CACHE_NAME, key = "@cacheVariables.tenantId() + #key")
562 @Override 631 @Override
563 public void cleanCacheByKey(Serializable key) { 632 public void cleanCacheByKey(Serializable key) {
@@ -3,30 +3,32 @@ package com.lframework.xingyun.sc.impl.order; @@ -3,30 +3,32 @@ package com.lframework.xingyun.sc.impl.order;
3 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 3 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
4 import com.baomidou.mybatisplus.core.toolkit.Wrappers; 4 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
5 import com.github.pagehelper.PageInfo; 5 import com.github.pagehelper.PageInfo;
  6 +import com.lframework.starter.web.core.components.security.SecurityUtil;
  7 +import com.lframework.starter.web.core.utils.*;
  8 +import com.lframework.starter.web.inner.entity.SysUser;
  9 +import com.lframework.starter.web.inner.service.system.SysUserService;
6 import com.lframework.xingyun.sc.entity.OrderSpecificationChangeRecord; 10 import com.lframework.xingyun.sc.entity.OrderSpecificationChangeRecord;
7 import com.lframework.starter.web.core.impl.BaseMpServiceImpl; 11 import com.lframework.starter.web.core.impl.BaseMpServiceImpl;
8 -import com.lframework.starter.web.core.utils.PageResultUtil;  
9 import com.lframework.starter.web.core.components.resp.PageResult; 12 import com.lframework.starter.web.core.components.resp.PageResult;
10 -import com.lframework.starter.web.core.utils.OpLogUtil;  
11 import com.lframework.starter.common.exceptions.impl.DefaultClientException; 13 import com.lframework.starter.common.exceptions.impl.DefaultClientException;
12 -import com.lframework.starter.web.core.utils.IdUtil;  
13 import com.lframework.starter.common.utils.ObjectUtil; 14 import com.lframework.starter.common.utils.ObjectUtil;
14 import com.lframework.starter.web.core.annotations.oplog.OpLog; 15 import com.lframework.starter.web.core.annotations.oplog.OpLog;
15 -import com.lframework.starter.web.core.utils.PageHelperUtil;  
16 import com.lframework.starter.common.utils.Assert; 16 import com.lframework.starter.common.utils.Assert;
17 import com.lframework.starter.web.inner.components.oplog.OtherOpLogType; 17 import com.lframework.starter.web.inner.components.oplog.OtherOpLogType;
18 import com.lframework.xingyun.sc.entity.PurchaseOrderLine; 18 import com.lframework.xingyun.sc.entity.PurchaseOrderLine;
  19 +import com.lframework.xingyun.sc.enums.OrderSpecChangeStatus;
  20 +import com.lframework.xingyun.sc.service.order.PurchaseOrderInfoService;
19 import com.lframework.xingyun.sc.service.order.PurchaseOrderLineService; 21 import com.lframework.xingyun.sc.service.order.PurchaseOrderLineService;
20 -import com.lframework.xingyun.sc.vo.order.CreatePurchaseOrderLineVo;  
21 -import com.lframework.xingyun.sc.vo.order.UpdatePurchaseOrderLineVo;  
22 import com.lframework.xingyun.sc.vo.order.change.*; 22 import com.lframework.xingyun.sc.vo.order.change.*;
23 import org.apache.commons.collections4.CollectionUtils; 23 import org.apache.commons.collections4.CollectionUtils;
  24 +import org.apache.commons.lang3.StringUtils;
24 import org.springframework.transaction.annotation.Transactional; 25 import org.springframework.transaction.annotation.Transactional;
25 import com.lframework.xingyun.sc.mappers.OrderSpecificationChangeRecordMapper; 26 import com.lframework.xingyun.sc.mappers.OrderSpecificationChangeRecordMapper;
26 import com.lframework.xingyun.sc.service.order.OrderSpecificationChangeRecordService; 27 import com.lframework.xingyun.sc.service.order.OrderSpecificationChangeRecordService;
27 import org.springframework.stereotype.Service; 28 import org.springframework.stereotype.Service;
28 29
29 import javax.annotation.Resource; 30 import javax.annotation.Resource;
  31 +import java.math.BigDecimal;
30 import java.util.*; 32 import java.util.*;
31 33
32 @Service 34 @Service
@@ -35,6 +37,10 @@ public class OrderSpecificationChangeRecordServiceImpl extends BaseMpServiceImpl @@ -35,6 +37,10 @@ public class OrderSpecificationChangeRecordServiceImpl extends BaseMpServiceImpl
35 37
36 @Resource 38 @Resource
37 private PurchaseOrderLineService purchaseOrderLineService; 39 private PurchaseOrderLineService purchaseOrderLineService;
  40 + @Resource
  41 + private SysUserService sysUserService;
  42 + @Resource
  43 + private PurchaseOrderInfoService purchaseOrderInfoService;
38 44
39 45
40 @Override 46 @Override
@@ -69,7 +75,7 @@ public class OrderSpecificationChangeRecordServiceImpl extends BaseMpServiceImpl @@ -69,7 +75,7 @@ public class OrderSpecificationChangeRecordServiceImpl extends BaseMpServiceImpl
69 } 75 }
70 // 变更前 76 // 变更前
71 Map<String, List<PurchaseOrderLine>> beforeChangeMap = new HashMap<>(orderIds.size()); 77 Map<String, List<PurchaseOrderLine>> beforeChangeMap = new HashMap<>(orderIds.size());
72 - List<PurchaseOrderLine> beforeChangeList = purchaseOrderLineService.listByIds(orderIds); 78 + List<PurchaseOrderLine> beforeChangeList = purchaseOrderLineService.listByOrderIds(orderIds);
73 for (PurchaseOrderLine purchaseOrderLine : beforeChangeList) { 79 for (PurchaseOrderLine purchaseOrderLine : beforeChangeList) {
74 String purchaseOrderId = purchaseOrderLine.getPurchaseOrderId(); 80 String purchaseOrderId = purchaseOrderLine.getPurchaseOrderId();
75 List<PurchaseOrderLine> list = beforeChangeMap.computeIfAbsent(purchaseOrderId, k -> new ArrayList<>()); 81 List<PurchaseOrderLine> list = beforeChangeMap.computeIfAbsent(purchaseOrderId, k -> new ArrayList<>());
@@ -95,9 +101,20 @@ public class OrderSpecificationChangeRecordServiceImpl extends BaseMpServiceImpl @@ -95,9 +101,20 @@ public class OrderSpecificationChangeRecordServiceImpl extends BaseMpServiceImpl
95 101
96 @Override 102 @Override
97 public OrderSpecificationChangeRecord findById(String id) { 103 public OrderSpecificationChangeRecord findById(String id) {
  104 + OrderSpecificationChangeRecord changeRecord = getBaseMapper().selectById(id);
  105 + if (changeRecord == null) {
  106 + throw new DefaultClientException("订货单规格变更记录不存在!");
  107 + };
  108 + String orderId = changeRecord.getOrderId();
  109 + // 获取规格数据
  110 + // 变更前
  111 + List<PurchaseOrderLine> beforeChangeList = purchaseOrderLineService.listByOrderIds(Collections.singletonList(orderId));
  112 + changeRecord.setBeforeChangeSpecList(beforeChangeList);
  113 + // 变更后
  114 + List<PurchaseOrderLine> afterChangeList = purchaseOrderLineService.listByChangeIds(Collections.singletonList(id));
  115 + changeRecord.setAfterChangeSpecList(afterChangeList);
98 116
99 -  
100 - return getBaseMapper().selectById(id); 117 + return changeRecord;
101 } 118 }
102 119
103 @OpLog(type = OtherOpLogType.class, name = "新增订货单规格变更记录,ID:{}", params = {"#id"}) 120 @OpLog(type = OtherOpLogType.class, name = "新增订货单规格变更记录,ID:{}", params = {"#id"})
@@ -110,10 +127,39 @@ public class OrderSpecificationChangeRecordServiceImpl extends BaseMpServiceImpl @@ -110,10 +127,39 @@ public class OrderSpecificationChangeRecordServiceImpl extends BaseMpServiceImpl
110 data.setOrderId(vo.getOrderId()); 127 data.setOrderId(vo.getOrderId());
111 data.setOrderQuantity(vo.getOrderQuantity()); 128 data.setOrderQuantity(vo.getOrderQuantity());
112 data.setDeliveryDate(vo.getDeliveryDate()); 129 data.setDeliveryDate(vo.getDeliveryDate());
  130 + // 审核中
  131 + data.setStatus("AUDIT");
113 132
114 - getBaseMapper().insert(data); 133 + // 获取当前人员信息
  134 + String userId = SecurityUtil.getCurrentUser().getId();
  135 + SysUser user = sysUserService.findById(userId);
115 // 处理规格数据 136 // 处理规格数据
  137 + BigDecimal totalQuantity = new BigDecimal(0);
  138 + List<PurchaseOrderLine> orderLineList = new ArrayList<>();
116 List<CreateOrderSpecificationInfoVo> orderSpecList = vo.getOrderSpecList(); 139 List<CreateOrderSpecificationInfoVo> orderSpecList = vo.getOrderSpecList();
  140 + for (int i = 0; i < orderSpecList.size(); i++) {
  141 + CreateOrderSpecificationInfoVo createSpecVo = orderSpecList.get(i);
  142 + PurchaseOrderLine orderLine = JsonUtil.parseObject(JsonUtil.toJsonString(createSpecVo), PurchaseOrderLine.class);
  143 + orderLine.setId(IdUtil.getId());
  144 + orderLine.setChangeId(id);
  145 + orderLine.setCreateById(userId);
  146 + orderLine.setCreateBy(user.getName());
  147 + orderLine.setUpdateById(userId);
  148 + orderLine.setUpdateBy(user.getName());
  149 + if (orderLine.getShowOrder() == null) {
  150 + orderLine.setShowOrder(i + 1);
  151 + }
  152 + totalQuantity = totalQuantity.add(orderLine.getQuantity());
  153 +
  154 + orderLineList.add(orderLine);
  155 + }
  156 + if (data.getOrderQuantity() == null) {
  157 + data.setOrderQuantity(totalQuantity.doubleValue());
  158 + }
  159 + getBaseMapper().insert(data);
  160 + purchaseOrderLineService.batchAdd(orderLineList);
  161 + // 更新订货单规格变更状态
  162 + purchaseOrderInfoService.updateSpecChangeStatus(vo.getOrderId(), OrderSpecChangeStatus.IN_PROGRESS.getCode());
117 163
118 OpLogUtil.setVariable("id", data.getId()); 164 OpLogUtil.setVariable("id", data.getId());
119 OpLogUtil.setExtra(vo); 165 OpLogUtil.setExtra(vo);
@@ -133,10 +179,30 @@ public class OrderSpecificationChangeRecordServiceImpl extends BaseMpServiceImpl @@ -133,10 +179,30 @@ public class OrderSpecificationChangeRecordServiceImpl extends BaseMpServiceImpl
133 .set(OrderSpecificationChangeRecord::getOrderId, vo.getOrderId()) 179 .set(OrderSpecificationChangeRecord::getOrderId, vo.getOrderId())
134 .set(OrderSpecificationChangeRecord::getOrderQuantity, vo.getOrderQuantity()) 180 .set(OrderSpecificationChangeRecord::getOrderQuantity, vo.getOrderQuantity())
135 .set(OrderSpecificationChangeRecord::getDeliveryDate, vo.getDeliveryDate()) 181 .set(OrderSpecificationChangeRecord::getDeliveryDate, vo.getDeliveryDate())
  182 + .set(OrderSpecificationChangeRecord::getStatus, "AUDIT")
136 .eq(OrderSpecificationChangeRecord::getId, vo.getId()); 183 .eq(OrderSpecificationChangeRecord::getId, vo.getId());
137 - getBaseMapper().update(updateWrapper); 184 + // 获取当前人员信息
  185 + String userId = SecurityUtil.getCurrentUser().getId();
  186 + SysUser user = sysUserService.findById(userId);
138 // 更新规格数据 187 // 更新规格数据
  188 + BigDecimal totalQuantity = new BigDecimal(0);
  189 + List<PurchaseOrderLine> orderLineList = new ArrayList<>();
139 List<UpdateOrderSpecificationInfoVo> orderSpecList = vo.getOrderSpecList(); 190 List<UpdateOrderSpecificationInfoVo> orderSpecList = vo.getOrderSpecList();
  191 + for (UpdateOrderSpecificationInfoVo updateSpecVo : orderSpecList) {
  192 + PurchaseOrderLine orderLine = JsonUtil.parseObject(JsonUtil.toJsonString(updateSpecVo), PurchaseOrderLine.class);
  193 + orderLine.setUpdateById(userId);
  194 + orderLine.setUpdateBy(user.getName());
  195 + totalQuantity = totalQuantity.add(orderLine.getQuantity());
  196 +
  197 + orderLineList.add(orderLine);
  198 + }
  199 + if (vo.getOrderQuantity() == null) {
  200 + updateWrapper.set(OrderSpecificationChangeRecord::getOrderQuantity, totalQuantity.doubleValue());
  201 + } else {
  202 + updateWrapper.set(OrderSpecificationChangeRecord::getOrderQuantity, vo.getOrderQuantity());
  203 + }
  204 + getBaseMapper().update(updateWrapper);
  205 + purchaseOrderLineService.batchUpdate(orderLineList);
140 206
141 OpLogUtil.setVariable("id", data.getId()); 207 OpLogUtil.setVariable("id", data.getId());
142 OpLogUtil.setExtra(vo); 208 OpLogUtil.setExtra(vo);
@@ -148,4 +214,29 @@ public class OrderSpecificationChangeRecordServiceImpl extends BaseMpServiceImpl @@ -148,4 +214,29 @@ public class OrderSpecificationChangeRecordServiceImpl extends BaseMpServiceImpl
148 public void deleteById(String id) { 214 public void deleteById(String id) {
149 getBaseMapper().deleteById(id); 215 getBaseMapper().deleteById(id);
150 } 216 }
  217 +
  218 + /**
  219 + * 更新状态
  220 + *
  221 + * @param id 主键ID
  222 + * @param status 状态
  223 + */
  224 + @Override
  225 + public void updateStatus(String id, String status) {
  226 + if (StringUtils.isBlank(id) || StringUtils.isBlank(status)) {
  227 + return;
  228 + }
  229 + OrderSpecificationChangeRecord record = getById(id);
  230 + if (record == null) {
  231 + throw new DefaultClientException("规格变更记录不存在!");
  232 + }
  233 + LambdaUpdateWrapper<OrderSpecificationChangeRecord> updateWrapper = Wrappers.lambdaUpdate(OrderSpecificationChangeRecord.class);
  234 + updateWrapper.set(OrderSpecificationChangeRecord::getStatus, status)
  235 + .eq(OrderSpecificationChangeRecord::getId, id);
  236 + getBaseMapper().update(updateWrapper);
  237 + if (OrderSpecChangeStatus.CANCEL.getCode().equals(status)) {
  238 + // 更新订货单规格变更状态
  239 + purchaseOrderInfoService.updateSpecChangeStatus(record.getOrderId(), status);
  240 + }
  241 + }
151 } 242 }
@@ -321,6 +321,23 @@ public class PurchaseOrderInfoServiceImpl extends BaseMpServiceImpl<PurchaseOrde @@ -321,6 +321,23 @@ public class PurchaseOrderInfoServiceImpl extends BaseMpServiceImpl<PurchaseOrde
321 getBaseMapper().update(updateWrapper); 321 getBaseMapper().update(updateWrapper);
322 } 322 }
323 323
  324 + /**
  325 + * 更新规格变更状态
  326 + *
  327 + * @param id 主键ID
  328 + * @param status 状态
  329 + */
  330 + @Override
  331 + public void updateSpecChangeStatus(String id, String status) {
  332 + if (StringUtils.isBlank(id) || StringUtils.isBlank(status)) {
  333 + return;
  334 + }
  335 + LambdaUpdateWrapper<PurchaseOrderInfo> updateWrapper = Wrappers.lambdaUpdate(PurchaseOrderInfo.class)
  336 + .set(PurchaseOrderInfo::getSpecChangeStatus, status)
  337 + .eq(PurchaseOrderInfo::getId, id);
  338 + getBaseMapper().update(updateWrapper);
  339 + }
  340 +
324 @Override 341 @Override
325 public void cleanCacheByKey(Serializable key) { 342 public void cleanCacheByKey(Serializable key) {
326 343
@@ -24,7 +24,7 @@ import com.lframework.xingyun.sc.service.order.PurchaseOrderLineService; @@ -24,7 +24,7 @@ import com.lframework.xingyun.sc.service.order.PurchaseOrderLineService;
24 import com.lframework.xingyun.sc.vo.order.CreatePurchaseOrderLineVo; 24 import com.lframework.xingyun.sc.vo.order.CreatePurchaseOrderLineVo;
25 import com.lframework.xingyun.sc.vo.order.QueryPurchaseOrderLineVo; 25 import com.lframework.xingyun.sc.vo.order.QueryPurchaseOrderLineVo;
26 import com.lframework.xingyun.sc.vo.order.UpdatePurchaseOrderLineVo; 26 import com.lframework.xingyun.sc.vo.order.UpdatePurchaseOrderLineVo;
27 -import org.apache.commons.lang3.StringUtils; 27 +import org.apache.commons.collections4.CollectionUtils;
28 import org.springframework.transaction.annotation.Transactional; 28 import org.springframework.transaction.annotation.Transactional;
29 import org.springframework.stereotype.Service; 29 import org.springframework.stereotype.Service;
30 30
@@ -209,17 +209,43 @@ public class PurchaseOrderLineServiceImpl extends BaseMpServiceImpl<PurchaseOrde @@ -209,17 +209,43 @@ public class PurchaseOrderLineServiceImpl extends BaseMpServiceImpl<PurchaseOrde
209 } 209 }
210 210
211 @Override 211 @Override
212 - public List<PurchaseOrderLine> listByOrderId(String orderId) {  
213 - if (StringUtils.isBlank(orderId)) { 212 + public List<PurchaseOrderLine> listByOrderIds(List<String> orderIds) {
  213 + if (CollectionUtils.isEmpty(orderIds)) {
214 return Collections.emptyList(); 214 return Collections.emptyList();
215 } 215 }
216 LambdaQueryWrapper<PurchaseOrderLine> queryWrapper = Wrappers.lambdaQuery(PurchaseOrderLine.class); 216 LambdaQueryWrapper<PurchaseOrderLine> queryWrapper = Wrappers.lambdaQuery(PurchaseOrderLine.class);
217 - queryWrapper.eq(PurchaseOrderLine::getChangeId, orderId) 217 + queryWrapper.in(PurchaseOrderLine::getPurchaseOrderId, orderIds)
218 .orderByAsc(PurchaseOrderLine::getShowOrder); 218 .orderByAsc(PurchaseOrderLine::getShowOrder);
219 219
220 return getBaseMapper().selectList(queryWrapper); 220 return getBaseMapper().selectList(queryWrapper);
221 } 221 }
222 222
  223 + /**
  224 + * 批量新增
  225 + *
  226 + * @param specList 数据集合
  227 + */
  228 + @Override
  229 + public void batchAdd(List<PurchaseOrderLine> specList) {
  230 + if (CollectionUtils.isEmpty(specList)) {
  231 + return;
  232 + }
  233 + getBaseMapper().batchAdd(specList);
  234 + }
  235 +
  236 + /**
  237 + * 批量更新
  238 + *
  239 + * @param specList 数据集合
  240 + */
  241 + @Override
  242 + public void batchUpdate(List<PurchaseOrderLine> specList) {
  243 + if (CollectionUtils.isEmpty(specList)) {
  244 + return;
  245 + }
  246 + getBaseMapper().batchUpdate(specList);
  247 + }
  248 +
223 @Override 249 @Override
224 public void cleanCacheByKey(Serializable key) { 250 public void cleanCacheByKey(Serializable key) {
225 251
@@ -21,4 +21,18 @@ public interface PurchaseOrderLineMapper extends BaseMapper<PurchaseOrderLine> { @@ -21,4 +21,18 @@ public interface PurchaseOrderLineMapper extends BaseMapper<PurchaseOrderLine> {
21 * @return 21 * @return
22 */ 22 */
23 List<PurchaseOrderLine> query(@Param("vo") QueryPurchaseOrderLineVo vo); 23 List<PurchaseOrderLine> query(@Param("vo") QueryPurchaseOrderLineVo vo);
  24 +
  25 + /**
  26 + * 批量新增
  27 + *
  28 + * @param specList 数据集合
  29 + */
  30 + int batchAdd(@Param("specList") List<PurchaseOrderLine> specList);
  31 +
  32 + /**
  33 + * 批量新增
  34 + *
  35 + * @param specList 数据集合
  36 + */
  37 + int batchUpdate(@Param("specList") List<PurchaseOrderLine> specList);
24 } 38 }
@@ -88,4 +88,11 @@ public interface ContractDistributorStandardService extends BaseMpService<Contra @@ -88,4 +88,11 @@ public interface ContractDistributorStandardService extends BaseMpService<Contra
88 */ 88 */
89 void stockContractPriceLock(UpdateContractDistributorStandardVo vo); 89 void stockContractPriceLock(UpdateContractDistributorStandardVo vo);
90 90
  91 + /**
  92 + * 锁规
  93 + *
  94 + * @param vo
  95 + */
  96 + void specificationLock(UpdateContractDistributorStandardVo vo);
  97 +
91 } 98 }
@@ -57,4 +57,12 @@ public interface OrderSpecificationChangeRecordService extends BaseMpService<Ord @@ -57,4 +57,12 @@ public interface OrderSpecificationChangeRecordService extends BaseMpService<Ord
57 * @param id 主键ID 57 * @param id 主键ID
58 */ 58 */
59 void deleteById(String id); 59 void deleteById(String id);
  60 +
  61 + /**
  62 + * 更新状态
  63 + *
  64 + * @param id 主键ID
  65 + * @param status 状态
  66 + */
  67 + void updateStatus(String id, String status);
60 } 68 }
@@ -88,4 +88,12 @@ public interface PurchaseOrderInfoService extends BaseMpService<PurchaseOrderInf @@ -88,4 +88,12 @@ public interface PurchaseOrderInfoService extends BaseMpService<PurchaseOrderInf
88 * @param status 撤销状态 88 * @param status 撤销状态
89 */ 89 */
90 void updateRevokeStatus(String id, String status); 90 void updateRevokeStatus(String id, String status);
  91 +
  92 + /**
  93 + * 更新规格变更状态
  94 + *
  95 + * @param id 主键ID
  96 + * @param status 状态
  97 + */
  98 + void updateSpecChangeStatus(String id, String status);
91 } 99 }
@@ -75,8 +75,22 @@ public interface PurchaseOrderLineService extends BaseMpService<PurchaseOrderLin @@ -75,8 +75,22 @@ public interface PurchaseOrderLineService extends BaseMpService<PurchaseOrderLin
75 /** 75 /**
76 * 根据订货单ID查询 76 * 根据订货单ID查询
77 * 77 *
78 - * @param orderId 订货单ID 78 + * @param orderIds 订货单ID集合
79 * @return List<PurchaseOrderLine> 79 * @return List<PurchaseOrderLine>
80 */ 80 */
81 - List<PurchaseOrderLine> listByOrderId(String orderId); 81 + List<PurchaseOrderLine> listByOrderIds(List<String> orderIds);
  82 +
  83 + /**
  84 + * 批量新增
  85 + *
  86 + * @param specList 数据集合
  87 + */
  88 + void batchAdd(List<PurchaseOrderLine> specList);
  89 +
  90 + /**
  91 + * 批量更新
  92 + *
  93 + * @param specList 数据集合
  94 + */
  95 + void batchUpdate(List<PurchaseOrderLine> specList);
82 } 96 }
@@ -92,6 +92,14 @@ public class CreateContractDistributorLineVo implements BaseVo, Serializable { @@ -92,6 +92,14 @@ public class CreateContractDistributorLineVo implements BaseVo, Serializable {
92 private BigDecimal quantity; 92 private BigDecimal quantity;
93 93
94 /** 94 /**
  95 + * 加工费
  96 + */
  97 + @ApiModelProperty(value = "加工费")
  98 + @TypeMismatch(message = "加工费格式有误!")
  99 + @IsNumberPrecision(message = "加工费最多允许4位小数!", value = 4)
  100 + private BigDecimal processingFee;
  101 +
  102 + /**
95 * 单价 103 * 单价
96 */ 104 */
97 @ApiModelProperty(value = "单价") 105 @ApiModelProperty(value = "单价")
@@ -178,4 +186,9 @@ public class CreateContractDistributorLineVo implements BaseVo, Serializable { @@ -178,4 +186,9 @@ public class CreateContractDistributorLineVo implements BaseVo, Serializable {
178 @TypeMismatch(message = "长度公差负格式有误!") 186 @TypeMismatch(message = "长度公差负格式有误!")
179 private BigDecimal lengthTolNeg; 187 private BigDecimal lengthTolNeg;
180 188
  189 + /**
  190 + * 前端用ID
  191 + */
  192 + @ApiModelProperty(value = "前端用ID")
  193 + private String itemId;
181 } 194 }
@@ -96,6 +96,14 @@ public class UpdateContractDistributorLineVo implements BaseVo, Serializable { @@ -96,6 +96,14 @@ public class UpdateContractDistributorLineVo implements BaseVo, Serializable {
96 private BigDecimal quantity; 96 private BigDecimal quantity;
97 97
98 /** 98 /**
  99 + * 加工费
  100 + */
  101 + @ApiModelProperty(value = "加工费")
  102 + @TypeMismatch(message = "加工费格式有误!")
  103 + @IsNumberPrecision(message = "加工费最多允许4位小数!", value = 4)
  104 + private BigDecimal processingFee;
  105 +
  106 + /**
99 * 单价 107 * 单价
100 */ 108 */
101 @ApiModelProperty(value = "单价") 109 @ApiModelProperty(value = "单价")
@@ -181,5 +189,10 @@ public class UpdateContractDistributorLineVo implements BaseVo, Serializable { @@ -181,5 +189,10 @@ public class UpdateContractDistributorLineVo implements BaseVo, Serializable {
181 @TypeMismatch(message = "长度公差负格式有误!") 189 @TypeMismatch(message = "长度公差负格式有误!")
182 private BigDecimal lengthTolNeg; 190 private BigDecimal lengthTolNeg;
183 191
  192 + /**
  193 + * 前端用ID
  194 + */
  195 + @ApiModelProperty(value = "前端用ID")
  196 + private String itemId;
184 } 197 }
185 198
@@ -9,7 +9,6 @@ import com.lframework.starter.web.core.vo.BaseVo; @@ -9,7 +9,6 @@ import com.lframework.starter.web.core.vo.BaseVo;
9 import javax.validation.constraints.NotEmpty; 9 import javax.validation.constraints.NotEmpty;
10 import javax.validation.constraints.NotNull; 10 import javax.validation.constraints.NotNull;
11 11
12 -import com.lframework.xingyun.sc.vo.order.CreatePurchaseOrderLineVo;  
13 import io.swagger.annotations.ApiModelProperty; 12 import io.swagger.annotations.ApiModelProperty;
14 import com.lframework.starter.web.core.components.validation.TypeMismatch; 13 import com.lframework.starter.web.core.components.validation.TypeMismatch;
15 import org.hibernate.validator.constraints.Length; 14 import org.hibernate.validator.constraints.Length;
@@ -48,6 +47,12 @@ public class CreateOrderSpecificationChangeRecordVo implements BaseVo, Serializa @@ -48,6 +47,12 @@ public class CreateOrderSpecificationChangeRecordVo implements BaseVo, Serializa
48 private LocalDate deliveryDate; 47 private LocalDate deliveryDate;
49 48
50 /** 49 /**
  50 + * 变更原因及变更后的质量要求
  51 + */
  52 + @ApiModelProperty(value = "变更原因及变更后的质量要求")
  53 + private String description;
  54 +
  55 + /**
51 * 规格变更记录 56 * 规格变更记录
52 */ 57 */
53 @Valid 58 @Valid
@@ -53,6 +53,12 @@ public class UpdateOrderSpecificationChangeRecordVo implements BaseVo, Serializa @@ -53,6 +53,12 @@ public class UpdateOrderSpecificationChangeRecordVo implements BaseVo, Serializa
53 private LocalDate deliveryDate; 53 private LocalDate deliveryDate;
54 54
55 /** 55 /**
  56 + * 变更原因及变更后的质量要求
  57 + */
  58 + @ApiModelProperty(value = "变更原因及变更后的质量要求")
  59 + private String description;
  60 +
  61 + /**
56 * 规格变更记录 62 * 规格变更记录
57 */ 63 */
58 @Valid 64 @Valid
@@ -13,6 +13,7 @@ @@ -13,6 +13,7 @@
13 <result column="length" property="length"/> 13 <result column="length" property="length"/>
14 <result column="status" property="status"/> 14 <result column="status" property="status"/>
15 <result column="quantity" property="quantity"/> 15 <result column="quantity" property="quantity"/>
  16 + <result column="processing_fee" property="processingFee"/>
16 <result column="unit_price" property="unitPrice"/> 17 <result column="unit_price" property="unitPrice"/>
17 <result column="amount_excluding_tax" property="amountExcludingTax"/> 18 <result column="amount_excluding_tax" property="amountExcludingTax"/>
18 <result column="total_amount" property="totalAmount"/> 19 <result column="total_amount" property="totalAmount"/>
@@ -31,6 +32,7 @@ @@ -31,6 +32,7 @@
31 <result column="width_tol_neg" property="widthTolNeg"/> 32 <result column="width_tol_neg" property="widthTolNeg"/>
32 <result column="length_tol_pos" property="lengthTolPos"/> 33 <result column="length_tol_pos" property="lengthTolPos"/>
33 <result column="length_tol_neg" property="lengthTolNeg"/> 34 <result column="length_tol_neg" property="lengthTolNeg"/>
  35 + <result column="item_id" property="itemId"/>
34 </resultMap> 36 </resultMap>
35 37
36 <sql id="ContractDistributorLine_sql"> 38 <sql id="ContractDistributorLine_sql">
@@ -44,6 +46,7 @@ @@ -44,6 +46,7 @@
44 tb.length, 46 tb.length,
45 tb.status, 47 tb.status,
46 tb.quantity, 48 tb.quantity,
  49 + tb.processing_fee,
47 tb.unit_price, 50 tb.unit_price,
48 tb.amount_excluding_tax, 51 tb.amount_excluding_tax,
49 tb.total_amount, 52 tb.total_amount,
@@ -61,7 +64,8 @@ @@ -61,7 +64,8 @@
61 tb.width_tol_pos, 64 tb.width_tol_pos,
62 tb.width_tol_neg, 65 tb.width_tol_neg,
63 tb.length_tol_pos, 66 tb.length_tol_pos,
64 - tb.length_tol_neg 67 + tb.length_tol_neg,
  68 + tb.item_id
65 FROM tbl_contract_distributor_line AS tb 69 FROM tbl_contract_distributor_line AS tb
66 </sql> 70 </sql>
67 71
@@ -80,4 +80,115 @@ @@ -80,4 +80,115 @@
80 </where> 80 </where>
81 ORDER BY tb.show_order ASC 81 ORDER BY tb.show_order ASC
82 </select> 82 </select>
  83 +
  84 + <insert id="batchAdd" parameterType="java.util.List">
  85 + INSERT INTO tbl_purchase_order_line (
  86 + id, purchase_order_id, change_id, industry, quality, brand,
  87 + thickness, thickness_tol_pos, thickness_tol_neg,
  88 + width, width_tol_pos, width_tol_neg,
  89 + length, length_tol_pos, length_tol_neg,
  90 + status, quantity, sales_price, delivery_date, show_order,
  91 + assessment_exceeds_agreement, create_by_id, create_by, update_by_id, update_by
  92 + ) VALUES
  93 + <foreach collection="specList" item="item" separator=",">
  94 + (
  95 + #{item.id}, #{item.purchaseOrderId}, #{item.changeId}, #{item.industry}, #{item.quality}, #{item.brand},
  96 + #{item.thickness}, #{item.thicknessTolPos}, #{item.thicknessTolNeg},
  97 + #{item.width}, #{item.widthTolPos}, #{item.widthTolNeg},
  98 + #{item.length}, #{item.lengthTolPos}, #{item.lengthTolNeg},
  99 + #{item.status}, #{item.quantity}, #{item.salesPrice}, #{item.deliveryDate}, #{item.showOrder},
  100 + #{item.assessmentExceedsAgreement}, #{item.createById}, #{item.createBy}, #{item.updateById}, #{item.updateBy}
  101 + )
  102 + </foreach>
  103 + </insert>
  104 +
  105 + <update id="batchUpdate" parameterType="java.util.List">
  106 + UPDATE tbl_purchase_order_line
  107 + SET
  108 + industry =
  109 + <foreach collection="specList" item="item" open="CASE id" close="END">
  110 + WHEN #{item.id} THEN #{item.industry}
  111 + </foreach>,
  112 + quality =
  113 + <foreach collection="specList" item="item" open="CASE id" close="END">
  114 + WHEN #{item.id} THEN #{item.quality}
  115 + </foreach>,
  116 + brand =
  117 + <foreach collection="specList" item="item" open="CASE id" close="END">
  118 + WHEN #{item.id} THEN #{item.brand}
  119 + </foreach>,
  120 + thickness =
  121 + <foreach collection="specList" item="item" open="CASE id" close="END">
  122 + WHEN #{item.id} THEN #{item.thickness}
  123 + </foreach>,
  124 + thickness_tol_pos =
  125 + <foreach collection="specList" item="item" open="CASE id" close="END">
  126 + WHEN #{item.id} THEN #{item.thicknessTolPos}
  127 + </foreach>,
  128 + thickness_tol_neg =
  129 + <foreach collection="specList" item="item" open="CASE id" close="END">
  130 + WHEN #{item.id} THEN #{item.thicknessTolNeg}
  131 + </foreach>,
  132 + width =
  133 + <foreach collection="specList" item="item" open="CASE id" close="END">
  134 + WHEN #{item.id} THEN #{item.width}
  135 + </foreach>,
  136 + width_tol_pos =
  137 + <foreach collection="specList" item="item" open="CASE id" close="END">
  138 + WHEN #{item.id} THEN #{item.widthTolPos}
  139 + </foreach>,
  140 + width_tol_neg =
  141 + <foreach collection="specList" item="item" open="CASE id" close="END">
  142 + WHEN #{item.id} THEN #{item.widthTolNeg}
  143 + </foreach>,
  144 + length =
  145 + <foreach collection="specList" item="item" open="CASE id" close="END">
  146 + WHEN #{item.id} THEN #{item.length}
  147 + </foreach>,
  148 + length_tol_pos =
  149 + <foreach collection="specList" item="item" open="CASE id" close="END">
  150 + WHEN #{item.id} THEN #{item.lengthTolPos}
  151 + </foreach>,
  152 + length_tol_neg =
  153 + <foreach collection="specList" item="item" open="CASE id" close="END">
  154 + WHEN #{item.id} THEN #{item.lengthTolNeg}
  155 + </foreach>,
  156 + status =
  157 + <foreach collection="specList" item="item" open="CASE id" close="END">
  158 + WHEN #{item.id} THEN #{item.status}
  159 + </foreach>,
  160 + quantity =
  161 + <foreach collection="specList" item="item" open="CASE id" close="END">
  162 + WHEN #{item.id} THEN #{item.quantity}
  163 + </foreach>,
  164 + sales_price =
  165 + <foreach collection="specList" item="item" open="CASE id" close="END">
  166 + WHEN #{item.id} THEN #{item.salesPrice}
  167 + </foreach>,
  168 + delivery_date =
  169 + <foreach collection="specList" item="item" open="CASE id" close="END">
  170 + WHEN #{item.id} THEN #{item.deliveryDate}
  171 + </foreach>,
  172 + show_order =
  173 + <foreach collection="specList" item="item" open="CASE id" close="END">
  174 + WHEN #{item.id} THEN #{item.showOrder}
  175 + </foreach>,
  176 + assessment_exceeds_agreement =
  177 + <foreach collection="specList" item="item" open="CASE id" close="END">
  178 + WHEN #{item.id} THEN #{item.assessmentExceedsAgreement}
  179 + </foreach>,
  180 + update_by_id =
  181 + <foreach collection="specList" item="item" open="CASE id" close="END">
  182 + WHEN #{item.id} THEN #{item.updateById}
  183 + </foreach>,
  184 + update_by =
  185 + <foreach collection="specList" item="item" open="CASE id" close="END">
  186 + WHEN #{item.id} THEN #{item.updateBy}
  187 + </foreach>,
  188 + update_time = NOW()
  189 + WHERE id IN
  190 + <foreach collection="specList" item="item" open="(" separator="," close=")">
  191 + #{item.id}
  192 + </foreach>
  193 + </update>
83 </mapper> 194 </mapper>