admin
2020-05-31 2a48f2bd979d56ce4114ba9d56efaf49bab705d7
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserMoneyControllerV2.java
@@ -24,14 +24,17 @@
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.reflect.TypeToken;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.Extract;
import com.yeshi.fanli.entity.bus.user.PreviewInfo.PreviewEnum;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.money.TeamEincomeRecord;
import com.yeshi.fanli.entity.money.UserMoneyDetail.UserMoneyDetailTypeEnum;
import com.yeshi.fanli.entity.order.OrderMoneyDailyCount;
import com.yeshi.fanli.entity.order.OrderMoneyDailyCount.SourceTypeEnum;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
import com.yeshi.fanli.service.inter.money.TeamEincomeRecordService;
@@ -39,6 +42,8 @@
import com.yeshi.fanli.service.inter.money.extract.ExtractService;
import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
import com.yeshi.fanli.service.inter.order.OrderMoneyDailyCountService;
import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsSourceOrderUserMapService;
import com.yeshi.fanli.service.inter.user.PreviewInfoService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.util.Constant;
@@ -50,6 +55,8 @@
import com.yeshi.fanli.vo.money.MoneyPredictVO;
import com.yeshi.fanli.vo.money.MoneyStatisticVO;
import com.yeshi.fanli.vo.money.TeamPredictVO;
import com.yeshi.fanli.vo.order.OrderRankingVO;
import com.yeshi.fanli.vo.order.TeamDividentsVO;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
@@ -91,6 +98,12 @@
   @Resource
   private TeamEincomeRecordService teamEincomeRecordService;
   @Resource
   private PreviewInfoService previewInfoService;
   @Resource
   private TeamDividentsSourceOrderUserMapService teamDividentsSourceOrderUserMapService;
   private Gson getGson() {
      GsonBuilder builder = new GsonBuilder();
      builder.registerTypeAdapter(BigDecimal.class, new JsonSerializer<BigDecimal>() {
@@ -100,7 +113,7 @@
               return new JsonPrimitive("");
            } else {
               // 保留2位小数
               value = value.setScale(2);
               value = value.setScale(2, BigDecimal.ROUND_DOWN);
               return new JsonPrimitive(value.toString());
            }
         }
@@ -121,13 +134,35 @@
         out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
         return;
      }
      // VIP数据预览
      MoneyStatisticVO vo = null;
      String redisContent = previewInfoService.getRedisContent(uid, PreviewEnum.moneyInfo);
      if (!StringUtil.isNullOrEmpty(redisContent)) {
         vo = new Gson().fromJson(redisContent, MoneyStatisticVO.class);
         if (vo != null) {
            vo.setLink(configService.get(ConfigKeyEnum.autoExtractHelpUrl.getKey()));
            vo.setExtractDesc("提现金额就是已成功提现到支付宝的资金");
            vo.setMoneyArrivalDesc("订单已到账后提现时间和金额均不受限制");
         }
      }
      if (vo == null) {
         vo = createMoneyStatistic(uid);
      }
      Gson gson = getGson();
      out.print(JsonUtil.loadTrueResult(gson.toJson(vo)));
   }
   public MoneyStatisticVO createMoneyStatistic(Long uid) {
      UserInfo user = userInfoService.getUserById(uid);
      MoneyStatisticVO vo = new MoneyStatisticVO();
      vo.setLink(configService.get(ConfigKeyEnum.autoExtractHelpUrl.getKey()));
      vo.setBalanceMoney(user.getMyHongBao());
      vo.setExtractDesc("提现金额就是已成功转账到提现支付宝的资金。");
      vo.setMoneyArrivalDesc("资金已到账后提现时间不受限制、金额不受限制。");
      vo.setExtractDesc("提现金额就是已成功提现到支付宝的资金");
      vo.setMoneyArrivalDesc("订单已到账后提现时间和金额均不受限制");
      // 获取提现中的信息
      BigDecimal extractingMoney = extractService.sumVerifyingMoney(uid);
@@ -234,9 +269,7 @@
            .convertToTimeTemp(calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1), "yyyy-M"));
      calendar.add(Calendar.MONTH, -1);
      vo.setMonthPredict(cratePredictVO(orderMoneyDailyCountService.query(uid, minDate, maxDate)));
      Gson gson = getGson();
      out.print(JsonUtil.loadTrueResult(gson.toJson(vo)));
      return vo;
   }
   @RequestMapping(value = "getUserMoneyInfo")
