Explorar o código

提供批量查询商品信息、更新订单状态、更新订单委托量dubbo接口

yzc %!s(int64=2) %!d(string=hai) anos
pai
achega
39969d67df

+ 4 - 0
sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/constant/RedisConstant.java

@@ -29,6 +29,10 @@ public class RedisConstant {
      * 商品更新库存锁key
      */
     public static final String GOODS_UPDATE_AMOUNT_KEY = "sckw:product:goods:update:amount:%s";
+    /**
+     * 更新贸易订单委托量、已履约量锁key
+     */
+    public static final String TORDER_UPDATE_AMOUNT_KEY = "sckw:trade:order:update:amount:%s";
 
     /**
      * 消费请求有效时间(秒)

+ 7 - 6
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java

@@ -1,7 +1,9 @@
 package com.sckw.order.api.dubbo;
 
+import com.sckw.core.web.response.HttpResult;
 import com.sckw.order.api.model.OrderDetailRes;
 import com.sckw.order.api.model.UpdateOrderAmountParam;
+import com.sckw.order.api.model.UpdateOrderStatusParam;
 
 /**
  * @desc: 贸易订单信息相关dubbo
@@ -23,18 +25,17 @@ public interface TradeOrderInfoService {
      * @desc: 更新订单状态
      * @author: yzc
      * @date: 2023-07-18 18:31
-     * @Param tOrderId:
-     * @Param status:
-     * @return: void
+     * @Param param:
+     * @return: com.sckw.core.web.response.HttpResult
      */
-    void updateOrderStatus(Long tOrderId, Integer status);
+    HttpResult updateOrderStatus(UpdateOrderStatusParam param);
 
     /**
      * @desc: 更新订单委托量、已履约量
      * @author: yzc
      * @date: 2023-07-18 18:34
      * @Param param:
-     * @return: void
+     * @return: com.sckw.core.web.response.HttpResult
      */
-    void updateOrderAmount(UpdateOrderAmountParam param);
+    HttpResult updateOrderAmount(UpdateOrderAmountParam param);
 }

+ 11 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UpdateOrderAmountParam.java

@@ -35,4 +35,15 @@ public class UpdateOrderAmountParam implements Serializable {
      * 实际交付量
      */
     private BigDecimal actualAmount;
+
+    /**
+     * 更新用户id
+     */
+    private Long updateBy;
+
+    /**
+     * 更新者姓名
+     */
+    private String updateByName;
+
 }

+ 42 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UpdateOrderStatusParam.java

@@ -0,0 +1,42 @@
+package com.sckw.order.api.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @desc: 更新订单状态参数
+ * @author: yzc
+ * @date: 2023-07-20 8:50
+ */
+@Getter
+@Setter
+@ToString
+public class UpdateOrderStatusParam implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 5310063702831276889L;
+
+    /**
+     * 订单id
+     */
+    private Long tOrderId;
+
+    /**
+     * 状态
+     */
+    private Integer status;
+
+    /**
+     * 更新用户id
+     */
+    private Long updateBy;
+
+    /**
+     * 更新者姓名
+     */
+    private String updateByName;
+
+}

+ 14 - 2
sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/dubbo/GoodsInfoService.java

@@ -1,9 +1,12 @@
 package com.sckw.product.api.dubbo;
 
+import com.sckw.core.web.response.HttpResult;
 import com.sckw.product.api.model.GoodsDetail;
 import com.sckw.product.api.model.KwpGoods;
 
 import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @desc: 商品相关dubbo
@@ -30,13 +33,22 @@ public interface GoodsInfoService {
      */
     KwpGoods getGoodsById(Long id);
 
+    /**
+     * @desc: 根据商品id获取商品基本信息
+     * @author: yzc
+     * @date: 2023-07-20 10:57
+     * @Param ids:
+     * @return: java.util.Map<java.lang.Long,com.sckw.product.api.model.KwpGoods>
+     */
+    Map<Long, KwpGoods> getGoodsByIds(List<Long> ids);
+
     /**
      * @desc: 更新库存
      * @author: yzc
      * @date: 2023-07-13 14:33
      * @Param id:
      * @Param amount:
-     * @return: java.lang.Boolean
+     * @return: com.sckw.core.web.response.HttpResult
      */
-    void updateGoodsAmount(Long id, BigDecimal amount);
+    HttpResult updateGoodsAmount(Long id, BigDecimal amount);
 }

