admin
2019-06-14 1e92eff67b997263ecefa255c63eb6641c47b57f
fanli/src/main/java/com/yeshi/fanli/controller/apph5/AppH5UserController.java
@@ -11,23 +11,13 @@
import org.yeshi.utils.JsonUtil;
import com.alibaba.fastjson.JSONArray;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.DeviceLotteryRecord;
import com.yeshi.fanli.entity.bus.user.ShamUser;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.system.SystemCoupon;
import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.config.SystemCouponService;
import com.yeshi.fanli.service.inter.order.CommonOrderCountService;
import com.yeshi.fanli.service.inter.user.DeviceLotteryRecordService;
import com.yeshi.fanli.service.inter.user.ShamUserService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import net.sf.json.JSONObject;
/**
 *   用户
 * 用户
 * 
 * @author Administrator
 *
@@ -36,61 +26,14 @@
@RequestMapping("api/apph5/v1/user")
public class AppH5UserController {
   @Resource
   private DeviceLotteryRecordService deviceLotteryRecordService;
   @Resource
   private UserInfoExtraService userInfoExtraService;
   @Resource
   private CommonOrderCountService commonOrderCountService;
   @Resource
   private ShamUserService shamUserService;
   @Resource
   private ConfigService configService;
   @Resource
   private SystemCouponService systemCouponService;
   /**
    * 获取抽奖次数
    * @param callback
    * @param acceptData
    * @param uid
    * @param out
    */
   @RequestMapping(value = "getLotteryCount")
   public void getLotteryCount(String callback, AcceptData acceptData, Long uid, PrintWriter out) {
      int count = 0;
      try {
         count = getSurplusCount(acceptData, uid);
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMessage()));
         e.printStackTrace();
      }
      try {
         // 抽奖规则
         String lotteryRule = configService.get("lottery_rule_newbies");
         JSONObject data = new JSONObject();
         data.put("count", count);
         data.put("rule", lotteryRule);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作失败"));
         e.printStackTrace();
      }
   }
   
   /**
    * 获取抽奖次数
    * 获取抽奖广告列表
    *
    * @param callback
    * @param out
    */