@@ -262,6 +295,7 @@
      MoneyPredictVO predictVO = new MoneyPredictVO();
      predictVO.setMineNum(0);
      predictVO.setTeamNum(0);
      predictVO.setTotalNum(0);
      predictVO.setMineMoney(BigDecimal.valueOf(0));
      predictVO.setTeamMoney(BigDecimal.valueOf(0));
      BigDecimal hundred = BigDecimal.valueOf(100);
@@ -271,6 +305,10 @@
               predictVO.setMineNum(predictVO.getMineNum() + dailyCount.getOrderNum());
            if (dailyCount.getOrderNumTeam() != null)
               predictVO.setTeamNum(predictVO.getTeamNum() + dailyCount.getOrderNumTeam());
            if (dailyCount.getTeamDividentsOrderNum() != null)
               predictVO.setTotalNum(predictVO.getTotalNum() + dailyCount.getTeamDividentsOrderNum());
            if (dailyCount.getIncome() != null)
               predictVO.setMineMoney(predictVO.getMineMoney()
                     .add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncome()), hundred)));
@@ -279,7 +317,7 @@
                     .add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncomeTeam()), hundred)));
         }
      }
      predictVO.setTotalNum(predictVO.getTeamNum() + predictVO.getMineNum());
      predictVO.setTotalNum(predictVO.getTotalNum());
      predictVO.setTotalMoney(predictVO.getMineMoney().add(predictVO.getTeamMoney()));
      return predictVO;
   }
@@ -298,10 +336,23 @@
         return;
      }
      List<Extract> list = extractService.getExtractSucceedRecord(page, Constant.PAGE_SIZE, uid);
      if (list == null) {
         list = new ArrayList<>();
      List<Extract> list = null;
      String redisContent = previewInfoService.getRedisContent(uid, PreviewEnum.extractRecord);
      if (!StringUtil.isNullOrEmpty(redisContent)) {
         Gson gson = new Gson();
         list = gson.fromJson(redisContent, new TypeToken<ArrayList<Extract>>() {
         }.getType());
      }
      // 查询真实
      long count = 0;
      if (list == null) {
         list = extractService.getExtractSucceedRecord(page, Constant.PAGE_SIZE, uid);
         count = extractService.countExtractSucceedRecord(uid);
      }
      if (list == null)
         list = new ArrayList<>();
      JSONArray JSONArray = new JSONArray();
      for (Extract extract : list) {
@@ -320,7 +371,7 @@
      }
      JSONObject json = new JSONObject();
      json.put("count", extractService.countExtractSucceedRecord(uid));
      json.put("count", count == 0 ? list.size() : 0);
      json.put("list", JSONArray);
      out.print(JsonUtil.loadTrueResult(json));
   }
@@ -435,7 +486,9 @@
         object.put("list", gson.toJson(list));
         out.print(JsonUtil.loadTrueResult(object));
      } catch (ParseException e) {
         out.print(JsonUtil.loadFalseResult(1, "查询失败"));
         e.printStackTrace();
         LogHelper.errorDetailInfo(e);
      }
   }
@@ -515,9 +568,9 @@
    * @param out
    */
   @RequestMapping(value = "getTeamDividendStatistic")
   public void getTeamDividendStatistic(AcceptData acceptData, Long uid, PrintWriter out) {
   public void getTeamDividendStatistic(String callback, AcceptData acceptData, Long uid, PrintWriter out) {
      if (uid == null || uid == 0) {
         out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
@@ -550,11 +603,11 @@
      object.put("subsidy", subsidy.setScale(2).toString());
      object.put("today", gson.toJson(todayVO));
      object.put("month", gson.toJson(monthVO));
      out.print(JsonUtil.loadTrueResult(object));
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(object));
   }
   private TeamPredictVO crateTeamPredictVO(List<OrderMoneyDailyCount> list) {
      TeamPredictVO predictVO = new TeamPredictVO(BigDecimal.ZERO, 0, BigDecimal.ZERO, 0);
      TeamPredictVO predictVO = new TeamPredictVO(BigDecimal.ZERO, 0, BigDecimal.ZERO, 0, 0);
      if (list != null && list.size() > 0) {
         BigDecimal hundred = BigDecimal.valueOf(100);
         for (OrderMoneyDailyCount dailyCount : list) {
@@ -569,9 +622,12 @@
               predictVO.setSubsidy(predictVO.getSubsidy()
                     .add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamSubsidy()), hundred)));
            if (dailyCount.getTeamDividentsOrderNum() != null)
               predictVO.setTotalNum(predictVO.getTotalNum() + dailyCount.getTeamDividentsOrderNum());
         }
      }
      predictVO.setTotalNum(predictVO.getRewardNum() + predictVO.getSubsidyNum());
      predictVO.setTotalNum(predictVO.getTotalNum());
      predictVO.setTotalMoney(predictVO.getReward().add(predictVO.getSubsidy()));
      return predictVO;
   }
