Explorar el Código

Merge remote-tracking branch 'origin/master'

24282 hace 2 años
padre
commit
3004a934a2

+ 1 - 1
hx-customer/src/main/java/com/fjhx/customer/service/customer/impl/CustomerFollowRecordsServiceImpl.java

@@ -45,7 +45,7 @@ public class CustomerFollowRecordsServiceImpl extends ServiceImpl<CustomerFollow
     public Page<CustomerFollowRecordsVo> getPage(CustomerFollowRecordsSelectDto dto) {
         IWrapper<CustomerFollowRecords> wrapper = getWrapper();
         wrapper.eq("cfr",CustomerFollowRecords::getCustomerId,dto.getCustomerId());//根据客户id过滤
-        wrapper.orderByDesc("cfr", CustomerFollowRecords::getId);
+        wrapper.orderByDesc("cfr", CustomerFollowRecords::getDate);
         Page<CustomerFollowRecordsVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<CustomerFollowRecordsVo> records = page.getRecords();
         //赋值文件列表信息

+ 3 - 0
hx-ehsd/src/main/java/com/fjhx/ehsd/service/freight/impl/FreightForwarderServiceImpl.java

@@ -9,6 +9,7 @@ import com.fjhx.ehsd.entity.freight.po.FreightForwarder;
 import com.fjhx.ehsd.entity.freight.vo.FreightForwarderVo;
 import com.fjhx.ehsd.mapper.freight.FreightForwarderMapper;
 import com.fjhx.ehsd.service.freight.FreightForwarderService;
+import com.fjhx.item.entity.product.po.ProductInfo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.stereotype.Service;
 
@@ -42,11 +43,13 @@ public class FreightForwarderServiceImpl extends ServiceImpl<FreightForwarderMap
 
     @Override
     public void add(FreightForwarderDto freightForwarderDto) {
+        this.nameDuplication(FreightForwarder::getCompanyName, freightForwarderDto.getCompanyName(), "公司名称重复");
         this.save(freightForwarderDto);
     }
 
     @Override
     public void edit(FreightForwarderDto freightForwarderDto) {
+        this.nameDuplication(FreightForwarder::getCompanyName, freightForwarderDto.getCompanyName(), freightForwarderDto.getId(), "公司名称重复");
         this.updateById(freightForwarderDto);
     }
 

+ 8 - 0
hx-item/src/main/java/com/fjhx/item/controller/product/ProductInfoController.java

@@ -113,6 +113,14 @@ public class ProductInfoController {
     }
 
     /**
+     * 产品库明细
+     */
+    @PostMapping("/detailByWdly")
+    public ProductInfoVo detailByWdly(@RequestBody BaseSelectDto dto) {
+        return productInfoService.detailByWdly(dto.getId());
+    }
+
+    /**
      * 产品库新增
      */
     @PostMapping("/add")

+ 105 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/po/ProductInfoWdlyJson.java

@@ -0,0 +1,105 @@
+package com.fjhx.item.entity.product.po;
+
+import java.util.List;
+
+/**
+ * 维多利亚产品信息扩展JSON实体
+ */
+
+public class ProductInfoWdlyJson {
+    /**
+     * 京东供价
+     */
+    private String jdPurchasePrice;
+    /**
+     * 标准售价
+     */
+    private String sellingPrice;
+    /**
+     * 库存清空期限
+     */
+    private String clearancePeriod;
+    /**
+     * 是否组合
+     */
+    private String combination;
+    /**
+     * 新品期
+     */
+    private Integer newProductsDay;
+    /**
+     * 成长期
+     */
+    private Integer growUpDay;
+    /**
+     * 当前周期
+     */
+    private String lifeCycle;
+    /**
+     * 新品预计销量
+     */
+    private String newProductsExpectedSales;
+    /**
+     * 成长期预计销量
+     */
+    private String growUpExpectedSales;
+    /**
+     * 成熟期预计销量
+     */
+    private String matureExpectedSales;
+    /**
+     * 重量
+     */
+    private String weight;
+    /**
+     * 材质面料
+     */
+    private String materialQuality;
+    /**
+     * 适用温度
+     */
+    private String applicableTemp;
+    /**
+     * 销售状态
+     */
+    private String salesStatus;
+
+    /**
+     * 部门id
+     */
+    private Long deptId;
+    /**
+     * 部门名称
+     */
+    private String deptName;
+    /**
+     * 关联产品列表
+     */
+    private List<ProductCombination> productCombinationList;
+
+    class ProductCombination {
+        /**
+         * 关联产品id
+         */
+        private Long linkProductId;
+        /**
+         * 关联产品数量
+         */
+        private String linkQuantity;
+
+        //VO字段
+        /**
+         * 关联产品名称
+         */
+        private String name;
+        /**
+         * 关联产品编号
+         */
+        private String code;
+        /**
+         * 关联产品自定义编号
+         */
+        private String customCode;
+    }
+
+}

+ 2 - 0
hx-item/src/main/java/com/fjhx/item/service/product/ProductInfoService.java

@@ -52,6 +52,8 @@ public interface ProductInfoService extends BaseService<ProductInfo> {
      */
     ProductInfoVo detail(Long id);
 
+    ProductInfoVo detailByWdly(Long id);
+
     /**
      * 产品库新增
      */

+ 37 - 2
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java

@@ -3,6 +3,7 @@ package com.fjhx.item.service.product.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
@@ -269,8 +270,42 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
 
     @Override
     public ProductInfoVo detail(Long id) {
-        ProductInfo ProductInfo = this.getById(id);
-        ProductInfoVo result = BeanUtil.toBean(ProductInfo, ProductInfoVo.class);
+        ProductInfo productInfo = this.getById(id);
+        ProductInfoVo result = BeanUtil.toBean(productInfo, ProductInfoVo.class);
+        return result;
+    }
+
+    @Override
+    public ProductInfoVo detailByWdly(Long id) {
+        ProductInfoVo result = detail(id);
+        //赋值维多利亚组合产品信息
+        JSONObject json = JSONObject.parseObject(result.getVictoriatouristJson());
+        List<Long> ids = new ArrayList<>();
+        if(ObjectUtil.isNotEmpty(json)){
+            JSONArray productCombinationList = json.getJSONArray("productCombinationList");
+            for (int i=0;i<productCombinationList.size();i++) {
+                JSONObject item = productCombinationList.getJSONObject(i);
+                ids.add(item.getLong("linkProductId"));
+            }
+            if(ObjectUtil.isNotEmpty(ids)){
+                List<ProductInfo> productInfoList = this.listByIds(ids);
+                Map<Long, ProductInfo> productInfoMap = productInfoList.stream().collect(Collectors.toMap(ProductInfo::getId, Function.identity()));
+                JSONArray jsonArray = new JSONArray();
+                for (int i=0;i<productCombinationList.size();i++) {
+                    JSONObject item = productCombinationList.getJSONObject(i);
+                    ProductInfo productInfo1 = productInfoMap.get(item.getLong("linkProductId"));
+                    if(ObjectUtil.isNotEmpty(productInfo1)) {
+                        item.put("code",productInfo1.getCode());
+                        item.put("customCode",productInfo1.getCustomCode());
+                        item.put("name",productInfo1.getName());
+                    }
+                    jsonArray.add(item);
+                }
+                json.put("productCombinationList",jsonArray);
+                result.setVictoriatouristJson(JSONObject.toJSONString(json));
+            }
+        }
+        result.getVictoriatouristJson();
         return result;
     }
 

+ 17 - 1
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdBackQualityDetailsServiceImpl.java

@@ -2,8 +2,10 @@ package com.fjhx.victoriatourist.service.jd.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.victoriatourist.entity.jd.dto.JdBackQualityDetailsDto;
 import com.fjhx.victoriatourist.entity.jd.dto.JdBackQualityDetailsSelectDto;
@@ -77,7 +79,7 @@ public class JdBackQualityDetailsServiceImpl extends ServiceImpl<JdBackQualityDe
         return result;
     }
 
-    @Transactional(rollbackFor = Exception.class)
+    @DSTransactional
     @Override
     public void add(List<JdBackQualityDetailsDto> jdBackQualityDetailsDtoList) {
         if(ObjectUtil.isEmpty(jdBackQualityDetailsDtoList)){
@@ -95,6 +97,20 @@ public class JdBackQualityDetailsServiceImpl extends ServiceImpl<JdBackQualityDe
             //减少待质检数量
             BigDecimal quality = jdBackQualityDetailsDto.getQualifiedQuantity().add(jdBackQualityDetailsDto.getDisqualificationQuantity());
             JdBackQualityWait jdBackQualityWait = jdBackQualityWaitMap.get(jdBackQualityDetailsDto.getProductId());
+            if(ObjectUtil.isEmpty(jdBackQualityWait)){
+                ProductInfo productInfo = productInfoService.getById(jdBackQualityDetailsDto.getProductId());
+                if(ObjectUtil.isEmpty(productInfo)){
+                    throw new ServiceException("产品不存在,产品id"+jdBackQualityDetailsDto.getProductId());
+                }
+                throw new ServiceException("待质检数据不存在,产品-"+productInfo.getName());
+            }
+            if(jdBackQualityWait.getQuantity().subtract(quality).compareTo(BigDecimal.ZERO)<0){
+                ProductInfo productInfo = productInfoService.getById(jdBackQualityDetailsDto.getProductId());
+                if(ObjectUtil.isEmpty(productInfo)){
+                    throw new ServiceException("产品不存在,产品id"+jdBackQualityDetailsDto.getProductId());
+                }
+                throw new ServiceException("质检数量大于待质检数量请检查,产品id"+productInfo.getName());
+            }
 //            BigDecimal oldQuantity = jdBackQualityWait.getQuantity();
 //            jdBackQualityWait.setQuantity(oldQuantity.subtract(quality));
             jdBackQualityWaitService.update(q -> q

+ 65 - 60
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdBackServiceImpl.java

@@ -66,9 +66,9 @@ public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> impleme
     @Override
     public Page<JdBackVo> getPage(JdBackSelectDto dto) {
         IWrapper<JdBack> wrapper = getWrapper();
-        wrapper.like("jb",JdBackVo::getLogisticsCode, dto.getKeyword());
-        wrapper.eq("jb",JdBackVo::getType, dto.getType());
-        wrapper.eq("jb",JdBackVo::getStatus, dto.getStatus());
+        wrapper.like("jb", JdBackVo::getLogisticsCode, dto.getKeyword());
+        wrapper.eq("jb", JdBackVo::getType, dto.getType());
+        wrapper.eq("jb", JdBackVo::getStatus, dto.getStatus());
         wrapper.orderByDesc("jb", JdBack::getId);
         Page<JdBackVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<JdBackVo> records = page.getRecords();
@@ -127,6 +127,7 @@ public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> impleme
         logisticsInfos.setStatus(0);
         logisticsInfos.setInStockStatus(10);
         logisticsInfos.setBusinessId(jdBackDto.getId());
+        logisticsInfos.setBusinessType(4);//京东退货
         logisticsInfos.setWarehouseId(jdBackDto.getWarehouseId());
         logisticsInfos.setLogisticsCompanyCode(jdBackDto.getLogisticsCompanyCode());
         logisticsInfos.setCode(jdBackDto.getLogisticsCode());
@@ -150,70 +151,74 @@ public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> impleme
     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");
+        if (ObjectUtil.isEmpty(productCodeList)) {
+            throw new ServiceException("退货列表为空");
+        }
+        List<ProductInfo> productList = productInfoService.list(q -> q.in(ProductInfo::getCustomCode, productCodeList));
+        if (productList.size() != jdBackDetailsList.size()) {
+            throw new ServiceException("存在未知产品");
+        }
+        Map<String, ProductInfo> productInfoMap = productList.stream().collect(Collectors.toMap(ProductInfo::getCustomCode, 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");
 
-                            //根据退货数量*组合产品对应组成产品所需要的数量计算待质检数量
-                            BigDecimal quantity0 = jdBackDetails.getQuantity().multiply(linkQuantity);
+                        //根据退货数量*组合产品对应组成产品所需要的数量计算待质检数量
+                        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(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.list(q -> q.in(JdBackQualityWait::getProductId, 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()));
+            //如果不是组合产品
+            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.list(q -> q.in(JdBackQualityWait::getProductId, 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 = quantity + " + entry.getValue()));
+            //添加部分直接丢list统一处理
+            if (ObjectUtil.isEmpty(oldJdBackQualityWait.getId())) {
+                addJdBackQualityWaitList.add(oldJdBackQualityWait);
             }
-            //统一处理添加部分
-            jdBackQualityWaitService.saveBatch(addJdBackQualityWaitList);
+            //处理更新部分
+            jdBackQualityWaitService.update(q -> q
+                    .eq(JdBackQualityWait::getId, oldJdBackQualityWait.getId())
+                    .setSql("quantity = quantity + " + entry.getValue()));
         }
+        //统一处理添加部分
+        jdBackQualityWaitService.saveBatch(addJdBackQualityWaitList);
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -271,7 +276,7 @@ public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> impleme
         }
 
         List<String> productCodeString = jdBackDetailsList.stream().map(JdBackDetails::getProductCode).distinct().collect(Collectors.toList());
-        List<String> list = productInfoService.listObject(ProductInfo::getCode, q -> q.in(ProductInfo::getCode, productCodeString));
+        List<String> list = productInfoService.listObject(ProductInfo::getCustomCode, q -> q.in(ProductInfo::getCustomCode, productCodeString));
         StringJoiner stringJoiner = new StringJoiner(",");
         if (list.size() < productCodeString.size()) {
             productCodeString.forEach(item -> {

+ 1 - 1
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/utils/CodeEnum.java

@@ -29,7 +29,7 @@ public enum CodeEnum {
     //京东退货质检
     JD_BACK_QUALITY("PA", "yyMM-", "code", 3, JdBackQualityDetailsService.class),
     //异常记录
-    ABNORMAL("PO", "yyMM-", "code", 3, AbnormalInfoService.class);
+    ABNORMAL("PO", "yyMM-", "link_code", 3, AbnormalInfoService.class);
 
     CodeEnum(String prefix, String dateFormat, String codeFieldName, Integer length, Class<? extends IService<?>> serviceCls) {
         this.prefix = prefix;