yujian
2020-05-11 712fb305d6f79961e879a2f543107e19d7f9e8a2
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserOrderController.java
@@ -3,17 +3,19 @@
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.yeshi.utils.DateUtil;
import org.yeshi.utils.IPUtil;
import org.yeshi.utils.JsonUtil;
@@ -21,11 +23,14 @@
import com.yeshi.fanli.entity.AppVersionInfo;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.bus.user.LostOrder;
import com.yeshi.fanli.entity.bus.user.Order;
import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.order.CommonOrder;
import com.yeshi.fanli.entity.order.TeamOrderStatistic;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
import com.yeshi.fanli.exception.order.CommonOrderException;
import com.yeshi.fanli.log.LogHelper;
@@ -35,15 +40,21 @@
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.order.LostOrderService;
import com.yeshi.fanli.service.inter.order.OrderService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoOrderService;
import com.yeshi.fanli.service.inter.user.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.service.inter.order.TeamOrderStatisticService;
import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsSourceOrderService;
import com.yeshi.fanli.service.inter.order.tb.TaoBaoOrderService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.util.CMQManager;
import com.yeshi.fanli.util.Constant;
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.vo.order.CommonOrderVO;
import com.yeshi.fanli.vo.order.TeamOrderStatisticVO;
import com.yeshi.fanli.vo.user.UserInfoExtraVO;
import net.sf.json.JSONObject;
@@ -82,6 +93,15 @@
   @Resource
   private LostOrderService lostOrderService;
   @Resource
   private RedisManager redisManager;
