diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderConfigInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderConfigInfoServiceImpl.java index 3b8405bb..f20eb1b2 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderConfigInfoServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderConfigInfoServiceImpl.java @@ -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 productInfos = productInfoService.selectProductInfoList(new ProductInfo()); + Map 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 productCodeList = orderConfigInfoList.stream().map(ProjectOrderConfigInfo::getProductCode).filter(Objects::nonNull).collect(Collectors.toList()); - if (productCodeList.isEmpty()) { - return AjaxResult.error("文件为空或产品编码为空"); - } -// List orderLists = infoMapper.listOrderListByDeliveryId(deliveryId); -// if (orderLists.isEmpty()) { -// return AjaxResult.error("发货单中没有产品"); -// } -// List existsProductCodeList = orderLists.stream().map(OrderList::getProductCode).collect(Collectors.toList()); -// List 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("导入成功"); } diff --git a/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml index b6e733b3..e4166995 100644 --- a/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml @@ -11,7 +11,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + @@ -83,7 +83,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and t1.customer_name like concat('%', #{customerName}, '%') and t1.industry_type = #{industryType} and t1.bg_property = #{bgProperty} - and t1.province = #{province} + and t1.project_stage = #{projectStage} and t1.project_grasp_degree = #{projectGraspDegree} and t1.hz_support_user = #{hzSupportUser}