@@ -585,15 +641,15 @@
    * @param out
    */
   @RequestMapping(value = "getTeamDividendHistory")
   public void getTeamDividendHistory(AcceptData acceptData, Long uid, String date, Integer datetype,
   public void getTeamDividendHistory(String callback, AcceptData acceptData, Long uid, String date, Integer datetype,
         PrintWriter out) {
      if (uid == null || uid == 0) {
         out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (StringUtil.isNullOrEmpty(date) || datetype == null) {
         out.print(JsonUtil.loadFalseResult(1, "参数不完整"));
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("参数不完整"));
         return;
      }
@@ -610,7 +666,7 @@
            int countNum = 7;
            Date day = TimeUtil.parseYYYYMMDD(date);
            for (int i = 0; i < countNum; i++) {
               TeamPredictVO predictVO = new TeamPredictVO(zero, 0, zero, 0);
               TeamPredictVO predictVO = new TeamPredictVO(zero, 0, zero, 0, 0);
               if (i == 0) {
                  predictVO.setCountDate(formatDay.format(day));
               } else {
@@ -629,7 +685,7 @@
            int countNum = 3;
            Date day = TimeUtil.parseYYYYMMDD(DateUtil.getFirstDayOfMonth(date));
            for (int i = 0; i < countNum; i++) {
               TeamPredictVO predictVO = new TeamPredictVO(zero, 0, zero, 0);
               TeamPredictVO predictVO = new TeamPredictVO(zero, 0, zero, 0, 0);
               if (i == 0) {
                  predictVO.setCountDate(formatMonth.format(day));
               } else {
@@ -659,6 +715,7 @@
                     predictVO.setSubsidyNum(dailyCount.getTeamSubsidyNum());
                     predictVO.setSubsidy(
                           MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamSubsidy()), hundred));
                     predictVO.setTotalNum(dailyCount.getTeamDividentsOrderNum());
                     break;
                  }
@@ -671,12 +728,14 @@
                     predictVO.setSubsidyNum(dailyCount.getTeamSubsidyNum());
                     predictVO.setSubsidy(
                           MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamSubsidy()), hundred));
                     predictVO.setTotalNum(dailyCount.getTeamDividentsOrderNum());
                     break;
                  }
               }
            }
            predictVO.setTotalNum(predictVO.getRewardNum() + predictVO.getSubsidyNum());
            predictVO.setTotalNum(predictVO.getTotalNum());
            predictVO.setTotalMoney(predictVO.getReward().add(predictVO.getSubsidy()));
         }
