From acba88ade03a45e3f6e899d204ac052fb1a2099f Mon Sep 17 00:00:00 2001 From: zt Date: Fri, 25 Apr 2025 10:45:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/user/MemberUserServiceImpl.java | 84 ++++++++++++++++++- .../module/member/util/SubsidyCount.java | 10 +++ 2 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/util/SubsidyCount.java diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java index 9ca9a63d..f278b19d 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java @@ -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 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 map = new HashMap<>(); + try { + map = objectMapper.readValue(mapString, + new TypeReference>() {}); + } 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 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 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 dishOrderDOS = dishOrderMapper.selectList(Wrappers.lambdaQuery() + .eq(DishOrderDO::getUserId, userId) + .between(DishOrderDO::getCreateTime, startTime, endTime) + .gt(DishOrderDO::getSubsidyAmount, BigDecimal.ZERO) + ); + return dishOrderDOS.size(); + } } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/util/SubsidyCount.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/util/SubsidyCount.java new file mode 100644 index 00000000..5d946b82 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/util/SubsidyCount.java @@ -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; +}