@@ -100,282 +43,88 @@
      try {
         // 随机20条数据
         List<ShamUser> listUser = shamUserService.listRandUser(20);
         JSONArray array = new JSONArray();
         for (ShamUser shamUser: listUser) {
         for (ShamUser shamUser : listUser) {
            JSONObject dataInfo = new JSONObject();
            String name = shamUser.getName();
            if (name.length() == 1) {
               name = "Jx****" + name;
            } else {
               name = name.substring(0, 1) + "****" + name.substring(name.length() - 2, name.length() - 1);
            }
            String prize = generateAward();
            if (prize == null) {
               prize = "抽中一张福利免单券";
               prize = "一张福利免单券";
            }
            dataInfo.put("pic", shamUser.getPicUrl());
            dataInfo.put("content", name + ",抽中" + prize);
            array.add(dataInfo);
         }
         JSONObject data = new JSONObject();
         data.put("result_list", array);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作失败"));
         e.printStackTrace();
      }
   }
   /**
    * 获取抽奖结果
    * @param callback
    * @param acceptData
    * @param uid
    * @param out
    */
   @RequestMapping(value = "getLotteryResult")
   public void getLotteryResult(String callback, AcceptData acceptData, Long uid, PrintWriter out) {
      int count = 0;
      try {
         count = getSurplusCount(acceptData, uid);
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMessage()));
         e.printStackTrace();
      }
      try {
         String prize = "No_Prizes"; // freeCoupon 、 rebateCoupon
         if (uid == null) { // 未登录
            int platformType = 0;
            String platform = acceptData.getPlatform();
            if ("android".equals(platform)) {
               platformType = 1;
            } else if ("ios".equals(platform)) {
               platformType = 2;
            } else {
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("平台有误"));
               return;
            }
            String device = acceptData.getDevice();
            if (device == null || device.trim().length() == 0) {
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("设备不存在"));
               return;
            }
            List<DeviceLotteryRecord> list = deviceLotteryRecordService.listByPlatformAndDevice(platformType, device);
            if (list != null && list.size() == 5) {  // 无抽奖机会
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "抽奖次数不足"));
               return;
            } else if (list != null && list.size() < 5 ){  // 拥有抽奖机会
               int hasPrize = 0;
               Long couponId = null;
               for (DeviceLotteryRecord deviceLotteryRecord: list) {
                  Long systemCouponId = deviceLotteryRecord.getSystemCouponId();
                  if (systemCouponId != null) {
                     hasPrize ++;
                     couponId = systemCouponId;
                  }
               }
               // 前3次没有奖励时、后面两次必中
               if (hasPrize == 0 && list.size() == 3) {
                  long result = (1 + Math.round(Math.random() * (9)));
                  if (result <=5) {
                     prize = CouponTypeEnum.welfareFreeCoupon.name(); // 福利免费券
                  } else {
                     prize = CouponTypeEnum.rebatePercentCoupon.name(); // 奖励券
                  }
               } else if (hasPrize == 1 && list.size() == 4) {
                  SystemCoupon systemCoupon = systemCouponService.selectByPrimaryKey(couponId);
                  if (systemCoupon != null) {
                     CouponTypeEnum type = systemCoupon.getType();
                     if (type == CouponTypeEnum.welfareFreeCoupon) {
                        prize = CouponTypeEnum.rebatePercentCoupon.name(); // 奖励券
                     } else {
                        prize = CouponTypeEnum.welfareFreeCoupon.name(); // 福利免费券
                     }
                  } else {
                     prize = CouponTypeEnum.rebatePercentCoupon.name(); // 奖励券
                  }
               } else { // 大于3次机会
                  if (hasPrize < 2 ) { // 不足两个奖品
                  } else {
                  }
               }
            }
         } else { //已登录
            UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
            if (userInfoExtra == null) {
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("信息不正确"));
               return;
            }
            Integer lotteryNewbies = userInfoExtra.getLotteryNewbies();
            if (lotteryNewbies == null ) { // 未抽过
               // 是否有过订单:返利、分享订单
               boolean hasOrder = commonOrderCountService.hasRebateAndShareOrder(uid);
               if (hasOrder) {
                  count = 0; // 不算新用户
               }
            } else {
               count = lotteryNewbies; // 剩余次数
            }
         }
         // 抽奖规则
         String lotteryRule = configService.get("lottery_rule_newbies");
         JSONObject data = new JSONObject();
         data.put("count", count);
         data.put("rule", lotteryRule);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作失败"));
         e.printStackTrace();
      }
   }
   /**
    * 获取抽奖结果
    * @param callback
    * @param acceptData
    * @param uid
    * @param out
    */
   public int getSurplusCount(AcceptData acceptData, Long uid) throws Exception {
         //默认最大抽奖次数
         int count = 5;
         if (uid == null) { // 未登录
            int platformType = 0;
            String platform = acceptData.getPlatform();
            if ("android".equals(platform)) {
               platformType = 1;
            } else if ("ios".equals(platform)) {
               platformType = 2;
            } else {
               throw new Exception("平台有误");
            }
            String device = acceptData.getDevice();
            if (device == null || device.trim().length() == 0) {
               throw new Exception("设备不存在");
            }
            List<DeviceLotteryRecord> list = deviceLotteryRecordService.listByPlatformAndDevice(platformType, device);
            if (list != null && list.size() > 0) {
               count = count - list.size();
            }
         } else { //已登录
            UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
            if (userInfoExtra == null) {
               throw new Exception("信息不正确");
            }
            Integer lotteryNewbies = userInfoExtra.getLotteryNewbies();
            if (lotteryNewbies == null ) { // 未抽过
               // 是否有过订单:返利、分享订单
               boolean hasOrder = commonOrderCountService.hasRebateAndShareOrder(uid);
               if (hasOrder) {
                  count = 0; // 不算新用户
               }
            } else {
               count = lotteryNewbies; // 剩余次数
            }
         }
         return count;
   }
   /**
    * 生成奖项
    * 
    * @return
    */
   public String generateAward() {
      RandomGift randomGift1 = new RandomGift();
      randomGift1.prize = "抽中华为手机20一台";
      randomGift1.probability = 2;
      RandomGift randomGift2 = new RandomGift();
      randomGift2.prize = "现金红包¥188";
      randomGift2.probability = 5;
      RandomGift randomGift3 = new RandomGift();
      randomGift3.prize = "现金红包¥88";
      randomGift3.probability = 13;
      RandomGift randomGift4 = new RandomGift();
      randomGift4.prize = "一张福利免单券";
      randomGift4.probability = 40;
      RandomGift randomGift5 = new RandomGift();
      randomGift5.prize = "一张返利奖励券";
      randomGift5.probability = 40;
      List<RandomGift> giftList = new ArrayList<RandomGift>();
      giftList.add(randomGift1);
      giftList.add(randomGift2);
      giftList.add(randomGift3);
      giftList.add(randomGift4);
      giftList.add(randomGift5);
      long result = (1 + Math.round(Math.random() * (99)));
      int minRange = 0;
      int maxRange = 0;
      String prize = null;
      for (int i = 0; i < giftList.size(); i++) {
         RandomGift obj2 = giftList.get(i);
         int probability = obj2.probability;
         maxRange = maxRange + probability;
         minRange = 100 - maxRange;
         if (probability != 0) {
            if (result > minRange && result <= maxRange) {
               prize = obj2.prize;
@@ -383,10 +132,117 @@
            }
         }
      }
      return prize;
   }
   /**
    * 获取抽奖广告列表
    *
    * @param callback
    * @param out
    */
   @RequestMapping(value = "getDailyRadioList")
   public void getDailyRadioList(String callback, PrintWriter out) {
      try {
         // 随机20条数据
         List<ShamUser> listUser = shamUserService.listRandUser(20);
         JSONArray array = new JSONArray();
         for (ShamUser shamUser : listUser) {
            JSONObject dataInfo = new JSONObject();
            String name = shamUser.getName();
            if (name.length() == 1) {
               name = "Jx****" + name;
            } else {
               name = name.substring(0, 1) + "****" + name.substring(name.length() - 2, name.length() - 1);
            }
            String prize = dailyGenerateAward();
            if (prize == null) {
               prize = "两张返利奖励券";
            }
            dataInfo.put("pic", shamUser.getPicUrl());
            dataInfo.put("content", name + ",抽中" + prize);
            array.add(dataInfo);
         }
         JSONObject data = new JSONObject();
         data.put("result_list", array);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作失败"));
         e.printStackTrace();
      }
   }
   /**
    * 生成奖项-天天抽
    *
    * @return
    */
   public String dailyGenerateAward() {
      RandomGift randomGift1 = new RandomGift();
      randomGift1.prize = "抽中华为手机20一台";
      randomGift1.probability = 2;
      RandomGift randomGift2 = new RandomGift();
      randomGift2.prize = "现金红包¥188";
      randomGift2.probability = 5;
      RandomGift randomGift3 = new RandomGift();
      randomGift3.prize = "现金红包¥88";
      randomGift3.probability = 13;
      RandomGift randomGift4 = new RandomGift();
      randomGift4.prize = "两张返利奖励券";
      randomGift4.probability = 40;
      RandomGift randomGift5 = new RandomGift();
      randomGift5.prize = "一张返利奖励券";
      randomGift5.probability = 40;
      List<RandomGift> giftList = new ArrayList<RandomGift>();
      giftList.add(randomGift1);
      giftList.add(randomGift2);
      giftList.add(randomGift3);
      giftList.add(randomGift4);
      giftList.add(randomGift5);
      long result = (1 + Math.round(Math.random() * (99)));
      int minRange = 0;
      int maxRange = 0;
      String prize = null;
      for (int i = 0; i < giftList.size(); i++) {
         RandomGift obj2 = giftList.get(i);
         int probability = obj2.probability;
         maxRange = maxRange + probability;
         minRange = 100 - maxRange;
         if (probability != 0) {
            if (result > minRange && result <= maxRange) {
               prize = obj2.prize;
               break;
            }
         }
      }
      return prize;
   }
   class RandomGift {
      public String prize;// 奖项
      public int probability; // 概率