admin
2025-02-25 30d8e227e8d823b6c38c3b9c90ac2df03b63befe
fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/order/OrderDividentsMessageListener.java
@@ -1,150 +1,150 @@
package com.yeshi.fanli.util.rocketmq.consumer.order;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.entity.SystemFunction;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.util.SystemInfoUtil;
import org.springframework.stereotype.Component;
import com.aliyun.openservices.ons.api.Action;
import com.aliyun.openservices.ons.api.ConsumeContext;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.MessageListener;
import com.google.gson.Gson;
import com.yeshi.fanli.dto.mq.order.OrderTopicTagEnum;
import com.yeshi.fanli.dto.mq.order.body.OrderConfirmMQMsg;
import com.yeshi.fanli.dto.mq.order.body.OrderMQMsg;
import com.yeshi.fanli.dto.mq.order.body.OrderWeiQuanMQMsg;
import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum;
import com.yeshi.fanli.dto.mq.user.body.UserForbiddenMQMsg;
import com.yeshi.fanli.dto.order.UserTeamLevel;
import com.yeshi.fanli.entity.bus.user.ThreeSale;
import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum;
import com.yeshi.fanli.entity.order.CommonOrder;
import com.yeshi.fanli.exception.ParamsException;
import com.yeshi.fanli.exception.money.TeamDividentsDebtException;
import com.yeshi.fanli.exception.order.dividents.TeamDividentsSourceOrderException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
import com.yeshi.fanli.service.manger.order.TeamDividentsManager;
import com.yeshi.fanli.service.manger.order.TeamDividentsSourceManager;
import com.yeshi.fanli.service.manger.user.UserLevelManager;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.order.CommonOrderUtil;
import com.yeshi.fanli.util.rocketmq.MQTopicName;
/**
 * 订单分红消息
 *
 * @author Administrator
 */
