From 7ae6893e2746869f879d270544b7804a82ea88a9 Mon Sep 17 00:00:00 2001 From: peng <peng.com> Date: 星期五, 19 九月 2025 14:20:42 +0800 Subject: [PATCH] 会员列表导出 --- framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 105 insertions(+), 8 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index 9d38114..d458917 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -25,10 +25,15 @@ import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.goods.entity.dos.Goods; +import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.dto.GoodsCompleteMessage; import cn.lili.modules.goods.service.GoodsService; +import cn.lili.modules.goods.service.GoodsSkuService; +import cn.lili.modules.lmk.domain.entity.CouponVirtual; import cn.lili.modules.lmk.domain.vo.OrderCountVO; import cn.lili.modules.lmk.enums.general.AdminRoleEnum; +import cn.lili.modules.lmk.enums.general.VirtualGoodsTypeEnum; +import cn.lili.modules.lmk.service.CouponVirtualService; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dto.MemberAddressDTO; import cn.lili.modules.member.mapper.MemberMapper; @@ -47,7 +52,9 @@ import cn.lili.modules.permission.entity.dos.AdminUser; import cn.lili.modules.permission.service.AdminUserService; import cn.lili.modules.permission.service.RoleService; +import cn.lili.modules.promotion.entity.dos.Coupon; import cn.lili.modules.promotion.entity.dos.Pintuan; +import cn.lili.modules.promotion.service.CouponService; import cn.lili.modules.promotion.service.PintuanService; import cn.lili.modules.store.entity.dto.StoreDeliverGoodsAddressDTO; import cn.lili.modules.store.service.StoreDetailService; @@ -87,6 +94,7 @@ import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; @@ -199,8 +207,20 @@ @Resource private RedisTemplate<Object,Object> redisTemplate; + @Autowired + private CouponService couponService; + + @Autowired + private CouponVirtualService couponVirtualService; + + @Autowired + private RedissonClient redissonClient; + + @Autowired + private GoodsSkuService goodsSkuService; private final static String LOCK_ORDER_NO_MQ="lock_order_no_mq:"; private final static String LOCK_EDIT_ORDER_ADDRESS="lock_edit_order_address:"; + private final static String LOCK_COUPON_CARD="lock_coupon_card:"; @Override @Transactional(rollbackFor = Exception.class) public void intoDB(TradeDTO tradeDTO) { @@ -236,7 +256,21 @@ // item.getPriceDetailDTO().setPlatFormCommissionPoint(Double.valueOf(goods.getCommission().toString())); // e.setPriceDetailDTO(item.getPriceDetailDTO()); // orderItems.add(e); - orderItems.add(new OrderItem(sku, item, tradeDTO)); + //鐗规畩澶勭悊绾夸笂绀煎搧鍗¢棶棰� + String skuId = sku.getGoodsSku().getId(); + GoodsSku skuInfo = goodsSkuService.getById(skuId); + OrderItem orderItem = new OrderItem(sku, item, tradeDTO); + if (skuInfo != null) { + String goodsId = skuInfo.getGoodsId(); + Goods goodsInfo = goodsService.getById(goodsId); + if (goodsInfo != null&& VirtualGoodsTypeEnum.COUPON.name().equals(goodsInfo.getVirtualGoodsType())) { + String couponId = skuInfo.getCouponId(); + String couponName = skuInfo.getCouponName(); + orderItem.setCouponId(couponId); + orderItem.setCouponName(couponName); + } + } + orderItems.add(orderItem); currentOrderItems.add(new OrderItem(sku, item, tradeDTO)); } ); @@ -786,17 +820,80 @@ @OrderLogPoint(description = "'璁㈠崟['+#orderSn+']鏍搁攢锛屾牳閿�鐮乕'+#verificationCode+']'", orderSn = "#orderSn") @Transactional(rollbackFor = Exception.class) public Order take(String orderSn, String verificationCode) { + log.info("璁㈠崟鏍搁攢璁㈠崟鍙蜂负锛歿}锛屾牳閿�鐮佷负{}",orderSn,verificationCode); + Order order; + RLock lock = redissonClient.getLock(LOCK_COUPON_CARD + orderSn); + try { + lock.lock(); + //鑾峰彇璁㈠崟淇℃伅 + order = this.getBySn(orderSn); + log.info("鑾峰彇鍒扮殑璁㈠崟淇℃伅涓簕}",JSON.toJSONString(order)); + //璁㈠崟骞傜瓑闂 + if (OrderStatusEnum.COMPLETED.name().equals(order.getOrderStatus())) { + throw new ServiceException("褰撳墠璁㈠崟宸插畬鎴愭棤娉曞啀娆℃牳楠�"); + } - //鑾峰彇璁㈠崟淇℃伅 - Order order = this.getBySn(orderSn); - //妫�娴嬭櫄鎷熻鍗曚俊鎭� - checkVerificationOrder(order, verificationCode); - order.setOrderStatus(OrderStatusEnum.COMPLETED.name()); - //璁㈠崟瀹屾垚 - this.complete(orderSn); + //妫�娴嬭櫄鎷熻鍗曚俊鎭� + checkVerificationOrder(order, verificationCode); + order.setOrderStatus(OrderStatusEnum.COMPLETED.name()); + //璁㈠崟瀹屾垚 + //鑾峰彇鎵�鏈夌殑璁㈠崟瀛愰」鐢ㄤ簬鐢熸垚浼樻儬鍗疯鍗曚俊鎭� + List<OrderItem> orderItems = orderItemService.getByOrderSn(orderSn); + List<CouponVirtual> couponVirtuals = new ArrayList<>(); + for (OrderItem orderItem : orderItems) { + log.info("鑾峰彇鍒扮殑瀛愯鍗曚俊鎭负{}",JSON.toJSONString(orderItem)); + String couponId = orderItem.getCouponId(); + if (StringUtils.isBlank(couponId)) { + continue; + } + String storeId = order.getStoreId(); + Coupon one = couponService.getOne(Wrappers.<Coupon>lambdaQuery().eq(Coupon::getStoreId, storeId).eq(Coupon::getId, couponId)); + if (one == null) { + log.error("褰撳墠璁㈠崟璁㈠崟鍙蜂负:{}涓嶅瓨鍦ㄤ腑鐨勪紭鎯犲嵎涓嶅瓨鍦�----------------------->{}",order.getId(),orderItem.getOrderSn()); + }else { + Integer num = orderItem.getNum(); + //褰撹喘涔版暟閲忎笉涓虹┖鐨勬椂鍊欒繘琛� + if (num != null) { + for (int i = 1; i <= num; i++) { + CouponVirtual couponVirtual = getCouponVirtual(orderItem); + couponVirtual.setCouponNo(String.format("%08d", i)); + couponVirtuals.add(couponVirtual); + } + } + + } + } + if (!couponVirtuals.isEmpty()) { + log.info("鐢熸垚鐨勫厬鎹㈠崱涓簕}",JSON.toJSONString(couponVirtuals)); + order.setCouponFlag(CouPonFlagEnum.COUPON.name()); + couponVirtualService.saveBatch(couponVirtuals); + //鏇存柊鐘舵�佺敤浜庡悗缁皬绋嬪簭鍒ゆ柇寮瑰嚭鍗峰垪琛� + this.updateById(order); + } + this.complete(orderSn); + } finally { + assert lock != null; + if (lock.isHeldByCurrentThread()) { + lock.unlock(); + } + } return order; } + private static CouponVirtual getCouponVirtual(OrderItem orderItem) { + CouponVirtual couponVirtual = new CouponVirtual(); + couponVirtual.setOrderId(orderItem.getOrderSn()); + couponVirtual.setCouponId(orderItem.getCouponId()); + couponVirtual.setCouponName(orderItem.getCouponName()); + couponVirtual.setGoodsId(orderItem.getGoodsId()); + couponVirtual.setSkuId(orderItem.getSkuId()); + couponVirtual.setItemOrderId(orderItem.getId()); + couponVirtual.setSkuName(orderItem.getGoodsName()); + couponVirtual.setName(orderItem.getCouponName()); + couponVirtual.setShareStatus(ShareStatusEnum.NOT_SHARE.name()); + couponVirtual.setClaimStatus(ClaimStatusEnum.NOT_CLAIM.name()); + return couponVirtual; + } @Override public Order take(String verificationCode) { String storeId = OperationalJudgment.judgment(UserContext.getCurrentUser()).getStoreId(); -- Gitblit v1.8.0