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 | 1488 +++++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 994 insertions(+), 494 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 6b54173..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 @@ -2,7 +2,6 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -10,59 +9,94 @@ 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.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.UserInfoMapper; import com.yeshi.fanli.dao.mybatis.money.UserMoneyDetailMapper; import com.yeshi.fanli.dao.mybatis.order.HongBaoOrderMapper; import com.yeshi.fanli.dao.mybatis.order.OrderMapper; import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoWeiQuanOrderMapper; -import com.yeshi.fanli.dto.HongBao; +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.Order; 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.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.exception.HongBaoException; -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.HongBaoV2Service; -import com.yeshi.fanli.service.inter.msg.UserMoneyMsgNotificationService; +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.OrderMoneySettleService; import com.yeshi.fanli.service.inter.order.OrderProcessService; +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.TaoBaoOrderService; import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService; -import com.yeshi.fanli.service.inter.taobao.TaoBaoWeiQuanDrawBackService; -import com.yeshi.fanli.service.inter.user.UserExtraTaoBaoInfoService; -import com.yeshi.fanli.service.inter.user.UserMoneyService; -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.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.cmq.order.PlaceOrderCMQManager; +import com.yeshi.fanli.util.cmq.order.TeamOrderCMQManager; import com.yeshi.fanli.util.factory.UserMoneyDetailFactory; -import com.yeshi.fanli.util.taobao.TaoKeOrderApiUtil; +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 { @@ -74,9 +108,6 @@ private UserInfoMapper userInfoMapper; @Resource - private UserNotificationService userNotificationService; - - @Resource private TaoBaoUnionConfigService taoBaoUnionConfigService; @Resource @@ -84,7 +115,6 @@ @Resource private TaoBaoOrderService taoBaoOrderService; - @Resource private LostOrderService lostOrderService; @@ -105,6 +135,9 @@ private UserMoneyMsgNotificationService userMoneyMsgNotificationService; @Resource + private UserOrderMsgNotificationService userOrderMsgNotificationService; + + @Resource private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; @Resource @@ -115,21 +148,71 @@ @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<TaoBaoOrder>> shareOrderMap = new HashMap<>(); + Map<String, List<TaoBaoOrder>> elmeOrderMap = new HashMap<>(); while (its.hasNext()) { String orderId = its.next(); @@ -137,23 +220,37 @@ 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()); - - if (!StringUtil.isNullOrEmpty(list.get(0).getSpecialId()) - || pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID)) {// 璁剧疆娓犻亾ID褰撳仛浼氬憳杩愯惀ID鐨勪綅缃甀D + 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).getRelationId())) { - shareOrderMap.put(orderId, list); } else { - - PidUser pidUser = null;//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); + 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 {// 鏅�氳繑鍒╄鍗� + } 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); } } @@ -164,6 +261,54 @@ processShopingFanliOrder(fanliOrderMap); // 澶勭悊鍒嗕韩璧氳鍗� processShareGoodsOrder(shareOrderMap); + // 澶勭悊楗夸簡涔堣鍗� + processElemeOrder(elmeOrderMap); + } + + 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 + 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 @@ -225,8 +370,9 @@ @Override public void fanli() { + LogHelper.test("澶勭悊杩斿埄鍒拌处"); // 鑾峰彇涓荤孩鍖� - List<HongBaoV2> hongBaoList = hongBaoV2Mapper.listCanBalanceHongBaoByType(HongBao.TYPE_TAOBAO, 100); + List<HongBaoV2> hongBaoList = hongBaoV2Mapper.listCanBalanceHongBaoByType(HongBaoV2.TYPE_ZIGOU, 1000); // // /** // * 闇�瑕佸疄鏃舵洿鏂板緟杩斿埄鐨勮鍗� @@ -271,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); @@ -282,181 +429,119 @@ } } - @Resource private HongBaoOrderMapper hongBaoOrderMapper; @Override - @Transactional + @Transactional(rollbackFor = Exception.class) public void fanli(HongBaoV2 hb1) throws TaoBaoWeiQuanException { // 鏌ヨ鏈�鏂扮殑绾㈠寘鏁版嵁 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; + } // 鏌ヨ绾㈠寘鐩稿叧鑱旂殑璁㈠崟 HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByHongBaoId(hb1.getId()); if (hongBaoOrder == null) { LogHelper.error("杩斿埄澶辫触:" + hb1.getId()); return; } - // 缁存潈涓殑涓嶈繑鍒� - List<TaoBaoWeiQuanOrder> taoBaoWeiQuanList = taoBaoWeiQuanOrderMapper - .selectListByOrderIdAndState(hongBaoOrder.getCommonOrder().getOrderNo(), "缁存潈鍒涘缓"); - if (taoBaoWeiQuanList != null && taoBaoWeiQuanList.size() > 0) + + 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; - // 鏌ヨ鍚屼竴璁㈠崟鍙风殑绾㈠寘 - List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId( - hongBaoOrder.getCommonOrder().getSourceType(), hongBaoOrder.getCommonOrder().getOrderNo()); - List<HongBaoV2> hongBaoList = new ArrayList<>(); - Map<Long, BigDecimal> userMoney = new HashMap<>(); - Map<Long, List<HongBaoV2>> userHongBao = new HashMap<>(); - Map<Long, Integer> userGoodsCount = new HashMap<>(); - // Map<Long, BigDecimal> userPayMent = new HashMap<>(); - for (CommonOrder co : orderList) { - hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(co.getId()); - hongBaoList.add(hongBaoOrder.getHongBaoV2()); - Long uid = co.getUserInfo().getId(); - if (userGoodsCount.get(uid) == null) - userGoodsCount.put(uid, co.getCount()); - else - userGoodsCount.put(uid, Integer.valueOf(co.getCount() + userGoodsCount.get(uid))); - // if (userPayMent.get(uid) == null) - // userPayMent.put(uid, new BigDecimal(0)); - // if (co.getState() == CommonOrder.STATE_JS) - // userPayMent.put(uid, - // userPayMent.get(uid).add(co.getSettlement())); - // else - // userPayMent.put(uid, userPayMent.get(uid).add(co.getPayment())); + taoBaoWeiQuanList = taoBaoWeiQuanOrderMapper + .selectListByOrderIdAndState(hongBaoOrder.getCommonOrder().getOrderNo(), "绛夊緟澶勭悊"); + if (taoBaoWeiQuanList != null && taoBaoWeiQuanList.size() > 0) + return; } - for (HongBaoV2 hb : hongBaoList) { - 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) { - // 濡傛灉绾㈠寘娌¤棰嗗彇 - Long uid = hb.getUserInfo().getId(); - HongBaoV2 updateHongBao = new HongBaoV2(); - updateHongBao.setId(hb.getId()); - updateHongBao.setState(HongBaoV2.STATE_YILINGQU); - updateHongBao.setGetTime(new Date(currentTimeMillis)); - hongBaoV2Mapper.updateByPrimaryKeySelective(updateHongBao); - if (userMoney.get(uid) == null) - userMoney.put(uid, hb.getMoney()); - else - userMoney.put(uid, userMoney.get(uid).add(hb.getMoney())); - - // 娣诲姞绾㈠寘鍒扮敤鎴� - if (userHongBao.get(uid) == null) - userHongBao.put(uid, new ArrayList<>()); - userHongBao.get(uid).add(hb); - } + // 鏌ヨ璇ヨ鍗曚箣鍓嶆槸鍚︽湁鍒拌处 + 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()); } } - Iterator<Long> its = userMoney.keySet().iterator(); - - while (its.hasNext()) { - // 灏嗚嚜宸辨坊鍔犲埌鐢ㄦ埛 - Long uid = its.next(); - BigDecimal money = userMoney.get(uid); - UserMoneyDetail userMoneyDetail = null; - // 鎻掑叆鏂扮増璧勯噾鏄庣粏 - try { - // 姝ゅ涓嶇敤璁㈠崟鍙峰仛鍞竴鎬х储寮� - userMoneyDetail = UserMoneyDetailFactory.createFanLi(uid, hongBaoOrder.getCommonOrder().getOrderNo(), - hongBaoOrder.getCommonOrder().getSourceType(), null, money); - } catch (UserMoneyDetailException e1) { - try { - LogHelper.errorDetailInfo(e1, "璁㈠崟鍙�:" + hongBaoOrder.getCommonOrder().getOrderNo(), ""); - } 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; } - userMoneyService.addUserMoney(uid, money, userMoneyDetail); - // 娣诲姞璧勯噾鏄庣粏涓庣孩鍖呯殑鏄犲皠鍏崇郴 - for (HongBaoV2 v2 : userHongBao.get(uid)) { - accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(v2.getId(), userMoneyDetail.getId()); - } - - // 绔欏唴淇�+鎺ㄩ�� - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); - try { - userNotificationService.orderFanliRecieved(uid, hongBaoOrder.getCommonOrder().getOrderNo(), - userGoodsCount.get(uid), user.getMyHongBao(), money); - } catch (Exception e) { - try { - LogHelper.errorDetailInfo(e); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - - // 鏂扮増閫氱煡 - userMoneyMsgNotificationService.fanliOrderReceived(uid, hongBaoOrder.getCommonOrder().getOrderNo(), - userGoodsCount.get(uid), money, user.getMyHongBao()); - } - // 閫氱煡鍏嶅崟鍒拌处 + // 鑷喘鍒拌处浜嬪姟娑堟伅 + 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 { - userSystemCouponService.updateStateByArrivalAccount(hongBaoOrder.getCommonOrder().getOrderNo()); - } catch (Exception e) { - e.printStackTrace(); - } - - // 缁存潈鎵f锛�2018-08-05鍚庡紑濮嬪疄琛岋級 - if (hongBaoOrder.getCommonOrder().getSettleTime() != null && hongBaoOrder.getCommonOrder().getSettleTime() - .getTime() >= TimeUtil.convertToTimeTemp("2018-08-05", "yyyy-MM-dd")) { - try { - - taoBaoWeiQuanDrawBackService.doWeiQuanFanli(hongBaoOrder.getCommonOrder().getOrderNo()); - - } catch (TaoBaoWeiQuanException e) { - if (e.getCode() == TaoBaoWeiQuanException.CODE_NEDD_UPDATE_ORDER) { - List<TaoBaoOrder> olist = taoBaoOrderService - .getTaoBaoOrderByOrderId(hongBaoOrder.getCommonOrder().getOrderNo()); - - if (olist != null && olist.size() > 0) { - long time = TimeUtil.convertToTimeTemp(olist.get(0).getCreateTime(), "yyyy-MM-dd HH:mm:ss"); - olist = TaoKeOrderApiUtil.getTaoBaoAllOrder(TimeUtil.getGernalTime(time, "yyyy-MM-dd HH:mm:ss"), - TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET); - List<TaoBaoOrder> thirdOList = TaoKeOrderApiUtil.getTaoBaoThirdAllOrder( - TimeUtil.getGernalTime(time, "yyyy-MM-dd HH:mm:ss"), 30, 1, - TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET); - if (thirdOList != null && thirdOList.size() > 0) - olist.addAll(thirdOList); - - if (olist != null && olist.size() > 0) { - for (int i = 0; i < olist.size(); i++) { - if (!olist.get(i).getOrderId() - .equalsIgnoreCase(hongBaoOrder.getCommonOrder().getOrderNo())) {// 鍒犻櫎鏃犲叧璁㈠崟 - olist.remove(i); - i--; - } - } - - taoBaoOrderService.addTaoBaoOrderList(olist); + 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; } } - } else - throw new TaoBaoWeiQuanException(e.getCode(), e.getMsg()); + }, null); + else { + try { + 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)); } - } @Override 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); } } } @@ -470,13 +555,8 @@ 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; - // } - // TODO 澶勭悊缁存潈鎴愬姛浣嗘槸宸插埌璐︾殑璁㈠崟 - + // 澶勭悊缁存潈鎴愬姛浣嗘槸宸插埌璐︾殑璁㈠崟 if (order.getJieSuanTime().getTime() > TimeUtil.convertToTimeTemp("2019-01-01", "yyyy-MM-dd")) {// 缁撶畻鏃堕棿鍦�2鏈�1鍙风殑寮�濮嬪鐞嗗凡鍒拌处浣嗘槸缁存潈鐨� CommonOrder commonOrder = commonOrderService.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, order.getOrderItemId()); @@ -487,15 +567,34 @@ TaoBaoWeiQuanDrawBack drawBack = taoBaoWeiQuanDrawBackService .selectByOrderItemId(order.getOrderItemId()); if (drawBack == null) {// 杩樻湭鎵f + OrderLogHelper.taoBaoWeiQuan("宸插埌璐︽湭鎵f澶勭悊:瀛愯鍗曞彿:" + order.getOrderItemId()); try { - taoBaoWeiQuanDrawBackService.doWeiQuanFanli(order.getOrderId()); + taoBaoWeiQuanDrawBackService.doWeiQuanFanli(order.getOrderId(), true); taoBaoWeiQuanDrawBackService.doWeiQuanShare(order.getOrderId()); taoBaoWeiQuanDrawBackService.doWeiQuanInvite(order.getOrderId()); } catch (TaoBaoWeiQuanException e) { try { - LogHelper.errorDetailInfo(e, null, "璁㈠崟鍙�:" + order.getOrderId()); + 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; } } } @@ -505,292 +604,121 @@ } @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> inviteOrders = new HashSet<>(); - int inviteGoodsCount = 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); - updateHongBao.setUpdateTime(new Date()); - hongBaoV2Mapper.updateByPrimaryKeySelective(updateHongBao); - // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� - hbIdList.add(hongBao.getId()); - - // 2018-08-05 杩囧悗鐨勮鍗曟墠澶勭悊缁存潈 - - HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByHongBaoId(hongBao.getParent().getId()); - inviteGoodsCount += hongBaoOrder.getCommonOrder().getCount(); - inviteOrders.add(hongBaoOrder.getCommonOrder().getOrderNo()); - - 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); - updateHongBao.setUpdateTime(new Date()); - hongBaoV2Mapper.updateByPrimaryKeySelective(updateHongBao); - // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� - hbIdList.add(hb.getId()); - - HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByHongBaoId(hb.getParent().getId()); - inviteGoodsCount += hongBaoOrder.getCommonOrder().getCount(); - inviteOrders.add(hongBaoOrder.getCommonOrder().getOrderNo()); - if (!StringUtil.isNullOrEmpty(hongBaoOrder.getCommonOrder().getOrderNo())) - drawBackOrders.add(hongBaoOrder.getCommonOrder().getOrderNo()); - } - } - - // 閭�璇疯禋鍒拌处 - if (invitemoney.compareTo(new BigDecimal(0)) > 0) { - userInfoMapper.addHongBaoByUid(uid, invitemoney); - - // 娣诲姞鏂扮増璇︽儏璁板綍 + // 鏍规嵁鐢ㄦ埛ID + Iterator<Long> its = uidSets.iterator(); + while (its.hasNext()) { + Long uid = its.next(); try { - // 鏌ヨ閭�璇疯禋鐨勬湁鏁堣鍗曪紝澶辨晥璁㈠崟锛岀淮鏉冭鍗� - Calendar ca = Calendar.getInstance(); - Date maxDate = new Date(TimeUtil - .convertToTimeTemp(ca.get(Calendar.YEAR) + "-" + (ca.get(Calendar.MONTH) + 1), "yyyy-M")); - ca.add(Calendar.MONTH, -1); - - Date minDate = new Date(TimeUtil - .convertToTimeTemp(ca.get(Calendar.YEAR) + "-" + (ca.get(Calendar.MONTH) + 1), "yyyy-M")); - long validCount = hongBaoV2Mapper.countInviteOrderCountByUidAndSettleTime(uid, CommonOrder.STATE_JS, - minDate, maxDate); - long weiQuanCount = hongBaoV2Mapper.countInviteOrderCountByUidAndSettleTime(uid, CommonOrder.STATE_WQ, - minDate, maxDate); - long invalidCount = hongBaoV2Mapper.countInviteOrderCountByUidAndSettleTime(uid, CommonOrder.STATE_SX, - minDate, maxDate); - - UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createInvite(uid, (int) validCount, - (int) weiQuanCount, (int) invalidCount, invitemoney, new Date()); - userMoneyDetailMapper.insert(userMoneyDetail); - // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� - accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hbIdList, userMoneyDetail.getId()); - } catch (UserMoneyDetailException e) { - try { - LogHelper.errorDetailInfo(e); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - - // 鍙戦�佹帹閫� - try { - // 鎻愭垚鍒拌处娑堟伅閫氱煡 - userNotificationService.tiChengInviteRecieved(uid, inviteOrders.size(), inviteGoodsCount, null, - invitemoney); + if (Constant.ENABLE_MQ) + CMQManager.getInstance().addFanLiShareMsg(new UidDateDTO(uid, maxTime)); } catch (Exception e) { e.printStackTrace(); + LogHelper.error(e); } - - // 鏂扮増閫氱煡 - userMoneyMsgNotificationService.inviteOrderReceived(uid, inviteOrders.size(), inviteGoodsCount, invitemoney, - userInfoMapper.selectByPKey(uid).getMyHongBao()); - - for (String orderId : drawBackOrders) - taoBaoWeiQuanDrawBackService.doWeiQuanInvite(orderId); - } - - hbIdList.clear(); - drawBackOrders.clear(); - - /** - * 澶勭悊鍒嗕韩璧� - */ - - int shareGoodsCount = 0; - Set<String> shareOrders = new HashSet<>(); - 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); - updateHongBao.setUpdateTime(new Date()); - 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(); - shareGoodsCount += hongBaoOrder.getCommonOrder().getCount(); - } - shareOrders.add(hongBaoOrder.getCommonOrder().getOrderNo()); - 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); - // 娣诲姞鏂扮増璇︽儏璁板綍 - try { - // 璁$畻鏈湀鐨勬湁鏁堣鍗曪紝澶辨晥璁㈠崟锛岀淮鏉冭鍗� - Calendar ca = Calendar.getInstance(); - - Date maxDate = new Date(TimeUtil - .convertToTimeTemp(ca.get(Calendar.YEAR) + "-" + (ca.get(Calendar.MONTH) + 1), "yyyy-M")); - ca.add(Calendar.MONTH, -1); - - Date minDate = new Date(TimeUtil - .convertToTimeTemp(ca.get(Calendar.YEAR) + "-" + (ca.get(Calendar.MONTH) + 1), "yyyy-M")); - long validCount = commonOrderService.countByUidAndOrderStateWithOrderBalanceTime(uid, - CommonOrder.STATE_JS, minDate, maxDate); - long weiQuanCount = commonOrderService.countByUidAndOrderStateWithOrderBalanceTime(uid, - CommonOrder.STATE_WQ, minDate, maxDate); - long invalidCount = commonOrderService.countByUidAndOrderStateWithOrderBalanceTime(uid, - CommonOrder.STATE_SX, minDate, maxDate); - - UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createShare(uid, (int) validCount, - (int) weiQuanCount, (int) invalidCount, sharemoney, new Date()); - userMoneyDetailMapper.insert(userMoneyDetail); - // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� - accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hbIdList, userMoneyDetail.getId()); - } catch (UserMoneyDetailException e) { - try { - LogHelper.errorDetailInfo(e); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - - // 鍙戦�佹帹閫� - try { - // 鎻愭垚鍒拌处娑堟伅閫氱煡 - userNotificationService.tiChengShareRecieved(uid, shareOrders.size(), shareGoodsCount, null, - sharemoney); - } catch (Exception e) { - e.printStackTrace(); - } - - // 鏂扮増閫氱煡 - userMoneyMsgNotificationService.shareOrderReceived(uid, shareOrders.size(), shareGoodsCount, sharemoney, - userInfoMapper.selectByPrimaryKey(uid).getMyHongBao()); - - for (String orderId : drawBackOrders) - taoBaoWeiQuanDrawBackService.doWeiQuanShare(orderId); } } + @Override + @Transactional(rollbackFor = Exception.class) + public void fanliPreInvaite(Long uid, Date maxPreGetTime) { + // 閭�璇疯禋鍒拌处 + try { + orderMoneySettleService.inviteSettleTB(uid, maxPreGetTime); + } catch (OrderMoneySettleException e) { + e.printStackTrace(); + } + 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 @@ -811,10 +739,28 @@ // 鍘熸潵涓嶅瓨鍦ㄨ鍗� Long uid = null; if (oldOrder == null) { - PidUser pidUser =null;// 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(); @@ -828,37 +774,8 @@ // 鍔犲叆鍒拌鍗曡〃 orderMapper.insertSelective(order); oldOrder = order; - } else { - - 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 (!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(); - order.setBeizhu("PID杩斿埄璁㈠崟"); - order.setCreatetime(System.currentTimeMillis()); - order.setOrderId(orderId); - order.setOrderType(1); - order.setState(Order.STATE_YIZHIFU); - order.setUserInfo(new UserInfo(uid)); - order.setVersion(2); - // 鍔犲叆鍒拌鍗曡〃 - orderMapper.insertSelective(order); - oldOrder = order; - } } + } else { uid = oldOrder.getUserInfo().getId(); } @@ -893,12 +810,21 @@ orderMapper.updateByPrimaryKeySelective(updateOrder); // 鐢ㄧ涓�涓瓙璁㈠崟閿佸畾鐢ㄦ埛 - List<CommonOrder> commonOrderList = null; + List<CommonOrderAddResultDTO> commonOrderList = null; try { commonOrderList = commonOrderService.addTaoBaoOrder(orderList, uid); - hongBaoV2Service.addHongBao(commonOrderList, HongBaoV2.TYPE_ZIGOU); - - + 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 { LogHelper.errorDetailInfo(e, "addTaoBaoOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + orderId); @@ -911,35 +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 =null; //pidUserMapper.selectByPid(pid);-PID鏈哄埗绉婚櫎 - if (pidUser != null) - uid = pidUser.getUid(); - else { - UserExtraTaoBaoInfo info = userExtraTaoBaoInfoService.getByRelationId(orderList.get(0).getRelationId()); - if (info != null && info.getUser() != null) - uid = info.getUser().getId(); + 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(); + } + } } - // 灏氭湭鎵惧埌鍜孭ID瀵瑰簲鐨勭敤鎴� if (uid == null) return; // 鐢ㄧ涓�涓瓙璁㈠崟閿佸畾鐢ㄦ埛 try { - List<CommonOrder> commonOrders = commonOrderService.addTaoBaoOrder(orderList, uid); - hongBaoV2Service.addHongBao(commonOrders, HongBaoV2.TYPE_SHARE_GOODS); + 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(); - } catch (HongBaoException e1) { + } + } + } + + /** + * 鏄惁涓哄垎浜鍗� + * + * @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 { + 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