From 0268c349cd9a585a11a1e853b058a08a537f3e83 Mon Sep 17 00:00:00 2001 From: seesaw Date: Tue, 6 Aug 2024 18:25:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/order/vo/OrderDetailsRespVO.java | 7 ++++ .../admin/tag/MemberTagController.java | 9 +++++ .../admin/tag/vo/MemberTagBaseVO.java | 20 ++++++++++ .../admin/user/MemberUserController.java | 6 +++ .../app/order/vo/AppOrderRespVO.java | 6 +++ .../dal/dataobject/order/DishOrderDO.java | 10 +++++ .../dal/dataobject/tag/MemberTagDO.java | 19 ++++++++++ .../member/job/BalanceDeductionJob.java | 11 +++++- .../member/service/tag/MemberTagService.java | 6 +++ .../service/tag/MemberTagServiceImpl.java | 16 ++++++++ .../service/user/MemberUserService.java | 3 +- .../service/user/MemberUserServiceImpl.java | 38 +++++++++++++++++++ 12 files changed, 149 insertions(+), 2 deletions(-) diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/OrderDetailsRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/OrderDetailsRespVO.java index dcca1720..ad757dd1 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/OrderDetailsRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/OrderDetailsRespVO.java @@ -70,5 +70,12 @@ public class OrderDetailsRespVO { @Schema(description = "用户id", example = "1024") private Long userId; + @Schema(description = "减免状态") + @ExcelProperty("减免状态") + private String reductionState; + + @Schema(description = "减免金额") + @ExcelProperty("减免金额") + private BigDecimal reductionAmount; } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/MemberTagController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/MemberTagController.java index 34f3c20c..c93cb3f5 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/MemberTagController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/MemberTagController.java @@ -91,4 +91,13 @@ public class MemberTagController { return success(MemberTagConvert.INSTANCE.convertPage(pageResult)); } + @PutMapping("/set") + @Operation(summary = "修改优先级") + @Parameter(name = "id", description = "主键", required = true) + public CommonResult setFirst(Long id,String state) { + tagService.setFirst(id,state); + return success(true); + } + + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagBaseVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagBaseVO.java index bc0efea6..ebd2e3ec 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagBaseVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagBaseVO.java @@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import javax.validation.constraints.NotNull; +import java.math.BigDecimal; /** * 会员标签 Base VO,提供给添加、修改、详细的子 VO 使用 @@ -16,4 +17,23 @@ public class MemberTagBaseVO { @NotNull(message = "标签名称不能为空") private String name; + /** + * 减免类型:1-比例,2-固定金额 + */ + @Schema(description = "减免类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "减免类型不能为空") + private String type; + /** + * 比例 + */ + private BigDecimal proportion; + /** + * 金额 + */ + private BigDecimal amount; + /** + * 执行优先 + */ + private String state; + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java index ac93c8e9..dbacf2c5 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.member.controller.admin.user; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -117,6 +118,11 @@ public class MemberUserController { public CommonResult getUser(@RequestParam("id") Long id) { MemberUserDO user = memberUserService.getUser(id); MemberUserRespVO memberUserRespVO = MemberUserConvert.INSTANCE.convert03(user); + if(CollectionUtil.isNotEmpty(user.getTagIds())){ + List tags = memberTagService.getTagList(user.getTagIds()); + List tagNames = tags.stream().map(MemberTagDO::getName).collect(Collectors.toList()); + memberUserRespVO.setTagNames(tagNames); + } memberUserRespVO.setGroupName(MemberGroupService.getGroupNameByUserId(id)); return success(memberUserRespVO); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/order/vo/AppOrderRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/order/vo/AppOrderRespVO.java index 079180a2..ba4c57ba 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/order/vo/AppOrderRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/order/vo/AppOrderRespVO.java @@ -61,4 +61,10 @@ public class AppOrderRespVO { @Schema(description = "退款状态") private String refundStatus; + @Schema(description = "减免状态") + private String reductionState; + + @Schema(description = "减免金额") + private BigDecimal reductionAmount; + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/DishOrderDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/DishOrderDO.java index 10b17b14..a0b75e4a 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/DishOrderDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/DishOrderDO.java @@ -83,4 +83,14 @@ public class DishOrderDO extends BaseDO { * 微信充值金额 */ private BigDecimal wxAmount; + + /** + * 减免状态 + */ + private String reductionState; + + /** + * 减免金额 + */ + private BigDecimal reductionAmount; } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/tag/MemberTagDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/tag/MemberTagDO.java index b984064e..22b332eb 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/tag/MemberTagDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/tag/MemberTagDO.java @@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; +import java.math.BigDecimal; + /** * 会员标签 DO * @@ -31,4 +33,21 @@ public class MemberTagDO extends BaseDO { */ private String name; + /** + * 减免类型:1-比例,2-固定金额 + */ + private String type; + /** + * 比例 + */ + private BigDecimal proportion; + /** + * 金额 + */ + private BigDecimal amount; + /** + * 执行优先 + */ + private String state; + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/BalanceDeductionJob.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/BalanceDeductionJob.java index d939b108..8f077413 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/BalanceDeductionJob.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/BalanceDeductionJob.java @@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.member.enums.TimePeriodEnum; import cn.iocoder.yudao.module.member.service.card.CardService; import cn.iocoder.yudao.module.member.service.diningplates.DiningPlatesService; import cn.iocoder.yudao.module.member.service.order.OrderService; +import cn.iocoder.yudao.module.member.service.user.MemberUserService; import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; @@ -39,6 +40,8 @@ public class BalanceDeductionJob implements JobHandler { private CardService cardService; @Resource private StringRedisTemplate stringRedisTemplate; + @Resource + private MemberUserService userService; /** * 30分钟之后自动解绑并扣款 @@ -66,7 +69,7 @@ public class BalanceDeductionJob implements JobHandler { toPay.forEach(dishOrderDO -> { //新的总价 BigDecimal total = new BigDecimal(stringRedisTemplate.opsForValue().get(dishOrderDO.getDiningPlatesNum())); -// BigDecimal total = new BigDecimal(0.01); + //BigDecimal total = new BigDecimal(0.01); Long userId = dishOrderDO.getUserId(); CardDO cardDO = new CardDO(); cardDO.setType(TimePeriodEnum.getTimePeriod(LocalDateTime.now())); @@ -74,6 +77,12 @@ public class BalanceDeductionJob implements JobHandler { BigDecimal money = oldCardDO.getMoney(); + //计算减免价格 + BigDecimal reductionAmount = userService.getReductionAmount(userId, total); + dishOrderDO.setReductionAmount(reductionAmount); + dishOrderDO.setReductionState(reductionAmount.compareTo(BigDecimal.ZERO)>0?"1":"0"); + //计算减免后的总价 + total = total.subtract(reductionAmount); BigDecimal wxAmount = oldCardDO.getWxAmount(); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagService.java index 5e339339..159d0ef2 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagService.java @@ -70,4 +70,10 @@ public interface MemberTagService { */ List getTagList(); + + /** + * 设置标签优先级 + */ + void setFirst(Long id,String state); + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImpl.java index b267227d..b31c00e0 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImpl.java @@ -11,7 +11,11 @@ import cn.iocoder.yudao.module.member.convert.tag.MemberTagConvert; import cn.iocoder.yudao.module.member.dal.dataobject.tag.MemberTagDO; import cn.iocoder.yudao.module.member.dal.mysql.tag.MemberTagMapper; import cn.iocoder.yudao.module.member.service.user.MemberUserService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import jodd.util.StringUtil; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; @@ -122,4 +126,16 @@ public class MemberTagServiceImpl implements MemberTagService { return memberTagMapper.selectList(); } + @Override + @Transactional(rollbackFor = Exception.class) + public void setFirst(Long id,String state) { + if("1".equals(state)){ + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.set(MemberTagDO::getState,"0"); + memberTagMapper.update(wrapper); + } + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.set(MemberTagDO::getState,state).eq(MemberTagDO::getId,id); + memberTagMapper.update(updateWrapper); + } } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java index f67ce1c2..a2baf477 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java @@ -18,6 +18,7 @@ import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.system.api.dishesnutrition.dto.DishesNutritionRespDTO; import javax.validation.Valid; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Collection; import java.util.List; @@ -242,5 +243,5 @@ public interface MemberUserService { String getCardId(Long userId); - + BigDecimal getReductionAmount(Long userId,BigDecimal money); } 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 a7cd5d1f..7f61159f 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 @@ -35,6 +35,7 @@ import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO; import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO; import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO; +import cn.iocoder.yudao.module.member.dal.dataobject.tag.MemberTagDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.mysql.diningplates.DiningPlatesMapper; import cn.iocoder.yudao.module.member.dal.mysql.group.MemberGroupMapper; @@ -47,6 +48,7 @@ import cn.iocoder.yudao.module.member.service.admincard.AdminCardService; import cn.iocoder.yudao.module.member.service.card.CardService; import cn.iocoder.yudao.module.member.service.order.OrderService; import cn.iocoder.yudao.module.member.service.orderdetail.OrderDetailService; +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.system.api.dishesnutrition.DishesNutritionApi; @@ -133,6 +135,9 @@ public class MemberUserServiceImpl implements MemberUserService { @Resource private MemberGroupMapper memberGroupMapper; + @Resource + private MemberTagService memberTagService; + @Override public MemberUserDO getUserByMobile(String mobile) { @@ -740,4 +745,37 @@ public class MemberUserServiceImpl implements MemberUserService { MemberUserDO memberUserDO = memberUserMapper.selectById(userId); return memberUserDO.getCardId(); } + + @Override + public BigDecimal getReductionAmount(Long userId, BigDecimal money) { + MemberUserDO memberUserDO = memberUserMapper.selectById(userId); + List tagIds = memberUserDO.getTagIds(); + if (CollectionUtil.isEmpty(tagIds)){ + return BigDecimal.ZERO; + } + List tagList = memberTagService.getTagList(tagIds); + + if(tagList.size()>1){ + List collect = tagList.stream().filter(vo -> vo.getState().equals("1")).collect(Collectors.toList()); + if(CollectionUtil.isEmpty(collect)){ + return countAmount(tagList.get(0),money); + }else { + return countAmount(collect.get(0),money); + } + }else { + return countAmount(tagList.get(0),money); + } + } + + + public BigDecimal countAmount(MemberTagDO memberTagDO,BigDecimal money){ + if(memberTagDO.getType().equals("1")){ + BigDecimal bigDecimal = money.multiply(memberTagDO.getProportion()).setScale(2, RoundingMode.HALF_UP); + return bigDecimal; + } + if(memberTagDO.getType().equals("2")){ + return memberTagDO.getAmount(); + } + return BigDecimal.ZERO; + } }