From 98b1a0affd69bbe63223c21fdd2c404e8bedfccb Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期三, 20 五月 2020 17:25:08 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/div' into 2.1.2 --- fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java | 1756 +++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 1,078 insertions(+), 678 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java index 90402ea..916beef 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java @@ -9,128 +9,103 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.UUID; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import org.yeshi.utils.NumberUtil; -import com.yeshi.fanli.dao.mybatis.AccountDetailsMapper; -import com.yeshi.fanli.dao.mybatis.AccountMessageMapper; -import com.yeshi.fanli.dao.mybatis.HongBaoManageMapper; +import com.aliyun.openservices.ons.api.Message; +import com.aliyun.openservices.ons.api.Producer; +import com.aliyun.openservices.ons.api.transaction.LocalTransactionExecuter; +import com.aliyun.openservices.ons.api.transaction.TransactionProducer; +import com.aliyun.openservices.ons.api.transaction.TransactionStatus; +import com.google.gson.Gson; import com.yeshi.fanli.dao.mybatis.HongBaoV2Mapper; -import com.yeshi.fanli.dao.mybatis.MoneyRecordMapper; -import com.yeshi.fanli.dao.mybatis.PidOrderMapper; -import com.yeshi.fanli.dao.mybatis.ThreeSaleGiftMapper; import com.yeshi.fanli.dao.mybatis.UserInfoMapper; -import com.yeshi.fanli.dao.mybatis.hongbao.HongBaoMapper; import com.yeshi.fanli.dao.mybatis.money.UserMoneyDetailMapper; import com.yeshi.fanli.dao.mybatis.order.HongBaoOrderMapper; -import com.yeshi.fanli.dao.mybatis.order.OrderItemMapper; import com.yeshi.fanli.dao.mybatis.order.OrderMapper; -import com.yeshi.fanli.dao.mybatis.share.PidUserMapper; import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoWeiQuanOrderMapper; -import com.yeshi.fanli.entity.bus.user.AccountDetails; -import com.yeshi.fanli.entity.bus.user.HongBao; -import com.yeshi.fanli.entity.bus.user.HongBaoExtra; +import com.yeshi.fanli.dto.mq.UidDateDTO; +import com.yeshi.fanli.dto.mq.order.OrderTopicTagEnum; +import com.yeshi.fanli.dto.mq.order.body.OrderMQMsg; +import com.yeshi.fanli.dto.mq.order.body.OrderMoneyRecievedMQMsg; +import com.yeshi.fanli.dto.order.CommonOrderAddResultDTO; +import com.yeshi.fanli.dto.order.HongBaoAddResult; import com.yeshi.fanli.entity.bus.user.HongBaoV2; -import com.yeshi.fanli.entity.bus.user.MoneyRecord; import com.yeshi.fanli.entity.bus.user.Order; -import com.yeshi.fanli.entity.bus.user.OrderItem; +import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo; import com.yeshi.fanli.entity.bus.user.UserInfo; +import com.yeshi.fanli.entity.elme.ElmeHongBaoOrderMap; +import com.yeshi.fanli.entity.elme.ElmeOrder; +import com.yeshi.fanli.entity.jd.JDOrder; +import com.yeshi.fanli.entity.jd.JDOrderItem; import com.yeshi.fanli.entity.money.UserMoneyDetail; import com.yeshi.fanli.entity.order.CommonOrder; import com.yeshi.fanli.entity.order.HongBaoOrder; -import com.yeshi.fanli.entity.taobao.PidOrder; +import com.yeshi.fanli.entity.pdd.PDDOrder; import com.yeshi.fanli.entity.taobao.PidUser; import com.yeshi.fanli.entity.taobao.TaoBaoOrder; import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig; +import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanDrawBack; import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder; -import com.yeshi.fanli.entity.taobao.TaobaoOrderHongBao; -import com.yeshi.fanli.exception.HongBaoException; -import com.yeshi.fanli.exception.ObjectStateException; -import com.yeshi.fanli.exception.OrderItemException; -import com.yeshi.fanli.exception.TaoBaoWeiQuanException; +import com.yeshi.fanli.exception.elme.ElmeOrderException; +import com.yeshi.fanli.exception.money.OrderMoneySettleException; import com.yeshi.fanli.exception.money.UserMoneyDetailException; import com.yeshi.fanli.exception.order.CommonOrderException; +import com.yeshi.fanli.exception.order.HongBaoException; +import com.yeshi.fanli.exception.order.OrderItemException; +import com.yeshi.fanli.exception.order.TaoBaoWeiQuanException; +import com.yeshi.fanli.exception.user.UserAccountException; import com.yeshi.fanli.log.LogHelper; +import com.yeshi.fanli.log.OrderLogHelper; +import com.yeshi.fanli.service.inter.elme.ElmeHongBaoOrderMapService; +import com.yeshi.fanli.service.inter.elme.ElmeOrderProcessService; +import com.yeshi.fanli.service.inter.elme.ElmeOrderService; import com.yeshi.fanli.service.inter.hongbao.AccountDetailsHongBaoMapService; -import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService; -import com.yeshi.fanli.service.inter.hongbao.HongBaoService; -import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service; +import com.yeshi.fanli.service.inter.money.UserMoneyService; +import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService; +import com.yeshi.fanli.service.inter.money.tb.TaoBaoWeiQuanDrawBackService; import com.yeshi.fanli.service.inter.order.CommonOrderService; +import com.yeshi.fanli.service.inter.order.HongBaoV2Service; import com.yeshi.fanli.service.inter.order.LostOrderService; -import com.yeshi.fanli.service.inter.order.OrderItemServcie; +import com.yeshi.fanli.service.inter.order.OrderMoneySettleService; import com.yeshi.fanli.service.inter.order.OrderProcessService; -import com.yeshi.fanli.service.inter.order.OrderService; -import com.yeshi.fanli.service.inter.order.PidOrderService; -import com.yeshi.fanli.service.inter.push.PushService; -import com.yeshi.fanli.service.inter.taobao.TaoBaoOrderService; +import com.yeshi.fanli.service.inter.order.jd.JDOrderService; +import com.yeshi.fanli.service.inter.order.msg.UserOrderMsgNotificationService; +import com.yeshi.fanli.service.inter.order.pdd.PDDOrderService; +import com.yeshi.fanli.service.inter.order.tb.TaoBaoOrderService; +import com.yeshi.fanli.service.inter.taobao.TaoBaoBuyRelationMapService; import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService; -import com.yeshi.fanli.service.inter.taobao.TaoBaoWeiQuanDrawBackService; -import com.yeshi.fanli.service.inter.user.UserNotificationService; +import com.yeshi.fanli.service.inter.user.UserSystemCouponService; +import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService; +import com.yeshi.fanli.service.manger.order.HongBaoV2AddManager; import com.yeshi.fanli.util.CMQManager; -import com.yeshi.fanli.util.HongBaoUtil; -import com.yeshi.fanli.util.RedisManager; +import com.yeshi.fanli.util.Constant; +import com.yeshi.fanli.util.MoneyBigDecimalUtil; import com.yeshi.fanli.util.StringUtil; +import com.yeshi.fanli.util.TaoBaoConstant; import com.yeshi.fanli.util.TimeUtil; -import com.yeshi.fanli.util.factory.AccountDetailsFactory; +import com.yeshi.fanli.util.cmq.order.PlaceOrderCMQManager; +import com.yeshi.fanli.util.cmq.order.TeamOrderCMQManager; import com.yeshi.fanli.util.factory.UserMoneyDetailFactory; +import com.yeshi.fanli.util.jd.JDApiUtil; +import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil; +import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory; +import com.yeshi.fanli.util.rocketmq.MQTopicName; @Service public class OrderProcessServiceImpl implements OrderProcessService { @Resource - private PidOrderMapper pidOrderMapper; - - @Resource private OrderMapper orderMapper; @Resource - private PidUserMapper pidUserMapper; - - @Resource - private HongBaoService hongBaoService; - - @Resource - private OrderItemServcie orderItemService; - - @Resource - private PidOrderService pidOrderService; - - @Resource private UserInfoMapper userInfoMapper; - - @Resource - private OrderItemMapper orderItemMapper; - - @Resource - private HongBaoMapper hongBaoMapper; - - @Resource - private HongBaoManageMapper hongBaoManageMapper; - - @Resource - private AccountDetailsMapper accountDetailsMapper; - - @Resource - private AccountMessageMapper accountMessageMapper; - - @Resource - private MoneyRecordMapper moneyRecordMapper; - - @Resource - private ThreeSaleGiftMapper threeSaleGiftMapper; - - @Resource - private OrderService orderService; - - @Resource - private PushService pushService; - - @Resource - private UserNotificationService userNotificationService; @Resource private TaoBaoUnionConfigService taoBaoUnionConfigService; @@ -142,16 +117,10 @@ private TaoBaoOrderService taoBaoOrderService; @Resource - private RedisManager redisManager; - - @Resource private LostOrderService lostOrderService; @Resource private TaoBaoWeiQuanOrderMapper taoBaoWeiQuanOrderMapper; - - @Resource - private HongBaoManageService hongBaoManageService; @Resource private AccountDetailsHongBaoMapService accountDetailsHongBaoMapService; @@ -162,31 +131,128 @@ @Resource private HongBaoV2Mapper hongBaoV2Mapper; + @Resource + private UserMoneyMsgNotificationService userMoneyMsgNotificationService; + + @Resource + private UserOrderMsgNotificationService userOrderMsgNotificationService; + + @Resource + private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; + + @Resource + private UserSystemCouponService userSystemCouponService; + + @Resource + private UserMoneyService userMoneyService; + + @Resource + private TaoBaoBuyRelationMapService taoBaoBuyRelationMapService; + + @Resource + private CommonOrderService commonOrderService; + + @Resource + private HongBaoV2Service hongBaoV2Service; + + @Resource + private JDOrderService jdOrderService; + + @Resource + private PDDOrderService pddOrderService; + + @Resource(name = "orderTransactionProducer") + private TransactionProducer orderTransactionProducer; + + @Resource(name = "producer") + private Producer producer; + + @Resource + private OrderMoneySettleService orderMoneySettleService; + + @Resource + private HongBaoV2AddManager hongBaoV2AddManager; + + /** + * 鏄惁鏄垎浜鍗� + * + * @param order + * @return + */ + private boolean isShareOrder(TaoBaoOrder order) { + List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService.getConfigByTypeCache(PidUser.TYPE_FANLI_ANDROID); + String pid = String.format("mm_%s_%s_%s", configList.get(0).getAccountId(), order.getSourceMediaId(), + order.getAdPositionId()); + if (!StringUtil.isNullOrEmpty(order.getSpecialId()) + || pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID)) {// 璁剧疆娓犻亾ID褰撳仛浼氬憳杩愯惀ID鐨勪綅缃甀D + return false; + } else if (!StringUtil.isNullOrEmpty(order.getRelationId())) { + return true; + } else { + // 閫氳繃绾㈠寘鏌ヨ + CommonOrder commonOrder = commonOrderService.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, + order.getTradeId()); + + if (commonOrder != null) { + HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId()); + if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null + && hongBaoOrder.getHongBaoV2().getType() == HongBaoV2.TYPE_SHARE_GOODS) { + return true; + } + } + return false; + } + } + @Override - public void processOrder(Map<String, List<TaoBaoOrder>> orders) { + public synchronized void processOrder(Map<String, List<TaoBaoOrder>> orders) { List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService.getConfigByTypeCache(PidUser.TYPE_FANLI_ANDROID); // 鍒嗙鍑鸿繑鍒╄鍗曚笌鍒嗕韩璧氳鍗� Iterator<String> its = orders.keySet().iterator(); Map<String, List<TaoBaoOrder>> fanliOrderMap = new HashMap<>(); - Map<String, List<PidOrder>> sharePidOrderMap = new HashMap<>(); Map<String, List<TaoBaoOrder>> shareOrderMap = new HashMap<>(); + Map<String, List<TaoBaoOrder>> elmeOrderMap = new HashMap<>(); while (its.hasNext()) { String orderId = its.next(); + if (orders.get(orderId) != null && orders.get(orderId).size() > 0) { List<TaoBaoOrder> list = orders.get(orderId); String pid = String.format("mm_%s_%s_%s", configList.get(0).getAccountId(), list.get(0).getSourceMediaId(), list.get(0).getAdPositionId()); - PidUser pidUser = pidUserMapper.selectByPid(pid); - if (pidUser != null && pidUser.getType() == PidUser.TYPE_SHARE_GOODS) {// 鍟嗗搧鍒嗕韩璁㈠崟 - // List<PidOrder> pidOrderList = new ArrayList<>(); - // for (TaoBaoOrder order : list) { - // pidOrderList.add(TaoBaoOrderUtil.convertToPidOrder(order)); - // } - // sharePidOrderMap.put(orderId, pidOrderList); - shareOrderMap.put(orderId, list); - } else {// 鏅�氳繑鍒╄鍗� + if ("楗夸簡涔�".equalsIgnoreCase(list.get(0).getOrderType()) + && !pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT)) { + // 楗夸簡涔堣鍗曞紑濮嬪綊鍏ュ埌娣樺疂璁㈠崟 + if (TimeUtil.convertToTimeTemp(list.get(0).getCreateTime(), + "yyyy-MM-dd HH:mm:ss") >= Constant.NEW_ORDER_FANLI_RULE_TIME) { + fanliOrderMap.put(orderId, list); + } else { + elmeOrderMap.put(orderId, list); + } + } else if ("鍙g".equalsIgnoreCase(list.get(0).getOrderType()) + && pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_KOUBEI_PID)) {// 鍙g鑷喘 fanliOrderMap.put(orderId, list); + } else { + if (!StringUtil.isNullOrEmpty(list.get(0).getSpecialId()) + || pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID)) {// 璁剧疆娓犻亾ID褰撳仛浼氬憳杩愯惀ID鐨勪綅缃甀D + fanliOrderMap.put(orderId, list); + } else if (!StringUtil.isNullOrEmpty(list.get(0).getRelationId())) { + shareOrderMap.put(orderId, list); + } else { + // 閫氳繃绾㈠寘鏌ヨ + CommonOrder commonOrder = commonOrderService + .selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, list.get(0).getTradeId()); + + if (commonOrder != null) { + HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId()); + if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null + && hongBaoOrder.getHongBaoV2().getType() == HongBaoV2.TYPE_SHARE_GOODS) { + shareOrderMap.put(orderId, list); + continue; + } + } + fanliOrderMap.put(orderId, list); + } } } } @@ -195,41 +261,54 @@ processShopingFanliOrder(fanliOrderMap); // 澶勭悊鍒嗕韩璧氳鍗� processShareGoodsOrder(shareOrderMap); + // 澶勭悊楗夸簡涔堣鍗� + processElemeOrder(elmeOrderMap); } - /** - * 鍒╃敤redis鐨勫師瀛愭�у皢璁㈠崟鍙烽攣浣忥紝涓嶈鍏朵粬澶勭悊 - * - * @param orderId - */ - private void redisLockOrder(String orderId) { - String key = "doorder-" + orderId; - redisManager.cacheCommonString(key, "1"); - } - - /** - * 璁㈠崟瑙i攣 - * - * @param orderId - */ - private void redisUnlockOrder(String orderId) { - String key = "doorder-" + orderId; - redisManager.removeCommonString(key); - } - - /** - * 璁㈠崟鏄惁琚攣浣忎簡 - * - * @param orderId - * @return - */ - private boolean isRedisLockOrder(String orderId) { - String key = "doorder-" + orderId; - String doing = redisManager.getCommonString(key); - if (!StringUtil.isNullOrEmpty(doing)) - return true; + private ElmeOrder createElmeOrder(TaoBaoOrder taoBaoOrder) { + ElmeOrder elmeOrder = new ElmeOrder(); + elmeOrder.setChannelId(""); + elmeOrder.setCreateTime(new Date()); + elmeOrder + .setOrderDate(new Date(TimeUtil.convertToTimeTemp(taoBaoOrder.getCreateTime(), "yyyy-MM-dd HH:mm:ss"))); + elmeOrder.setOrderId(taoBaoOrder.getOrderId()); + elmeOrder.setPayMoney(taoBaoOrder.getPayment()); + elmeOrder.setRid(taoBaoOrder.getRelationId()); + if (taoBaoOrder.getOrderState().equalsIgnoreCase("璁㈠崟缁撶畻")) + elmeOrder.setIsSettle(true); else - return false; + elmeOrder.setIsSettle(false); + + if (!taoBaoOrder.getOrderState().equalsIgnoreCase("璁㈠崟澶辨晥")) + elmeOrder.setState(1); + else { + elmeOrder.setState(0); + elmeOrder.setPayMoney(new BigDecimal(0)); + } + elmeOrder.setTrackPid( + String.format("mm_124933865_%s_%s", taoBaoOrder.getSourceMediaId(), taoBaoOrder.getAdPositionId())); + if (!StringUtil.isNullOrEmpty(taoBaoOrder.getRelationId())) { + UserExtraTaoBaoInfo extraInfo = userExtraTaoBaoInfoService.getByRelationId(taoBaoOrder.getRelationId()); + if (extraInfo != null) + elmeOrder.setUid(extraInfo.getUser().getId()); + } + return elmeOrder; + } + + private void processElemeOrder(Map<String, List<TaoBaoOrder>> orders) { + for (Iterator<String> its = orders.keySet().iterator(); its.hasNext();) { + String orderId = its.next(); + List<TaoBaoOrder> orderList = orders.get(orderId); + for (TaoBaoOrder taoBaoOrder : orderList) { + ElmeOrder elmeOrder = createElmeOrder(taoBaoOrder); + try { + elmeOrderProcessService.processOrder(elmeOrder); + } catch (ElmeOrderException e) { + e.printStackTrace(); + } + + } + } } @Override @@ -250,7 +329,7 @@ // 鍑洪敊浜嗗氨涓嶅鐞嗚璁㈠崟浜嗭紝闇�瑕佸畾鏈熸鏌� // 鏇存敼涓㈠け璁㈠崟鐨勭姸鎬� - lostOrderService.processSuceess(orderId); + lostOrderService.processSuceess(orderId, Constant.SOURCE_TYPE_TAOBAO); } catch (HongBaoException e1) { e1.printStackTrace(); @@ -275,39 +354,25 @@ Iterator<String> its = orders.keySet().iterator(); while (its.hasNext()) { String orderId = its.next(); - processShareGoodsOrderNew(orderId, orders.get(orderId)); - } - } - } + try { + processShareGoodsOrderNew(orderId, orders.get(orderId)); + } catch (Exception e) { + try { + LogHelper.errorDetailInfo(e, "processShareGoodsOrderNew鍑洪敊", "璁㈠崟鍙�:" + orderId); + } catch (Exception e1) { + e1.printStackTrace(); + } + } - /** - * 鑾峰彇鏈�澶х殑鍒涘缓鏃堕棿涓庢渶灏忕殑鍒涘缓鏃堕棿 - * - * @param hongBaoList - * @return - */ - private Map<String, Long> getMaxAndMinCreateTime(List<HongBao> hongBaoList) { - if (hongBaoList.size() > 0) { - Map<String, Long> map = new HashMap<>(); - long min = hongBaoList.get(0).getCreatetime(); - long max = hongBaoList.get(0).getCreatetime(); - for (HongBao hb : hongBaoList) { - if (hb.getCreatetime() > max) - max = hb.getCreatetime(); - if (hb.getCreatetime() < min) - min = hb.getCreatetime(); } - map.put("max", max); - map.put("min", min); - return map; } - return null; } @Override public void fanli() { + LogHelper.test("澶勭悊杩斿埄鍒拌处"); // 鑾峰彇涓荤孩鍖� - List<HongBaoV2> hongBaoList = hongBaoV2Mapper.listCanBalanceHongBaoByType(HongBao.TYPE_TAOBAO, 100); + List<HongBaoV2> hongBaoList = hongBaoV2Mapper.listCanBalanceHongBaoByType(HongBaoV2.TYPE_ZIGOU, 1000); // // /** // * 闇�瑕佸疄鏃舵洿鏂板緟杩斿埄鐨勮鍗� @@ -352,7 +417,8 @@ || hb.getPreGetTime().getTime() > System.currentTimeMillis()) continue; try { - CMQManager.getInstance().addFanLiMsgNew(hb); + if (Constant.ENABLE_MQ) + CMQManager.getInstance().addFanLiMsgNew(hb); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); @@ -363,294 +429,105 @@ } } - /** - * 鍒ゆ柇璁㈠崟鏄惁澶辨晥 鍏ㄩ儴璁㈠崟澶辨晥鎵嶅垽鏂负澶辨晥 - * - * @param list - * @return - */ - private boolean isOrderValid(List<TaoBaoOrder> list) { - int validCount = 0; - for (TaoBaoOrder order : list) { - if (order.getOrderState().equalsIgnoreCase("璁㈠崟澶辨晥")) - validCount++; - } - return validCount >= list.size(); - } - - @Override - @Transactional - public void processShopingFanliOrder(String orderId, List<TaoBaoOrder> orderList) - throws HongBaoException, OrderItemException { - - List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService.getConfigByTypeCache(PidUser.TYPE_FANLI_ANDROID); - - Order oldOrder = orderMapper.selectOrderByOrderId(orderId); - // 鍘熸潵涓嶅瓨鍦ㄨ鍗� - if (oldOrder == null && orderList.size() > 0) { - // 鑾峰彇浜х敓璁㈠崟鐨凱ID - String mediaId = orderList.get(0).getSourceMediaId(); - String adzoneId = orderList.get(0).getAdPositionId(); - String pid = String.format("mm_%s_%s_%s", configList.get(0).getAccountId(), mediaId, adzoneId); - // 鏌ヨ璇ID鏄惁鏈夊搴旂殑鐢ㄦ埛 - PidUser pidUser = pidUserMapper.selectByPid(pid); - // 鍒ゆ柇鏄惁灞炰簬杩斿埄鐨凱ID - if (pidUser != null && (pidUser.getType() == PidUser.TYPE_FANLI_ANDROID - || pidUser.getType() == PidUser.TYPE_FANLI_IOS)) { - // 濡傛灉鏄鍗曞け鏁堝氨涓嶅鐞� - // 2018-08-02寮�濮嬬敓鏁� - if (isOrderValid(orderList)) - if (TimeUtil.convertToTimeTemp(orderList.get(0).getCreateTime(), "yyyy-MM-dd HH:mm:ss") < TimeUtil - .convertToTimeTemp("2018-08-02", "yyyy-MM-dd")) - return; - - // 娣诲姞鍒拌鍗曚腑鍘� - Order order = new Order(); - order.setBeizhu("PID杩斿埄璁㈠崟"); - order.setCreatetime(System.currentTimeMillis()); - order.setOrderId(orderId); - order.setOrderType(1); - order.setState(Order.STATE_YIZHIFU); - order.setUserInfo(new UserInfo(pidUser.getUid())); - order.setVersion(2); - - // 鍔犲叆鍒拌鍗曡〃 - orderMapper.insertSelective(order); - oldOrder = order; - } - } - - if (oldOrder != null) {// 璇ヨ鍗曞彿鍙互杩斿埄 - // 鍘熸潵澶辨晥鐨勮鍗曚笉鍐嶅鐞� - // if (oldOrder.getState() == Order.STATE_SHIXIAO) - // return; - // 鏇存柊璁㈠崟鐨勭姸鎬� - Order updateOrder = new Order(); - updateOrder.setId(oldOrder.getId()); - updateOrder.setThirdCreateTime( - new Date(TimeUtil.convertToTimeTemp(orderList.get(0).getCreateTime(), "yyyy-MM-dd HH:mm:ss"))); - - if (isOrderValid(orderList)) { - // 澶勭悊璁㈠崟澶辨晥 - updateOrder.setState(Order.STATE_SHIXIAO); - if (oldOrder.getState() == Order.STATE_YIZHIFU) - updateOrder.setDrawbackTime(System.currentTimeMillis()); - updateOrder.setThirdState("璁㈠崟澶辨晥"); - } else// 璁$畻璁㈠崟鐨勬�婚噾棰� - { - BigDecimal money = new BigDecimal(0); - for (TaoBaoOrder o : orderList) { - if (o.getOrderState().equalsIgnoreCase("璁㈠崟缁撶畻")) - money = money.add(o.getSettlement()); - else { - money = money.add(o.getPayment()); - } - } - updateOrder.setMoney(money); - String thirdState = null; - for (TaoBaoOrder o : orderList) - if (!o.getOrderState().equalsIgnoreCase("璁㈠崟澶辨晥")) { - thirdState = o.getOrderState(); - break; - } - updateOrder.setThirdState(thirdState); - } - orderMapper.updateByPrimaryKeySelective(updateOrder); - Order order = oldOrder; - // 璁㈠崟杩斿埄姣斾緥 - BigDecimal rate = hongBaoManageService.getFanLiRate(); - - // 鏌ユ壘鏄惁瀛樺湪绾㈠寘 - List<HongBao> hongBaoList = hongBaoMapper.selectByOid(order.getId()); - // 杩樻病鏈夊姞鍏ユ湁鏁堢殑璁㈠崟 - if ((hongBaoList == null || hongBaoList.size() == 0)) { - for (TaoBaoOrder taoBaoOrder : orderList) { - // 鍒涘缓OrderItem; - OrderItem orderItem = orderItemService.addOrderItem(taoBaoOrder, order, rate); - hongBaoService.addHongBao(order, taoBaoOrder, orderItem.getId()); - } - } else if (hongBaoList.size() > 0)// 鍘熸潵宸茬粡瀛樺湪璁㈠崟浜� - { - List<TaobaoOrderHongBao> sortList = HongBaoUtil.sortHongBaoAndTaoBaoOrder(orderList, hongBaoList); - orderList = new ArrayList<>(); - hongBaoList = new ArrayList<>(); - if (sortList != null) - for (TaobaoOrderHongBao tb : sortList) { - orderList.add(tb.taoBaoOrder); - hongBaoList.add(tb.hongBao); - } - - if (orderList.size() != hongBaoList.size()) { - LogHelper.userOrder("绾㈠寘鏁板拰璁㈠崟鏁颁笉瀵圭瓑:" + orderId); - return; - } - - for (int i = 0; i < orderList.size(); i++) { - hongBaoService.updateHongBao(hongBaoList.get(i), orderList.get(i)); - orderItemService.updateOrderItem(orderList.get(i), hongBaoList.get(i).getOrderItemId(), rate); - } - } - - } - } - - @Override - @Transactional - public void fanli(HongBao hb) throws TaoBaoWeiQuanException { - // 鏌ヨ鏈�鏂扮殑绾㈠寘鏁版嵁 - hb = hongBaoMapper.selectByPrimaryKeyForUpdate(hb.getId()); - // 缁存潈涓殑涓嶈繑鍒� - List<TaoBaoWeiQuanOrder> taoBaoWeiQuanList = taoBaoWeiQuanOrderMapper - .selectListByOrderIdAndState(hb.getOrderId(), "缁存潈鍒涘缓"); - if (taoBaoWeiQuanList != null && taoBaoWeiQuanList.size() > 0) - return; - - taoBaoWeiQuanList = taoBaoWeiQuanOrderMapper.selectListByOrderIdAndState(hb.getOrderId(), "绛夊緟澶勭悊"); - if (taoBaoWeiQuanList != null && taoBaoWeiQuanList.size() > 0) - return; - - long currentTimeMillis = System.currentTimeMillis(); - if (hb.getState() != HongBao.STATE_SHIXIAO) { - // 璁剧疆涓哄凡杩斿埄 - // 澶勭悊涓荤孩鍖� - if (hb.getState() != HongBao.STATE_SHIXIAO && hb.getState() != HongBao.STATE_YILINGQU - && hb.getType() == HongBao.TYPE_TAOBAO) { - OrderItem orderItem = null; - if (hb.getOrderItemId() != null) { - orderItem = orderItemMapper.selectByPrimaryKey(hb.getOrderItemId()); - OrderItem updateOrderItem = new OrderItem(); - updateOrderItem.setId(orderItem.getId()); - updateOrderItem.setFanTime(currentTimeMillis); - updateOrderItem.setState(OrderItem.STATE_DAOZHANG); - orderItemMapper.updateByPrimaryKeySelective(updateOrderItem); - } - // 濡傛灉绾㈠寘娌¤棰嗗彇 - HongBao updateHongBao = new HongBao(); - updateHongBao.setId(hb.getId()); - updateHongBao.setState(HongBao.STATE_YILINGQU); - updateHongBao.setGetTime(currentTimeMillis); - hongBaoMapper.updateByPrimaryKeySelective(updateHongBao); - userInfoMapper.addHongBaoByUid(hb.getUserInfo().getId(), hb.getMoney()); - - // ...娑堟伅銆佹槑缁� - HongBaoExtra hongBaoExtra = HongBaoUtil.convert(hb); - // 鏄庣粏鎿嶄綔锛堝鏋滄湇鍔″櫒鎬уソ浜嗗悗锛屽彲鏀规垚寮傛锛� - MoneyRecord moneyRecord = new MoneyRecord(hb.getUserInfo(), hb, hb.getMoney(), hongBaoExtra.getTitle(), - "", currentTimeMillis, 1); - moneyRecordMapper.insertSelective(moneyRecord); - AccountDetails accountDetails = AccountDetailsFactory.create("+" + hb.getMoney(), - AccountDetailsFactory.FANLI, orderItem, null, hb.getUserInfo()); - accountDetailsMapper.insertSelective(accountDetails); - - // 鎻掑叆鏂扮増璧勯噾鏄庣粏 - try { - UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createFanLi(hb.getUserInfo().getId(), - hb.getOrderId(), 1, hb.getId(), hb.getMoney()); - userMoneyDetail.setId(accountDetails.getId()); - userMoneyDetailMapper.insert(userMoneyDetail); - } catch (UserMoneyDetailException e1) { - try { - LogHelper.errorDetailInfo(e1); - } catch (Exception e2) { - e2.printStackTrace(); - } - } - - // 娣诲姞璧勯噾鏄庣粏涓庣孩鍖呯殑鏄犲皠鍏崇郴 - accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hb.getId(), accountDetails.getId()); - - // 缁存潈鎵f锛�2018-08-05鍚庡紑濮嬪疄琛岋級 - if (hb.getBalanceTime() != null - && hb.getBalanceTime().getTime() >= TimeUtil.convertToTimeTemp("2018-08-05", "yyyy-MM-dd")) { - taoBaoWeiQuanDrawBackService.doWeiQuanFanli(hb.getOrderId()); - } - - // 绔欏唴淇�+鎺ㄩ�� - try { - userNotificationService.orderFanliRecieved(hb.getUserInfo().getId(), orderItem.getOrderId(), - orderItem.getFanMoney()); - } catch (Exception e) { - } - - } - } - } - @Resource private HongBaoOrderMapper hongBaoOrderMapper; @Override - @Transactional - public void fanli(HongBaoV2 hb) throws TaoBaoWeiQuanException { + @Transactional(rollbackFor = Exception.class) + public void fanli(HongBaoV2 hb1) throws TaoBaoWeiQuanException { // 鏌ヨ鏈�鏂扮殑绾㈠寘鏁版嵁 - hb = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hb.getId()); - // 鏌ヨ绾㈠寘鐩稿叧鑱旂殑璁㈠崟 - HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByHongBaoId(hb.getId()); - if (hongBaoOrder == null) { - LogHelper.error("杩斿埄澶辫触:" + hb.getId()); + hb1 = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hb1.getId()); + + if (hb1 == null || hb1.getState() != HongBaoV2.STATE_KELINGQU || hb1.getPreGetTime() == null + || hb1.getPreGetTime().getTime() > System.currentTimeMillis()) + return; + + // 姝e父鐢ㄦ埛鎵嶈兘鍒拌处 + UserInfo mainUser = userInfoMapper.selectAvailableByPrimaryKey(hb1.getUserInfo().getId()); + if (mainUser == null || mainUser.getState() != UserInfo.STATE_NORMAL) { return; } - // 缁存潈涓殑涓嶈繑鍒� - List<TaoBaoWeiQuanOrder> taoBaoWeiQuanList = taoBaoWeiQuanOrderMapper - .selectListByOrderIdAndState(hongBaoOrder.getCommonOrder().getOrderNo(), "缁存潈鍒涘缓"); - if (taoBaoWeiQuanList != null && taoBaoWeiQuanList.size() > 0) + // 鏌ヨ绾㈠寘鐩稿叧鑱旂殑璁㈠崟 + HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByHongBaoId(hb1.getId()); + if (hongBaoOrder == null) { + LogHelper.error("杩斿埄澶辫触:" + hb1.getId()); + return; + } + + if (hongBaoOrder.getCommonOrder() == null) { + return; + } + + // 濡傛灉鏄嫾澶氬/浜笢缁存潈鍒欒繑鍥烇紝涓嶉渶瑕佽繑鍒� + if ((hongBaoOrder.getCommonOrder().getSourceType() == Constant.SOURCE_TYPE_PDD + || hongBaoOrder.getCommonOrder().getSourceType() == Constant.SOURCE_TYPE_JD) + && hongBaoOrder.getCommonOrder().getState() == CommonOrder.STATE_WQ) return; - taoBaoWeiQuanList = taoBaoWeiQuanOrderMapper - .selectListByOrderIdAndState(hongBaoOrder.getCommonOrder().getOrderNo(), "绛夊緟澶勭悊"); - if (taoBaoWeiQuanList != null && taoBaoWeiQuanList.size() > 0) - return; + if (hongBaoOrder.getCommonOrder() != null + && hongBaoOrder.getCommonOrder().getSourceType() == Constant.SOURCE_TYPE_TAOBAO) { + // 缁存潈涓殑涓嶈繑鍒� + List<TaoBaoWeiQuanOrder> taoBaoWeiQuanList = taoBaoWeiQuanOrderMapper + .selectListByOrderIdAndState(hongBaoOrder.getCommonOrder().getOrderNo(), "缁存潈鍒涘缓"); + if (taoBaoWeiQuanList != null && taoBaoWeiQuanList.size() > 0) + return; - long currentTimeMillis = System.currentTimeMillis(); - if (hb.getState() != HongBao.STATE_SHIXIAO) { - // 璁剧疆涓哄凡杩斿埄 - // 澶勭悊涓荤孩鍖� - if (hb.getState() != HongBaoV2.STATE_SHIXIAO && hb.getState() != HongBaoV2.STATE_YILINGQU - && hb.getType() == HongBaoV2.TYPE_ZIGOU) { - // 濡傛灉绾㈠寘娌¤棰嗗彇 - HongBaoV2 updateHongBao = new HongBaoV2(); - updateHongBao.setId(hb.getId()); - updateHongBao.setState(HongBaoV2.STATE_YILINGQU); - updateHongBao.setGetTime(new Date(currentTimeMillis)); - hongBaoV2Mapper.updateByPrimaryKeySelective(updateHongBao); - userInfoMapper.addHongBaoByUid(hb.getUserInfo().getId(), hb.getMoney()); + taoBaoWeiQuanList = taoBaoWeiQuanOrderMapper + .selectListByOrderIdAndState(hongBaoOrder.getCommonOrder().getOrderNo(), "绛夊緟澶勭悊"); + if (taoBaoWeiQuanList != null && taoBaoWeiQuanList.size() > 0) + return; + } - AccountDetails accountDetails = AccountDetailsFactory.create("+" + hb.getMoney(), - AccountDetailsFactory.FANLI, null, null, hb.getUserInfo()); - accountDetailsMapper.insertSelective(accountDetails); + // 鏌ヨ璇ヨ鍗曚箣鍓嶆槸鍚︽湁鍒拌处 + List<HongBaoOrder> list = hongBaoOrderMapper.listByOrderIdAndSourceType( + hongBaoOrder.getCommonOrder().getOrderNo(), hongBaoOrder.getCommonOrder().getSourceType()); + List<Long> hongBaoIdList = new ArrayList<>(); + if (list != null) { + for (HongBaoOrder ho : list) { + hongBaoIdList.add(ho.getHongBaoV2().getId()); + } + } - // 鎻掑叆鏂扮増璧勯噾鏄庣粏 - try { - UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createFanLi(hb.getUserInfo().getId(), - hongBaoOrder.getCommonOrder().getOrderNo(), hongBaoOrder.getCommonOrder().getSourceType(), - hb.getId(), hb.getMoney()); - userMoneyDetail.setId(accountDetails.getId()); - userMoneyDetailMapper.insert(userMoneyDetail); - } catch (UserMoneyDetailException e1) { - try { - LogHelper.errorDetailInfo(e1); - } catch (Exception e2) { - e2.printStackTrace(); + List<HongBaoV2> allHongBaoList = hongBaoV2Mapper.listByIds(hongBaoIdList); + boolean first = true; + for (HongBaoV2 v2 : allHongBaoList) + if (v2.getState() == HongBaoV2.STATE_YILINGQU) { + first = false; + break; + } + + // 鑷喘鍒拌处浜嬪姟娑堟伅 + OrderMoneyRecievedMQMsg mqMsg = new OrderMoneyRecievedMQMsg(OrderMoneyRecievedMQMsg.TYPE_ZIGOU, + mainUser.getId(), hongBaoOrder.getCommonOrder().getSourceType(), + hongBaoOrder.getCommonOrder().getOrderNo(), null, new Date(), 0); + mqMsg.setOrderFirst(first); + Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.orderFanLiActual, mqMsg); + String key = mainUser.getId() + "-" + UUID.randomUUID().toString(); + msg.setKey(key); + try { + if (!Constant.IS_TEST) + orderTransactionProducer.send(msg, new LocalTransactionExecuter() { + @Override + public TransactionStatus execute(Message arg0, Object arg1) { + try { + orderMoneySettleService.ziGouSettle(hongBaoOrder.getCommonOrder().getOrderNo(), + hongBaoOrder.getCommonOrder().getSourceType(), key); + return TransactionStatus.CommitTransaction; + } catch (Exception e) { + e.printStackTrace(); + return TransactionStatus.RollbackTransaction; + } } - } - - // 娣诲姞璧勯噾鏄庣粏涓庣孩鍖呯殑鏄犲皠鍏崇郴 - accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hb.getId(), accountDetails.getId()); - - // 缁存潈鎵f锛�2018-08-05鍚庡紑濮嬪疄琛岋級 - if (hongBaoOrder.getCommonOrder().getSettleTime() != null && hongBaoOrder.getCommonOrder() - .getSettleTime().getTime() >= TimeUtil.convertToTimeTemp("2018-08-05", "yyyy-MM-dd")) { - taoBaoWeiQuanDrawBackService.doWeiQuanFanli(hongBaoOrder.getCommonOrder().getOrderNo()); - } - - // 绔欏唴淇�+鎺ㄩ�� + }, null); + else { try { - userNotificationService.orderFanliRecieved(hb.getUserInfo().getId(), - hongBaoOrder.getCommonOrder().getOrderNo(), hb.getMoney()); + orderMoneySettleService.ziGouSettle(hongBaoOrder.getCommonOrder().getOrderNo(), + hongBaoOrder.getCommonOrder().getSourceType(), key); } catch (Exception e) { } - } + } catch (Exception e) { + LogHelper.mqError(e.getMessage(), msg.getTopic(), msg.getTag(), new Gson().toJson(mqMsg)); } } @@ -658,8 +535,13 @@ public void weiQuanOrder(List<TaoBaoWeiQuanOrder> orderList) { if (orderList != null) for (TaoBaoWeiQuanOrder order : orderList) { - if (order.getState().equalsIgnoreCase("缁存潈鎴愬姛")) { - CMQManager.getInstance().addWeiQuanOrderMsg(order); + try { + if (order.getState().contains("缁存潈鎴愬姛")) { + if (Constant.ENABLE_MQ) + CMQManager.getInstance().addWeiQuanOrderMsg(order); + } + } catch (Exception e) { + LogHelper.error("缁存潈璁㈠崟鍔犲叆鍒伴槦鍒楀嚭閿�:" + order != null ? new Gson().toJson(order) : null); } } } @@ -673,283 +555,212 @@ if (orderList != null && orderList.size() > 0 & !StringUtil.isNullOrEmpty(orderList.get(0).getSettlementTime())) order.setJieSuanTime( new Date(TimeUtil.convertToTimeTemp(orderList.get(0).getSettlementTime(), "yyyy-MM-dd HH:mm:ss"))); - if (order.getJieSuanTime().getTime() >= TimeUtil.convertToTimeTemp("2018-08-05", "yyyy-MM-dd")) { - return; + + // 澶勭悊缁存潈鎴愬姛浣嗘槸宸插埌璐︾殑璁㈠崟 + if (order.getJieSuanTime().getTime() > TimeUtil.convertToTimeTemp("2019-01-01", "yyyy-MM-dd")) {// 缁撶畻鏃堕棿鍦�2鏈�1鍙风殑寮�濮嬪鐞嗗凡鍒拌处浣嗘槸缁存潈鐨� + CommonOrder commonOrder = commonOrderService.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, + order.getOrderItemId()); + if (commonOrder != null && !StringUtil.isNullOrEmpty(commonOrder.getTradeId())) { + HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId()); + if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null + && hongBaoOrder.getHongBaoV2().getState() == HongBaoV2.STATE_YILINGQU) {// 宸茬粡鍒拌处鐨勭湅鏄惁闇�瑕佹墸娆� + TaoBaoWeiQuanDrawBack drawBack = taoBaoWeiQuanDrawBackService + .selectByOrderItemId(order.getOrderItemId()); + if (drawBack == null) {// 杩樻湭鎵f + OrderLogHelper.taoBaoWeiQuan("宸插埌璐︽湭鎵f澶勭悊:瀛愯鍗曞彿:" + order.getOrderItemId()); + try { + taoBaoWeiQuanDrawBackService.doWeiQuanFanli(order.getOrderId(), true); + taoBaoWeiQuanDrawBackService.doWeiQuanShare(order.getOrderId()); + taoBaoWeiQuanDrawBackService.doWeiQuanInvite(order.getOrderId()); + } catch (TaoBaoWeiQuanException e) { + try { + LogHelper.errorDetailInfo(e, "鍒拌处鍚庡鐞嗙淮鏉冩墸娆惧嚭閿�", "璁㈠崟鍙�:" + order.getOrderId()); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } else { + // 鏌ヨ瀛愮孩鍖呮槸鍚﹀凡鍒拌处 + List<HongBaoV2> children = hongBaoV2Service + .listChildrenById(hongBaoOrder.getHongBaoV2().getId()); + for (HongBaoV2 hongBaoV2 : children) { + if (hongBaoV2.getState() == HongBaoV2.STATE_YILINGQU) { + try { + taoBaoWeiQuanDrawBackService.doWeiQuanInvite(order.getOrderId()); + } catch (TaoBaoWeiQuanException e) { + try { + LogHelper.errorDetailInfo(e, "鍒拌处鍚庡鐞嗙淮鏉冩墸娆惧嚭閿�", "璁㈠崟鍙�:" + order.getOrderId()); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + break; + } + } + } + } + } } - try { - orderService.failureOrderWithWeiQuan(order.getOrderId(), Order.ORDER_TYPE_TAOBAO); - } catch (ObjectStateException e) { - e.printStackTrace(); - } - pidOrderService.weiQuan(order.getOrderId()); } @Override - public void fanliInvaiteAndShare() { - // 鏌ュ嚭閭�璇疯禋涓庡垎浜禋璇ヨ繑鍒╃殑鐢ㄦ埛ID - List<Long> inviteAndShareUids = hongBaoV2Mapper.listUidCanBanlanceShareAndInvite(1000); + public void fanliPreInvaite(Date maxTime) { + // 鏌ュ嚭閭�璇疯禋鐨勭敤鎴稩D + List<Integer> typeList = new ArrayList<>(); + typeList.add(HongBaoV2.TYPE_YIJI); + typeList.add(HongBaoV2.TYPE_ERJI); + typeList.add(HongBaoV2.TYPE_SHARE_YIJI); + typeList.add(HongBaoV2.TYPE_SHARE_ERJI); + + long count = hongBaoV2Mapper.countUidCanBanlanceByTypeAndMaxTime(typeList, maxTime); + int pageSize = 1000; + int page = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1); Set<Long> uidSets = new HashSet<>(); - if (inviteAndShareUids != null) - for (Long uid : inviteAndShareUids) - uidSets.add(uid); + for (int i = 0; i < page; i++) { + List<Long> inviteAndShareUids = hongBaoV2Mapper.listUidCanBanlanceByTypeAndMaxTime(typeList, maxTime, + i * pageSize, pageSize); + if (inviteAndShareUids != null) + for (Long uid : inviteAndShareUids) { + if (userInfoMapper.selectAvailableByPrimaryKey(uid) != null) + uidSets.add(uid); + } + } // 鏍规嵁鐢ㄦ埛ID Iterator<Long> its = uidSets.iterator(); while (its.hasNext()) { Long uid = its.next(); try { - CMQManager.getInstance().addFanLiTiChengMsg(uid); + if (Constant.ENABLE_MQ) + TeamOrderCMQManager.getInstance().addFanLiTeamIncomePreMsg(new UidDateDTO(uid, maxTime)); } catch (Exception e) { e.printStackTrace(); LogHelper.error(e); } } - } - private HongBaoV2 filterWeiQuanINGHongBao(HongBaoV2 hongBao) { - - long hbId = hongBao.getId(); - if (hongBao.getParent() != null) { - hbId = hongBao.getParent().getId(); - } - - HongBaoOrder hongbaoOrder = hongBaoOrderMapper.selectByHongBaoId(hbId); - - if (hongbaoOrder == null) - return null; - - List<TaoBaoWeiQuanOrder> taoBaoWeiQuanList = taoBaoWeiQuanOrderMapper - .selectListByOrderIdAndState(hongbaoOrder.getCommonOrder().getOrderNo(), "缁存潈鍒涘缓"); - - List<TaoBaoWeiQuanOrder> taoBaoWeiQuanList1 = taoBaoWeiQuanOrderMapper - .selectListByOrderIdAndState(hongbaoOrder.getCommonOrder().getOrderNo(), "绛夊緟澶勭悊"); - if ((taoBaoWeiQuanList != null && taoBaoWeiQuanList.size() > 0) - || (taoBaoWeiQuanList1 != null && taoBaoWeiQuanList1.size() > 0)) { - return null; - } - return hongBao; } @Override - @Transactional - public void fanliInvaiteAndShare(Long uid) throws TaoBaoWeiQuanException { - /** - * 澶勭悊閭�璇疯禋璁㈠崟 - */ - // 鏌ヨUID鐨勯個璇疯禋璁㈠崟 - List<Integer> types = new ArrayList<>(); - types.add(HongBaoV2.TYPE_YIJI); - types.add(HongBaoV2.TYPE_ERJI); - List<HongBaoV2> hongBaoList = hongBaoV2Mapper.listCanBalanceHongBaoByTypeAndUid(types, uid, 1000); + public void fanliShare(Date maxTime) { + // 鏌ュ嚭閭�璇疯禋鐨勭敤鎴稩D + List<Integer> typeList = new ArrayList<>(); + typeList.add(HongBaoV2.TYPE_SHARE_GOODS); - List<Long> hbIdList = new ArrayList<>(); - - BigDecimal invitemoney = new BigDecimal(0); - // 闇�瑕佸垽鏂��娆剧殑璁㈠崟鍙� - Set<String> drawBackOrders = new HashSet<String>(); - for (HongBaoV2 hongBao : hongBaoList) { - hongBao = filterWeiQuanINGHongBao(hongBao); - if (hongBao == null) - continue; - - hongBao = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hongBao.getId()); - if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU || hongBao.getState() == HongBaoV2.STATE_KELINGQU) { - invitemoney = invitemoney.add(hongBao.getMoney()); - HongBaoV2 updateHongBao = new HongBaoV2(); - updateHongBao.setId(hongBao.getId()); - updateHongBao.setGetTime(new Date()); - updateHongBao.setState(HongBaoV2.STATE_YILINGQU); - hongBaoV2Mapper.updateByPrimaryKeySelective(updateHongBao); - // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� - hbIdList.add(hongBao.getId()); - // 2018-08-05 杩囧悗鐨勮鍗曟墠澶勭悊缁存潈 - - HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByHongBaoId(hongBao.getParent().getId()); - - Date balanceTime = hongBaoOrder.getCommonOrder().getSettleTime(); - if (balanceTime != null - && balanceTime.getTime() >= TimeUtil.convertToTimeTemp("2018-08-05", "yyyy-MM-dd")) { - if (!StringUtil.isNullOrEmpty(hongBaoOrder.getCommonOrder().getOrderNo())) - drawBackOrders.add(hongBaoOrder.getCommonOrder().getOrderNo()); + long count = hongBaoV2Mapper.countUidCanBanlanceByTypeAndMaxTime(typeList, maxTime); + int pageSize = 1000; + int page = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1); + Set<Long> uidSets = new HashSet<>(); + for (int i = 0; i < page; i++) { + List<Long> inviteAndShareUids = hongBaoV2Mapper.listUidCanBanlanceByTypeAndMaxTime(typeList, maxTime, + i * pageSize, pageSize); + if (inviteAndShareUids != null) + for (Long uid : inviteAndShareUids) { + if (userInfoMapper.selectAvailableByPrimaryKey(uid) != null) + uidSets.add(uid); } - } } - - /** - * 澶勭悊涓�绾т簩绾у垎浜禋(灞炰簬閭�璇疯禋绫诲瀷) - */ - - List<HongBaoV2> totalHongBaoList = new ArrayList<>(); - // 鏌ヨUID鐨勪簩绾ф垨鑰呬笁绾у垎浜禋璁㈠崟 - // TODO 鏆傛椂鏌ヨ10000鏉℃暟鎹紝鍚庨潰鍐嶅仛鍒嗛〉 - types.clear(); - types.add(HongBaoV2.TYPE_SHARE_YIJI); - types.add(HongBaoV2.TYPE_SHARE_ERJI); - List<HongBaoV2> hbList = hongBaoV2Mapper.listCanBalanceHongBaoByTypeAndUid(types, uid, 10000); - - if (hbList != null && hbList.size() > 0) - totalHongBaoList.addAll(hbList); - - for (HongBaoV2 hb : totalHongBaoList) { - if (hb.getState() == HongBaoV2.STATE_BUKELINGQU || hb.getState() == HongBaoV2.STATE_KELINGQU) { - hb = filterWeiQuanINGHongBao(hb); - if (hb == null) - continue; - invitemoney = invitemoney.add(hb.getMoney()); - HongBaoV2 updateHongBao = new HongBaoV2(); - updateHongBao.setId(hb.getId()); - updateHongBao.setGetTime(new Date()); - updateHongBao.setState(HongBaoV2.STATE_YILINGQU); - hongBaoV2Mapper.updateByPrimaryKeySelective(updateHongBao); - // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� - hbIdList.add(hb.getId()); - - HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByHongBaoId(hb.getParent().getId()); - if (!StringUtil.isNullOrEmpty(hongBaoOrder.getCommonOrder().getOrderNo())) - drawBackOrders.add(hongBaoOrder.getCommonOrder().getOrderNo()); - } - } - - // 閭�璇疯禋鍒拌处 - if (invitemoney.compareTo(new BigDecimal(0)) > 0) { - userInfoMapper.addHongBaoByUid(uid, invitemoney); - // 娣诲姞璁板綍 - AccountDetails accountDetails = AccountDetailsFactory.create("+" + invitemoney, - AccountDetailsFactory.TICHENG, null, null, new UserInfo(uid)); - accountDetailsMapper.insertSelective(accountDetails); - - // 娣诲姞鏂扮増璇︽儏璁板綍 + // 鏍规嵁鐢ㄦ埛ID + Iterator<Long> its = uidSets.iterator(); + while (its.hasNext()) { + Long uid = its.next(); try { - UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createInvite(uid, 0, 0, 0, invitemoney, - new Date()); - userMoneyDetail.setId(accountDetails.getId()); - userMoneyDetailMapper.insert(userMoneyDetail); - } catch (UserMoneyDetailException e) { - try { - LogHelper.errorDetailInfo(e); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - - // 璁板綍杩斿埄绾㈠寘涓庤祫閲戣鎯呯殑瀵瑰簲鍏崇郴 - - // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� - accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hbIdList, accountDetails.getId()); - - // 鍙戦�佹帹閫� - try { - // 鎻愭垚鍒拌处娑堟伅閫氱煡 - userNotificationService.tiChengInviteRecieved(uid, invitemoney); + if (Constant.ENABLE_MQ) + CMQManager.getInstance().addFanLiShareMsg(new UidDateDTO(uid, maxTime)); } catch (Exception e) { e.printStackTrace(); + LogHelper.error(e); } - for (String orderId : drawBackOrders) - taoBaoWeiQuanDrawBackService.doWeiQuanInvite(orderId); - } - - hbIdList.clear(); - drawBackOrders.clear(); - - /** - * 澶勭悊鍒嗕韩璧� - */ - BigDecimal sharemoney = new BigDecimal(0); - // 鏌ヨUID鐨勫垎浜禋璁㈠崟 - types.clear(); - types.add(HongBaoV2.TYPE_SHARE_GOODS); - List<HongBaoV2> hongBaoShareList = hongBaoV2Mapper.listCanBalanceHongBaoByTypeAndUid(types, uid, 10000); - for (HongBaoV2 hongBao : hongBaoShareList) { - hongBao = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hongBao.getId()); - hongBao = filterWeiQuanINGHongBao(hongBao); - if (hongBao == null) - continue; - if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU || hongBao.getState() == HongBaoV2.STATE_KELINGQU) { - sharemoney = sharemoney.add(hongBao.getMoney()); - HongBaoV2 updateHongBao = new HongBaoV2(); - updateHongBao.setId(hongBao.getId()); - updateHongBao.setGetTime(new Date()); - updateHongBao.setState(HongBao.STATE_YILINGQU); - hongBaoV2Mapper.updateByPrimaryKeySelective(updateHongBao); - // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� - hbIdList.add(hongBao.getId()); - // 2018-08-05 杩囧悗鐨勮鍗曟墠澶勭悊缁存潈 - Date balanceTime = null; - HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByHongBaoId(hongBao.getId()); - if (hongBaoOrder != null) - balanceTime = hongBaoOrder.getCommonOrder().getSettleTime(); - if (balanceTime != null - && balanceTime.getTime() >= TimeUtil.convertToTimeTemp("2018-08-05", "yyyy-MM-dd")) { - drawBackOrders.add(hongBaoOrder.getCommonOrder().getOrderNo()); - } - } - } - - /** - * 鍒嗕韩璧氬埌璐� - */ - - if (sharemoney.compareTo(new BigDecimal(0)) > 0) { - userInfoMapper.addHongBaoByUid(uid, sharemoney); - // 娣诲姞璁板綍 - AccountDetails accountDetails = AccountDetailsFactory.create("+" + sharemoney, - AccountDetailsFactory.SHARE_GOODS, null, null, new UserInfo(uid)); - accountDetailsMapper.insertSelective(accountDetails); - - // 娣诲姞鏂扮増璇︽儏璁板綍 - try { - UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createShare(uid, 0, 0, 0, sharemoney, - new Date()); - userMoneyDetail.setId(accountDetails.getId()); - userMoneyDetailMapper.insert(userMoneyDetail); - } catch (UserMoneyDetailException e) { - try { - LogHelper.errorDetailInfo(e); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - // 璁板綍杩斿埄绾㈠寘涓庤祫閲戣鎯呯殑瀵瑰簲鍏崇郴 - - // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� - accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hbIdList, accountDetails.getId()); - - // 鍙戦�佹帹閫� - try { - // 鎻愭垚鍒拌处娑堟伅閫氱煡 - userNotificationService.tiChengShareRecieved(uid, sharemoney); - } catch (Exception e) { - e.printStackTrace(); - } - for (String orderId : drawBackOrders) - taoBaoWeiQuanDrawBackService.doWeiQuanShare(orderId); } } - @Resource - private CommonOrderService commonOrderService; + @Override + @Transactional(rollbackFor = Exception.class) + public void fanliPreInvaite(Long uid, Date maxPreGetTime) { + // 閭�璇疯禋鍒拌处 + try { + orderMoneySettleService.inviteSettleTB(uid, maxPreGetTime); + } catch (OrderMoneySettleException e) { + e.printStackTrace(); + } - @Resource - private HongBaoV2Service hongBaoV2Service; + try { + orderMoneySettleService.inviteSettleJD(uid, maxPreGetTime); + } catch (OrderMoneySettleException e) { + e.printStackTrace(); + } + + try { + orderMoneySettleService.inviteSettlePDD(uid, maxPreGetTime); + } catch (OrderMoneySettleException e) { + e.printStackTrace(); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void fanliShare(Long uid, Date maxPreGetTime) { + // 閭�璇疯禋鍒拌处 + try { + orderMoneySettleService.shareSettleTB(uid, maxPreGetTime); + } catch (OrderMoneySettleException e) { + e.printStackTrace(); + } + + try { + orderMoneySettleService.shareSettleJD(uid, maxPreGetTime); + } catch (OrderMoneySettleException e) { + e.printStackTrace(); + } + + try { + orderMoneySettleService.shareSettlePDD(uid, maxPreGetTime); + } catch (OrderMoneySettleException e) { + e.printStackTrace(); + } + } @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) @Override public void processShopingFanliOrderNew(String orderId, List<TaoBaoOrder> orderList) throws HongBaoException, OrderItemException { + + LogHelper.test(String.format("璁㈠崟澶勭悊:璁㈠崟鍙�-%s 璁㈠崟鏁伴噺-%s", orderId, orderList.size() + "")); + if (orderList.size() == 1) + LogHelper.test("璁㈠崟鎺掑簭鍊�:" + orderList.get(0).getOrderBy()); + List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService.getConfigByTypeCache(PidUser.TYPE_FANLI_ANDROID); if (orderList != null && orderList.size() > 0) { String pid = String.format("mm_%s_%s_%s", configList.get(0).getAccountId(), orderList.get(0).getSourceMediaId(), orderList.get(0).getAdPositionId()); - Order oldOrder = orderMapper.selectOrderByOrderId(orderId); + Order oldOrder = orderMapper.selectOrderByOrderIdAndOrderType(orderId, Constant.SOURCE_TYPE_TAOBAO); // 鍘熸潵涓嶅瓨鍦ㄨ鍗� Long uid = null; if (oldOrder == null) { - PidUser pidUser = pidUserMapper.selectByPid(pid); - if (pidUser != null) { - uid = pidUser.getUid(); + Long targetUid = null; + if (pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID) + && !StringUtil.isNullOrEmpty(orderList.get(0).getRelationId())) {// 澶勭悊闈炶繑鍒╁晢鍝佸簱鐨勫晢鍝� + targetUid = taoBaoBuyRelationMapService.selectUidByRelationId(orderList.get(0).getRelationId()); + } else if ((pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_ELEME_PID) + || pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_KOUBEI_PID)) + && !StringUtil.isNullOrEmpty(orderList.get(0).getRelationId())) {// 澶勭悊楗夸簡涔�,鍙g鐨勮鍗� + UserExtraTaoBaoInfo extraInfo = userExtraTaoBaoInfoService + .getByRelationId(orderList.get(0).getRelationId()); + if (extraInfo != null) { + targetUid = extraInfo.getUser().getId(); + } + } else if (!StringUtil.isNullOrEmpty(orderList.get(0).getSpecialId())) { + UserExtraTaoBaoInfo info = userExtraTaoBaoInfoService + .getBySpecialId(orderList.get(0).getSpecialId()); + if (info != null && info.getUser() != null) + targetUid = info.getUser().getId(); + } + + if (targetUid != null) { + uid = targetUid; // 鎻掑叆鍒癘rder涓� // 娣诲姞鍒拌鍗曚腑鍘� Order order = new Order(); @@ -964,6 +775,7 @@ orderMapper.insertSelective(order); oldOrder = order; } + } else { uid = oldOrder.getUserInfo().getId(); } @@ -998,13 +810,25 @@ orderMapper.updateByPrimaryKeySelective(updateOrder); // 鐢ㄧ涓�涓瓙璁㈠崟閿佸畾鐢ㄦ埛 - for (TaoBaoOrder taoBaoOrder : orderList) { + List<CommonOrderAddResultDTO> commonOrderList = null; + try { + commonOrderList = commonOrderService.addTaoBaoOrder(orderList, uid); + addHongBaoWithMQ(commonOrderList, orderId, uid, Constant.SOURCE_TYPE_TAOBAO, HongBaoV2.TYPE_ZIGOU); + if (isCommonOrderAllAdd(commonOrderList)) { + Order order = new Order(); + order.setOrderId(orderId); + order.setOrderType(Constant.SOURCE_TYPE_TAOBAO); + order.setUserInfo(new UserInfo(uid)); + try { + if (Constant.ENABLE_MQ) + PlaceOrderCMQManager.getInstance().addPlaceOrderMsg(order); + } catch (Exception e) { + } + } + } catch (CommonOrderException e) { try { - CommonOrder commonOrder = commonOrderService.addTaoBaoOrder(taoBaoOrder, uid); - hongBaoV2Service.addHongBao(commonOrder, HongBaoV2.TYPE_ZIGOU); - } catch (CommonOrderException e) { - e.printStackTrace(); - } catch (HongBaoException e1) { + LogHelper.errorDetailInfo(e, "addTaoBaoOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + orderId); + } catch (Exception e1) { e1.printStackTrace(); } } @@ -1013,33 +837,609 @@ @Override public void processShareGoodsOrderNew(String orderId, List<TaoBaoOrder> orderList) { - List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService.getConfigByTypeCache(PidUser.TYPE_FANLI_ANDROID); if (orderList != null && orderList.size() > 0) { - String pid = String.format("mm_%s_%s_%s", configList.get(0).getAccountId(), - orderList.get(0).getSourceMediaId(), orderList.get(0).getAdPositionId()); // 鍘熸潵涓嶅瓨鍦ㄨ鍗� Long uid = null; - PidUser pidUser = pidUserMapper.selectByPid(pid); - if (pidUser != null) - uid = pidUser.getUid(); - + UserExtraTaoBaoInfo info = userExtraTaoBaoInfoService.getByRelationId(orderList.get(0).getRelationId()); + if (info != null && info.getUser() != null) + uid = info.getUser().getId(); // 灏氭湭鎵惧埌鍜孭ID瀵瑰簲鐨勭敤鎴� + if (uid == null) { + // 閫氳繃绾㈠寘鏌ヨ + CommonOrder commonOrder = commonOrderService.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, + orderList.get(0).getTradeId()); + + if (commonOrder != null) { + HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId()); + if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null + && hongBaoOrder.getHongBaoV2().getType() == HongBaoV2.TYPE_SHARE_GOODS) { + uid = hongBaoOrder.getHongBaoV2().getUserInfo().getId(); + } + } + } + if (uid == null) return; // 鐢ㄧ涓�涓瓙璁㈠崟閿佸畾鐢ㄦ埛 - for (TaoBaoOrder taoBaoOrder : orderList) { + try { + List<CommonOrderAddResultDTO> commonOrders = commonOrderService.addTaoBaoOrder(orderList, uid); + addHongBaoWithMQ(commonOrders, orderId, uid, Constant.SOURCE_TYPE_TAOBAO, HongBaoV2.TYPE_SHARE_GOODS); + if (isCommonOrderAllAdd(commonOrders)) { + Order order = new Order(); + order.setOrderId(orderId); + order.setOrderType(Constant.SOURCE_TYPE_TAOBAO); + order.setUserInfo(new UserInfo(uid)); + try { + if (Constant.ENABLE_MQ) + PlaceOrderCMQManager.getInstance().addPlaceOrderMsg(order); + } catch (Exception e) { + } + } + } catch (CommonOrderException e) { + e.printStackTrace(); + } + } + } + + /** + * 鏄惁涓哄垎浜鍗� + * + * @param order + * @return + */ + private boolean isShareOrder(JDOrder order) { + if (order == null || order.getOrderItemList() == null || order.getOrderItemList().size() == 0) + return false; + Long positionId = order.getOrderItemList().get(0).getPositionId(); + if (positionId == JDApiUtil.POSITION_SHARE) {// 鍒嗕韩璁㈠崟 + return true; + } + return false; + } + + @Override + public void processJDOrder(JDOrder order) { + if (order == null || order.getOrderItemList() == null || order.getOrderItemList().size() == 0) + return; + // 鎷嗗崟鐨勪笉鍋氬鐞� + if (order.getValidCode() == 2) + return; + + // 鏍规嵁ext1涓巗ubUnionId璺熷崟 + String uidStr = order.getExt1(); + if (StringUtil.isNullOrEmpty(uidStr)) + uidStr = order.getOrderItemList().get(0).getSubUnionId(); + + Long uid = null; + if (!StringUtil.isNullOrEmpty(uidStr) && NumberUtil.isNumeric(uidStr)) + uid = Long.parseLong(uidStr); + Long positionId = order.getOrderItemList().get(0).getPositionId(); + if (positionId == JDApiUtil.POSITION_FANLI)// 杩斿埄璁㈠崟 + { + processFanLiJDOrder(order, uid); + lostOrderService.processSuceess(order.getOrderId() + "", Constant.SOURCE_TYPE_JD); + } else if (positionId == JDApiUtil.POSITION_SHARE) {// 鍒嗕韩璁㈠崟 + if (uid == null)// 鍒嗕韩璁㈠崟涓嶅厑璁告壘鍥� + return; + processShareJDOrder(order, uid); + } else {// 澶勭悊鏄惁鏈夎鍗曟壘鍥炵殑鐘舵�� + processFanLiJDOrder(order, null); + } + } + + /** + * 澶勭悊浜笢杩斿埄璁㈠崟 + * + * @param jdOrder + * @param uid + */ + @Transactional + private void processFanLiJDOrder(JDOrder jdOrder, Long uid) { + int invalidCount = 0; + BigDecimal totalMoney = new BigDecimal(0); + // 璁㈠崟鐘舵�佸垽鏂� + for (JDOrderItem item : jdOrder.getOrderItemList()) { + if (item.getEstimateCosPrice() != null) + totalMoney = totalMoney.add(item.getEstimateCosPrice()); + + if (item.getValidCode() == 16 || item.getValidCode() == 17 || item.getValidCode() == 18) {// 宸蹭粯娆� + + } else if (item.getValidCode() == 15) {// 鏈敮浠� + + } else { + invalidCount++; + } + } + + // 鍔犲叆璁㈠崟 + Order oldOrder = orderMapper.selectOrderByOrderIdAndOrderType(jdOrder.getOrderId() + "", + Constant.SOURCE_TYPE_JD); + if (uid == null && oldOrder != null && oldOrder.getBeizhu() != null && oldOrder.getBeizhu().contains("琛ュ崟")) + uid = oldOrder.getUserInfo().getId(); + + if (uid == null) + return; + + if (oldOrder == null)// 鏂板 + { + Order order = new Order(); + order.setBeizhu("浜笢杩斿埄璁㈠崟"); + order.setCreatetime(System.currentTimeMillis()); + order.setOrderId(jdOrder.getOrderId() + ""); + order.setOrderType(Constant.SOURCE_TYPE_JD); + order.setState( + invalidCount == jdOrder.getOrderItemList().size() ? Order.STATE_SHIXIAO : Order.STATE_YIZHIFU); + order.setUserInfo(new UserInfo(uid)); + order.setVersion(2); + order.setThirdCreateTime(new Date(jdOrder.getOrderTime())); + order.setMoney(totalMoney); + // 鍔犲叆鍒拌鍗曡〃 + orderMapper.insertSelective(order); + } else { + Order updateOrder = new Order(); + updateOrder.setId(oldOrder.getId()); + updateOrder.setMoney(totalMoney); + orderMapper.updateByPrimaryKeySelective(updateOrder); + } + + try { + List<CommonOrderAddResultDTO> commonOrderList = commonOrderService.addJDOrder(jdOrder, uid); + addHongBaoWithMQ(commonOrderList, jdOrder.getOrderId() + "", uid, Constant.SOURCE_TYPE_JD, + HongBaoV2.TYPE_ZIGOU); + + if (isCommonOrderAllAdd(commonOrderList)) { + Order order = new Order(); + order.setOrderId(jdOrder.getOrderId() + ""); + order.setOrderType(Constant.SOURCE_TYPE_JD); + order.setUserInfo(new UserInfo(uid)); try { - CommonOrder commonOrder = commonOrderService.addTaoBaoOrder(taoBaoOrder, uid); - hongBaoV2Service.addHongBao(commonOrder, HongBaoV2.TYPE_SHARE_GOODS); - } catch (CommonOrderException e) { - e.printStackTrace(); - } catch (HongBaoException e1) { - e1.printStackTrace(); + if (Constant.ENABLE_MQ) + PlaceOrderCMQManager.getInstance().addPlaceOrderMsg(order); + } catch (Exception e) { + } + } + } catch (CommonOrderException e) { + try { + LogHelper.errorDetailInfo(e, "addJDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + jdOrder.getOrderId()); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + + /** + * 澶勭悊浜笢鍒嗕韩璁㈠崟 + * + * @param order + * @param uid + */ + @Transactional + private void processShareJDOrder(JDOrder jdOrder, Long uid) { + try { + List<CommonOrderAddResultDTO> commonOrderList = commonOrderService.addJDOrder(jdOrder, uid); + addHongBaoWithMQ(commonOrderList, jdOrder.getOrderId() + "", uid, Constant.SOURCE_TYPE_JD, + HongBaoV2.TYPE_SHARE_GOODS); + if (isCommonOrderAllAdd(commonOrderList)) { + Order order = new Order(); + order.setOrderId(jdOrder.getOrderId() + ""); + order.setOrderType(Constant.SOURCE_TYPE_JD); + order.setUserInfo(new UserInfo(uid)); + try { + if (Constant.ENABLE_MQ) + PlaceOrderCMQManager.getInstance().addPlaceOrderMsg(order); + } catch (Exception e) { + } + } + } catch (CommonOrderException e) { + try { + LogHelper.errorDetailInfo(e, "addJDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + jdOrder.getOrderId()); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + + /** + * 鏄惁鏄垎浜禋璁㈠崟 + * + * @param order + * @return + */ + private boolean isShareOrder(PDDOrder pddOrder) { + String positionId = pddOrder.getpId(); + if (PinDuoDuoApiUtil.PID_SHARE.equalsIgnoreCase(positionId)) + return true; + else + return false; + } + + /** + * 澶勭悊鎷煎澶氳鍗� + */ + @Override + public void processPDDOrder(PDDOrder pddOrder) { + if (pddOrder == null) + return; + String uidStr = pddOrder.getCustomParameters(); + Long uid = null; + if (!StringUtil.isNullOrEmpty(uidStr)) + uid = Long.parseLong(uidStr); + String positionId = pddOrder.getpId(); + if (PinDuoDuoApiUtil.PID_FANLI.equalsIgnoreCase(positionId))// 杩斿埄璁㈠崟 + { + processFanLiPDDOrder(pddOrder, uid); + lostOrderService.processSuceess(pddOrder.getOrderSn(), Constant.SOURCE_TYPE_PDD); + } else if (PinDuoDuoApiUtil.PID_SHARE.equalsIgnoreCase(positionId)) {// 鍒嗕韩璁㈠崟 + if (uid == null)// 鍒嗕韩璁㈠崟涓嶅厑璁告壘鍥� + return; + processSharePDDOrder(pddOrder, uid); + } else {// 澶勭悊鏄惁鏈夎鍗曟壘鍥炵殑鐘舵�� + processFanLiPDDOrder(pddOrder, null); + } + } + + /** + * 澶勭悊鎷煎澶氳嚜璐繑鍒╄鍗� + * + * @param pddOrder + * @param uid + */ + @Transactional + private void processFanLiPDDOrder(PDDOrder pddOrder, Long uid) { + int orderState = 0; + if (pddOrder.getOrderStatus() == -1 || pddOrder.getOrderStatus() == 8) + orderState = Order.STATE_SHIXIAO; + else + orderState = Order.STATE_YIZHIFU; + + BigDecimal totalMoney = MoneyBigDecimalUtil.div(new BigDecimal(pddOrder.getOrderAmount()), new BigDecimal(100)); + + // 鍔犲叆璁㈠崟 + Order oldOrder = orderMapper.selectOrderByOrderIdAndOrderType(pddOrder.getOrderSn(), Constant.SOURCE_TYPE_PDD); + if (uid == null && oldOrder != null && oldOrder.getBeizhu() != null && oldOrder.getBeizhu().contains("琛ュ崟")) + uid = oldOrder.getUserInfo().getId(); + + if (uid == null) + return; + + if (oldOrder == null)// 鏂板 + { + Order order = new Order(); + order.setBeizhu("鎷煎澶氳繑鍒╄鍗�"); + order.setCreatetime(System.currentTimeMillis()); + order.setOrderId(pddOrder.getOrderSn()); + order.setOrderType(Constant.SOURCE_TYPE_PDD); + order.setState(orderState); + order.setUserInfo(new UserInfo(uid)); + order.setVersion(2); + order.setThirdCreateTime(new Date(pddOrder.getOrderCreateTime() * 1000)); + order.setMoney(totalMoney); + // 鍔犲叆鍒拌鍗曡〃 + orderMapper.insertSelective(order); + } else { + Order updateOrder = new Order(); + updateOrder.setId(oldOrder.getId()); + updateOrder.setMoney(totalMoney); + orderMapper.updateByPrimaryKeySelective(updateOrder); + } + + try { + List<PDDOrder> pddOrderList = new ArrayList<>(); + pddOrderList.add(pddOrder); + List<CommonOrderAddResultDTO> commonOrderList = commonOrderService.addPDDOrder(pddOrderList, uid); + addHongBaoWithMQ(commonOrderList, pddOrder.getOrderSn(), uid, Constant.SOURCE_TYPE_PDD, + HongBaoV2.TYPE_ZIGOU); + if (isCommonOrderAllAdd(commonOrderList)) { + Order order = new Order(); + order.setOrderId(pddOrder.getOrderSn()); + order.setOrderType(Constant.SOURCE_TYPE_PDD); + order.setUserInfo(new UserInfo(uid)); + try { + if (Constant.ENABLE_MQ) + PlaceOrderCMQManager.getInstance().addPlaceOrderMsg(order); + } catch (Exception e) { + } + } + } catch (CommonOrderException e) { + try { + LogHelper.errorDetailInfo(e, "addPDDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + pddOrder.getOrderSn()); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + + /** + * 澶勭悊鎷煎澶氬垎浜鍗� + * + * @param order + * @param uid + */ + @Transactional + private void processSharePDDOrder(PDDOrder pddOrder, Long uid) { + try { + List<PDDOrder> pddOrderList = new ArrayList<>(); + pddOrderList.add(pddOrder); + List<CommonOrderAddResultDTO> commonOrderList = commonOrderService.addPDDOrder(pddOrderList, uid); + addHongBaoWithMQ(commonOrderList, pddOrder.getOrderSn(), uid, Constant.SOURCE_TYPE_PDD, + HongBaoV2.TYPE_SHARE_GOODS); + if (isCommonOrderAllAdd(commonOrderList)) { + Order order = new Order(); + order.setOrderId(pddOrder.getOrderSn()); + order.setOrderType(Constant.SOURCE_TYPE_PDD); + order.setUserInfo(new UserInfo(uid)); + try { + if (Constant.ENABLE_MQ) + PlaceOrderCMQManager.getInstance().addPlaceOrderMsg(order); + } catch (Exception e) { + } + } + } catch (CommonOrderException e) { + try { + LogHelper.errorDetailInfo(e, "addJDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + pddOrder.getOrderId()); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + + @Override + public void repairCommonOrderByByTaoBaoOrder(String orderId) { + // 鏍规嵁璁㈠崟鍙锋煡璇㈡窐瀹濊鍗� + List<TaoBaoOrder> orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId); + if (orderList != null) + for (TaoBaoOrder order : orderList) { + // 鏍规嵁浜ゆ槗ID鏌ヨ甯歌璁㈠崟 + CommonOrder commonOrder = commonOrderService.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, + order.getTradeId()); + // 淇orderby + if (commonOrder != null) { + CommonOrder update = new CommonOrder(commonOrder.getId()); + update.setOrderBy(order.getOrderBy()); + update.setUpdateTime(new Date()); + commonOrderService.updateByPrimaryKeySelective(update); + } + } + + } + + @Override + public boolean isShareOrder(CommonOrder commonOrder) { + switch (commonOrder.getSourceType()) { + case Constant.SOURCE_TYPE_TAOBAO: + return isShareOrder(taoBaoOrderService.selectByTradeId(commonOrder.getTradeId())); + case Constant.SOURCE_TYPE_JD: + return isShareOrder(jdOrderService.selectDetailByOrderId(Long.parseLong(commonOrder.getOrderNo()))); + case Constant.SOURCE_TYPE_PDD: + return isShareOrder(pddOrderService.selectByOrderSn(commonOrder.getOrderNo()).get(0)); + } + return false; + } + + /** + * 杞负鏅�氳鍗� + * + * @param dtoList + * @return + */ + private List<CommonOrder> convertCommonOrder(List<CommonOrderAddResultDTO> dtoList) { + List<CommonOrder> commonOrderList = new ArrayList<>(); + if (dtoList != null) + for (CommonOrderAddResultDTO dto : dtoList) + commonOrderList.add(dto.getCommonOrder()); + return commonOrderList; + } + + /** + * 鏄惁鍏ㄦ槸澧炲姞 + * + * @param list + * @return + */ + private boolean isCommonOrderAllAdd(List<CommonOrderAddResultDTO> list) { + if (list == null || list.size() == 0) + return false; + int addCount = 0; + if (list != null) + for (CommonOrderAddResultDTO dto : list) { + if (dto.getType() == CommonOrderAddResultDTO.TYPE_ADD) + addCount++; + } + if (addCount == list.size()) + return true; + else + return false; + } + + @Transactional(rollbackFor = Exception.class) + public void invalidHongBaoV2AndGiveGodenCorn(Long hongBaoId, Long uid, String orderId, int sourceType, + String beiZhu) throws Exception { + HongBaoOrder hongbaoOrder = hongBaoOrderMapper.selectByHongBaoId(hongBaoId); + if (hongbaoOrder != null) { + CommonOrder commonOrder = commonOrderService.selectByPrimaryKey(hongbaoOrder.getCommonOrder().getId()); + if (commonOrder != null) { + if (commonOrder.getState() == CommonOrder.STATE_FK) { + CommonOrder updateOrder = new CommonOrder(commonOrder.getId()); + updateOrder.setState(CommonOrder.STATE_SX); + updateOrder.setUpdateTime(new Date()); + commonOrderService.updateByPrimaryKeySelective(updateOrder); } } } + HongBaoV2 hongBao = hongBaoV2Service.selectByPrimaryKey(hongBaoId); + if (hongBao == null || hongBao.getState() == HongBaoV2.STATE_SHIXIAO) + return; + + HongBaoV2 v2 = new HongBaoV2(hongBaoId); + v2.setState(HongBaoV2.STATE_SHIXIAO); + v2.setBeizhu(beiZhu); + v2.setUpdateTime(new Date()); + hongBaoV2Service.updateByPrimaryKeySelective(v2); + List<HongBaoV2> children = hongBaoV2Service.listChildrenById(hongBaoId); + if (children != null) + for (HongBaoV2 child : children) { + HongBaoV2 update = new HongBaoV2(child.getId()); + update.setState(HongBaoV2.STATE_SHIXIAO); + update.setBeizhu(beiZhu); + update.setUpdateTime(new Date()); + hongBaoV2Service.updateByPrimaryKeySelective(update); + } + + if (hongBao.getType() == HongBaoV2.TYPE_ZIGOU || hongBao.getType() == HongBaoV2.TYPE_SHARE_GOODS) { + userOrderMsgNotificationService.orderInvalidToBusinessRunning(uid, orderId, sourceType, hongBao.getType()); + } + } + + @Transactional + @Override + public void doTaoBaoSellerNotPaid(TaoBaoOrder order) { + + // 鏍规嵁浜ゆ槗ID鏌ヨ + if (!StringUtil.isNullOrEmpty(order.getTradeId())) { + List<CommonOrder> commonOrderList = commonOrderService + .listBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, order.getTradeId()); + if (commonOrderList != null) + // 鏌ヨ涓昏鍗� + for (CommonOrder commonOrder : commonOrderList) { + // 鏌ヨ涓荤孩鍖� + HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId()); + if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) { + if (hongBaoOrder.getHongBaoV2().getState() == HongBaoV2.STATE_BUKELINGQU || hongBaoOrder.getHongBaoV2().getState() == HongBaoV2.STATE_SHIXIAO) { + // 璁㈠崟澶辨晥,璧犻�侀噾甯� + try { + invalidHongBaoV2AndGiveGodenCorn(hongBaoOrder.getHongBaoV2().getId(), hongBaoOrder.getHongBaoV2().getUserInfo().getId(), commonOrder.getOrderNo(), commonOrder.getSourceType(), "璁㈠崟鎴愬姛锛屽晢瀹舵湭鎵撴"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + } + + } + } + } + + public void elmeFanli() { + + } + + // 楗夸簡涔堣鍗� + @Resource + private ElmeHongBaoOrderMapService elmeHongBaoOrderMapService; + + @Resource + private ElmeOrderService elmeOrderService; + + @Resource + private ElmeOrderProcessService elmeOrderProcessService; + + /** + * 鑾峰彇楗夸簡涔堝彲浠ヨ繑鍒╃殑绾㈠寘 + * + * @return + */ + @Override + public List<HongBaoV2> getCanBalanceElmeFanliHongBao() { + List<Integer> list = new ArrayList<>(); + list.add(HongBaoV2.TYPE_ELME); + return hongBaoV2Mapper.listCanBalanceHongBaoByTypeAndUid(list, null, null, new Date(), 0, 1000); + } + + @Override + @Transactional + public void elmeFanli(Long hongBaoId) { + // 鏌ヨ璇︽儏 + HongBaoV2 hongBao = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hongBaoId); + if (hongBao.getType() == HongBaoV2.TYPE_ELME && hongBao.getState() == HongBaoV2.STATE_KELINGQU + && hongBao.getPreGetTime() != null && System.currentTimeMillis() > hongBao.getPreGetTime().getTime()) {// 鍙互鍒拌处浜� + // 鍒ゆ柇鐢ㄦ埛鐘舵�� + UserInfo user = userInfoMapper.selectByPrimaryKey(hongBao.getUserInfo().getId()); + if (user == null || user.getState() != UserInfo.STATE_NORMAL) + return; + ElmeHongBaoOrderMap map = elmeHongBaoOrderMapService.selectByHongBaoId(hongBaoId); + if (map == null) + return; + ElmeOrder order = elmeOrderService.selectByPrimaryKey(map.getElmeOrder().getId()); + if (order == null) + return; + + // 鍒拌处锛屽姞鏁版嵁 + HongBaoV2 update = new HongBaoV2(hongBao.getId()); + update.setUpdateTime(new Date()); + update.setGetTime(new Date()); + update.setState(HongBaoV2.STATE_YILINGQU); + hongBaoV2Mapper.updateByPrimaryKeySelective(update); + // 澧炲姞璧勯噾 + UserMoneyDetail detail = null; + try { + detail = UserMoneyDetailFactory.createElmeFanLi(hongBao.getUserInfo().getId(), order.getOrderId(), + hongBao.getId(), hongBao.getMoney()); + } catch (UserMoneyDetailException e) { + e.printStackTrace(); + } + userMoneyService.addUserMoney(hongBao.getUserInfo().getId(), hongBao.getMoney(), detail); + BigDecimal balance = userInfoMapper.selectByPrimaryKey(hongBao.getUserInfo().getId()).getMyHongBao(); + } + // 杩斿埄鍒拌处 + } + + /** + * 娣诲姞绾㈠寘涓庝簨鍔℃秷鎭� + * + * @param commonOrderList + * @param orderId + * @param uid + * @param sourceType + * @param hongBaoType + */ + @Transactional + private void addHongBaoWithMQ(List<CommonOrderAddResultDTO> commonOrderList, String orderId, Long uid, + int sourceType, int hongBaoType) { + final List<CommonOrder> coList = convertCommonOrder(commonOrderList); + HongBaoAddResult result = null; + try { + long time = TimeUtil.convertToTimeTemp("2019-12-06", "yyyy-MM-dd"); + if (!Constant.IS_TEST) + time = TimeUtil.convertToTimeTemp("2019-12-20", "yyyy-MM-dd"); + + if (coList.get(0).getThirdCreateTime().getTime() < time) + result = hongBaoV2Service.addHongBao(coList, hongBaoType); + else + result = hongBaoV2AddManager.addHongBao(coList, hongBaoType); + } catch (HongBaoException e) { + try { + LogHelper.errorDetailInfo(e, "addJDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + orderId); + } catch (Exception e1) { + e1.printStackTrace(); + } + } catch (UserAccountException e) { + + } + if (!Constant.IS_TEST) + if (result.getResultCode() == HongBaoAddResult.CODE_ADD) {// 鍙彂閫佹柊澧炴秷鎭� + OrderMQMsg mqMsg = new OrderMQMsg(orderId, sourceType, uid, OrderMQMsg.HANDLE_TYPE_ADD, + isCommonOrderValid(coList), 0, new Date(), result.isMiandan()); + Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.orderStatistic, mqMsg); + producer.send(msg); + } + } + + /** + * 璁㈠崟鏄惁鏈夋晥 + * + * @param coList + * @return + */ + private boolean isCommonOrderValid(List<CommonOrder> coList) { + for (CommonOrder commonOrder : coList) { + if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_FK + || commonOrder.getState() == CommonOrder.STATE_WQ) { + return true; + } + } + return false; } } -- Gitblit v1.8.0