Browse Source

Merge remote-tracking branch 'origin/master'

24282 2 years ago
parent
commit
fc90e45d82

+ 19 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/controller/jd/JdBackQualityWaitController.java

@@ -0,0 +1,19 @@
+package com.fjhx.victoriatourist.controller.jd;
+
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * <p>
+ * 京东退货待质检 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-18
+ */
+@RestController
+@RequestMapping("/jdBackQualityWait")
+public class JdBackQualityWaitController {
+
+
+}

+ 17 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/jd/dto/JdBackQualityWaitDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.victoriatourist.entity.jd.dto;
+
+import com.fjhx.victoriatourist.entity.jd.po.JdBackQualityWait;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 京东退货待质检新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+public class JdBackQualityWaitDto extends JdBackQualityWait {
+
+}

+ 17 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/jd/dto/JdBackQualityWaitSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.victoriatourist.entity.jd.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 京东退货待质检列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+public class JdBackQualityWaitSelectDto extends BaseSelectDto {
+
+}

+ 3 - 1
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/jd/po/JdBackDetails.java

@@ -4,6 +4,8 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.ruoyi.common.core.domain.BasePo;
 import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.math.BigDecimal;
 import java.util.Date;
 import lombok.Getter;
 import lombok.Setter;
@@ -66,7 +68,7 @@ public class JdBackDetails extends BasePo {
     /**
      * 退货数量
      */
-    private Long quantity;
+    private BigDecimal quantity;
 
     /**
      * 备件库

+ 34 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/jd/po/JdBackQualityWait.java

@@ -0,0 +1,34 @@
+package com.fjhx.victoriatourist.entity.jd.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 京东退货待质检
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+@TableName("jd_back_quality_wait")
+public class JdBackQualityWait extends BasePo {
+
+    /**
+     * 产品id
+     */
+    private Long productId;
+
+    /**
+     * 待质检数量
+     */
+    private BigDecimal quantity;
+
+}

+ 17 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/jd/vo/JdBackQualityWaitVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.victoriatourist.entity.jd.vo;
+
+import com.fjhx.victoriatourist.entity.jd.po.JdBackQualityWait;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 京东退货待质检列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+public class JdBackQualityWaitVo extends JdBackQualityWait {
+
+}

+ 17 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/mapper/jd/JdBackQualityWaitMapper.java

@@ -0,0 +1,17 @@
+package com.fjhx.victoriatourist.mapper.jd;
+
+import com.fjhx.victoriatourist.entity.jd.po.JdBackQualityWait;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * <p>
+ * 京东退货待质检 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-18
+ */
+public interface JdBackQualityWaitMapper extends BaseMapper<JdBackQualityWait> {
+
+}

+ 17 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/JdBackQualityWaitService.java

@@ -0,0 +1,17 @@
+package com.fjhx.victoriatourist.service.jd;
+
+import com.fjhx.victoriatourist.entity.jd.po.JdBackQualityWait;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * 京东退货待质检 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-18
+ */
+public interface JdBackQualityWaitService extends BaseService<JdBackQualityWait> {
+
+}

+ 21 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdBackQualityWaitServiceImpl.java

@@ -0,0 +1,21 @@
+package com.fjhx.victoriatourist.service.jd.impl;
+
+import com.fjhx.victoriatourist.entity.jd.po.JdBackQualityWait;
+import com.fjhx.victoriatourist.mapper.jd.JdBackQualityWaitMapper;
+import com.fjhx.victoriatourist.service.jd.JdBackQualityWaitService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * <p>
+ * 京东退货待质检 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-18
+ */
+@Service
+public class JdBackQualityWaitServiceImpl extends ServiceImpl<JdBackQualityWaitMapper, JdBackQualityWait> implements JdBackQualityWaitService {
+
+}

+ 95 - 38
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdBackServiceImpl.java

