| 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<String,Object> param)  { | 
|   | 
|         String orderId = (String) param.get("orderId"); | 
|         LogUtil.debug("收到订单积分任务orderId={}", orderId); | 
|         //获取订单信息 | 
|         ShopOrder order = shopOrderDao.selectById(Integer.valueOf(orderId)); | 
|         //获取订单详情 | 
|         List<ShopOrderDetails> 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, | 
|                                     "推荐消费奖励" | 
|                             ); | 
|                         } | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|   | 
|   | 
|     } | 
|   | 
| } |