+ 81 - 7
sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java

@@ -1,20 +1,28 @@
 package com.sckw.order.dubbo;
 
 import com.alibaba.fastjson2.JSON;
-import com.sckw.core.exception.BusinessException;
+import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.utils.BeanUtils;
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.mongo.model.SckwTradeOrder;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
 import com.sckw.order.api.model.OrderDetailRes;
 import com.sckw.order.api.model.UpdateOrderAmountParam;
+import com.sckw.order.api.model.UpdateOrderStatusParam;
 import com.sckw.order.model.KwoTradeOrder;
+import com.sckw.order.model.KwoTradeOrderTrack;
 import com.sckw.order.serivce.KwoTradeOrderService;
 import com.sckw.order.serivce.KwoTradeOrderTrackService;
+import com.sckw.redis.constant.RedisConstant;
+import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.stream.model.SckwBusSum;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.stream.function.StreamBridge;
 
+import java.math.BigDecimal;
+import java.util.Date;
 import java.util.Objects;
 
 /**
@@ -40,19 +48,85 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
     }
 
     @Override
-    public void updateOrderStatus(Long tOrderId, Integer status) {
-        KwoTradeOrder order = kwoTradeOrderService.getById(tOrderId);
+    public HttpResult updateOrderStatus(UpdateOrderStatusParam param) {
+        KwoTradeOrder order = kwoTradeOrderService.getById(param.getTOrderId());
         if (Objects.isNull(order)) {
-            throw new BusinessException("订单不存在!");
+            return HttpResult.error("订单不存在!");
+        }
+        Integer status = param.getStatus();
+        Long updateBy = param.getUpdateBy();
+        if (Objects.equals(String.valueOf(status), DictEnum.TORDER_STATUS_6.getValue())) {
+            if (!Objects.equals(String.valueOf(status), DictEnum.TORDER_STATUS_5.getValue())) {
+                return HttpResult.error("已完结的订单才可对账!");
+            }
+        } else if (Objects.equals(String.valueOf(status), DictEnum.TORDER_STATUS_7.getValue())) {
+            if (!Objects.equals(String.valueOf(status), DictEnum.TORDER_STATUS_6.getValue())) {
+                return HttpResult.error("已对账的订单才可结算!");
+            }
+        } else {
+            return HttpResult.error("非法订单状态操作!");
         }
+        order.setStatus(status).setUpdateBy(updateBy);
+        kwoTradeOrderService.updateById(order);
+        //订单状态记录
+        KwoTradeOrderTrack track = new KwoTradeOrderTrack();
+        track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setStatus(order.getStatus())
+                .setCreateBy(updateBy).setUpdateBy(updateBy);
+        kwoTradeOrderTrackService.insert(track);
+        //更新mongodb
+        SckwTradeOrder updateParam = new SckwTradeOrder();
+        updateParam.setTOrderId(order.getId()).setStatus(order.getStatus()).setUpdateBy(param.getUpdateBy())
+                .setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
+        saveMongoDb(3, updateParam);
+        return HttpResult.ok();
     }
 
     @Override
-    public void updateOrderAmount(UpdateOrderAmountParam param) {
-        KwoTradeOrder order = kwoTradeOrderService.getById(param.getTOrderId());
+    public HttpResult updateOrderAmount(UpdateOrderAmountParam param) {
+        Long id = param.getTOrderId();
+        Long updateBy = param.getUpdateBy();
+        String lockKey = String.format(RedisConstant.GOODS_UPDATE_AMOUNT_KEY, id);
+        if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 3L, 3L))) {
+            return HttpResult.error("业务繁忙,请稍后再试!");
+        }
+        KwoTradeOrder order = kwoTradeOrderService.getById(id);
         if (Objects.isNull(order)) {
-            throw new BusinessException("订单不存在!");
+            return HttpResult.error("订单不存在!");
+        }
+        if (!Objects.equals(String.valueOf(order.getStatus()), DictEnum.TORDER_STATUS_4.getValue())) {
+            return HttpResult.error("执行中的订单才可物流托运!");
+        }
+        BigDecimal amount = order.getAmount();
+        BigDecimal addEntrustAmount = order.getEntrustAmount();
+        if (Objects.nonNull(param.getEntrustAmount())) {
+            addEntrustAmount = addEntrustAmount.add(param.getActualAmount());
+            if (amount.compareTo(addEntrustAmount) < 0) {
+                return HttpResult.error("物流已委托总量不可大于订单总量!");
+            }
+        }
+        BigDecimal addActualAmount = order.getActualAmount();
+        if (Objects.nonNull(param.getActualAmount())) {
+            addActualAmount = addActualAmount.add(param.getActualAmount());
+            if (amount.compareTo(addActualAmount) < 0) {
+                return HttpResult.error("物流实际交付总量不可大于订单总量!");
+            }
+        }
+        order.setEntrustAmount(addEntrustAmount).setActualAmount(addActualAmount).setUpdateBy(param.getUpdateBy());
+        //已履约量等于订单总量自动完结订单
+        if (amount.compareTo(addActualAmount) == 0) {
+            order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue()));
+            KwoTradeOrderTrack track = new KwoTradeOrderTrack();
+            track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setStatus(order.getStatus())
+                    .setCreateBy(updateBy).setUpdateBy(updateBy);
+            kwoTradeOrderTrackService.insert(track);
         }
+        kwoTradeOrderService.updateById(order);
+        //更新mongodb
+        SckwTradeOrder updateParam = new SckwTradeOrder();
+        updateParam.setTOrderId(order.getId()).setEntrustAmount(addEntrustAmount).setActualAmount(addActualAmount)
+                .setStatus(order.getStatus()).setUpdateBy(param.getUpdateBy()).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
+        saveMongoDb(3, updateParam);
+        return HttpResult.ok();
     }
 
     /**

+ 5 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/CompleteOrderParam.java

@@ -26,6 +26,11 @@ public class CompleteOrderParam {
     @Min(value = 0, message = "实际交付量不能为负数")
     private BigDecimal actualAmount;
 
+    /**
+     * 已委托量
+     */
+    private BigDecimal entrustAmount;
+
     @Length(max = 200, message = "备注最多200字")
     private String remark;
 

