diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniVipController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniVipController.java index ae101e0..bcda8ea 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniVipController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniVipController.java @@ -11,10 +11,13 @@ import org.jeecg.common.api.vo.Result; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.AssertUtils; +import org.jeecg.common.util.IpUtils; +import org.jeecg.common.util.RedisUtil; import org.jeecg.modules.mini.dto.VipDTO; import org.jeecg.modules.mini.service.MiniUserService; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.service.ISysUserService; +import org.jeecg.modules.yx.constant.YxConstant; import org.jeecg.modules.yx.entity.YxOrder; import org.jeecg.modules.yx.entity.YxVipCard; import org.jeecg.modules.yx.entity.YxVipSku; @@ -25,6 +28,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; @@ -48,6 +53,8 @@ public class MiniVipController { private IYxVipSkuService yxVipSkuService; @Autowired private MiniUserService miniUserService; + @Resource + private RedisUtil redisUtil; @GetMapping(value = "/getVipInfo") @ApiOperation(value = "获取vip信息") @@ -79,23 +86,36 @@ public class MiniVipController { @PostMapping(value = "/card/activation") @ApiOperation(value = "卡密激活") - public Result cardActivation(@RequestBody JSONObject jsonObject) { - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - SysUser user = sysUserService.getById(sysUser.getId()); - AssertUtils.notNull(user, "获取用户信息失败,请联系管理员"); - String card = jsonObject.getString("card"); - AssertUtils.notNull(card, "请输入卡密"); - //检查card是否有效 - boolean cardValid = yxVipCardService.cardIsValid(card); - AssertUtils.isTrue(cardValid, "当前卡密无效或已被使用"); - YxVipCard yxVipCard = yxVipCardService.getOne(new LambdaQueryWrapper().eq(YxVipCard::getCardNum, card)); - VipDTO userVip = miniUserService.getUserVip(user.getId()); - if (userVip != null && userVip.getVipLevel() != 0) { - AssertUtils.notTrue(yxVipSkuService.convertVipLevel(yxVipCard.getSkuCode()) <= userVip.getVipLevel(), "该权益您已激活!不可重复兑换"); + public Result cardActivation(@RequestBody JSONObject jsonObject, HttpServletRequest request) { + String key =YxConstant.VIP_CARD_KEY + "_" + IpUtils.getIpAddr(request); + Integer ipAddrCardCount = (Integer) redisUtil.get(key); + if (ipAddrCardCount!=null) { + AssertUtils.notTrue(ipAddrCardCount>=5,"当前操作过快,稍后重试"); } - //使用卡密 - boolean exchange = yxVipCardService.exchange(card, user.getId()); - AssertUtils.isTrue(exchange, "当前卡密已被使用"); + try { + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + SysUser user = sysUserService.getById(sysUser.getId()); + AssertUtils.notNull(user, "获取用户信息失败,请联系管理员"); + String card = jsonObject.getString("card"); + AssertUtils.notNull(card, "请输入卡密"); + //检查card是否有效 + boolean cardValid = yxVipCardService.cardIsValid(card); + AssertUtils.isTrue(cardValid, "当前卡密无效或已被使用"); + YxVipCard yxVipCard = yxVipCardService.getOne(new LambdaQueryWrapper().eq(YxVipCard::getCardNum, card)); + VipDTO userVip = miniUserService.getUserVip(user.getId()); + if (userVip != null && userVip.getVipLevel() != 0) { + AssertUtils.notTrue(yxVipSkuService.convertVipLevel(yxVipCard.getSkuCode()) <= userVip.getVipLevel(), "该权益您已激活!不可重复兑换"); + } + //使用卡密 + boolean exchange = yxVipCardService.exchange(card, user.getId()); + AssertUtils.isTrue(exchange, "当前卡密已被使用"); + }catch (Exception e){ + ipAddrCardCount++; + redisUtil.set(key,ipAddrCardCount,3600); + // 记录兑换次数 + throw new JeecgBootException(e.getMessage()); + } + return Result.OK("激活成功"); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/constant/YxConstant.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/constant/YxConstant.java index 991f7ee..c1a65e7 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/constant/YxConstant.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/constant/YxConstant.java @@ -80,4 +80,7 @@ public class YxConstant { //同ip仅可注册账户数量 public static final Integer ipRegisterNum = 3; + + // vip card redis key + public static String VIP_CARD_KEY="vip_card"; } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/controller/YxHistoryMajorEnrollController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/controller/YxHistoryMajorEnrollController.java index 3611457..5b6f5e4 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/controller/YxHistoryMajorEnrollController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/controller/YxHistoryMajorEnrollController.java @@ -242,35 +242,51 @@ public class YxHistoryMajorEnrollController extends JeecgController dataList = yxHistoryMajorEnrollService.list(new LambdaQueryWrapper() + List dataList = new ArrayList<>(); + List historyMajorEnrollList = yxHistoryMajorEnrollService.list(new LambdaQueryWrapper() .eq(YxHistoryMajorEnroll::getYear,"2023") - .in(YxHistoryMajorEnroll::getBatch,"高职高专")); + .eq(YxHistoryMajorEnroll::getMajorType,"体育类")); Set notAddSet = new LinkedHashSet<>(); - for (YxHistoryMajorEnroll y : dataList) { + Map map =new LinkedHashMap<>(); + for (YxHistoryMajorEnroll y : historyMajorEnrollList) { notAddSet.add(y.getSchoolCode()+"_"+y.getEnrollmentCode()+"_"+y.getMajorType()+"_"+y.getCategory()); + map.put(y.getSchoolCode()+"_"+y.getEnrollmentCode()+"_"+y.getMajorType()+"_"+y.getCategory(),y); } List schoolMajorList = yxSchoolMajorService.list(new LambdaQueryWrapper() - .in(YxSchoolMajor::getBatch,"高职高专")); + .eq(YxSchoolMajor::getMajorType,"体育类")); List schoolChildList = yxSchoolChildService.list(); Map schoolNameMap = schoolChildList.stream().collect(Collectors.toMap(YxSchoolChild::getSchoolCode, YxSchoolChild::getSchoolName)); String schoolName = ""; YxHistoryMajorEnroll yxHistoryMajorEnroll = null; - for (YxSchoolMajor yxSchoolMajor : schoolMajorList) { - if (notAddSet.contains(yxSchoolMajor.getSchoolCode()+"_"+yxSchoolMajor.getEnrollmentCode()+"_"+yxSchoolMajor.getMajorType()+"_"+yxSchoolMajor.getCategory())) { - continue; + int i =0; + try { + String key = null; + for (YxSchoolMajor yxSchoolMajor : schoolMajorList) { + key = yxSchoolMajor.getSchoolCode()+"_"+yxSchoolMajor.getEnrollmentCode()+"_"+yxSchoolMajor.getMajorType()+"_"+yxSchoolMajor.getCategory(); + if (!notAddSet.contains(key)) { + yxHistoryMajorEnroll = new YxHistoryMajorEnroll(); + schoolName = schoolNameMap.getOrDefault(yxSchoolMajor.getSchoolCode(), ""); + BeanUtils.copyProperties(yxSchoolMajor,yxHistoryMajorEnroll); + yxHistoryMajorEnroll.setSchoolName(schoolName); + yxHistoryMajorEnroll.setEnrollNum(yxSchoolMajor.getPlanNum()); + yxHistoryMajorEnroll.setRulesEnrollProbability(yxSchoolMajor.getPrivateRulesEnrollProbability()); + yxHistoryMajorEnroll.setProbabilityOperator(yxSchoolMajor.getPrivateProbabilityOperator()); + }else{ + yxHistoryMajorEnroll = map.get(key); + } + if (yxSchoolMajor.getTuition()!=null) { + yxHistoryMajorEnroll.setTuition(yxSchoolMajor.getTuition().toString()); + } + if (StringUtils.isNotBlank(yxSchoolMajor.getDetail())) { + yxHistoryMajorEnroll.setDetail(yxSchoolMajor.getDetail()); + } + dataList.add(yxHistoryMajorEnroll); + i++; } - yxHistoryMajorEnroll = new YxHistoryMajorEnroll(); - schoolName = schoolNameMap.getOrDefault(yxSchoolMajor.getSchoolCode(), ""); - BeanUtils.copyProperties(yxSchoolMajor,yxHistoryMajorEnroll); - yxHistoryMajorEnroll.setSchoolName(schoolName); - yxHistoryMajorEnroll.setEnrollNum(yxSchoolMajor.getPlanNum()); - yxHistoryMajorEnroll.setRulesEnrollProbability(yxSchoolMajor.getPrivateRulesEnrollProbability()); - yxHistoryMajorEnroll.setProbabilityOperator(yxSchoolMajor.getPrivateProbabilityOperator()); - if (yxSchoolMajor.getTuition()!=null) { - yxHistoryMajorEnroll.setTuition(yxSchoolMajor.getTuition().toString()); - } - dataList.add(yxHistoryMajorEnroll); + }catch (Exception e) { + System.out.println(i); + throw new JeecgBootException("导出数据有错误,第"+i+"行出错:"+e.getMessage()); } //Step.2 AutoPoi 导出Excel ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); @@ -287,7 +303,7 @@ public class YxHistoryMajorEnrollController extends JeecgController importExcel(HttpServletRequest request, HttpServletResponse response) { diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/util/ScoreUtil.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/util/ScoreUtil.java index d6b356b..b808f97 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/util/ScoreUtil.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/util/ScoreUtil.java @@ -523,8 +523,8 @@ public class ScoreUtil { //当前年分差为0,去年分差为0 enrollProbability = YxConstant.bigDecimal50;//录取率50 }else if(nowYearDiff.compareTo(YxConstant.bigDecimal0) > 0 && historyThreeYearDiff.compareTo(YxConstant.bigDecimal0)<=0){ - //当前年分差不为0,去年分差为0:默认去年的分差为1 - enrollProbability = nowYearDiff.multiply(YxConstant.bigDecimal075).multiply(YxConstant.bigDecimal100); + //当前年分差不为0,去年分差为0:默认去年的分差为1 .multiply(YxConstant.bigDecimal075) + enrollProbability = nowYearDiff.multiply(YxConstant.bigDecimal100).multiply(YxConstant.bigDecimal075); }else if(nowYearDiff.compareTo(YxConstant.bigDecimal0) < 0 && historyThreeYearDiff.compareTo(YxConstant.bigDecimal0)<=0){ enrollProbability = YxConstant.bigDecimal0; } else {