标签
This commit is contained in:
@ -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;
|
||||
|
||||
}
|
||||
|
@ -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<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 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;
|
||||
|
||||
}
|
||||
|
@ -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<MemberUserRespVO> getUser(@RequestParam("id") Long id) {
|
||||
MemberUserDO user = memberUserService.getUser(id);
|
||||
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));
|
||||
return success(memberUserRespVO);
|
||||
}
|
||||
|
@ -61,4 +61,10 @@ public class AppOrderRespVO {
|
||||
@Schema(description = "退款状态")
|
||||
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 String reductionState;
|
||||
|
||||
/**
|
||||
* 减免金额
|
||||
*/
|
||||
private BigDecimal reductionAmount;
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -70,4 +70,10 @@ public interface MemberTagService {
|
||||
*/
|
||||
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.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<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 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);
|
||||
}
|
||||
|
@ -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<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