From 9db53b847ba90d437d9545485416f23887adf934 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 26 二月 2019 11:38:04 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- fanli/src/main/java/com/yeshi/fanli/controller/client/UserCouponController.java | 320 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 319 insertions(+), 1 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/UserCouponController.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/UserCouponController.java index 96a3768..51f8969 100644 --- a/fanli/src/main/java/com/yeshi/fanli/controller/client/UserCouponController.java +++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/UserCouponController.java @@ -1,23 +1,34 @@ 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 java.util.Map; import javax.annotation.Resource; 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.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.UserSystemCoupon; +import com.yeshi.fanli.entity.system.SystemCoupon; +import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum; 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.order.CommonOrderCountService; 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.UserSystemCouponService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.vo.user.UserSystemCouponRecordVO; @@ -45,6 +56,25 @@ @Resource private CommonOrderService commonOrderService; + + @Resource + private DeviceLotteryRecordService deviceLotteryRecordService; + + @Resource + private SystemCouponService systemCouponService; + + @Resource + private UserSystemCouponService userSystemCouponService; + + @Resource + private UserInfoExtraService userInfoExtraService; + + @Resource + private CommonOrderCountService commonOrderCountService; + + + // 鏈�澶ф娊濂栨鏁� + private static int MAX_COUNT = 5; /** * 鐢ㄦ埛鍒稿垪琛ㄦ煡璇� @@ -287,4 +317,292 @@ } } + + /** + * 鑾峰彇鎶藉娆℃暟 + * + * @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 acceptData + * @param uid + * @param out + */ + @RequestMapping(value = "getLotteryResult") + public void getLotteryResult(String callback, AcceptData acceptData, Long uid, PrintWriter out) { + + try { + // 濂栧搧 + int count = 0; + String prize = ""; + Long couponId = null; + + 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; + } + int hasPrize = 0; + + 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() < MAX_COUNT) { // 鎷ユ湁鎶藉鏈轰細 + for (DeviceLotteryRecord deviceLotteryRecord : list) { + Long systemCouponId = deviceLotteryRecord.getSystemCouponId(); + if (systemCouponId != null) { + hasPrize++; + couponId = systemCouponId; + } + } + count = MAX_COUNT - 1 - list.size(); + } else { + count = MAX_COUNT - 1; + } + + // 濂栧搧 + 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); + if (userInfoExtra == null) { + JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("淇℃伅涓嶆纭�")); + return; + } + + Integer lotteryNewbies = userInfoExtra.getLotteryNewbies(); + if (lotteryNewbies == null || lotteryNewbies < 1 ) { // 娆℃暟宸茬敤鍏� + JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "鎶藉娆℃暟涓嶈冻")); + return; + } else { + count = lotteryNewbies - 1; // 鍓╀綑娆℃暟 + } + + 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("result", prize); + + JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data)); + + } catch (Exception e) { + JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("鎶藉澶辫触")); + e.printStackTrace(); + } + } + + /** + * 濂栧搧鎶藉彇 + * @param maxCount 鏈�澶ф鏁� + * @param hasPrize 鎷ユ湁濂栧搧鏁伴噺 + * @param record 宸叉娊娆℃暟 + * @param couponId 鍒竔d + * @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 + * @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; // 涓嶇畻鏂扮敤鎴� + } + userInfoExtra.setLotteryNewbies(count); + userInfoExtraService.saveUserInfoExtra(userInfoExtra); + + } else { + count = lotteryNewbies; // 鍓╀綑娆℃暟 + } + } + + return count; + } + } -- Gitblit v1.8.0