@Component
public class OrderDividentsMessageListener implements MessageListener {
    @Resource
    private CommonOrderService commonOrderService;
    @Resource
    private TeamDividentsManager teamDividentsManager;
    @Resource
    private TeamDividentsSourceManager teamDividentsSourceManager;
    @Resource
    private ThreeSaleSerivce threeSaleSerivce;
    @Resource
    private UserLevelManager userLevelManager;
    @Resource
    private UserInfoService userInfoService;
    public OrderDividentsMessageListener() {
    }
    @Override
    public Action consume(Message message, ConsumeContext context) {
        LogHelper.mqInfo("consumer:OrderDividentsMessageListener", message.getMsgID(), message.getTopic(),
                message.getTag(), new String(message.getBody()));
        String tag = message.getTag();
        if (MQTopicName.TOPIC_USER.name().equalsIgnoreCase(message.getTopic())) {
            if (tag.equalsIgnoreCase(UserTopicTagEnum.forbiddenUser.name())) {
                // 查询上级红包
                UserForbiddenMQMsg dto = new Gson().fromJson(new String(message.getBody()), UserForbiddenMQMsg.class);
                if (dto != null) {
                    teamDividentsSourceManager.invalidBySourceUid(dto.getUid(), "用户被封禁");
                    return Action.CommitMessage;
                }
            }
        } else if (MQTopicName.TOPIC_ORDER.name().equalsIgnoreCase(message.getTopic())) {
            if (tag.equalsIgnoreCase(OrderTopicTagEnum.orderStatistic.name())) {
                OrderMQMsg dto = new Gson().fromJson(new String(message.getBody()), OrderMQMsg.class);
                if (dto == null || dto.getStaticticDate().getTime() < Constant.NEW_ORDER_FANLI_RULE_TIME)
                    return Action.CommitMessage;
                //是否有三级分销权限
                SystemEnum system = userInfoService.getUserSystem(dto.getUid());
                if (!SystemInfoUtil.hasFunctions(system, SystemFunction.threeSale))
                    return Action.CommitMessage;
                if (dto.isMiandan())// 免单的商品不参与分红
                    return Action.CommitMessage;
                if (dto.getHandleType() == OrderMQMsg.HANDLE_TYPE_ADD) {
                    List<CommonOrder> commonOrderList = commonOrderService.listBySourceTypeAndOrderId(dto.getType(),
                            dto.getOrderId());
                    int state = CommonOrderUtil.getState(commonOrderList);
                    if (commonOrderList.size() > 0 && state != CommonOrder.STATE_SX) {
                        List<UserTeamLevel> bossList = new ArrayList<>();
                        List<ThreeSale> threeSalesList = threeSaleSerivce.getMyBossDeepList(dto.getUid(), 100);
                        if (threeSalesList != null)
                            for (ThreeSale ts : threeSalesList) {
                                UserLevelEnum level = userLevelManager.getUserLevel(ts.getBoss().getId());
                                bossList.add(new UserTeamLevel(ts.getBoss().getId(), level));
                            }
                        try {
                            teamDividentsSourceManager.addSource(commonOrderList, bossList);
                            return Action.CommitMessage;
                        } catch (TeamDividentsSourceOrderException e) {
                            if (e.getCode() == TeamDividentsSourceOrderException.CODE_EXIST) {
                                return Action.CommitMessage;
                            }
                        } catch (ParamsException e) {
                            e.printStackTrace();
                        }
                    }
                } else {
                    teamDividentsSourceManager.updateOrderMoney(dto.getOrderId(), dto.getType());
                }
            } else if (tag.equalsIgnoreCase(OrderTopicTagEnum.orderConfirm.name())) {// 订单确认收货
                OrderConfirmMQMsg dto = new Gson().fromJson(new String(message.getBody()), OrderConfirmMQMsg.class);
                //是否有三级分销权限
                SystemEnum system = userInfoService.getUserSystem(dto.getSourceUid());
                if (!SystemInfoUtil.hasFunctions(system, SystemFunction.threeSale))
                    return Action.CommitMessage;
                teamDividentsSourceManager.orderSettle(dto.getOrderNo(), dto.getSourceType());
            } else if (tag.equalsIgnoreCase(OrderTopicTagEnum.taoBaoOrderWeiQuan.name())) {
                OrderWeiQuanMQMsg dto = new Gson().fromJson(new String(message.getBody()), OrderWeiQuanMQMsg.class);
                try {
                    teamDividentsManager.weiQuan(dto.getOrderNo(), dto.getSourceType());
                    return Action.CommitMessage;
                } catch (TeamDividentsDebtException e) {
                    e.printStackTrace();
                }
            }
        }
        return Action.CommitMessage;
    }
}
package com.yeshi.fanli.util.rocketmq.consumer.order;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.entity.SystemFunction;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.util.SystemInfoUtil;
import org.springframework.stereotype.Component;
import com.aliyun.openservices.ons.api.Action;
import com.aliyun.openservices.ons.api.ConsumeContext;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.MessageListener;
import com.google.gson.Gson;
import com.yeshi.fanli.dto.mq.order.OrderTopicTagEnum;
import com.yeshi.fanli.dto.mq.order.body.OrderConfirmMQMsg;
import com.yeshi.fanli.dto.mq.order.body.OrderMQMsg;
import com.yeshi.fanli.dto.mq.order.body.OrderWeiQuanMQMsg;
import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum;
import com.yeshi.fanli.dto.mq.user.body.UserForbiddenMQMsg;
import com.yeshi.fanli.dto.order.UserTeamLevel;
import com.yeshi.fanli.entity.bus.user.ThreeSale;
import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum;
import com.yeshi.fanli.entity.order.CommonOrder;
import com.yeshi.fanli.exception.ParamsException;
import com.yeshi.fanli.exception.money.TeamDividentsDebtException;
import com.yeshi.fanli.exception.order.dividents.TeamDividentsSourceOrderException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
import com.yeshi.fanli.service.manger.order.TeamDividentsManager;
import com.yeshi.fanli.service.manger.order.TeamDividentsSourceManager;
import com.yeshi.fanli.service.manger.user.UserLevelManager;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.order.CommonOrderUtil;
import com.yeshi.fanli.util.rocketmq.MQTopicName;
/**
 * 订单分红消息
 *
 * @author Administrator
 */