@@ -2,12 +2,12 @@ package com.fjhx.victoriatourist.service.jd.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 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.toolkit.DynamicDataSourceContextHolder;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 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.service.product.ProductInfoService;
 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.po.JdBack;
 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.logistics.po.LogisticsInfos;
 import com.fjhx.victoriatourist.mapper.jd.JdBackMapper;
 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.logistics.LogisticsInfosService;
 import com.fjhx.wms.entity.warehouse.po.Warehouse;
 import com.fjhx.wms.service.warehouse.WarehouseService;
 import com.obs.services.internal.ServiceException;
+import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 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;
 
 
@@ -59,13 +61,15 @@ public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> impleme
     JdBackDetailsService jdBackDetailsService;
     @Autowired
     ProductInfoService productInfoService;
+    @Autowired
+    JdBackQualityWaitService jdBackQualityWaitService;
 
     @Override
     public Page<JdBackVo> getPage(JdBackSelectDto dto) {
         IWrapper<JdBack> wrapper = getWrapper();
         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);
         Page<JdBackVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<JdBackVo> records = page.getRecords();
@@ -92,18 +96,18 @@ public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> impleme
         JdBackVo result = BeanUtil.toBean(JdBack, JdBackVo.class);
         //赋值物流信息
         LogisticsInfos logisticsInfos = logisticsInfosService.getOne(q -> q.eq(LogisticsInfos::getBusinessId, result.getId()));
-        if(ObjectUtil.isNotEmpty(logisticsInfos)) {
+        if (ObjectUtil.isNotEmpty(logisticsInfos)) {
             result.setLogisticsCompanyCode(logisticsInfos.getLogisticsCompanyCode());
             result.setLogisticsCode(logisticsInfos.getCode());
         }
         //赋值仓库名称
         Warehouse warehouse = warehouseService.getById(result.getWarehouseId());
-        if(ObjectUtil.isNotEmpty(warehouse)){
+        if (ObjectUtil.isNotEmpty(warehouse)) {
             result.setWarehouseName(warehouse.getName());
         }
         //赋值物流公司名称
         CompanyInfo companyInfo = companyInfoService.getOne(q -> q.eq(CompanyInfo::getCode, result.getLogisticsCompanyCode()));
-        if(ObjectUtil.isNotEmpty(companyInfo)){
+        if (ObjectUtil.isNotEmpty(companyInfo)) {
             result.setLogisticsCompanyName(companyInfo.getName());
         }
         //赋值退货明细
@@ -112,7 +116,7 @@ public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> impleme
         return result;
     }
 
-    @Transactional(rollbackFor = Exception.class)
+    @DSTransactional
     @Override
     public void add(JdBackDto jdBackDto) {
         jdBackDto.setType(1);
@@ -130,22 +134,87 @@ public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> impleme
         logisticsInfosService.save(logisticsInfos);
         //创建退货明细
         List<JdBackDetails> jdBackDetailsList = jdBackDto.getJdBackDetailsList();
-        if(ObjectUtil.isNotEmpty(jdBackDetailsList)) {
+        if (ObjectUtil.isNotEmpty(jdBackDetailsList)) {
             for (JdBackDetails jdBackDetails : jdBackDetailsList) {
                 jdBackDetails.setJdBackId(jdBackDto.getId());
             }
             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)
@@ -159,12 +228,12 @@ public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> impleme
         logisticsInfosService.updateById(logisticsInfos);
         //更新退货明细
         List<JdBackDetails> jdBackDetailsList = jdBackDto.getJdBackDetailsList();
-        if(ObjectUtil.isEmpty(jdBackDetailsList)){
+        if (ObjectUtil.isEmpty(jdBackDetailsList)) {
             return;
         }
         //处理删除部分
         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) {
             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);
 
         //根据运单号生成物流信息
         //根据运单号分组

+ 4 - 0
hx-victoriatourist/src/main/resources/mapper/jd/JdBackQualityWaitMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.victoriatourist.mapper.jd.JdBackQualityWaitMapper">
+</mapper>