From 1a66bb45b1431b2117096429a6131c2126e4d2b0 Mon Sep 17 00:00:00 2001 From: chenhao <852066789@qq.com> Date: Fri, 6 Jun 2025 14:33:33 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(sip):=20=E6=A0=B9=E6=8D=AE=E9=A1=B9?= =?UTF-8?q?=E7=9B=AEID=E7=94=9F=E6=88=90=E8=AE=A2=E5=8D=95=E7=BC=96?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增根据项目ID获取代理省份的方法- 修改订单编号生成逻辑,使用代理省份而非直接使用省份参数- 增加异常处理,当代理省份为空时抛出服务异常 - 优化数据库查询,减少冗余的省份参数传递 --- .../java/com/ruoyi/sip/mapper/AgentInfoMapper.java | 2 ++ .../ruoyi/sip/mapper/ProjectOrderInfoMapper.java | 2 ++ .../com/ruoyi/sip/service/IAgentInfoService.java | 2 ++ .../sip/service/impl/AgentInfoServiceImpl.java | 6 ++++++ .../service/impl/ProjectOrderInfoServiceImpl.java | 13 ++++++++++--- .../resources/mapper/sip/ProjectOrderInfoMapper.xml | 7 +++++++ .../resources/mapper/system/AgentInfoMapper.xml | 5 +++++ 7 files changed, 34 insertions(+), 3 deletions(-) diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/AgentInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/AgentInfoMapper.java index d2b58766..b3d9ebaa 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/AgentInfoMapper.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/AgentInfoMapper.java @@ -59,4 +59,6 @@ public interface AgentInfoMapper */ public int deleteAgentInfoByIds(String[] ids); public int selectCountByCode(AgentInfo agentInfo); + + AgentInfo selectAgentInfoByCode(String agentCode); } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java index 06430451..090a51ea 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java @@ -62,4 +62,6 @@ public interface ProjectOrderInfoMapper List selectProjectOrderInfoByProjectId(List projectId); int selectMaxOrderCode(String province); + + String selectAgentProvinceByProjectId(Long projectId); } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IAgentInfoService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IAgentInfoService.java index 871c1be0..517e6f0c 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IAgentInfoService.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IAgentInfoService.java @@ -58,4 +58,6 @@ public interface IAgentInfoService * @return 结果 */ public int deleteAgentInfoById(Long id); + + AgentInfo selectAgentInfoByCode(String agentCode); } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/AgentInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/AgentInfoServiceImpl.java index 4cef7f82..2c1f4105 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/AgentInfoServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/AgentInfoServiceImpl.java @@ -105,4 +105,10 @@ public class AgentInfoServiceImpl implements IAgentInfoService { return agentInfoMapper.deleteAgentInfoById(id); } + + @Override + public AgentInfo selectAgentInfoByCode(String agentCode) { + + return agentInfoMapper.selectAgentInfoByCode(agentCode); + } } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderInfoServiceImpl.java index 161e98d1..ca320185 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderInfoServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderInfoServiceImpl.java @@ -10,6 +10,7 @@ import cn.hutool.core.collection.CollUtil; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ShiroUtils; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.sip.domain.*; import com.ruoyi.sip.service.*; import org.springframework.beans.factory.annotation.Autowired; @@ -34,6 +35,7 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService { private IProjectProductInfoService productInfoService; @Autowired private ICnareaService cnareaService; + /** * 查询订单管理 * @@ -80,8 +82,9 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService { */ @Override public int insertProjectOrderInfo(ProjectOrderInfo projectOrderInfo) { + // 生成订单编号 - String orderNumber = generateOrderNumber(projectOrderInfo.getProvince()); + String orderNumber = generateOrderNumber(projectOrderInfo.getProjectId()); projectOrderInfo.setOrderCode(orderNumber); projectOrderInfo.setCreateTime(DateUtils.getNowDate()); projectOrderInfo.setCreateBy(ShiroUtils.getUserId().toString()); @@ -111,7 +114,11 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService { * @param province 省份代码 * @return 订单编号 */ - private String generateOrderNumber(String province) { + private String generateOrderNumber(Long projectId) { + String province = projectOrderInfoMapper.selectAgentProvinceByProjectId(projectId); + if (StringUtils.isEmpty(province)) { + throw new ServiceException("代表处所属省为空,无法生成订单编号"); + } // 获取当前时间,格式为yyyyMMdd String currentDate = DateUtils.dateTimeNow("yyyyMMdd"); Cnarea cnarea = new Cnarea(); @@ -143,7 +150,7 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService { public int updateProjectOrderInfo(ProjectOrderInfo projectOrderInfo) { ProjectOrderInfo existProjectOrderInfo = projectOrderInfoMapper.selectProjectOrderInfoById(projectOrderInfo.getId()); if (!existProjectOrderInfo.getProvince().equals(projectOrderInfo.getProvince())) { - String orderNumber = generateOrderNumber(projectOrderInfo.getProvince()); + String orderNumber = generateOrderNumber(projectOrderInfo.getProjectId()); projectOrderInfo.setOrderCode(orderNumber); } projectOrderInfo.setUpdateBy(ShiroUtils.getUserId().toString()); diff --git a/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml index 0479046f..72bbfa8a 100644 --- a/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml @@ -101,6 +101,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + diff --git a/ruoyi-sip/src/main/resources/mapper/system/AgentInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/system/AgentInfoMapper.xml index 5138b2b9..70cf0810 100644 --- a/ruoyi-sip/src/main/resources/mapper/system/AgentInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/system/AgentInfoMapper.xml @@ -49,6 +49,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where agent_code=#{agentCode} and status=0 and id!=#{id} + insert into agent_info From 2be0ced2ce793e10b98a7ffbb252cca5dbf73c37 Mon Sep 17 00:00:00 2001 From: chenhao <852066789@qq.com> Date: Fri, 6 Jun 2025 15:17:27 +0800 Subject: [PATCH 2/2] =?UTF-8?q?refactor(sip):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E4=BF=A1=E6=81=AF=E6=9F=A5=E8=AF=A2=E5=92=8C?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增按产品编码列表查询产品信息的方法 - 优化订单导入时的产品信息处理逻辑 - 修复项目产品信息保存时的产品编码校验问题 - 优化产品信息变更日志的生成逻辑 --- .../ruoyi/sip/mapper/ProductInfoMapper.java | 1 + .../sip/service/IProductInfoService.java | 1 + .../service/impl/OrderInfoServiceImpl.java | 4 +++- .../service/impl/ProductInfoServiceImpl.java | 10 +++++++++ .../service/impl/ProjectInfoServiceImpl.java | 16 ++++++++++---- .../impl/ProjectProductInfoServiceImpl.java | 22 +++++++++++++++++++ .../mapper/system/ProductInfoMapper.xml | 8 +++++++ 7 files changed, 57 insertions(+), 5 deletions(-) diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProductInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProductInfoMapper.java index 5c3586ab..29abe5c7 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProductInfoMapper.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProductInfoMapper.java @@ -29,6 +29,7 @@ public interface ProductInfoMapper * @return 产品管理集合 */ public List selectProductInfoList(ProductInfo productInfo); + public List selectProductInfoByCodeList(List productCodeList); /** * 新增产品管理 diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProductInfoService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProductInfoService.java index 65b8a08d..947a7903 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProductInfoService.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProductInfoService.java @@ -63,4 +63,5 @@ public interface IProductInfoService public int deleteProductInfoById(Long id); List query(MaintenanceRecordsDto dto); + List selectProductInfoByCodeList(List productCodeList); } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java index 9426fef3..1258e597 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java @@ -319,7 +319,9 @@ public class OrderInfoServiceImpl implements IOrderInfoService throw new ServiceException("excel模板错误,导入失败"); } //只处理当前产品表有的数据 - List productInfos = productInfoService.selectProductInfoList(new ProductInfo()); +// List productInfos = productInfoService.selectProductInfoList(new ProductInfo()); + List codeList = orderListList.stream().map(OrderList::getProductCode).filter(StringUtils::isNotEmpty).collect(Collectors.toList()); + List productInfos = productInfoService.selectProductInfoByCodeList(codeList); Map productInfoMap = productInfos.stream().collect(Collectors.toMap(ProductInfo::getProductCode, Function.identity(), (v1, v2) -> v1)); orderListList = orderListList.stream().filter(item -> item != null && StringUtils.isNotEmpty(item.getProductCode()) && productInfoMap.containsKey(item.getProductCode())) diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProductInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProductInfoServiceImpl.java index 85af1b9b..f20eef2a 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProductInfoServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProductInfoServiceImpl.java @@ -1,7 +1,9 @@ package com.ruoyi.sip.service.impl; +import java.util.Collections; import java.util.List; +import cn.hutool.core.collection.CollUtil; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.ShiroUtils; import com.ruoyi.common.utils.StringUtils; @@ -114,4 +116,12 @@ public class ProductInfoServiceImpl implements IProductInfoService } return productInfoMapper.query(dto); } + + @Override + public List selectProductInfoByCodeList(List productCodeList) { + if (CollUtil.isEmpty(productCodeList)){ + return Collections.emptyList(); + } + return productInfoMapper.selectProductInfoByCodeList(productCodeList); + } } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectInfoServiceImpl.java index bb31ead1..7ef7d8b8 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectInfoServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectInfoServiceImpl.java @@ -17,6 +17,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.text.DateFormat; import java.time.LocalDate; import java.time.Period; import java.time.ZoneId; @@ -241,8 +242,9 @@ public class ProjectInfoServiceImpl implements IProjectInfoService { logIndex = compareField(logContent, logIndex, "代理商", oldProjectInfo.getPartnerName(), projectInfo.getPartnerName()); logIndex = compareField(logContent, logIndex, "联系方式", oldProjectInfo.getContactWay(), projectInfo.getContactWay()); logIndex = compareBigDecimalField(logContent, logIndex, "预计金额", oldProjectInfo.getEstimatedAmount(), projectInfo.getEstimatedAmount()); - logIndex = compareField(logContent, logIndex, "预计下单时间", oldProjectInfo.getEstimatedOrderTime(), projectInfo.getEstimatedOrderTime()); - logIndex = compareField(logContent, logIndex, "预计发货时间", oldProjectInfo.getEstimatedDeliverTime(), projectInfo.getEstimatedDeliverTime()); + logIndex = compareField(logContent, logIndex, "预计下单时间", formatterDate(oldProjectInfo.getEstimatedOrderTime()), + formatterDate(projectInfo.getEstimatedOrderTime())); + logIndex = compareField(logContent, logIndex, "预计发货时间", formatterDate(oldProjectInfo.getEstimatedDeliverTime()), formatterDate(projectInfo.getEstimatedDeliverTime())); logIndex = compareField(logContent, logIndex, "竞争对手", oldProjectInfo.getCompetitor(), projectInfo.getCompetitor()); logIndex = compareField(logContent, logIndex, "关键技术问题", oldProjectInfo.getKeyProblem(), projectInfo.getKeyProblem()); logIndex = compareField(logContent, logIndex, "项目简述", oldProjectInfo.getProjectDesc(), projectInfo.getProjectDesc()); @@ -297,6 +299,12 @@ public class ProjectInfoServiceImpl implements IProjectInfoService { } } + private String formatterDate(Date date) { + if (date == null) { + return null; + } + return DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, date); + } /** * 比较产品信息列表并生成日志内容 * @@ -323,11 +331,11 @@ public class ProjectInfoServiceImpl implements IProjectInfoService { if (oldProduct == null && newProduct != null) { // 新增产品 - logContent.append(index).append(".").append(type).append("新增:").append(newProduct.getProductBomCode()).append("\n"); + logContent.append(index).append(".").append(type).append("新增:").append(StringUtils.isEmpty(newProduct.getProductBomCode()) ? "空" : newProduct.getProductBomCode()).append("\n"); index++; } else if (oldProduct != null && newProduct == null) { // 删除产品 - logContent.append(index).append(".").append(type).append("删除:").append(oldProduct.getProductBomCode()).append("\n"); + logContent.append(index).append(".").append(type).append("删除:").append(StringUtils.isEmpty(oldProduct.getProductBomCode()) ? "空" : oldProduct.getProductBomCode()).append("\n"); index++; } else if (oldProduct != null) { // 变更产品 diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectProductInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectProductInfoServiceImpl.java index e4395326..5140d783 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectProductInfoServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectProductInfoServiceImpl.java @@ -3,9 +3,14 @@ package com.ruoyi.sip.service.impl; import java.util.Collections; import java.util.List; import java.util.Set; +import java.util.StringJoiner; import java.util.stream.Collectors; import cn.hutool.core.collection.CollUtil; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.sip.domain.ProductInfo; +import com.ruoyi.sip.service.IProductInfoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.sip.mapper.ProjectProductInfoMapper; @@ -23,6 +28,8 @@ import com.ruoyi.common.core.text.Convert; public class ProjectProductInfoServiceImpl implements IProjectProductInfoService { @Autowired private ProjectProductInfoMapper projectProductInfoMapper; + @Autowired + private IProductInfoService productInfoService; /** * 查询项目产品信息 @@ -97,6 +104,21 @@ public class ProjectProductInfoServiceImpl implements IProjectProductInfoService @Override public void saveBatch(List list) { + //校验数据是否在产品库中 + List codeList = list.stream().map(ProjectProductInfo::getProductBomCode).distinct().collect(Collectors.toList()); + List productInfos = productInfoService.selectProductInfoByCodeList(codeList); + Set existsProductCodeMapSet = productInfos.stream().map(ProductInfo::getProductCode).collect(Collectors.toSet()); + StringJoiner stringJoiner = new StringJoiner(","); + for (String code : codeList) { + if (!existsProductCodeMapSet.contains(code)) { + stringJoiner.add(code); + } + } + if (stringJoiner.length() > 0) { + throw new ServiceException(StringUtils.format("产品编码[{}]在产品库中未找到,请确认后重试", stringJoiner.toString())); + } + + List projectProductInfos = projectProductInfoMapper.selectProjectProductInfoListByProjectId(list.get(0).getProjectId()); Set idSet = list.stream().map(ProjectProductInfo::getId).collect(Collectors.toSet()); String[] deleteIds = projectProductInfos.stream().filter(item -> !idSet.contains(item.getId())).map(item -> item.getId().toString()).toArray(String[]::new); diff --git a/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml index 218d4e1d..f262050a 100644 --- a/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml @@ -38,6 +38,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where id = #{id} +