//   @Resource
   private TeamOrderStatisticService teamOrderStatisticService;
   @Resource
   private TeamDividentsSourceOrderService teamDividentsSourceOrderService;
   /**
    * 订单列表
    * 
@@ -108,17 +128,25 @@
    * @param out
    */
   @RequestMapping(value = "getorder", method = RequestMethod.POST)
   public void getOrder(AcceptData acceptData, Integer page, Long uid, Integer state, Integer type, Integer orderState,
         String orderNo, String startTime, String endTime, Integer slotTime, boolean needCount, Integer dateType,
   public void getOrder(AcceptData acceptData, Integer page, Long uid, Integer state,
         @RequestParam(name = "type", required = false) String type1, Integer orderState, String orderNo,
         String startTime, String endTime, Integer slotTime, Boolean needCount, Integer dateType, Integer goodsType,
         PrintWriter out) {
      Integer type = null;
      if (Constant.IS_TEST)
         uid = 389677L;
      if (StringUtil.isNullOrEmpty(type1)) {
         type = null;
      } else {
         type = Integer.parseInt(type1);
      }
      if (uid == null) {
         out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
         return;
      }
      if (needCount == null)
         needCount = false;
      if (page == null || page < 1) {
         page = 1;
@@ -134,8 +162,31 @@
         state = null; // 清空
      }
      // 转换状态
      if (state != null && state == 5) {
         orderState = 2; // 已维权
         state = null; // 清空
      }
      if (type != null && type == 0) {
         type = null; // 所有类型订单
      }
      Integer tempState = state;
      // 转换状态
      if (state != null && orderState != null && (orderState == 2 || orderState == 3)) {
         state = null; // 清空
      }
      if (!VersionUtil.greaterThan_1_6_0(acceptData.getPlatform(), acceptData.getVersion())) {
         goodsType = Constant.SOURCE_TYPE_TAOBAO;
      } else if (goodsType != null && goodsType == 0) {
         goodsType = null; // 所有平台订单
      }
      List<Integer> listSource = new ArrayList<>();
      if (goodsType != null) {
         listSource.add(goodsType);
      }
      try {
@@ -152,59 +203,64 @@
         endTime += " 23:59:59";
      }
      String orderFindUrl = null;
      try {
         long count = 0;
         int totalValid = 0;
         int totalProces = 0;
         int totalInvite = 0;
         long totalValid = 0;
         long totalProces = 0;
         long totalInvite = 0;
         long todayTotal = 0;
         BigDecimal todayMoney = null;
         // 查询列表
         List<CommonOrderVO> list = commonOrderService.getOrderByUid(page, uid, state, type, orderState, orderNo,
               startTime, endTime, dateType);
         List<CommonOrderVO> list = commonOrderService.getOrderByUid(acceptData, page, uid, state, type, orderState,
               orderNo, startTime, endTime, dateType, listSource);
         if (list != null && list.size() > 0) {
            // 统计总数
            count = commonOrderService.countGroupOrderNoByUid(uid, state, type, orderState, orderNo, startTime,
                  endTime, dateType);
                  endTime, dateType, listSource);
         }
         // 需要统计筛选信息 :未失效的总金额 以及订单
         if (needCount && page == 1) {
            todayMoney = commonOrderService.countBonusOrderMoney(uid, type, dateType, startTime, endTime);
            todayMoney = commonOrderService.countBonusOrderMoney(uid, type, dateType, startTime, endTime,
                  goodsType);
            todayTotal = commonOrderService.countBonusOrderNumber(uid, type, dateType, startTime, endTime);
            todayTotal = commonOrderService.countBonusOrderNumber(uid, type, dateType, startTime, endTime,
                  goodsType);
            // 统计有效的订单数量 、 失效订单数量 、维权订单数量
            Map<String, BigDecimal> countOrder = commonOrderService.countByUidAndOrderState(uid, type, startTime,
                  endTime, dateType);
            // 有效订单
            totalValid = commonOrderService.countUserOrderToApp(uid, type, startTime, endTime, dateType, goodsType,
                  tempState, 1);
            if (countOrder.get("totalValid") != null) {
               totalValid = countOrder.get("totalValid").intValue();
            }
            // 维权订单
            totalProces = commonOrderService.countUserOrderToApp(uid, type, startTime, endTime, dateType, goodsType,
                  null, 2);
            if (countOrder.get("totalProces") != null) {
               totalProces = countOrder.get("totalProces").intValue();
            }
            if (countOrder.get("totalInvite") != null) {
               totalInvite = countOrder.get("totalInvite").intValue();
            }
            // 失效订单
            totalInvite = commonOrderService.countUserOrderToApp(uid, type, startTime, endTime, dateType, goodsType,
                  null, 3);
         }
         if (todayMoney == null) {
            todayMoney = new BigDecimal(0.00);
         }
         String helpUrl = configService.get("order_list_help");
         // 判断是否需要显示订单找回提示
         if (VersionUtil.greaterThan_2_0_2(acceptData.getPlatform(), acceptData.getVersion()))
            if (state == null && page == 1) {
               if (redisManager.frequencyLimit("orderlist-" + acceptData.getDevice(), 8, 4) || count == 0L) {// 8秒内请求3次触发
                  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", helpUrl);
         data.put("helpUrl", configService.get(ConfigKeyEnum.orderListHelp.getKey()));
         if (type != null && type == 1) {
            data.put("todayMoney", "预估返利总额 ¥" + todayMoney.setScale(2, BigDecimal.ROUND_DOWN).toString());
@@ -218,16 +274,15 @@
         data.put("totalValid", totalValid); // 有效数量
         data.put("totalProces", totalProces); // 维权数量
         data.put("totalInvite", totalInvite); // 失效数量
         if (orderFindUrl != null)
            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, "查询失败"));
         e.printStackTrace();
         LogHelper.errorDetailInfo(e);
      }
   }
   /**
@@ -281,8 +336,13 @@
         JSONObject data = new JSONObject();
         data.put("userInfo", userInfo);
         Integer goodsType = null; // 版本区分
         if (!VersionUtil.greaterThan_1_6_0(acceptData.getPlatform(), acceptData.getVersion())) {
            goodsType = Constant.SOURCE_TYPE_TAOBAO;
         }
         /* 总订单统计 */
         Map<String, BigDecimal> countOrder = commonOrderService.countHistoryOrder(uid, null);
         Map<String, BigDecimal> countOrder = commonOrderService.countHistoryOrder(uid, null, goodsType);
         int self = 0;
         if (countOrder.get("totalSelf") != null) {
            self = countOrder.get("totalSelf").intValue();
@@ -306,7 +366,7 @@
         data.put("invite", invite);
         /* 今日订单统计 */
         Map<String, BigDecimal> countToday = commonOrderService.countHistoryOrder(uid, 1);
         Map<String, BigDecimal> countToday = commonOrderService.countHistoryOrder(uid, 1, goodsType);
         int todaySelf = 0;
         if (countToday.get("totalSelf") != null) {
@@ -334,7 +394,7 @@
         data.put("today", todaydata);
         /* 昨日订单统计 */
         Map<String, BigDecimal> countYesterday = commonOrderService.countHistoryOrder(uid, 2);
         Map<String, BigDecimal> countYesterday = commonOrderService.countHistoryOrder(uid, 2, goodsType);
         int yesterdaySelf = 0;
         if (countYesterday.get("totalSelf") != null) {
            yesterdaySelf = countYesterday.get("totalSelf").intValue();
@@ -367,6 +427,83 @@
   }
   /**
    * 统计各个平台数据
    *
    * @param acceptData
    * @param uid
    * @param goodsType
    * @param out
    */
   @RequestMapping(value = "getNearOrderNum", method = RequestMethod.POST)
   public void getNearOrderNum(AcceptData acceptData, Long uid, Integer goodsType, PrintWriter out) {
      if (uid == null) {
         out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
         return;
      }
      if (goodsType == null || goodsType > 3 || goodsType < 1) {
         out.print(JsonUtil.loadFalseResult(1, "平台类型缺失或不正确"));
         return;
      }
      /* 今日订单统计 */
      Map<String, BigDecimal> countToday = commonOrderService.countHistoryOrder(uid, 1, goodsType);
      int todaySelf = 0;
      if (countToday.get("totalSelf") != null) {
         todaySelf = countToday.get("totalSelf").intValue();
      }
      int todayShared = 0;
      if (countToday.get("totalShared") != null) {
         todayShared = countToday.get("totalShared").intValue();
      }
      int todayInvite = 0;
      if (countToday.get("totalInvite") != null) {
         todayInvite = countToday.get("totalInvite").intValue();
      }
      int todayTotal = todaySelf + todayShared + todayInvite;
      JSONObject todaydata = new JSONObject();
      todaydata.put("total", todayTotal);
      todaydata.put("self", todaySelf);
      todaydata.put("shared", todayShared);
      todaydata.put("invite", todayInvite);
      /* 昨日订单统计 */
      Map<String, BigDecimal> countYesterday = commonOrderService.countHistoryOrder(uid, 2, goodsType);
      int yesterdaySelf = 0;
      if (countYesterday.get("totalSelf") != null) {
         yesterdaySelf = countYesterday.get("totalSelf").intValue();
      }
      int yesterdayShared = 0;
      if (countYesterday.get("totalShared") != null) {
         yesterdayShared = countYesterday.get("totalShared").intValue();
      }
      int yesterdayInvite = 0;
      if (countYesterday.get("totalInvite") != null) {
         yesterdayInvite = countYesterday.get("totalInvite").intValue();
      }
      int yesterdayTotal = yesterdaySelf + yesterdayShared + yesterdayInvite;
      JSONObject yesterdaydata = new JSONObject();
      yesterdaydata.put("total", yesterdayTotal);
      yesterdaydata.put("self", yesterdaySelf);
      yesterdaydata.put("shared", yesterdayShared);
      yesterdaydata.put("invite", yesterdayInvite);
      JSONObject data = new JSONObject();
      data.put("today", todaydata);
      data.put("yesterday", yesterdaydata);
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    * 统计奖金
    * 
    * @param acceptData
@@ -375,45 +512,74 @@
    */
   @RequestMapping(value = "countBonus", method = RequestMethod.POST)
   public void countBonus(AcceptData acceptData, Long uid, Integer dateType, PrintWriter out) {
      if (uid == null) {
         out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
         return;
      }
      try {
      long nowTime = System.currentTimeMillis();
      long recievedTime = TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(nowTime, "yyyy-MM") + "-25 10",
            "yyyy-MM-dd HH");
      try {
         Object shareCount = 0;
         BigDecimal sharemoney = new BigDecimal(0.00);
         Object inviteCount = 0;
         BigDecimal inviteMoney = new BigDecimal(0.00);
         Map<String, Object> shareMap = commonOrderService.countBonusOrderMoneyAndNumber(uid, 2, dateType, null,
               null);
         if (shareMap != null) {
            Object totalNum = shareMap.get("totalNum");
            if (totalNum != null) {
               shareCount = totalNum;
         if (nowTime > recievedTime && dateType == 4) {// 实际到账
            List<Integer> inviteTypes = new ArrayList<>();
            inviteTypes.add(HongBaoV2.TYPE_YIJI);
            inviteTypes.add(HongBaoV2.TYPE_ERJI);
            inviteTypes.add(HongBaoV2.TYPE_SHARE_YIJI);
            inviteTypes.add(HongBaoV2.TYPE_SHARE_ERJI);
            List<Integer> shareTypes = new ArrayList<>();
            shareTypes.add(HongBaoV2.TYPE_SHARE_GOODS);
            Date minGetTime = new Date(
                  TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(nowTime, "yyyy-MM") + "-25", "yyyy-MM-dd"));
            Date maxGetTime = new Date(nowTime);
            inviteMoney = hongBaoV2CountService.sumAlreadyGetMoneyByUid(uid, inviteTypes, minGetTime, maxGetTime);
            inviteCount = hongBaoV2CountService.countAlreadyGetMoneyByUid(uid, inviteTypes, minGetTime, maxGetTime);
            sharemoney = hongBaoV2CountService.sumAlreadyGetMoneyByUid(uid, shareTypes, minGetTime, maxGetTime);
            shareCount = hongBaoV2CountService.countAlreadyGetMoneyByUid(uid, shareTypes, minGetTime, maxGetTime);
         } else {// 预估到账
            Integer goodsType = null; // 版本区分
            if (!VersionUtil.greaterThan_1_6_0(acceptData.getPlatform(), acceptData.getVersion())) {
               goodsType = Constant.SOURCE_TYPE_TAOBAO;
            }
            Map<String, Object> shareMap = commonOrderService.countBonusOrderMoneyAndNumber(uid, 2, dateType, null,
                  null, goodsType);
            if (shareMap != null) {
               Object totalNum = shareMap.get("totalNum");
               if (totalNum != null) {
                  shareCount = totalNum;
               }
               Object totalmoney = shareMap.get("totalmoney");
               if (totalmoney != null) {
                  sharemoney = (BigDecimal) totalmoney;
               }
            }
            Object totalmoney = shareMap.get("totalmoney");
            if (totalmoney != null) {
               sharemoney = (BigDecimal) totalmoney;
            }
         }
            // 邀请统计
         // 邀请统计
         Map<String, Object> inviteMap = commonOrderService.countBonusOrderMoneyAndNumber(uid, 3, dateType, null,
               null);
         if (inviteMap != null) {
            Object totalNum = inviteMap.get("totalNum");
            if (totalNum != null) {
               inviteCount = totalNum;
            }
            Map<String, Object> inviteMap = commonOrderService.countBonusOrderMoneyAndNumber(uid, 3, dateType, null,
                  null, goodsType);
            if (inviteMap != null) {
               Object totalNum = inviteMap.get("totalNum");
               if (totalNum != null) {
                  inviteCount = totalNum;
               }
            Object totalmoney = inviteMap.get("totalmoney");
            if (totalmoney != null) {
               inviteMoney = (BigDecimal) totalmoney;
               Object totalmoney = inviteMap.get("totalmoney");
               if (totalmoney != null) {
                  inviteMoney = (BigDecimal) totalmoney;
               }
            }
         }
@@ -587,4 +753,122 @@
      return startTime;
   }
   /**
    * 获取团队订单统计
    * @Title: getTeamOrderStatistic
    * @Description:
    * @param acceptData
    * @param uid
    * @param out
    * void 返回类型
    * @throws
    */
   @RequestMapping(value = "getTeamOrderStatistic")
   public void getTeamOrderStatistic(AcceptData acceptData, Long uid, PrintWriter out) {
      long now = System.currentTimeMillis();
      TeamOrderStatisticVO vo = new TeamOrderStatisticVO();
      Date minDate = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(now, "yyyyMMdd"), "yyyyMMdd"));
      Date maxDate = new Date(
            TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(now + 1000 * 60 * 60 * 24L, "yyyyMMdd"), "yyyyMMdd"));
      List<Integer> countList = new ArrayList<>();
      // 统计今日
      TeamOrderStatistic statistic = teamOrderStatisticService.countByUidAndDate(uid, minDate, maxDate);
      if (statistic == null) {
         countList.add(0);
         countList.add(0);
         countList.add(0);
      } else {
         countList.add(statistic.getDirectOrderCount() == null ? 0 : statistic.getDirectOrderCount());
         countList.add(statistic.getInDirectOrderCount() == null ? 0 : statistic.getInDirectOrderCount());
         countList.add(statistic.getOtherOrderCount() == null ? 0 : statistic.getOtherOrderCount());
      }
      vo.setToday(countList);
      // 统计昨日
      minDate = new Date(
            TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(now - 1000 * 60 * 60 * 24L, "yyyyMMdd"), "yyyyMMdd"));
      maxDate = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(now, "yyyyMMdd"), "yyyyMMdd"));
      countList = new ArrayList<>();
      statistic = teamOrderStatisticService.countByUidAndDate(uid, minDate, maxDate);
      if (statistic == null) {
         countList.add(0);
         countList.add(0);
         countList.add(0);
      } else {
         countList.add(statistic.getDirectOrderCount() == null ? 0 : statistic.getDirectOrderCount());
         countList.add(statistic.getInDirectOrderCount() == null ? 0 : statistic.getInDirectOrderCount());
         countList.add(statistic.getOtherOrderCount() == null ? 0 : statistic.getOtherOrderCount());
      }
      vo.setYesterday(countList);
      // 统计本月
      minDate = new Date(
            TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(now - 1000 * 60 * 60 * 24L, "yyyyMM"), "yyyyMM"));
      Calendar ca = Calendar.getInstance();
      ca.setTimeInMillis(now);
      ca.add(Calendar.MONTH, 1);
      maxDate = new Date(
            TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(ca.getTimeInMillis(), "yyyyMM"), "yyyyMM"));
      countList = new ArrayList<>();
      statistic = teamOrderStatisticService.countByUidAndDate(uid, minDate, maxDate);
      if (statistic == null) {
         countList.add(0);
         countList.add(0);
         countList.add(0);
      } else {
         countList.add(statistic.getDirectOrderCount() == null ? 0 : statistic.getDirectOrderCount());
         countList.add(statistic.getInDirectOrderCount() == null ? 0 : statistic.getInDirectOrderCount());
         countList.add(statistic.getOtherOrderCount() == null ? 0 : statistic.getOtherOrderCount());
      }
      vo.setThisMonth(countList);
      // 统计 累计
      minDate = new Date(0L);
      maxDate = new Date(now);
      countList = new ArrayList<>();
      statistic = teamOrderStatisticService.countByUidAndDate(uid, minDate, maxDate);
      if (statistic == null) {
         countList.add(0);
         countList.add(0);
         countList.add(0);
      } else {
         countList.add(statistic.getDirectOrderCount() == null ? 0 : statistic.getDirectOrderCount());
         countList.add(statistic.getInDirectOrderCount() == null ? 0 : statistic.getInDirectOrderCount());
         countList.add(statistic.getOtherOrderCount() == null ? 0 : statistic.getOtherOrderCount());
      }
      vo.setTotal(countList);
   }
   /**
    * 获取团队订单排行
    * @Title: getTeamOrderRank
    * @Description:
    * @param acceptData
    * @param uid
    * @param type 1-今日 2-昨日 3-本月
    * @param out
    * void 返回类型
    * @throws
    */
   @RequestMapping(value = "getTeamOrderRank")
   public void getTeamOrderRank(AcceptData acceptData, Long uid, int type, PrintWriter out) {
      // TODO 需求不明确
   }
   @RequestMapping(value = "searchOrderTeam")
   public void searchOrderTeam(AcceptData acceptData, String key, PrintWriter out) {
//      teamDividentsSourceOrderService.selectByOrderNoSourceType(orderNo, sourceType);
   }
}