admin
2020-05-20 98b1a0affd69bbe63223c21fdd2c404e8bedfccb
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserCouponController.java
@@ -2,9 +2,7 @@
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
@@ -15,12 +13,8 @@
import org.yeshi.utils.JsonUtil;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.homemodule.SwiperPicture;
import com.yeshi.fanli.entity.bus.user.DeviceLotteryRecord;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.bus.user.UserLotteryRecord;
import com.yeshi.fanli.entity.system.SystemCoupon;
import com.yeshi.fanli.exception.user.UserLotteryRecordException;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.exception.user.UserSystemCouponException;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.config.SystemCouponService;
@@ -28,10 +22,11 @@
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.user.DeviceLotteryRecordService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserLotteryRecordService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
import com.yeshi.fanli.service.inter.user.invite.UserInviteService;
import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.vo.homemodule.BannerVO;
import com.yeshi.fanli.vo.user.UserSystemCouponRecordVO;
import com.yeshi.fanli.vo.user.UserSystemCouponVO;
@@ -74,12 +69,11 @@
   @Resource
   private UserInfoExtraService userInfoExtraService;
   @Resource
   private UserLotteryRecordService userLotteryRecordService;
   @Resource
   private UserVIPInfoService userVIPInfoService;
   @Resource
   private UserInviteService userInviteService;
   /**
    * 用户券列表查询
@@ -104,7 +98,7 @@
         // 福利中心图片
         String topPicture = null;
         if (page == 1) {
            List<SwiperPicture> listswiper = swiperPictureService.getByBannerCardAndVersion("welfare_top",acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()));
            List<BannerVO> listswiper = swiperPictureService.getByBannerCardAndVersion("welfare_top",acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()));
            if (listswiper != null && listswiper.size() > 0) {
               topPicture = listswiper.get(0).getSrc();
            }
@@ -184,11 +178,11 @@
         }
         JSONObject dataTip = new JSONObject();
         dataTip.put("content", configService.get("free_coupon_tip"));
         dataTip.put("content", configService.get(ConfigKeyEnum.freeCouponTip.getKey()));
         dataTip.put("fontColor", "#F14242");
         JSONObject data = new JSONObject();
         data.put("helpLink", configService.get("free_coupon_help"));
         data.put("helpLink", configService.get(ConfigKeyEnum.freeCouponHelp.getKey()));
         data.put("tip", dataTip);
         data.put("count", resultList.size());
         data.put("result_list", JsonUtil.getApiCommonGson().toJson(resultList));
@@ -257,7 +251,7 @@
         }
         JSONObject data = new JSONObject();
         data.put("helpLink", configService.get("reward_coupon_help"));
         data.put("helpLink", configService.get(ConfigKeyEnum.rewardCouponHelp.getKey()));
         data.put("count", resultList.size());
         data.put("result_list", JsonUtil.getApiCommonGson().toJson(resultList));
@@ -279,31 +273,30 @@
    * @param uid
    * @param out
    */
   @RequestMapping(value = "useRewardCoupon", method = RequestMethod.POST)
   public void useRewardCoupon(AcceptData acceptData, Long uid, Long cid, String orderNo, Integer goodsType, PrintWriter out) {
   @RequestMapping(value = "useRewardCoupon")
   public void useRewardCoupon(String callback, AcceptData acceptData, Long uid, Long cid, String orderNo, Integer goodsType, PrintWriter out) {
      if (uid == null) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (userVIPInfoService.isVIP(uid)) {
         out.print(JsonUtil.loadFalseResult("超级会员不可使用奖励券"));
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      
      // 当前用户是否VIP
      boolean vip = userInviteService.verifyVIP(uid);
      if (vip) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("会员不可使用奖励券"));
         return;
      }
      if (goodsType == null || goodsType > 3 || goodsType < 1) {
         goodsType = Constant.SOURCE_TYPE_TAOBAO;
      }
      try {
         UserSystemCouponService.useOrderCoupon(uid, cid, orderNo, goodsType, acceptData);
         JSONObject data = commonOrderService.getRewardJumpInfo(orderNo, goodsType);
         out.print(JsonUtil.loadTrueResult(data));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (UserSystemCouponException e) {
         out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult(1, "使用失败"));
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "使用失败"));
         e.printStackTrace();
      }
   }
