refactor(sip): 重构订单配置信息导入逻辑
- 移除了 ProjectInfoMapper.xml 中的 province 字段映射 - 优化了 ProjectOrderConfigInfoServiceImpl 中的导入逻辑 - 增加了对产品库中不存在的产品的处理 - 改进了对折扣、单价和数量的校验- 优化了数据插入流程,提高了导入效率master
parent
1aad3630db
commit
fd4dc6ce4d
|
@ -1,9 +1,13 @@
|
|||
package com.ruoyi.sip.service.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
|
@ -11,10 +15,13 @@ import com.ruoyi.common.core.domain.AjaxResult;
|
|||
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.common.utils.file.FileUploadUtils;
|
||||
import com.ruoyi.common.utils.file.FileUtils;
|
||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||
import com.ruoyi.sip.domain.ProductInfo;
|
||||
import com.ruoyi.sip.domain.ProjectOrderFileLog;
|
||||
import com.ruoyi.sip.service.IProductInfoService;
|
||||
import com.ruoyi.sip.service.IProjectOrderFileLogService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
@ -25,6 +32,8 @@ import com.ruoyi.common.core.text.Convert;
|
|||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 订单配置信息Service业务层处理
|
||||
*
|
||||
|
@ -34,11 +43,13 @@ import org.springframework.web.multipart.MultipartFile;
|
|||
@Service
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public class ProjectOrderConfigInfoServiceImpl implements IProjectOrderConfigInfoService {
|
||||
@Autowired
|
||||
@Resource
|
||||
private ProjectOrderConfigInfoMapper projectOrderConfigInfoMapper;
|
||||
|
||||
@Autowired
|
||||
private IProjectOrderFileLogService fileLogService;
|
||||
@Autowired
|
||||
private IProductInfoService productInfoService;
|
||||
|
||||
/**
|
||||
* 查询订单配置信息
|
||||
|
@ -117,8 +128,37 @@ public class ProjectOrderConfigInfoServiceImpl implements IProjectOrderConfigInf
|
|||
throw new ServiceException("导入失败,读取文件错误");
|
||||
}
|
||||
|
||||
//只处理当前产品表有的数据
|
||||
List<ProductInfo> productInfos = productInfoService.selectProductInfoList(new ProductInfo());
|
||||
Map<String, ProductInfo> productInfoMap = productInfos.stream().collect(Collectors.toMap(ProductInfo::getProductCode, Function.identity(), (v1, v2) -> v1));
|
||||
orderConfigInfoList = orderConfigInfoList.stream().filter(item -> item != null && StringUtils.isNotEmpty(item.getProductCode())
|
||||
&& productInfoMap.containsKey(item.getProductBomCode()))
|
||||
.collect(Collectors.toList());
|
||||
//todo 需要产品型号和产品编码 使用或匹配
|
||||
if (CollUtil.isEmpty(orderConfigInfoList)) {
|
||||
return AjaxResult.error("文件为空或产品不在产品库中");
|
||||
}
|
||||
for (ProjectOrderConfigInfo configInfo : orderConfigInfoList) {
|
||||
configInfo.setOrderId(orderId);
|
||||
if (configInfo.getGuidanceDiscount() != null && (configInfo.getGuidanceDiscount().compareTo(BigDecimal.ONE) > 0 || configInfo.getGuidanceDiscount().compareTo(BigDecimal.ZERO) <= 0)) {
|
||||
return AjaxResult.error("折扣区间需在0-1之间");
|
||||
}
|
||||
if (configInfo.getDiscount() == null){
|
||||
configInfo.setDiscount(configInfo.getGuidanceDiscount());
|
||||
}
|
||||
if (configInfo.getCataloguePrice() == null) {
|
||||
return AjaxResult.error("单价不能为空");
|
||||
}
|
||||
if (configInfo.getQuantity() == null) {
|
||||
return AjaxResult.error("数量不能为空");
|
||||
}
|
||||
configInfo.setPrice(configInfo.getCataloguePrice().multiply(configInfo.getDiscount()).setScale(2, RoundingMode.HALF_UP));
|
||||
configInfo.setAllPrice(configInfo.getPrice().multiply(BigDecimal.valueOf(configInfo.getQuantity())).setScale(2, RoundingMode.HALF_UP));
|
||||
configInfo.setCatalogueAllPrice(configInfo.getCataloguePrice().multiply(BigDecimal.valueOf(configInfo.getQuantity())).setScale(2, RoundingMode.HALF_UP));
|
||||
}
|
||||
|
||||
//保存文件
|
||||
fileLogService.deleteProjectOrderFileLogByOrderIdList(Collections.singletonList( orderId));
|
||||
fileLogService.deleteProjectOrderFileLogByOrderIdList(Collections.singletonList(orderId));
|
||||
ProjectOrderFileLog projectOrderFileLog = new ProjectOrderFileLog();
|
||||
try {
|
||||
String upload = FileUploadUtils.upload(file);
|
||||
|
@ -126,6 +166,8 @@ public class ProjectOrderConfigInfoServiceImpl implements IProjectOrderConfigInf
|
|||
} catch (IOException e) {
|
||||
throw new ServiceException("导入失败,上传文件错误");
|
||||
}
|
||||
projectOrderConfigInfoMapper.insertBatch(orderConfigInfoList);
|
||||
//保存文件
|
||||
projectOrderFileLog.setFileName(file.getOriginalFilename());
|
||||
projectOrderFileLog.setFileType(ProjectOrderFileLog.FileTypeEnum.CONFIG.getCode());
|
||||
projectOrderFileLog.setOrderId(orderId);
|
||||
|
@ -133,30 +175,6 @@ public class ProjectOrderConfigInfoServiceImpl implements IProjectOrderConfigInf
|
|||
projectOrderFileLog.setUploadUser(ShiroUtils.getUserId().toString());
|
||||
fileLogService.insertProjectOrderFileLog(projectOrderFileLog);
|
||||
|
||||
|
||||
|
||||
if (CollUtil.isEmpty(orderConfigInfoList)) {
|
||||
return AjaxResult.error("文件为空");
|
||||
}
|
||||
List<String> productCodeList = orderConfigInfoList.stream().map(ProjectOrderConfigInfo::getProductCode).filter(Objects::nonNull).collect(Collectors.toList());
|
||||
if (productCodeList.isEmpty()) {
|
||||
return AjaxResult.error("文件为空或产品编码为空");
|
||||
}
|
||||
// List<OrderList> orderLists = infoMapper.listOrderListByDeliveryId(deliveryId);
|
||||
// if (orderLists.isEmpty()) {
|
||||
// return AjaxResult.error("发货单中没有产品");
|
||||
// }
|
||||
// List<String> existsProductCodeList = orderLists.stream().map(OrderList::getProductCode).collect(Collectors.toList());
|
||||
// List<String> notExistsProductCodeList = productCodeList.stream().filter(productCode -> !existsProductCodeList.contains(productCode)).distinct().collect(Collectors.toList());
|
||||
// if (!notExistsProductCodeList.isEmpty()) {
|
||||
// return AjaxResult.error(StringUtils.format("编码为[{}]的产品在合同请单中未找到,请确认后重试;", String.join(",", notExistsProductCodeList)));
|
||||
// }
|
||||
|
||||
for (ProjectOrderConfigInfo configInfo : orderConfigInfoList) {
|
||||
configInfo.setOrderId(orderId);
|
||||
}
|
||||
|
||||
projectOrderConfigInfoMapper.insertBatch(orderConfigInfoList);
|
||||
return AjaxResult.success("导入成功");
|
||||
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<result property="customerCode" column="customer_code" />
|
||||
<result property="customerName" column="customer_name" />
|
||||
<result property="industryType" column="industry_type" />
|
||||
<result property="province" column="province" />
|
||||
|
||||
<result property="projectStage" column="project_stage" />
|
||||
<result property="projectGraspDegree" column="project_grasp_degree" />
|
||||
<result property="hzSupportUser" column="hz_support_user" />
|
||||
|
@ -83,7 +83,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="customerName != null and customerName != ''"> and t1.customer_name like concat('%', #{customerName}, '%')</if>
|
||||
<if test="industryType != null and industryType != ''"> and t1.industry_type = #{industryType}</if>
|
||||
<if test="bgProperty != null and bgProperty != ''"> and t1.bg_property = #{bgProperty}</if>
|
||||
<if test="province != null and province != ''"> and t1.province = #{province}</if>
|
||||
|
||||
<if test="projectStage != null and projectStage != ''"> and t1.project_stage = #{projectStage}</if>
|
||||
<if test="projectGraspDegree != null and projectGraspDegree != ''"> and t1.project_grasp_degree = #{projectGraspDegree}</if>
|
||||
<if test="hzSupportUser != null and hzSupportUser != ''"> and t1.hz_support_user = #{hzSupportUser}</if>
|
||||
|
|
Loading…
Reference in New Issue