yujian
2019-03-27 cdcbed9af813b2a02cdc01eefa24db8bec6b51a9
fanli/src/main/java/com/yeshi/fanli/controller/client/UserInfoController.java
@@ -34,25 +34,23 @@
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.yeshi.fanli.dto.HongBao;
import com.yeshi.fanli.dto.HongBaoDTO;
import com.yeshi.fanli.dto.money.AccountDetails;
import com.yeshi.fanli.dto.order.OrderItem;
import com.yeshi.fanli.entity.AppVersionInfo;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.AccountDetails;
import com.yeshi.fanli.entity.bus.user.AccountMessage;
import com.yeshi.fanli.entity.bus.user.BindingAccount;
import com.yeshi.fanli.entity.bus.user.Extract;
import com.yeshi.fanli.entity.bus.user.ExtractRecord;
import com.yeshi.fanli.entity.bus.user.HongBao;
import com.yeshi.fanli.entity.bus.user.HongBaoExtra;
import com.yeshi.fanli.entity.bus.user.LostOrder;
import com.yeshi.fanli.entity.bus.user.MoneyRecord;
import com.yeshi.fanli.entity.bus.user.OrderItem;
import com.yeshi.fanli.entity.bus.user.PassWordErrorRecord;
import com.yeshi.fanli.entity.bus.user.SMSHistory;
import com.yeshi.fanli.entity.bus.user.ThreeSale;
import com.yeshi.fanli.entity.bus.user.ThreeSaleExtraInfo;
import com.yeshi.fanli.entity.bus.user.UserActiveLog;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.bus.user.WeiXinUser;
import com.yeshi.fanli.entity.common.AdminUser;
import com.yeshi.fanli.entity.common.Config;
@@ -60,11 +58,10 @@
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.money.UserMoneyDetail;
import com.yeshi.fanli.entity.order.HongBaoOrder;
import com.yeshi.fanli.entity.system.System;
import com.yeshi.fanli.entity.system.BusinessSystem;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBriefExtra;
import com.yeshi.fanli.exception.BindingAccountException;
import com.yeshi.fanli.exception.ObjectStateException;
import com.yeshi.fanli.exception.goods.CollectionGoodsException;
import com.yeshi.fanli.exception.taobao.TaoKeApiException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
@@ -73,24 +70,21 @@
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.AdminUserService;
import com.yeshi.fanli.service.inter.config.AppVersionService;
import com.yeshi.fanli.service.inter.config.BusinessSystemService;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.config.SystemService;
import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
import com.yeshi.fanli.service.inter.goods.CollectionGoodsV2Service;
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service;
import com.yeshi.fanli.service.inter.hongbao.ThreeSaleExtraInfoSerivce;
import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.order.HongBaoOrderService;
import com.yeshi.fanli.service.inter.order.LostOrderService;
import com.yeshi.fanli.service.inter.order.OrderItemServcie;
import com.yeshi.fanli.service.inter.order.OrderService;
import com.yeshi.fanli.service.inter.user.AccountMessageService;
import com.yeshi.fanli.service.inter.user.BindingAccountService;
import com.yeshi.fanli.service.inter.user.ExtractRecordService;
import com.yeshi.fanli.service.inter.user.ExtractService;
import com.yeshi.fanli.service.inter.user.MoneyRecordService;
import com.yeshi.fanli.service.inter.user.PassWordErrorRecordService;
import com.yeshi.fanli.service.inter.user.ShamUserService;
import com.yeshi.fanli.service.inter.user.SpreadUserImgService;
import com.yeshi.fanli.service.inter.user.UserAccountService;
@@ -100,7 +94,6 @@
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserMoneyDetailService;
import com.yeshi.fanli.service.inter.user.UserShareGoodsRecordService;
import com.yeshi.fanli.service.inter.user.WxDownService;
import com.yeshi.fanli.util.AESUtil;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.GsonUtil;
@@ -135,25 +128,16 @@
   private OrderService orderService;
   @Resource
   private HongBaoService hongBaoService;
   @Resource
   private MoneyRecordService moneyRecordService;
   @Resource
   private BindingAccountService bindingAccountService;
   @Resource
   private ExtractService extractService;
   @Resource
   private PassWordErrorRecordService passWordErrorRecordService;
   @Resource
   private ConfigService configService;
   @Resource
   private SystemService systemService;
   private BusinessSystemService businessSystemService;
   @Resource
   private ShamUserService shamUserService;
