From 4cb15e222cd7d099d533ccbeb7f9a8cd99bf180c Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 25 十二月 2018 16:35:18 +0800 Subject: [PATCH] 替换原来老的资金详情 --- fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java | 257 +++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 216 insertions(+), 41 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..2ab204d 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 @@ -23,9 +23,11 @@ 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.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; @@ -33,6 +35,7 @@ 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.taobao.PidOrder; import com.yeshi.fanli.entity.taobao.PidUser; import com.yeshi.fanli.entity.taobao.TaoBaoOrder; @@ -43,8 +46,12 @@ 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.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.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,6 +67,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.factory.UserMoneyDetailFactory; import com.yeshi.fanli.util.taobao.TaoBaoOrderUtil; @Service @@ -128,6 +136,21 @@ @Resource private RedisManager redisManager; + @Resource + private LostOrderService lostOrderService; + + @Resource + private TaoBaoWeiQuanOrderMapper taoBaoWeiQuanOrderMapper; + + @Resource + private HongBaoManageService hongBaoManageService; + + @Resource + private AccountDetailsHongBaoMapService accountDetailsHongBaoMapService; + + @Resource + private UserMoneyDetailMapper userMoneyDetailMapper; + @Override public void processOrder(Map<String, List<TaoBaoOrder>> orders) { List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService.getConfigByTypeCache(PidUser.TYPE_FANLI_ANDROID); @@ -163,6 +186,7 @@ /** * 鍒╃敤redis鐨勫師瀛愭�у皢璁㈠崟鍙烽攣浣忥紝涓嶈鍏朵粬澶勭悊 + * * @param orderId */ private void redisLockOrder(String orderId) { @@ -172,6 +196,7 @@ /** * 璁㈠崟瑙i攣 + * * @param orderId */ private void redisUnlockOrder(String orderId) { @@ -181,6 +206,7 @@ /** * 璁㈠崟鏄惁琚攣浣忎簡 + * * @param orderId * @return */ @@ -202,12 +228,16 @@ try { String orderId = its.next(); // 澶勭悊绾㈠寘涓庡瓙绾㈠寘 -// if (isRedisLockOrder(orderId)) -// continue; -// redisLockOrder(orderId); + // if (isRedisLockOrder(orderId)) + // continue; + // redisLockOrder(orderId); processShopingFanliOrder(orderId, orders.get(orderId)); -// redisUnlockOrder(orderId); + // redisUnlockOrder(orderId); // 鍑洪敊浜嗗氨涓嶅鐞嗚璁㈠崟浜嗭紝闇�瑕佸畾鏈熸鏌� + + // 鏇存敼涓㈠け璁㈠崟鐨勭姸鎬� + lostOrderService.processSuceess(orderId); + } catch (HongBaoException e1) { e1.printStackTrace(); } catch (OrderItemException e2) { @@ -383,8 +413,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 +432,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 +473,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) { // 璁剧疆涓哄凡杩斿埄 @@ -470,6 +515,23 @@ AccountDetails accountDetails = AccountDetailsFactory.create("+" + hb.getMoney(), AccountDetailsFactory.FANLI, orderItem, null, hb.getUserInfo()); accountDetailsMapper.insertSelective(accountDetails); + + // 鎻掑叆鏂扮増璧勯噾鏄庣粏 + try { + UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createFanLi(hb.getUserInfo().getId(), + hb.getOrderId(), 1,hb.getId(), hb.getMoney()); + userMoneyDetail.setId(accountDetails.getId()); + userMoneyDetailMapper.insert(userMoneyDetail); + } catch (UserMoneyDetailException e1) { + try { + LogHelper.errorDetailInfo(e1); + } catch (Exception e2) { + e2.printStackTrace(); + } + } + + // 娣诲姞璧勯噾鏄庣粏涓庣孩鍖呯殑鏄犲皠鍏崇郴 + accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hb.getId(), accountDetails.getId()); // 缁存潈鎵f锛�2018-08-05鍚庡紑濮嬪疄琛岋級 if (hb.getBalanceTime() != null @@ -505,9 +567,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 { @@ -543,25 +605,49 @@ } } + private HongBao filterWeiQuanINGHongBao(HongBao hongBao) { + + List<TaoBaoWeiQuanOrder> taoBaoWeiQuanList = taoBaoWeiQuanOrderMapper + .selectListByOrderIdAndState(hongBao.getOrderId(), "缁存潈鍒涘缓"); + + List<TaoBaoWeiQuanOrder> taoBaoWeiQuanList1 = taoBaoWeiQuanOrderMapper + .selectListByOrderIdAndState(hongBao.getOrderId(), "绛夊緟澶勭悊"); + 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<Long> hbIdList = new ArrayList<>(); + + BigDecimal invitemoney = new BigDecimal(0); // 闇�瑕佸垽鏂��娆剧殑璁㈠崟鍙� Set<String> drawBackOrders = new HashSet<String>(); - for (HongBao hongBao : hongBaoList) { + hongBao = filterWeiQuanINGHongBao(hongBao); + if (hongBao == null) + continue; + hongBao = hongBaoMapper.selectByPrimaryKeyForUpdate(hongBao.getId()); if (hongBao.getState() == HongBao.STATE_BUKELINGQU || hongBao.getState() == HongBao.STATE_KELINGQU) { - money = money.add(hongBao.getMoney()); + invitemoney = invitemoney.add(hongBao.getMoney()); HongBao updateHongBao = new HongBao(); updateHongBao.setId(hongBao.getId()); updateHongBao.setGetTime(System.currentTimeMillis()); updateHongBao.setState(HongBao.STATE_YILINGQU); hongBaoMapper.updateByPrimaryKeySelective(updateHongBao); + // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� + hbIdList.add(hongBao.getId()); // 2018-08-05 杩囧悗鐨勮鍗曟墠澶勭悊缁存潈 Date balanceTime = null; if (hongBao.getParent() != null) @@ -577,18 +663,106 @@ } } } + + + + /** + * 澶勭悊涓�绾т簩绾у垎浜禋(灞炰簬閭�璇疯禋绫诲瀷) + */ + List<HongBao> totalHongBaoList = new ArrayList<>(); + // 鏌ヨUID鐨勪簩绾ф垨鑰呬笁绾у垎浜禋璁㈠崟 + // TODO 鏆傛椂鏌ヨ10000鏉℃暟鎹紝鍚庨潰鍐嶅仛鍒嗛〉 + List<HongBao> hbList = hongBaoMapper.selectCanBalanceHongBaoByTypeAndUid(HongBao.TYPE_SHARE_YIJI, 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) { + hb = filterWeiQuanINGHongBao(hb); + if (hb == null) + continue; + invitemoney = invitemoney.add(hb.getMoney()); + HongBao updateHongBao = new HongBao(); + updateHongBao.setId(hb.getId()); + updateHongBao.setGetTime(System.currentTimeMillis()); + updateHongBao.setState(HongBao.STATE_YILINGQU); + hongBaoMapper.updateByPrimaryKeySelective(updateHongBao); + // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� + hbIdList.add(hb.getId()); + if (!StringUtil.isNullOrEmpty(hb.getOrderId())) + drawBackOrders.add(hb.getOrderId()); + } + } + + + + // 閭�璇疯禋鍒拌处 + if (invitemoney.compareTo(new BigDecimal(0)) > 0) { + userInfoMapper.addHongBaoByUid(uid, invitemoney); + // 娣诲姞璁板綍 + AccountDetails accountDetails = AccountDetailsFactory.create("+" + invitemoney, + AccountDetailsFactory.TICHENG, null, null, new UserInfo(uid)); + accountDetailsMapper.insertSelective(accountDetails); + + // 娣诲姞鏂扮増璇︽儏璁板綍 + try { + UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createInvite(uid, 0, 0, 0, invitemoney, + new Date()); + userMoneyDetail.setId(accountDetails.getId()); + userMoneyDetailMapper.insert(userMoneyDetail); + } catch (UserMoneyDetailException e) { + try { + LogHelper.errorDetailInfo(e); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + + // 璁板綍杩斿埄绾㈠寘涓庤祫閲戣鎯呯殑瀵瑰簲鍏崇郴 + + // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� + accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hbIdList, accountDetails.getId()); + + // 鍙戦�佹帹閫� + try { + // 鎻愭垚鍒拌处娑堟伅閫氱煡 + userNotificationService.tiChengInviteRecieved(uid, invitemoney); + } catch (Exception e) { + e.printStackTrace(); + } + for (String orderId : drawBackOrders) + taoBaoWeiQuanDrawBackService.doWeiQuanInvite(orderId); + } + + hbIdList.clear(); + drawBackOrders.clear(); + + /** + * 澶勭悊鍒嗕韩璧� + */ + BigDecimal sharemoney = new BigDecimal(0); // 鏌ヨUID鐨勫垎浜禋璁㈠崟 List<PidOrder> pidOrderList = pidOrderMapper.getCanBalanceListByUid(uid); for (PidOrder pidOrder : pidOrderList) { HongBao hongBao = hongBaoMapper.selectByPrimaryKeyForUpdate(pidOrder.getHongBao().getId()); + hongBao = filterWeiQuanINGHongBao(hongBao); + if (hongBao == null) + continue; if (hongBao.getState() == HongBao.STATE_BUKELINGQU || hongBao.getState() == HongBao.STATE_KELINGQU) { - money = money.add(hongBao.getMoney()); + sharemoney = sharemoney.add(hongBao.getMoney()); HongBao updateHongBao = new HongBao(); updateHongBao.setId(hongBao.getId()); updateHongBao.setGetTime(System.currentTimeMillis()); updateHongBao.setState(HongBao.STATE_YILINGQU); hongBaoMapper.updateByPrimaryKeySelective(updateHongBao); + // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� + hbIdList.add(hongBao.getId()); // 2018-08-05 杩囧悗鐨勮鍗曟墠澶勭悊缁存潈 Date balanceTime = null; if (hongBao.getParent() != null) @@ -602,47 +776,48 @@ } } - List<HongBao> totalHongBaoList = new ArrayList<>(); - // 鏌ヨUID鐨勪簩绾ф垨鑰呬笁绾у垎浜禋璁㈠崟 - // TODO 鏆傛椂鏌ヨ10000鏉℃暟鎹紝鍚庨潰鍐嶅仛鍒嗛〉 - List<HongBao> hbList = hongBaoMapper.selectCanBalanceHongBaoByTypeAndUid(HongBao.TYPE_SHARE_YIJI, 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(); - 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()); - } - } - - if (money.compareTo(new BigDecimal(0)) > 0) { - userInfoMapper.addHongBaoByUid(uid, money); + if (sharemoney.compareTo(new BigDecimal(0)) > 0) { + userInfoMapper.addHongBaoByUid(uid, sharemoney); // 娣诲姞璁板綍 - AccountDetails accountDetails = AccountDetailsFactory.create("+" + money, AccountDetailsFactory.TICHENG, - null, null, new UserInfo(uid)); + AccountDetails accountDetails = AccountDetailsFactory.create("+" + sharemoney, + AccountDetailsFactory.SHARE_GOODS, null, null, new UserInfo(uid)); accountDetailsMapper.insertSelective(accountDetails); + + // 娣诲姞鏂扮増璇︽儏璁板綍 + try { + UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createShare(uid, 0, 0, 0, sharemoney, + new Date()); + userMoneyDetail.setId(accountDetails.getId()); + userMoneyDetailMapper.insert(userMoneyDetail); + } catch (UserMoneyDetailException e) { + try { + LogHelper.errorDetailInfo(e); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + // 璁板綍杩斿埄绾㈠寘涓庤祫閲戣鎯呯殑瀵瑰簲鍏崇郴 + + // 娣诲姞鍒扮孩鍖呰繑鍒╄褰曢泦鍚� + accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hbIdList, accountDetails.getId()); // 鍙戦�佹帹閫� try { // 鎻愭垚鍒拌处娑堟伅閫氱煡 - userNotificationService.tiChengRecieved(uid, money); + userNotificationService.tiChengShareRecieved(uid, sharemoney); } catch (Exception e) { e.printStackTrace(); } for (String orderId : drawBackOrders) taoBaoWeiQuanDrawBackService.doWeiQuanShare(orderId); } + } } -- Gitblit v1.8.0