+ 55 - 14
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -11,7 +11,9 @@ import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.OrderGenerateUtils;
 import com.sckw.core.utils.StringUtils;
+import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.core.web.response.HttpResult;
 import com.sckw.mongo.model.SckwTradeOrder;
 import com.sckw.order.dao.KwoTradeOrderMapper;
 import com.sckw.order.model.*;
@@ -216,7 +218,10 @@ public class KwoTradeOrderService {
                 .setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_1.getValue()));
         kwoTradeOrderMapper.insert(order);
         //扣减库存
-        goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
+        HttpResult updateResult = goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
+        if (!Objects.equals(HttpStatus.SUCCESS_CODE, updateResult.getCode())) {
+            throw new BusinessException(updateResult.getMsg());
+        }
         addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
     }
 
@@ -237,7 +242,7 @@ public class KwoTradeOrderService {
         }
         //todo: 则先校验是否存在对供应企业的预付钱包 ;【预计采购金额】是否大于预付清单的【可用预付】金额
         KwpGoods goods = goodsInfoService.getGoodsById(goodId);
-        if (Objects.isNull(goods) || !Objects.equals(goods.getStatus(), 1)) {
+        if (Objects.isNull(goods) || Objects.equals(goods.getDelFlag(), Global.YES) || !Objects.equals(goods.getStatus(), 1)) {
             throw new BusinessException("商品不存在或已下架!");
         }
         if (goods.getAmount().compareTo(amount) < 0) {
@@ -272,7 +277,10 @@ public class KwoTradeOrderService {
         }
         kwoTradeOrderMapper.insert(order);
         //扣减库存
-        goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
+        HttpResult updateResult = goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
+        if (!Objects.equals(HttpStatus.SUCCESS_CODE, updateResult.getCode())) {
+            throw new BusinessException(updateResult.getMsg());
+        }
         addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
     }
 
@@ -385,7 +393,10 @@ public class KwoTradeOrderService {
             }
             orderCheck(param.getGoodsInfo().getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount(), param.getGoodsInfo().getUnitPrice(), false);
             //扣减库存
-            goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
+            HttpResult updateResult = goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
+            if (!Objects.equals(HttpStatus.SUCCESS_CODE, updateResult.getCode())) {
+                throw new BusinessException(updateResult.getMsg());
+            }
         }
         order.setAmount(param.getAmount()).setUnit(Objects.isNull(param.getGoodsInfo()) ? null : param.getGoodsInfo().getUnit())
                 .setPrice(param.getPrice()).setTrading(param.getTrading()).setPickupType(param.getPickupType())
