From a8cbd44d8bca67086b919d4d7c102927f2c90d6b Mon Sep 17 00:00:00 2001 From: zelian_wu <15576055375@163.com> Date: Mon, 25 Dec 2023 17:31:56 +0800 Subject: [PATCH] =?UTF-8?q?2023-12-25=20=E8=AF=A2=E4=BB=B7=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=20=E6=8A=A5=E4=BB=B7=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/QuotationInformationEntity.java | 11 +- .../modules/quotation/entity/SeqRule.java | 58 +++++++++ .../quotation/mapper/SeqRuleMapper.java | 9 ++ .../quotation/service/SeqRuleService.java | 14 +++ .../impl/QuotationHeaderServerImpl.java | 110 ++++++++++++------ .../impl/QuotationInformationServiceImpl.java | 31 ++++- .../service/impl/SeqRuleServiceImpl.java | 52 +++++++++ .../quotation/QuotationInformationMapper.xml | 18 ++- 8 files changed, 258 insertions(+), 45 deletions(-) create mode 100644 src/main/java/com/spring/modules/quotation/entity/SeqRule.java create mode 100644 src/main/java/com/spring/modules/quotation/mapper/SeqRuleMapper.java create mode 100644 src/main/java/com/spring/modules/quotation/service/SeqRuleService.java create mode 100644 src/main/java/com/spring/modules/quotation/service/impl/SeqRuleServiceImpl.java diff --git a/src/main/java/com/spring/modules/quotation/entity/QuotationInformationEntity.java b/src/main/java/com/spring/modules/quotation/entity/QuotationInformationEntity.java index 6cf52325..0369ea69 100644 --- a/src/main/java/com/spring/modules/quotation/entity/QuotationInformationEntity.java +++ b/src/main/java/com/spring/modules/quotation/entity/QuotationInformationEntity.java @@ -1,6 +1,7 @@ package com.spring.modules.quotation.entity; import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; @@ -133,7 +134,7 @@ public class QuotationInformationEntity extends QueryPage implements Serializabl /** * 更新时间 **/ - @TableField(fill = FieldFill.UPDATE) + @TableField(fill = FieldFill.UPDATE,insertStrategy = FieldStrategy.NEVER) private Date updateDate; /** * 更新人 @@ -148,5 +149,13 @@ public class QuotationInformationEntity extends QueryPage implements Serializabl */ @TableField(exist = false) private List informationList; + /** + * 批次号 + */ + private String quotationBatchNo; + /** + * 批次序号 + */ + private Integer quotationItemNo; } diff --git a/src/main/java/com/spring/modules/quotation/entity/SeqRule.java b/src/main/java/com/spring/modules/quotation/entity/SeqRule.java new file mode 100644 index 00000000..2c18552e --- /dev/null +++ b/src/main/java/com/spring/modules/quotation/entity/SeqRule.java @@ -0,0 +1,58 @@ +package com.spring.modules.quotation.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +@Data +@TableName("seq_rule") +public class SeqRule { + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + private String type; + private String name; + private String prefix; + private Integer length; + private Long currentVal; + private Date createDate; + private String createBy; + private Date updateDate; + private String updateBy; + private String site; + + public SeqRule(){} + + /** + * 构造函数 + * @param site 工厂编号 + * @param type 类型 XJ/BJ... + * @param name 中文类型描述 + * @param prefix 前缀 + * @param length 序列长度 + */ + public SeqRule(String site,String type,String name,String prefix,Integer length){ + this.site= site; + this.type = type; + this.name = name; + this.prefix = prefix; + this.length = length; + } + + /** + * 构造函数 + * @param site 工厂编号 + * @param type 类型 XJ/BJ... + * @param name 中文类型描述 + * @param prefix 前缀 + * @param length 序列长度 + * @param currentVal 序列初始值 + */ + public SeqRule(String site,String type,String name,String prefix,Integer length,Long currentVal){ + this(site,type,name,prefix,length); + this.currentVal = currentVal; + } +} diff --git a/src/main/java/com/spring/modules/quotation/mapper/SeqRuleMapper.java b/src/main/java/com/spring/modules/quotation/mapper/SeqRuleMapper.java new file mode 100644 index 00000000..824dc71b --- /dev/null +++ b/src/main/java/com/spring/modules/quotation/mapper/SeqRuleMapper.java @@ -0,0 +1,9 @@ +package com.spring.modules.quotation.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.spring.modules.quotation.entity.SeqRule; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SeqRuleMapper extends BaseMapper { +} diff --git a/src/main/java/com/spring/modules/quotation/service/SeqRuleService.java b/src/main/java/com/spring/modules/quotation/service/SeqRuleService.java new file mode 100644 index 00000000..c7af5281 --- /dev/null +++ b/src/main/java/com/spring/modules/quotation/service/SeqRuleService.java @@ -0,0 +1,14 @@ +package com.spring.modules.quotation.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.spring.modules.quotation.entity.SeqRule; + +public interface SeqRuleService extends IService { + /** + * 获取序列号 + * @param type 类型 + * @param prefix 前缀 + * @return + */ + String getSeqNo(String site,String type,String prefix); +} diff --git a/src/main/java/com/spring/modules/quotation/service/impl/QuotationHeaderServerImpl.java b/src/main/java/com/spring/modules/quotation/service/impl/QuotationHeaderServerImpl.java index 1dd37601..9a42fe4e 100644 --- a/src/main/java/com/spring/modules/quotation/service/impl/QuotationHeaderServerImpl.java +++ b/src/main/java/com/spring/modules/quotation/service/impl/QuotationHeaderServerImpl.java @@ -9,21 +9,25 @@ import com.spring.common.utils.R; import com.spring.modules.quotation.entity.QuotationDetail; import com.spring.modules.quotation.entity.QuotationHeader; import com.spring.modules.quotation.entity.QuotationInformationEntity; +import com.spring.modules.quotation.entity.SeqRule; import com.spring.modules.quotation.mapper.QuotationHeaderMapper; import com.spring.modules.quotation.service.QuotationDetailService; import com.spring.modules.quotation.service.QuotationHeaderServer; import com.spring.modules.quotation.service.QuotationInformationService; +import com.spring.modules.quotation.service.SeqRuleService; import com.spring.modules.quotation.vo.QuotationHeaderVo; import com.spring.modules.quotation.vo.QuotationInformationVo; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @Service @@ -32,6 +36,10 @@ public class QuotationHeaderServerImpl extends ServiceImpl quotationInformationVoList) { - List quotationHeaderList = new ArrayList<>(); - try{ - for (int i = 0; i < quotationInformationVoList.size(); i++) { - // 获得询价对象 - QuotationInformationVo information = quotationInformationVoList.get(i); - // 获取主键 - String quotationHeaderNo = this.baseMapper.getQuotationNo(information.getSite()); - // 创建报价对象 - QuotationHeader quotationHeader = new QuotationHeader(); - quotationHeader.setSite(information.getSite()); - quotationHeader.setQuotationNo("QBJ"+quotationHeaderNo.toUpperCase()); - quotationHeader.setQuotationDate(new Date()); - quotationHeader.setCustomerNo(information.getCustomerNo()); - quotationHeader.setVersionCode("A001"); - quotationHeader.setProjectId(information.getProjectId()); - quotationHeader.setTracker(information.getTracker()); - quotationHeader.setCurrency(information.getCustomerCurrency()); - quotationHeader.setQuotationStatus("草稿"); - quotationHeader.setRemark(""); - quotationHeader.setCustomerInquiryNo(""); - quotationHeader.setInternalInquiryNo(information.getQuotationNo().toUpperCase()); - quotationHeader.setRequireApproval(""); - quotationHeader.setApprovalStatus(""); - quotationHeader.setCreateBy(Integer.valueOf(information.getCreateBy())); - quotationHeader.setCreateTime(new Date()); - // 新增报价 - save(quotationHeader); - quotationHeaderList.add(quotationHeader); + Map> listMap = quotationInformationVoList.stream().collect(Collectors.groupingBy(QuotationInformationVo::getQuotationBatchNo)); + List ids = new ArrayList<>(); + for (String key : listMap.keySet()) { + List list = listMap.get(key); + // 获得询价对象 + QuotationInformationVo information = quotationInformationVoList.get(0); + // 获取主键 + String quotationHeaderNo = "BJ"+this.baseMapper.getQuotationNo(information.getSite()).toUpperCase(); + // 创建报价对象 + QuotationHeader quotationHeader = new QuotationHeader(); + quotationHeader.setSite(information.getSite()); + quotationHeader.setQuotationNo(quotationHeaderNo.toUpperCase()); + quotationHeader.setQuotationDate(new Date()); + quotationHeader.setCustomerNo(information.getCustomerNo()); + quotationHeader.setVersionCode("A001"); + quotationHeader.setProjectId(information.getProjectId()); + quotationHeader.setTracker(information.getTracker()); + quotationHeader.setQuoter(information.getQuoter()); + quotationHeader.setCurrency(information.getCustomerCurrency()); + quotationHeader.setQuotationStatus("草稿"); + quotationHeader.setRemark(""); + quotationHeader.setCustomerInquiryNo(""); + quotationHeader.setInternalInquiryNo(information.getQuotationBatchNo().toUpperCase()); + quotationHeader.setRequireApproval(""); + quotationHeader.setApprovalStatus(""); + quotationHeader.setCreateBy(Integer.valueOf(information.getCreateBy())); + quotationHeader.setCreateTime(new Date()); + // 新增报价 + save(quotationHeader); + ids.add(quotationHeader.getQuotationHeaderId()); + // 新增序列规则记录 + seqRuleService.save(new SeqRule(information.getSite(),"BJ","报价单号",quotationHeaderNo,3)); + for (int i = 0; i < list.size(); i++) { + QuotationInformationVo quotationInformationVo = list.get(i); // 创建询价对象 QuotationDetail detail = new QuotationDetail(); - detail.setProductNo(information.getTestPartNo()); - detail.setProductDesc(information.getPartName()); + detail.setProductNo(quotationInformationVo.getTestPartNo()); + detail.setProductDesc(quotationInformationVo.getPartName()); detail.setQuotationDetailQuantity(new BigDecimal("1")); // 绑定主键 - detail.setSite(information.getSite()); + detail.setSite(quotationInformationVo.getSite()); detail.setQuotationDetailStatus("草稿"); - detail.setInternalInquiryNo(information.getQuotationNo().toUpperCase()); + detail.setInternalInquiryNo(quotationInformationVo.getQuotationNo().toUpperCase()); detail.setQuotationHeaderId(quotationHeader.getQuotationHeaderId()); detail.setRemark(""); // 新增询价 quotationDetailService.save(detail); } - }catch (Exception e){ - throw new RuntimeException("保存异常,异常信息:"+e.getMessage()); } - List ids = quotationHeaderList.stream().map(QuotationHeader::getQuotationHeaderId).collect(Collectors.toList()); return R.ok("保存成功").put("data",ids).put("code",200); } } diff --git a/src/main/java/com/spring/modules/quotation/service/impl/QuotationInformationServiceImpl.java b/src/main/java/com/spring/modules/quotation/service/impl/QuotationInformationServiceImpl.java index 9db2aad5..d39fb13f 100644 --- a/src/main/java/com/spring/modules/quotation/service/impl/QuotationInformationServiceImpl.java +++ b/src/main/java/com/spring/modules/quotation/service/impl/QuotationInformationServiceImpl.java @@ -17,8 +17,10 @@ import com.spring.modules.oss.service.SysOssService; import com.spring.modules.project.data.PlmProjectInfoData; import com.spring.modules.project.data.PlmProjectPartData; import com.spring.modules.quotation.entity.QuotationInformationEntity; +import com.spring.modules.quotation.entity.SeqRule; import com.spring.modules.quotation.mapper.QuotationInformationMapper; import com.spring.modules.quotation.service.QuotationInformationService; +import com.spring.modules.quotation.service.SeqRuleService; import com.spring.modules.quotation.vo.QuotationInformationVo; import com.spring.modules.quotation.vo.SysOssVo; import com.spring.modules.sys.entity.GetParamInData; @@ -28,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; import org.springframework.web.multipart.MultipartFile; import javax.servlet.ServletOutputStream; @@ -50,6 +53,9 @@ public class QuotationInformationServiceImpl extends ServiceImpl resultList = this.quotationInformationMapper.quotationInformationSearch(new Page(data.getPage(), data.getLimit()), data); return new PageUtils(resultList); } @@ -76,13 +85,31 @@ public class QuotationInformationServiceImpl extends ServiceImpl implements SeqRuleService { + + + @Override + @Transactional + public String getSeqNo(String site,String type, String prefix) { + SeqRule seqRule = lambdaQuery().eq(SeqRule::getSite,site).eq(SeqRule::getType, type).eq(SeqRule::getPrefix, prefix).one(); + String seqNo = seqRuleValue(seqRule); + //生成完成直接递增 + seqRule.setCurrentVal(seqRule.getCurrentVal()+1); + if (!updateById(seqRule)) { + throw new RuntimeException("序列号修改失败!"); + } + return seqNo; + } + + /** + * 通过序列号规则获取序列号 + * @param seqRule 序列号规则 + * @return + */ + public String seqRuleValue(SeqRule seqRule){ + if (seqRule == null){ + throw new RuntimeException("序列号规则未定义"); + } + String prefix = seqRule.getPrefix(); + return prefix+"-"+getSeqNumber(seqRule.getCurrentVal(),seqRule.getLength()); + } + + /** + * 返回组装的序列 + * @param currentVal 当前序列值 + * @param length 序列长度 + * @return + */ + public String getSeqNumber(Long currentVal,Integer length){ + return StringUtils.leftPad(currentVal.toString(),length,"0"); + } +} diff --git a/src/main/resources/mapper/quotation/QuotationInformationMapper.xml b/src/main/resources/mapper/quotation/QuotationInformationMapper.xml index 8dc7dd6b..78085180 100644 --- a/src/main/resources/mapper/quotation/QuotationInformationMapper.xml +++ b/src/main/resources/mapper/quotation/QuotationInformationMapper.xml @@ -39,13 +39,21 @@ confirm_results, confirm_by, confirm_information, - quotation_result_status + quotation_result_status, + quotation_batch_no, + quotation_item_no FROM plm_quotation_information site = #{query.site} AND quotation_no = #{query.quotationNo} + + AND quotation_batch_no like #{query.quotationBatchNo} + + + AND quotation_item_no = #{query.quotationItemNo} + AND customer_no like #{query.customerNo} @@ -82,7 +90,7 @@ AND #{query.endDate} >= required_completion_date - order by create_date desc + order by quotation_batch_no desc,quotation_item_no @@ -125,7 +133,7 @@ @@ -269,7 +277,9 @@ confirm_results, confirm_by, confirm_information, - quotation_result_status + quotation_result_status, + quotation_batch_no, + quotation_item_no FROM plm_quotation_information site = #{site}