From 7804b65c502ac9b2bb93f6f64dff53e2a1322f79 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Thu, 23 Jun 2022 10:40:48 +0800 Subject: [PATCH] 20220528 --- src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 233 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 177 insertions(+), 56 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java index 8cabb42..94472d4 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java @@ -6,15 +6,13 @@ import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.common.utils.MallUtils; import cc.mrbird.febs.common.utils.RedisUtils; +import cc.mrbird.febs.mall.conversion.MallGoodsCommentConversion; import cc.mrbird.febs.mall.conversion.MallOrderInfoConversion; import cc.mrbird.febs.mall.conversion.MallOrderRefundConversion; import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; -import cc.mrbird.febs.mall.service.IApiMallMemberService; -import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; -import cc.mrbird.febs.mall.service.IApiMallOrderInfoService; -import cc.mrbird.febs.mall.service.MallMemberService; +import cc.mrbird.febs.mall.service.*; import cc.mrbird.febs.mall.vo.OrderDetailVo; import cc.mrbird.febs.mall.vo.OrderListVo; import cc.mrbird.febs.mall.vo.OrderRefundVo; @@ -34,7 +32,6 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.text.SimpleDateFormat; import java.util.*; /** @@ -51,16 +48,19 @@ private final MallAddressInfoMapper mallAddressInfoMapper; private final MallOrderItemMapper mallOrderItemMapper; private final MallMemberMapper memberMapper; + private final MallGoodsCommentMapper mallGoodsCommentMapper; private final IApiMallMemberWalletService memberWalletService; private final MallExpressInfoMapper expressInfoMapper; private final MallOrderRefundMapper mallOrderRefundMapper; private final MallOrderRefundOperationMapper mallOrderRefundOperationMapper; private final MallShoppingCartMapper mallShoppingCartMapper; private final IApiMallMemberService memberService; + private final IMallMoneyFlowService mallMoneyFlowService; private final RedisUtils redisUtils; private final AgentProducer agentProducer; private final IPayService payService; + private final IMallAchieveService mallAchieveService; @Override @Transactional(rollbackFor = Exception.class) @@ -84,6 +84,7 @@ orderInfo.setLatitude(address.getLatitude()); orderInfo.setLongitude(address.getLongitude()); orderInfo.setRemark(addOrderDto.getRemark()); + orderInfo.setOrderType(addOrderDto.getOrderType()); if (CollUtil.isEmpty(addOrderDto.getItems())) { throw new FebsException("参数错误"); @@ -91,52 +92,93 @@ this.baseMapper.insert(orderInfo); BigDecimal total = BigDecimal.ZERO; + BigDecimal carriage = BigDecimal.ZERO; for (AddOrderItemDto item : addOrderDto.getItems()) { - MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId()); - if (sku == null) { - throw new FebsException("购买商品或sku不存在"); - } - - if (sku.getStock() < item.getCnt()) { - throw new FebsException(sku.getSkuName() + "库存不足"); - } - - MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId()); - if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) { - throw new FebsException(mallGoods.getGoodsName() + "已下架"); - } - MallOrderItem orderItem = new MallOrderItem(); - BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt())); - orderItem.setAmount(amount); - orderItem.setCnt(item.getCnt()); - orderItem.setOrderId(orderInfo.getId()); - orderItem.setPrice(sku.getPresentPrice()); - orderItem.setGoodsId(sku.getGoodsId()); - orderItem.setGoodsName(sku.getGoodsName()); - orderItem.setSkuId(sku.getId()); - orderItem.setStyleName(sku.getStyleName()); - orderItem.setSkuName(sku.getSkuName()); - orderItem.setSkuImage(sku.getSkuImage()); - total = total.add(amount); - mallOrderItemMapper.insert(orderItem); + // 积分商品提交订单 + if (addOrderDto.getOrderType() == 2) { + MallGoods mallGoods = mallGoodsMapper.selectById(item.getSkuId()); + if (mallGoods.getStock() < item.getCnt()) { + throw new FebsException(mallGoods.getGoodsName() + "库存不足"); + } - sku.setStock(sku.getStock() - item.getCnt()); - sku.setSkuVolume(sku.getSkuVolume() + item.getCnt()); - mallGoodsSkuMapper.updateById(sku); + if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) { + throw new FebsException(mallGoods.getGoodsName() + "已下架"); + } - if (addOrderDto.getType() == 1) { - mallShoppingCartMapper.delBySkuId(sku.getId(), member.getId()); + BigDecimal amount = mallGoods.getScore().multiply(BigDecimal.valueOf(item.getCnt())); + orderItem.setAmount(amount); + orderItem.setCnt(item.getCnt()); + orderItem.setOrderId(orderInfo.getId()); + orderItem.setPrice(mallGoods.getScore()); + orderItem.setGoodsId(mallGoods.getId()); + orderItem.setGoodsName(mallGoods.getGoodsName()); + orderItem.setStyleName(mallGoods.getGoodsName()); + orderItem.setSkuName(mallGoods.getGoodsName()); + orderItem.setSkuImage(mallGoods.getThumb()); + + total = total.add(amount); + } else { + MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId()); + if (sku == null) { + throw new FebsException("购买商品或sku不存在"); + } + + if (sku.getStock() < item.getCnt()) { + throw new FebsException(sku.getSkuName() + "库存不足"); + } + + MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId()); + + // 零撸专区购买 + if (new BigDecimal(mallGoods.getPresentPrice()).compareTo(BigDecimal.ZERO) == 0) { + List<MallOrderItem> items = mallOrderItemMapper.selectItemByGoodsIdUnCancel(mallGoods.getId(), member.getId()); + if (CollUtil.isNotEmpty(items)) { + throw new FebsException("无法重复领取同一个商品"); + } + } + + if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) { + throw new FebsException(mallGoods.getGoodsName() + "已下架"); + } + + BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt())); + orderItem.setAmount(amount); + orderItem.setCnt(item.getCnt()); + orderItem.setOrderId(orderInfo.getId()); + orderItem.setPrice(sku.getPresentPrice()); + orderItem.setGoodsId(sku.getGoodsId()); + orderItem.setGoodsName(sku.getGoodsName()); + orderItem.setSkuId(sku.getId()); + orderItem.setStyleName(sku.getStyleName()); + orderItem.setSkuName(sku.getSkuName()); + orderItem.setSkuImage(sku.getSkuImage()); + orderItem.setIsNormal(mallGoods.getIsNormal()); + orderItem.setCostPrice(sku.getCostPrice()); + + total = total.add(amount); + carriage = carriage.add(mallGoods.getCarriage()); + + sku.setStock(sku.getStock() - item.getCnt()); + sku.setSkuVolume(sku.getSkuVolume() + item.getCnt()); + mallGoodsSkuMapper.updateById(sku); + + if (addOrderDto.getType() == 1) { + mallShoppingCartMapper.delBySkuId(sku.getId(), member.getId()); + } } + mallOrderItemMapper.insert(orderItem); } orderInfo.setAmount(total); + orderInfo.setCarriage(carriage); this.baseMapper.updateById(orderInfo); agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(), 15 * 60 * 1000L); return orderInfo.getId(); } + @Override @Transactional(rollbackFor = Exception.class) @@ -175,6 +217,7 @@ // orderInfo.setPayOrderNo(payOrderDto.getPayOrderNo()); // orderInfo.setPayImage(payOrderDto.getPayImage()); orderInfo.setPayMethod("微信支付"); + agentProducer.sendOrderReturn(orderInfo.getId()); break; case "2": if (StrUtil.isNotBlank(orderInfo.getPayOrderNo())) { @@ -185,9 +228,10 @@ orderInfo.setPayOrderNo(payResultStr); orderInfo.setPayMethod("支付宝支付"); + agentProducer.sendOrderReturn(orderInfo.getId()); break; case "3": - payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd()); + payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance"); orderInfo.setPayOrderNo(orderInfo.getOrderNo()); orderInfo.setPayMethod("余额支付"); @@ -195,36 +239,63 @@ orderInfo.setPayTime(new Date()); orderInfo.setPayResult("1"); -// MallMember mallMember = memberMapper.selectById(member.getId()); -// if (AgentLevelEnum.ZERO_LEVEL.name().equals(mallMember.getLevel())) { -// mallMember.setLevel(AgentLevelEnum.FIRST_LEVEL.name()); -// memberMapper.updateById(mallMember); -// } - + boolean hasTc = false; // 静态倍数 List<MallOrderItem> orderItems = this.baseMapper.getMallOrderItemByOrderId(orderInfo.getId()); if (CollUtil.isNotEmpty(orderItems)) { for (MallOrderItem orderItem : orderItems) { MallGoods mallGoods = mallGoodsMapper.selectById(orderItem.getGoodsId()); - + BigDecimal score = BigDecimal.ZERO; MallGoodsSku sku = mallGoodsSkuMapper.selectById(orderItem.getSkuId()); - BigDecimal score = sku.getOriginalPrice().multiply(mallGoods.getStaticMultiple()); + if (mallGoods.getIsNormal() == 2) { + hasTc = true; + score = sku.getPresentPrice().multiply(mallGoods.getStaticMulti()); +// BigDecimal staticMulti = mallGoods.getStaticMulti() == null ? BigDecimal.ZERO : mallGoods.getStaticMulti(); +// score = sku.getPresentPrice().multiply(staticMulti); + } - memberWalletService.add(score, member.getId(), "score"); - memberService.addMoneyFlow(member.getId(), score, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), orderInfo.getOrderNo(), null, null, null, null, FlowTypeEnum.SCORE.getValue()); + if (score.compareTo(BigDecimal.ZERO) > 0) { + memberWalletService.add(score, member.getId(), "score"); + mallMoneyFlowService.addMoneyFlow(member.getId(), score, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue()); + + // 添加业绩 + mallAchieveService.add(orderItem.getId()); + } } } - memberService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), null, null, null, null, FlowTypeEnum.BALANCE.getValue()); -// agentProducer.sendAutoLevelUpMsg(member.getId()); -// agentProducer.sendReturnMoneyMsg(orderInfo.getId()); + // 购买套餐后,升级为普通会员 + if (hasTc) { + MallMember mallMember = memberMapper.selectById(member.getId()); + if (AgentLevelEnum.ZERO_LEVEL.name().equals(mallMember.getLevel())) { + mallMember.setLevel(AgentLevelEnum.FIRST_LEVEL.name()); + memberMapper.updateById(mallMember); + } + } + mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue()); + agentProducer.sendAutoLevelUpMsg(member.getId()); + agentProducer.sendOrderReturn(orderInfo.getId()); + break; + case "4": + if (orderInfo.getOrderType() != 2) { + throw new FebsException("非积分订单,无法使用积分支付"); + } + payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "prizeScore"); + + orderInfo.setPayOrderNo(orderInfo.getOrderNo()); + orderInfo.setPayMethod("积分支付"); + orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue()); + orderInfo.setPayTime(new Date()); + orderInfo.setPayResult("1"); + + mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.PRIZE_SCORE.getValue()); + break; default: } this.baseMapper.updateById(orderInfo); - Map<String, Object> map = new HashMap<>(); map.put("orderInfo", payResultStr); map.put("orderNo", orderInfo.getOrderNo()); @@ -233,13 +304,12 @@ return map; } - private String balancePay(MallOrderInfo orderInfo, String tradePwd) { + private String balancePay(MallOrderInfo orderInfo, String tradePwd, String field) { if (StrUtil.isBlank(tradePwd)) { throw new FebsException("支付密码错误"); } MallMember mallMember = memberMapper.selectById(orderInfo.getMemberId()); - if (StrUtil.isBlank(mallMember.getTradePassword())) { throw new FebsException("未设置支付密码"); } @@ -248,8 +318,7 @@ throw new FebsException("支付密码错误"); } - memberWalletService.reduce(orderInfo.getAmount(), mallMember.getId(), "balance"); - + memberWalletService.reduce(orderInfo.getAmount().add(orderInfo.getCarriage()), mallMember.getId(), field); return orderInfo.getOrderNo(); } @@ -356,6 +425,13 @@ orderRefund.setRefundTime(new Date()); orderRefund.setBeforeStatus(beforeStatus); orderRefund.setStatus(OrderRefundStatusEnum.REFUND_APPLY.getValue()); + + // 未发货则退运费,发货了则不退 + if (beforeStatus == 2) { + orderRefund.setAmount(orderInfo.getAmount().add(orderInfo.getCarriage())); + } else { + orderRefund.setAmount(orderInfo.getAmount()); + } mallOrderRefundMapper.insert(orderRefund); } else { orderRefund.setDesp(addRefundDto.getDesp()); @@ -364,6 +440,12 @@ orderRefund.setRefundTime(new Date()); orderRefund.setBeforeStatus(beforeStatus); orderRefund.setStatus(OrderRefundStatusEnum.REFUND_APPLY.getValue()); + // 未发货则退运费,发货了则不退 + if (beforeStatus == 2) { + orderRefund.setAmount(orderInfo.getAmount().add(orderInfo.getCarriage())); + } else { + orderRefund.setAmount(orderInfo.getAmount()); + } mallOrderRefundMapper.updateById(orderRefund); } @@ -410,4 +492,43 @@ this.baseMapper.updateById(orderInfo); } } + + @Override + public void goodsComment(ApiAddCommentDtos addCommentDtos) { + Long orderId = addCommentDtos.getOrderId(); + MallMember member = LoginUserUtil.getLoginUser(); + MallOrderInfo orderInfo = this.baseMapper.selectOrderDetailsById(orderId); + if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { + throw new FebsException("订单不存在"); + } + if (OrderStatusEnum.FINISH.getValue() != orderInfo.getStatus()) { + throw new FebsException("该状态不能评价"); + } + if (MallOrderInfo.COMMENT_STATE_YES == orderInfo.getCommentState()) { + throw new FebsException("该状态不能评价"); + } + + orderInfo.setCommentState(MallOrderInfo.COMMENT_STATE_YES); + this.baseMapper.updateById(orderInfo); + + List<ApiAddCommentDto> apiAddCommentDtos = addCommentDtos.getApiAddCommentDtos(); + if(CollUtil.isNotEmpty(apiAddCommentDtos)){ + for(ApiAddCommentDto apiAddCommentDto : apiAddCommentDtos){ + Long skuId = apiAddCommentDto.getSkuId(); + MallGoodsSku mallGoodsSku = mallGoodsSkuMapper.selectById(skuId); + Long goodsId = apiAddCommentDto.getGoodsId(); + MallGoods mallGoods = mallGoodsMapper.selectById(goodsId); + MallGoodsComment mallGoodsComment = MallGoodsCommentConversion.INSTANCE.dtoToEntity(apiAddCommentDto); + mallGoodsComment.setMemberId(member.getId()); + mallGoodsComment.setOrderId(orderId); + mallGoodsComment.setGoodsName(mallGoods.getGoodsName()); + mallGoodsComment.setSkuName(mallGoodsSku.getSkuName()); + mallGoodsComment.setStyleId(mallGoodsSku.getStyleId()); + mallGoodsComment.setStyleName(mallGoodsSku.getStyleName()); + mallGoodsComment.setShowState(MallGoodsComment.SHOW_STATE_ENABLE); + mallGoodsCommentMapper.insert(mallGoodsComment); + } + } + } + } -- Gitblit v1.9.1