From c84d8ecd97d111b01db9cfd807300d0491a95bc8 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 08 一月 2019 16:38:34 +0800 Subject: [PATCH] Merge branch 'dev-hongbao' --- fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java | 625 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 528 insertions(+), 97 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 5bfd4be..8e712c0 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java @@ -2,6 +2,7 @@ import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -13,26 +14,35 @@ 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.AccountDetailsMapper; import com.yeshi.fanli.dao.mybatis.AccountMessageMapper; import com.yeshi.fanli.dao.mybatis.HongBaoManageMapper; +import com.yeshi.fanli.dao.mybatis.HongBaoV2Mapper; import com.yeshi.fanli.dao.mybatis.MoneyRecordMapper; import com.yeshi.fanli.dao.mybatis.PidOrderMapper; import com.yeshi.fanli.dao.mybatis.ThreeSaleGiftMapper; import com.yeshi.fanli.dao.mybatis.UserInfoMapper; import com.yeshi.fanli.dao.mybatis.hongbao.HongBaoMapper; +import com.yeshi.fanli.dao.mybatis.money.UserMoneyDetailMapper; +import com.yeshi.fanli.dao.mybatis.order.HongBaoOrderMapper; import com.yeshi.fanli.dao.mybatis.order.OrderItemMapper; import com.yeshi.fanli.dao.mybatis.order.OrderMapper; import com.yeshi.fanli.dao.mybatis.share.PidUserMapper; +import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoWeiQuanOrderMapper; import com.yeshi.fanli.entity.bus.user.AccountDetails; import com.yeshi.fanli.entity.bus.user.HongBao; import com.yeshi.fanli.entity.bus.user.HongBaoExtra; +import com.yeshi.fanli.entity.bus.user.HongBaoV2; import com.yeshi.fanli.entity.bus.user.MoneyRecord; import com.yeshi.fanli.entity.bus.user.Order; import com.yeshi.fanli.entity.bus.user.OrderItem; import com.yeshi.fanli.entity.bus.user.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.PidOrder; import com.yeshi.fanli.entity.taobao.PidUser; import com.yeshi.fanli.entity.taobao.TaoBaoOrder; @@ -43,8 +53,15 @@ import com.yeshi.fanli.exception.ObjectStateException; 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.HongBaoManageService; import com.yeshi.fanli.service.inter.hongbao.HongBaoService; +import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service; +import com.yeshi.fanli.service.inter.order.CommonOrderService; +import com.yeshi.fanli.service.inter.order.LostOrderService; import com.yeshi.fanli.service.inter.order.OrderItemServcie; import com.yeshi.fanli.service.inter.order.OrderProcessService; import com.yeshi.fanli.service.inter.order.OrderService; @@ -60,7 +77,7 @@ import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TimeUtil; import com.yeshi.fanli.util.factory.AccountDetailsFactory; -import com.yeshi.fanli.util.taobao.TaoBaoOrderUtil; +import com.yeshi.fanli.util.factory.UserMoneyDetailFactory; @Service public class OrderProcessServiceImpl implements OrderProcessService { @@ -128,6 +145,24 @@ @Resource private RedisManager redisManager; + @Resource + private LostOrderService lostOrderService; + + @Resource + private TaoBaoWeiQuanOrderMapper taoBaoWeiQuanOrderMapper; + + @Resource + private HongBaoManageService hongBaoManageService; + + @Resource + private AccountDetailsHongBaoMapService accountDetailsHongBaoMapService; + + @Resource + private UserMoneyDetailMapper userMoneyDetailMapper; + + @Resource + private HongBaoV2Mapper hongBaoV2Mapper; + @Override public void processOrder(Map<String, List<TaoBaoOrder>> orders) { List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService.getConfigByTypeCache(PidUser.TYPE_FANLI_ANDROID); @@ -135,7 +170,8 @@ // 鍒嗙鍑鸿繑鍒╄鍗曚笌鍒嗕韩璧氳鍗� Iterator<String> its = orders.keySet().iterator(); Map<String, List<TaoBaoOrder>> fanliOrderMap = new HashMap<>(); - Map<String, List<PidOrder>> shareOrderMap = new HashMap<>(); + Map<String, List<PidOrder>> sharePidOrderMap = 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) { @@ -144,11 +180,12 @@ list.get(0).getSourceMediaId(), list.get(0).getAdPositionId()); PidUser pidUser = pidUserMapper.selectByPid(pid); if (pidUser != null && pidUser.getType() == PidUser.TYPE_SHARE_GOODS) {// 鍟嗗搧鍒嗕韩璁㈠崟 - List<PidOrder> pidOrderList = new ArrayList<>(); - for (TaoBaoOrder order : list) { - pidOrderList.add(TaoBaoOrderUtil.convertToPidOrder(order)); - } - shareOrderMap.put(orderId, pidOrderList); + // 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); } @@ -163,6 +200,7 @@ /** * 鍒╃敤redis鐨勫師瀛愭�у皢璁㈠崟鍙烽攣浣忥紝涓嶈鍏朵粬澶勭悊 + * * @param orderId */ private void redisLockOrder(String orderId) { @@ -172,6 +210,7 @@ /** * 璁㈠崟瑙i攣 + * * @param orderId */ private void redisUnlockOrder(String orderId) { @@ -181,6 +220,7 @@ /** * 璁㈠崟鏄惁琚攣浣忎簡 + * * @param orderId * @return */ @@ -193,35 +233,52 @@ return false; } - @Transactional @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); - processShopingFanliOrder(orderId, orders.get(orderId)); -// redisUnlockOrder(orderId); + // if (isRedisLockOrder(orderId)) + // continue; + // redisLockOrder(orderId); + processShopingFanliOrderNew(orderId, orders.get(orderId)); + // redisUnlockOrder(orderId); // 鍑洪敊浜嗗氨涓嶅鐞嗚璁㈠崟浜嗭紝闇�瑕佸畾鏈熸鏌� + + // 鏇存敼涓㈠け璁㈠崟鐨勭姸鎬� + lostOrderService.processSuceess(orderId); + } 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<PidOrder>> orders) { - pidOrderService.addPidOrderFromTaoBao(orders); + 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(); + processShareGoodsOrderNew(orderId, orders.get(orderId)); + } + } } /** @@ -251,7 +308,7 @@ @Override public void fanli() { // 鑾峰彇涓荤孩鍖� - List<HongBao> hongBaoList = hongBaoMapper.selectCanBalanceHongBaoByType(HongBao.TYPE_TAOBAO, 100); + List<HongBaoV2> hongBaoList = hongBaoV2Mapper.listCanBalanceHongBaoByType(HongBao.TYPE_TAOBAO, 100); // // /** // * 闇�瑕佸疄鏃舵洿鏂板緟杩斿埄鐨勮鍗� @@ -287,16 +344,16 @@ /** * 寮�濮嬭繑鍒� */ - for (HongBao hb : hongBaoList) { + for (HongBaoV2 hb : hongBaoList) { // - if (hb.getState() == HongBao.STATE_SHIXIAO || hb.getState() == HongBao.STATE_YILINGQU) + if (hb.getState() == HongBaoV2.STATE_SHIXIAO || hb.getState() == HongBaoV2.STATE_YILINGQU) continue; - if (hb.getPreGettime() == null || hb.getPreGettime() == 0 - || hb.getPreGettime() > System.currentTimeMillis()) + if (hb.getPreGetTime() == null || hb.getPreGetTime().getTime() == 0 + || hb.getPreGetTime().getTime() > System.currentTimeMillis()) continue; try { - CMQManager.getInstance().addFanLiMsg(hb); + CMQManager.getInstance().addFanLiMsgNew(hb); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); @@ -383,8 +440,13 @@ } else// 璁$畻璁㈠崟鐨勬�婚噾棰� { BigDecimal money = new BigDecimal(0); - for (TaoBaoOrder o : orderList) - money = money.add(o.getPayment()); + 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) @@ -397,7 +459,7 @@ orderMapper.updateByPrimaryKeySelective(updateOrder); Order order = oldOrder; // 璁㈠崟杩斿埄姣斾緥 - BigDecimal rate = new BigDecimal(hongBaoManageMapper.selectByKey("hongbao_goods_proportion").getValue()); + BigDecimal rate = hongBaoManageService.getFanLiRate(); // 鏌ユ壘鏄惁瀛樺湪绾㈠寘 List<HongBao> hongBaoList = hongBaoMapper.selectByOid(order.getId()); @@ -438,6 +500,16 @@ public void fanli(HongBao hb) throws TaoBaoWeiQuanException { // 鏌ヨ鏈�鏂扮殑绾㈠寘鏁版嵁 hb = hongBaoMapper.selectByPrimaryKeyForUpdate(hb.getId()); + // 缁存潈涓殑涓嶈繑鍒� + List<TaoBaoWeiQuanOrder> taoBaoWeiQuanList = taoBaoWeiQuanOrderMapper + .selectListByOrderIdAndState(hb.getOrderId(), "缁存潈鍒涘缓"); + if (taoBaoWeiQuanList != null && taoBaoWeiQuanList.size() > 0) + return; + + taoBaoWeiQuanList = taoBaoWeiQuanOrderMapper.selectListByOrderIdAndState(hb.getOrderId(), "绛夊緟澶勭悊"); + if (taoBaoWeiQuanList != null && taoBaoWeiQuanList.size() > 0) + return; + long currentTimeMillis = System.currentTimeMillis(); if (hb.getState() != HongBao.STATE_SHIXIAO) { // 璁剧疆涓哄凡杩斿埄 @@ -471,6 +543,23 @@ AccountDetailsFactory.FANLI, orderItem, null, hb.getUserInfo()); accountDetailsMapper.insertSelective(accountDetails); + // 鎻掑叆鏂扮増璧勯噾鏄庣粏 + try { + UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createFanLi(hb.getUserInfo().getId(), + hb.getOrderId(), 1, hb.getId(), hb.getMoney()); + userMoneyDetail.setId(accountDetails.getId()); + userMoneyDetailMapper.insert(userMoneyDetail); + } catch (UserMoneyDetailException e1) { + try { + LogHelper.errorDetailInfo(e1); + } catch (Exception e2) { + e2.printStackTrace(); + } + } + + // 娣诲姞璧勯噾鏄庣粏涓庣孩鍖呯殑鏄犲皠鍏崇郴 + accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hb.getId(), accountDetails.getId()); + // 缁存潈鎵f锛�2018-08-05鍚庡紑濮嬪疄琛岋級 if (hb.getBalanceTime() != null && hb.getBalanceTime().getTime() >= TimeUtil.convertToTimeTemp("2018-08-05", "yyyy-MM-dd")) { @@ -481,6 +570,84 @@ try { userNotificationService.orderFanliRecieved(hb.getUserInfo().getId(), orderItem.getOrderId(), orderItem.getFanMoney()); + } catch (Exception e) { + } + + } + } + } + + @Resource + private HongBaoOrderMapper hongBaoOrderMapper; + + @Override + @Transactional + public void fanli(HongBaoV2 hb) throws TaoBaoWeiQuanException { + // 鏌ヨ鏈�鏂扮殑绾㈠寘鏁版嵁 + hb = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hb.getId()); + // 鏌ヨ绾㈠寘鐩稿叧鑱旂殑璁㈠崟 + HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByHongBaoId(hb.getId()); + if (hongBaoOrder == null) { + LogHelper.error("杩斿埄澶辫触:" + hb.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; + + long currentTimeMillis = System.currentTimeMillis(); + if (hb.getState() != HongBao.STATE_SHIXIAO) { + // 璁剧疆涓哄凡杩斿埄 + // 澶勭悊涓荤孩鍖� + if (hb.getState() != HongBaoV2.STATE_SHIXIAO && hb.getState() != HongBaoV2.STATE_YILINGQU + && hb.getType() == HongBaoV2.TYPE_ZIGOU) { + // 濡傛灉绾㈠寘娌¤棰嗗彇 + HongBaoV2 updateHongBao = new HongBaoV2(); + updateHongBao.setId(hb.getId()); + updateHongBao.setState(HongBaoV2.STATE_YILINGQU); + updateHongBao.setGetTime(new Date(currentTimeMillis)); + hongBaoV2Mapper.updateByPrimaryKeySelective(updateHongBao); + userInfoMapper.addHongBaoByUid(hb.getUserInfo().getId(), hb.getMoney()); + + AccountDetails accountDetails = AccountDetailsFactory.create("+" + hb.getMoney(), + AccountDetailsFactory.FANLI, null, null, hb.getUserInfo()); + accountDetailsMapper.insertSelective(accountDetails); + + // 鎻掑叆鏂扮増璧勯噾鏄庣粏 + try { + UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createFanLi(hb.getUserInfo().getId(), + hongBaoOrder.getCommonOrder().getOrderNo(), hongBaoOrder.getCommonOrder().getSourceType(), + hb.getId(), hb.getMoney()); + userMoneyDetail.setId(accountDetails.getId()); + userMoneyDetailMapper.insert(userMoneyDetail); + } catch (UserMoneyDetailException e1) { + try { + LogHelper.errorDetailInfo(e1); + } catch (Exception e2) { + e2.printStackTrace(); + } + } + + // 娣诲姞璧勯噾鏄庣粏涓庣孩鍖呯殑鏄犲皠鍏崇郴 + accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hb.getId(), accountDetails.getId()); + + // 缁存潈鎵f锛�2018-08-05鍚庡紑濮嬪疄琛岋級 + if (hongBaoOrder.getCommonOrder().getSettleTime() != null && hongBaoOrder.getCommonOrder() + .getSettleTime().getTime() >= TimeUtil.convertToTimeTemp("2018-08-05", "yyyy-MM-dd")) { + taoBaoWeiQuanDrawBackService.doWeiQuanFanli(hongBaoOrder.getCommonOrder().getOrderNo()); + } + + // 绔欏唴淇�+鎺ㄩ�� + try { + userNotificationService.orderFanliRecieved(hb.getUserInfo().getId(), + hongBaoOrder.getCommonOrder().getOrderNo(), hb.getMoney()); } catch (Exception e) { } @@ -505,9 +672,9 @@ List<TaoBaoOrder> orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(order.getOrderId()); if (orderList != null && orderList.size() > 0 & !StringUtil.isNullOrEmpty(orderList.get(0).getSettlementTime())) - order.setJieSuanTime(orderList.get(0).getSettlementTime()); - if (TimeUtil.convertToTimeTemp(order.getJieSuanTime(), "yyyy-MM-dd HH:mm:ss") >= TimeUtil - .convertToTimeTemp("2018-08-05", "yyyy-MM-dd")) { + 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; } try { @@ -521,14 +688,10 @@ @Override public void fanliInvaiteAndShare() { // 鏌ュ嚭閭�璇疯禋涓庡垎浜禋璇ヨ繑鍒╃殑鐢ㄦ埛ID - List<Long> shareUids = pidOrderMapper.getUidCanBalanceList(); - List<Long> inviteUids = hongBaoMapper.selectUidCanBalanceHongBaoByChildHongBao(); + List<Long> inviteAndShareUids = hongBaoV2Mapper.listUidCanBanlanceShareAndInvite(1000); Set<Long> uidSets = new HashSet<>(); - if (shareUids != null) - for (Long uid : shareUids) - uidSets.add(uid); - if (inviteUids != null) - for (Long uid : inviteUids) + if (inviteAndShareUids != null) + for (Long uid : inviteAndShareUids) uidSets.add(uid); // 鏍规嵁鐢ㄦ埛ID Iterator<Long> its = uidSets.iterator(); @@ -543,106 +706,374 @@ } } + 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<HongBao> hongBaoList = hongBaoMapper.selectCanBalanceHongBaoByChildHongBaoAndUid(uid); - BigDecimal money = new BigDecimal(0); + 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> drawBackOrders = new HashSet<String>(); + for (HongBaoV2 hongBao : hongBaoList) { + hongBao = filterWeiQuanINGHongBao(hongBao); + if (hongBao == null) + continue; - for (HongBao hongBao : hongBaoList) { - hongBao = hongBaoMapper.selectByPrimaryKeyForUpdate(hongBao.getId()); - if (hongBao.getState() == HongBao.STATE_BUKELINGQU || hongBao.getState() == HongBao.STATE_KELINGQU) { - money = money.add(hongBao.getMoney()); - HongBao updateHongBao = new HongBao(); + 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(System.currentTimeMillis()); - updateHongBao.setState(HongBao.STATE_YILINGQU); - hongBaoMapper.updateByPrimaryKeySelective(updateHongBao); + updateHongBao.setGetTime(new Date()); + updateHongBao.setState(HongBaoV2.STATE_YILINGQU); + updateHongBao.setUpdateTime(new Date()); + hongBaoV2Mapper.updateByPrimaryKeySelective(updateHongBao); + // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� + hbIdList.add(hongBao.getId()); // 2018-08-05 杩囧悗鐨勮鍗曟墠澶勭悊缁存潈 - Date balanceTime = null; - if (hongBao.getParent() != null) - balanceTime = hongBao.getParent().getBalanceTime(); - else - balanceTime = hongBao.getBalanceTime(); + + HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByHongBaoId(hongBao.getParent().getId()); + + Date balanceTime = hongBaoOrder.getCommonOrder().getSettleTime(); if (balanceTime != null && balanceTime.getTime() >= TimeUtil.convertToTimeTemp("2018-08-05", "yyyy-MM-dd")) { - if (!StringUtil.isNullOrEmpty(hongBao.getOrderId())) - drawBackOrders.add(hongBao.getOrderId()); - else if (hongBao.getParent() != null && !StringUtil.isNullOrEmpty(hongBao.getParent().getOrderId())) - drawBackOrders.add(hongBao.getParent().getOrderId()); + if (!StringUtil.isNullOrEmpty(hongBaoOrder.getCommonOrder().getOrderNo())) + drawBackOrders.add(hongBaoOrder.getCommonOrder().getOrderNo()); } } } - // 鏌ヨUID鐨勫垎浜禋璁㈠崟 - List<PidOrder> pidOrderList = pidOrderMapper.getCanBalanceListByUid(uid); - for (PidOrder pidOrder : pidOrderList) { - HongBao hongBao = hongBaoMapper.selectByPrimaryKeyForUpdate(pidOrder.getHongBao().getId()); - if (hongBao.getState() == HongBao.STATE_BUKELINGQU || hongBao.getState() == HongBao.STATE_KELINGQU) { - money = money.add(hongBao.getMoney()); - HongBao updateHongBao = new HongBao(); - updateHongBao.setId(hongBao.getId()); - updateHongBao.setGetTime(System.currentTimeMillis()); - updateHongBao.setState(HongBao.STATE_YILINGQU); - hongBaoMapper.updateByPrimaryKeySelective(updateHongBao); - // 2018-08-05 杩囧悗鐨勮鍗曟墠澶勭悊缁存潈 - Date balanceTime = null; - if (hongBao.getParent() != null) - balanceTime = hongBao.getParent().getBalanceTime(); - else - balanceTime = hongBao.getBalanceTime(); - if (balanceTime != null - && balanceTime.getTime() >= TimeUtil.convertToTimeTemp("2018-08-05", "yyyy-MM-dd")) { - drawBackOrders.add(pidOrder.getOrderId()); - } - } - } + /** + * 澶勭悊涓�绾т簩绾у垎浜禋(灞炰簬閭�璇疯禋绫诲瀷) + */ - List<HongBao> totalHongBaoList = new ArrayList<>(); + List<HongBaoV2> totalHongBaoList = new ArrayList<>(); // 鏌ヨUID鐨勪簩绾ф垨鑰呬笁绾у垎浜禋璁㈠崟 // TODO 鏆傛椂鏌ヨ10000鏉℃暟鎹紝鍚庨潰鍐嶅仛鍒嗛〉 - List<HongBao> hbList = hongBaoMapper.selectCanBalanceHongBaoByTypeAndUid(HongBao.TYPE_SHARE_YIJI, uid, 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); - hbList = hongBaoMapper.selectCanBalanceHongBaoByTypeAndUid(HongBao.TYPE_SHARE_ERJI, uid, 10000); - if (hbList != null && hbList.size() > 0) - totalHongBaoList.addAll(hbList); - - for (HongBao hb : totalHongBaoList) { - if (hb.getState() == HongBao.STATE_BUKELINGQU || hb.getState() == HongBao.STATE_KELINGQU) { - money = money.add(hb.getMoney()); - HongBao updateHongBao = new HongBao(); + 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(System.currentTimeMillis()); - updateHongBao.setState(HongBao.STATE_YILINGQU); - hongBaoMapper.updateByPrimaryKeySelective(updateHongBao); - if (!StringUtil.isNullOrEmpty(hb.getOrderId())) - drawBackOrders.add(hb.getOrderId()); + 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()); + if (!StringUtil.isNullOrEmpty(hongBaoOrder.getCommonOrder().getOrderNo())) + drawBackOrders.add(hongBaoOrder.getCommonOrder().getOrderNo()); } } - if (money.compareTo(new BigDecimal(0)) > 0) { - userInfoMapper.addHongBaoByUid(uid, money); + // 閭�璇疯禋鍒拌处 + if (invitemoney.compareTo(new BigDecimal(0)) > 0) { + userInfoMapper.addHongBaoByUid(uid, invitemoney); // 娣诲姞璁板綍 - AccountDetails accountDetails = AccountDetailsFactory.create("+" + money, AccountDetailsFactory.TICHENG, - null, null, new UserInfo(uid)); + AccountDetails accountDetails = AccountDetailsFactory.create("+" + invitemoney, + AccountDetailsFactory.TICHENG, null, null, new UserInfo(uid)); accountDetailsMapper.insertSelective(accountDetails); + + // 娣诲姞鏂扮増璇︽儏璁板綍 + 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()); + userMoneyDetail.setId(accountDetails.getId()); + userMoneyDetailMapper.insert(userMoneyDetail); + } catch (UserMoneyDetailException e) { + try { + LogHelper.errorDetailInfo(e); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + + // 璁板綍杩斿埄绾㈠寘涓庤祫閲戣鎯呯殑瀵瑰簲鍏崇郴 + + // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� + accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hbIdList, accountDetails.getId()); // 鍙戦�佹帹閫� try { // 鎻愭垚鍒拌处娑堟伅閫氱煡 - userNotificationService.tiChengRecieved(uid, money); + userNotificationService.tiChengInviteRecieved(uid, invitemoney); + } catch (Exception e) { + e.printStackTrace(); + } + for (String orderId : drawBackOrders) + taoBaoWeiQuanDrawBackService.doWeiQuanInvite(orderId); + } + + hbIdList.clear(); + drawBackOrders.clear(); + + /** + * 澶勭悊鍒嗕韩璧� + */ + BigDecimal sharemoney = new BigDecimal(0); + // 鏌ヨUID鐨勫垎浜禋璁㈠崟 + types.clear(); + types.add(HongBaoV2.TYPE_SHARE_GOODS); + List<HongBaoV2> hongBaoShareList = hongBaoV2Mapper.listCanBalanceHongBaoByTypeAndUid(types, uid, 10000); + for (HongBaoV2 hongBao : hongBaoShareList) { + hongBao = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hongBao.getId()); + hongBao = filterWeiQuanINGHongBao(hongBao); + if (hongBao == null) + continue; + if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU || hongBao.getState() == HongBaoV2.STATE_KELINGQU) { + sharemoney = sharemoney.add(hongBao.getMoney()); + HongBaoV2 updateHongBao = new HongBaoV2(); + updateHongBao.setId(hongBao.getId()); + updateHongBao.setGetTime(new Date()); + updateHongBao.setState(HongBao.STATE_YILINGQU); + 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(); + if (balanceTime != null + && balanceTime.getTime() >= TimeUtil.convertToTimeTemp("2018-08-05", "yyyy-MM-dd")) { + drawBackOrders.add(hongBaoOrder.getCommonOrder().getOrderNo()); + } + } + } + + /** + * 鍒嗕韩璧氬埌璐� + */ + + if (sharemoney.compareTo(new BigDecimal(0)) > 0) { + userInfoMapper.addHongBaoByUid(uid, sharemoney); + // 娣诲姞璁板綍 + AccountDetails accountDetails = AccountDetailsFactory.create("+" + sharemoney, + AccountDetailsFactory.SHARE_GOODS, null, null, new UserInfo(uid)); + accountDetailsMapper.insertSelective(accountDetails); + + // 娣诲姞鏂扮増璇︽儏璁板綍 + try { + // 璁$畻鏈湀鐨勬湁鏁堣鍗曪紝澶辨晥璁㈠崟锛岀淮鏉冭鍗� + 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()); + userMoneyDetail.setId(accountDetails.getId()); + userMoneyDetailMapper.insert(userMoneyDetail); + } catch (UserMoneyDetailException e) { + try { + LogHelper.errorDetailInfo(e); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + // 璁板綍杩斿埄绾㈠寘涓庤祫閲戣鎯呯殑瀵瑰簲鍏崇郴 + + // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� + accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hbIdList, accountDetails.getId()); + + // 鍙戦�佹帹閫� + try { + // 鎻愭垚鍒拌处娑堟伅閫氱煡 + userNotificationService.tiChengShareRecieved(uid, sharemoney); } catch (Exception e) { e.printStackTrace(); } for (String orderId : drawBackOrders) taoBaoWeiQuanDrawBackService.doWeiQuanShare(orderId); } + + } + + @Resource + private CommonOrderService commonOrderService; + + @Resource + private HongBaoV2Service hongBaoV2Service; + + @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + @Override + public void processShopingFanliOrderNew(String orderId, List<TaoBaoOrder> orderList) + throws HongBaoException, OrderItemException { + List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService.getConfigByTypeCache(PidUser.TYPE_FANLI_ANDROID); + + if (orderList != null && orderList.size() > 0) { + String pid = String.format("mm_%s_%s_%s", configList.get(0).getAccountId(), + orderList.get(0).getSourceMediaId(), orderList.get(0).getAdPositionId()); + + Order oldOrder = orderMapper.selectOrderByOrderId(orderId); + // 鍘熸潵涓嶅瓨鍦ㄨ鍗� + Long uid = null; + if (oldOrder == null) { + PidUser pidUser = 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 { + 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, null, "璁㈠崟鍙�:" + 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 = pidUserMapper.selectByPid(pid); + if (pidUser != null) + uid = pidUser.getUid(); + + // 灏氭湭鎵惧埌鍜孭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(); + } + } + } } -- Gitblit v1.8.0