From 4ce960adbb7355ac75efcd03705f58f923ecdbd6 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Tue, 09 Aug 2022 11:21:13 +0800 Subject: [PATCH] 20220808 --- src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 405 +++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 332 insertions(+), 73 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 1733f9e..8a4e680 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 @@ -1,40 +1,43 @@ package cc.mrbird.febs.mall.service.impl; +import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.enumerates.*; import cc.mrbird.febs.common.exception.FebsException; -import cc.mrbird.febs.common.utils.AppContants; -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.common.properties.XcxProperties; +import cc.mrbird.febs.common.utils.*; +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; +import cc.mrbird.febs.pay.model.BrandWCPayRequestData; import cc.mrbird.febs.pay.service.IPayService; +import cc.mrbird.febs.pay.service.IXcxPayService; +import cc.mrbird.febs.pay.util.WeixinServiceUtil; import cc.mrbird.febs.rabbit.producter.AgentProducer; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.text.SimpleDateFormat; import java.util.*; /** @@ -51,25 +54,29 @@ 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 IXcxPayService iXcxPayService; + private final IMallAchieveService mallAchieveService; + private final MallRefundMapper mallRefundMapper; @Override @Transactional(rollbackFor = Exception.class) public Long createOrder(AddOrderDto addOrderDto) { MallMember member = LoginUserUtil.getLoginUser(); - - MallAddressInfo address = mallAddressInfoMapper.selectAddressInfoByMemberIdAndId(member.getId(), addOrderDto.getAddressId()); - if (address == null) { - throw new FebsException("地址不存在"); + String takeUniqueCode = addOrderDto.getTakeUniqueCode(); + if(StrUtil.isEmpty(takeUniqueCode)){ + throw new FebsException("请选择自提点"); } String orderNo = MallUtils.getOrderNum(); @@ -78,12 +85,11 @@ orderInfo.setOrderTime(new Date()); orderInfo.setMemberId(member.getId()); orderInfo.setStatus(OrderStatusEnum.WAIT_PAY.getValue()); - orderInfo.setName(address.getName()); - orderInfo.setAddress(address.getArea() + address.getAddress()); - orderInfo.setPhone(address.getPhone()); - orderInfo.setLatitude(address.getLatitude()); - orderInfo.setLongitude(address.getLongitude()); orderInfo.setRemark(addOrderDto.getRemark()); + orderInfo.setOrderType(addOrderDto.getOrderType()); + + orderInfo.setTakeUniqueCode(addOrderDto.getTakeUniqueCode()); + orderInfo.setDeliveryType(1); if (CollUtil.isEmpty(addOrderDto.getItems())) { throw new FebsException("参数错误"); @@ -91,52 +97,107 @@ 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); + + MallAddressInfo address = mallAddressInfoMapper.selectAddressInfoByMemberIdAndId(member.getId(), addOrderDto.getAddressId()); + orderInfo.setName(address.getName()); + orderInfo.setPhone(address.getPhone()); + orderInfo.setIsHome(addOrderDto.getIsHome()); + //订单金额大于50,且选择送货上门,订单需要选择地址信息 + if(total.compareTo(new BigDecimal(50)) > 0 && 1 == addOrderDto.getIsHome()){ + if (StrUtil.isBlank(address.getLatitude())||StrUtil.isBlank(address.getLongitude())) { + throw new FebsException("请添加地址"); + } + orderInfo.setAddress(address.getArea() + address.getAddress()); + orderInfo.setLatitude(address.getLatitude()); + orderInfo.setLongitude(address.getLongitude()); + } this.baseMapper.updateById(orderInfo); agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(), 15 * 60 * 1000L); return orderInfo.getId(); } + @Override @Transactional(rollbackFor = Exception.class) @@ -170,11 +231,21 @@ } String payResultStr = ""; + String wxResultStr = ""; switch (payOrderDto.getType()) { case "1": // orderInfo.setPayOrderNo(payOrderDto.getPayOrderNo()); // orderInfo.setPayImage(payOrderDto.getPayImage()); + BrandWCPayRequestData brandWCPayRequestData = null; + try { + brandWCPayRequestData = iXcxPayService.startPayment(orderInfo); + } catch (Exception e) { + throw new FebsException("支付失败"); + } + wxResultStr = JSONUtil.toJsonStr(brandWCPayRequestData); + payResultStr = brandWCPayRequestData.getPrepay_id(); orderInfo.setPayMethod("微信支付"); + agentProducer.sendOrderReturn(orderInfo.getId()); break; case "2": if (StrUtil.isNotBlank(orderInfo.getPayOrderNo())) { @@ -185,9 +256,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,49 +267,81 @@ 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()); - memberService.addMoneyFlow(member.getId(), score, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), orderInfo.getOrderNo(), null, null, null, null, FlowTypeEnum.SCORE.getValue()); + if (mallGoods.getIsNormal() == 2) { + hasTc = true; + score = sku.getPresentPrice().multiply(mallGoods.getStaticMulti()).multiply(new BigDecimal(orderItem.getCnt())); +// BigDecimal staticMulti = mallGoods.getStaticMulti() == null ? BigDecimal.ZERO : mallGoods.getStaticMulti(); +// score = sku.getPresentPrice().multiply(staticMulti); + } + + 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: } + //订单支付成功产生一个提货码 + String takeCode = ShareCodeUtil.toSerialCode(orderInfo.getId()); + orderInfo.setTakeCode(takeCode); this.baseMapper.updateById(orderInfo); - Map<String, Object> map = new HashMap<>(); map.put("orderInfo", payResultStr); map.put("orderNo", orderInfo.getOrderNo()); map.put("orderId", orderInfo.getId()); + map.put("wxResultStr", wxResultStr); 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("未设置支付密码"); } @@ -246,8 +350,10 @@ throw new FebsException("支付密码错误"); } - memberWalletService.reduceBalance(orderInfo.getAmount(), mallMember.getId()); - + int reduce = memberWalletService.reduce(orderInfo.getAmount().add(orderInfo.getCarriage()), mallMember.getId(), field); + if (reduce == 2) { + throw new FebsException("余额不足"); + } return orderInfo.getOrderNo(); } @@ -271,11 +377,11 @@ OrderDetailVo orderDetailVo = MallOrderInfoConversion.INSTANCE.entityToDetailVo(orderInfo); - if (orderInfo.getStatus() == OrderStatusEnum.WAIT_FINISH.getValue()) { - MallExpressInfo expressInfo = expressInfoMapper.selectByOrderId(orderInfo.getId()); - orderDetailVo.setExpressNo(expressInfo.getExpressNo()); - orderDetailVo.setExpressCom(expressInfo.getExpressCom()); - } +// if (orderInfo.getStatus() == OrderStatusEnum.WAIT_FINISH.getValue()) { +// MallExpressInfo expressInfo = expressInfoMapper.selectByOrderId(orderInfo.getId()); +// orderDetailVo.setExpressNo(expressInfo.getExpressNo()); +// orderDetailVo.setExpressCom(expressInfo.getExpressCom()); +// } if (orderInfo.getStatus() == OrderStatusEnum.REFUNDING.getValue() || orderInfo.getStatus() == OrderStatusEnum.REFUNDED.getValue()) { MallOrderRefund orderRefund = mallOrderRefundMapper.selectOrderRefundByOrderId(orderInfo.getId()); @@ -303,6 +409,10 @@ if (orderInfo.getStatus() != OrderStatusEnum.WAIT_FINISH.getValue()) { throw new FebsException("该状态不能确认收货"); + } + + if (orderInfo.getDeliveryState() != OrderDeliveryStateEnum.DELIVERY_FINISH.getValue()) { + throw new FebsException("还未送至自提点"); } orderInfo.setStatus(OrderStatusEnum.FINISH.getValue()); @@ -354,6 +464,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()); @@ -362,6 +479,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); } @@ -408,4 +531,140 @@ this.baseMapper.updateById(orderInfo); } } + + @Override + @Transactional + 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); + } + } + } + + @Autowired + private WeixinServiceUtil weixinServiceUtil; + private final XcxProperties xcxProperties = SpringContextHolder.getBean(XcxProperties.class); + + @Override + @Transactional + public FebsResponse refundOrder(Long id) { + MallMember member = LoginUserUtil.getLoginUser(); + MallOrderInfo mallOrderInfo = this.baseMapper.selectById(id); + if(ObjectUtil.isEmpty(mallOrderInfo)){ + return new FebsResponse().fail().message("订单不存在"); + } + Integer status = mallOrderInfo.getStatus(); + if(OrderStatusEnum.WAIT_SHIPPING.getValue() != status){ + return new FebsResponse().fail().message("订单不是待发货状态"); + } + Integer deliveryState = mallOrderInfo.getDeliveryState(); + if(1 != deliveryState){ + return new FebsResponse().fail().message("订单不是待配送状态"); + } + QueryWrapper<MallRefundEntity> objectQueryWrapper = new QueryWrapper<>(); + objectQueryWrapper.eq("member_id",member.getId()); + objectQueryWrapper.eq("order_id",mallOrderInfo.getId()); + MallRefundEntity mallRefund = mallRefundMapper.selectOne(objectQueryWrapper); + MallRefundEntity mallRefundEntity = new MallRefundEntity(); + if(ObjectUtil.isEmpty(mallRefund)){ + mallRefundEntity.setRefundNo(mallOrderInfo.getOrderNo()+"_r"); + mallRefundEntity.setMemberId(member.getId()); + mallRefundEntity.setOrderId(mallOrderInfo.getId()); + mallRefundEntity.setType(1); + mallRefundEntity.setState(3); + mallRefundEntity.setAmount(mallOrderInfo.getAmount()); + mallRefundMapper.insert(mallRefundEntity); + } + if(mallRefund.getState() == 1){ + return new FebsResponse().fail().message("订单已退款"); + } + if(mallRefund.getState() == 3){ + return new FebsResponse().fail().message("订单退款中"); + } + if(mallRefund.getState() == 2){ + mallRefundEntity.setId(mallRefund.getId()); + mallRefundEntity.setRefundNo(mallRefund.getRefundNo()); + mallRefundEntity.setMemberId(mallRefund.getMemberId()); + mallRefundEntity.setOrderId(mallRefund.getOrderId()); + mallRefundEntity.setType(mallRefund.getType()); + mallRefundEntity.setState(3); + mallRefundEntity.setAmount(mallRefund.getAmount()); + mallRefundMapper.updateById(mallRefundEntity); + } + + //退款订单编号 + String orderNo = mallOrderInfo.getOrderNo(); + //退款退款编号 + String refundNo = mallRefundEntity.getRefundNo(); + //退款订单金额 + BigDecimal orderAmount = mallOrderInfo.getAmount(); + BigDecimal aa = new BigDecimal(100); + int orderMoney = orderAmount.multiply(aa).intValue(); + + //退款退款金额 + BigDecimal refundAmount = mallRefundEntity.getAmount(); + BigDecimal bb = new BigDecimal(100); + int refundMoney = refundAmount.multiply(bb).intValue(); + + Boolean flag = false; + Boolean debug = xcxProperties.getDebug(); + if (debug) { + boolean b = weixinServiceUtil.comRefund(orderNo, refundNo, 1, 1, null); + flag = b; + } else { + log.info("开始调用退款接口。。。退款编号为{}", refundNo); + boolean b = weixinServiceUtil.comRefund(orderNo, refundNo, orderMoney, refundMoney, null); + flag = b; + } + + /** + * 更新退款表 + * 更新订单表 + */ + Long refundId = mallRefundEntity.getId(); + MallRefundEntity mallRefundOld = mallRefundMapper.selectById(refundId); + MallOrderInfo mallOrderInfoOld = this.baseMapper.selectByOrderNo(orderNo); + if(flag){ + mallRefundOld.setState(1); + mallRefundMapper.updateById(mallRefundOld); + mallOrderInfoOld.setStatus(OrderStatusEnum.REFUNDED.getValue()); + this.baseMapper.updateById(mallOrderInfoOld); + }else{ + mallRefundOld.setState(2); + mallRefundMapper.updateById(mallRefundOld); + return new FebsResponse().fail().message("退款失败,请联系客服人员"); + } + return new FebsResponse().success().message("退款成功"); + } + } -- Gitblit v1.9.1