This commit is contained in:
zt
2025-04-25 10:45:22 +08:00
parent a33ad65c94
commit acba88ade0
2 changed files with 93 additions and 1 deletions

View File

@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.ListUtil; import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
@ -39,6 +40,7 @@ import cn.iocoder.yudao.module.member.service.tag.MemberTagService;
import cn.iocoder.yudao.module.member.service.userexpand.UserExpandService; import cn.iocoder.yudao.module.member.service.userexpand.UserExpandService;
import cn.iocoder.yudao.module.member.util.MemberConstants; import cn.iocoder.yudao.module.member.util.MemberConstants;
import cn.iocoder.yudao.module.member.util.QRCodeWithJWTUtil; import cn.iocoder.yudao.module.member.util.QRCodeWithJWTUtil;
import cn.iocoder.yudao.module.member.util.SubsidyCount;
import cn.iocoder.yudao.module.system.api.dishesnutrition.DishesNutritionApi; import cn.iocoder.yudao.module.system.api.dishesnutrition.DishesNutritionApi;
import cn.iocoder.yudao.module.system.api.dishesnutrition.dto.DishesNutritionRespDTO; import cn.iocoder.yudao.module.system.api.dishesnutrition.dto.DishesNutritionRespDTO;
import cn.iocoder.yudao.module.system.api.face.FaceApi; import cn.iocoder.yudao.module.system.api.face.FaceApi;
@ -50,6 +52,7 @@ import cn.iocoder.yudao.module.system.api.social.dto.SocialWxPhoneNumberInfoResp
import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
@ -784,12 +787,65 @@ public class MemberUserServiceImpl implements MemberUserService {
public BigDecimal getReductionAmount(Long userId, BigDecimal money, LocalDateTime time) { public BigDecimal getReductionAmount(Long userId, BigDecimal money, LocalDateTime time) {
String timePeriod = TimePeriodEnum.getTimePeriod(time); String timePeriod = TimePeriodEnum.getTimePeriod(time);
String format = LocalDateTimeUtil.format(time, "yyyy-MM-dd");
MemberUserDO memberUserDO = memberUserMapper.selectById(userId); MemberUserDO memberUserDO = memberUserMapper.selectById(userId);
List<Long> tagIds = memberUserDO.getTagIds(); List<Long> tagIds = memberUserDO.getTagIds();
if (CollectionUtil.isEmpty(tagIds)) { if (CollectionUtil.isEmpty(tagIds)) {
return BigDecimal.ZERO; return BigDecimal.ZERO;
} }
ObjectMapper objectMapper = new ObjectMapper();
String redisKey = userId +"-subsidy";
String mapString = memberUserRedisTemplate.opsForValue().get(redisKey);
int count=0;
SubsidyCount newSubsidyCount = new SubsidyCount();
newSubsidyCount.setMorningCount(0);
newSubsidyCount.setNoonCount(0);
newSubsidyCount.setNightCount(0);
if (StringUtils.isNotBlank(mapString)) {
HashMap<String, SubsidyCount> map = new HashMap<>();
try {
map = objectMapper.readValue(mapString,
new TypeReference<HashMap<String, SubsidyCount>>() {});
} catch (JsonProcessingException e) {
log.error("JSON 转换异常 mapString: {}", mapString, e);
}
SubsidyCount subsidyCount = map.get(format);
if(subsidyCount!=null){
BeanUtil.copyProperties(subsidyCount,newSubsidyCount);
if(TimePeriodEnum.MORNING.getCode().equals(timePeriod)){
count = subsidyCount.getMorningCount();
}else if(TimePeriodEnum.MIDDAY.getCode().equals(timePeriod)){
count = subsidyCount.getNoonCount();
}else if(TimePeriodEnum.NIGHT.getCode().equals(timePeriod)){
count = subsidyCount.getNightCount();
}
}
}
if(count>0){
return BigDecimal.ZERO;
}else {
HashMap<String, SubsidyCount> map = new HashMap<>();
if(TimePeriodEnum.MORNING.getCode().equals(timePeriod)){
newSubsidyCount.setMorningCount(newSubsidyCount.getMorningCount()+1);
}else if(TimePeriodEnum.MIDDAY.getCode().equals(timePeriod)){
newSubsidyCount.setNoonCount(newSubsidyCount.getNoonCount()+1);
}else if(TimePeriodEnum.NIGHT.getCode().equals(timePeriod)){
newSubsidyCount.setNightCount(newSubsidyCount.getNightCount()+1);
}
map.put(format,newSubsidyCount);
try {
String json = objectMapper.writeValueAsString(map);
memberUserRedisTemplate.opsForValue().set(redisKey, json);
} catch (JsonProcessingException e) {
log.error("JSON 转换异常 map: {}", map, e);
}
}
List<MemberTagDO> tagList = memberTagService.getTagList(tagIds); List<MemberTagDO> tagList = memberTagService.getTagList(tagIds);
if (tagList.size() > 1) { if (tagList.size() > 1) {
@ -1217,4 +1273,30 @@ public class MemberUserServiceImpl implements MemberUserService {
} }
return path; return path;
} }
public Integer getSubsidyCount(Long userId, String timePeriod,LocalDateTime time) {
String format = LocalDateTimeUtil.format(time, "yyyy-MM-dd");
String start;
String end;
if(TimePeriodEnum.MORNING.getCode().equals(timePeriod)){
start = format+" "+TimePeriodEnum.MORNING.getStartTime();
end = format+" "+"09:59:59";
}else if (TimePeriodEnum.MIDDAY.getCode().equals(timePeriod)){
start= format+" "+TimePeriodEnum.MIDDAY.getStartTime();
end = format+" "+TimePeriodEnum.MIDDAY.getEndTime();
}else {
start = format+" "+TimePeriodEnum.NIGHT.getStartTime();
end = format+" "+TimePeriodEnum.NIGHT.getEndTime();
}
LocalDateTime startTime = LocalDateTimeUtil.parse(start, "yyyy-MM-dd HH:mm:ss");
LocalDateTime endTime = LocalDateTimeUtil.parse(end, "yyyy-MM-dd HH:mm:ss");
List<DishOrderDO> dishOrderDOS = dishOrderMapper.selectList(Wrappers.<DishOrderDO>lambdaQuery()
.eq(DishOrderDO::getUserId, userId)
.between(DishOrderDO::getCreateTime, startTime, endTime)
.gt(DishOrderDO::getSubsidyAmount, BigDecimal.ZERO)
);
return dishOrderDOS.size();
}
} }

View File

@ -0,0 +1,10 @@
package cn.iocoder.yudao.module.member.util;
import lombok.Data;
@Data
public class SubsidyCount {
private Integer morningCount;
private Integer noonCount;
private Integer nightCount;
}