|
@@ -1,189 +0,0 @@
|
|
|
-package com.yc.ship.module.trade.service.order.handler;
|
|
|
-
|
|
|
-import cn.hutool.core.collection.CollUtil;
|
|
|
-import cn.hutool.core.date.DateUtil;
|
|
|
-import cn.hutool.core.map.MapUtil;
|
|
|
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
-import com.yc.ship.framework.common.util.object.ObjectUtils;
|
|
|
-import com.yc.ship.framework.tenant.core.context.TenantContextHolder;
|
|
|
-import com.yc.ship.framework.tenant.core.util.TenantUtils;
|
|
|
-import com.yc.ship.module.marketing.api.coupon.dto.DistributorRefundReqDto;
|
|
|
-import com.yc.ship.module.marketing.api.coupon.dto.DistributorReqDto;
|
|
|
-import com.yc.ship.module.ota.service.distributor.DistributorService;
|
|
|
-import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderBindDO;
|
|
|
-import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO;
|
|
|
-import com.yc.ship.module.trade.dal.dataobject.refund.RefundDO;
|
|
|
-import com.yc.ship.module.trade.dal.mysql.order.TradeDetailMapper;
|
|
|
-import com.yc.ship.module.trade.dal.mysql.order.TradeOrderLogMapper;
|
|
|
-import com.yc.ship.module.trade.dal.mysql.order.TradeOrderMapper;
|
|
|
-import com.yc.ship.module.trade.enums.SellMethodEnum;
|
|
|
-import com.yc.ship.module.trade.enums.TradeOrderBindEnum;
|
|
|
-import com.yc.ship.module.trade.enums.VoucherStatusEnum;
|
|
|
-import com.yc.ship.module.trade.service.order.TradeOrderRepositoryService;
|
|
|
-import com.yc.ship.module.trade.service.order.bo.TradeOrderBO;
|
|
|
-import com.yc.ship.module.trade.service.refund.TradeRefundRepositoryService;
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.redisson.api.RLock;
|
|
|
-import org.redisson.api.RedissonClient;
|
|
|
-import org.springframework.core.annotation.Order;
|
|
|
-import org.springframework.stereotype.Component;
|
|
|
-
|
|
|
-import javax.annotation.Resource;
|
|
|
-import java.math.BigDecimal;
|
|
|
-import java.util.Arrays;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-
|
|
|
-/**
|
|
|
- * @Description :个人分销处理
|
|
|
- * @Author :qsl
|
|
|
- * @Date :2025/9/4 15:23
|
|
|
- */
|
|
|
-@Component
|
|
|
-@Order(TradeOrderHandler.COUPON)
|
|
|
-@Slf4j
|
|
|
-public class PersonalDistributorHandler implements TradeOrderHandler{
|
|
|
-
|
|
|
- @Resource
|
|
|
- private DistributorService distributorService;
|
|
|
- @Resource
|
|
|
- private TradeOrderRepositoryService tradeOrderRepositoryService;
|
|
|
- @Resource
|
|
|
- private TradeRefundRepositoryService tradeRefundRepositoryService;
|
|
|
- @Resource
|
|
|
- private RedissonClient redissonClient;
|
|
|
- final String PERSONAL_DISTRIBUTOR_ORDER_LOCK = "personalDistributor:order:lock:%d";
|
|
|
- @Resource
|
|
|
- private TradeDetailMapper tradeDetailMapper;
|
|
|
-
|
|
|
- @Resource
|
|
|
- private TradeOrderMapper tradeOrderMapper;
|
|
|
-
|
|
|
- @Resource
|
|
|
- private TradeOrderLogMapper tradeOrderLogMapper;
|
|
|
- @Override
|
|
|
- public void beforeOrderCreate(TradeOrderBO order) {
|
|
|
- if(order.getExtraInfo().getPersonalDistributorId() == null){
|
|
|
- return;
|
|
|
- }
|
|
|
- try {
|
|
|
- //绑定关系
|
|
|
- TradeOrderBindDO tradeOrderBindDO = new TradeOrderBindDO();
|
|
|
- tradeOrderBindDO.setId(IdWorker.getId());
|
|
|
- tradeOrderBindDO.setOrderId(order.getTradeOrderDO().getId());
|
|
|
- tradeOrderBindDO.setBindId(order.getExtraInfo().getPersonalDistributorId());
|
|
|
- tradeOrderBindDO.setType(TradeOrderBindEnum.PERSONAL_DISTRIBUTOR.getType());
|
|
|
- tradeOrderRepositoryService.saveBindOrder(tradeOrderBindDO);
|
|
|
- }catch (Exception e){
|
|
|
- log.error("个人分销处理异常",e);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void afterProcessSuccess(TradeOrderDO tradeOrderDO) {
|
|
|
- try {
|
|
|
- if(!ObjectUtils.equalsAny(tradeOrderDO.getSellMethod(), SellMethodEnum.MINI_APP.getType())){
|
|
|
- return;
|
|
|
- }
|
|
|
- List<TradeOrderBindDO> bindList = tradeOrderRepositoryService.getBindOrderByOrderId(tradeOrderDO.getId(), TradeOrderBindEnum.PERSONAL_DISTRIBUTOR);
|
|
|
- if(CollUtil.isEmpty(bindList)){
|
|
|
- return;
|
|
|
- }
|
|
|
- List<Map<String, Object>> orderProductList = tradeOrderRepositoryService.getOrderPackProduct(tradeOrderDO.getId());
|
|
|
- Map<String,Object> productMap = orderProductList.get(0);
|
|
|
- DistributorReqDto reqDto = new DistributorReqDto();
|
|
|
- reqDto.setProductId(MapUtil.getLong(productMap,"pack_product_id"));
|
|
|
- reqDto.setShareDistributorId(bindList.get(0).getBindId());
|
|
|
- reqDto.setOrderId(tradeOrderDO.getId());
|
|
|
- reqDto.setOrderAmount(tradeOrderDO.getPayAmount());
|
|
|
- reqDto.setTravelDate(DateUtil.formatDate(tradeOrderDO.getTravelDate()));
|
|
|
-// log.error("个人分销出票请求参数:{}", JsonUtils.toJsonString(reqDto));
|
|
|
-// CommonResult<Boolean> result = distributorService.handleOrderProductShare(reqDto);
|
|
|
-// log.error("个人分销出票返回参数:{}", JsonUtils.toJsonString(result));
|
|
|
- }catch (Exception e){
|
|
|
- log.error("个人分销处理异常-出票",e);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void afterRefundOrder(Long refundId) {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void afterRefundAmountSuccess(Long orderId, Long refundId, BigDecimal refundAmount) {
|
|
|
- try {
|
|
|
- TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(orderId);
|
|
|
- if(!ObjectUtils.equalsAny(tradeOrderDO.getSellMethod(), SellMethodEnum.MINI_APP.getType())){
|
|
|
- return;
|
|
|
- }
|
|
|
- if(refundId == null){
|
|
|
- return;
|
|
|
- }
|
|
|
- RefundDO refundDO = tradeRefundRepositoryService.getById(refundId);
|
|
|
- List<TradeOrderBindDO> bindList = tradeOrderRepositoryService.getBindOrderByOrderId(refundDO.getOrderId(), TradeOrderBindEnum.PERSONAL_DISTRIBUTOR);
|
|
|
- if(CollUtil.isEmpty(bindList)){
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- BigDecimal orderRefundAmount = tradeRefundRepositoryService.getRefundAmountFromOrderDetail(refundDO.getOrderId());
|
|
|
-
|
|
|
- List<Map<String, Object>> orderProductList = tradeOrderRepositoryService.getOrderPackProduct(tradeOrderDO.getId());
|
|
|
- Map<String,Object> productMap = orderProductList.get(0);
|
|
|
- DistributorRefundReqDto reqDto = new DistributorRefundReqDto();
|
|
|
- reqDto.setOrderAmount(tradeOrderDO.getPayAmount().subtract(orderRefundAmount));
|
|
|
- reqDto.setProductId(MapUtil.getLong(productMap,"pack_product_id"));
|
|
|
- reqDto.setOrderId(tradeOrderDO.getId());
|
|
|
-// log.error("个人分销退款请求参数:{}", JsonUtils.toJsonString(reqDto));
|
|
|
-// CommonResult<Boolean> result = distributorApi.handleOrderRefund(reqDto);
|
|
|
-// log.error("个人分销退款返回参数:{}", JsonUtils.toJsonString(result));
|
|
|
- //结算
|
|
|
- log.error("个人分销结算-退款:{}", orderId);
|
|
|
- doHandleOrderSettle(orderId);
|
|
|
- }catch (Exception e){
|
|
|
- log.error("个人分销处理异常-退款",e);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void afterCheckSuccess(Long orderId) {
|
|
|
- log.error("个人分销结算-核销:{}", orderId);
|
|
|
- TradeOrderDO tradeOrderDO = getOrder(orderId);
|
|
|
- if(tradeOrderDO == null || !ObjectUtils.equalsAny(tradeOrderDO.getSellMethod(), SellMethodEnum.MINI_APP.getType())){
|
|
|
- return;
|
|
|
- }
|
|
|
- TenantUtils.execute(tradeOrderDO.getTenantId(),()->{
|
|
|
- doHandleOrderSettle(orderId);
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- private void doHandleOrderSettle(Long orderId){
|
|
|
- String lockKey = String.format(PERSONAL_DISTRIBUTOR_ORDER_LOCK,orderId);
|
|
|
- RLock lock = redissonClient.getLock(lockKey);
|
|
|
- try {
|
|
|
- lock.lock();
|
|
|
- Long count = tradeOrderRepositoryService.getOrderDetailCountWithStatus(orderId, Arrays.asList(VoucherStatusEnum.UNUSED.getStatus(),VoucherStatusEnum.TOOK.getStatus(), VoucherStatusEnum.REFUNDING.getStatus()));
|
|
|
-// log.error("个人分销结算,当前未使用数量:{}", count);
|
|
|
-// if(count!=null && count == 0){
|
|
|
-// Boolean checkedData = distributorApi.handleOrderSettle(orderId).getCheckedData();
|
|
|
-// log.error("个人分销结算,请求返回:{}", checkedData);
|
|
|
-// }
|
|
|
- }catch (Exception e){
|
|
|
- log.error("个人分销结算异常",e);
|
|
|
- }finally {
|
|
|
- if(lock.isHeldByCurrentThread() && lock.isLocked()){
|
|
|
- lock.unlock();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private TradeOrderDO getOrder(Long orderId){
|
|
|
- TenantContextHolder.setIgnore(true);
|
|
|
- try {
|
|
|
- return tradeOrderRepositoryService.getById(orderId);
|
|
|
- }finally {
|
|
|
- TenantContextHolder.setIgnore(false);
|
|
|
- }
|
|
|
- }
|
|
|
-}
|