@@ -359,225 +352,6 @@
         e.printStackTrace();
      }
   }
   /**
    * 获取抽奖次数
    *
    * @param callback
    * @param acceptData
    * @param uid
    * @param out
    */
   // @RequestMapping(value = "getLotteryCount")
   public void getLotteryCount(String callback, AcceptData acceptData, Long uid, PrintWriter out) {
      try {
         // 1、已登录系统
         if (uid != null) {
            JSONObject data = userLotteryRecordService.getLotteryCountNewbies(uid);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
            return;
         }
         // 2、未登录系统 - 记录设备
         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);
         int count = UserLotteryRecord.COUNT_NEWBIES;
         if (list != null && list.size() > 0) {
            count = count - list.size();
         }
         // 抽奖规则
         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 (UserLotteryRecordException e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
      } 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) {
      try {
         // 1、已登录用户抽奖
         if (uid != null) {
            Map<String, Object> map = userLotteryRecordService.executeLotteryNewbies(uid);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(map));
            return;
         }
         // 2、未登录用户抽奖
         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() >= UserLotteryRecord.COUNT_NEWBIES) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "抽奖次数不足"));
            return;
         }
         // 设备抽奖
         JSONObject data = getDevicePrize(list, device, platformType);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (UserLotteryRecordException e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("抽奖失败"));
         e.printStackTrace();
      }
   }
   
   /**
    * 设备信息抽奖-未登录
    * @param list
    * @param device
    * @param platformType
    * @return
    */
   public JSONObject getDevicePrize(List<DeviceLotteryRecord> list, String device, int platformType) {
      int count = 0;
      int countPrize = 0;
      Long couponId = null;
      if (list == null || list.size() == 0) { // 拥有抽奖机会
         count = UserLotteryRecord.COUNT_NEWBIES;
      } else {
         for (DeviceLotteryRecord deviceLotteryRecord : list) {
            Long systemCouponId = deviceLotteryRecord.getSystemCouponId();
            if (systemCouponId != null) {
               countPrize++;
               couponId = systemCouponId;
            }
         }
         count = UserLotteryRecord.COUNT_NEWBIES - list.size();
      }
      String prize = null;
      String couponType = null;
      if (countPrize == 0) {
         prize = userLotteryRecordService.getLotteryPrizeNewbies(count, countPrize, null);
      } else if (countPrize == 1) {
         if (couponId != null) {
            SystemCoupon coupon = systemCouponService.selectByPrimaryKey(couponId);
            couponType = coupon.getType().name();
         }
         if(couponType != null && couponType.trim().length() > 0) {
            prize = userLotteryRecordService.getLotteryPrizeNewbies(count, countPrize, couponType);
         }
      }
      Long newCouponId = null;
      if (prize == null || prize.trim().length() == 0) {
         prize = "NoPrize";
      } else if (prize.equals(couponType)) {
         // 已存在此券
         prize = "NoPrize";
      } else {
         SystemCoupon coupon = systemCouponService.getCouponByType(prize);
         if (coupon != null) {
            newCouponId = coupon.getId();
         }
      }
      count --;
      // 插入记录
      DeviceLotteryRecord record = new DeviceLotteryRecord();
      record.setDevice(device);
      record.setPlatform(platformType);
      record.setSystemCouponId(newCouponId);
      record.setCreateTime(new Date());
      deviceLotteryRecordService.insertSelective(record);
      JSONObject data = new JSONObject();
      data.put("count", count);
      data.put("result", prize);
      return data;
   }
   /**
    * 获取抽奖次数- 天天抽奖励券
    *
    * @param callback
    * @param acceptData
    * @param uid
    * @param out
    */
   // @RequestMapping(value = "getDailyCount")
   public void getDailyCount(String callback, AcceptData acceptData, Long uid, PrintWriter out) {
      try {
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(userLotteryRecordService.getLotteryCountDaily(uid)));
      } catch (UserLotteryRecordException e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getCode(),e.getMsg()));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("信息获取失败"));
         e.printStackTrace();
      }
   }
   /**
    * 获取抽奖结果 - 天天抽奖励券`
    * @param callback
    * @param acceptData
    * @param uid
    * @param out
    */
   // @RequestMapping(value = "getDailyResult")
   public void getDailyResult(String callback, AcceptData acceptData, Long uid, PrintWriter out) {
      try {
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(userLotteryRecordService.executeLotteryDaily(uid)));
      } catch (UserLotteryRecordException e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getCode(),e.getMsg()));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("抽奖失败"));
         e.printStackTrace();
      }
   }
}