Merge branch 'refs/heads/test'

This commit is contained in:
seesaw
2024-08-06 18:38:38 +08:00
12 changed files with 149 additions and 2 deletions

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -61,4 +61,10 @@ public class AppOrderRespVO {
@Schema(description = "退款状态")
private String refundStatus;
@Schema(description = "减免状态")
private String reductionState;
@Schema(description = "减免金额")
private BigDecimal reductionAmount;
}

View File

@ -83,4 +83,14 @@ public class DishOrderDO extends BaseDO {
* 微信充值金额
*/
private BigDecimal wxAmount;
/**
* 减免状态
*/
private String reductionState;
/**
* 减免金额
*/
private BigDecimal reductionAmount;
}

View File

@ -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;
}

View File

@ -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();

View File

@ -70,4 +70,10 @@ public interface MemberTagService {
*/
List<MemberTagDO> getTagList();
/**
* 设置标签优先级
*/
void setFirst(Long id,String state);
}

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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;
}
}