From 30d8e227e8d823b6c38c3b9c90ac2df03b63befe Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 25 二月 2025 16:41:22 +0800 Subject: [PATCH] 淘宝转链接口更新 --- fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java | 2909 ++++++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 1,966 insertions(+), 943 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 8be2cde..3aa2546 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 @@ -1,943 +1,1966 @@ -package com.yeshi.fanli.service.impl.order; - -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.annotation.Resource; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; - -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.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.money.UserMoneyDetail; -import com.yeshi.fanli.entity.order.CommonOrder; -import com.yeshi.fanli.entity.order.HongBaoOrder; -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.money.UserMoneyDetailException; -import com.yeshi.fanli.exception.order.CommonOrderException; -import com.yeshi.fanli.log.LogHelper; -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.order.CommonOrderService; -import com.yeshi.fanli.service.inter.order.LostOrderService; -import com.yeshi.fanli.service.inter.order.OrderProcessService; -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.util.CMQManager; -import com.yeshi.fanli.util.Constant; -import com.yeshi.fanli.util.StringUtil; -import com.yeshi.fanli.util.TaoBaoConstant; -import com.yeshi.fanli.util.TimeUtil; -import com.yeshi.fanli.util.factory.UserMoneyDetailFactory; -import com.yeshi.fanli.util.taobao.TaoKeOrderApiUtil; - -@Service -public class OrderProcessServiceImpl implements OrderProcessService { - - @Resource - private OrderMapper orderMapper; - - @Resource - private UserInfoMapper userInfoMapper; - - @Resource - private UserNotificationService userNotificationService; - - @Resource - private TaoBaoUnionConfigService taoBaoUnionConfigService; - - @Resource - private TaoBaoWeiQuanDrawBackService taoBaoWeiQuanDrawBackService; - - @Resource - private TaoBaoOrderService taoBaoOrderService; - - - @Resource - private LostOrderService lostOrderService; - - @Resource - private TaoBaoWeiQuanOrderMapper taoBaoWeiQuanOrderMapper; - - @Resource - private AccountDetailsHongBaoMapService accountDetailsHongBaoMapService; - - @Resource - private UserMoneyDetailMapper userMoneyDetailMapper; - - @Resource - private HongBaoV2Mapper hongBaoV2Mapper; - - @Resource - private UserMoneyMsgNotificationService userMoneyMsgNotificationService; - - @Resource - private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; - - @Resource - private UserSystemCouponService userSystemCouponService; - - @Resource - private UserMoneyService userMoneyService; - - @Resource - private TaoBaoBuyRelationMapService taoBaoBuyRelationMapService; - - @Resource - private CommonOrderService commonOrderService; - - @Resource - private HongBaoV2Service hongBaoV2Service; - - @Override - public 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<>(); - 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()); - - 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 { - - 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); - shareOrderMap.put(orderId, list); - } else {// 鏅�氳繑鍒╄鍗� - fanliOrderMap.put(orderId, list); - } - } - } - } - - // 澶勭悊杩斿埄璁㈠崟 - processShopingFanliOrder(fanliOrderMap); - // 澶勭悊鍒嗕韩璧氳鍗� - processShareGoodsOrder(shareOrderMap); - } - - @Override - public void processShopingFanliOrder(Map<String, List<TaoBaoOrder>> orders) { - // 鏌ヨ鍦∣rder涓槸鍚﹀瓨鍦ㄨ璁㈠崟鍙� - Iterator<String> its = orders.keySet().iterator(); - String tempOrderId = ""; - while (its.hasNext()) { - try { - String orderId = its.next(); - tempOrderId = orderId; - // 澶勭悊绾㈠寘涓庡瓙绾㈠寘 - // if (isRedisLockOrder(orderId)) - // continue; - // redisLockOrder(orderId); - processShopingFanliOrderNew(orderId, orders.get(orderId)); - // redisUnlockOrder(orderId); - // 鍑洪敊浜嗗氨涓嶅鐞嗚璁㈠崟浜嗭紝闇�瑕佸畾鏈熸鏌� - - // 鏇存敼涓㈠け璁㈠崟鐨勭姸鎬� - lostOrderService.processSuceess(orderId, Constant.SOURCE_TYPE_TAOBAO); - - } catch (HongBaoException e1) { - e1.printStackTrace(); - } catch (OrderItemException e2) { - e2.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - try { - LogHelper.errorDetailInfo(e, null, tempOrderId); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - } - } - - @Transactional - @Override - public void processShareGoodsOrder(Map<String, List<TaoBaoOrder>> orders) { - // pidOrderService.addPidOrderFromTaoBao(orders); - if (orders != null) { - Iterator<String> its = orders.keySet().iterator(); - while (its.hasNext()) { - String orderId = its.next(); - try { - processShareGoodsOrderNew(orderId, orders.get(orderId)); - } catch (Exception e) { - try { - LogHelper.errorDetailInfo(e, "processShareGoodsOrderNew鍑洪敊", "璁㈠崟鍙�:" + orderId); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - - } - } - } - - @Override - public void fanli() { - // 鑾峰彇涓荤孩鍖� - List<HongBaoV2> hongBaoList = hongBaoV2Mapper.listCanBalanceHongBaoByType(HongBao.TYPE_TAOBAO, 100); - // - // /** - // * 闇�瑕佸疄鏃舵洿鏂板緟杩斿埄鐨勮鍗� - // */ - // - // // 璁$畻鏈�澶х殑鍒涘缓鏃堕棿涓庢渶灏忕殑鍒涘缓鏃堕棿 - // Map<String, Long> map = getMaxAndMinCreateTime(hongBaoList); - // if (map != null) { - // long max = map.get("max"); - // long min = map.get("min"); - // // 鏈�灏忔椂闂存彁鍓�10鍒嗛挓 - // min = min - 1000 * 60 * 10L; - // // 鏇存柊璇ユ鏃堕棿鐨勮鍗� - // List<TaoBaoOrder> orderList = new ArrayList<>(); - // try { - // orderList = TaoBaoOrderUtil.getOrderList(min, max); - // } catch (TaoBaoOrderException e) { - // e.printStackTrace(); - // } - // // try { - // if (orderList != null) - // processOrder(TaoBaoOrderUtil.classifyTaoBaoOrderByOrderId(orderList)); - // // } catch (Exception e) { - // // e.printStackTrace(); - // // try { - // // LogHelper.errorDetailInfo(e); - // // } catch (Exception e1) { - // // e1.printStackTrace(); - // // } - // // } - // } - - /** - * 寮�濮嬭繑鍒� - */ - for (HongBaoV2 hb : hongBaoList) { - // - if (hb.getState() == HongBaoV2.STATE_SHIXIAO || hb.getState() == HongBaoV2.STATE_YILINGQU) - continue; - - if (hb.getPreGetTime() == null || hb.getPreGetTime().getTime() == 0 - || hb.getPreGetTime().getTime() > System.currentTimeMillis()) - continue; - try { - CMQManager.getInstance().addFanLiMsgNew(hb); - } catch (Exception e) { - try { - LogHelper.errorDetailInfo(e); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - } - } - - - @Resource - private HongBaoOrderMapper hongBaoOrderMapper; - - @Override - @Transactional - public void fanli(HongBaoV2 hb1) throws TaoBaoWeiQuanException { - // 鏌ヨ鏈�鏂扮殑绾㈠寘鏁版嵁 - hb1 = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hb1.getId()); - // 鏌ヨ绾㈠寘鐩稿叧鑱旂殑璁㈠崟 - 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) - return; - - 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())); - } - - 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); - } - } - } - - 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(); - } - } - - 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()); - } - // 閫氱煡鍏嶅崟鍒拌处 - 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); - } - } - } else - throw new TaoBaoWeiQuanException(e.getCode(), e.getMsg()); - } - } - - } - - @Override - public void weiQuanOrder(List<TaoBaoWeiQuanOrder> orderList) { - if (orderList != null) - for (TaoBaoWeiQuanOrder order : orderList) { - if (order.getState().equalsIgnoreCase("缁存潈鎴愬姛")) { - CMQManager.getInstance().addWeiQuanOrderMsg(order); - } - } - } - - @Transactional - @Override - public void weiQuanOrder(TaoBaoWeiQuanOrder order) { - // 璁㈠崟缁撶畻鏃堕棿鍦�2018-08-05鍚庡氨涓嶅鐞嗙淮鏉冧簡 - - List<TaoBaoOrder> orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(order.getOrderId()); - 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()); - 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 - try { - taoBaoWeiQuanDrawBackService.doWeiQuanFanli(order.getOrderId()); - taoBaoWeiQuanDrawBackService.doWeiQuanShare(order.getOrderId()); - taoBaoWeiQuanDrawBackService.doWeiQuanInvite(order.getOrderId()); - } catch (TaoBaoWeiQuanException e) { - try { - LogHelper.errorDetailInfo(e, null, "璁㈠崟鍙�:" + order.getOrderId()); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - } - } - } - } - } - - @Override - public void fanliInvaiteAndShare() { - // 鏌ュ嚭閭�璇疯禋涓庡垎浜禋璇ヨ繑鍒╃殑鐢ㄦ埛ID - List<Long> inviteAndShareUids = hongBaoV2Mapper.listUidCanBanlanceShareAndInvite(1000); - Set<Long> uidSets = new HashSet<>(); - if (inviteAndShareUids != null) - for (Long uid : inviteAndShareUids) - uidSets.add(uid); - // 鏍规嵁鐢ㄦ埛ID - Iterator<Long> its = uidSets.iterator(); - while (its.hasNext()) { - Long uid = its.next(); - try { - CMQManager.getInstance().addFanLiTiChengMsg(uid); - } 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); - - 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()); - } - } - } - - /** - * 澶勭悊涓�绾т簩绾у垎浜禋(灞炰簬閭�璇疯禋绫诲瀷) - */ - - 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); - - // 娣诲姞鏂扮増璇︽儏璁板綍 - 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); - } catch (Exception e) { - e.printStackTrace(); - } - - // 鏂扮増閫氱煡 - 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); - } - - } - - - - @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.selectOrderByOrderIdAndOrderType(orderId, Constant.SOURCE_TYPE_TAOBAO); - // 鍘熸潵涓嶅瓨鍦ㄨ鍗� - Long uid = null; - if (oldOrder == null) { - PidUser pidUser =null;// pidUserMapper.selectByPid(pid); - if (pidUser != null) { - uid = pidUser.getUid(); - - // 鎻掑叆鍒癘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 { - - 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(); - } - // 灏氭湭鎵惧埌鍜孭ID瀵瑰簲鐨勭敤鎴� - if (uid == null) - return; - - // 璁$畻璁㈠崟鎬婚搴� - Order updateOrder = new Order(); - updateOrder.setId(oldOrder.getId()); - 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; - } - - if (StringUtil.isNullOrEmpty(thirdState)) - thirdState = "璁㈠崟澶辨晥"; - updateOrder.setThirdState(thirdState); - updateOrder.setThirdCreateTime( - new Date(TimeUtil.convertToTimeTemp(orderList.get(0).getCreateTime(), "yyyy-MM-dd HH:mm:ss"))); - orderMapper.updateByPrimaryKeySelective(updateOrder); - - // 鐢ㄧ涓�涓瓙璁㈠崟閿佸畾鐢ㄦ埛 - List<CommonOrder> commonOrderList = null; - try { - commonOrderList = commonOrderService.addTaoBaoOrder(orderList, uid); - hongBaoV2Service.addHongBao(commonOrderList, HongBaoV2.TYPE_ZIGOU); - } catch (CommonOrderException e) { - try { - LogHelper.errorDetailInfo(e, "addTaoBaoOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + orderId); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - } - } - - @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(); - } - - // 灏氭湭鎵惧埌鍜孭ID瀵瑰簲鐨勭敤鎴� - if (uid == null) - return; - - // 鐢ㄧ涓�涓瓙璁㈠崟閿佸畾鐢ㄦ埛 - try { - List<CommonOrder> commonOrders = commonOrderService.addTaoBaoOrder(orderList, uid); - hongBaoV2Service.addHongBao(commonOrders, HongBaoV2.TYPE_SHARE_GOODS); - } catch (CommonOrderException e) { - e.printStackTrace(); - } catch (HongBaoException e1) { - e1.printStackTrace(); - } - } - } - -} +package com.yeshi.fanli.service.impl.order; + +import com.aliyun.openservices.ons.api.Message; +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.order.HongBaoOrderMapper; +import com.yeshi.fanli.dao.mybatis.order.OrderMapper; +import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoWeiQuanOrderMapper; +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.SystemEnum; +import com.yeshi.fanli.entity.SystemPIDInfo; +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.dy.DYOrder; +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.suning.SuningOrderInfo; +import com.yeshi.fanli.entity.taobao.*; +import com.yeshi.fanli.entity.vipshop.VipShopOrder; +import com.yeshi.fanli.entity.vipshop.VipShopOrderDetail; +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.money.UserMoneyService; +import com.yeshi.fanli.service.inter.money.tb.TaoBaoWeiQuanDrawBackService; +import com.yeshi.fanli.service.inter.order.*; +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.user.tb.UserExtraTaoBaoInfoService; +import com.yeshi.fanli.service.manger.PIDManager; +import com.yeshi.fanli.service.manger.msg.RocketMQManager; +import com.yeshi.fanli.service.manger.order.HongBaoV2AddManager; +import com.yeshi.fanli.service.manger.order.TeamRewardManager; +import com.yeshi.fanli.util.Constant; +import com.yeshi.fanli.util.StringUtil; +import com.yeshi.fanli.util.TaoBaoConstant; +import com.yeshi.fanli.util.factory.UserMoneyDetailFactory; +import com.yeshi.fanli.util.goods.douyin.DYUtil; +import com.yeshi.fanli.util.mq.cmq.order.PlaceOrderCMQManager; +import com.yeshi.fanli.util.mq.cmq.order.TeamOrderCMQManager; +import com.yeshi.fanli.util.mq.rabbit.RabbitmqManager; +import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil; +import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory; +import com.yeshi.fanli.util.rocketmq.MQTopicName; +import com.yeshi.fanli.util.vipshop.VipShopUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.yeshi.utils.MoneyBigDecimalUtil; +import org.yeshi.utils.NumberUtil; +import org.yeshi.utils.TimeUtil; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; + +@Service +public class OrderProcessServiceImpl implements OrderProcessService { + + @Resource + private OrderMapper orderMapper; + + @Resource + private UserInfoMapper userInfoMapper; + + @Resource + private TaoBaoUnionConfigService taoBaoUnionConfigService; + + @Resource + private TaoBaoWeiQuanDrawBackService taoBaoWeiQuanDrawBackService; + + @Resource + private TaoBaoOrderService taoBaoOrderService; + + @Resource + private LostOrderService lostOrderService; + + @Resource + private TaoBaoWeiQuanOrderMapper taoBaoWeiQuanOrderMapper; + + @Resource + private HongBaoV2Mapper hongBaoV2Mapper; + + @Resource + private UserOrderMsgNotificationService userOrderMsgNotificationService; + + @Resource + private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; + + @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 + private RocketMQManager rocketMQManager; + + @Resource + private OrderMoneySettleService orderMoneySettleService; + + @Resource + private HongBaoV2AddManager hongBaoV2AddManager; + + @Resource + private TeamRewardManager teamRewardManager; + + @Resource + private PIDManager pidManager; + + @Resource + private RabbitmqManager rabbitmqManager; + + @Resource + private TeamOrderCMQManager teamOrderCMQManager; + + @Resource + private PlaceOrderCMQManager placeOrderCMQManager; + + /** + * 鏄惁鏄垎浜鍗� + * + * @param order + * @return + */ + private boolean isShareOrder(SystemEnum system, TaoBaoOrder order) { + + String specialRelationId = pidManager.getPidCache(system, Constant.SOURCE_TYPE_TAOBAO, SystemPIDInfo.PidType.fanliChannel); + + 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(specialRelationId)) {// 璁剧疆娓犻亾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; + } + } + + //鑾峰彇鎺ㄥ箍浣嶇被鍨� + private SystemPIDInfo.PidType getPidType(int sourceType, String pid) { + List<SystemPIDInfo> pidInfoList = pidManager.listPidInfoByPidCache(pid, sourceType); + if ((pidInfoList == null || pidInfoList.size() == 0) && sourceType == Constant.SOURCE_TYPE_TAOBAO) { + pidInfoList = pidManager.listPidInfoByPidCache(pid, Constant.SOURCE_TYPE_ELME); + } + + SystemPIDInfo.PidType pidType = null; + if (pidInfoList != null && pidInfoList.size() > 0) { + pidType = pidInfoList.get(0).getPidType(); + } + return pidType; + } + + //鏍规嵁PID鑾峰彇绯荤粺 + private List<SystemEnum> getPidSystems(String pid) { + List<SystemEnum> systemList = new ArrayList<>(); + List<SystemPIDInfo> pidInfoList = pidManager.listPidInfoByPidCache(pid, null); + + if (pidInfoList != null) { + for (SystemPIDInfo pidInfo : pidInfoList) { + systemList.add(pidInfo.getSystem()); + } + } + return systemList; + } + + private Set<Integer> getPidSourceTypes(String pid) { + Set<Integer> sourceTypes = new HashSet<>(); + List<SystemPIDInfo> pidInfoList = pidManager.listPidInfoByPidCache(pid, null); + if (pidInfoList != null) { + for (SystemPIDInfo pidInfo : pidInfoList) { + sourceTypes.add(pidInfo.getSourceType()); + } + } + return sourceTypes; + } + + @Override + 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(); + + 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()); + + + SystemPIDInfo.PidType pidType = getPidType(Constant.SOURCE_TYPE_TAOBAO, pid); + + //--------鍒嗙鑷喘,鍒嗕韩,楗夸簡涔堣鍗曠被鍨�------- + if (pidType != null) { + if ("楗夸簡涔�".equalsIgnoreCase(list.get(0).getOrderType()) + && pidType != SystemPIDInfo.PidType.share) { + // 楗夸簡涔堣鍗曞紑濮嬪綊鍏ュ埌娣樺疂璁㈠崟 + 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 (!StringUtil.isNullOrEmpty(list.get(0).getSpecialId()) + || pidType == SystemPIDInfo.PidType.fanliChannel) {// 璁剧疆娓犻亾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); + } + } + } else { + if ("鍙g".equalsIgnoreCase(list.get(0).getOrderType()) + && pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_KOUBEI_PID)) {// 鍙g鑷喘 + fanliOrderMap.put(orderId, list); + } else { + fanliOrderMap.put(orderId, list); + } + } + } + } + + // 澶勭悊杩斿埄璁㈠崟 + 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(), null); + 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 + public void processShopingFanliOrder(Map<String, List<TaoBaoOrder>> orders) { + // 鏌ヨ鍦∣rder涓槸鍚﹀瓨鍦ㄨ璁㈠崟鍙� + Iterator<String> its = orders.keySet().iterator(); + String tempOrderId = ""; + while (its.hasNext()) { + try { + String orderId = its.next(); + tempOrderId = orderId; + // 澶勭悊绾㈠寘涓庡瓙绾㈠寘 + // if (isRedisLockOrder(orderId)) + // continue; + // redisLockOrder(orderId); + processShopingFanliOrderNew(orderId, orders.get(orderId)); + // redisUnlockOrder(orderId); + // 鍑洪敊浜嗗氨涓嶅鐞嗚璁㈠崟浜嗭紝闇�瑕佸畾鏈熸鏌� + + // 鏇存敼涓㈠け璁㈠崟鐨勭姸鎬� + lostOrderService.processSuceess(orderId, Constant.SOURCE_TYPE_TAOBAO); + + } catch (HongBaoException e1) { + e1.printStackTrace(); + } catch (OrderItemException e2) { + e2.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + try { + LogHelper.errorDetailInfo(e, null, tempOrderId); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + } + + @Transactional + @Override + public void processShareGoodsOrder(Map<String, List<TaoBaoOrder>> orders) { + // pidOrderService.addPidOrderFromTaoBao(orders); + if (orders != null) { + Iterator<String> its = orders.keySet().iterator(); + while (its.hasNext()) { + String orderId = its.next(); + try { + processShareGoodsOrderNew(orderId, orders.get(orderId)); + } catch (Exception e) { + try { + LogHelper.errorDetailInfo(e, "processShareGoodsOrderNew鍑洪敊", "璁㈠崟鍙�:" + orderId); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + + } + } + } + + @Override + public void fanli() { + LogHelper.test("澶勭悊杩斿埄鍒拌处"); + // 鑾峰彇涓荤孩鍖� + List<HongBaoV2> hongBaoList = hongBaoV2Mapper.listCanBalanceHongBaoByType(HongBaoV2.TYPE_ZIGOU, 1000); + // + // /** + // * 闇�瑕佸疄鏃舵洿鏂板緟杩斿埄鐨勮鍗� + // */ + // + // // 璁$畻鏈�澶х殑鍒涘缓鏃堕棿涓庢渶灏忕殑鍒涘缓鏃堕棿 + // Map<String, Long> map = getMaxAndMinCreateTime(hongBaoList); + // if (map != null) { + // long max = map.get("max"); + // long min = map.get("min"); + // // 鏈�灏忔椂闂存彁鍓�10鍒嗛挓 + // min = min - 1000 * 60 * 10L; + // // 鏇存柊璇ユ鏃堕棿鐨勮鍗� + // List<TaoBaoOrder> orderList = new ArrayList<>(); + // try { + // orderList = TaoBaoOrderUtil.getOrderList(min, max); + // } catch (TaoBaoOrderException e) { + // e.printStackTrace(); + // } + // // try { + // if (orderList != null) + // processOrder(TaoBaoOrderUtil.classifyTaoBaoOrderByOrderId(orderList)); + // // } catch (Exception e) { + // // e.printStackTrace(); + // // try { + // // LogHelper.errorDetailInfo(e); + // // } catch (Exception e1) { + // // e1.printStackTrace(); + // // } + // // } + // } + + /** + * 寮�濮嬭繑鍒� + */ + for (HongBaoV2 hb : hongBaoList) { + // + if (hb.getState() == HongBaoV2.STATE_SHIXIAO || hb.getState() == HongBaoV2.STATE_YILINGQU) + continue; + + if (hb.getPreGetTime() == null || hb.getPreGetTime().getTime() == 0 + || hb.getPreGetTime().getTime() > System.currentTimeMillis()) + continue; + try { + if (Constant.ENABLE_MQ) + rabbitmqManager.addFanLiMsgNew(hb); + } catch (Exception e) { + try { + LogHelper.errorDetailInfo(e); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + } + + @Resource + private HongBaoOrderMapper hongBaoOrderMapper; + + @Override + @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; + } + + 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; + + 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; + + taoBaoWeiQuanList = taoBaoWeiQuanOrderMapper + .selectListByOrderIdAndState(hongBaoOrder.getCommonOrder().getOrderNo(), "绛夊緟澶勭悊"); + if (taoBaoWeiQuanList != null && taoBaoWeiQuanList.size() > 0) + return; + } + + // 鏌ヨ璇ヨ鍗曚箣鍓嶆槸鍚︽湁鍒拌处 + 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()); + } + } + + 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; + } + } + }, 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) { + try { + if (order.getState().contains("缁存潈鎴愬姛")) { + if (Constant.ENABLE_MQ) + rabbitmqManager.addWeiQuanOrderMsg(order); + } + } catch (Exception e) { + LogHelper.error("缁存潈璁㈠崟鍔犲叆鍒伴槦鍒楀嚭閿�:" + order != null ? new Gson().toJson(order) : null); + } + } + } + + @Transactional + @Override + public void weiQuanOrder(TaoBaoWeiQuanOrder order) { + // 璁㈠崟缁撶畻鏃堕棿鍦�2018-08-05鍚庡氨涓嶅鐞嗙淮鏉冧簡 + + List<TaoBaoOrder> orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(order.getOrderId()); + 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("2019-01-01", "yyyy-MM-dd")) {// 缁撶畻鏃堕棿鍦�1鏈�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()); + teamRewardManager.weiQuan(order.getOrderId(), Constant.SOURCE_TYPE_TAOBAO, order.getOrderItemId()); + } catch (Exception e) { + try { + LogHelper.errorDetailInfo(e, "鍒拌处鍚庡鐞嗙淮鏉冩墸娆惧嚭閿�", "璁㈠崟鍙�:" + order.getOrderId()); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } else { + try { +// taoBaoWeiQuanDrawBackService.doWeiQuanInvite(order.getOrderId()); + teamRewardManager.weiQuan(order.getOrderId(), Constant.SOURCE_TYPE_TAOBAO, order.getOrderItemId()); + } catch (Exception e) { + try { + LogHelper.errorDetailInfo(e, "鍒拌处鍚庡鐞嗙淮鏉冩墸娆惧嚭閿�", "璁㈠崟鍙�:" + order.getOrderId()); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + } + } + } + } + + @Override + 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<>(); + 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 { + if (Constant.ENABLE_MQ) + teamOrderCMQManager.addFanLiTeamIncomePreMsg(new UidDateDTO(uid, maxTime)); + } catch (Exception e) { + e.printStackTrace(); + LogHelper.error(e); + } + } + + } + + @Override + public int fanliShare(Date maxTime) { + // 鏌ュ嚭閭�璇疯禋鐨勭敤鎴稩D + List<Integer> typeList = new ArrayList<>(); + typeList.add(HongBaoV2.TYPE_SHARE_GOODS); + + 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); + } + } + // 鏍规嵁鐢ㄦ埛ID + Iterator<Long> its = uidSets.iterator(); + while (its.hasNext()) { + Long uid = its.next(); + try { + if (Constant.ENABLE_MQ) + rabbitmqManager.addFanLiShareMsg(new UidDateDTO(uid, maxTime)); + } catch (Exception e) { + e.printStackTrace(); + LogHelper.error(e); + } + } + + return uidSets.size(); + } + + @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(); + } + + try { + orderMoneySettleService.inviteSettleVipShop(uid, maxPreGetTime); + } catch (OrderMoneySettleException e) { + e.printStackTrace(); + } + + try { + orderMoneySettleService.inviteSettleSuning(uid, maxPreGetTime); + } catch (OrderMoneySettleException e) { + e.printStackTrace(); + } + + try { + orderMoneySettleService.inviteSettleDY(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(); + } + + try { + orderMoneySettleService.shareSettleVipShop(uid, maxPreGetTime); + } catch (OrderMoneySettleException e) { + e.printStackTrace(); + } + + try { + orderMoneySettleService.shareSettleSuning(uid, maxPreGetTime); + } catch (OrderMoneySettleException e) { + e.printStackTrace(); + } + + try { + orderMoneySettleService.shareSettleDY(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()); + + SystemPIDInfo.PidType pidType = getPidType(Constant.SOURCE_TYPE_TAOBAO, pid); + List<SystemEnum> systemList = getPidSystems(pid); + Set<Integer> sourceTypes = getPidSourceTypes(pid); + + Order oldOrder = orderMapper.selectOrderByOrderIdAndOrderType(orderId, Constant.SOURCE_TYPE_TAOBAO); + // 鍘熸潵涓嶅瓨鍦ㄨ鍗� + Long uid = null; + if (oldOrder == null) { + Long targetUid = null; + if (pidType != null && pidType == SystemPIDInfo.PidType.fanliChannel + && !StringUtil.isNullOrEmpty(orderList.get(0).getRelationId())) {// 澶勭悊闈炶繑鍒╁晢鍝佸簱鐨勫晢鍝� + targetUid = taoBaoBuyRelationMapService.selectUidByRelationId(orderList.get(0).getRelationId()); + + } else if ((sourceTypes.contains(Constant.SOURCE_TYPE_ELME) + || pid.equalsIgnoreCase(TaoBaoConstant.TAOBAO_KOUBEI_PID)) + && !StringUtil.isNullOrEmpty(orderList.get(0).getRelationId())) {// 澶勭悊楗夸簡涔�,鍙g鐨勮鍗� + UserExtraTaoBaoInfo extraInfo = userExtraTaoBaoInfoService + .getByRelationId(orderList.get(0).getRelationId(), systemList); + if (extraInfo != null) { + targetUid = extraInfo.getUser().getId(); + } + } else if (!StringUtil.isNullOrEmpty(orderList.get(0).getSpecialId())) { + UserExtraTaoBaoInfo info = userExtraTaoBaoInfoService + .getBySpecialId(orderList.get(0).getSpecialId(), systemList); + 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(); + } + // 灏氭湭鎵惧埌鍜孭ID瀵瑰簲鐨勭敤鎴� + if (uid == null) + return; + + // 璁$畻璁㈠崟鎬婚搴� + Order updateOrder = new Order(); + updateOrder.setId(oldOrder.getId()); + 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; + } + + if (StringUtil.isNullOrEmpty(thirdState)) + thirdState = "璁㈠崟澶辨晥"; + updateOrder.setThirdState(thirdState); + updateOrder.setThirdCreateTime( + new Date(TimeUtil.convertToTimeTemp(orderList.get(0).getCreateTime(), "yyyy-MM-dd HH:mm:ss"))); + orderMapper.updateByPrimaryKeySelective(updateOrder); + + // 鐢ㄧ涓�涓瓙璁㈠崟閿佸畾鐢ㄦ埛 + 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.addPlaceOrderMsg(order); + } catch (Exception e) { + } + } + } catch (CommonOrderException e) { + try { + LogHelper.errorDetailInfo(e, "addTaoBaoOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + orderId); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + } + + @Override + public void processShareGoodsOrderNew(String orderId, List<TaoBaoOrder> orderList) { + if (orderList != null && orderList.size() > 0) { + // 鍘熸潵涓嶅瓨鍦ㄨ鍗� + Long uid = null; + UserExtraTaoBaoInfo info = userExtraTaoBaoInfoService.getByRelationId(orderList.get(0).getRelationId(), null); + 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; + + // 鐢ㄧ涓�涓瓙璁㈠崟閿佸畾鐢ㄦ埛 + 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.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(); + SystemPIDInfo.PidType pidType = getPidType(Constant.SOURCE_TYPE_JD, positionId + ""); + if (pidType != null && pidType == SystemPIDInfo.PidType.share) {// 鍒嗕韩璁㈠崟 + return true; + } + return false; + } + + @Override + public void processJDOrder(JDOrder order) { + if (order == null || order.getOrderItemList() == null || order.getOrderItemList().size() == 0) + return; + // 鎷嗗崟涓斾笉鍦╟ommonorder涓殑涓嶅仛澶勭悊 + if (order.getValidCode() == 2) { + List<CommonOrder> list= commonOrderService.listBySourceTypeAndOrderId(Constant.SOURCE_TYPE_JD,order.getOrderId()+""); + if(list==null||list.size()==0) { + 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(); + SystemPIDInfo.PidType pidType = getPidType(Constant.SOURCE_TYPE_JD, positionId + ""); + + if (pidType != null) { + if (pidType == SystemPIDInfo.PidType.fanli)// 杩斿埄璁㈠崟 + { + processFanLiJDOrder(order, uid); + lostOrderService.processSuceess(order.getOrderId() + "", Constant.SOURCE_TYPE_JD); + } else if (pidType == SystemPIDInfo.PidType.share) {// 鍒嗕韩璁㈠崟 + if (uid == null)// 鍒嗕韩璁㈠崟涓嶅厑璁告壘鍥� + return; + processShareJDOrder(order, uid); + } else {// 澶勭悊鏄惁鏈夎鍗曟壘鍥炵殑鐘舵�� + processFanLiJDOrder(order, null); + } + } else { + processFanLiJDOrder(order, null); + } + } + + /** + * 澶勭悊浜笢杩斿埄璁㈠崟 + * + * @param jdOrder + * @param uid + */ + 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.addPlaceOrderMsg(order); + } catch (Exception e) { + } + } + } catch (CommonOrderException e) { + try { + LogHelper.errorDetailInfo(e, "addJDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + jdOrder.getOrderId()); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + + /** + * 澶勭悊浜笢鍒嗕韩璁㈠崟 + * + * @param jdOrder + * @param uid + */ + 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.addPlaceOrderMsg(order); + } catch (Exception e) { + } + } + } catch (CommonOrderException e) { + try { + LogHelper.errorDetailInfo(e, "addJDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + jdOrder.getOrderId()); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + + /** + * 鏄惁鏄垎浜禋璁㈠崟 + * + * @param pddOrder + * @return + */ + private boolean isShareOrder(PDDOrder pddOrder) { + String positionId = pddOrder.getpId(); + SystemPIDInfo.PidType pidType = getPidType(Constant.SOURCE_TYPE_PDD, positionId); + + if (pidType != null && pidType == SystemPIDInfo.PidType.share) + return true; + else + return false; + } + + /** + * 澶勭悊鎷煎澶氳鍗� + */ + @Override + public void processPDDOrder(PDDOrder pddOrder) { + if (pddOrder == null) + return; + String customParameters = pddOrder.getCustomParameters(); + Long uid = null; + if (!StringUtil.isNullOrEmpty(customParameters)) + uid = Long.parseLong(PinDuoDuoUtil.getUidFromCustomParams(customParameters)); + String positionId = pddOrder.getpId(); + SystemPIDInfo.PidType pidType = getPidType(Constant.SOURCE_TYPE_PDD, positionId); + if (pidType != null) { + if (pidType == SystemPIDInfo.PidType.fanli)// 杩斿埄璁㈠崟 + { + processFanLiPDDOrder(pddOrder, uid); + lostOrderService.processSuceess(pddOrder.getOrderSn(), Constant.SOURCE_TYPE_PDD); + } else if (pidType == SystemPIDInfo.PidType.share) {// 鍒嗕韩璁㈠崟 + if (uid == null)// 鍒嗕韩璁㈠崟涓嶅厑璁告壘鍥� + return; + processSharePDDOrder(pddOrder, uid); + } else {// 澶勭悊鏄惁鏈夎鍗曟壘鍥炵殑鐘舵�� + processFanLiPDDOrder(pddOrder, null); + } + } else { + processFanLiPDDOrder(pddOrder, null); + } + } + + /** + * 澶勭悊鎷煎澶氳嚜璐繑鍒╄鍗� + * + * @param pddOrder + * @param uid + */ + 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); + if (pddOrder.getFailReason() != null && pddOrder.getFailReason().contains("姣斾环")) + order.setStateDesc("姣斾环璁㈠崟"); + 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); + if (pddOrder.getFailReason() != null && pddOrder.getFailReason().contains("姣斾环")) + updateOrder.setStateDesc("姣斾环璁㈠崟"); + 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.addPlaceOrderMsg(order); + } catch (Exception e) { + } + } + } catch (CommonOrderException e) { + try { + LogHelper.errorDetailInfo(e, "addPDDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + pddOrder.getOrderSn()); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + + /** + * 澶勭悊鎷煎澶氬垎浜鍗� + * + * @param pddOrder + * @param uid + */ + 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.addPlaceOrderMsg(order); + } catch (Exception e) { + } + } + } catch (CommonOrderException e) { + try { + LogHelper.errorDetailInfo(e, "addJDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + pddOrder.getOrderId()); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + + @Override + public void processVipShopOrder(VipShopOrder order) { + + if (order == null || order.getDetailList() == null || order.getDetailList().size() == 0) + return; + + + // 鏍规嵁ext1涓巗ubUnionId璺熷崟 + String channelTag = order.getChannelTag(); + + String uidStr = VipShopUtil.getUidFromChanTag(channelTag); + + Long uid = null; + if (!StringUtil.isNullOrEmpty(uidStr) && NumberUtil.isNumeric(uidStr)) + uid = Long.parseLong(uidStr); + String type = VipShopUtil.getTypeFromChanTag(channelTag); + if ("buy".equalsIgnoreCase(type))// 杩斿埄璁㈠崟 + { + processFanLiVipShopOrder(order, uid); + lostOrderService.processSuceess(order.getOrderSn() + "", Constant.SOURCE_TYPE_VIP); + } else if ("share".equalsIgnoreCase(type)) {// 鍒嗕韩璁㈠崟 + if (uid == null)// 鍒嗕韩璁㈠崟涓嶅厑璁告壘鍥� + return; + processShareVipShopOrder(order, uid); + } else {// 澶勭悊鏄惁鏈夎鍗曟壘鍥炵殑鐘舵�� + processFanLiVipShopOrder(order, null); + } + } + + /** + * 澶勭悊鍞搧浼氳繑鍒╄鍗� + * + * @param vipShopOrder + * @param uid + */ + private void processFanLiVipShopOrder(VipShopOrder vipShopOrder, Long uid) { + int invalidCount = 0; + BigDecimal totalMoney = new BigDecimal(0); + // 璁㈠崟鐘舵�佸垽鏂� + for (VipShopOrderDetail item : vipShopOrder.getDetailList()) { + if (item.getCommissionTotalCost() != null) + totalMoney = totalMoney.add(item.getCommissionTotalCost()); + if (item.getStatus() == VipShopOrderDetail.STATUS_INVALID) { + invalidCount++; + } + } + + // 鍔犲叆璁㈠崟 + Order oldOrder = orderMapper.selectOrderByOrderIdAndOrderType(vipShopOrder.getOrderSn() + "", + Constant.SOURCE_TYPE_VIP); + 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(vipShopOrder.getOrderSn() + ""); + order.setOrderType(Constant.SOURCE_TYPE_VIP); + order.setState( + invalidCount == vipShopOrder.getDetailList().size() ? Order.STATE_SHIXIAO : Order.STATE_YIZHIFU); + order.setUserInfo(new UserInfo(uid)); + order.setVersion(2); + order.setThirdCreateTime(new Date(vipShopOrder.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.addVipShopOrder(vipShopOrder, uid); + addHongBaoWithMQ(commonOrderList, vipShopOrder.getOrderSn() + "", uid, Constant.SOURCE_TYPE_VIP, + HongBaoV2.TYPE_ZIGOU); + + if (isCommonOrderAllAdd(commonOrderList)) { + Order order = new Order(); + order.setOrderId(vipShopOrder.getOrderSn() + ""); + order.setOrderType(Constant.SOURCE_TYPE_VIP); + order.setUserInfo(new UserInfo(uid)); + try { + if (Constant.ENABLE_MQ) + placeOrderCMQManager.addPlaceOrderMsg(order); + } catch (Exception e) { + } + } + } catch (CommonOrderException e) { + try { + LogHelper.errorDetailInfo(e, "addVipShopOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + vipShopOrder.getOrderSn()); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + + /** + * 澶勭悊浜笢鍒嗕韩璁㈠崟 + * + * @param jdOrder + * @param uid + */ + private void processShareVipShopOrder(VipShopOrder jdOrder, Long uid) { + try { + List<CommonOrderAddResultDTO> commonOrderList = commonOrderService.addVipShopOrder(jdOrder, uid); + addHongBaoWithMQ(commonOrderList, jdOrder.getOrderSn() + "", uid, Constant.SOURCE_TYPE_VIP, + HongBaoV2.TYPE_SHARE_GOODS); + if (isCommonOrderAllAdd(commonOrderList)) { + Order order = new Order(); + order.setOrderId(jdOrder.getOrderSn() + ""); + order.setOrderType(Constant.SOURCE_TYPE_VIP); + order.setUserInfo(new UserInfo(uid)); + try { + if (Constant.ENABLE_MQ) + placeOrderCMQManager.addPlaceOrderMsg(order); + } catch (Exception e) { + } + } + } catch (CommonOrderException e) { + try { + LogHelper.errorDetailInfo(e, "addJDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + jdOrder.getOrderSn()); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + + /** + * 澶勭悊鑻忓畞璁㈠崟 + */ + @Override + public void processSuningOrder(SuningOrderInfo suningOrder) { + if (suningOrder == null) + return; + String uidStr = suningOrder.getChildAccountId(); + Long uid = null; + if (!StringUtil.isNullOrEmpty(uidStr)) + uid = Long.parseLong(uidStr); + String positionId = suningOrder.getPositionId(); + + SystemPIDInfo.PidType pidType = getPidType(Constant.SOURCE_TYPE_SUNING, positionId); + + if (pidType != null) { + if (pidType == SystemPIDInfo.PidType.fanli)// 杩斿埄璁㈠崟 + { + processFanLiSuningOrder(suningOrder, uid); + lostOrderService.processSuceess(suningOrder.getOrderCode(), Constant.SOURCE_TYPE_SUNING); + } else if (pidType == SystemPIDInfo.PidType.share) {// 鍒嗕韩璁㈠崟 + if (uid == null)// 鍒嗕韩璁㈠崟涓嶅厑璁告壘鍥� + return; + processShareSuningOrder(suningOrder, uid); + } else {// 澶勭悊鏄惁鏈夎鍗曟壘鍥炵殑鐘舵�� + processFanLiSuningOrder(suningOrder, null); + } + } else { + processFanLiSuningOrder(suningOrder, null); + } + } + + + + /** + * 澶勭悊鑻忓畞鑷喘杩斿埄璁㈠崟 + * + * @param suningOrder + * @param uid + */ + private void processFanLiSuningOrder(SuningOrderInfo suningOrder, Long uid) { + int orderState = 0; + + // 绛夊緟浠樻锛涙敮浠樺畬鎴愶紱閫�娆撅紱璁㈠崟宸插彇娑堬紱纭鏀惰揣 + + if ("璁㈠崟宸插彇娑�".equalsIgnoreCase(suningOrder.getOrderLineStatusDesc()) + || "閫�娆�".equalsIgnoreCase(suningOrder.getOrderLineStatusDesc())) + orderState = Order.STATE_SHIXIAO; + else + orderState = Order.STATE_YIZHIFU; + + BigDecimal totalMoney = new BigDecimal(suningOrder.getPayAmount()); + + // 鍔犲叆璁㈠崟 + Order oldOrder = orderMapper.selectOrderByOrderIdAndOrderType(suningOrder.getOrderCode(), + Constant.SOURCE_TYPE_SUNING); + 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(suningOrder.getOrderCode()); + order.setOrderType(Constant.SOURCE_TYPE_SUNING); + order.setState(orderState); + order.setUserInfo(new UserInfo(uid)); + order.setVersion(2); + order.setThirdCreateTime( + new Date(TimeUtil.convertToTimeTemp(suningOrder.getOrderSubmitTime(), "yyyy-MM-dd HH:mm:ss"))); + order.setMoney(totalMoney); + // 鍔犲叆鍒拌鍗曡〃 + orderMapper.insertSelective(order); + } else { + Order updateOrder = new Order(); + updateOrder.setId(oldOrder.getId()); + updateOrder.setMoney(totalMoney); + orderMapper.updateByPrimaryKeySelective(updateOrder); + } + + try { + List<SuningOrderInfo> pddOrderList = new ArrayList<>(); + pddOrderList.add(suningOrder); + List<CommonOrderAddResultDTO> commonOrderList = commonOrderService.addSuningOrder(pddOrderList, uid); + addHongBaoWithMQ(commonOrderList, suningOrder.getOrderCode(), uid, Constant.SOURCE_TYPE_SUNING, + HongBaoV2.TYPE_ZIGOU); + if (isCommonOrderAllAdd(commonOrderList)) { + Order order = new Order(); + order.setOrderId(suningOrder.getOrderCode()); + order.setOrderType(Constant.SOURCE_TYPE_SUNING); + order.setUserInfo(new UserInfo(uid)); + try { + if (Constant.ENABLE_MQ) + placeOrderCMQManager.addPlaceOrderMsg(order); + } catch (Exception e) { + } + } + } catch (CommonOrderException e) { + try { + LogHelper.errorDetailInfo(e, "addPDDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + suningOrder.getOrderCode()); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + + /** + * 澶勭悊鑻忓畞鍒嗕韩璁㈠崟 + * + * @param suningOrder + * @param uid + */ + private void processShareSuningOrder(SuningOrderInfo suningOrder, Long uid) { + try { + List<SuningOrderInfo> suningOrderList = new ArrayList<>(); + suningOrderList.add(suningOrder); + List<CommonOrderAddResultDTO> commonOrderList = commonOrderService.addSuningOrder(suningOrderList, uid); + addHongBaoWithMQ(commonOrderList, suningOrder.getOrderCode(), uid, Constant.SOURCE_TYPE_SUNING, + HongBaoV2.TYPE_SHARE_GOODS); + if (isCommonOrderAllAdd(commonOrderList)) { + Order order = new Order(); + order.setOrderId(suningOrder.getOrderCode()); + order.setOrderType(Constant.SOURCE_TYPE_SUNING); + order.setUserInfo(new UserInfo(uid)); + try { + if (Constant.ENABLE_MQ) + placeOrderCMQManager.addPlaceOrderMsg(order); + } catch (Exception e) { + } + } + } catch (CommonOrderException e) { + try { + LogHelper.errorDetailInfo(e, "addJDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + suningOrder.getOrderCode()); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + + + @Override + public void processDYOrder(DYOrder order) { + if (order == null) + return; + + + // 鏍规嵁ext1涓巗ubUnionId璺熷崟 + String extra_info = order.getExternal_info(); + + Long uid = DYUtil.getUid(extra_info); + String type = DYUtil.getTypeFromExtraInfo(extra_info); + if ("buy".equalsIgnoreCase(type))// 杩斿埄璁㈠崟 + { + processFanLiDYOrder(order, uid); + lostOrderService.processSuceess(order.getOrder_id() + "", Constant.SOURCE_TYPE_DY); + } else if ("share".equalsIgnoreCase(type)) {// 鍒嗕韩璁㈠崟 + if (uid == null)// 鍒嗕韩璁㈠崟涓嶅厑璁告壘鍥� + return; + processShareDYOrder(order, uid); + } else {// 澶勭悊鏄惁鏈夎鍗曟壘鍥炵殑鐘舵�� + processFanLiDYOrder(order, null); + } + } + + /** + * 澶勭悊鎶栭煶杩斿埄璁㈠崟 + * + * @param dyOrder + * @param uid + */ + private void processFanLiDYOrder(DYOrder dyOrder, Long uid) { + + BigDecimal totalMoney = new BigDecimal(dyOrder.getTotal_pay_amount()).divide(new BigDecimal(100),2, RoundingMode.FLOOR); + + // 鍔犲叆璁㈠崟 + Order oldOrder = orderMapper.selectOrderByOrderIdAndOrderType(dyOrder.getOrder_id() + "", + Constant.SOURCE_TYPE_DY); + 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(dyOrder.getOrder_id() + ""); + order.setOrderType(Constant.SOURCE_TYPE_DY); + order.setState( + (dyOrder.getFlow_point().equalsIgnoreCase(DYOrder.FLOW_POINT_REFUND)) ? Order.STATE_SHIXIAO : Order.STATE_YIZHIFU); + order.setUserInfo(new UserInfo(uid)); + order.setVersion(2); + order.setThirdCreateTime(new Date(TimeUtil.convertToTimeTemp(dyOrder.getPay_success_time(),"yyyy-MM-dd HH:mm:ss"))); + 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.addDYOrder(dyOrder, uid); + addHongBaoWithMQ(commonOrderList, dyOrder.getOrder_id() + "", uid, Constant.SOURCE_TYPE_DY, + HongBaoV2.TYPE_ZIGOU); + + if (isCommonOrderAllAdd(commonOrderList)) { + Order order = new Order(); + order.setOrderId(dyOrder.getOrder_id()); + order.setOrderType(Constant.SOURCE_TYPE_DY); + order.setUserInfo(new UserInfo(uid)); + try { + if (Constant.ENABLE_MQ) + placeOrderCMQManager.addPlaceOrderMsg(order); + } catch (Exception e) { + } + } + } catch (CommonOrderException e) { + try { + LogHelper.errorDetailInfo(e, "addDYOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + dyOrder.getOrder_id()); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + + /** + * 澶勭悊鎶栭煶鍒嗕韩璁㈠崟 + * + * @param dyOrder + * @param uid + */ + private void processShareDYOrder(DYOrder dyOrder, Long uid) { + try { + List<CommonOrderAddResultDTO> commonOrderList = commonOrderService.addDYOrder(dyOrder, uid); + addHongBaoWithMQ(commonOrderList, dyOrder.getOrder_id() + "", uid, Constant.SOURCE_TYPE_DY, + HongBaoV2.TYPE_SHARE_GOODS); + if (isCommonOrderAllAdd(commonOrderList)) { + Order order = new Order(); + order.setOrderId(dyOrder.getOrder_id()); + order.setOrderType(Constant.SOURCE_TYPE_DY); + order.setUserInfo(new UserInfo(uid)); + try { + if (Constant.ENABLE_MQ) + placeOrderCMQManager.addPlaceOrderMsg(order); + } catch (Exception e) { + } + } + } catch (CommonOrderException e) { + try { + LogHelper.errorDetailInfo(e, "addDYOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + dyOrder.getOrder_id()); + } 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) { + //鑾峰彇绯荤粺 + UserInfo user = userInfoMapper.selectByPrimaryKey(commonOrder.getUserInfo().getId()); + SystemEnum system = user.getSystem(); + switch (commonOrder.getSourceType()) { + case Constant.SOURCE_TYPE_TAOBAO: + return isShareOrder(system, 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 + */ + 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) { + if (e.getCode() != HongBaoException.CODE_ORDER_WEIQUAN) { + try { + LogHelper.errorDetailInfo(e, "addJDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + orderId); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + + } catch (UserAccountException e) { + + } + if (result == null) { + return; + } + + + 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(), coList.get(0).getThirdCreateTime()); + Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.orderStatistic, mqMsg); + rocketMQManager.sendNormalMsg(msg, null); + } + } + + /** + * 璁㈠崟鏄惁鏈夋晥 + * + * @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; + } + + + @Override + public void invalidTaoBaoOrder(String tradeId) { + TaoBaoOrder taoBaoOrder = taoBaoOrderService.selectByTradeId(tradeId); + //璁㈠崟浠樻鍜岃鍗曟垚鍔熺殑鐘舵�佹墠鍏佽澶辨晥 + if (taoBaoOrder != null && ("璁㈠崟浠樻".equalsIgnoreCase(taoBaoOrder.getOrderState()) || "璁㈠崟鎴愬姛".equalsIgnoreCase(taoBaoOrder.getOrderState()))) { + TaoBaoOrder update = new TaoBaoOrder(); + update.setId(taoBaoOrder.getId()); + update.setLatestUpdateTime(new Date()); + update.setOrderState("璁㈠崟澶辨晥"); + taoBaoOrderService.updateSelectiveByPrimaryKey(update); + rabbitmqManager.addTaoBaoOrderMsg(taoBaoOrder.getOrderId()); + } + } + +} -- Gitblit v1.8.0