@@ -685,10 +744,247 @@
         JSONObject object = new JSONObject();
         object.put("count", list.size());
         object.put("list", gson.toJson(list));
         out.print(JsonUtil.loadTrueResult(object));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(object));
      } catch (ParseException e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("统计失败"));
         e.printStackTrace();
         LogHelper.errorDetailInfo(e);
      }
   }
   /**
    *  分红详情
    *
    * @param acceptData
    * @param uid
    * @param datetype   1-天 - 2月
    * @param out
    */
   @RequestMapping(value = "getTeamDividendDetail")
   public void getTeamDividendDetail(String callback, AcceptData acceptData, Integer page, Long uid, String date,
         Integer datetype, String key, PrintWriter out) {
      if (uid == null || uid == 0) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (StringUtil.isNullOrEmpty(date) || datetype == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("参数不完整"));
         return;
      }
      if (page == null)
         page = 1;
      int pageSize = Constant.PAGE_SIZE;
      try {
         Date minDay = new Date();
         Date maxDay = new Date();
         if (datetype == 1) {
            minDay = TimeUtil.parseYYYYMMDD(date);
            maxDay = TimeUtil.parseYYYYMMDD_HHMMSS(date + " 23:59:59");
         } else if (datetype == 2) {
            minDay = TimeUtil.parseYYYYMMDD(DateUtil.getFirstDayOfMonth(date));
            maxDay = TimeUtil.parseYYYYMMDD_HHMMSS(DateUtil.getLastDayOfMonth(date) + " 23:59:59");
         }
         List<TeamDividentsVO> list = teamDividentsSourceOrderUserMapService
               .listByDateAndTargetUid((page - 1) * pageSize, pageSize, uid, minDay, maxDay, key);
         if (list == null) {
            list = new ArrayList<>();
         }
         long count = teamDividentsSourceOrderUserMapService.countByDateAndTargetUid(uid, minDay, maxDay, key);
         GsonBuilder builder = new GsonBuilder();
         builder.registerTypeAdapter(BigDecimal.class, new JsonSerializer<BigDecimal>() {
            @Override
            public JsonElement serialize(BigDecimal value, Type theType, JsonSerializationContext context) {
               if (value == null) {
                  return new JsonPrimitive("0.00");
               } else {
                  // 保留3位小数
                  value = value.setScale(3, RoundingMode.DOWN);
                  return new JsonPrimitive(value.toString());
               }
            }
         });
         Gson gson = builder.create();
         JSONObject object = new JSONObject();
         if (page == 1) {
            TeamDividentsVO teamDividentsVO = teamDividentsSourceOrderUserMapService.sumByDateAndTargetUid(uid,
                  minDay, maxDay, key);
            if (teamDividentsVO == null) {
               teamDividentsVO = new TeamDividentsVO();
               teamDividentsVO.setSubsidy(BigDecimal.ZERO);
               teamDividentsVO.setDividents(BigDecimal.ZERO);
            }
            object.put("subsidy", teamDividentsVO.getSubsidy().setScale(2, RoundingMode.DOWN).toString());
            object.put("dividents", teamDividentsVO.getDividents().setScale(2, RoundingMode.DOWN).toString());
         }
         object.put("count", count);
         object.put("list", gson.toJson(list));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(object));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("查询失败"));
         e.printStackTrace();
         LogHelper.errorDetailInfo(e);
      }
   }
   /**
    * 订单统计-h5
    *
    * @param acceptData
    * @param id
    * @param out
    */
   @RequestMapping(value = "countTeamOrderNum")
   public void countTeamOrderNum(String callback, AcceptData acceptData, Long uid, PrintWriter out) {
      try {
         Date minDate = null;
         Date maxDate = null;
         long timeStamp = System.currentTimeMillis();
         Calendar calendar = Calendar.getInstance();
         calendar.setTimeInMillis(timeStamp);
         // 今日预估
         calendar.add(Calendar.DAY_OF_YEAR, -1);
         minDate = new Date(TimeUtil.convertDateToTemp(TimeUtil.getGernalTime(timeStamp)));
         OrderMoneyDailyCount todayRecord = createVO(
               orderMoneyDailyCountService.sumTeamOrderNumGroupByCountDay(uid, minDate, null));
         // 昨日预估
         calendar.add(Calendar.DAY_OF_YEAR, -1);
         maxDate = new Date(TimeUtil.convertDateToTemp(TimeUtil.getGernalTime(timeStamp)));
         minDate = DateUtil.reduceDay(1, maxDate);
         OrderMoneyDailyCount yesterdayRecord = createVO(
               orderMoneyDailyCountService.sumTeamOrderNumGroupByCountDay(uid, minDate, maxDate));
         // 本月预估
         maxDate = new Date(timeStamp);
         calendar = Calendar.getInstance();
         minDate = new Date(TimeUtil.convertToTimeTemp(
               calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1), "yyyy-M"));
         calendar.add(Calendar.MONTH, -1);
         OrderMoneyDailyCount monthRecord = createVO(
               orderMoneyDailyCountService.sumTeamOrderNumGroupByYearMonth(uid, minDate, maxDate));
         // 累计
         OrderMoneyDailyCount totalityRecord = createVO(
               orderMoneyDailyCountService.sumTeamOrderNumGroupByUid(uid, null, null));
         JSONObject today = new JSONObject();
         today.put("direct", todayRecord.getDirectOrderNum());
         today.put("indirect", todayRecord.getInDirectOrderNum());
         today.put("beyond", todayRecord.getBeyondOrderNum());
         JSONObject yesterday = new JSONObject();
         yesterday.put("direct", yesterdayRecord.getDirectOrderNum());
         yesterday.put("indirect", yesterdayRecord.getInDirectOrderNum());
         yesterday.put("beyond", yesterdayRecord.getBeyondOrderNum());
         JSONObject month = new JSONObject();
         month.put("direct", monthRecord.getDirectOrderNum());
         month.put("indirect", monthRecord.getInDirectOrderNum());
         month.put("beyond", monthRecord.getBeyondOrderNum());
         JSONObject totality = new JSONObject();
         totality.put("direct", totalityRecord.getDirectOrderNum());
         totality.put("indirect", totalityRecord.getInDirectOrderNum());
         totality.put("beyond", totalityRecord.getBeyondOrderNum());
         JSONObject json = new JSONObject();
         json.put("today", today);
         json.put("yesterday", yesterday);
         json.put("month", month);
         json.put("totality", totality);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(json));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("统计失败"));
         e.printStackTrace();
         LogHelper.errorDetailInfo(e);
      }
   }
   private OrderMoneyDailyCount createVO(List<OrderMoneyDailyCount> list) {
      OrderMoneyDailyCount totalityRecord = new OrderMoneyDailyCount(0, 0, 0);
      if (list != null && list.size() > 0) {
         for (OrderMoneyDailyCount record : list) {
            totalityRecord.setDirectOrderNum(totalityRecord.getDirectOrderNum() + record.getDirectOrderNum());
            totalityRecord.setInDirectOrderNum(totalityRecord.getInDirectOrderNum() + record.getInDirectOrderNum());
            totalityRecord.setBeyondOrderNum(totalityRecord.getBeyondOrderNum() + record.getBeyondOrderNum());
         }
      }
      return totalityRecord;
   }
   /**
    * 订单排行榜
    * @param callback
    * @param acceptData
    * @param uid
    * @param dateType
    * @param out
    */
   @RequestMapping(value = "getRanking")
   public void getRanking(String callback, AcceptData acceptData, Long uid, Integer dateType, PrintWriter out) {
      if (uid == null || dateType == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("参数缺失"));
         return;
      }
      try {
         Date minDate = null;
         Date maxDate = null;
         long timeStamp = System.currentTimeMillis();
         Calendar calendar = Calendar.getInstance();
         calendar.setTimeInMillis(timeStamp);
         if (dateType == 1) {
            // 今日
            calendar.add(Calendar.DAY_OF_YEAR, -1);
            minDate = new Date(TimeUtil.convertDateToTemp(TimeUtil.getGernalTime(timeStamp)));
         } else if (dateType == 2) {
            // 昨日
            calendar.add(Calendar.DAY_OF_YEAR, -1);
            maxDate = new Date(TimeUtil.convertDateToTemp(TimeUtil.getGernalTime(timeStamp)));
            minDate = DateUtil.reduceDay(1, maxDate);
         } else {
            // 本月
            maxDate = new Date(timeStamp);
            calendar = Calendar.getInstance();
            minDate = new Date(TimeUtil.convertToTimeTemp(
                  calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1), "yyyy-M"));
            calendar.add(Calendar.MONTH, -1);
         }
         List<OrderRankingVO> list = orderMoneyDailyCountService.getRankingByOrderNum(uid, minDate, maxDate);
         if (list.size() > 0) {
            for (int i = 0; i < list.size(); i++) {
               OrderRankingVO vo = list.get(i);
               UserInfo user = userInfoService.getUserByIdWithMybatis(vo.getUid());
               if (user == null) {
                  list.remove(i);
                  i--;
                  continue;
               }
               vo.setNickName(user.getNickName());
               vo.setPortrait(user.getPortrait());
            }
         }
         JSONObject json = new JSONObject();
         json.put("list", list);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(json));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("统计失败"));
         e.printStackTrace();
         LogHelper.errorDetailInfo(e);
      }
   }
}