| | |
| | | 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;
|
| | |
| | | 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;
|
| | |
| | | @Controller
|
| | | @RequestMapping("api/v1/user/coupon")
|
| | | public class UserCouponController {
|
| | |
|
| | | @Resource(name = "taskExecutor")
|
| | | private TaskExecutor executor;
|
| | |
|
| | | @Resource
|
| | | private ConfigService configService;
|
| | |
| | | @Resource
|
| | | private CommonOrderCountService commonOrderCountService;
|
| | |
|
| | | @Resource
|
| | | private ThreeSaleSerivce threeSaleSerivce;
|
| | |
|
| | | // 最大抽奖次数
|
| | | private static int MAX_COUNT = 5;
|
| | |
| | | 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()));
|
| | |
| | | * @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"));
|
| | |
| | | // 奖品
|
| | | int count = 0;
|
| | | String prize = "";
|
| | | String hasPrize = "";
|
| | | Long couponId = null;
|
| | |
|
| | | if (uid == null) { // 未登录
|
| | |
| | | JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("设备不存在"));
|
| | | return;
|
| | | }
|
| | | int hasPrize = 0;
|
| | | int countPrize = 0;
|
| | |
|
| | | List<DeviceLotteryRecord> list = deviceLotteryRecordService.listByPlatformAndDevice(platformType,
|
| | | device);
|
| | |
| | | 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();
|
| | | }
|
| | | }
|
| | |
|
| | | // 插入记录
|
| | |
| | | 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);
|
| | | }
|
| | |
|
| | | // 剩余次数
|
| | |
| | | * @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) {
|
| | |
| | | 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) {
|
| | |
| | |
|
| | | } else { // 大于3次机会
|
| | |
|
| | | if (hasPrize < 2) { // 不足两个奖品
|
| | | if (countPrize < 2) { // 不足两个奖品
|
| | | long result = (1 + Math.round(Math.random() * (9)));
|
| | | if (result <= 3) {
|
| | | prize = freeCoupon; // 福利免费券
|
| | |
| | | return prize;
|
| | | }
|
| | |
|
| | |
|
| | |
|
| | | /**
|
| | | * 获取抽奖结果
|
| | |
| | | }
|
| | | userInfoExtra.setLotteryNewbies(count);
|
| | | userInfoExtraService.saveUserInfoExtra(userInfoExtra);
|
| | | |
| | | } else {
|
| | | count = lotteryNewbies; // 剩余次数
|
| | | }
|