src/main/java/cc/mrbird/febs/common/utils/ValidateEntityUtils.java
@@ -5,12 +5,116 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import java.util.ArrayList; import java.util.List; import java.util.Objects; /** * 实体验证工具类 */ public class ValidateEntityUtils { /** * 确保指定列的有效性,并返回相应的实体对象 * 此方法用于验证数据库中某列的值是否存在,并返回包含该值的实体对象 * 如果指定的值不存在或为null,将抛出异常 * * @param valueToCheck 需要验证的值 * @param columnExtractor 列值提取器,用于指定需要验证的列 * @param queryWrapperExtractor 查询包装器提取器,用于执行数据库查询 * @param errMsg 错误消息格式字符串 * @param <T> 实体类类型 * @param <R> 列值类型 * @param <V> 需要验证的值的类型 * @return 返回包含指定列值的实体对象 * @throws IllegalArgumentException 如果需要验证的值为null * @throws FebsException 如果查询结果为空或列值为null,或查询过程中发生异常 */ public static <T, R, V> T ensureColumnReturnEntity( V valueToCheck, SFunction<T, R> columnExtractor, SFunction<LambdaQueryWrapper<T>, T> queryWrapperExtractor, String errMsg) { // 检查需要验证的值是否为null if (valueToCheck == null) { throw new IllegalArgumentException("The value to check cannot be null while ensureColumnReturnEntity column"); } T entity = null; try { // 创建LambdaQueryWrapper并配置查询条件 LambdaQueryWrapper<T> wrapper = new LambdaQueryWrapper<>(); wrapper.select(columnExtractor) .eq(columnExtractor, valueToCheck); // 执行查询并获取结果实体 entity = queryWrapperExtractor.apply(wrapper); } catch (Exception e) { // 记录异常日志 throw new FebsException(StrUtil.format("An error occurred while ensureColumnReturnEntity column: {}", valueToCheck)); } // 如果查询结果为空,则抛出异常 if (entity == null) { throw new FebsException(StrUtil.format(errMsg, valueToCheck)); } // 提取查询结果中的列值 R columnValue = columnExtractor.apply(entity); // 如果列值为null,则抛出异常 if (columnValue == null) { throw new FebsException(StrUtil.format(errMsg, valueToCheck)); } // 返回查询到的实体类对象 return entity; } /** * 确保指定列的有效性,并返回相应的实体对象列表 * 此方法用于验证数据库中某列的值是否存在,并返回包含该值的实体对象列表 * 如果指定的值不存在或为null,将抛出异常 * * @param valueToCheck 需要验证的值 * @param columnExtractor 列值提取器,用于指定需要验证的列 * @param queryWrapperExtractor 查询包装器提取器,用于执行数据库查询 * @param errMsg 错误消息格式字符串 * @param <T> 实体类类型 * @param <R> 列值类型 * @param <V> 需要验证的值的类型 * @return 返回包含指定列值的实体对象列表 * @throws IllegalArgumentException 如果需要验证的值为null * @throws FebsException 如果查询结果为空或列值为null,或查询过程中发生异常 */ public static <T, R, V> List<T> ensureColumnReturnEntityList( V valueToCheck, SFunction<T, R> columnExtractor, SFunction<LambdaQueryWrapper<T>, List<T>> queryWrapperExtractor, String errMsg) { // 检查需要验证的值是否为null if (valueToCheck == null) { throw new IllegalArgumentException("The value to check cannot be null while ensureColumnReturnEntityList column"); } List<T> entities = new ArrayList<>(); try { // 创建LambdaQueryWrapper并配置查询条件 LambdaQueryWrapper<T> wrapper = new LambdaQueryWrapper<>(); wrapper.select(columnExtractor) .eq(columnExtractor, valueToCheck); // 执行查询并获取结果实体列表 entities = queryWrapperExtractor.apply(wrapper); } catch (Exception e) { // 记录异常日志 throw new FebsException(StrUtil.format("An error occurred while ensureColumnReturnEntityList column: {}", valueToCheck)); } // 如果查询结果为空,则抛出异常 if (entities == null || entities.isEmpty()) { throw new FebsException(StrUtil.format(errMsg, valueToCheck)); } // 返回查询到的实体类对象列表 return entities; } /** * 确保指定列的值在数据库中是存在的, @@ -100,8 +204,7 @@ } catch (Exception e) { // 记录异常日志 // 如果在检查过程中发生异常,抛出FebsException异常 throw new FebsException(StrUtil.format("An error occurred while ensuring unique column: {}", valueToCheck)); throw new FebsException(StrUtil.format("An error occurred while ensureUnique column: {}", valueToCheck)); } // 如果结果数量大于0,说明值已存在,抛出FebsException异常 src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java
@@ -104,22 +104,13 @@ @Override public FebsResponse deliverGoods(DeliverGoodsDto deliverGoodsDto) { MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(deliverGoodsDto.getId()); ValidateEntityUtils.ensureColumnValid(deliverGoodsDto.getId(), MallOrderInfo::getId, mallOrderInfoMapper::selectOne, "订单{}不存在"); // if(ObjectUtil.isEmpty(mallOrderInfo)){ // return new FebsResponse().fail().message("订单不存在,刷新后重试"); // } MallOrderInfo mallOrderInfo = ValidateEntityUtils.ensureColumnReturnEntity( deliverGoodsDto.getId(), MallOrderInfo::getId, mallOrderInfoMapper::selectOne, "订单{}不存在"); ValidateEntityUtils.ensureEqual(mallOrderInfo.getStatus(), OrderStatusEnum.WAIT_SHIPPING.getValue(), "订单状态不是待发货状态"); // Integer status = mallOrderInfo.getStatus(); // if(2 != status){ // return new FebsResponse().fail().message("订单不是待发货状态"); // } ValidateEntityUtils.ensureEqual(mallOrderInfo.getDeliveryType(), 2, "订单的配送方式不是快递"); // Integer deliveryType = mallOrderInfo.getDeliveryType(); // if(2 != deliveryType){ // return new FebsResponse().fail().message("订单的配送方式不是快递"); // } // String expressNo = deliverGoodsDto.getExpressNo(); // if(StrUtil.isEmpty(expressNo)){ // return new FebsResponse().fail().message("请输入物流单号"); @@ -463,19 +454,13 @@ @Override public FebsResponse deliverGoodsUpdate(DeliverGoodsDto deliverGoodsDto) { MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(deliverGoodsDto.getId()); if(ObjectUtil.isEmpty(mallOrderInfo)){ return new FebsResponse().fail().message("订单不存在,刷新后重试"); } Integer status = mallOrderInfo.getStatus(); if(3 != status){ return new FebsResponse().fail().message("订单不是待收货状态"); } Integer deliveryType = mallOrderInfo.getDeliveryType(); if(2 != deliveryType){ return new FebsResponse().fail().message("订单的配送方式不是快递"); } MallOrderInfo mallOrderInfo = ValidateEntityUtils.ensureColumnReturnEntity( deliverGoodsDto.getId(), MallOrderInfo::getId, mallOrderInfoMapper::selectOne, "订单{}不存在"); ValidateEntityUtils.ensureEqual(mallOrderInfo.getStatus(), OrderStatusEnum.WAIT_FINISH.getValue(), "订单不是待收货状态"); ValidateEntityUtils.ensureEqual(mallOrderInfo.getDeliveryType(), 2, "订单的配送方式不是快递"); mallOrderInfo.setStatus(OrderStatusEnum.FINISH.getValue()); mallOrderInfo.setReceivingTime(new Date()); mallOrderInfoMapper.updateById(mallOrderInfo); src/test/java/cc/mrbird/febs/AgentTest.java
@@ -1,6 +1,7 @@ package cc.mrbird.febs; import cc.mrbird.febs.common.utils.ValidateEntityUtils; import cc.mrbird.febs.mall.entity.MallMemberCoupon; import cc.mrbird.febs.mall.mapper.MallMemberCouponMapper; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -8,6 +9,7 @@ import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; import java.util.List; /** * @author wzy @@ -22,8 +24,10 @@ MallMemberCouponMapper mallMemberCouponMapper; @Test public void getCouponAmountMap() { // ValidateEntityUtils.ensureColumnValid(205L, MallMemberCoupon::getId, mallMemberCouponMapper::selectOne, "id{}不存在"); // ValidateEntityUtils.ensureUnique(205L, MallMemberCoupon::getId, mallMemberCouponMapper::selectCount, "id{}已存在"); MallMemberCoupon mallMemberCoupon = ValidateEntityUtils.ensureColumnReturnEntity(209L, MallMemberCoupon::getId, mallMemberCouponMapper::selectOne, "id{}不存在"); List<MallMemberCoupon> mallMemberCoupons = ValidateEntityUtils.ensureColumnReturnEntityList(209L, MallMemberCoupon::getId, mallMemberCouponMapper::selectList, "id{}不存在"); ValidateEntityUtils.ensureColumnValid(205L, MallMemberCoupon::getId, mallMemberCouponMapper::selectOne, "id{}不存在"); ValidateEntityUtils.ensureUnique(205L, MallMemberCoupon::getId, mallMemberCouponMapper::selectCount, "id{}已存在"); ValidateEntityUtils.ensureEqual(205L, 206L, "{},{},值不相等"); // // 使用未编码的经纬度字符串