@Component
public class OrderDividentsMessageListener implements MessageListener {
    @Resource
    private CommonOrderService commonOrderService;
    @Resource
    private TeamDividentsManager teamDividentsManager;
    @Resource
    private TeamDividentsSourceManager teamDividentsSourceManager;
    @Resource
    private ThreeSaleSerivce threeSaleSerivce;
    @Resource
    private UserLevelManager userLevelManager;
    @Resource
    private UserInfoService userInfoService;
    public OrderDividentsMessageListener() {
    }
    @Override
    public Action consume(Message message, ConsumeContext context) {
        LogHelper.mqInfo("consumer:OrderDividentsMessageListener", message.getMsgID(), message.getTopic(),
                message.getTag(), new String(message.getBody()));
        String tag = message.getTag();
        if (MQTopicName.TOPIC_USER.name().equalsIgnoreCase(message.getTopic())) {
            if (tag.equalsIgnoreCase(UserTopicTagEnum.forbiddenUser.name())) {
                // 查询上级红包
                UserForbiddenMQMsg dto = new Gson().fromJson(new String(message.getBody()), UserForbiddenMQMsg.class);
                if (dto != null) {
                    teamDividentsSourceManager.invalidBySourceUid(dto.getUid(), "用户被封禁");
                    return Action.CommitMessage;
                }
            }
        } else if (MQTopicName.TOPIC_ORDER.name().equalsIgnoreCase(message.getTopic())) {
            if (tag.equalsIgnoreCase(OrderTopicTagEnum.orderStatistic.name())) {
                OrderMQMsg dto = new Gson().fromJson(new String(message.getBody()), OrderMQMsg.class);
                if (dto == null || dto.getStaticticDate().getTime() < Constant.NEW_ORDER_FANLI_RULE_TIME)
                    return Action.CommitMessage;
                //是否有三级分销权限
                SystemEnum system = userInfoService.getUserSystem(dto.getUid());
                if (!SystemInfoUtil.hasFunctions(system, SystemFunction.threeSale))
                    return Action.CommitMessage;
                if (dto.isMiandan())// 免单的商品不参与分红
                    return Action.CommitMessage;
                if (dto.getHandleType() == OrderMQMsg.HANDLE_TYPE_ADD) {
                    List<CommonOrder> commonOrderList = commonOrderService.listBySourceTypeAndOrderId(dto.getType(),
                            dto.getOrderId());
                    int state = CommonOrderUtil.getState(commonOrderList);
                    if (commonOrderList.size() > 0 && state != CommonOrder.STATE_SX) {
                        List<UserTeamLevel> bossList = new ArrayList<>();
                        List<ThreeSale> threeSalesList = threeSaleSerivce.getMyBossDeepList(dto.getUid(), 100);
                        if (threeSalesList != null)
                            for (ThreeSale ts : threeSalesList) {
                                UserLevelEnum level = userLevelManager.getUserLevel(ts.getBoss().getId());
                                bossList.add(new UserTeamLevel(ts.getBoss().getId(), level));
                            }
                        try {
                            teamDividentsSourceManager.addSource(commonOrderList, bossList);
                            return Action.CommitMessage;
                        } catch (TeamDividentsSourceOrderException e) {
                            if (e.getCode() == TeamDividentsSourceOrderException.CODE_EXIST) {
                                return Action.CommitMessage;
                            }
                        } catch (ParamsException e) {
                            e.printStackTrace();
                        }
                    }
                } else {
                    teamDividentsSourceManager.updateOrderMoney(dto.getOrderId(), dto.getType());
                }
            } else if (tag.equalsIgnoreCase(OrderTopicTagEnum.orderConfirm.name())) {// 订单确认收货
                OrderConfirmMQMsg dto = new Gson().fromJson(new String(message.getBody()), OrderConfirmMQMsg.class);
                //是否有三级分销权限
                SystemEnum system = userInfoService.getUserSystem(dto.getSourceUid());
                if (!SystemInfoUtil.hasFunctions(system, SystemFunction.threeSale))
                    return Action.CommitMessage;
                teamDividentsSourceManager.orderSettle(dto.getOrderNo(), dto.getSourceType());
            } else if (tag.equalsIgnoreCase(OrderTopicTagEnum.taoBaoOrderWeiQuan.name())) {
                OrderWeiQuanMQMsg dto = new Gson().fromJson(new String(message.getBody()), OrderWeiQuanMQMsg.class);
                try {
                    teamDividentsManager.weiQuan(dto.getOrderNo(), dto.getSourceType());
                    return Action.CommitMessage;
                } catch (TeamDividentsDebtException e) {
                    e.printStackTrace();
                }
            }
        }
        return Action.CommitMessage;
    }
}