Browse Source

同步库存和状态

刘俊驰 1 year ago
parent
commit
b0dddda4d4

+ 2 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/entity/GoodsSubModel.java

@@ -7,5 +7,7 @@ public class GoodsSubModel {
 
     private Integer mallGoodsId;
 
+    private Integer skuId;
+
     private Boolean goodsStatus;
 }

+ 0 - 10
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/dto/OrderVo.java

@@ -23,16 +23,6 @@ public class OrderVo extends OmsOrder {
     @ApiModelProperty("用户类型 STUDENT:学生  TEACHER:老师")
     private String userType;
 
-    @ApiModelProperty("学校名称")
-    private String schoolName;
-
-    public String getSchoolName() {
-        return schoolName;
-    }
-
-    public void setSchoolName(String schoolName) {
-        this.schoolName = schoolName;
-    }
 
     public String getUserId() {
         return userId;

+ 2 - 0
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/OmsOrderService.java

@@ -25,6 +25,8 @@ public interface OmsOrderService {
     @Transactional
     int delivery(List<OmsOrderDeliveryParam> deliveryParamList);
 
+    void syncSkuStock(List<Long> skuIds);
+
     /**
      * 批量关闭订单
      */

+ 22 - 5
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderServiceImpl.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.admin.service.impl;
 
 import com.github.pagehelper.PageHelper;
+import com.google.common.collect.Lists;
 import com.ym.mec.common.dto.SchoolDto;
 import com.ym.mec.common.entity.GoodsSubStockModel;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -9,7 +10,6 @@ import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.web.WebFeignService;
 import com.yonge.cooleshow.admin.dao.OmsOrderDao;
 import com.yonge.cooleshow.admin.dao.OmsOrderOperateHistoryDao;
-import com.yonge.cooleshow.admin.dao.PmsProductSkuStockRecordDao;
 import com.yonge.cooleshow.admin.dto.*;
 import com.yonge.cooleshow.admin.dto.search.OrderStatisticalSearch;
 import com.yonge.cooleshow.admin.dto.search.UserStatisticalSearch;
@@ -89,7 +89,7 @@ public class OmsOrderServiceImpl implements OmsOrderService {
                     if (o.getSourceType() == 2) {
                         SchoolDto schoolDto = schoolDtoMap.get(o.getMemberId());
                         if (schoolDto != null) {
-                            o.setSchoolName(schoolDto.getName());
+                            o.setMemberUsername(schoolDto.getName());
                         }
                     }
                 });
@@ -227,6 +227,13 @@ public class OmsOrderServiceImpl implements OmsOrderService {
         }
 
         // 调用三方库存更新接口
+        syncSkuStock(skuIds);
+
+        return count;
+    }
+
+    @Override
+    public void syncSkuStock(List<Long> skuIds) {
         Map<Long, PmsSkuStock> skuStockMap = pmsSkuStockService.getMapByIds(skuIds);
         List<GoodsSubStockModel> modelList = skuStockMap.values().stream().map(skuStock -> {
             GoodsSubStockModel stockModel = new GoodsSubStockModel();
@@ -239,8 +246,6 @@ public class OmsOrderServiceImpl implements OmsOrderService {
         if (booleanHttpResponseResult.getCode() != 200 && !booleanHttpResponseResult.getStatus()) {
             throw new BizException("库存同步失败");
         }
-
-        return count;
     }
 
     @Override
@@ -282,7 +287,19 @@ public class OmsOrderServiceImpl implements OmsOrderService {
 
     @Override
     public OmsOrderDetail detail(Long id) {
-        return orderDao.getDetail(id);
+        OmsOrderDetail detail = orderDao.getDetail(id);
+
+        // 学校订单查询学校信息
+        if (detail.getSourceType() == 2) {
+            HttpResponseResult<List<SchoolDto>> schoolDtoHttpResponseResult = webFeignService.schoolListByIds(Lists.newArrayList(detail.getMemberId()));
+            if (schoolDtoHttpResponseResult.getCode() == 200 && schoolDtoHttpResponseResult.getStatus()) {
+                List<SchoolDto> data = schoolDtoHttpResponseResult.getData();
+                if (!CollectionUtils.isEmpty(data)) {
+                    detail.setMemberUsername(data.get(0).getName());
+                }
+            }
+        }
+        return detail;
     }
 
     @Override

+ 35 - 17
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/PmsProductServiceImpl.java

@@ -6,10 +6,10 @@ import com.ym.mec.common.dto.PmsProductDto;
 import com.ym.mec.common.dto.PmsProductQueryParamDto;
 import com.ym.mec.common.entity.GoodsSubModel;
 import com.ym.mec.common.entity.GoodsSubStockModel;
+import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.web.WebFeignService;
 import com.yonge.cooleshow.admin.dao.*;
-import com.yonge.cooleshow.admin.dao.*;
 import com.yonge.cooleshow.admin.dto.HomeStatistical;
 import com.yonge.cooleshow.admin.dto.PmsProductParam;
 import com.yonge.cooleshow.admin.dto.PmsProductQueryParam;
@@ -27,7 +27,6 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
-import javax.annotation.Resource;
 import java.lang.reflect.Method;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
@@ -146,6 +145,7 @@ public class PmsProductServiceImpl implements PmsProductService {
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int update(Long id, PmsProductParam productParam) {
         if (productParam.getPrice().compareTo(BigDecimal.ZERO) <=0 ) {
             throw new BizException("商品价格不能小于等于0");
@@ -201,6 +201,7 @@ public class PmsProductServiceImpl implements PmsProductService {
         List<PmsSkuStock> currSkuList = productParam.getSkuStockList();
         //当前没有sku直接删除
         if(CollUtil.isEmpty(currSkuList)){
+            syncProductStatus(Collections.singletonList(id), 0);
             PmsSkuStockExample skuStockExample = new PmsSkuStockExample();
             skuStockExample.createCriteria().andProductIdEqualTo(id);
             skuStockMapper.deleteByExample(skuStockExample);
@@ -225,6 +226,8 @@ public class PmsProductServiceImpl implements PmsProductService {
         }
         //删除sku
         if(CollUtil.isNotEmpty(removeSkuList)){
+            syncSkuStatus(0, removeSkuList);
+
             List<Long> removeSkuIds = removeSkuList.stream().map(PmsSkuStock::getId).collect(Collectors.toList());
             PmsSkuStockExample removeExample = new PmsSkuStockExample();
             removeExample.createCriteria().andIdIn(removeSkuIds);
@@ -271,14 +274,8 @@ public class PmsProductServiceImpl implements PmsProductService {
 
     @Override
     public int updatePublishStatus(List<Long> ids, Integer publishStatus) {
-        // 商品状态同步
-        List<GoodsSubModel> collect = ids.stream().map(next -> {
-            GoodsSubModel goodsSubModel = new GoodsSubModel();
-            goodsSubModel.setMallGoodsId(next.intValue());
-            goodsSubModel.setGoodsStatus(1 == publishStatus);
-            return goodsSubModel;
-        }).collect(Collectors.toList());
-        webFeignService.goodsStatusSynchronize(collect);
+
+        syncProductStatus(ids, publishStatus);
 
         PmsProduct record = new PmsProduct();
         record.setPublishStatus(publishStatus);
@@ -287,6 +284,33 @@ public class PmsProductServiceImpl implements PmsProductService {
         return productMapper.updateByExampleSelective(record, example);
     }
 
+    private void syncProductStatus(List<Long> ids, Integer publishStatus) {
+
+        // 查询商品的sku
+        PmsSkuStockExample skuStockExample = new PmsSkuStockExample();
+        skuStockExample.createCriteria().andProductIdIn(ids);
+        List<PmsSkuStock> pmsSkuStocks = skuStockMapper.selectByExample(skuStockExample);
+        syncSkuStatus(publishStatus, pmsSkuStocks);
+    }
+
+    private void syncSkuStatus(Integer publishStatus, List<PmsSkuStock> pmsSkuStocks) {
+        if (CollectionUtils.isEmpty(pmsSkuStocks)) {
+            return;
+        }
+        // 商品状态同步
+        List<GoodsSubModel> collect = pmsSkuStocks.stream().map(o -> {
+            GoodsSubModel goodsSubModel = new GoodsSubModel();
+            goodsSubModel.setMallGoodsId(o.getProductId().intValue());
+            goodsSubModel.setSkuId(o.getId().intValue());
+            goodsSubModel.setGoodsStatus(publishStatus == 1);
+            return goodsSubModel;
+        }).collect(Collectors.toList());
+        HttpResponseResult<Boolean> booleanHttpResponseResult = webFeignService.goodsStatusSynchronize(collect);
+        if (booleanHttpResponseResult.getCode() != 200) {
+            throw new BizException("商品状态同步失败");
+        }
+    }
+
     @Override
     public int updateRecommendStatus(List<Long> ids, Integer recommendStatus) {
         PmsProduct record = new PmsProduct();
@@ -308,13 +332,7 @@ public class PmsProductServiceImpl implements PmsProductService {
     @Override
     public int updateDeleteStatus(List<Long> ids, Integer deleteStatus) {
         if (1 == deleteStatus) {
-            List<GoodsSubModel> collect = ids.stream().map(next -> {
-                GoodsSubModel goodsSubModel = new GoodsSubModel();
-                goodsSubModel.setMallGoodsId(next.intValue());
-                goodsSubModel.setGoodsStatus(false);
-                return goodsSubModel;
-            }).collect(Collectors.toList());
-            webFeignService.goodsStatusSynchronize(collect);
+            syncProductStatus(ids, 0);
             // 更新库存
             PmsSkuStockExample example = new PmsSkuStockExample();
             example.createCriteria().andProductIdIn(ids);

+ 11 - 1
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/PmsProductSkuStockRecordServiceImpl.java

@@ -2,8 +2,10 @@ package com.yonge.cooleshow.admin.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.github.pagehelper.PageHelper;
+import com.google.common.collect.Lists;
 import com.ym.mec.common.exception.BizException;
 import com.yonge.cooleshow.admin.dao.PmsProductSkuStockRecordDao;
+import com.yonge.cooleshow.admin.service.OmsOrderService;
 import com.yonge.cooleshow.admin.service.PmsProductService;
 import com.yonge.cooleshow.admin.service.PmsProductSkuStockRecordService;
 import com.yonge.cooleshow.admin.service.PmsSkuStockService;
@@ -45,6 +47,9 @@ public class PmsProductSkuStockRecordServiceImpl implements PmsProductSkuStockRe
     @Autowired
     private PmsProductService pmsProductService;
 
+    @Autowired
+    private OmsOrderService omsOrderService;
+
     /**
      * 列表分页
      *
@@ -101,6 +106,11 @@ public class PmsProductSkuStockRecordServiceImpl implements PmsProductSkuStockRe
             throw new BizException("sku不存在");
         }
 
-        return pmsProductSkuStockRecordMapper.insertSelective(JSON.parseObject(JSON.toJSONString(pmsProductSkuStockRecord), PmsProductSkuStockRecord.class));
+        pmsProductSkuStockRecordMapper.insertSelective(JSON.parseObject(JSON.toJSONString(pmsProductSkuStockRecord), PmsProductSkuStockRecord.class));
+
+        // 同步库存数据
+        omsOrderService.syncSkuStock(Lists.newArrayList(pmsProductSkuStockRecord.getProductSkuId()));
+
+        return 1;
     }
 }