优化
This commit is contained in:
@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.collection.ListUtil;
|
||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
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.util.MemberConstants;
|
||||
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.dto.DishesNutritionRespDTO;
|
||||
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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
@ -784,12 +787,65 @@ public class MemberUserServiceImpl implements MemberUserService {
|
||||
public BigDecimal getReductionAmount(Long userId, BigDecimal money, LocalDateTime time) {
|
||||
|
||||
String timePeriod = TimePeriodEnum.getTimePeriod(time);
|
||||
|
||||
String format = LocalDateTimeUtil.format(time, "yyyy-MM-dd");
|
||||
MemberUserDO memberUserDO = memberUserMapper.selectById(userId);
|
||||
List<Long> tagIds = memberUserDO.getTagIds();
|
||||
if (CollectionUtil.isEmpty(tagIds)) {
|
||||
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);
|
||||
|
||||
if (tagList.size() > 1) {
|
||||
@ -1217,4 +1273,30 @@ public class MemberUserServiceImpl implements MemberUserService {
|
||||
}
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
Reference in New Issue
Block a user