|
@@ -2,12 +2,12 @@ package com.fjhx.victoriatourist.service.jd.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
|
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
|
-import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
-import com.fjhx.common.constant.SourceConstant;
|
|
|
|
import com.fjhx.item.entity.product.po.ProductInfo;
|
|
import com.fjhx.item.entity.product.po.ProductInfo;
|
|
import com.fjhx.item.service.product.ProductInfoService;
|
|
import com.fjhx.item.service.product.ProductInfoService;
|
|
import com.fjhx.item.util.excel.util.ExcelUtil;
|
|
import com.fjhx.item.util.excel.util.ExcelUtil;
|
|
@@ -17,25 +17,27 @@ import com.fjhx.victoriatourist.entity.jd.dto.JdBackDto;
|
|
import com.fjhx.victoriatourist.entity.jd.dto.JdBackSelectDto;
|
|
import com.fjhx.victoriatourist.entity.jd.dto.JdBackSelectDto;
|
|
import com.fjhx.victoriatourist.entity.jd.po.JdBack;
|
|
import com.fjhx.victoriatourist.entity.jd.po.JdBack;
|
|
import com.fjhx.victoriatourist.entity.jd.po.JdBackDetails;
|
|
import com.fjhx.victoriatourist.entity.jd.po.JdBackDetails;
|
|
|
|
+import com.fjhx.victoriatourist.entity.jd.po.JdBackQualityWait;
|
|
import com.fjhx.victoriatourist.entity.jd.vo.JdBackVo;
|
|
import com.fjhx.victoriatourist.entity.jd.vo.JdBackVo;
|
|
import com.fjhx.victoriatourist.entity.logistics.po.LogisticsInfos;
|
|
import com.fjhx.victoriatourist.entity.logistics.po.LogisticsInfos;
|
|
import com.fjhx.victoriatourist.mapper.jd.JdBackMapper;
|
|
import com.fjhx.victoriatourist.mapper.jd.JdBackMapper;
|
|
import com.fjhx.victoriatourist.service.jd.JdBackDetailsService;
|
|
import com.fjhx.victoriatourist.service.jd.JdBackDetailsService;
|
|
|
|
+import com.fjhx.victoriatourist.service.jd.JdBackQualityWaitService;
|
|
import com.fjhx.victoriatourist.service.jd.JdBackService;
|
|
import com.fjhx.victoriatourist.service.jd.JdBackService;
|
|
import com.fjhx.victoriatourist.service.logistics.LogisticsInfosService;
|
|
import com.fjhx.victoriatourist.service.logistics.LogisticsInfosService;
|
|
import com.fjhx.wms.entity.warehouse.po.Warehouse;
|
|
import com.fjhx.wms.entity.warehouse.po.Warehouse;
|
|
import com.fjhx.wms.service.warehouse.WarehouseService;
|
|
import com.fjhx.wms.service.warehouse.WarehouseService;
|
|
import com.obs.services.internal.ServiceException;
|
|
import com.obs.services.internal.ServiceException;
|
|
|
|
+import com.ruoyi.common.core.domain.BaseIdPo;
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
|
-import java.util.List;
|
|
|
|
-import java.util.Map;
|
|
|
|
-import java.util.StringJoiner;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
+import java.util.*;
|
|
|
|
+import java.util.function.Function;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
@@ -59,13 +61,15 @@ public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> impleme
|
|
JdBackDetailsService jdBackDetailsService;
|
|
JdBackDetailsService jdBackDetailsService;
|
|
@Autowired
|
|
@Autowired
|
|
ProductInfoService productInfoService;
|
|
ProductInfoService productInfoService;
|
|
|
|
+ @Autowired
|
|
|
|
+ JdBackQualityWaitService jdBackQualityWaitService;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public Page<JdBackVo> getPage(JdBackSelectDto dto) {
|
|
public Page<JdBackVo> getPage(JdBackSelectDto dto) {
|
|
IWrapper<JdBack> wrapper = getWrapper();
|
|
IWrapper<JdBack> wrapper = getWrapper();
|
|
wrapper.like(JdBackVo::getLogisticsCode, dto.getKeyword());
|
|
wrapper.like(JdBackVo::getLogisticsCode, dto.getKeyword());
|
|
- wrapper.eq(JdBackVo::getType,dto.getType());
|
|
|
|
- wrapper.eq(JdBackVo::getStatus,dto.getStatus());
|
|
|
|
|
|
+ wrapper.eq(JdBackVo::getType, dto.getType());
|
|
|
|
+ wrapper.eq(JdBackVo::getStatus, dto.getStatus());
|
|
wrapper.orderByDesc("jb", JdBack::getId);
|
|
wrapper.orderByDesc("jb", JdBack::getId);
|
|
Page<JdBackVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
|
|
Page<JdBackVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
|
|
List<JdBackVo> records = page.getRecords();
|
|
List<JdBackVo> records = page.getRecords();
|
|
@@ -92,18 +96,18 @@ public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> impleme
|
|
JdBackVo result = BeanUtil.toBean(JdBack, JdBackVo.class);
|
|
JdBackVo result = BeanUtil.toBean(JdBack, JdBackVo.class);
|
|
//赋值物流信息
|
|
//赋值物流信息
|
|
LogisticsInfos logisticsInfos = logisticsInfosService.getOne(q -> q.eq(LogisticsInfos::getBusinessId, result.getId()));
|
|
LogisticsInfos logisticsInfos = logisticsInfosService.getOne(q -> q.eq(LogisticsInfos::getBusinessId, result.getId()));
|
|
- if(ObjectUtil.isNotEmpty(logisticsInfos)) {
|
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(logisticsInfos)) {
|
|
result.setLogisticsCompanyCode(logisticsInfos.getLogisticsCompanyCode());
|
|
result.setLogisticsCompanyCode(logisticsInfos.getLogisticsCompanyCode());
|
|
result.setLogisticsCode(logisticsInfos.getCode());
|
|
result.setLogisticsCode(logisticsInfos.getCode());
|
|
}
|
|
}
|
|
//赋值仓库名称
|
|
//赋值仓库名称
|
|
Warehouse warehouse = warehouseService.getById(result.getWarehouseId());
|
|
Warehouse warehouse = warehouseService.getById(result.getWarehouseId());
|
|
- if(ObjectUtil.isNotEmpty(warehouse)){
|
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(warehouse)) {
|
|
result.setWarehouseName(warehouse.getName());
|
|
result.setWarehouseName(warehouse.getName());
|
|
}
|
|
}
|
|
//赋值物流公司名称
|
|
//赋值物流公司名称
|
|
CompanyInfo companyInfo = companyInfoService.getOne(q -> q.eq(CompanyInfo::getCode, result.getLogisticsCompanyCode()));
|
|
CompanyInfo companyInfo = companyInfoService.getOne(q -> q.eq(CompanyInfo::getCode, result.getLogisticsCompanyCode()));
|
|
- if(ObjectUtil.isNotEmpty(companyInfo)){
|
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(companyInfo)) {
|
|
result.setLogisticsCompanyName(companyInfo.getName());
|
|
result.setLogisticsCompanyName(companyInfo.getName());
|
|
}
|
|
}
|
|
//赋值退货明细
|
|
//赋值退货明细
|
|
@@ -112,7 +116,7 @@ public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> impleme
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
|
+ @DSTransactional
|
|
@Override
|
|
@Override
|
|
public void add(JdBackDto jdBackDto) {
|
|
public void add(JdBackDto jdBackDto) {
|
|
jdBackDto.setType(1);
|
|
jdBackDto.setType(1);
|
|
@@ -130,22 +134,87 @@ public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> impleme
|
|
logisticsInfosService.save(logisticsInfos);
|
|
logisticsInfosService.save(logisticsInfos);
|
|
//创建退货明细
|
|
//创建退货明细
|
|
List<JdBackDetails> jdBackDetailsList = jdBackDto.getJdBackDetailsList();
|
|
List<JdBackDetails> jdBackDetailsList = jdBackDto.getJdBackDetailsList();
|
|
- if(ObjectUtil.isNotEmpty(jdBackDetailsList)) {
|
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(jdBackDetailsList)) {
|
|
for (JdBackDetails jdBackDetails : jdBackDetailsList) {
|
|
for (JdBackDetails jdBackDetails : jdBackDetailsList) {
|
|
jdBackDetails.setJdBackId(jdBackDto.getId());
|
|
jdBackDetails.setJdBackId(jdBackDto.getId());
|
|
}
|
|
}
|
|
jdBackDetailsService.saveBatch(jdBackDetailsList);
|
|
jdBackDetailsService.saveBatch(jdBackDetailsList);
|
|
}
|
|
}
|
|
|
|
+ //创建待质检记录
|
|
|
|
+ createJdBackQualityWait(jdBackDetailsList);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 根据退货列表创建待质检记录通用方法
|
|
|
|
+ */
|
|
|
|
+ @DSTransactional
|
|
|
|
+ public void createJdBackQualityWait(List<JdBackDetails> jdBackDetailsList) {
|
|
|
|
+ Map<Long, BigDecimal> map = new HashMap<>();
|
|
|
|
+ List<String> productCodeList = jdBackDetailsList.stream().map(JdBackDetails::getProductCode).collect(Collectors.toList());
|
|
|
|
+ if (ObjectUtil.isNotEmpty(productCodeList)) {
|
|
|
|
+ List<ProductInfo> productList = productInfoService.list(q -> q.in(ProductInfo::getCode, productCodeList));
|
|
|
|
+ Map<String, ProductInfo> productInfoMap = productList.stream().collect(Collectors.toMap(ProductInfo::getCode, Function.identity()));
|
|
|
|
+ for (JdBackDetails jdBackDetails : jdBackDetailsList) {
|
|
|
|
+ ProductInfo productInfo = productInfoMap.get(jdBackDetails.getProductCode());
|
|
|
|
+ if (ObjectUtil.isEmpty(productInfo)) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ //判断是否存在扩展json
|
|
|
|
+ String victoriatouristJson = productInfo.getVictoriatouristJson();
|
|
|
|
+ if (ObjectUtil.isNotEmpty(victoriatouristJson)) {
|
|
|
|
+ JSONObject json = JSONObject.parseObject(victoriatouristJson);
|
|
|
|
+ //判断是否是组合
|
|
|
|
+ if (1 == json.getInteger("combination")) {
|
|
|
|
+ JSONArray productCombinationList = json.getJSONArray("productCombinationList");
|
|
|
|
+ if(ObjectUtil.isEmpty(productCombinationList)){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ for (int i = 0; i < productCombinationList.size(); i++) {
|
|
|
|
+ JSONObject productCombination = productCombinationList.getJSONObject(i);
|
|
|
|
+ Long linkProductId = productCombination.getLong("linkProductId");
|
|
|
|
+ BigDecimal linkQuantity = productCombination.getBigDecimal("linkQuantity");
|
|
|
|
|
|
-// //创建质检信息
|
|
|
|
-// QualityInfo qualityInfo = new QualityInfo();
|
|
|
|
-// qualityInfo.setType(2);
|
|
|
|
-// qualityInfo.setCode(CodeEnum.QUALITY.getCode());
|
|
|
|
-// qualityInfo.setLogisticsInfoId(jdBackVo.getId());
|
|
|
|
-//// qualityInfo.setLogisticsInfoCode(entry.getValue().get(0).getBackCode());
|
|
|
|
-// qualityInfo.setStatus(QualityStatusEnum.STATUS_1.getKey());
|
|
|
|
-// qualityInfo.setResultType(StatusConstant.YES);
|
|
|
|
-// qualityInfoService.save(qualityInfo);
|
|
|
|
|
|
+ //根据退货数量*组合产品对应组成产品所需要的数量计算待质检数量
|
|
|
|
+ BigDecimal quantity0 = jdBackDetails.getQuantity().multiply(linkQuantity);
|
|
|
|
+
|
|
|
|
+ BigDecimal quantity = map.getOrDefault(linkProductId, BigDecimal.ZERO);
|
|
|
|
+ map.put(productInfo.getId(), quantity.add(quantity0));
|
|
|
|
+ }
|
|
|
|
+ //组合产品处理完直接结束
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //如果不是组合产品
|
|
|
|
+ BigDecimal quantity = map.getOrDefault(productInfo.getId(), BigDecimal.ZERO);
|
|
|
|
+ map.put(productInfo.getId(), quantity.add(jdBackDetails.getQuantity()));
|
|
|
|
+ }
|
|
|
|
+ //创建待质检记录
|
|
|
|
+ if(ObjectUtil.isEmpty(map)){
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ List<JdBackQualityWait> addJdBackQualityWaitList = new ArrayList<>();
|
|
|
|
+ //获取已存在的待质检产品列表
|
|
|
|
+ List<JdBackQualityWait> jdBackQualityWaitList1 = jdBackQualityWaitService.listByIds(map.keySet());
|
|
|
|
+ Map<Long, JdBackQualityWait> JdBackQualityWaitMap = jdBackQualityWaitList1.stream().collect(Collectors.toMap(JdBackQualityWait::getProductId,Function.identity()));
|
|
|
|
+ for (Map.Entry<Long, BigDecimal> entry : map.entrySet()) {
|
|
|
|
+ JdBackQualityWait oldJdBackQualityWait = JdBackQualityWaitMap.getOrDefault(entry.getKey(),new JdBackQualityWait());
|
|
|
|
+ oldJdBackQualityWait.setProductId(entry.getKey());
|
|
|
|
+ //计算历史待质检+当前待质检
|
|
|
|
+ BigDecimal oldQuantity = oldJdBackQualityWait.getQuantity()==null?BigDecimal.ZERO:oldJdBackQualityWait.getQuantity();
|
|
|
|
+ oldJdBackQualityWait.setQuantity( oldQuantity.add(entry.getValue()));
|
|
|
|
+
|
|
|
|
+ //添加部分直接丢list统一处理
|
|
|
|
+ if(ObjectUtil.isEmpty(oldJdBackQualityWait.getId())){
|
|
|
|
+ addJdBackQualityWaitList.add(oldJdBackQualityWait);
|
|
|
|
+ }
|
|
|
|
+ //处理更新部分
|
|
|
|
+ jdBackQualityWaitService.update(q -> q
|
|
|
|
+ .eq(JdBackQualityWait::getId, oldJdBackQualityWait.getId())
|
|
|
|
+ .setSql("quantity = " + oldQuantity));
|
|
|
|
+ }
|
|
|
|
+ //统一处理添加部分
|
|
|
|
+ jdBackQualityWaitService.saveBatch(addJdBackQualityWaitList);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@@ -159,12 +228,12 @@ public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> impleme
|
|
logisticsInfosService.updateById(logisticsInfos);
|
|
logisticsInfosService.updateById(logisticsInfos);
|
|
//更新退货明细
|
|
//更新退货明细
|
|
List<JdBackDetails> jdBackDetailsList = jdBackDto.getJdBackDetailsList();
|
|
List<JdBackDetails> jdBackDetailsList = jdBackDto.getJdBackDetailsList();
|
|
- if(ObjectUtil.isEmpty(jdBackDetailsList)){
|
|
|
|
|
|
+ if (ObjectUtil.isEmpty(jdBackDetailsList)) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
//处理删除部分
|
|
//处理删除部分
|
|
List<Long> jdBackDetailsIds = jdBackDetailsList.stream().filter(item -> item.getId() != null).map(JdBackDetails::getId).collect(Collectors.toList());
|
|
List<Long> jdBackDetailsIds = jdBackDetailsList.stream().filter(item -> item.getId() != null).map(JdBackDetails::getId).collect(Collectors.toList());
|
|
- jdBackDetailsService.remove(q->q.eq(JdBackDetails::getJdBackId,jdBackDto.getId()).notIn(JdBackDetails::getId,jdBackDetailsIds));
|
|
|
|
|
|
+ jdBackDetailsService.remove(q -> q.eq(JdBackDetails::getJdBackId, jdBackDto.getId()).notIn(JdBackDetails::getId, jdBackDetailsIds));
|
|
//处理新增部分
|
|
//处理新增部分
|
|
for (JdBackDetails jdBackDetails : jdBackDetailsList) {
|
|
for (JdBackDetails jdBackDetails : jdBackDetailsList) {
|
|
jdBackDetails.setJdBackId(jdBackDto.getId());
|
|
jdBackDetails.setJdBackId(jdBackDto.getId());
|
|
@@ -223,20 +292,8 @@ public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> impleme
|
|
|
|
|
|
});
|
|
});
|
|
|
|
|
|
-// Map<Long, List<JdBackDetails>> collect = jdBackDetailsList.stream().collect(Collectors.groupingBy(JdBackDetails::getJdBackId));
|
|
|
|
-// List<QualityInfo> qualityInfoList = new ArrayList<>();
|
|
|
|
-// for (Map.Entry<Long, List<JdBackDetails>> entry : collect.entrySet()) {
|
|
|
|
-// // 添加质检
|
|
|
|
-// QualityInfo qualityInfo = new QualityInfo();
|
|
|
|
-// qualityInfo.setType(2);
|
|
|
|
-// qualityInfo.setCode(CodeEnum.QUALITY.getCode());
|
|
|
|
-// qualityInfo.setLogisticsInfoId(entry.getKey());
|
|
|
|
-// qualityInfo.setLogisticsInfoCode(entry.getValue().get(0).getBackCode());
|
|
|
|
-// qualityInfo.setStatus(QualityStatusEnum.STATUS_1.getKey());
|
|
|
|
-// qualityInfo.setResultType(StatusConstant.YES);
|
|
|
|
-// qualityInfoList.add(qualityInfo);
|
|
|
|
-// }
|
|
|
|
-// qualityInfoService.saveBatch(qualityInfoList);
|
|
|
|
|
|
+ //创建待质检记录
|
|
|
|
+ createJdBackQualityWait(jdBackDetailsList);
|
|
|
|
|
|
//根据运单号生成物流信息
|
|
//根据运单号生成物流信息
|
|
//根据运单号分组
|
|
//根据运单号分组
|