package com.yeshi.fanli.controller.client; import java.io.PrintWriter; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; 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.encrypt.DESUtil; import com.yeshi.fanli.entity.AppVersionInfo; import com.yeshi.fanli.entity.accept.AcceptData; import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.exception.order.CommonOrderException; import com.yeshi.fanli.service.inter.config.AppVersionService; import com.yeshi.fanli.service.inter.config.ConfigService; import com.yeshi.fanli.service.inter.count.HongBaoV2CountService; import com.yeshi.fanli.service.inter.order.CommonOrderService; import com.yeshi.fanli.service.inter.user.UserExtraTaoBaoInfoService; import com.yeshi.fanli.service.inter.user.UserInfoExtraService; import com.yeshi.fanli.service.inter.user.UserInfoService; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.account.UserUtil; import com.yeshi.fanli.vo.order.CommonOrderVO; import com.yeshi.fanli.vo.user.UserInfoExtraVO; import net.sf.json.JSONObject; @Controller @RequestMapping("api/v1/user/order") public class UserOrderController { @Resource private ConfigService configService; @Resource private AppVersionService appVersionService; @Resource private UserInfoService userInfoService; @Resource private UserInfoExtraService userInfoExtraService; @Resource private CommonOrderService commonOrderService; @Resource private HongBaoV2CountService hongBaoV2CountService; @Resource private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; /** * 订单列表 * * @param acceptData * @param page * @param uid * @param state * 状态:0全部 1-未到账 2-已到账 3-已失效 * @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 needCount * @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, PrintWriter out) { if (uid == null) { out.print(JsonUtil.loadFalseResult(1, "用户未登录")); return; } if (page == null || page < 1) { page = 1; } if (state != null && state == 0) { state = null;// 所有状态 } if (type != null && type == 0) { type = null; // 所有类型订单 } try { if (slotTime != null) { SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd"); endTime = sd.format(new Date()); startTime = convertDate(slotTime, endTime); } } catch (Exception e) { e.printStackTrace(); } if (endTime != null && endTime.trim().length() > 0) { endTime += " 23:59:59"; } try { long count = 0; int totalValid = 0; int totalProces = 0; int totalInvite = 0; long todayTotal = 0; BigDecimal todayMoney = null; // 查询列表 List list = commonOrderService.getOrderByUid(page, uid, state, type, orderState, orderNo, startTime, endTime, dateType); if (list != null && list.size() > 0) { // 统计总数 count = commonOrderService.countGroupOrderNoByUid(uid, state, type, orderState, orderNo, startTime, endTime, dateType); } // 需要统计筛选信息 :未失效的总金额 以及订单 if (needCount && page == 1) { todayMoney = commonOrderService.countBonusOrderMoney(uid, type, dateType, startTime, endTime); todayTotal = commonOrderService.countBonusOrderNumber(uid, type, dateType, startTime, endTime); // 统计有效的订单数量 、 失效订单数量 、维权订单数量 Map countOrder = commonOrderService.countByUidAndOrderState(uid, type, startTime, endTime, dateType); if (countOrder.get("totalValid") != null) { totalValid = countOrder.get("totalValid").intValue(); } if (countOrder.get("totalProces") != null) { totalProces = countOrder.get("totalProces").intValue(); } if (countOrder.get("totalInvite") != null) { totalInvite = countOrder.get("totalInvite").intValue(); } } if (todayMoney == null) { todayMoney = new BigDecimal(0.00); } String helpUrl = configService.get("order_list_help"); JSONObject data = new JSONObject(); data.put("count", count); data.put("result_list", JsonUtil.getApiCommonGson().toJson(list)); data.put("helpUrl", helpUrl); if (type != null && type == 1) { data.put("todayMoney", "预估返利总额 ¥" + todayMoney.setScale(2, BigDecimal.ROUND_DOWN).toString()); } else if (type != null && (type == 2 || type == 3)) { data.put("todayMoney", "预估奖金总额 ¥" + todayMoney.setScale(2, BigDecimal.ROUND_DOWN).toString()); } else { data.put("todayMoney", "预估总额 ¥" + todayMoney.setScale(2, BigDecimal.ROUND_DOWN).toString()); } data.put("todayTotal", "共" + todayTotal + "笔"); data.put("totalValid", totalValid); // 有效数量 data.put("totalProces", totalProces); // 维权数量 data.put("totalInvite", totalInvite); // 失效数量 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(); } } /** * 用户订单统计 * * @param acceptData * @param uid * 用户id * @param out */ @RequestMapping(value = "countorder", method = RequestMethod.POST) public void countOrder(AcceptData acceptData, Long uid, 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); // 1.5.0 版本之后返回新的等级 String version = acceptData.getVersion(); if (version != null && version.trim().length() > 0) { int versionCode = Integer.parseInt(version); String platform = acceptData.getPlatform(); AppVersionInfo versionInfo = appVersionService.getByPlatformAndVersion(platform, "1.5.0"); if (versionInfo != null) { int versionCode150 = versionInfo.getVersionCode(); if (versionCode >= versionCode150) { UserInfoExtraVO userInfoExtra = userInfoExtraService.getInfoExtraVOByUid(user.getId()); if (userInfoExtra != null && userInfoExtra.getUserRank() != null) { String picture = userInfoExtra.getUserRank().getPicture(); String icon = userInfoExtra.getUserRank().getIcon(); userInfo.setRankIcon(icon); userInfo.setRankNamePicture(picture); } } } } JSONObject data = new JSONObject(); data.put("userInfo", userInfo); /* 总订单统计 */ Map countOrder = commonOrderService.countHistoryOrder(uid, null); int self = 0; if (countOrder.get("totalSelf") != null) { self = countOrder.get("totalSelf").intValue(); } int shared = 0; if (countOrder.get("totalShared") != null) { shared = countOrder.get("totalShared").intValue(); } int invite = 0; if (countOrder.get("totalInvite") != null) { invite = countOrder.get("totalInvite").intValue(); } int total = self + shared + invite; data.put("total", total); data.put("self", self); data.put("shared", shared); data.put("invite", invite); /* 今日订单统计 */ Map countToday = commonOrderService.countHistoryOrder(uid, 1); 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); data.put("today", todaydata); /* 昨日订单统计 */ Map countYesterday = commonOrderService.countHistoryOrder(uid, 2); 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); data.put("yesterday", yesterdaydata); out.print(JsonUtil.loadTrueResult(data)); } catch (Exception e) { out.print(JsonUtil.loadFalseResult(1, "获取信息失败")); e.printStackTrace(); } } /** * 统计奖金 * * @param acceptData * @param uid * @param out */ @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 { Object shareCount = 0; BigDecimal sharemoney = new BigDecimal(0.00); Object inviteCount = 0; BigDecimal inviteMoney = new BigDecimal(0.00); Map shareMap = commonOrderService.countBonusOrderMoneyAndNumber(uid, 2, dateType, null, null); if (shareMap != null) { Object totalNum = shareMap.get("totalNum"); if (totalNum != null) { shareCount = totalNum; } Object totalmoney = shareMap.get("totalmoney"); if (totalmoney != null) { sharemoney = (BigDecimal) totalmoney; } } // 邀请统计 Map inviteMap = commonOrderService.countBonusOrderMoneyAndNumber(uid, 3, dateType, null, null); if (inviteMap != null) { Object totalNum = inviteMap.get("totalNum"); if (totalNum != null) { inviteCount = totalNum; } Object totalmoney = inviteMap.get("totalmoney"); if (totalmoney != null) { inviteMoney = (BigDecimal) totalmoney; } } JSONObject data = new JSONObject(); data.put("shareCount", shareCount); data.put("sharemoney", sharemoney.setScale(2, BigDecimal.ROUND_DOWN).toString()); data.put("inviteCount", inviteCount); data.put("inviteMoney", inviteMoney.setScale(2, BigDecimal.ROUND_DOWN).toString()); data.put("showTiCheng", hongBaoV2CountService.getTotalTiChengCount(uid) > 0); out.print(JsonUtil.loadTrueResult(data)); } catch (Exception e) { out.print(JsonUtil.loadFalseResult(1, "获取信息失败")); e.printStackTrace(); } } /** * 上传解析到的淘宝订单 * * @param acceptData * @param uid * @param orderData * @param source * @param out */ @RequestMapping(value = "uploadParsedOrder", method = RequestMethod.POST) public void uploadParsedOrder(AcceptData acceptData, Long uid, String orderData, String source, PrintWriter out) { if (uid == null || StringUtil.isNullOrEmpty(orderData)) { out.print(JsonUtil.loadFalseResult(1, "数据错误")); return; } String orderId = null; try { orderId = DESUtil.decode(orderData, StringUtil.getBase64String("YeShiFANLI889*+"), StringUtil.getBase64String("*M#34f?,")); } catch (Exception e) { e.printStackTrace(); } if (!StringUtil.isNullOrEmpty(orderId) && orderId.length() > 6) { orderId = orderId.substring(orderId.length() - 6, orderId.length()); UserExtraTaoBaoInfo info = userExtraTaoBaoInfoService.getByUid(uid); if (info != null) { UserExtraTaoBaoInfo update=new UserExtraTaoBaoInfo(); update.setId(info.getId()); update.setTaoBaoOrderEnd6Num(orderId); userExtraTaoBaoInfoService.updateSelective(update); } } out.print(JsonUtil.loadTrueResult("")); } /** * 时间转换 * * @param slotTime * @param startTime * @return * @throws Exception */ public String convertDate(Integer slotTime, String endTime) throws Exception { String startTime = null; switch (slotTime) { case 1: // 最近三天 startTime = DateUtil.reduceDay(2, endTime); break; case 2: // 最近七天 startTime = DateUtil.reduceDay(6, endTime); break; case 3: // 最近15天 (半月) startTime = DateUtil.reduceDay(14, endTime); break; case 4: // 最近三十天 (本月) startTime = DateUtil.reduceDay(29, endTime); break; case 5: // 最近九十天(近三月) startTime = DateUtil.reduceDay(3 * 30 - 1, endTime); break; case 6: // 最近一百八十天(近半年) startTime = DateUtil.reduceDay(6 * 30 - 1, endTime); break; default: break; } return startTime; } }