@@ -586,7 +597,10 @@ public class KwoTradeOrderService {
         kwoTradeOrderTrackService.insert(track);
         //更新库存
         if (amount.compareTo(BigDecimal.ZERO) != 0) {
-            goodsInfoService.updateGoodsAmount(goods.getGoodsId(), amount);
+            HttpResult updateResult = goodsInfoService.updateGoodsAmount(goods.getGoodsId(), amount);
+            if (!Objects.equals(HttpStatus.SUCCESS_CODE, updateResult.getCode())) {
+                throw new BusinessException(updateResult.getMsg());
+            }
         }
         //更新mongodb
         SckwTradeOrder updateParam = BeanUtils.copyProperties(param, SckwTradeOrder.class);
@@ -624,7 +638,10 @@ public class KwoTradeOrderService {
         kwoTradeOrderTrackService.insert(track);
         //释放商品库存
         KwoTradeOrderGoods goods = kwoTradeOrderGoodsService.getByOrderId(order.getId());
-        goodsInfoService.updateGoodsAmount(goods.getGoodsId(), order.getAmount().negate());
+        HttpResult updateResult = goodsInfoService.updateGoodsAmount(goods.getGoodsId(), order.getAmount().negate());
+        if (!Objects.equals(HttpStatus.SUCCESS_CODE, updateResult.getCode())) {
+            throw new BusinessException(updateResult.getMsg());
+        }
         //mongodb更新订单状态
         SckwTradeOrder updateParam = new SckwTradeOrder();
         updateParam.setTOrderId(order.getId()).setStatus(order.getStatus()).setUpdateBy(LoginUserHolder.getUserId())
@@ -667,22 +684,27 @@ public class KwoTradeOrderService {
         if (!Objects.equals(String.valueOf(order.getStatus()), DictEnum.TORDER_STATUS_4.getValue())) {
             throw new BusinessException("执行中的订单才能完结订单!");
         }
-        if (kwoTradeOrderUnitService.entMatch(param.getId(),LoginUserHolder.getEntId(),DictEnum.TORDER_UNIT_TYPE_2.getValue())){
+        if (kwoTradeOrderUnitService.entMatch(param.getId(), LoginUserHolder.getEntId(), DictEnum.TORDER_UNIT_TYPE_2.getValue())) {
             throw new BusinessException("无订单操作权限!");
         }
-        KwoTradeOrderGoods goods = kwoTradeOrderGoodsService.getByOrderId(param.getId());
-        if (Objects.isNull(goods)) {
-            throw new BusinessException("商品信息异常!");
-        }
         order.setActualAmount(param.getActualAmount()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue()));
         kwoTradeOrderMapper.updateById(order);
         //订单状态记录
         KwoTradeOrderTrack track = new KwoTradeOrderTrack();
         track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setRemark(param.getRemark()).setStatus(order.getStatus());
         kwoTradeOrderTrackService.insert(track);
-        //更新库存
-        BigDecimal amount = param.getActualAmount().subtract(order.getAmount());
-        goodsInfoService.updateGoodsAmount(goods.getGoodsId(), amount);
+        if (param.getActualAmount().compareTo(order.getActualAmount()) != 0) {
+            KwoTradeOrderGoods goods = kwoTradeOrderGoodsService.getByOrderId(param.getId());
+            if (Objects.isNull(goods)) {
+                throw new BusinessException("商品信息异常!");
+            }
+            //更新库存
+            BigDecimal amount = param.getActualAmount().subtract(order.getAmount());
+            HttpResult updateResult = goodsInfoService.updateGoodsAmount(goods.getGoodsId(), amount);
+            if (!Objects.equals(HttpStatus.SUCCESS_CODE, updateResult.getCode())) {
+                throw new BusinessException(updateResult.getMsg());
+            }
+        }
         //mongodb更新订单状态
         SckwTradeOrder updateParam = new SckwTradeOrder();
         updateParam.setTOrderId(order.getId()).setStatus(order.getStatus()).setUpdateBy(LoginUserHolder.getUserId())
@@ -717,6 +739,14 @@ public class KwoTradeOrderService {
         kwoTradeOrderUnitService.delByOrderIds(ids);
         kwoTradeOrderAddressService.delByOrderIds(ids);
         kwoTradeOrderContractService.delByOrderIds(ids);
+        //更新mongodb
+        ids.forEach(id -> {
+            SckwTradeOrder updateParam = new SckwTradeOrder();
+            updateParam.setTOrderId(id).setDelFlag(Global.YES).setUpdateBy(LoginUserHolder.getUserId())
+                    .setUpdateByName(LoginUserHolder.getUserName()).setUpdateTime(new Date());
+            saveMongoDb(3, updateParam);
+        });
+
     }
 
     /**
@@ -731,4 +761,15 @@ public class KwoTradeOrderService {
         wrapper.eq(KwoTradeOrder::getId, id).eq(KwoTradeOrder::getDelFlag, Global.NO).last("LIMIT 1");
         return kwoTradeOrderMapper.selectOne(wrapper);
     }
+
+    /**
+     * @desc: 根据id更新
+     * @author: yzc
+     * @date: 2023-07-20 10:24
+     * @Param order:
+     * @return: void
+     */
+    public void updateById(KwoTradeOrder order) {
+        kwoTradeOrderMapper.updateById(order);
+    }
 }

+ 29 - 19
sckw-modules/sckw-product/src/main/java/com/sckw/product/dubbo/GoodsInfoServiceImpl.java

@@ -1,7 +1,8 @@
 package com.sckw.product.dubbo;
 
-import com.sckw.core.exception.BusinessException;
 import com.sckw.core.utils.BeanUtils;
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.web.response.HttpResult;
 import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.product.api.model.GoodsDetail;
 import com.sckw.product.api.model.KwpGoods;
@@ -13,10 +14,14 @@ import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.math.BigDecimal;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
- * @desc: TODO
+ * @desc: 商品信息dubbo接口
  * @author: yzc
  * @date: 2023-07-13 14:17
  */
@@ -34,29 +39,34 @@ public class GoodsInfoServiceImpl implements GoodsInfoService {
 
     @Override
     public KwpGoods getGoodsById(Long id) {
-        return BeanUtils.copyProperties(kwpGoodsService.selectGoodsById(id), KwpGoods.class);
+        return BeanUtils.copyProperties(kwpGoodsService.selectById(id), KwpGoods.class);
     }
 
     @Override
-    public void updateGoodsAmount(Long id, BigDecimal amount) {
-        com.sckw.product.model.KwpGoods goods = kwpGoodsService.selectGoodsById(id);
-        if (Objects.isNull(goods)) {
-            throw new BusinessException("商品不存在!");
+    public Map<Long, KwpGoods> getGoodsByIds(List<Long> ids) {
+        List<KwpGoods> list = BeanUtils.copyToList(kwpGoodsService.selectByIds(ids), KwpGoods.class);
+        if (CollectionUtils.isEmpty(list)) {
+            return Collections.emptyMap();
         }
+        return list.stream().collect(Collectors.toMap(KwpGoods::getId, e->e, (k1, k2) -> k1));
+    }
+
+    @Override
+    public HttpResult updateGoodsAmount(Long id, BigDecimal amount) {
         String lockKey = String.format(RedisConstant.GOODS_UPDATE_AMOUNT_KEY, id);
-        if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 60L))) {
-            throw new BusinessException("获取更新商品库存锁失败!");
+        if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 3L, 3L))) {
+            return HttpResult.error("业务繁忙,请稍后再试!");
+        }
+        com.sckw.product.model.KwpGoods goods = kwpGoodsService.selectGoodsById(id);
+        if (Objects.isNull(goods)) {
+            return HttpResult.error("商品不存在或已下架!");
         }
-        try {
-            BigDecimal goodsAmount = goods.getAmount();
-            if (goods.getAmount().compareTo(amount) < 0) {
-                log.info("库存:{}小于订单量:{}", goods.getAmount(), amount);
-                throw new BusinessException("商品库存小于订单量!");
-            }
-            goods.setAmount(goodsAmount.subtract(amount)).setPerformedAmount(Objects.nonNull(goods.getPerformedAmount()) ? goods.getPerformedAmount().add(amount) : amount);
-            kwpGoodsService.updateById(goods);
-        } finally {
-            RedissonUtils.unlock(lockKey);
+        BigDecimal goodsAmount = goods.getAmount();
+        if (goods.getAmount().compareTo(amount) < 0) {
+            return HttpResult.error("商品库存不足,请联系供应方!");
         }
+        goods.setAmount(goodsAmount.subtract(amount)).setPerformedAmount(Objects.nonNull(goods.getPerformedAmount()) ? goods.getPerformedAmount().add(amount) : amount);
+        kwpGoodsService.updateById(goods);
+        return HttpResult.ok();
     }
 }

