Merge branch 'refs/heads/test'
This commit is contained in:
@ -70,5 +70,12 @@ public class OrderDetailsRespVO {
|
|||||||
@Schema(description = "用户id", example = "1024")
|
@Schema(description = "用户id", example = "1024")
|
||||||
private Long userId;
|
private Long userId;
|
||||||
|
|
||||||
|
@Schema(description = "减免状态")
|
||||||
|
@ExcelProperty("减免状态")
|
||||||
|
private String reductionState;
|
||||||
|
|
||||||
|
@Schema(description = "减免金额")
|
||||||
|
@ExcelProperty("减免金额")
|
||||||
|
private BigDecimal reductionAmount;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -91,4 +91,13 @@ public class MemberTagController {
|
|||||||
return success(MemberTagConvert.INSTANCE.convertPage(pageResult));
|
return success(MemberTagConvert.INSTANCE.convertPage(pageResult));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PutMapping("/set")
|
||||||
|
@Operation(summary = "修改优先级")
|
||||||
|
@Parameter(name = "id", description = "主键", required = true)
|
||||||
|
public CommonResult<Boolean> setFirst(Long id,String state) {
|
||||||
|
tagService.setFirst(id,state);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会员标签 Base VO,提供给添加、修改、详细的子 VO 使用
|
* 会员标签 Base VO,提供给添加、修改、详细的子 VO 使用
|
||||||
@ -16,4 +17,23 @@ public class MemberTagBaseVO {
|
|||||||
@NotNull(message = "标签名称不能为空")
|
@NotNull(message = "标签名称不能为空")
|
||||||
private String name;
|
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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cn.iocoder.yudao.module.member.controller.admin.user;
|
package cn.iocoder.yudao.module.member.controller.admin.user;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
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.CommonResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
@ -117,6 +118,11 @@ public class MemberUserController {
|
|||||||
public CommonResult<MemberUserRespVO> getUser(@RequestParam("id") Long id) {
|
public CommonResult<MemberUserRespVO> getUser(@RequestParam("id") Long id) {
|
||||||
MemberUserDO user = memberUserService.getUser(id);
|
MemberUserDO user = memberUserService.getUser(id);
|
||||||
MemberUserRespVO memberUserRespVO = MemberUserConvert.INSTANCE.convert03(user);
|
MemberUserRespVO memberUserRespVO = MemberUserConvert.INSTANCE.convert03(user);
|
||||||
|
if(CollectionUtil.isNotEmpty(user.getTagIds())){
|
||||||
|
List<MemberTagDO> tags = memberTagService.getTagList(user.getTagIds());
|
||||||
|
List<String> tagNames = tags.stream().map(MemberTagDO::getName).collect(Collectors.toList());
|
||||||
|
memberUserRespVO.setTagNames(tagNames);
|
||||||
|
}
|
||||||
memberUserRespVO.setGroupName(MemberGroupService.getGroupNameByUserId(id));
|
memberUserRespVO.setGroupName(MemberGroupService.getGroupNameByUserId(id));
|
||||||
return success(memberUserRespVO);
|
return success(memberUserRespVO);
|
||||||
}
|
}
|
||||||
|
@ -61,4 +61,10 @@ public class AppOrderRespVO {
|
|||||||
@Schema(description = "退款状态")
|
@Schema(description = "退款状态")
|
||||||
private String refundStatus;
|
private String refundStatus;
|
||||||
|
|
||||||
|
@Schema(description = "减免状态")
|
||||||
|
private String reductionState;
|
||||||
|
|
||||||
|
@Schema(description = "减免金额")
|
||||||
|
private BigDecimal reductionAmount;
|
||||||
|
|
||||||
}
|
}
|
@ -83,4 +83,14 @@ public class DishOrderDO extends BaseDO {
|
|||||||
* 微信充值金额
|
* 微信充值金额
|
||||||
*/
|
*/
|
||||||
private BigDecimal wxAmount;
|
private BigDecimal wxAmount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 减免状态
|
||||||
|
*/
|
||||||
|
private String reductionState;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 减免金额
|
||||||
|
*/
|
||||||
|
private BigDecimal reductionAmount;
|
||||||
}
|
}
|
@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
|
|||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会员标签 DO
|
* 会员标签 DO
|
||||||
*
|
*
|
||||||
@ -31,4 +33,21 @@ public class MemberTagDO extends BaseDO {
|
|||||||
*/
|
*/
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 减免类型:1-比例,2-固定金额
|
||||||
|
*/
|
||||||
|
private String type;
|
||||||
|
/**
|
||||||
|
* 比例
|
||||||
|
*/
|
||||||
|
private BigDecimal proportion;
|
||||||
|
/**
|
||||||
|
* 金额
|
||||||
|
*/
|
||||||
|
private BigDecimal amount;
|
||||||
|
/**
|
||||||
|
* 执行优先
|
||||||
|
*/
|
||||||
|
private String state;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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.card.CardService;
|
||||||
import cn.iocoder.yudao.module.member.service.diningplates.DiningPlatesService;
|
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.order.OrderService;
|
||||||
|
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@ -39,6 +40,8 @@ public class BalanceDeductionJob implements JobHandler {
|
|||||||
private CardService cardService;
|
private CardService cardService;
|
||||||
@Resource
|
@Resource
|
||||||
private StringRedisTemplate stringRedisTemplate;
|
private StringRedisTemplate stringRedisTemplate;
|
||||||
|
@Resource
|
||||||
|
private MemberUserService userService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 30分钟之后自动解绑并扣款
|
* 30分钟之后自动解绑并扣款
|
||||||
@ -74,6 +77,12 @@ public class BalanceDeductionJob implements JobHandler {
|
|||||||
|
|
||||||
|
|
||||||
BigDecimal money = oldCardDO.getMoney();
|
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();
|
BigDecimal wxAmount = oldCardDO.getWxAmount();
|
||||||
|
@ -70,4 +70,10 @@ public interface MemberTagService {
|
|||||||
*/
|
*/
|
||||||
List<MemberTagDO> getTagList();
|
List<MemberTagDO> getTagList();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置标签优先级
|
||||||
|
*/
|
||||||
|
void setFirst(Long id,String state);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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.dataobject.tag.MemberTagDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.mysql.tag.MemberTagMapper;
|
import cn.iocoder.yudao.module.member.dal.mysql.tag.MemberTagMapper;
|
||||||
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
|
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.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -122,4 +126,16 @@ public class MemberTagServiceImpl implements MemberTagService {
|
|||||||
return memberTagMapper.selectList();
|
return memberTagMapper.selectList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void setFirst(Long id,String state) {
|
||||||
|
if("1".equals(state)){
|
||||||
|
LambdaUpdateWrapper<MemberTagDO> wrapper = new LambdaUpdateWrapper<>();
|
||||||
|
wrapper.set(MemberTagDO::getState,"0");
|
||||||
|
memberTagMapper.update(wrapper);
|
||||||
|
}
|
||||||
|
LambdaUpdateWrapper<MemberTagDO> updateWrapper = new LambdaUpdateWrapper<>();
|
||||||
|
updateWrapper.set(MemberTagDO::getState,state).eq(MemberTagDO::getId,id);
|
||||||
|
memberTagMapper.update(updateWrapper);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 cn.iocoder.yudao.module.system.api.dishesnutrition.dto.DishesNutritionRespDTO;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -242,5 +243,5 @@ public interface MemberUserService {
|
|||||||
|
|
||||||
String getCardId(Long userId);
|
String getCardId(Long userId);
|
||||||
|
|
||||||
|
BigDecimal getReductionAmount(Long userId,BigDecimal money);
|
||||||
}
|
}
|
||||||
|
@ -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.diningplates.DiningPlatesDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
|
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.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.dataobject.user.MemberUserDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.mysql.diningplates.DiningPlatesMapper;
|
import cn.iocoder.yudao.module.member.dal.mysql.diningplates.DiningPlatesMapper;
|
||||||
import cn.iocoder.yudao.module.member.dal.mysql.group.MemberGroupMapper;
|
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.card.CardService;
|
||||||
import cn.iocoder.yudao.module.member.service.order.OrderService;
|
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.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.service.userexpand.UserExpandService;
|
||||||
import cn.iocoder.yudao.module.member.util.MemberConstants;
|
import cn.iocoder.yudao.module.member.util.MemberConstants;
|
||||||
import cn.iocoder.yudao.module.system.api.dishesnutrition.DishesNutritionApi;
|
import cn.iocoder.yudao.module.system.api.dishesnutrition.DishesNutritionApi;
|
||||||
@ -133,6 +135,9 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|||||||
@Resource
|
@Resource
|
||||||
private MemberGroupMapper memberGroupMapper;
|
private MemberGroupMapper memberGroupMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private MemberTagService memberTagService;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MemberUserDO getUserByMobile(String mobile) {
|
public MemberUserDO getUserByMobile(String mobile) {
|
||||||
@ -740,4 +745,37 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|||||||
MemberUserDO memberUserDO = memberUserMapper.selectById(userId);
|
MemberUserDO memberUserDO = memberUserMapper.selectById(userId);
|
||||||
return memberUserDO.getCardId();
|
return memberUserDO.getCardId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BigDecimal getReductionAmount(Long userId, BigDecimal money) {
|
||||||
|
MemberUserDO memberUserDO = memberUserMapper.selectById(userId);
|
||||||
|
List<Long> tagIds = memberUserDO.getTagIds();
|
||||||
|
if (CollectionUtil.isEmpty(tagIds)){
|
||||||
|
return BigDecimal.ZERO;
|
||||||
|
}
|
||||||
|
List<MemberTagDO> tagList = memberTagService.getTagList(tagIds);
|
||||||
|
|
||||||
|
if(tagList.size()>1){
|
||||||
|
List<MemberTagDO> 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user