package com.matrix.system.shopXcx.mqTask; import com.matrix.component.asyncmessage.MessageHandler; import com.matrix.core.tools.LogUtil; import com.matrix.core.tools.StringUtils; import com.matrix.system.common.bean.BusParameterSettings; import com.matrix.system.common.dao.BusParameterSettingsDao; import com.matrix.system.hive.bean.SysVipInfo; import com.matrix.system.hive.dao.SysVipInfoDao; import com.matrix.system.hive.service.SysVipInfoService; import com.matrix.system.score.constant.ScoreSettingConstant; import com.matrix.system.score.entity.ScoreVipDetail; import com.matrix.system.score.service.ScoreVipDetailService; import com.matrix.system.shopXcx.bean.ShopOrder; import com.matrix.system.shopXcx.bean.ShopOrderDetails; import com.matrix.system.shopXcx.dao.ShopOrderDao; import com.matrix.system.shopXcx.dao.ShopOrderDetailsDao; import com.rabbitmq.client.DeliverCallback; import com.rabbitmq.client.Delivery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.io.IOException; import java.math.BigDecimal; import java.util.List; import java.util.Map; /** * 订单创建积分事件处理 */ @Component public class ScoreOrderTask implements MessageHandler { @Autowired ShopOrderDao shopOrderDao; @Autowired ShopOrderDetailsDao shopOrderDetailsDao; @Autowired SysVipInfoService sysVipInfoService; @Autowired ScoreVipDetailService scoreVipDetailService; @Autowired BusParameterSettingsDao busParameterSettingsDao; @Autowired SysVipInfoDao sysVipInfoDao; @Override public String getName() { return "订单创建积分事件"; } @Override public String getRouteKey() { return AsyncMessageRouting.CREATE_ORDER; } @Override public void handle(Map param) { String orderId = (String) param.get("orderId"); LogUtil.debug("收到订单积分任务orderId={}", orderId); //获取订单信息 ShopOrder order = shopOrderDao.selectById(Integer.valueOf(orderId)); //获取订单详情 List orderDetails = shopOrderDetailsDao.selectByOrderId(Integer.valueOf(orderId)); order.setDetails(orderDetails); //扣除积分 if (order.getScorePay() != null && order.getScorePay() > 0) { scoreVipDetailService.deductionScore(order.getUserId(), null, Long.parseLong(order.getStoreId() + ""), order.getScorePay(), Long.parseLong(order.getId() + ""), ScoreVipDetail.SCORE_VIP_TYPE_CASH, "商城积分抵扣"); } else { //消费获得积分 int addScore = 0; BusParameterSettings cashConsumptionShop = busParameterSettingsDao.selectCompanyParamByCode(ScoreSettingConstant.CASH_CONSUMPTION_SHOP, order.getCompanyId()); for (ShopOrderDetails shopOrderDetail : orderDetails) { if (shopOrderDetail.getPayType() == ShopOrderDetails.PAYTYPE_MICRO) { Integer xfkdScore = shopOrderDetail.getShopSku().getScore(); if (xfkdScore != null && xfkdScore > 0) { addScore += xfkdScore; } else { if (StringUtils.isNotBlank(cashConsumptionShop.getParamValue())) { addScore += shopOrderDetail.getTotalPrice().divide(new BigDecimal(cashConsumptionShop.getParamValue())).intValue(); } } } } if (addScore > 0) { //插入新的积分 scoreVipDetailService.addScore( order.getUserId(), null, Long.parseLong(order.getStoreId() + ""), addScore, Long.parseLong(orderId + ""), ScoreVipDetail.SCORE_VIP_TYPE_CASH, "微商城消费"); //插入上级积分 SysVipInfo vipInfo = sysVipInfoService.findById(order.getUserId()); if (vipInfo.getRecommendId() != null) { //推荐注册老带新积分奖励 SysVipInfo referrerVip = sysVipInfoDao.selectById(vipInfo.getRecommendId()); if (StringUtils.isNotBlank(cashConsumptionShop.getParamValue1())) { int parentScore = order.getOrderMoney().divide(new BigDecimal(cashConsumptionShop.getParamValue1())).intValue(); if (parentScore > 0) { scoreVipDetailService.addScore( referrerVip.getId(), null, Long.parseLong(order.getStoreId() + ""), parentScore, Long.parseLong(order.getId() + ""), ScoreVipDetail.SCORE_VIP_TYPE_CASH, "推荐消费奖励" ); } } //推荐注册二级带新积分奖励 if (referrerVip.getRecommendId() != null && StringUtils.isNotBlank(cashConsumptionShop.getParamValue2())) { SysVipInfo topVipInfo = sysVipInfoDao.selectById(referrerVip.getRecommendId()); int topParentScore = order.getOrderMoney().divide(new BigDecimal(cashConsumptionShop.getParamValue2())).intValue(); if (topParentScore > 0) { scoreVipDetailService.addScore( topVipInfo.getId(), null, Long.parseLong(order.getStoreId() + ""), topParentScore, Long.parseLong(order.getId() + ""), ScoreVipDetail.SCORE_VIP_TYPE_CASH, "推荐消费奖励" ); } } } } } } }