yujian
2020-04-01 7e37f77192fa701e309fa04f821aa5fd5259ca33
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserOrderControllerV2.java
@@ -18,7 +18,10 @@
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum;
import com.yeshi.fanli.entity.order.ESOrder;
import com.yeshi.fanli.entity.order.InviteOrderSubsidy;
import com.yeshi.fanli.entity.order.OrderTeamReward;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.exception.order.CommonOrderException;
import com.yeshi.fanli.log.LogHelper;
@@ -26,16 +29,23 @@
import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.order.ESOrderService;
import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyServiceV2;
import com.yeshi.fanli.service.inter.order.OrderTeamRewardService;
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.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.VersionUtil;
import com.yeshi.fanli.util.account.UserUtil;
import com.yeshi.fanli.vo.order.CommonOrderVO;
import com.yeshi.fanli.vo.order.GoodsRebateVO;
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.user.UserInfoExtraVO;
import com.yeshi.fanli.vo.user.UserSettingsVO;
@@ -69,8 +79,14 @@
   @Resource
   private ESOrderService esOrderService;
   @Resource
   private OrderTeamRewardService orderTeamRewardService;
   
   @Resource
   private UserVIPInfoService userVIPInfoService;
   
   @Resource
   private InviteOrderSubsidyServiceV2 inviteOrderSubsidyServiceV2;
   
   /**
    * 订单列表
@@ -230,6 +246,7 @@
         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);
@@ -395,8 +412,323 @@
      data.put("selfMoney", selfMoney.setScale(2,BigDecimal.ROUND_DOWN).toString());
      data.put("shareMoney", shareMoney.setScale(2, BigDecimal.ROUND_DOWN).toString());
      data.put("inviteMoney", inviteMoney.setScale(2, BigDecimal.ROUND_DOWN).toString());
      // 团队奖励 TODO
      if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
         BigDecimal teamSubsidy = inviteOrderSubsidyServiceV2.sumValidMoneyByUidAndDate(uid, dateType, null);
         if (teamSubsidy == null) {
            teamSubsidy = new BigDecimal(0);
         }
         BigDecimal teamReward = orderTeamRewardService.sumValidMoneyByUidAndDate(uid, dateType, null);
         if (teamReward == null) {
            teamReward = new BigDecimal(0);
         }
         data.put("teamSubsidy", teamSubsidy.setScale(2, BigDecimal.ROUND_DOWN).toString());
         data.put("teamReward", teamReward.setScale(2, BigDecimal.ROUND_DOWN).toString());
         data.put("tutorSubsidy", "0.00");
      }
      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) {
         // 奖励
         sumTeamReward(out, user);
      } 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));
   }
   /**
    * 统计团队奖励
    * @param out
    * @param user
    */
   private void sumTeamReward(PrintWriter out, UserInfo user) {
      Long uid = user.getId();
      // 是否VIP
      boolean vip = userVIPInfoService.isVIP(uid);
      JSONObject data = new JSONObject();
      data.put("link", configService.get(ConfigKeyEnum.orderTeamRewardLink.getKey()));
      if (!vip) {
         data.put("exist",  false);
         out.print(JsonUtil.loadTrueResult(data));
         return;
      }
      data.put("exist",  true);
      data.put("portrait", user.getPortrait());
      // 今日统计
      BigDecimal todayDirect = orderTeamRewardService.sumValidMoneyByUidAndDate(uid, 1, OrderTeamReward.LEVEL_ONE);
      if (todayDirect == null) {
         todayDirect = new BigDecimal(0);
      }
      BigDecimal todayIndirect = orderTeamRewardService.sumValidMoneyByUidAndDate(uid, 1, OrderTeamReward.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 = orderTeamRewardService.sumValidMoneyByUidAndDate(uid, 2, OrderTeamReward.LEVEL_ONE);
      if (yesterdayDirect == null) {
         yesterdayDirect = new BigDecimal(0);
      }
      BigDecimal yesterdayIndirect = orderTeamRewardService.sumValidMoneyByUidAndDate(uid, 2, OrderTeamReward.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 = orderTeamRewardService.sumValidMoneyByUidAndDate(uid, 3, OrderTeamReward.LEVEL_ONE);
      if (thisMonthDirect == null) {
         thisMonthDirect = new BigDecimal(0);
      }
      BigDecimal thisMonthIndirect = orderTeamRewardService.sumValidMoneyByUidAndDate(uid, 3, OrderTeamReward.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 = orderTeamRewardService.sumValidMoneyByUidAndDate(uid, 4, OrderTeamReward.LEVEL_ONE);
      if (lastMonthDirect == null) {
         lastMonthDirect = new BigDecimal(0);
      }
      BigDecimal lastMonthIndirect = orderTeamRewardService.sumValidMoneyByUidAndDate(uid, 4, OrderTeamReward.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 = orderTeamRewardService.sumRecievedMoneyByUid(uid, OrderTeamReward.LEVEL_ONE);
      if (direct == null) {
         direct = new BigDecimal(0);
      }
      BigDecimal indirect = orderTeamRewardService.sumRecievedMoneyByUid(uid, OrderTeamReward.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));
   }
   /**
    * 返利说明
    * @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;
      }
      GoodsRebateVO goodsVO = new GoodsRebateVO();
      goodsVO.setTitle("舒客舒克光感炫白牙片美白牙齿牙膜套装去黄牙清新口气");
      goodsVO.setPicture("https://img.alicdn.com/bao/uploaded/i4/355739614/O1CN01RB6Hlg2KtGMWR4mON_!!0-item_pic.jpg");
      goodsVO.setActualPay("¥60.00");
      goodsVO.setFanliRate("X20%");
      goodsVO.setFanliExpect("¥25.00");
      goodsVO.setCommision("10.00");
      goodsVO.setSubsidy("6.00");
      GoodsRebateVO goodsVO2 = new GoodsRebateVO();
      goodsVO2.setTitle("馥佩美白柔肤水爽肤水补水保湿女化妆湿敷精华水男旗舰店官网正品");
      goodsVO2.setPicture("https://img.alicdn.com/bao/uploaded/i4/738252756/O1CN01MgFdXy1WEI8zmkyg7_!!0-item_pic.jpg");
      goodsVO2.setActualPay("¥62.00");
      goodsVO2.setFanliRate("X22%");
      goodsVO2.setFanliExpect("¥26.00");
      goodsVO2.setCommision("12.00");
      goodsVO2.setSubsidy("8.00");
      List<GoodsRebateVO> listGoods= new ArrayList<>();
      listGoods.add(goodsVO);
      listGoods.add(goodsVO2);
      OrderRebateVO orderRebateVO = new OrderRebateVO();
      orderRebateVO.setTotalFanLi("¥50.00");
      orderRebateVO.setUpperFanLi("¥60.00");
      orderRebateVO.setUserLevel(UserLevelEnum.daRen.name());
      orderRebateVO.setJumpLink("https://www.baidu.com/");
      orderRebateVO.setListGoods(listGoods);
      JSONObject data = new JSONObject();
      data.put("result", orderRebateVO);
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
   }
}