@@ -168,16 +152,7 @@
   private LostOrderService lostOrderService;
   @Resource
   private OrderItemServcie orderItemServcie;
   @Resource
   private AccountMessageService accountMessageService;
   @Resource
   private HongBaoManageService hongBaoManageService;
   @Resource
   private WxDownService wxDownService;
   @Resource
   private UserAccountService loginService;
@@ -221,6 +196,12 @@
   @Resource
   private AppVersionService appVersionService;
   @Resource
   private HongBaoV2CountService hongBaoV2CountService;
   @Resource
   private AccountMessageService accountMessageService;
   private static final String PASSWORD_MAX_ERROR = "password_max_error";
   private static final String EXTRACT_MIN_MONEY = "extract_min_money";
   private static final String EXTRACT_MAX_MONEY = "extract_max_money";
@@ -248,10 +229,14 @@
         // }
         // });
         if (find != null) {
            if (find.getState() != UserInfo.STATE_NORMAL) {
               out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER,
                     Constant.FORBIDDEN_USER_REASON_DESC));
               return;
            }
            // 邀请关系生效
            threeSaleSerivce.effective(find);
            // 重新计算用户等级
            threeSaleSerivce.reComputeUserRank(id);
            // 添加用户活跃记录
            UserActiveLog userActiveLog = new UserActiveLog();
