yujian
2019-02-25 607193d080c531c7a0535f4006ac6d6b0ee27a17
fanli/src/main/java/com/yeshi/fanli/controller/apph5/AppH5UserController.java
@@ -1,13 +1,16 @@
package com.yeshi.fanli.controller.apph5;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.yeshi.utils.DateUtil;
import org.yeshi.utils.JsonUtil;
import com.alibaba.fastjson.JSONArray;
@@ -15,6 +18,7 @@
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.bus.user.UserSystemCoupon;
import com.yeshi.fanli.entity.system.SystemCoupon;
import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
import com.yeshi.fanli.service.inter.config.ConfigService;
@@ -23,6 +27,7 @@
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 com.yeshi.fanli.service.inter.user.UserSystemCouponService;
import net.sf.json.JSONObject;
@@ -55,8 +60,15 @@
   private SystemCouponService systemCouponService;
   
   
   @Resource
   private UserSystemCouponService userSystemCouponService;
   // 最大抽奖次数
   private static int MAX_COUNT = 5;
   /**
    * 获取抽奖次数
    *
    * @param callback
    * @param acceptData
    * @param uid
@@ -88,9 +100,9 @@
      }
   }
   /**
    * 获取抽奖次数
    *
    * @param callback
    * @param out
    */
@@ -133,9 +145,9 @@
      }
   }
   /**
    * 获取抽奖结果
    *
    * @param callback
    * @param acceptData
    * @param uid
@@ -144,16 +156,11 @@
   @RequestMapping(value = "getLotteryResult")
   public void getLotteryResult(String callback, AcceptData acceptData, Long uid, PrintWriter out) {
      try {
         // 奖品
      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
         String prize = "";
         Long couponId = null;
         
         if (uid == null) { // 未登录
            int platformType = 0;
@@ -172,15 +179,14 @@
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("设备不存在"));
               return;
            }
            int hasPrize = 0;
            
            List<DeviceLotteryRecord> list = deviceLotteryRecordService.listByPlatformAndDevice(platformType, device);
            if (list != null && list.size() == 5) {  // 无抽奖机会
            List<DeviceLotteryRecord> list = deviceLotteryRecordService.listByPlatformAndDevice(platformType,
                  device);
            if (list != null && list.size() == MAX_COUNT) { // 无抽奖机会
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "抽奖次数不足"));
               return;
            } else if (list != null && list.size() < 5 ){  // 拥有抽奖机会
               int hasPrize = 0;
               Long couponId = null;
            } else if (list != null && list.size() < MAX_COUNT) { // 拥有抽奖机会
               for (DeviceLotteryRecord deviceLotteryRecord: list) {
                  Long systemCouponId = deviceLotteryRecord.getSystemCouponId();
                  if (systemCouponId != null) {
@@ -188,48 +194,27 @@
                     couponId = systemCouponId;
                  }
               }
               // 前3次没有奖励时、后面两次必中
               if (hasPrize == 0 && list.size() == 3) {
                  long result = (1 + Math.round(Math.random() * (9)));
                  if (result <=5) {
                     prize = CouponTypeEnum.welfareFreeCoupon.name(); // 福利免费券
               count = MAX_COUNT - 1 - list.size();
                  } else {
                     prize = CouponTypeEnum.rebatePercentCoupon.name(); // 奖励券
               count = MAX_COUNT - 1;
                  }
                  
               } 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 {
            // 奖品
            prize = getLotteryPrize(MAX_COUNT, hasPrize, list.size(), couponId);
            // 抽中
            Long newCouponId = null;
            if (prize != null && prize.trim().length() > 0) {
               SystemCoupon coupon= systemCouponService.getCouponByType(prize);
               newCouponId =coupon.getId();
                  }
                  
               }
            }
            // 插入记录
            DeviceLotteryRecord record = new DeviceLotteryRecord();
            record.setDevice(device);
            record.setPlatform(platformType);
            record.setSystemCouponId(newCouponId);
            record.setCreateTime(new Date());
            deviceLotteryRecordService.insertSelective(record);
            
         } else { //已登录
            UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
@@ -239,37 +224,125 @@
            }
            
            Integer lotteryNewbies = userInfoExtra.getLotteryNewbies();
            if (lotteryNewbies == null ) { // 未抽过
               // 是否有过订单:返利、分享订单
               boolean hasOrder = commonOrderCountService.hasRebateAndShareOrder(uid);
               if (hasOrder) {
                  count = 0; // 不算新用户
               }
            if (lotteryNewbies == null || lotteryNewbies < 1 ) { // 次数已用光
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "抽奖次数不足"));
               return;
            } else {
               count = lotteryNewbies; // 剩余次数
            }
               count = lotteryNewbies - 1; // 剩余次数
         }
         
         // 抽奖规则
         String lotteryRule = configService.get("lottery_rule_newbies");
            List<UserSystemCoupon> list = userSystemCouponService.getUserCouponBySource(uid, UserSystemCoupon.SOURCE_CHOUJIANG);
            if (list != null && list.size() == 1) {
               couponId = list.get(0).getSystemCoupon().getId();
            }
            // 奖品
            prize = getLotteryPrize(MAX_COUNT, list.size(), MAX_COUNT- lotteryNewbies, couponId);
            // 抽中
            if (prize != null && prize.trim().length() > 0) {
               SystemCoupon coupon= systemCouponService.getCouponByType(prize);
               String endDay = DateUtil.plusDay(coupon.getExpiryDay(), new Date());
               SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
               Date endTime = format.parse(endDay);
               int stateActivated = 1;
               if (coupon.getType() == CouponTypeEnum.welfareFreeCoupon) {
                  stateActivated = 0;
               }
               UserSystemCoupon userCoupon = new UserSystemCoupon();
               userCoupon.setUid(uid);
               userCoupon.setSource(UserSystemCoupon.SOURCE_CHOUJIANG);
               userCoupon.setSystemCoupon(coupon);
               userCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
               userCoupon.setStateActivated(stateActivated);
               userCoupon.setStartTime(new Date());
               userCoupon.setEndTime(endTime);
               userCoupon.setCreateTime(new Date());
               userCoupon.setUpdateTime(new Date());
               userSystemCouponService.insertSelective(userCoupon);
            }
            // 剩余次数
            userInfoExtra.setLotteryNewbies(count);
            userInfoExtraService.saveUserInfoExtra(userInfoExtra);
         }
         if (prize == null || prize.trim().length() == 0) {
            prize = "NoPrize";
         }
         
         JSONObject data = new JSONObject();
         data.put("count", count);
         data.put("rule", lotteryRule);
         data.put("result", prize);
         
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
         
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作失败"));
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("抽奖失败"));
         e.printStackTrace();
      }
   }
   /**
    * 奖品抽取
    * @param maxCount  最大次数
    * @param hasPrize 拥有奖品数量
    * @param record  已抽次数
    * @param couponId 券id
    * @return
    */
   public String getLotteryPrize(int maxCount, int hasPrize, int record, Long couponId) {
      String prize = null;
      String freeCoupon = CouponTypeEnum.welfareFreeCoupon.name(); // 福利免费券
      String rebateCoupon =  CouponTypeEnum.rebatePercentCoupon.name(); // 奖励券
      if (hasPrize == 1 && record == maxCount - 1) {
         // 最后一次: 只收到一个奖品
         SystemCoupon systemCoupon = systemCouponService.selectByPrimaryKey(couponId);
         if (systemCoupon != null) {
            CouponTypeEnum type = systemCoupon.getType();
            if (type.name() == freeCoupon) {
               prize = rebateCoupon; // 奖励券
            } else {
               prize = freeCoupon; // 福利免费券
            }
         } else {
            prize = rebateCoupon; // 奖励券
         }
      } else if (hasPrize == 0 && record == maxCount - 2) {
         // 前3次没有奖励时、后面两次必中
         long result = (1 + Math.round(Math.random() * (9)));
         if (result <= 5) {
            prize = freeCoupon; // 福利免费券
         } else {
            prize = rebateCoupon; // 奖励券
         }
      } else { // 大于3次机会
         if (hasPrize < 2) { // 不足两个奖品
            long result = (1 + Math.round(Math.random() * (9)));
            if (result <= 3) {
               prize = freeCoupon; // 福利免费券
            } else if (result <= 6) {
               prize = rebateCoupon; // 奖励券
            }
         }
      }
      return prize;
   }
   
   /**
    * 获取抽奖结果
    *
    * @param callback
    * @param acceptData
    * @param uid
@@ -314,6 +387,8 @@
               if (hasOrder) {
                  count = 0; // 不算新用户
               }
            userInfoExtra.setLotteryNewbies(count);
            userInfoExtraService.saveUserInfoExtra(userInfoExtra);
               
            } else {
               count = lotteryNewbies; // 剩余次数
@@ -322,11 +397,6 @@
         
         return count;
   }
   
   /**
    * 生成奖项