diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ConsInfoService.java b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ConsInfoService.java index 1a61fca70..66172fc10 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ConsInfoService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ConsInfoService.java @@ -91,10 +91,6 @@ public interface ConsInfoService extends IService { */ void onOffConsInfo(Long id, Integer isStock); - /** - * 是否退款退回 - */ - void isRefundStockConsInfo(Long id, Integer isRefundStock); /** * 修改耗材单位 diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/mapper/OrderInfoCustomMapper.java b/cash-service/order-service/src/main/java/com/czg/service/order/mapper/OrderInfoCustomMapper.java index b466d0c78..c810e54c8 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/mapper/OrderInfoCustomMapper.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/mapper/OrderInfoCustomMapper.java @@ -2,10 +2,12 @@ package com.czg.service.order.mapper; import com.czg.account.vo.HandoverCategoryListVo; import com.czg.account.vo.HandoverProductListVo; +import com.czg.product.vo.ConsStockRecord; import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; import java.util.List; +import java.util.Map; /** * 订单表 映射层。 @@ -15,106 +17,6 @@ import java.util.List; */ public interface OrderInfoCustomMapper{ - /** - * 交班现金支付统计 - * - * @param shopId 店铺id - * @param loginTime 上岗时间 - * @param handoverTime 交班时间 - * @return 现金支付总额 - */ - BigDecimal getHandoverCashAmount(Long shopId, String loginTime, String handoverTime); - - /** - * 交班微信支付统计 - * - * @param shopId 店铺id - * @param loginTime 上岗时间 - * @param handoverTime 交班时间 - * @return 现金支付总额 - */ - BigDecimal getHandoverWechatAmount(Long shopId, String loginTime, String handoverTime); - - /** - * 交班支付宝支付统计 - * - * @param shopId 店铺id - * @param loginTime 上岗时间 - * @param handoverTime 交班时间 - * @return 支付宝支付总额 - */ - BigDecimal getHandoverAlipayAmount(Long shopId, String loginTime, String handoverTime); - - /** - * 交班VIP支付统计 - * - * @param shopId 店铺id - * @param loginTime 上岗时间 - * @param handoverTime 交班时间 - * @return VIP支付总额 - */ - BigDecimal getHandoverVipPayAmount(Long shopId, String loginTime, String handoverTime); - - /** - * 交班VIP充值统计 - * - * @param shopId 店铺id - * @param loginTime 上岗时间 - * @param handoverTime 交班时间 - * @return VIP充值总额 - */ - BigDecimal getHandoverVipChargeAmount(Long shopId, String loginTime, String handoverTime); - - /** - * 交班快捷支付统计 - * - * @param shopId 店铺id - * @param loginTime 上岗时间 - * @param handoverTime 交班时间 - * @return 快捷支付总额 - */ - BigDecimal getHandoverQuickPayAmount(Long shopId, String loginTime, String handoverTime); - - /** - * 交班退款统计 - * - * @param shopId 店铺id - * @param loginTime 上岗时间 - * @param handoverTime 交班时间 - * @return 退款总额 - */ - BigDecimal getHandoverRefundAmount(Long shopId, String loginTime, String handoverTime); - - /** - * 交班挂账统计 - * - * @param shopId 店铺id - * @param loginTime 上岗时间 - * @param handoverTime 交班时间 - * @return 挂账总额 - */ - BigDecimal getHandoverCreditAmount(Long shopId, String loginTime, String handoverTime); - - /** - * 交班营业额统计 - * - * @param shopId 店铺id - * @param loginTime 上岗时间 - * @param handoverTime 交班时间 - * @return 营业额 - */ - BigDecimal getHandoverTotalAmount(Long shopId, String loginTime, String handoverTime); - - /** - * 交班订单数统计 - * - * @param shopId 店铺id - * @param loginTime 上岗时间 - * @param handoverTime 交班时间 - * @return 交班订单数 - */ - int getHandoverOrderNum(Long shopId, String loginTime, String handoverTime); - /** * 交班售出商品明细 * @@ -138,4 +40,8 @@ public interface OrderInfoCustomMapper{ int decrMoney(@Param("id") Long id, @Param("amount") BigDecimal amount); int updatePayOrderId(@Param("orderId") Long orderId, @Param("paymentId") Long paymentId, @Param("payType") String payType, @Param("remark") String remark); + + List getConsByProductAndNum( + @Param("productUsageMap") Map productUsageMap + ); } diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoCustomServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoCustomServiceImpl.java index bb48fa0e5..10c4f10ad 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoCustomServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoCustomServiceImpl.java @@ -43,11 +43,14 @@ import com.czg.order.enums.PayEnums; import com.czg.order.service.*; import com.czg.order.vo.*; import com.czg.pay.PayNotifyRespDTO; +import com.czg.product.entity.ConsInfo; import com.czg.product.entity.Product; import com.czg.product.entity.ShopProdCategory; +import com.czg.product.service.ConsInfoService; import com.czg.product.service.ProductRpcService; import com.czg.product.service.ProductService; import com.czg.product.service.ShopProdCategoryService; +import com.czg.product.vo.ConsStockRecord; import com.czg.product.vo.ProductStockVO; import com.czg.resp.CzgResult; import com.czg.sa.StpKit; @@ -78,6 +81,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -111,6 +115,8 @@ public class OrderInfoCustomServiceImpl implements OrderInfoCustomService { @DubboReference private ProductService productService; @DubboReference + private ConsInfoService consInfoService; + @DubboReference private ShopProdCategoryService shopProdCategoryService; @DubboReference private ProductRpcService productRpcService; @@ -1044,17 +1050,14 @@ public class OrderInfoCustomServiceImpl implements OrderInfoCustomService { */ private void processOrderDetails(List orderDetails, LimitRateDTO limitRate, OrderInfoAddDTO param) throws CzgException { BigDecimal packFee = BigDecimal.ZERO; + Map productNumMap = new HashMap<>(); for (OrderDetail detail : orderDetails) { if (!detail.getIsTemporary().equals(1) && detail.getProductId() > 0) { - //TODO 库存问题 商品无库存 统一走 耗材 -// Product product = productService.getOne(QueryWrapper.create() -// .eq(Product::getId, detail.getProductId()) -// .eq(Product::getShopId, detail.getShopId()) -// .eq(Product::getIsDel, 0) -// .eq(Product::getIsStock, 1)); -// if (product != null && detail.getNum().compareTo(new BigDecimal(product.getStockNumber())) > 0) { -// throw new CzgException("下单失败" + product.getName() + "库存不足"); -// } + if (productNumMap.containsKey(detail.getProductId())) { + productNumMap.put(detail.getProductId(), productNumMap.get(detail.getProductId()).add(detail.getNum().subtract(detail.getReturnNum()))); + } else { + productNumMap.put(detail.getProductId(), detail.getNum().subtract(detail.getReturnNum())); + } } if (detail.getDiscountSaleAmount() != null && detail.getDiscountSaleAmount().compareTo(BigDecimal.ZERO) > 0) { detail.setUnitPrice(detail.getDiscountSaleAmount()); @@ -1072,9 +1075,42 @@ public class OrderInfoCustomServiceImpl implements OrderInfoCustomService { detail.setPayAmount(detail.getNum().multiply(detail.getUnitPrice())); packFee = packFee.add(detail.getPackAmount().multiply(detail.getPackNumber())); } + if (CollUtil.isNotEmpty(productNumMap)) { + checkStock(param.getShopId(), productNumMap); + } param.setPackFee(packFee); } + /** + * 校验库存数 + * + * @param productNumMap 商品Id ,使用数量 + */ + private void checkStock(Long shopId, Map productNumMap) { + if (CollUtil.isEmpty(productNumMap)) { + return; + } + List consStockList = consInfoService.list(new QueryWrapper().select(ConsInfo::getId, ConsInfo::getConName, ConsInfo::getConUnit, ConsInfo::getStockNumber) + .eq(ConsInfo::getShopId, shopId).eq(ConsInfo::getIsStock, 1)); + if (CollUtil.isEmpty(consStockList)) { + return; + } + Map map = consStockList.stream() + .collect(Collectors.toMap( + ConsInfo::getId, + Function.identity() + )); + List consNumList = orderInfoCustomMapper.getConsByProductAndNum(productNumMap); + for (ConsStockRecord consStockRecord : consNumList) { + if (map.containsKey(consStockRecord.getConsId())) { + ConsInfo consInfo = map.get(consStockRecord.getConsId()); + if (consStockRecord.getStockNumber().compareTo(consInfo.getStockNumber()) > 0) { + throw new CzgException("耗材:" + consInfo.getConName() + "库存不足,当前库存:" + consInfo.getStockNumber() + consInfo.getConUnit()); + } + } + } + } + @Override @Transactional public void payCallBackOrder(@NotBlank String orderNo, @NotNull PayNotifyRespDTO notifyRespDTO, String channel, int retryCount) { diff --git a/cash-service/order-service/src/main/resources/mapper/OrderInfoCustomMapper.xml b/cash-service/order-service/src/main/resources/mapper/OrderInfoCustomMapper.xml index 823095a8e..c4cdf6fb2 100644 --- a/cash-service/order-service/src/main/resources/mapper/OrderInfoCustomMapper.xml +++ b/cash-service/order-service/src/main/resources/mapper/OrderInfoCustomMapper.xml @@ -45,39 +45,6 @@ where id = #{orderId}; - - - - - - - - - + - SELECT - ifnull(sum(t1.pay_amount),0) - FROM tb_order_info t1 - - - and t1.pay_type = 'credit_pay' - + r.cons_info_id AS consId, + SUM( + CASE r.product_id + + WHEN #{pid} THEN #{qty} + + END + ) AS stockNumber + FROM tb_prod_cons_relation r + WHERE r.product_id IN + + #{pid} + + GROUP BY r.cons_info_id diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ConsInfoServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ConsInfoServiceImpl.java index 35b00e27e..b810beee7 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ConsInfoServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ConsInfoServiceImpl.java @@ -27,7 +27,7 @@ import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.update.UpdateChain; import com.mybatisflex.spring.service.impl.ServiceImpl; import lombok.AllArgsConstructor; -import org.springframework.stereotype.Service; +import org.apache.dubbo.config.annotation.DubboService; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; @@ -41,7 +41,7 @@ import java.util.stream.Collectors; * @author Tankaikai tankaikai@aliyun.com * @since 1.0 2025-02-20 */ -@Service +@DubboService @AllArgsConstructor public class ConsInfoServiceImpl extends ServiceImpl implements ConsInfoService { @@ -182,11 +182,6 @@ public class ConsInfoServiceImpl extends ServiceImpl i super.updateById(entity); } - @Override - public void isRefundStockConsInfo(Long id, Integer isRefundStock) { - - } - @Override public void modifySubUnit(ConsSubUnitParam param) {