@@ -271,7 +256,8 @@
         }
      }
      // 不是用ID的登陆的事就多了
      System system = systemService.getSystemCache(acceptData.getPlatform(), acceptData.getPackages());
      BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
            acceptData.getPackages());
      if (system == null) {
         out.print(JsonUtil.loadFalseResult("系统不存在"));
         return;
@@ -457,7 +443,8 @@
         }
      }
      // 不是用ID的登陆的事就多了
      System system = systemService.getSystemCache(acceptData.getPlatform(), acceptData.getPackages());
      BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
            acceptData.getPackages());
      if (system == null) {
         out.print(JsonUtil.loadFalseResult("系统不存在"));
         return;
@@ -496,10 +483,9 @@
   }
   private void outUserInfo(AcceptData acceptData, PrintWriter out, String remotIP, UserInfo user, String device) {
      BigDecimal MyTotalMoney = hongBaoService.getMyTotalHongBaoByUid(user.getId());
      user.setTotalHongBao(MyTotalMoney);
      BigDecimal unOpenmoney = hongBaoService.getUnOpenHongBaoByUid(user.getId());
      BigDecimal canOpenMoney = hongBaoService.getCanOpenHongBaoByUid(user.getId());
      user.setTotalHongBao(new BigDecimal(0));
      BigDecimal unOpenmoney = new BigDecimal(0);
      BigDecimal canOpenMoney = new BigDecimal(0);
      user.setNoOpenHongBao(unOpenmoney);
      user.setCanOpenHongBao(canOpenMoney);
@@ -586,15 +572,30 @@
      data.put("moduleState", mySettings);
      int welfareCenterNews = 0;
      UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(user.getId());
      if (userInfoExtra != null && userInfoExtra.getCouponNews() != null) {
         welfareCenterNews = userInfoExtra.getCouponNews();
      }
      data.put("welfareCenterNews", welfareCenterNews);
      out.print(JsonUtil.loadTrueResult(data));
      final UserInfo uuser = user;
      ThreadUtil.run(new Runnable() {
         public void run() {
            try {
               // 获取邀请码:若无邀请码且存在有效的队员关系 则自动生成邀请码
               userInfoExtraService.getUserInviteCode(uuser.getId());
            } catch (UserInfoExtraException e) {
               e.printStackTrace();
            }
            LogHelper.userInfo(GsonUtil.toJsonExpose(uuser));
            uuser.setLastLoginIp(remotIP);
            uuser.setLastLoginTime(java.lang.System.currentTimeMillis());
            userInfoService.updateLoginInfo(uuser);
            wxDownService.save(device);
            // 更新用户附加信息,老用户不存在的需要添加
            try {
               userInfoExtraService.updateUserRankByUid(uuser.getId());
@@ -696,98 +697,6 @@
      }
      userInfoService.unBindUserInfo(find, type);
      out.print(JsonUtil.loadTrueResult("解绑成功"));
   }
   /**
    * 获取提现记录
    *
    * @param acceptData
    * @param uid
    *            用户id
    * @param page
    *            页数(从0开始)
    * @param out
    */
   @RequestMapping(value = "getmoneyrecord", method = RequestMethod.POST)
   public void getMoneyRecord(AcceptData acceptData, long uid, int page, PrintWriter out) {
      UserInfo user = userInfoService.getUserById(uid);
      if (user == null) {
         out.print(JsonUtil.loadFalseResult("用户不存在"));
         return;
      }
      if (page < 0) {
         page = 0;
      }
      List<MoneyRecord> moneyRecordList = moneyRecordService.getMoneyRecord(uid, page);
      int count = moneyRecordService.getCount(uid);
      JSONObject data = new JSONObject();
      if (moneyRecordList == null || moneyRecordList.size() == 0) {
         data.put("count", 0);
         data.put("moneyRecordList", new ArrayList());
         out.print(JsonUtil.loadTrueResult(data));
         return;
      }
      data.put("count", count);
      Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
      data.put("moneyRecordList", gson.toJson(moneyRecordList));
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    * 获取当前用户红包
    *
    * @param acceptData
    * @param uid
    *            用户id
    * @param out
    * @throws ObjectStateException
    */
   @RequestMapping(value = "gethongbao", method = RequestMethod.POST)
   public void getHongBao(AcceptData acceptData, long uid, PrintWriter out) {
      UserInfo user = userInfoService.getUserById(uid);
      JSONObject data = new JSONObject();
      if (user == null) {
         data.put("count", 0);
         data.put("hongBaoList", new ArrayList());
         data.put("error", "用户不存在");
         out.print(JsonUtil.loadTrueResult(data));
         return;
      }
      List<HongBaoExtra> hongBaoList = hongBaoService.getHongBao(uid);
      if (hongBaoList.size() == 0) {
         data.put("count", 0);
         data.put("hongBaoList", hongBaoList);
         out.print(JsonUtil.loadTrueResult(data));
         return;
      }
      data.put("count", hongBaoList.size());
      data.put("hongBaoList", GsonUtil.toJsonExpose(hongBaoList));
      out.print(JsonUtil.loadTrueResult(data));
      return;
   }
   /**
    * 设置提现密码
    *
    * @param acceptData
    * @param payPassword
    *            提现密码(要经过md5加密)
    * @param uid
    *            用户id
    * @param out
    */
   @RequestMapping(value = "setpaypassword", method = RequestMethod.POST)
   public void setPayPassword(AcceptData acceptData, String payPassword, long uid, PrintWriter out) {
      UserInfo user = userInfoService.getUserById(uid);
      if (user == null) {
         out.print(JsonUtil.loadFalseResult("用户不存在"));
         return;
      }
      user.setPayPassword(payPassword);
      userInfoService.update(user);
      out.print(JsonUtil.loadTrueResult("设置成功"));
   }
   /**
@@ -1057,39 +966,6 @@
   }
   /**
    * 客户端提现密码输入错误时调用
    *
    * @param acceptData
    * @param uid
    *            用户id
    * @param out
    */
   @RequestMapping(value = "errormax", method = RequestMethod.POST)
   public void errorMax(AcceptData acceptData, long uid, PrintWriter out) {
      UserInfo user = userInfoService.getUserById(uid);
      if (user == null) {
         out.print(JsonUtil.loadFalseResult("用户不存在"));
         return;
      }
      PassWordErrorRecord record = passWordErrorRecordService.getRecord(user.getId());
      record.setUserInfo(user);
      String maxErrorStr = "5";
      maxErrorStr = configService.get(PASSWORD_MAX_ERROR); // 当日输错密码最多次数
      int maxError = Integer.parseInt(maxErrorStr);
      int count = passWordErrorRecordService.setRecord(record);
      JSONObject data = new JSONObject();
      int c = maxError - count;
      if (c <= 0) { // 当错误次数还未超过当日输错最多次数时,state为1,代表还能继续输入,little为剩余次数。state为2则不能继续输入,提现客户端退出输入密码界面
         data.put("state", "2");
         data.put("little", 0);
      } else {
         data.put("state", "1");
         data.put("little", c);
      }
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    * 添加用户提现账号
    * 
    * @param acceptData
@@ -1164,107 +1040,6 @@
      return;
   }
   /**
    * 提现
    *
    * @param acceptData
    * @param uid
    *            用户id
    * @param money
    *            提现金额
    * @param pwd
    *            密码
    * @param request
    * @param type
    *            提现账户类型
    * @param out
    */
   @RequestMapping(value = "extractmoney", method = RequestMethod.POST)
   public void extractMoney(AcceptData acceptData, long uid, double money, String pwd, HttpServletRequest request,
         int type, PrintWriter out) {
      UserInfo user = userInfoService.getUserById(uid);
      LogHelper.userInfo("[ip:" + IPUtil.getRemotIP(request) + "]");
      if (user == null) {
         LogHelper.userInfo("不存在该用户:uid=" + uid);
         out.print(JsonUtil.loadFalseResult("用户不存在"));
         return;
      }
      System system = systemService.getSystemCache(acceptData.getPlatform(), acceptData.getPackages());
      if (system == null) {
         LogHelper.userInfo("提现时,不存在该系统");
         out.print(JsonUtil.loadFalseResult("系统不存在"));
         return;
      }
      PassWordErrorRecord record = passWordErrorRecordService.getRecord(user.getId());
      int errorcount = record.getCount();
      String maxStr = "5";
      maxStr = configService.get(PASSWORD_MAX_ERROR);
      int max = Integer.parseInt(maxStr);
      if (max <= errorcount) {
         LogHelper.userInfo("[ip:" + IPUtil.getRemotIP(request) + "]用户[" + GsonUtil.toJson(user) + "]:提现密码错误已达上限!");
         out.print(JsonUtil.loadFalseResult("提现密码已达到每日错误次数上限,请明日再试!"));
         return;
      }
      if (pwd == null || !pwd.equals(user.getPayPassword())) {
         passWordErrorRecordService.setRecord(record);
         out.print(JsonUtil.loadFalseResult("支付密码错误"));
         return;
      }
      passWordErrorRecordService.deleteRecord(uid);// 当提现密码输入正确时,清除当前用户的密码错误输入记录
      String minMoney = configService.get(EXTRACT_MIN_MONEY); // 单笔提现最小金额
      if (money < 0.1) { // 转帐到支付宝的最小金额
         out.print(JsonUtil.loadFalseResult("单笔提现金额需要大于:" + 0.1 + "元"));
         return;
      }
      double dminMoney = Double.parseDouble(minMoney);
      if (money < dminMoney) { // 后台设置的单笔转账的最小金额
         out.print(JsonUtil.loadFalseResult("单笔提现金额需要大于:" + dminMoney + "元"));
         return;
      }
      String maxMoney = configService.get(EXTRACT_MAX_MONEY); // 单笔提现最大金额
      double dmaxMoney = Double.parseDouble(maxMoney);
      if (dmaxMoney < money) { // 后台设置的单笔转账的最大金额
         out.print(JsonUtil.loadFalseResult("单笔提现金额多为:" + dmaxMoney + "元"));
         return;
      }
      if (type != Constant.ZHIFUBAO && type != Constant.WEIXIN) { // 提现类型必须是支付宝类型或者微信类型,目前(20170506)仅支持支付宝
         out.print(JsonUtil.loadFalseResult(Constant.NOTYPE));
         return;
      }
      BindingAccount bindingAccount = bindingAccountService.getBindingAccountByUidAndType(uid, type);
      if (bindingAccount == null) {
         out.print(JsonUtil.loadFalseResult(Constant.NOACCOUNT));
         return;
      }
      Extract extract = new Extract();
      extract.setIp(IPUtil.getRemotIP(request));
      extract.setAccount(bindingAccount.getAccount());
      extract.setName(bindingAccount.getName());
      extract.setMoney(new BigDecimal(String.valueOf(money)));
      extract.setUserInfo(user);
      extract.setExtractTime(java.lang.System.currentTimeMillis());
      extract.setType(type);
      extract.setState(0);
      extract.setSystem(system);
      Integer etype = extractService.addExtract(extract);
      if (etype == null) {
         out.print(JsonUtil.loadTrueResult("操作成功"));
         return;
      } else if (etype == 1 || etype == 2) {
         out.print(JsonUtil.loadFalseResult("已超过当日提现次数或提现金额"));
      } else if (etype == 3) {
         out.print(JsonUtil.loadFalseResult("提现金额大于我的红包"));
      }
   }
   /**
    * 新版提现
@@ -1283,6 +1058,12 @@
         HttpServletRequest request, int type, PrintWriter out) {
      UserInfo user = userInfoService.getUserById(uid);
      if (user == null) {
         user = userInfoService.getUserByIdWithMybatis(uid);
         if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
            out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
            return;
         }
         out.print(JsonUtil.loadFalseResult("用户不存在"));
         return;
      }
@@ -1299,7 +1080,8 @@
         return;
      }
      System system = systemService.getSystemCache(acceptData.getPlatform(), acceptData.getPackages());
      BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
            acceptData.getPackages());
      if (system == null) {
         LogHelper.userInfo("提现时,不存在该系统");
         out.print(JsonUtil.loadFalseResult("系统不存在"));
@@ -1425,21 +1207,6 @@
      out.print(JsonUtil.loadTrueResult(data));
   }
   @RequestMapping(value = "openhongbao")
   public void openHongBao(AcceptData acceptData, long hid, HttpServletRequest request, PrintWriter out) {
      String ip = IPUtil.getRemotIP(request);
      HongBaoExtra hbx = hongBaoService.open(hid, ip);
      if (hbx == null) {
         out.print(JsonUtil.loadFalseResult("红包异常"));
         LogHelper.userInfo("[ip:" + IPUtil.getRemotIP(request) + "] 打开红包[id=" + hid + "]失败!");
         return;
      }
      JSONObject data = new JSONObject();
      data.put("hongBao", GsonUtil.toJsonExpose(hbx));
      out.print(JsonUtil.loadTrueResult(data));
      LogHelper.userInfo("[ip:" + IPUtil.getRemotIP(request) + "] 打开红包[id=" + hid + "]成功!");
   }
   @RequestMapping("findLostOrder")
   public void findLostOrder(AcceptData acceptData, LostOrder lostOrder, PrintWriter out) {
      boolean orderNum = true;
@@ -1516,21 +1283,6 @@
      JSONObject data = new JSONObject();
      data.put("list", gson.toJson(orderItemList));
      data.put("count", count);
      out.print(JsonUtil.loadTrueResult(data));
   }
   @RequestMapping("getOrderItem")
   public void getOrderItem(AcceptData acceptData, long id, PrintWriter out) {
      OrderItem orderItem = orderItemServcie.getOne(id);
      if (orderItem == null) {
         out.print(JsonUtil.loadFalseResult("不存在该订单"));
         return;
      }
      orderItem.setDesc();
      JSONObject data = new JSONObject();
      GsonBuilder gsonBuilder = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder());
      Gson gson = gsonBuilder.excludeFieldsWithoutExposeAnnotation().create();
      data.put("orderItem", gson.toJson(orderItem));
      out.print(JsonUtil.loadTrueResult(data));
   }
@@ -1799,19 +1551,6 @@
      }
      data.put("list", array);
      data.put("count", count);
      out.print(JsonUtil.loadTrueResult(data));
   }
   @RequestMapping(value = "isWxDown")
   public void isWxDown(AcceptData acceptData, PrintWriter out) {
      boolean b = wxDownService.isWxDownFirstLogin(acceptData.getDevice());
      // IOS上线测试
      if (Integer.parseInt(acceptData.getVersion()) >= 22
            && acceptData.getPackages().equalsIgnoreCase(Constant.systemCommonConfig.getIosBundleId()))
         b = false;
      JSONObject data = new JSONObject();
      data.put("isFirst", b);
      out.print(JsonUtil.loadTrueResult(data));
   }