1、账户明细接口增加非管理端只能查当前组织数据逻辑;2、产品时长单位和正常年月日单位枚举区分;

This commit is contained in:
gaoqr
2025-09-15 12:08:19 +08:00
parent 4cd5869b81
commit 40b23a78d1
12 changed files with 155 additions and 21 deletions
@@ -7,6 +7,7 @@ import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.excel.core.util.ExcelUtils;
import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.system.controller.admin.funds.balancedetails.vo.BalanceDetailsPageReqVO;
import com.cf.imes.module.system.controller.admin.funds.balancedetails.vo.BalanceDetailsRespVO;
import com.cf.imes.module.system.service.funds.incomeandexpense.IncomeExpenseService;
@@ -29,7 +30,7 @@ import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT
/**
* @author 组织余额明细
*/
@Tag(name = "管理后台 - 组织余额明细")
@Tag(name = "管理后台 - 组织账户明细")
@RestController
@RequestMapping("/system/balance")
@Validated
@@ -42,6 +43,10 @@ public class BalanceDetailsController {
@GetMapping("")
@Operation(summary = "查询组织账户明细分页")
public CommonResult<PageResult<BalanceDetailsRespVO>> getBalanceDetailsPage(@Valid BalanceDetailsPageReqVO pageReqVO) {
boolean manageEndPoint = SecurityFrameworkUtils.isManageEndPoint();
if (!manageEndPoint) {
pageReqVO.setOrganId(SecurityFrameworkUtils.getUserOrganId());
}
return success(incomeExpenseService.getBalanceDetailsPage(pageReqVO));
}
@@ -50,6 +55,10 @@ public class BalanceDetailsController {
@OperateLog(type = EXPORT)
public void balanceDetailsExport(@Valid BalanceDetailsPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
boolean manageEndPoint = SecurityFrameworkUtils.isManageEndPoint();
if (!manageEndPoint) {
pageReqVO.setOrganId(null);
}
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<BalanceDetailsRespVO> list = incomeExpenseService.getBalanceDetailsPage(pageReqVO).getList();
// 导出 Excel
@@ -1,8 +1,8 @@
package com.cf.imes.module.system.controller.admin.funds.products.vo.productDetails;
import com.cf.imes.framework.common.validation.NumberValid;
import com.cf.imes.module.system.validation.products.ProductDurationUnitValid;
import com.cf.imes.module.system.validation.products.ProductType;
import com.cf.imes.module.system.validation.products.TimeUnitValid;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.DecimalMax;
import jakarta.validation.constraints.DecimalMin;
@@ -31,7 +31,7 @@ public class ProductDetailsSaveReqVO {
private String duration;
@Schema(description = "产品时长单位,0:年、1:月", example = "1")
@TimeUnitValid
@ProductDurationUnitValid
private Integer durationUnit;
@Schema(description = "产品产量", requiredMode = Schema.RequiredMode.REQUIRED, example = "")
@@ -41,7 +41,7 @@ public class ProductDetailsSaveReqVO {
private String giftDuration;
@Schema(description = "赠送时长单位,0:年、1:月", example = "1")
@TimeUnitValid
@ProductDurationUnitValid
private Integer giftDurationUnit;
@Schema(description = "赠送产量", requiredMode = Schema.RequiredMode.REQUIRED, example = "")
@@ -8,7 +8,7 @@ import com.cf.imes.framework.excel.core.convert.DictConvert;
import com.cf.imes.framework.excel.core.convert.EnumConvert;
import com.cf.imes.module.system.enums.DictTypeConstants;
import com.cf.imes.module.system.enums.pay.InvoiceStatusEnum;
import com.cf.imes.module.system.enums.pay.DurationUnitEnum;
import com.cf.imes.module.system.enums.pay.ProductDurationUnitEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -52,7 +52,7 @@ public class PurchaseRecordRespVO {
@Schema(description = "购买时长单位,0:年、1:月", example = "1")
@ExcelProperty(value = "购买时长单位", converter = EnumConvert.class)
@EnumFormat(value = DurationUnitEnum.class)
@EnumFormat(value = ProductDurationUnitEnum.class)
private Integer purchaseDurationUnit;
@Schema(description = "赠送时长", example = "1")
@@ -61,7 +61,7 @@ public class PurchaseRecordRespVO {
@Schema(description = "赠送时长单位,0:年、1:月", example = "1")
@ExcelProperty(value = "赠送时长单位", converter = EnumConvert.class)
@EnumFormat(value = DurationUnitEnum.class)
@EnumFormat(value = ProductDurationUnitEnum.class)
private Integer giftDurationUnit;
@Schema(description = "支付方式")
@@ -18,7 +18,8 @@ import java.util.Objects;
public enum DurationUnitEnum implements IntArrayValuable, BaseEnum {
YEAR(0, ""),
MONTH(1, ""),;
MONTH(1, ""),
DAY(2, "");
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(DurationUnitEnum::getCode).toArray();
@@ -44,6 +45,10 @@ public enum DurationUnitEnum implements IntArrayValuable, BaseEnum {
return Objects.equals(MONTH.code, name);
}
public static boolean isDay(String name) {
return Objects.equals(DAY.code, name);
}
public static DurationUnitEnum fromStatus(Integer status) {
return Arrays.stream(values())
.filter(bean -> Objects.equals(bean.code, status))
@@ -0,0 +1,64 @@
package com.cf.imes.module.system.enums.pay;
import com.cf.imes.framework.common.core.IntArrayValuable;
import com.cf.imes.framework.excel.core.convert.BaseEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Objects;
/**
* 时长单位态枚举
*
* @author 晨丰科技
*/
@Getter
@AllArgsConstructor
public enum ProductDurationUnitEnum implements IntArrayValuable, BaseEnum {
YEAR(0, ""),
MONTH(1, "");
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(ProductDurationUnitEnum::getCode).toArray();
/**
* 状态值
*/
private final Integer code;
/**
* 状态名
*/
private final String desc;
@Override
public int[] array() {
return ARRAYS;
}
public static boolean isYear(String name) {
return Objects.equals(YEAR.code, name);
}
public static boolean isMonth(String name) {
return Objects.equals(MONTH.code, name);
}
public static ProductDurationUnitEnum fromStatus(Integer status) {
return Arrays.stream(values())
.filter(bean -> Objects.equals(bean.code, status))
.findFirst()
.orElse(null);
}
/**
* 获取描述desc,否则返回null
*
* @param status
* @return
*/
public static String getDesc(Integer status) {
ProductDurationUnitEnum unit = fromStatus(status);
return unit != null ? unit.getDesc() : null;
}
}
@@ -3,7 +3,6 @@ package com.cf.imes.module.system.service.funds.incomeandexpense;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.system.controller.admin.funds.balancedetails.vo.BalanceDetailsPageReqVO;
import com.cf.imes.module.system.controller.admin.funds.balancedetails.vo.BalanceDetailsRespVO;
import com.cf.imes.module.system.dal.dataobject.funds.purchase.PurchaseRecordDO;
@@ -43,10 +42,6 @@ public class IncomeExpenseServiceImpl implements IncomeExpenseService {
@Override
public PageResult<BalanceDetailsRespVO> getBalanceDetailsPage(BalanceDetailsPageReqVO pageReqVO) {
if (ObjectUtil.isNull(pageReqVO.getOrganId())) {
pageReqVO.setOrganId(SecurityFrameworkUtils.getUserOrganId());
}
PageResult<IncomeExpenseDetailsDO> pageResult = incomeExpenseDetailsMapper.selectDetailsPage(pageReqVO);
List<IncomeExpenseDetailsDO> pageResultList = pageResult.getList();
if(CollUtil.isEmpty(pageResultList)){
@@ -12,7 +12,7 @@ import com.cf.imes.module.system.dal.dataobject.funds.products.ProductsDO;
import com.cf.imes.module.system.dal.dataobject.funds.products.ProductsDetailDO;
import com.cf.imes.module.system.dal.mysql.funds.products.ProductsDetailMapper;
import com.cf.imes.module.system.dal.mysql.funds.products.ProductsMapper;
import com.cf.imes.module.system.enums.pay.DurationUnitEnum;
import com.cf.imes.module.system.enums.pay.ProductDurationUnitEnum;
import com.cf.imes.module.system.enums.products.ProductStatusEnum;
import com.cf.imes.module.system.enums.products.ProductsPurchaseTypeEnum;
import org.springframework.stereotype.Service;
@@ -197,7 +197,7 @@ public class ProductsDetailServiceImpl implements ProductsDetailService {
// 时长去重
count = productDetailsMapper.selectCountByDuration(createReqVO.getProductId(), createReqVO.getId(), duration, durationUnit);
if (count > 0) {
throw ServiceExceptionUtil.exception(PRODUCTS_DETAIL_DURATION_EXIST, duration, DurationUnitEnum.getDesc(durationUnit));
throw ServiceExceptionUtil.exception(PRODUCTS_DETAIL_DURATION_EXIST, duration, ProductDurationUnitEnum.getDesc(durationUnit));
}
} else if (createReqVO.getPurchaseType() == 1) {
//产量去重
@@ -5,7 +5,6 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.util.date.LocalDateTimeUtils;
import com.cf.imes.framework.id.core.util.SnowflakeIdWorker3rd;
import com.cf.imes.framework.pay.config.ChenfengPayConfig;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.system.controller.admin.funds.products.vo.product.ProductProcessorRespVO;
@@ -21,8 +20,8 @@ import com.cf.imes.module.system.enums.pay.PayChannelCodeEnum;
import com.cf.imes.module.system.enums.pay.PayConstants;
import com.cf.imes.module.system.enums.pay.PayOrderStatusEnum;
import com.cf.imes.module.system.enums.pay.PayProductChannelCodeEnum;
import com.cf.imes.module.system.enums.pay.ProductDurationUnitEnum;
import com.cf.imes.module.system.enums.pay.TradeTypeEnum;
import com.cf.imes.module.system.enums.pay.DurationUnitEnum;
import com.cf.imes.module.system.framework.snowflake.config.MybatisIdProperties;
import org.apache.commons.lang3.StringUtils;
@@ -644,7 +643,7 @@ public class PayProductProcessor {
* @return
*/
private static LocalDate addTime(LocalDate time, int duration, int unit) {
switch (DurationUnitEnum.fromStatus(unit)) {
switch (ProductDurationUnitEnum.fromStatus(unit)) {
case YEAR:
return time.plusYears(duration);
case MONTH:
@@ -21,9 +21,9 @@ import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(
validatedBy = {TimeUnitValidator.class}
validatedBy = {DurationUnitValidator.class}
)
public @interface TimeUnitValid {
public @interface DurationUnitValid {
String message() default "时长单位不合法";
Class<?>[] groups() default {};
@@ -13,7 +13,7 @@ import java.util.Objects;
* @author Gqr
* @since 2025/8/11 14:19
*/
public class TimeUnitValidator implements ConstraintValidator<TimeUnitValid, Integer> {
public class DurationUnitValidator implements ConstraintValidator<DurationUnitValid, Integer> {
@Override
public boolean isValid(Integer value, ConstraintValidatorContext constraintValidatorContext) {
@@ -0,0 +1,32 @@
package com.cf.imes.module.system.validation.products;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 产品时长单位校验注解
*
* @author Gqr
* @since 2025/8/11 14:18
*/
@Target({
ElementType.FIELD,
})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(
validatedBy = {ProductDurationUnitValidator.class}
)
public @interface ProductDurationUnitValid {
String message() default "时长单位不合法";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
@@ -0,0 +1,30 @@
package com.cf.imes.module.system.validation.products;
import cn.hutool.core.util.ObjectUtil;
import com.cf.imes.module.system.enums.pay.ProductDurationUnitEnum;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import java.util.Objects;
/**
* 产品时长单位校验器
*
* @author Gqr
* @since 2025/8/11 14:19
*/
public class ProductDurationUnitValidator implements ConstraintValidator<ProductDurationUnitValid, Integer> {
@Override
public boolean isValid(Integer value, ConstraintValidatorContext constraintValidatorContext) {
if (ObjectUtil.isNull(value)) {
return true;
}
for (ProductDurationUnitEnum unitEnum : ProductDurationUnitEnum.values()) {
if (Objects.equals(unitEnum.getCode(), value)) {
return true;
}
}
return false;
}
}