xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserCouponController.java
@@ -58,7 +58,9 @@ } // 计算使用时间规则 couponList = xpAppUserCouponService.timeRule(couponList); if(couponList.isEmpty()){ return R.ok(userCouponVo); } // 优先用满足条件且抵扣金额最大的 List<XpAppUserCoupon> discountUserCoupons = couponList.stream().filter(e -> e.getCouponType() == 1).sorted(Comparator.comparing(XpAppUserCoupon::getMoney).reversed()).collect(Collectors.toList()); xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpAppUserCouponServiceImpl.java
@@ -1,5 +1,7 @@ package com.xiaopeng.account.service.impl; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -10,9 +12,13 @@ import com.xiaopeng.account.model.vo.XpAppUserCouponTotalVo; import com.xiaopeng.account.model.vo.XpAppUserCouponVo; import com.xiaopeng.account.service.IXpAppUserCouponService; import com.xiaopeng.account.util.holiday.HolidayUtil; import com.xiaopeng.api.model.account.XpAppUserCoupon; import com.xiaopeng.common.core.utils.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -26,6 +32,9 @@ */ @Service public class XpAppUserCouponServiceImpl extends ServiceImpl<XpAppUserCouponMapper, XpAppUserCoupon> implements IXpAppUserCouponService { @Autowired private HolidayUtil holidayUtil; /** * 获取用户优惠券列表 @@ -82,6 +91,66 @@ */ @Override public List<XpAppUserCoupon> timeRule(List<XpAppUserCoupon> couponList) { return Collections.emptyList(); List<XpAppUserCoupon> xpAppUserCoupons = new ArrayList<>(); for (XpAppUserCoupon coupon : couponList) { String timeJson = coupon.getTimeJson(); Boolean inOperationTime = isInOperationTime(timeJson); if(inOperationTime){ xpAppUserCoupons.add(coupon); } } return xpAppUserCoupons; } /** * 是否在运营内 * @param timeJson 规则json字符串 * @return */ private Boolean isInOperationTime(String timeJson) { JSONArray jsonArray = JSONArray.parseArray(timeJson); Integer holidayToday = holidayUtil.isHolidayToday(); for (Object o : jsonArray) { JSONObject jsonObject =JSONObject.parseObject(o.toString()); String type = jsonObject.getString("type"); if(type.equals(holidayToday.toString())){ JSONArray time = jsonObject.getJSONArray("time"); // 判断当前时间 是否在time时间段中 for (Object object : time) { String[] timeArray = object.toString().split("-"); String startTime = timeArray[0]; String endTime = timeArray[1]; boolean currentTimeInRange = DateUtils.isCurrentTimeInRange(startTime, endTime); if(currentTimeInRange){ return true; } } }else if(type.equals("3")){ // 判断是什么类型 0每天 1-7 想起 String typeStr = jsonObject.getString("typeStr"); // 查看今天周几 Integer week = DateUtils.getWeek(); // 包含每天 或者 包含当天 if(typeStr.contains("0") || typeStr.contains(week.toString())){ JSONArray time = jsonObject.getJSONArray("time"); // 判断当前时间 是否在time时间段中 for (Object object : time) { String[] timeArray = object.toString().split("-"); String startTime = timeArray[0]; String endTime = timeArray[1]; boolean currentTimeInRange = DateUtils.isCurrentTimeInRange(startTime, endTime); if(currentTimeInRange){ return true; } } } } } return false; } } xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/util/holiday/HolidayUtil.java
New file @@ -0,0 +1,80 @@ package com.xiaopeng.account.util.holiday; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.xiaopeng.common.core.constant.CacheConstants; import com.xiaopeng.common.core.utils.HttpUtils; import com.xiaopeng.common.redis.service.RedisService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.time.LocalDate; import java.util.concurrent.TimeUnit; @Component public class HolidayUtil { @Autowired private RedisService redisService; public boolean isHoliday() { LocalDate now = LocalDate.now(); // 判断缓存里面是否有节假日算法 if (redisService.getCacheObject(CacheConstants.IS_HOLIDAY+now) != null && ("1").equals(redisService.getCacheObject(CacheConstants.IS_HOLIDAY+now).toString())) { return true; } String result = HttpUtil.get("https://publicapi.xiaoai.me/holiday/day?date=" +now); JSONObject jsonObject = JSONObject.parseObject(result); Object data = jsonObject.get("data"); JSONArray parse = JSONArray.parse(data.toString()); for (int i = 0; i < parse.size(); i++) { JSONObject jsonObject1 = parse.getJSONObject(i); if (jsonObject1.get("daytype").toString().equals("1")) { redisService.setCacheObject(CacheConstants.IS_HOLIDAY+now, "1", 1l, TimeUnit.DAYS); return true; } } redisService.setCacheObject(CacheConstants.IS_HOLIDAY+now, "0", 1l, TimeUnit.DAYS); return false; } /** * 2非工作日 0工作日 1节假日 3调休日 * @return */ public Integer isHolidayToday() { LocalDate now = LocalDate.now(); Object cacheObject = redisService.getCacheObject(CacheConstants.IS_DAY + now); // 判断缓存里面是否有节假日算法 if (cacheObject!=null) { return Integer.valueOf(cacheObject.toString()); } String result = HttpUtils.sendGet("https://publicapi.xiaoai.me/holiday/day?date=" +now); // String result = HttpUtils.sendGet("https://publicapi.xiaoai.me/holiday/day?date=2026-01-04"); JSONObject jsonObject = JSONObject.parseObject(result); Object data = jsonObject.get("data"); JSONArray parse = JSONArray.parse(data.toString()); for (int i = 0; i < parse.size(); i++) { JSONObject jsonObject1 = parse.getJSONObject(i); String daytype = jsonObject1.get("daytype").toString(); if (daytype.equals("0")) { redisService.setCacheObject(CacheConstants.IS_DAY + now, "0", 1l, TimeUnit.DAYS); return 0; } else if (daytype.equals("1")) { redisService.setCacheObject(CacheConstants.IS_DAY + now, "1", 1l, TimeUnit.DAYS); return 1; } else if (daytype.equals("2")) { redisService.setCacheObject(CacheConstants.IS_DAY + now, "0", 1l, TimeUnit.DAYS); return 0; } } return 0; } } xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/account/XpAppUserCoupon.java
@@ -68,4 +68,7 @@ @ApiModelProperty(value = "城市id集合") private String openCityId; @ApiModelProperty(value = "使用时间规则") private String timeJson; }