+ 30 - 5
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java

@@ -547,7 +547,7 @@ public class KwpGoodsService {
     }
 
     /**
-     * @desc: 批量上架
+     * @desc: 单个上架
      * @author: yzc
      * @date: 2023-07-06 8:56
      * @Param id:
@@ -619,10 +619,11 @@ public class KwpGoodsService {
         LambdaUpdateWrapper<KwpGoods> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(KwpGoods::getDelFlag, Global.YES).in(KwpGoods::getId, ids);
         kwpGoodsMapper.update(null, updateWrapper);
-        kwpGoodsAddressService.delByGoodsIds(ids);
-        kwpGoodsAttributeService.delByGoodsIds(ids);
-        kwpGoodsImageService.delByGoodsIds(ids);
-        kwpGoodsPriceRangeService.delByGoodsIds(ids);
+        //不作删除,防止订单详情查不出相关信息或查出以往被删除的相关信息
+//        kwpGoodsAddressService.delByGoodsIds(ids);
+//        kwpGoodsAttributeService.delByGoodsIds(ids);
+//        kwpGoodsImageService.delByGoodsIds(ids);
+//        kwpGoodsPriceRangeService.delByGoodsIds(ids);
     }
 
 
@@ -743,6 +744,30 @@ public class KwpGoodsService {
         return kwpGoodsMapper.selectOne(last);
     }
 
+    /**
+     * @desc: 根据商品id获取商品信息
+     * @author: yzc
+     * @date: 2023-07-20 11:16
+     * @Param ids:
+     * @return: java.util.List<com.sckw.product.model.KwpGoods>
+     */
+    public KwpGoods selectById(Long id) {
+        return kwpGoodsMapper.selectById(id);
+    }
+
+
+    /**
+     * @desc: 根据商品ids获取商品信息
+     * @author: yzc
+     * @date: 2023-07-20 11:16
+     * @Param ids:
+     * @return: java.util.List<com.sckw.product.model.KwpGoods>
+     */
+    public List<KwpGoods> selectByIds(List<Long> ids) {
+        List<KwpGoods> list = kwpGoodsMapper.selectBatchIds(ids);
+        return CollectionUtils.emptyIfNull(list);
+    }
+
     /**
      * @desc: 更新
      * @author: yzc