From 28cf328a098334b51a3e9d2d56f983fb8c862211 Mon Sep 17 00:00:00 2001 From: yujian <yujian@163.com> Date: 星期六, 23 五月 2020 09:54:38 +0800 Subject: [PATCH] 足迹、收藏订单兼容新需求 --- fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserOrderControllerV2.java | 694 +++++++++++++++++++++++++++++---------------------------- 1 files changed, 355 insertions(+), 339 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserOrderControllerV2.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserOrderControllerV2.java index 03cbab1..1318dfb 100644 --- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserOrderControllerV2.java +++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserOrderControllerV2.java @@ -1,13 +1,16 @@ package com.yeshi.fanli.controller.client.v2; import java.io.PrintWriter; +import java.lang.reflect.Type; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import javax.annotation.Resource; @@ -18,9 +21,17 @@ import org.yeshi.utils.JsonUtil; import org.yeshi.utils.NumberUtil; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import com.yeshi.fanli.dto.order.UserTeamLevel; import com.yeshi.fanli.entity.accept.AcceptData; import com.yeshi.fanli.entity.bus.user.HongBaoV2; -import com.yeshi.fanli.entity.bus.user.ThreeSale; +import com.yeshi.fanli.entity.bus.user.PreviewInfo.PreviewEnum; +import com.yeshi.fanli.entity.bus.user.ThreeSaleDetail; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.entity.bus.user.UserSystemCouponRecord; import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum; @@ -28,7 +39,9 @@ import com.yeshi.fanli.entity.order.CommonOrderGoods; import com.yeshi.fanli.entity.order.ESOrder; import com.yeshi.fanli.entity.order.HongBaoOrder; -import com.yeshi.fanli.entity.order.InviteOrderSubsidy; +import com.yeshi.fanli.entity.order.UserOrderWeiQuanRecord; +import com.yeshi.fanli.entity.order.dividents.TeamDividentsSourceOrder; +import com.yeshi.fanli.entity.order.dividents.TeamDividentsSourceOrderUserMap; import com.yeshi.fanli.entity.system.ConfigKeyEnum; import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum; import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder; @@ -41,13 +54,19 @@ import com.yeshi.fanli.service.inter.order.CommonOrderService; import com.yeshi.fanli.service.inter.order.ESOrderService; import com.yeshi.fanli.service.inter.order.HongBaoOrderService; -import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyService; +import com.yeshi.fanli.service.inter.order.HongBaoV2Service; +import com.yeshi.fanli.service.inter.order.OrderHongBaoMapService; import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService; +import com.yeshi.fanli.service.inter.order.UserOrderWeiQuanRecordService; +import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsSourceOrderService; +import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsSourceOrderUserMapService; import com.yeshi.fanli.service.inter.order.tb.TaoBaoWeiQuanOrderService; +import com.yeshi.fanli.service.inter.user.PreviewInfoService; import com.yeshi.fanli.service.inter.user.UserCustomSettingsService; import com.yeshi.fanli.service.inter.user.UserInfoExtraService; import com.yeshi.fanli.service.inter.user.UserInfoService; import com.yeshi.fanli.service.inter.user.UserSystemCouponRecordService; +import com.yeshi.fanli.service.inter.user.invite.ThreeSaleDetailService; import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce; import com.yeshi.fanli.service.inter.user.invite.UserInviteService; import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService; @@ -55,16 +74,17 @@ import com.yeshi.fanli.util.MoneyBigDecimalUtil; import com.yeshi.fanli.util.RedisManager; import com.yeshi.fanli.util.StringUtil; +import com.yeshi.fanli.util.TimeUtil; import com.yeshi.fanli.util.VersionUtil; import com.yeshi.fanli.util.account.UserUtil; import com.yeshi.fanli.util.user.UserLevelUtil; import com.yeshi.fanli.vo.order.CommonOrderVO; -import com.yeshi.fanli.vo.order.CurrentBonusVO; import com.yeshi.fanli.vo.order.GoodsRebateVO; import com.yeshi.fanli.vo.order.HongBaoCountVO; import com.yeshi.fanli.vo.order.OrderCountVO; import com.yeshi.fanli.vo.order.OrderRebateVO; -import com.yeshi.fanli.vo.order.TeamBonusVO; +import com.yeshi.fanli.vo.order.TeamOrderVO; +import com.yeshi.fanli.vo.user.MineInfoVO; import com.yeshi.fanli.vo.user.UserInfoExtraVO; import com.yeshi.fanli.vo.user.UserSettingsVO; @@ -102,8 +122,8 @@ private UserVIPInfoService userVIPInfoService; @Resource - private InviteOrderSubsidyService inviteOrderSubsidyServiceV2; - + private HongBaoV2Service hongBaoV2Service; + @Resource private HongBaoOrderService hongBaoOrderService; @@ -116,6 +136,7 @@ @Resource private TaoBaoWeiQuanOrderService taoBaoWeiQuanOrderService; + @Resource private JumpDetailV2Service jumpDetailV2Service; @@ -127,6 +148,26 @@ @Resource private ThreeSaleSerivce threeSaleSerivce; + + @Resource + private OrderHongBaoMapService orderHongBaoMapService; + + @Resource + private PreviewInfoService previewInfoService; + + @Resource + private TeamDividentsSourceOrderService teamDividentsSourceOrderService; + + @Resource + private TeamDividentsSourceOrderUserMapService teamDividentsSourceOrderUserMapService; + + @Resource + private UserOrderWeiQuanRecordService userOrderWeiQuanRecordService; + + @Resource + private ThreeSaleDetailService threeSaleDetailService; + + /** * 璁㈠崟鍒楄〃 @@ -245,17 +286,22 @@ } try { + boolean notBackSuVip = false; + if (!VersionUtil.greaterThan_2_1_2(acceptData.getPlatform(), acceptData.getVersion())) { + notBackSuVip = true; + } + // 绛涢�夌粨鏋滈《閮ㄧ粺璁� String validMoney = "0.00"; String invalidMoney = "0.00"; if (page == 1) { BigDecimal predictMoney = hongBaoV2CountService.getRewardMoneyByToSearch(uid, dateType, orderType, 1, - orderNo, state, startTime, endTime, listSource); + orderNo, state, startTime, endTime, listSource, notBackSuVip); if (predictMoney != null) validMoney = predictMoney.setScale(2, BigDecimal.ROUND_DOWN).toString(); BigDecimal postSaleMoney = hongBaoV2CountService.getRewardMoneyByToSearch(uid, dateType, orderType, 2, - orderNo, state, startTime, endTime, listSource); + orderNo, state, startTime, endTime, listSource, notBackSuVip); if (postSaleMoney != null) invalidMoney = postSaleMoney.setScale(2, BigDecimal.ROUND_DOWN).toString(); @@ -273,9 +319,10 @@ List<CommonOrderVO> list = null; if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) { list = commonOrderService.getOrderList(acceptData, page, uid, state, orderType, - orderState, orderNo, startTime, endTime, dateType, listSource); + orderState, orderNo, startTime, endTime, dateType, listSource, notBackSuVip); + count = commonOrderService.countOrderList(uid, state, orderType, orderState, orderNo, - startTime, endTime, dateType, listSource); + startTime, endTime, dateType, listSource, notBackSuVip); } else { list = commonOrderService.getOrderByUid(acceptData, page, uid, state, orderType, orderState, orderNo, startTime, endTime, dateType, listSource); @@ -295,7 +342,6 @@ data.put("count", count); data.put("result_list", JsonUtil.getApiCommonGson().toJson(list)); data.put("helpUrl", configService.get(ConfigKeyEnum.orderListHelp.getKey())); - data.put("bonusLink", configService.get(ConfigKeyEnum.orderBonusLink.getKey())); data.put("validMoney", "楼 " + validMoney); data.put("invalidMoney", "楼 " + invalidMoney); data.put("findOrderHelpUrl", orderFindUrl); @@ -451,201 +497,37 @@ show = hongBaoV2CountService.getHongBaoCount(uid, null) > 0; } - BigDecimal selfMoney = hongBaoV2CountService.getRewardMoneyToCount(uid, dateType, 1, null); - BigDecimal shareMoney = hongBaoV2CountService.getRewardMoneyToCount(uid, dateType, 2, null); + BigDecimal selfMoney = null; + BigDecimal shareMoney = null; + BigDecimal teamMoney = null; + // VIP棰勮淇℃伅 + if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) { + String redisContent = previewInfoService.getRedisContent(uid, PreviewEnum.mineInfo); + if (!StringUtil.isNullOrEmpty(redisContent)) { + MineInfoVO vo = new Gson().fromJson(redisContent, MineInfoVO.class); + if (vo != null) { + if (!StringUtil.isNullOrEmpty(vo.getSelfRebate())) + selfMoney = new BigDecimal(vo.getSelfRebate()); + if (!StringUtil.isNullOrEmpty(vo.getShareBonus())) + shareMoney = new BigDecimal(vo.getShareBonus()); + if (!StringUtil.isNullOrEmpty(vo.getTeamBonus())) + teamMoney = new BigDecimal(vo.getTeamBonus()); + } + } + } + + if (selfMoney == null) { + selfMoney = hongBaoV2CountService.getRewardMoneyToCount(uid, dateType, 1, null); + shareMoney = hongBaoV2CountService.getRewardMoneyToCount(uid, dateType, 2, null); + teamMoney = hongBaoV2CountService.getRewardMoneyToCount(uid, dateType, 3, null); + } + JSONObject data = new JSONObject(); data.put("show", show); data.put("selfMoney", selfMoney.setScale(2, BigDecimal.ROUND_DOWN).toString()); data.put("shareMoney", shareMoney.setScale(2, BigDecimal.ROUND_DOWN).toString()); - - - BigDecimal teamMoney = new BigDecimal(0); - if (!VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) { - teamMoney = hongBaoV2CountService.getRewardMoneyToCount(uid, dateType, 3, null); - } else { - BigDecimal bonus = null; - BigDecimal subsidy = null; - BigDecimal dividend = null; // TODO 鍒嗙孩缁熻 - if (dateType == 4) { // 宸插埌璐� - dividend = new BigDecimal(0); - bonus = hongBaoV2CountService.geBonusByuid(uid, dateType, 3, 2); - subsidy = inviteOrderSubsidyServiceV2.sumMoneyByUidAndDateAndState(uid,dateType,null,3); - } else { // 鏈け鏁� - bonus = hongBaoV2CountService.geBonusByuid(uid, dateType, 3, 4); - subsidy = inviteOrderSubsidyServiceV2.sumValidMoneyByUidAndDate(uid,dateType,null); - } - - dividend = new BigDecimal(0); - // 鎬诲洟闃熷鍔� - teamMoney = bonus.add(subsidy).add(dividend); - - JSONObject paramsFanli = new JSONObject(); - paramsFanli.put("type", "1"); - data.put("paramsFanli", paramsFanli); - data.put("jumpFanli", jumpDetailV2Service.getByTypeCache("fanli_share_statistics", - Constant.getPlatformCode(acceptData.getPlatform()), Integer.parseInt(acceptData.getVersion()))); - - JSONObject paramsShare = new JSONObject(); - paramsShare.put("type", "2"); - data.put("paramsShare", paramsShare); - data.put("jumpShare", jumpDetailV2Service.getByTypeCache("fanli_share_statistics", - Constant.getPlatformCode(acceptData.getPlatform()), Integer.parseInt(acceptData.getVersion()))); - - JSONObject paramsTeam = new JSONObject(); - paramsTeam.put("type", "3"); - data.put("paramsTeam", paramsTeam); - data.put("jumpTeam", jumpDetailV2Service.getByTypeCache("team_statistics", - Constant.getPlatformCode(acceptData.getPlatform()), Integer.parseInt(acceptData.getVersion()))); - } data.put("inviteMoney", teamMoney.setScale(2, BigDecimal.ROUND_DOWN).toString()); - out.print(JsonUtil.loadTrueResult(data)); - } - - /** - * 鍥㈤槦鏀剁泭缁熻 缁熻宸插埌璐︽湭鍒拌处 锛� 绱鍙粺璁″凡鍒拌处 - * @param acceptData - * @param uid - * @param type 1-鍥㈤槦琛ヨ创 2-鍥㈤槦濂栧姳 3-瀵煎笀娲ヨ创 - */ - @RequestMapping(value = "getTeamBonus", method = RequestMethod.POST) - public void getTeamBonus(AcceptData acceptData, Long uid, Integer type, PrintWriter out) { - if (uid == null) { - out.print(JsonUtil.loadFalseResult(1, "鐢ㄦ埛鏈櫥褰�")); - return; - } - - UserInfo user = userInfoService.selectByPKey(uid); - if (user == null) { - out.print(JsonUtil.loadFalseResult(1, "鐢ㄦ埛涓嶅瓨鍦�")); - return; - } - - if (type == null || type < 1 || type > 3) { - type = 1; - } - - if (type == 1) { - // 琛ヨ创 - sumTeamSubsidy(out, user); - } else if (type == 2) { - // 濂栧姳 - //TODO 鍥㈤槦濂栧姳宸茬粡鍒犻櫎 - } else { - // 瀵煎笀娲ヨ创 - JSONObject data = new JSONObject(); - data.put("exist", false); - data.put("link", configService.get(ConfigKeyEnum.tutorSubsidyLink.getKey())); - out.print(JsonUtil.loadTrueResult(data)); - } - } - - /** - * 缁熻琛ヨ创 - * @param out - * @param user - */ - private void sumTeamSubsidy(PrintWriter out, UserInfo user) { - Long uid = user.getId(); - // 鏄惁VIP - boolean vip = userVIPInfoService.isVIP(uid); - - JSONObject data = new JSONObject(); - data.put("link", configService.get(ConfigKeyEnum.orderTeamSubsidyLink.getKey())); - if (!vip) { - data.put("exist", false); - out.print(JsonUtil.loadTrueResult(data)); - return; - } - - data.put("exist", true); - data.put("portrait", user.getPortrait()); - - // 浠婃棩缁熻 - BigDecimal todayDirect = inviteOrderSubsidyServiceV2.sumValidMoneyByUidAndDate(uid, 1, - InviteOrderSubsidy.LEVEL_ONE); - if (todayDirect == null) { - todayDirect = new BigDecimal(0); - } - BigDecimal todayIndirect = inviteOrderSubsidyServiceV2.sumValidMoneyByUidAndDate(uid, 1, - InviteOrderSubsidy.LEVEL_TWO); - if (todayIndirect == null) { - todayIndirect = new BigDecimal(0); - } - TeamBonusVO today = new TeamBonusVO(); - today.setDirect(todayDirect.setScale(2, BigDecimal.ROUND_DOWN).toString()); - today.setIndirect(todayIndirect.setScale(2, BigDecimal.ROUND_DOWN).toString()); - today.setTotal( - MoneyBigDecimalUtil.add(todayDirect, todayIndirect).setScale(2, BigDecimal.ROUND_DOWN).toString()); - - // 鏄ㄦ棩缁熻 - BigDecimal yesterdayDirect = inviteOrderSubsidyServiceV2.sumValidMoneyByUidAndDate(uid, 2, - InviteOrderSubsidy.LEVEL_ONE); - if (yesterdayDirect == null) { - yesterdayDirect = new BigDecimal(0); - } - BigDecimal yesterdayIndirect = inviteOrderSubsidyServiceV2.sumValidMoneyByUidAndDate(uid, 2, - InviteOrderSubsidy.LEVEL_TWO); - if (yesterdayIndirect == null) { - yesterdayIndirect = new BigDecimal(0); - } - TeamBonusVO yesterday = new TeamBonusVO(); - yesterday.setDirect(yesterdayDirect.setScale(2, BigDecimal.ROUND_DOWN).toString()); - yesterday.setIndirect(yesterdayIndirect.setScale(2, BigDecimal.ROUND_DOWN).toString()); - yesterday.setTotal(MoneyBigDecimalUtil.add(yesterdayDirect, yesterdayIndirect) - .setScale(2, BigDecimal.ROUND_DOWN).toString()); - - // 鏈湀缁熻 - BigDecimal thisMonthDirect = inviteOrderSubsidyServiceV2.sumValidMoneyByUidAndDate(uid, 3, - InviteOrderSubsidy.LEVEL_ONE); - if (thisMonthDirect == null) { - thisMonthDirect = new BigDecimal(0); - } - BigDecimal thisMonthIndirect = inviteOrderSubsidyServiceV2.sumValidMoneyByUidAndDate(uid, 3, - InviteOrderSubsidy.LEVEL_TWO); - if (thisMonthIndirect == null) { - thisMonthIndirect = new BigDecimal(0); - } - TeamBonusVO thisMonth = new TeamBonusVO(); - thisMonth.setDirect(thisMonthDirect.setScale(2, BigDecimal.ROUND_DOWN).toString()); - thisMonth.setIndirect(thisMonthIndirect.setScale(2, BigDecimal.ROUND_DOWN).toString()); - thisMonth.setTotal(MoneyBigDecimalUtil.add(thisMonthDirect, thisMonthIndirect) - .setScale(2, BigDecimal.ROUND_DOWN).toString()); - - // 鏈湀缁熻 - BigDecimal lastMonthDirect = inviteOrderSubsidyServiceV2.sumValidMoneyByUidAndDate(uid, 4, - InviteOrderSubsidy.LEVEL_ONE); - if (lastMonthDirect == null) { - lastMonthDirect = new BigDecimal(0); - } - BigDecimal lastMonthIndirect = inviteOrderSubsidyServiceV2.sumValidMoneyByUidAndDate(uid, 4, - InviteOrderSubsidy.LEVEL_TWO); - if (lastMonthIndirect == null) { - lastMonthIndirect = new BigDecimal(0); - } - TeamBonusVO lastMonth = new TeamBonusVO(); - lastMonth.setDirect(lastMonthDirect.setScale(2, BigDecimal.ROUND_DOWN).toString()); - lastMonth.setIndirect(lastMonthIndirect.setScale(2, BigDecimal.ROUND_DOWN).toString()); - lastMonth.setTotal(MoneyBigDecimalUtil.add(lastMonthDirect, lastMonthIndirect) - .setScale(2, BigDecimal.ROUND_DOWN).toString()); - - BigDecimal direct = inviteOrderSubsidyServiceV2.sumRecievedMoneyByUid(uid, InviteOrderSubsidy.LEVEL_ONE); - if (direct == null) { - direct = new BigDecimal(0); - } - BigDecimal indirect = inviteOrderSubsidyServiceV2.sumRecievedMoneyByUid(uid, InviteOrderSubsidy.LEVEL_TWO); - if (indirect == null) { - indirect = new BigDecimal(0); - } - BigDecimal total = MoneyBigDecimalUtil.add(direct, indirect); - - data.put("today", today); - data.put("yesterday", yesterday); - data.put("thisMonth", thisMonth); - data.put("lastMonth", lastMonth); - data.put("total", total.setScale(2, BigDecimal.ROUND_DOWN).toString()); - data.put("direct", direct.setScale(2, BigDecimal.ROUND_DOWN).toString()); - data.put("indirect", indirect.setScale(2, BigDecimal.ROUND_DOWN).toString()); out.print(JsonUtil.loadTrueResult(data)); } @@ -727,7 +609,7 @@ BigDecimal weiQuanMoney = commonOrderService.getWeiQuanMoney(listWQ, sourceType, uid); orderRebateVO.setWq(true); - orderRebateVO.setWqMoney("-楼"+ weiQuanMoney.setScale(2, BigDecimal.ROUND_DOWN)); + orderRebateVO.setWqMoney("楼"+ weiQuanMoney.setScale(2, BigDecimal.ROUND_DOWN)); if (hongBao.compareTo(weiQuanMoney) > 0) { orderRebateVO.setWqDesc("閮ㄥ垎鍞悗閫�鍥�"); } else { @@ -737,15 +619,22 @@ hongBao = MoneyBigDecimalUtil.sub(hongBao, weiQuanMoney); } } - orderRebateVO.setFanLiDesc(predictDesc + typeName); - orderRebateVO.setFanLi("楼" + hongBao.setScale(2)); + // 绾㈠寘鑾峰緱鑰� HongBaoV2 hongBaoV2 = hoList.get(0).getHongBaoV2(); UserLevelEnum userLevel = UserLevelUtil.getByOrderRank(hongBaoV2.getUrank()); if (userLevel == null) userLevel = UserLevelEnum.daRen; UserLevelEnum upperLevel = UserLevelEnum.superVIP; - + + // 璁㈠崟璐拱鑰� + CommonOrder commonOrder1 = hoList.get(0).getCommonOrder(); + Date downTime = commonOrder1.getThirdCreateTime(); + UserLevelEnum buyer = UserLevelUtil.getByOrderRank(commonOrder1.getUrank()); + if (buyer == null) { + buyer = UserLevelEnum.daRen; + } + BigDecimal upperTotalMoney = new BigDecimal(0); List<GoodsRebateVO> voList = new ArrayList<>(); for (HongBaoOrder hongBaoOrder : hoList) { @@ -763,86 +652,141 @@ // 瀹炰粯娆� BigDecimal payment = hongBaoOrder.getCommonOrder().getPayment(); - if (hongBaoOrder.getCommonOrder().getSettlement() != null) + // 鑻ュ凡缁撶畻 -鏄剧ず缁撶畻閲戦 + Integer orderState = hongBaoOrder.getCommonOrder().getState(); + if (hongBaoOrder.getCommonOrder().getSettlement() != null + && (orderState == CommonOrder.STATE_JS || orderState == CommonOrder.STATE_WQ)) payment = hongBaoOrder.getCommonOrder().getSettlement(); if (payment == null) payment = new BigDecimal(0); - goodsVO.setActualPay("楼" + payment.setScale(2)); - + goodsVO.setActualPay("楼" + payment.setScale(2, BigDecimal.ROUND_DOWN)); + BigDecimal fanli = hongBaoOrder.getHongBaoV2().getMoney(); + // 鍩虹浣i噾 BigDecimal commission = orderHongBaoMoneyComputeService.computeBaseFanliMoney(commonOrder); - if (type == 3) { // 濂栭噾 - goodsVO.setBonus("楼" + hongBaoOrder.getHongBaoV2().getMoney() +""); - } else { // 浣i噾 - goodsVO.setCommision("楼" +commission); - } - - // 骞冲彴琛ヨ创 - BigDecimal vipFanli = hongBaoOrder.getHongBaoV2().getMoney(); - goodsVO.setSubsidy(vipFanli.subtract(commission).setScale(2) + ""); + goodsVO.setCommision("楼" +commission.setScale(2, BigDecimal.ROUND_DOWN)); + + // 骞冲彴琛ヨ创 = 杩斿埄 - 鍩虹浣i噾 + goodsVO.setSubsidy("楼" + fanli.subtract(commission).setScale(2, BigDecimal.ROUND_DOWN)); // 杈句汉琛ヨ创 if (userLevel != UserLevelEnum.daRen) { BigDecimal darenFanli = orderHongBaoMoneyComputeService.computeFanliMoney(commonOrder, UserLevelEnum.daRen); - goodsVO.setOriginSubsidy("楼" + darenFanli.subtract(commission).setScale(2) + ""); + goodsVO.setOriginSubsidy("楼" + darenFanli.subtract(commission).setScale(2, BigDecimal.ROUND_DOWN) + ""); + } + + if (type == 3) { // 濂栭噾 + goodsVO.setBonus("楼" + fanli.setScale(2, BigDecimal.ROUND_DOWN) +""); } voList.add(goodsVO); - - upperTotalMoney = upperTotalMoney.add(orderHongBaoMoneyComputeService.computeFanliMoney(commonOrder, upperLevel)); - } - // 鍥㈤槦琛ヨ创 - if (type == 3) { - BigDecimal teamSubsidy = null; - BigDecimal lowerSubsidy = null; - InviteOrderSubsidy inviteOrderSubsidy = inviteOrderSubsidyServiceV2.getByOrderNoAndType(uid, orderNo, sourceType); - if (inviteOrderSubsidy != null) { - teamSubsidy = inviteOrderSubsidy.getMoney(); - if (userLevel != UserLevelEnum.daRen) { - CommonOrder commonOrder = hoList.get(0).getCommonOrder(); - Integer urank = commonOrder.getUrank(); - UserLevelEnum buyerUserLevel = UserLevelUtil.getByOrderRank(urank); - boolean direct = false; - if (hongBaoV2.getType() == HongBaoV2.TYPE_YIJI || hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_YIJI) { - direct = true; + if (type == 1 ) { + upperTotalMoney = upperTotalMoney.add(orderHongBaoMoneyComputeService.computeFanliMoney(commonOrder, upperLevel)); + } else if (type == 2) { + upperTotalMoney = upperTotalMoney.add(orderHongBaoMoneyComputeService.computeShareMoney(commonOrder, upperLevel)); + } else if (type == 3) { + List<UserTeamLevel> bossLevelList = new ArrayList<>(); + if (hongBaoV2.getType() == HongBaoV2.TYPE_YIJI || hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_YIJI) { + bossLevelList.add(new UserTeamLevel(null, UserLevelEnum.superVIP)); + upperTotalMoney = upperTotalMoney.add(orderHongBaoMoneyComputeService.computeFirstInviteMoney(commonOrder, + buyer, bossLevelList)); + } else { + Integer bRank = hongBaoV2Service.getDirectBossUrankByPid(hongBaoOrder.getHongBaoV2().getParent().getId()); + UserLevelEnum directBoss = UserLevelUtil.getByOrderRank(bRank); + if (directBoss == null) { + directBoss = UserLevelEnum.daRen; } - // 璁$畻涓婁竴绾цˉ璐� - lowerSubsidy = getLowerSubsidy(inviteOrderSubsidy.getMoney(), commonOrder.getThirdCreateTime(), buyerUserLevel, userLevel, direct); + bossLevelList.add(new UserTeamLevel(null, directBoss)); + bossLevelList.add(new UserTeamLevel(null, UserLevelEnum.superVIP)); + upperTotalMoney = upperTotalMoney.add(orderHongBaoMoneyComputeService.computeSecondInviteMoney(commonOrder, + buyer, bossLevelList)); } - } else { - teamSubsidy = BigDecimal.valueOf(0.00); - lowerSubsidy = BigDecimal.valueOf(0.00); } - - if (userLevel != UserLevelEnum.daRen) { - orderRebateVO.setOriginSubsidy("楼" + lowerSubsidy.setScale(2)); - } - orderRebateVO.setSubsidyDesc("鍥㈤槦琛ヨ创"); - orderRebateVO.setSubsidy("楼" + teamSubsidy.setScale(2) +""); } + + orderRebateVO.setFanLiDesc(predictDesc + typeName); + orderRebateVO.setFanLi("楼" + hongBao.setScale(2, BigDecimal.ROUND_DOWN)); orderRebateVO.setType(type); orderRebateVO.setStateDesc(stateDesc); orderRebateVO.setListGoods(voList); + if (downTime.getTime() < Constant.NEW_ORDER_FANLI_RULE_TIME) { + orderRebateVO.setUserLevel(UserLevelEnum.superVIP.name()); // 闅愯棌 + } else { + orderRebateVO.setUserLevel(userLevel.name()); + } - // 涓婄骇杩斿埄 + // 瓒呯骇浼氬憳杩斿埄 if (upperLevel != null) { orderRebateVO.setUpperFanLi("楼" + upperTotalMoney); - orderRebateVO.setUserLevel(upperLevel.name()); orderRebateVO.setJumpLink(upperLevel.getDetailLink()); } - // 濂栧姳鍒镐娇鐢� - Date accountTime = hongBaoCountVO.getAccountTime(); - if (accountTime != null) { - boolean vip = userInviteService.verifyVIP(uid); - Date endDay = DateUtil.plusDayDate(Constant.COUPON_REWARD_LIMIT_DAY, accountTime); - long currentTime = java.lang.System.currentTimeMillis(); - if (endDay.getTime() > currentTime && !vip) { - UserSystemCouponRecord couponRecord = userSystemCouponRecordService.getRecordByOrderNo(orderNo, null); - if (couponRecord == null - || (couponRecord.getCouponType() == CouponTypeEnum.rebatePercentCoupon.name() && couponRecord.getState() != UserSystemCouponRecord.STATE_SUCCESS)) { - orderRebateVO.setCoupon(true); + int freeState = 0; + boolean rewardSuccess = false; + List<String> listNo = new ArrayList<String>(); + listNo.add(orderNo); + List<UserSystemCouponRecord> useRecord = userSystemCouponRecordService.getRecordByOrderNoList(sourceType, listNo); + if (useRecord != null && useRecord.size() > 0) { + for (UserSystemCouponRecord couponRecord : useRecord) { + Integer state = couponRecord.getState(); + String cType = couponRecord.getCouponType(); + if (CouponTypeEnum.rebatePercentCoupon.name().equals(cType) && UserSystemCouponRecord.STATE_SUCCESS == state) { + rewardSuccess = true; + break; + } else if (CouponTypeEnum.freeCoupon.name().equals(cType) || CouponTypeEnum.welfareFreeCoupon.name().equals(cType) + || CouponTypeEnum.freeCouponBuy.name().equals(cType)) { + freeState = state; + break; + } + } + } + + if (rewardSuccess) { // 宸蹭娇鐢ㄥ鍔卞埜 + JSONObject params = new JSONObject(); + params.put("orderNo", orderNo); + params.put("goodsType", sourceType + ""); + BigDecimal couponMoney = orderHongBaoMapService.getCouponHongbaoByOrderNo(orderNo, uid); + if (couponMoney == null) { + couponMoney = new BigDecimal(0); + } + orderRebateVO.setCouponType(1); + orderRebateVO.setCouponUse(true); + orderRebateVO.setCouponText("濂栧姳鎴愬姛"); + orderRebateVO.setCouponDesc("宸插啀杩斅�" +couponMoney.setScale(2, BigDecimal.ROUND_DOWN)); + orderRebateVO.setCouponParams(params.toString()); + orderRebateVO.setCouponJumpDetail(jumpDetailV2Service.getByTypeCache("rewardCouponDetail")); + } else if (freeState > 0) { // 宸蹭娇鐢ㄥ厤鍗曞埜 + JSONObject params = new JSONObject(); + params.put("orderNo", orderNo); + params.put("goodsType", sourceType + ""); + orderRebateVO.setCouponType(2); + orderRebateVO.setCouponUse(true); + orderRebateVO.setCouponParams(params.toString()); + orderRebateVO.setCouponJumpDetail(jumpDetailV2Service.getByTypeCache("freeCouponDetail")); + if (UserSystemCouponRecord.STATE_FREE_ON == freeState) { + orderRebateVO.setCouponText("鍏嶅崟涓�"); + } else if (UserSystemCouponRecord.STATE_SUCCESS == freeState) { + orderRebateVO.setCouponText("鍏嶅崟鎴愬姛"); + } else if (UserSystemCouponRecord.STATE_FAIL_RULE == freeState + || UserSystemCouponRecord.STATE_FAIL_DRAWBACK == freeState) { + orderRebateVO.setCouponText("鍏嶅崟澶辫触"); + } + } else { + Date accountTime = hongBaoV2.getGetTime(); + // 鍒拌处鏃堕棿 -绾㈠寘閲戦闄愬埗 + if (accountTime != null && hongBao.compareTo(Constant.REWARD_COUPON_LIMIT_MONEY) <= 0) { + boolean vip = userInviteService.verifyVIP(uid); + Date endDay = DateUtil.plusDayDate(Constant.COUPON_REWARD_LIMIT_DAY, accountTime); + long currentTime = java.lang.System.currentTimeMillis(); + if (endDay.getTime() > currentTime && !vip) { + UserSystemCouponRecord couponRecord = userSystemCouponRecordService.getRecordByOrderNo(orderNo, null); + if (couponRecord == null) { + orderRebateVO.setCoupon(true); + orderRebateVO.setCouponType(1); + orderRebateVO.setCouponText("绔嬪嵆浣跨敤"); + orderRebateVO.setCouponDesc("杩斿埄鍐嶈繑"); + } } } } @@ -853,98 +797,170 @@ } - private BigDecimal getLowerSubsidy(BigDecimal money, Date downTime, UserLevelEnum buyerUserLevel, UserLevelEnum userLevel, boolean direct) { - // 鍘熷姣斾緥 - BigDecimal originRate = orderHongBaoMoneyComputeService.getTeamSubsidyRate(downTime, - buyerUserLevel, userLevel, direct); - - // 灏忎竴绾ф瘮渚� - BigDecimal darenRate = orderHongBaoMoneyComputeService.getTeamSubsidyRate(downTime, buyerUserLevel, UserLevelEnum.daRen, direct); - - return MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.div(money,originRate), darenRate); - } - - /** - * 鏁版嵁缁熻 + * 鐢ㄦ埛璁㈠崟缁熻 + * * @param acceptData * @param uid - * @param type 1鑷喘 2鍒嗕韩 3鍥㈤槦 + * 鐢ㄦ埛id + * type 绫诲瀷锛�0鍏ㄩ儴銆�1娣樺疂 2浜笢銆佹嫾澶氬 * @param out */ - @RequestMapping(value = "getCurrentBonus", method = RequestMethod.POST) - public void getCurrentBonus(AcceptData acceptData, Long uid, Integer type, PrintWriter out) { + @RequestMapping(value = "teamOrderSearch") + public void teamOrderSearch(String callback, AcceptData acceptData, Long uid, String key, PrintWriter out) { if (uid == null) { - out.print(JsonUtil.loadFalseResult(1, "鐢ㄦ埛鏈櫥褰�")); + JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "鐢ㄦ埛鏈櫥褰�")); + return; + } + + List<TeamOrderVO> resultList = new ArrayList<>(); + if (StringUtil.isNullOrEmpty(key)) { + JSONObject data = new JSONObject(); + data.put("list", resultList); + JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data)); return; } - JSONObject data = new JSONObject(); - if (type == 1 || type == 2) { - CurrentBonusVO bonus = new CurrentBonusVO(); - bonus.setToday(hongBaoV2CountService.geBonusByuid(uid, 1, type, 2).setScale(2, BigDecimal.ROUND_DOWN).toString()); - bonus.setYesterday(hongBaoV2CountService.geBonusByuid(uid, 2, type, 2).setScale(2, BigDecimal.ROUND_DOWN).toString()); - bonus.setThisMonth(hongBaoV2CountService.geBonusByuid(uid, 3, type, 2).setScale(2, BigDecimal.ROUND_DOWN).toString()); - bonus.setLastMonth(hongBaoV2CountService.geBonusByuid(uid, 4, type, 2).setScale(2, BigDecimal.ROUND_DOWN).toString()); - - CurrentBonusVO bonusNot = new CurrentBonusVO(); - bonusNot.setToday(hongBaoV2CountService.geBonusByuid(uid, 1, type, 1).setScale(2, BigDecimal.ROUND_DOWN).toString()); - bonusNot.setYesterday(hongBaoV2CountService.geBonusByuid(uid, 2, type, 1).setScale(2, BigDecimal.ROUND_DOWN).toString()); - bonusNot.setThisMonth(hongBaoV2CountService.geBonusByuid(uid, 3, type, 1).setScale(2, BigDecimal.ROUND_DOWN).toString()); - bonusNot.setLastMonth(hongBaoV2CountService.geBonusByuid(uid, 4, type, 1).setScale(2, BigDecimal.ROUND_DOWN).toString()); - + try { + // 鏌ヨ姝ゅ崟鏄惁瀛樺湪鍒嗙孩 + List<TeamOrderVO> tempList = new ArrayList<>(); + List<TeamDividentsSourceOrder> listSourceOrder = teamDividentsSourceOrderService.listByOrderNo(key); + if (listSourceOrder != null && listSourceOrder.size() > 0) { + for (TeamDividentsSourceOrder sourceOrder: listSourceOrder) { + List<TeamDividentsSourceOrderUserMap> listDividents = + teamDividentsSourceOrderUserMapService.listBySourceOrderIdAndTargetUid(sourceOrder.getId(), uid); + if (listDividents != null && listDividents.size() > 0) { + Integer state = null; + Date sendTime = null; + BigDecimal money = BigDecimal.ZERO; + for (TeamDividentsSourceOrderUserMap teamDividents: listDividents) { + money = money.add(teamDividents.getMoney()); + state = teamDividents.getState(); + sendTime = teamDividents.getSendTime(); + } + + TeamOrderVO teamOrderVO = new TeamOrderVO(); + teamOrderVO.setSourceType(sourceOrder.getSourceType()); + teamOrderVO.setOrderNo(sourceOrder.getOrderNo()); + teamOrderVO.setDivMoney(money); + teamOrderVO.setDivState(state); + if (sendTime != null) + teamOrderVO.setAccountTime(TimeUtil.formatDate(sendTime)); + tempList.add(teamOrderVO); + } + } + } - data.put("bonus",bonus); - data.put("bonusNot",bonusNot); - data.put("total", hongBaoV2CountService.geBonusByuid(uid, null, type, 2).setScale(2, BigDecimal.ROUND_DOWN).toString()); - data.put("totalNot", hongBaoV2CountService.geBonusByuid(uid, null, type, 1).setScale(2, BigDecimal.ROUND_DOWN).toString()); - } else { - CurrentBonusVO bonus = new CurrentBonusVO(); - bonus.setToday(hongBaoV2CountService.geBonusByuid(uid, 1, type, 4).setScale(2, BigDecimal.ROUND_DOWN).toString()); - bonus.setYesterday(hongBaoV2CountService.geBonusByuid(uid, 2, type, 4).setScale(2, BigDecimal.ROUND_DOWN).toString()); - bonus.setThisMonth(hongBaoV2CountService.geBonusByuid(uid, 3, type, 4).setScale(2, BigDecimal.ROUND_DOWN).toString()); - bonus.setLastMonth(hongBaoV2CountService.geBonusByuid(uid, 4, type, 2).setScale(2, BigDecimal.ROUND_DOWN).toString()); - - - CurrentBonusVO subsidy = new CurrentBonusVO(); - subsidy.setToday(inviteOrderSubsidyServiceV2.sumValidMoneyByUidAndDate(uid,1,null).setScale(2, BigDecimal.ROUND_DOWN).toString()); - subsidy.setYesterday(inviteOrderSubsidyServiceV2.sumValidMoneyByUidAndDate(uid,2,null).setScale(2, BigDecimal.ROUND_DOWN).toString()); - subsidy.setThisMonth(inviteOrderSubsidyServiceV2.sumValidMoneyByUidAndDate(uid,3,null).setScale(2, BigDecimal.ROUND_DOWN).toString()); - subsidy.setLastMonth(inviteOrderSubsidyServiceV2.sumMoneyByUidAndDateAndState(uid,4,null,3).setScale(2, BigDecimal.ROUND_DOWN).toString()); - - // TODO 鍒嗙孩缁熻 - CurrentBonusVO dividend = new CurrentBonusVO(); - dividend.setThisMonth("0.00"); - dividend.setLastMonth("0.00"); - - BigDecimal totalBonus = hongBaoV2CountService.geBonusByuid(uid, null, type, 2); - BigDecimal totalubsidy = inviteOrderSubsidyServiceV2.sumRecievedMoneyByUid(uid,null); - BigDecimal totalDividend = new BigDecimal(0); - - BigDecimal total = totalDividend.add(totalBonus).add(totalubsidy); + if (tempList.size() > 0) { + List<CommonOrder> listOrder = commonOrderService.listByOrderNo(key); + if(listOrder != null && listOrder.size() > 0) { + Map<String, TeamOrderVO> map = new HashMap<String, TeamOrderVO>(); + for (CommonOrder order: listOrder) { + Integer sourceType = order.getSourceType(); + String orderNo = order.getOrderNo(); + String mapKey = orderNo + "##" + sourceType; + + TeamOrderVO teamVO = map.get(mapKey); + if (teamVO != null) { + teamVO.setPayment(teamVO.getPayment().add(order.getPayment())); + } else { + Long orderUid = order.getUserInfo().getId(); + teamVO = new TeamOrderVO(); + teamVO.setUid(orderUid); + teamVO.setOrderNo(orderNo); + teamVO.setSourceType(sourceType); + teamVO.setSourceName(order.getChildSourceType()); + teamVO.setPayment(order.getPayment()); + teamVO.setDownTime(TimeUtil.formatDate(order.getThirdCreateTime())); + + // 涓嬪崟鏃剁瓑绾� + UserLevelEnum userLevel = UserLevelUtil.getByOrderRank(order.getUrank()); + if (userLevel == null) + userLevel = UserLevelEnum.daRen; + teamVO.setUserRank(UserLevelUtil.getShowLevel(userLevel).name()); + + // 绮変笣鍩烘湰淇℃伅 + UserInfo userInfo = userInfoService.getUserByIdWithMybatis(orderUid); + if (userInfo == null) { + continue; + } + teamVO.setUid(orderUid); + teamVO.setNickName(userInfo.getNickName()); + teamVO.setPortrait(userInfo.getPortrait()); + + // 绮変笣浠f暟 + ThreeSaleDetail threeDetail = threeSaleDetailService.getByBossUidAndWorkerUid(uid, orderUid); + if (threeDetail == null) { + continue; + } + teamVO.setTeamGrade(threeDetail.getLevel()); + } + // 缁撶畻鏃堕棿 + Date settleTime = order.getSettleTime(); + if (settleTime != null) + teamVO.setSettleTime(TimeUtil.formatDate(settleTime)); + + // 鍒嗙孩淇℃伅 + for (TeamOrderVO teamOrderVO: tempList) { + if (teamOrderVO.getSourceType() == sourceType) { + teamVO.setDivMoney(teamOrderVO.getDivMoney()); + teamVO.setDivState(teamOrderVO.getDivState()); + teamVO.setAccountTime(teamOrderVO.getAccountTime()); + break; + } + } + + // 缁存潈淇℃伅 + Integer orderState = order.getState(); + if (!StringUtil.isNullOrEmpty(teamVO.getServiceTime()) && CommonOrder.STATE_WQ == orderState) { + if (sourceType == Constant.SOURCE_TYPE_TAOBAO) { + UserOrderWeiQuanRecord record = userOrderWeiQuanRecordService.selectByOrderInfoAndUid(uid, order.getTradeId(), sourceType); + if (record != null) { + teamVO.setServiceTime(TimeUtil.formatDate(record.getCreateTime())); + } + } + } + String orderTime = "涓嬪崟" + teamVO.getDownTime() ; + if (!StringUtil.isNullOrEmpty(teamVO.getSettleTime())) { + orderTime += "\n鏀惰揣" + teamVO.getSettleTime(); + } + if (!StringUtil.isNullOrEmpty(teamVO.getServiceTime())) { + orderTime += "\n鍞悗" + teamVO.getServiceTime(); + } + teamVO.setOrderTime(orderTime); + map.put(mapKey, teamVO); + } + + // 閬嶅巻鏀惧叆鏁扮粍 + Iterator<Entry<String, TeamOrderVO>> entries = map.entrySet().iterator(); + while(entries.hasNext()){ + Entry<String, TeamOrderVO> entry = entries.next(); + resultList.add(entry.getValue()); + } + } + } - data.put("bonus",bonus); - data.put("subsidy",subsidy); - data.put("dividend",dividend); - data.put("subsidy",subsidy); - data.put("total", total.setScale(2, BigDecimal.ROUND_DOWN).toString()); - data.put("totalBonus", totalBonus.setScale(2, BigDecimal.ROUND_DOWN).toString()); - data.put("totalubsidy", totalubsidy.setScale(2, BigDecimal.ROUND_DOWN).toString()); - data.put("totalDividend", totalDividend.setScale(2, BigDecimal.ROUND_DOWN).toString()); + GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation(); + gsonBuilder.registerTypeAdapter(BigDecimal.class, new JsonSerializer<BigDecimal>() { + @Override + public JsonElement serialize(BigDecimal value, Type theType, JsonSerializationContext context) { + if (value == null) { + return new JsonPrimitive(""); + } else { + // 淇濈暀2浣嶅皬鏁� + return new JsonPrimitive(MoneyBigDecimalUtil.getWithNoZera(value) + ""); + } + } + }); + Gson gson = gsonBuilder.create(); + + JSONObject data = new JSONObject(); + data.put("list", gson.toJson(resultList)); + JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data)); + } catch (Exception e) { + JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("鐢ㄦ埛涓嶅瓨鍦�")); + return; } - - String key = null; - if (type == 1) { - key = ConfigKeyEnum.bonusCountLinkFanli.getKey(); - } else if (type == 2) { - key = ConfigKeyEnum.bonusCountLinkShare.getKey(); - } else { - key = ConfigKeyEnum.bonusCountLinkTeam.getKey(); - } - - data.put("link",configService.get(key)); - out.print(JsonUtil.loadTrueResult(data)); } - } -- Gitblit v1.8.0