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; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.yeshi.utils.DateUtil; 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.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; import com.yeshi.fanli.entity.order.CommonOrder; 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.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; import com.yeshi.fanli.exception.order.CommonOrderException; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.common.JumpDetailV2Service; import com.yeshi.fanli.service.inter.config.ConfigService; import com.yeshi.fanli.service.inter.count.HongBaoV2CountService; import com.yeshi.fanli.service.inter.order.CommonOrderGoodsService; 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.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; import com.yeshi.fanli.util.Constant; 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.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.TeamOrderVO; import com.yeshi.fanli.vo.user.MineInfoVO; import com.yeshi.fanli.vo.user.UserInfoExtraVO; import com.yeshi.fanli.vo.user.UserSettingsVO; import net.sf.json.JSONObject; @Controller @RequestMapping("api/v2/user/order") public class UserOrderControllerV2 { @Resource private ConfigService configService; @Resource private UserInfoService userInfoService; @Resource private UserInfoExtraService userInfoExtraService; @Resource private CommonOrderService commonOrderService; @Resource private HongBaoV2CountService hongBaoV2CountService; @Resource private RedisManager redisManager; @Resource private UserCustomSettingsService userCustomSettingsService; @Resource private ESOrderService esOrderService; @Resource private UserVIPInfoService userVIPInfoService; @Resource private HongBaoV2Service hongBaoV2Service; @Resource private HongBaoOrderService hongBaoOrderService; @Resource private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService; @Resource private CommonOrderGoodsService commonOrderGoodsService; @Resource private TaoBaoWeiQuanOrderService taoBaoWeiQuanOrderService; @Resource private JumpDetailV2Service jumpDetailV2Service; @Resource private UserSystemCouponRecordService userSystemCouponRecordService; @Resource private UserInviteService userInviteService; @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; /** * 订单列表 * * @param acceptData * @param page * @param uid * @param state * 状态:0全部 1-未到账 2-已到账 3-已失效 4已收货 * @param type * 类型:1-返利订单 2-分享订单 3-邀请订单 * @param orderState * 1有效订单 2 维权订单 3失效订单 * @param orderNo * 订单号 * @param startTime * 起始时间 * @param endTime * 结束时间 * @param slotTime * 时间段:1-最近三天 2-最近七天 3最近半月 4本月 5近三月 6近半年 * @param dateType * 1-今日 2-昨天 3-本月 4-上个月 | * @param source * 页面来源:welfareCore-福利中心、bonus -奖金统计(我的界面) * @param out */ @RequestMapping(value = "getOrderList", method = RequestMethod.POST) public void getOrderList(AcceptData acceptData, Integer page, Long uid, Integer state, String type, Integer orderState, String orderNo, String startTime, String endTime, Integer slotTime, Integer dateType, Integer goodsType, String source, PrintWriter out) { if (uid == null) { out.print(JsonUtil.loadFalseResult(1, "用户未登录")); return; } if (page == null || page < 1) page = 1; // 搜索内容、订单号 if (!StringUtil.isNullOrEmpty(orderNo) && VersionUtil.greaterThan_2_0_6(acceptData.getPlatform(), acceptData.getVersion())) { searchOrder(acceptData, orderNo, page, uid, out); return; } // 转换状态 if (state != null) { if (state == 0) { state = null; // 所有 } else if (state == 4) { state = null; orderState = 4; // 已收货 } else if (state == 5) { state = null; orderState = 2; // 已维权 } } if (state != null && orderState != null && (orderState == 2 || orderState == 3)) { state = null; } // 订单类型 Integer orderType = null; if (StringUtil.isNullOrEmpty(type)) { orderType = null; } else if (!"0".equalsIgnoreCase(type)) { orderType = Integer.parseInt(type); } if (goodsType != null && goodsType == 0) goodsType = null; // 筛选时间 if (slotTime != null) { try { SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd"); switch (slotTime) { case 1: // 最近三天 endTime = sd.format(new Date()); startTime = DateUtil.reduceDay(2, endTime); break; case 2: // 最近七天 endTime = sd.format(new Date()); startTime = DateUtil.reduceDay(6, endTime); break; case 3: // 最近15天 (半月) endTime = sd.format(new Date()); startTime = DateUtil.reduceDay(14, endTime); break; case 4: // 最近三十天 (本月) dateType = 10; break; case 5: // 最近九十天(近三月) dateType = 11; break; case 6: // 最近一百八十天(近半年) dateType = 12; break; default: break; } } catch (Exception e) { e.printStackTrace(); } } if (endTime != null && endTime.trim().length() > 0) { endTime += " 23:59:59"; } List listSource = new ArrayList<>(); if (goodsType != null) { listSource.add(goodsType); } 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, 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, notBackSuVip); if (postSaleMoney != null) invalidMoney = postSaleMoney.setScale(2, BigDecimal.ROUND_DOWN).toString(); if (orderType != null && dateType != null && dateType == 4) { if (orderType == 1) { dateType = 6; // 返利订单有效 } else { dateType = 5; // 新版查询本月到账 } } } long count = 0L; List 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, notBackSuVip); count = commonOrderService.countOrderList(uid, state, orderType, orderState, orderNo, startTime, endTime, dateType, listSource, notBackSuVip); } else { list = commonOrderService.getOrderByUid(acceptData, page, uid, state, orderType, orderState, orderNo, startTime, endTime, dateType, listSource); count = commonOrderService.countGroupOrderNoByUid(uid, state, orderType, orderState, orderNo, startTime, endTime, dateType, listSource); } // 判断是否需要显示订单找回提示 8秒内请求3次触发 String orderFindUrl = null; if (state == null && page == 1) { if (redisManager.frequencyLimit("orderlist-" + acceptData.getDevice(), 8, 4) || count == 0L) { orderFindUrl = configService.get(ConfigKeyEnum.orderFindNotifyUrl.getKey()); } } JSONObject data = new JSONObject(); data.put("count", count); data.put("result_list", JsonUtil.getApiCommonGson().toJson(list)); data.put("helpUrl", configService.get(ConfigKeyEnum.orderListHelp.getKey())); data.put("validMoney", "¥ " + validMoney); data.put("invalidMoney", "¥ " + invalidMoney); data.put("findOrderHelpUrl", orderFindUrl); out.print(JsonUtil.loadTrueResult(data)); } catch (CommonOrderException e) { out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg())); } catch (Exception e) { out.print(JsonUtil.loadFalseResult(1, "查询失败")); LogHelper.errorDetailInfo(e); } } /** * 搜索订单 * @param key * @param out */ private void searchOrder(AcceptData acceptData, String key, Integer page, Long uid, PrintWriter out) { try { long count = 0; List list = null; if (NumberUtil.isNumeric(key.replace("-", ""))) { list = commonOrderService.getOrderByUid(acceptData, page, uid, null, null, null, key, null, null, null, null); } if (list == null || list.size() == 0) { List listES = esOrderService.query(key, uid.toString(), null); if (listES.size() != 0) { list = commonOrderService.searchOrderByUid(acceptData, page, Constant.PAGE_SIZE, uid, listES); count = commonOrderService.countSearchOrderByUid(uid, listES); } } else { count = list.size(); } if (list == null) { list = new ArrayList<>(); } JSONObject data = new JSONObject(); data.put("count", count); data.put("result_list", JsonUtil.getApiCommonGson().toJson(list)); out.print(JsonUtil.loadTrueResult(data)); } catch (Exception e) { out.print(JsonUtil.loadFalseResult(1, "查询失败")); e.printStackTrace(); LogHelper.errorDetailInfo(e); } } /** * 用户订单统计 * * @param acceptData * @param uid * 用户id * type 类型:0全部、1淘宝 2京东、拼多多 * @param out */ @RequestMapping(value = "getOrderCount", method = RequestMethod.POST) public void getOrderCount(AcceptData acceptData, Long uid, Integer type, PrintWriter out) { if (uid == null) { out.print(JsonUtil.loadFalseResult(1, "请求参数不正确")); return; } try { UserInfo user = userInfoService.selectByPKey(uid); if (user == null) { out.print(JsonUtil.loadFalseResult(1, "用户不存在")); return; } UserInfo userInfo = UserUtil.filterForClientUser(user); UserInfoExtraVO userInfoExtra = userInfoExtraService.getInfoExtraVOByUid(user.getId()); if (userInfoExtra != null && userInfoExtra.getUserRank() != null) { userInfo.setRankIcon(userInfoExtra.getUserRank().getIcon()); userInfo.setRankNamePicture(userInfoExtra.getUserRank().getPicture()); } JSONObject data = new JSONObject(); data.put("userInfo", userInfo); List listSource = new ArrayList<>(); if (type == null || type == 0) { OrderCountVO total = commonOrderService.getOrderCount(uid, null, null); data.put("total", total.getSelf() + total.getShared() + total.getInvite()); data.put("self", total.getSelf()); data.put("shared", total.getShared()); data.put("invite", total.getInvite()); } else { data.put("total", 0); data.put("self", 0); data.put("shared", 0); data.put("invite", 0); listSource.add(type); } // 今天 OrderCountVO today = commonOrderService.getOrderCount(uid, 1, listSource); today.setTotal(today.getSelf() + today.getShared() + today.getInvite()); // 昨天 OrderCountVO yesterday = commonOrderService.getOrderCount(uid, 2, listSource); yesterday.setTotal(yesterday.getSelf() + yesterday.getShared() + yesterday.getInvite()); // 本月 OrderCountVO thisMonth = commonOrderService.getOrderCount(uid, 3, listSource); thisMonth.setTotal(thisMonth.getSelf() + thisMonth.getShared() + thisMonth.getInvite()); // 上月 OrderCountVO lastMonth = commonOrderService.getOrderCount(uid, 4, listSource); lastMonth.setTotal(lastMonth.getSelf() + lastMonth.getShared() + lastMonth.getInvite()); data.put("today", today); data.put("yesterday", yesterday); data.put("thisMonth", thisMonth); data.put("lastMonth", lastMonth); out.print(JsonUtil.loadTrueResult(data)); } catch (Exception e) { out.print(JsonUtil.loadFalseResult(1, "获取信息失败")); e.printStackTrace(); } } /** * 统计奖金 * @param acceptData * @param uid * @param dateType 1-今日 2-昨天 3-本月 4-上个月 * @param out */ @RequestMapping(value = "getBonusCount", method = RequestMethod.POST) public void getBonusCount(AcceptData acceptData, Long uid, Integer dateType, PrintWriter out) { if (uid == null) { out.print(JsonUtil.loadFalseResult(1, "用户未登录")); return; } boolean show = false; UserSettingsVO settings = null; try { settings = userCustomSettingsService.getMySettings(uid); } catch (Exception e) { } // 验证是否显示模块 if (settings != null && settings.getNoBonusCount() != null) { if (settings.getNoBonusCount() == 1) { show = false; } else if (settings.getNoBonusCount() == 0) { show = true; } } else { show = hongBaoV2CountService.getHongBaoCount(uid, null) > 0; } 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()); data.put("inviteMoney", teamMoney.setScale(2, BigDecimal.ROUND_DOWN).toString()); out.print(JsonUtil.loadTrueResult(data)); } /** * 返利说明 * @param acceptData * @param uid * @param orderNo * @param sourceType * @param out */ @RequestMapping(value = "getReBateInfo") public void getReBateInfo(String callback, AcceptData acceptData, Long uid, String orderNo, Integer sourceType, PrintWriter out) { if (uid == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录")); return; } UserInfo user = userInfoService.selectByPKey(uid); if (user == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户不存在")); return; } // 红包信息 List hoList = hongBaoOrderService.listDetailByOrderIdAndSourceTypeAndUid(orderNo, sourceType, uid); HongBaoCountVO hongBaoCountVO = hongBaoOrderService.getHongBaoCountVO(hoList); Integer hongBaoState = hongBaoCountVO.getCurrentState(); String stateDesc = ""; String predictDesc = ""; if (HongBaoV2.STATE_KELINGQU == hongBaoState || HongBaoV2.STATE_BUKELINGQU == hongBaoState) { stateDesc = "未到账"; predictDesc = "预估"; } else if (HongBaoV2.STATE_YILINGQU == hongBaoState) { stateDesc = "已到账"; } else if (HongBaoV2.STATE_SHIXIAO == hongBaoState) { stateDesc = "已失效"; } int type = 0; String typeName = ""; int hongBaoType = hoList.get(0).getHongBaoV2().getType(); if (HongBaoV2.TYPE_ZIGOU == hongBaoType || 2 == hongBaoType) { type = 1; typeName = "返利"; } else if (HongBaoV2.TYPE_SHARE_GOODS == hongBaoType) { type = 2; typeName = "奖金"; } else if (HongBaoV2.TYPE_SHARE_YIJI == hongBaoType || HongBaoV2.TYPE_SHARE_ERJI == hongBaoType || HongBaoV2.TYPE_YAOQING == hongBaoType || HongBaoV2.TYPE_YIJI == hongBaoType || HongBaoV2.TYPE_ERJI == hongBaoType) { type = 3; typeName = "收益"; } List goodsIdList = new ArrayList<>(); if (hoList != null) for (HongBaoOrder hongBaoOrder : hoList) { if (hongBaoOrder.getCommonOrder() != null) goodsIdList.add(hongBaoOrder.getCommonOrder().getCommonOrderGoods().getId()); } Map orderGoodsMap = new HashMap<>(); List goodsList = commonOrderGoodsService.listByByPrimaryKeys(goodsIdList); if (goodsList != null) for (CommonOrderGoods goods : goodsList) orderGoodsMap.put(goods.getId(), goods); OrderRebateVO orderRebateVO = new OrderRebateVO(); // 红包信息 BigDecimal hongBao = hongBaoCountVO.getValidMoney(); if (sourceType == Constant.SOURCE_TYPE_TAOBAO) { List listWQ = taoBaoWeiQuanOrderService.getWeiQuanSuccessOrders(orderNo); if (listWQ != null && listWQ.size() > 0) { BigDecimal weiQuanMoney = commonOrderService.getWeiQuanMoney(listWQ, sourceType, uid); orderRebateVO.setWq(true); orderRebateVO.setWqMoney("¥"+ weiQuanMoney.setScale(2, BigDecimal.ROUND_DOWN)); if (hongBao.compareTo(weiQuanMoney) > 0) { orderRebateVO.setWqDesc("部分售后退回"); } else { orderRebateVO.setWqDesc("售后退回"); } // 计算剩余红包 hongBao = MoneyBigDecimalUtil.sub(hongBao, weiQuanMoney); } } // 红包获得者 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 voList = new ArrayList<>(); for (HongBaoOrder hongBaoOrder : hoList) { if (hongBaoOrder.getHongBaoV2().getState() == HongBaoV2.STATE_SHIXIAO) hongBaoOrder.getHongBaoV2().setMoney(new BigDecimal(0)); GoodsRebateVO goodsVO = new GoodsRebateVO(); // 标题、图片 CommonOrder commonOrder = hongBaoOrder.getCommonOrder(); if (orderGoodsMap.get(commonOrder.getCommonOrderGoods().getId()) != null) { goodsVO.setTitle(orderGoodsMap.get(commonOrder.getCommonOrderGoods().getId()).getTitle()); goodsVO.setPicture(orderGoodsMap.get(commonOrder.getCommonOrderGoods().getId()).getPicture()); } // 实付款 BigDecimal payment = hongBaoOrder.getCommonOrder().getPayment(); // 若已结算 -显示结算金额 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, BigDecimal.ROUND_DOWN)); BigDecimal fanli = hongBaoOrder.getHongBaoV2().getMoney(); // 基础佣金 BigDecimal commission = orderHongBaoMoneyComputeService.computeBaseFanliMoney(commonOrder); goodsVO.setCommision("¥" +commission.setScale(2, BigDecimal.ROUND_DOWN)); // 平台补贴 = 返利 - 基础佣金 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, BigDecimal.ROUND_DOWN) + ""); } if (type == 3) { // 奖金 goodsVO.setBonus("¥" + fanli.setScale(2, BigDecimal.ROUND_DOWN) +""); } voList.add(goodsVO); 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 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; } bossLevelList.add(new UserTeamLevel(null, directBoss)); bossLevelList.add(new UserTeamLevel(null, UserLevelEnum.superVIP)); upperTotalMoney = upperTotalMoney.add(orderHongBaoMoneyComputeService.computeSecondInviteMoney(commonOrder, buyer, bossLevelList)); } } } 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.setJumpLink(upperLevel.getDetailLink()); } int freeState = 0; boolean rewardSuccess = false; List listNo = new ArrayList(); listNo.add(orderNo); List 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("返利再返"); } } } } JSONObject data = new JSONObject(); data.put("result", orderRebateVO); JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data)); } /** * 用户订单统计 * * @param acceptData * @param uid * 用户id * type 类型:0全部、1淘宝 2京东、拼多多 * @param out */ @RequestMapping(value = "teamOrderSearch") public void teamOrderSearch(String callback, AcceptData acceptData, Long uid, String key, PrintWriter out) { if (uid == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "用户未登录")); return; } List resultList = new ArrayList<>(); if (StringUtil.isNullOrEmpty(key)) { JSONObject data = new JSONObject(); data.put("list", resultList); JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data)); return; } try { // 查询此单是否存在分红 List tempList = new ArrayList<>(); List listSourceOrder = teamDividentsSourceOrderService.listByOrderNo(key); if (listSourceOrder != null && listSourceOrder.size() > 0) { for (TeamDividentsSourceOrder sourceOrder: listSourceOrder) { List 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); } } } if (tempList.size() > 0) { List listOrder = commonOrderService.listByOrderNo(key); if(listOrder != null && listOrder.size() > 0) { Map map = new HashMap(); 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()); // 粉丝代数 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> entries = map.entrySet().iterator(); while(entries.hasNext()){ Entry entry = entries.next(); resultList.add(entry.getValue()); } } } GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation(); gsonBuilder.registerTypeAdapter(BigDecimal.class, new JsonSerializer() { @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; } } }