|  |  | 
 |  |  | package cc.mrbird.febs.mall.service.impl; | 
 |  |  |  | 
 |  |  | import cc.mrbird.febs.common.entity.FebsResponse; | 
 |  |  | import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; | 
 |  |  | import cc.mrbird.febs.common.enumerates.OrderDeliveryStateEnum; | 
 |  |  | import cc.mrbird.febs.common.enumerates.OrderStatusEnum; | 
 |  |  | import cc.mrbird.febs.common.enumerates.*; | 
 |  |  | import cc.mrbird.febs.common.properties.XcxProperties; | 
 |  |  | import cc.mrbird.febs.common.utils.LoginUserUtil; | 
 |  |  | import cc.mrbird.febs.common.utils.ShareCodeUtil; | 
 |  |  | import cc.mrbird.febs.common.utils.SpringContextHolder; | 
 |  |  | 
 |  |  | import cc.mrbird.febs.mall.conversion.MallTeamLeaderConversion; | 
 |  |  | import cc.mrbird.febs.mall.dto.*; | 
 |  |  | import cc.mrbird.febs.mall.entity.*; | 
 |  |  | import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper; | 
 |  |  | import cc.mrbird.febs.mall.mapper.MallMemberMapper; | 
 |  |  | import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper; | 
 |  |  | import cc.mrbird.febs.mall.mapper.MallTeamLeaderMapper; | 
 |  |  | import cc.mrbird.febs.mall.mapper.*; | 
 |  |  | import cc.mrbird.febs.mall.service.IAdminMallOrderService; | 
 |  |  | import cc.mrbird.febs.mall.service.IApiMallTeamLeaderService; | 
 |  |  | import cc.mrbird.febs.mall.service.IMallMoneyFlowService; | 
 |  |  | import cc.mrbird.febs.mall.vo.ApiLeaderInfoVo; | 
 |  |  | import cc.mrbird.febs.mall.vo.ApiLeaderListVo; | 
 |  |  | import cc.mrbird.febs.mall.vo.ApiMallleaderStateVo; | 
 |  |  | 
 |  |  | import cc.mrbird.febs.pay.model.OrderStateDto; | 
 |  |  | import cc.mrbird.febs.pay.service.IXcxPayService; | 
 |  |  | import cc.mrbird.febs.pay.util.WechatConfigure; | 
 |  |  | import cc.mrbird.febs.pay.util.WeixinServiceUtil; | 
 |  |  | import cn.hutool.core.collection.CollUtil; | 
 |  |  | import cn.hutool.core.util.ObjectUtil; | 
 |  |  | import cn.hutool.core.util.StrUtil; | 
 |  |  | 
 |  |  | import lombok.RequiredArgsConstructor; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.apache.commons.collections.CollectionUtils; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  | import org.springframework.transaction.annotation.Transactional; | 
 |  |  |  | 
 |  |  | import java.math.BigDecimal; | 
 |  |  | import java.util.Arrays; | 
 |  |  | import java.util.HashMap; | 
 |  |  | import java.util.List; | 
 |  |  | 
 |  |  |     private final IXcxPayService iXcxPayService; | 
 |  |  |     private final SpringContextHolder springContextHolder; | 
 |  |  |     private final DataDictionaryCustomMapper dataDictionaryCustomMapper; | 
 |  |  |     private final MallOrderItemMapper mallOrderItemMapper; | 
 |  |  |     private final MallRefundMapper mallRefundMapper; | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     @Transactional | 
 |  |  | 
 |  |  |         return new FebsResponse().success().data(result); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private WeixinServiceUtil weixinServiceUtil; | 
 |  |  |     private final XcxProperties xcxProperties = SpringContextHolder.getBean(XcxProperties.class); | 
 |  |  |     private final IMallMoneyFlowService mallMoneyFlowService; | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     @Transactional | 
 |  |  |     public FebsResponse leaderRefundOrder(ApiLeaderRefundOrderDto apiLeaderRefundOrderDto) { | 
 |  |  |         //获取退款订单信息 | 
 |  |  |         Long orderId = apiLeaderRefundOrderDto.getOrderId(); | 
 |  |  |         Long itemId = apiLeaderRefundOrderDto.getItemId(); | 
 |  |  |         MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId); | 
 |  |  |         MallOrderItem mallOrderItem = mallOrderItemMapper.selectById(itemId); | 
 |  |  |         List<MallRefundEntity> mallRefundEntities = mallRefundMapper.selectByItemIdAndOrderIdAndState(itemId, orderId, 3); | 
 |  |  |         if(CollUtil.isEmpty(mallRefundEntities)){ | 
 |  |  |             return new FebsResponse().fail().message("退款失败,请联系客服人员"); | 
 |  |  |         } | 
 |  |  |         MallRefundEntity mallRefundEntity = mallRefundEntities.get(0); | 
 |  |  |         //退款订单编号 | 
 |  |  |         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; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         if(flag){ | 
 |  |  |             //更新订单详情 | 
 |  |  |             mallOrderItem.setState(3); | 
 |  |  |             mallOrderItemMapper.updateById(mallOrderItem); | 
 |  |  |             //更新退款订单 | 
 |  |  |             mallRefundEntity.setState(1); | 
 |  |  |             mallRefundMapper.updateById(mallRefundEntity); | 
 |  |  |             mallMoneyFlowService.addMoneyFlow(mallOrderInfo.getMemberId(), refundAmount, MoneyFlowTypeEnum.REFUND.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue()); | 
 |  |  |         }else{ | 
 |  |  |             mallRefundEntity.setState(2); | 
 |  |  |             mallRefundMapper.updateById(mallRefundEntity); | 
 |  |  |             return new FebsResponse().fail().message("退款失败,请联系客服人员"); | 
 |  |  |         } | 
 |  |  |         return new FebsResponse().success().message("退款成功"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } |