فهرست منبع

分佣相关调整

cup 2 سال پیش
والد
کامیت
21d02c62ca

+ 32 - 0
mp-common/src/main/java/com/qs/mp/common/enums/ChannelCommissionResourceEnum.java

@@ -0,0 +1,32 @@
+package com.qs.mp.common.enums;
+
+import com.baomidou.mybatisplus.annotation.IEnum;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * 渠道分佣订单来源枚举类
+ * @author Cup
+ * @date 2022/6/7
+ */
+@ApiModel("渠道分佣订单来源枚举类")
+public enum ChannelCommissionResourceEnum implements IEnum<Integer> {
+    USER(1, "用户"),
+    CHANNEL(2,"经销商");
+
+    private Integer value;
+    private String desc;
+
+    ChannelCommissionResourceEnum(Integer value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    @Override
+    public Integer getValue() {
+        return value;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+}

+ 39 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/param/ChannelCommParam.java

@@ -0,0 +1,39 @@
+package com.qs.mp.channel.domain.param;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.qs.mp.common.enums.CommStatusEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 渠道分佣入参类
+ * @author Cup
+ * @date 2022/6/7
+ */
+@ApiModel("渠道分佣入参类")
+@Data
+public class ChannelCommParam {
+
+    @ApiModelProperty("订单id")
+    private String orderId;
+
+    @ApiModelProperty("盲票组id")
+    private String boxId;
+
+    @ApiModelProperty("渠道id")
+    private Long channelId;
+
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    @ApiModelProperty("实付金额")
+    private Integer payAmt;
+
+    @ApiModelProperty("结佣标识,1代表已结佣 0代表未结佣")
+    @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+    private CommStatusEnum commStatus;
+
+}

+ 7 - 0
mp-service/src/main/java/com/qs/mp/channel/service/IChannelUserRelService.java

@@ -26,4 +26,11 @@ public interface IChannelUserRelService extends IService<ChannelUserRel> {
 	 * @return
 	 */
 	int getChannelNewUserCnt(String channelNo, int days);
+
+	/**
+	 * 经销商绑定用户关系
+	 * @param userId
+	 * @param channelId
+	 */
+	void bindUser(Long userId,Long channelId);
 }

+ 15 - 0
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelUserRelServiceImpl.java

@@ -1,5 +1,6 @@
 package com.qs.mp.channel.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.qs.mp.channel.domain.ChannelUserRel;
 import com.qs.mp.channel.mapper.ChannelUserRelMapper;
 import com.qs.mp.channel.service.IChannelUserRelService;
@@ -26,4 +27,18 @@ public class ChannelUserRelServiceImpl extends ServiceImpl<ChannelUserRelMapper,
 	public int getChannelNewUserCnt(String channelNo, int days) {
 		return getBaseMapper().getChannelNewUserCnt(channelNo, days == 1?0:days);
 	}
+
+	@Override
+	public void bindUser(Long userId, Long channelId) {
+		// 线下票如果用户没被绑定,则保存经销商用户绑定关系
+		ChannelUserRel channelUserRel = this.getOne(
+				new LambdaQueryWrapper<ChannelUserRel>()
+						.eq(ChannelUserRel::getUserId, userId));
+		if (null == channelUserRel) {
+			channelUserRel = new ChannelUserRel();
+			channelUserRel.setChannelId(channelId);
+			channelUserRel.setUserId(userId);
+			this.save(channelUserRel);
+		}
+	}
 }

+ 9 - 7
mp-service/src/main/java/com/qs/mp/mq/impl/PulsarConsumerImpl.java

@@ -10,12 +10,8 @@ import com.qs.mp.admin.service.ITicketBoxSerialService;
 import com.qs.mp.admin.service.ITicketBoxService;
 import com.qs.mp.admin.service.ITicketPackageService;
 import com.qs.mp.admin.service.ITicketService;
-import com.qs.mp.common.enums.CommStatusEnum;
-import com.qs.mp.common.enums.MqTopicType;
-import com.qs.mp.common.enums.TicketBoxStatusEnum;
-import com.qs.mp.common.enums.TicketPkgSaleStatusEnum;
-import com.qs.mp.common.enums.TicketTypeEnum;
-import com.qs.mp.common.enums.UserTicketOrderStatusEnum;
+import com.qs.mp.channel.service.IChannelUserRelService;
+import com.qs.mp.common.enums.*;
 import com.qs.mp.common.pulsar.PulsarConsumer;
 import com.qs.mp.common.utils.LogUtil;
 import com.qs.mp.user.domain.UserTicketOrder;
@@ -55,6 +51,9 @@ public class PulsarConsumerImpl implements PulsarConsumer {
   @Autowired
   private ITicketService ticketService;
 
+  @Autowired
+  private IChannelUserRelService channelUserRelService;
+
   @Override
   @Async("threadPoolTaskExecutor")
   public void wsConsumer(String topicType, String mqData) {
@@ -97,6 +96,9 @@ public class PulsarConsumerImpl implements PulsarConsumer {
           .eq(TicketPackage::getPkgId, ticketPackage.getPkgId()));
     }
 
+    // 用户关系绑定
+    channelUserRelService.bindUser(ticketOrder.getUserId(), ticketOrder.getChannelId());
+
     if (ticketOrder.getCommStatus() != CommStatusEnum.NO) {
       LogUtil.warn(logger, "收到盲票支付成功消息,订单结佣状态不是未结佣,忽略消息。orderId=" + orderId);
       return;
@@ -108,7 +110,7 @@ public class PulsarConsumerImpl implements PulsarConsumer {
       LogUtil.error(logger, "收到盲票支付成功消息,更新订单结佣状态为结佣中失败。orderId=" + orderId);
       return;
     }
-    userTicketOrderService.commToChannel(orderId);
+    userTicketOrderService.commToChannel(orderId, ChannelCommissionResourceEnum.USER.getValue());
   }
 
   private void processTicketGenerateMsg(String mqData) {

+ 2 - 1
mp-service/src/main/java/com/qs/mp/user/service/IUserTicketOrderService.java

@@ -63,9 +63,10 @@ public interface IUserTicketOrderService extends IService<UserTicketOrder> {
   /**
    * 给渠道分润
    * @param orderId
+   * @param resource 订单来源1用户,2经销商
    * @return
    */
-  boolean commToChannel(String orderId);
+  boolean commToChannel(String orderId,Integer resource);
   
   
   /**

+ 39 - 43
mp-service/src/main/java/com/qs/mp/user/service/impl/UserTicketOrderServiceImpl.java

@@ -14,26 +14,11 @@ import com.qs.mp.admin.domain.vo.*;
 import com.qs.mp.admin.service.ITicketBoxService;
 import com.qs.mp.admin.service.ITicketPackageService;
 import com.qs.mp.admin.service.ITicketService;
-import com.qs.mp.channel.domain.Channel;
-import com.qs.mp.channel.domain.ChannelCommission;
-import com.qs.mp.channel.domain.ChannelMoneyLog;
-import com.qs.mp.channel.domain.ChannelOrderDetail;
-import com.qs.mp.channel.domain.ChannelUserRel;
-import com.qs.mp.channel.service.IChannelCommissionService;
-import com.qs.mp.channel.service.IChannelMoneyLogService;
-import com.qs.mp.channel.service.IChannelOrderDetailService;
-import com.qs.mp.channel.service.IChannelService;
-import com.qs.mp.channel.service.IChannelUserRelService;
+import com.qs.mp.channel.domain.*;
+import com.qs.mp.channel.domain.param.ChannelCommParam;
+import com.qs.mp.channel.service.*;
 import com.qs.mp.common.core.redis.RedisCache;
-import com.qs.mp.common.enums.ChannelMoneyEnum;
-import com.qs.mp.common.enums.CommStatusEnum;
-import com.qs.mp.common.enums.ErrorCodeEnum;
-import com.qs.mp.common.enums.TicketBoxStatusEnum;
-import com.qs.mp.common.enums.TicketPkgSaleStatusEnum;
-import com.qs.mp.common.enums.TicketStatusEnum;
-import com.qs.mp.common.enums.TicketTypeEnum;
-import com.qs.mp.common.enums.UserCouponStatusEnum;
-import com.qs.mp.common.enums.UserTicketOrderStatusEnum;
+import com.qs.mp.common.enums.*;
 import com.qs.mp.common.exception.ServiceException;
 import com.qs.mp.common.utils.DateUtils;
 import com.qs.mp.common.utils.LogUtil;
@@ -61,6 +46,7 @@ import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -110,6 +96,12 @@ public class UserTicketOrderServiceImpl extends
   @Autowired
   private ITicketPackageService ticketPackageService;
 
+  @Autowired
+  private IChannelOrderService channelOrderService;
+
+  @Autowired
+  private IChannelOrderItemService channelOrderItemService;
+
   @Autowired
   private BizIdGenerator bizIdGenerator;
 
@@ -432,16 +424,30 @@ public class UserTicketOrderServiceImpl extends
 
   @Override
   @Transactional(rollbackFor = Exception.class)
-  public boolean commToChannel(String orderId) {
-    UserTicketOrder ticketOrder = getById(orderId);
-    Assert.isTrue(ticketOrder.getCommStatus() == CommStatusEnum.DOING,
-        "结佣处理,结佣状态异常,不是结佣中。orderId=" + orderId);
-
-    if (null != ticketOrder.getChannelId()) {
+  public boolean commToChannel(String orderId, Integer resource) {
+    ChannelCommParam channelCommParam = new ChannelCommParam();
+    if (ChannelCommissionResourceEnum.USER.getValue().equals(resource)) {
+      UserTicketOrder ticketOrder = getById(orderId);
+      BeanUtils.copyProperties(ticketOrder, channelCommParam);
+      Assert.isTrue(channelCommParam.getCommStatus() == CommStatusEnum.DOING,
+              "结佣处理,结佣状态异常,不是结佣中。orderId=" + orderId);
+    } else {
+      ChannelOrder channelOrder = channelOrderService.getById(orderId);
+      ChannelOrderItem channelOrderItem = channelOrderItemService.getOne(new LambdaQueryWrapper<ChannelOrderItem>()
+              .eq(ChannelOrderItem::getOrderId, orderId));
+      channelCommParam.setBoxId(channelOrderItem.getBoxId());
+      channelCommParam.setChannelId(channelOrder.getChannelId());
+      channelCommParam.setOrderId(channelOrder.getOrderId());
+      channelCommParam.setPayAmt(channelOrder.getPayAmt());
+    }
+    if (channelCommParam.getPayAmt() == 0) {
+      return true;
+    }
+    if (null != channelCommParam.getChannelId()) {
       // 线下购票,优先给当前票的经销商渠道分润
-      TicketBox ticketBox = ticketBoxService.getById(ticketOrder.getBoxId());
-      Channel channel = channelService.getById(ticketOrder.getChannelId());
-      ChannelCommission siteCommission = saveSiteCommAmt(ticketOrder, ticketBox, channel);
+      TicketBox ticketBox = ticketBoxService.getById(channelCommParam.getBoxId());
+      Channel channel = channelService.getById(channelCommParam.getChannelId());
+      ChannelCommission siteCommission = saveSiteCommAmt(channelCommParam, ticketBox, channel);
       // 经销商账户余额增加
       changeMoney(channel, siteCommission);
 
@@ -463,19 +469,9 @@ public class UserTicketOrderServiceImpl extends
         channelCommissionService.save(channelCommission);
         sumCommAmt += channelCommission.getCommAmt();
       }
-      // 线下票如果用户没被绑定,则保存经销商用户绑定关系
-      ChannelUserRel channelUserRel = channelUserRelService.getOne(
-          new LambdaQueryWrapper<ChannelUserRel>()
-              .eq(ChannelUserRel::getUserId, ticketOrder.getUserId()));
-      if (null == channelUserRel) {
-        channelUserRel = new ChannelUserRel();
-        channelUserRel.setChannelId(ticketOrder.getChannelId());
-        channelUserRel.setUserId(ticketOrder.getUserId());
-        channelUserRelService.save(channelUserRel);
-      }
     } else {
       LogUtil.info(logger, "渠道结佣时,订单对应的渠道不存在,无需结佣。orderId:{0}",
-          ticketOrder.getOrderId());
+          channelCommParam.getOrderId());
     }
     boolean rst = update(
         new LambdaUpdateWrapper<UserTicketOrder>().set(UserTicketOrder::getCommStatus,
@@ -496,13 +492,13 @@ public class UserTicketOrderServiceImpl extends
     channelMoneyLogService.changeMoney(moneyLog);
   }
 
-  private ChannelCommission saveSiteCommAmt(UserTicketOrder ticketOrder, TicketBox ticketBox,
+  private ChannelCommission saveSiteCommAmt(ChannelCommParam channelCommParam, TicketBox ticketBox,
       Channel channel) {
     ChannelCommission siteCommission = new ChannelCommission();
     siteCommission.setChannelId(channel.getChannelId());
-    siteCommission.setOrderId(ticketOrder.getOrderId());
-    siteCommission.setBoxId(ticketOrder.getBoxId());
-    siteCommission.setSaleAmt(ticketOrder.getPayAmt());
+    siteCommission.setOrderId(channelCommParam.getOrderId());
+    siteCommission.setBoxId(channelCommParam.getBoxId());
+    siteCommission.setSaleAmt(channelCommParam.getPayAmt());
     siteCommission.setSaleCommRate(ticketBox.getSaleCommRate());
     siteCommission.setSaleCommAmt(new BigDecimal(siteCommission.getSaleAmt()).multiply(
             siteCommission.getSaleCommRate()).divide(new BigDecimal(100), 0, RoundingMode.DOWN)