admin
2019-02-28 4e938ce8cf18ebb12c102e7c18c1ca16fe1b15a8
fanli/src/main/java/com/yeshi/fanli/controller/client/UserCouponController.java
@@ -1,17 +1,16 @@
package com.yeshi.fanli.controller.client;
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.core.task.TaskExecutor;
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 com.yeshi.fanli.entity.accept.AcceptData;
@@ -21,10 +20,12 @@
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.exception.user.UserInfoExtraException;
import com.yeshi.fanli.exception.user.UserSystemCouponException;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.config.SystemCouponService;
import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService;
import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.order.CommonOrderCountService;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.user.DeviceLotteryRecordService;
@@ -44,6 +45,9 @@
@Controller
@RequestMapping("api/v1/user/coupon")
public class UserCouponController {
   @Resource(name = "taskExecutor")
   private TaskExecutor executor;
   @Resource
   private ConfigService configService;
@@ -72,6 +76,8 @@
   @Resource
   private CommonOrderCountService commonOrderCountService;
   @Resource
   private ThreeSaleSerivce threeSaleSerivce;
   
   // 最大抽奖次数
   private static int MAX_COUNT = 5;
@@ -120,6 +126,26 @@
         data.put("result_list", JsonUtil.getApiCommonGson().toJson(resultList));
         out.print(JsonUtil.loadTrueResult(data));
         // 更新福利中心未读数量
         if (page == 1) {
            executor.execute(new Runnable() {
               @Override
               public void run() {
                  UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
                  // 未读券是否大于0
                  if (userInfoExtra != null && userInfoExtra.getCouponNews() > 0) {
                     userInfoExtra.setCouponNews(0);
                     try {
                        userInfoExtraService.saveUserInfoExtra(userInfoExtra);
                     } catch (UserInfoExtraException e) {
                        e.printStackTrace();
                     }
                  }
               }
            });
         }
      } catch (UserSystemCouponException e) {
         out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
@@ -134,21 +160,23 @@
    * @param acceptData
    * @param page
    * @param uid
    * @param auctionId 商品id
    * @param out
    */
   @RequestMapping(value = "getGoodsCouponList", method = RequestMethod.POST)
   public void getGoodsCouponList(AcceptData acceptData, Long uid, PrintWriter out) {
   public void getGoodsCouponList(AcceptData acceptData, Long uid, Long auctionId, PrintWriter out) {
      if (uid == null) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      
      try {
         List<UserSystemCouponVO> resultList = UserSystemCouponService.getGoodsCouponList(uid);
         List<UserSystemCouponVO> resultList = UserSystemCouponService.getGoodsCouponList(uid, auctionId);
         
         if (resultList == null ) {
            resultList =new ArrayList<UserSystemCouponVO>();
         }
         
         JSONObject dataTip = new JSONObject();
         dataTip.put("content", configService.get("free_coupon_tip"));
@@ -368,6 +396,7 @@
         // 奖品
         int count = 0;
         String prize = "";
         String hasPrize = "";
         Long couponId = null;
         
         if (uid == null) { // 未登录
@@ -387,7 +416,7 @@
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("设备不存在"));
               return;
            }
            int hasPrize = 0;
            int countPrize = 0;
            
            List<DeviceLotteryRecord> list = deviceLotteryRecordService.listByPlatformAndDevice(platformType,
                  device);
@@ -395,25 +424,40 @@
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "抽奖次数不足"));
               return;
            } else if (list != null && list.size() < MAX_COUNT) { // 拥有抽奖机会
               for (DeviceLotteryRecord deviceLotteryRecord : list) {
                  Long systemCouponId = deviceLotteryRecord.getSystemCouponId();
                  if (systemCouponId != null) {
                     hasPrize++;
                     countPrize++;
                     couponId = systemCouponId;
                  }
                  if (countPrize == 1) {
                     SystemCoupon coupon = systemCouponService.selectByPrimaryKey(systemCouponId);
                     hasPrize = coupon.getType().name();
                  }
               }
               count = MAX_COUNT - 1 - list.size();
            } else {
               count = MAX_COUNT - 1;
            }
            // 奖品
            prize = getLotteryPrize(MAX_COUNT, hasPrize, list.size(), couponId);
            prize = getLotteryPrize(MAX_COUNT, countPrize, list.size(), couponId);
            // 抽中
            Long newCouponId = null;
            if (prize != null && prize.trim().length() > 0) {
               SystemCoupon coupon= systemCouponService.getCouponByType(prize);
               newCouponId =coupon.getId();
               // 已存在此券
               if (hasPrize.equals(prize)) {
                  prize = null;
               } else {
                  SystemCoupon coupon= systemCouponService.getCouponByType(prize);
                  newCouponId = coupon.getId();
               }
            }
            
            // 插入记录
@@ -442,34 +486,21 @@
            List<UserSystemCoupon> list = userSystemCouponService.getUserCouponBySource(uid, UserSystemCoupon.SOURCE_CHOUJIANG);
            if (list != null && list.size() == 1) {
               couponId = list.get(0).getSystemCoupon().getId();
               SystemCoupon coupon = systemCouponService.selectByPrimaryKey(couponId);
               hasPrize = coupon.getType().name();
            }
            
            // 奖品
            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;
               if (hasPrize.equals(prize)) {
                  prize = null;
               } else {
                  // 插入券信息
                  userSystemCouponService.insertUserCoupon(uid, prize, UserSystemCoupon.SOURCE_CHOUJIANG);
               }
               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);
            }
            
            // 剩余次数
@@ -501,13 +532,13 @@
    * @param couponId 券id
    * @return
    */
   public String getLotteryPrize(int maxCount, int hasPrize, int record, Long couponId) {
   public String getLotteryPrize(int maxCount, int countPrize, int record, Long couponId) {
      
      String prize = null; 
      String freeCoupon = CouponTypeEnum.welfareFreeCoupon.name(); // 福利免费券
      String rebateCoupon =  CouponTypeEnum.rebatePercentCoupon.name(); // 奖励券
      
      if (hasPrize == 1 && record == maxCount - 1) {
      if (countPrize == 1 && record == maxCount - 1) {
         // 最后一次: 只收到一个奖品
         SystemCoupon systemCoupon = systemCouponService.selectByPrimaryKey(couponId);
         if (systemCoupon != null) {
@@ -521,7 +552,7 @@
            prize = rebateCoupon; // 奖励券
         }
         
      } else if (hasPrize == 0 && record == maxCount - 2) {
      } else if (countPrize == 0 && record == maxCount - 2) {
         // 前3次没有奖励时、后面两次必中
         long result = (1 + Math.round(Math.random() * (9)));
         if (result <= 5) {
@@ -532,7 +563,7 @@
         
      } else { // 大于3次机会
         if (hasPrize < 2) { // 不足两个奖品
         if (countPrize < 2) { // 不足两个奖品
            long result = (1 + Math.round(Math.random() * (9)));
            if (result <= 3) {
               prize = freeCoupon; // 福利免费券
@@ -545,7 +576,6 @@
      return prize;
   }
   
   /**
    * 获取抽奖结果
@@ -596,7 +626,6 @@
            }
            userInfoExtra.setLotteryNewbies(count);
            userInfoExtraService.saveUserInfoExtra(userInfoExtra);
         } else {
            count = lotteryNewbies; // 剩余次数
         }