From 180a18f087a7ce2659ad49a552a1a49fc18599cd Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Tue, 2 Sep 2025 15:46:43 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E7=AE=A1=E7=90=86=E7=AB=AF=E7=8E=B0?= =?UTF-8?q?=E9=87=91=E6=80=BB=E9=A2=9D=E6=9F=A5=E8=AF=A2=E6=9D=A5=E6=BA=90?= =?UTF-8?q?=E5=92=8C=E6=95=B0=E5=80=BC=E4=BF=AE=E6=AD=A3=EF=BC=9B2?= =?UTF-8?q?=E3=80=81=E6=96=B0=E5=A2=9E=E7=AE=A1=E7=90=86=E7=AB=AF=E6=80=BB?= =?UTF-8?q?=E9=A2=9D=E6=98=8E=E7=BB=86=E6=9F=A5=E8=AF=A2=E5=92=8C=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E6=8E=A5=E5=8F=A3=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vo/BalanceDetailsPageReqVO.java | 4 ++ .../organamount/OrganAmountController.java | 34 +++++++++- .../vo/TotalAmountDetailsPageReqVO.java | 32 ++++++++++ .../vo/TotalAmountDetailsRespVO.java | 64 +++++++++++++++++++ .../IncomeExpenseDetailsMapper.java | 34 ++++++++-- .../system/enums/pay/TradeTypeEnum.java | 21 ++++++ .../IncomeExpenseServiceImpl.java | 2 +- .../funds/organamount/OrganAmountService.java | 12 ++++ .../organamount/OrganAmountServiceImpl.java | 52 ++++++++++++++- .../pay/IncomeExpenseTypeEnumValid.java | 31 +++++++++ .../pay/IncomeExpenseTypeEnumValidator.java | 27 ++++++++ .../validation/pay/TradeTypeEnumValid.java | 32 ++++++++++ .../pay/TradeTypeEnumValidator.java | 27 ++++++++ 13 files changed, 359 insertions(+), 13 deletions(-) create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/vo/TotalAmountDetailsPageReqVO.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/vo/TotalAmountDetailsRespVO.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/pay/IncomeExpenseTypeEnumValid.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/pay/IncomeExpenseTypeEnumValidator.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/pay/TradeTypeEnumValid.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/pay/TradeTypeEnumValidator.java diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/balancedetails/vo/BalanceDetailsPageReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/balancedetails/vo/BalanceDetailsPageReqVO.java index 82125e2ba..c9d0d504c 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/balancedetails/vo/BalanceDetailsPageReqVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/balancedetails/vo/BalanceDetailsPageReqVO.java @@ -2,6 +2,8 @@ package com.cf.imes.module.system.controller.admin.funds.balancedetails.vo; import com.cf.imes.framework.common.pojo.PageParam; +import com.cf.imes.module.system.validation.pay.IncomeExpenseTypeEnumValid; +import com.cf.imes.module.system.validation.pay.TradeTypeEnumValid; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -24,9 +26,11 @@ public class BalanceDetailsPageReqVO extends PageParam { private String businessNo; @Schema(description = "交易类型") + @TradeTypeEnumValid private Integer tradeType; @Schema(description = "收支类型") + @IncomeExpenseTypeEnumValid private Integer incomeExpenseType; @Schema(description = "创建时间", example = "[2022-07-01 ,2022-07-01]") diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/OrganAmountController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/OrganAmountController.java index b2e5624c8..1c175ca50 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/OrganAmountController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/OrganAmountController.java @@ -1,13 +1,20 @@ package com.cf.imes.module.system.controller.admin.funds.organamount; - import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.framework.common.pojo.PageParam; +import com.cf.imes.framework.common.pojo.PageResult; +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.module.system.controller.admin.funds.organamount.vo.AllOrganAmountRespVO; import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganAmountRespVO; import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganFundsStatisticsReqVO; +import com.cf.imes.module.system.controller.admin.funds.organamount.vo.TotalAmountDetailsPageReqVO; +import com.cf.imes.module.system.controller.admin.funds.organamount.vo.TotalAmountDetailsRespVO; import com.cf.imes.module.system.service.funds.organamount.OrganAmountService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -16,9 +23,12 @@ import org.springframework.web.bind.annotation.RestController; import jakarta.annotation.Resource; import jakarta.validation.Valid; +import java.io.IOException; +import java.util.List; import java.util.Map; import static com.cf.imes.framework.common.pojo.CommonResult.success; +import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; /** * @author 组织资金 @@ -40,12 +50,30 @@ public class OrganAmountController { return success(organAmountService.getOrganAmount()); } - @GetMapping("/manage") + @GetMapping("/manage/total") @Operation(summary = "获取管理端账户现金总额") - public CommonResult getManageOrganAmount() { + public CommonResult getManageTotalAmount() { return success(organAmountService.getOrganAmountAll()); } + @GetMapping("/manage/total/details") + @Operation(summary = "获取管理端总额明细") + public CommonResult> getManageTotalAmountDetails(@Valid TotalAmountDetailsPageReqVO reqVO) { + return success(organAmountService.getManageTotalAmountDetails(reqVO)); + } + + @GetMapping("/manage/total/details/export") + @Operation(summary = "管理端总额明细导出") + @OperateLog(type = EXPORT) + public void exportManageTotalAmountDetails(@Valid TotalAmountDetailsPageReqVO reqVO, + HttpServletResponse response) throws IOException { + reqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = organAmountService.getManageTotalAmountDetails(reqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "总额明细.xls", "数据", TotalAmountDetailsRespVO.class, + BeanUtils.toBean(list, TotalAmountDetailsRespVO.class)); + } + @GetMapping("/statistics/consumptionTrend") @Operation(summary = "获取组织消费趋势") public CommonResult> getOrganConsumptionTrend(@Valid OrganFundsStatisticsReqVO reqVO) { diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/vo/TotalAmountDetailsPageReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/vo/TotalAmountDetailsPageReqVO.java new file mode 100644 index 000000000..ec6485da7 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/vo/TotalAmountDetailsPageReqVO.java @@ -0,0 +1,32 @@ +package com.cf.imes.module.system.controller.admin.funds.organamount.vo; + +import com.cf.imes.framework.common.pojo.PageParam; +import com.cf.imes.module.system.validation.pay.IncomeExpenseTypeEnumValid; +import com.cf.imes.module.system.validation.pay.TradeTypeEnumValid; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.time.LocalDate; + +/** + * @author Gqr + * @since 2025/9/2 14:14 + */ +@Schema(description = "管理后台 - 总额明细 Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class TotalAmountDetailsPageReqVO extends PageParam { + @Schema(description = "时间范围") + private LocalDate[] createTime; + + @Schema(description = "交易类型") + @TradeTypeEnumValid + private Integer tradeType; + + @Schema(description = "收入支出类型") + @IncomeExpenseTypeEnumValid + private Integer incomeExpenseType; +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/vo/TotalAmountDetailsRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/vo/TotalAmountDetailsRespVO.java new file mode 100644 index 000000000..d9675a161 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/vo/TotalAmountDetailsRespVO.java @@ -0,0 +1,64 @@ +package com.cf.imes.module.system.controller.admin.funds.organamount.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.cf.imes.framework.excel.core.annotations.EnumFormat; +import com.cf.imes.framework.excel.core.convert.EnumConvert; +import com.cf.imes.module.system.enums.pay.IncomeExpenseTypeEnum; +import com.cf.imes.module.system.enums.pay.TradeTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author Gqr + * @since 2025/9/2 14:51 + */ +@Schema(description = "管理后台 - 总额明细信息 Response VO") +@Data +public class TotalAmountDetailsRespVO { + @Schema(description = "流水号") + @ExcelProperty("流水号") + private String businessNo; + + @Schema(description = "交易类型,0充值 1软件购买") + @ExcelProperty(value = "交易类型", converter = EnumConvert.class) + @EnumFormat(value = TradeTypeEnum.class) + private Integer tradeType; + + + @Schema(description = "收支类型,0收入 1支出") + @ExcelProperty(value = "收支类型", converter = EnumConvert.class) + @EnumFormat(value = IncomeExpenseTypeEnum.class) + private Integer incomeExpenseType; + + @Schema(description = "充值金额") + @ExcelProperty("充值金额") + private BigDecimal rechargeAmount; + + @Schema(description = "产品金额") + @ExcelProperty("产品金额") + private BigDecimal productAmount; + + @Schema(description = "现金金额支付") + @ExcelProperty("现金金额支付") + private BigDecimal cashAmount; + + @Schema(description = "账户现金余额") + @ExcelProperty("账户现金余额") + private BigDecimal accountCashBalance; + + @Schema(description = "操作人") + @ExcelProperty("操作人") + private String operatorName; + + @Schema(description = "操作组织") + @ExcelProperty("操作组织") + private String organName; + + @Schema(description = "交易时间") + @ExcelProperty("交易时间") + private LocalDateTime createTime; + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/incomeandexpense/IncomeExpenseDetailsMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/incomeandexpense/IncomeExpenseDetailsMapper.java index a69bdb3a2..e5e5e5c59 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/incomeandexpense/IncomeExpenseDetailsMapper.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/incomeandexpense/IncomeExpenseDetailsMapper.java @@ -1,15 +1,16 @@ package com.cf.imes.module.system.dal.mysql.incomeandexpense; +import cn.hutool.core.util.ObjectUtil; import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +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.organamount.vo.TotalAmountDetailsPageReqVO; import com.cf.imes.module.system.dal.dataobject.incomeandexpense.IncomeExpenseDetailsDO; import org.apache.ibatis.annotations.Mapper; -import java.util.List; - /** * 收支明细 Mapper * @@ -18,15 +19,36 @@ import java.util.List; */ @Mapper public interface IncomeExpenseDetailsMapper extends BaseMapperX { - default PageResult selectDetailsPage(BalanceDetailsPageReqVO pageReqVO, List organIds) { + /** + * 获取余额明细 + * + * @param pageReqVO + * @return + */ + default PageResult selectDetailsPage(BalanceDetailsPageReqVO pageReqVO) { + Long organId = pageReqVO.getOrganId(); return selectPage(pageReqVO, new LambdaQueryWrapperX() - .eqIfPresent(IncomeExpenseDetailsDO::getOrganId, pageReqVO.getOrganId()) - .inIfPresent(IncomeExpenseDetailsDO::getOrganId, organIds) + .eqIfPresent(IncomeExpenseDetailsDO::getOrganId, ObjectUtil.isNotNull(organId) ? organId : SecurityFrameworkUtils.getUserOrganId()) .eq(IncomeExpenseDetailsDO::getDeleted, false) .likeIfPresent(IncomeExpenseDetailsDO::getBusinessNo, pageReqVO.getBusinessNo()) .eqIfPresent(IncomeExpenseDetailsDO::getTradeType,pageReqVO.getTradeType()) .eqIfPresent(IncomeExpenseDetailsDO::getIncomeExpenseType,pageReqVO.getIncomeExpenseType()) - .betweenIfPresent(IncomeExpenseDetailsDO::getCreateTime,pageReqVO.getCreateTime())); + .betweenIfPresent(IncomeExpenseDetailsDO::getCreateTime,pageReqVO.getCreateTime()) + .orderByDesc(IncomeExpenseDetailsDO::getId)); } + + /** + * 总额明细分页 + * @param pageReqVO + * @return + */ + default PageResult selectTotalAmountDetailsPage(TotalAmountDetailsPageReqVO pageReqVO) { + return selectPage(pageReqVO, new LambdaQueryWrapperX() + .eq(IncomeExpenseDetailsDO::getDeleted, false) + .eqIfPresent(IncomeExpenseDetailsDO::getTradeType, pageReqVO.getTradeType()) + .eqIfPresent(IncomeExpenseDetailsDO::getIncomeExpenseType, pageReqVO.getIncomeExpenseType()) + .betweenIfPresent(IncomeExpenseDetailsDO::getCreateTime, pageReqVO.getCreateTime()) + .orderByDesc(IncomeExpenseDetailsDO::getId)); + } } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/enums/pay/TradeTypeEnum.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/enums/pay/TradeTypeEnum.java index 97b17f0b1..d9a8e38f3 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/enums/pay/TradeTypeEnum.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/enums/pay/TradeTypeEnum.java @@ -6,6 +6,7 @@ import lombok.Getter; /** * 交易类型枚举 + * * @author Gqr * @since 2025/8/12 17:45 */ @@ -34,4 +35,24 @@ public enum TradeTypeEnum implements BaseEnum { } return null; } + + /** + * 是否充值 + * + * @param code + * @return + */ + public static boolean isRecharge(Integer code) { + return RECHARGE.getCode().equals(code); + } + + /** + * 是否产品购买 + * + * @param code + * @return + */ + public static boolean isProduct(Integer code) { + return PRODUCT.getCode().equals(code); + } } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/incomeandexpense/IncomeExpenseServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/incomeandexpense/IncomeExpenseServiceImpl.java index 4414f995a..898f71c27 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/incomeandexpense/IncomeExpenseServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/incomeandexpense/IncomeExpenseServiceImpl.java @@ -29,7 +29,7 @@ public class IncomeExpenseServiceImpl implements IncomeExpenseService { @Override public PageResult getBalanceDetailsPage(BalanceDetailsPageReqVO pageReqVO) { - PageResult pageResult = incomeExpenseDetailsMapper.selectDetailsPage(pageReqVO,null); + PageResult pageResult = incomeExpenseDetailsMapper.selectDetailsPage(pageReqVO); if(CollUtil.isEmpty(pageResult.getList())){ return new PageResult<>(); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountService.java index 422911e0f..33e4efea5 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountService.java @@ -1,10 +1,14 @@ package com.cf.imes.module.system.service.funds.organamount; +import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.module.system.controller.admin.funds.organamount.vo.AllOrganAmountRespVO; import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganAmountRespVO; import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganFundsStatisticsReqVO; import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganRechargeAmountRespVO; +import com.cf.imes.module.system.controller.admin.funds.organamount.vo.TotalAmountDetailsPageReqVO; +import com.cf.imes.module.system.controller.admin.funds.organamount.vo.TotalAmountDetailsRespVO; import com.cf.imes.module.system.dal.dataobject.funds.organamount.OrganAmountDO; +import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; import java.util.Map; @@ -70,4 +74,12 @@ public interface OrganAmountService { * @return */ Map getConsumptionTrend(OrganFundsStatisticsReqVO reqVO, boolean queryOrg); + + /** + * 获取管理端总额明细 + * + * @param reqVO + * @return + */ + PageResult getManageTotalAmountDetails(@Param("reqVO") TotalAmountDetailsPageReqVO reqVO); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountServiceImpl.java index b74bfbac2..820aedced 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountServiceImpl.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.cf.imes.framework.common.exception.ServiceException; +import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.common.util.Assert.AssertUtils; import com.cf.imes.framework.common.util.object.BeanUtils; import com.cf.imes.framework.mybatis.core.query.LambdaUpdateWrapperX; @@ -18,6 +19,12 @@ import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganAmou import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganAmountRespVO; import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganFundsStatisticsReqVO; import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganRechargeAmountRespVO; +import com.cf.imes.module.system.controller.admin.funds.organamount.vo.TotalAmountDetailsPageReqVO; +import com.cf.imes.module.system.controller.admin.funds.organamount.vo.TotalAmountDetailsRespVO; +import com.cf.imes.module.system.dal.dataobject.incomeandexpense.IncomeExpenseDetailsDO; +import com.cf.imes.module.system.dal.dataobject.organ.OrganizationDO; +import com.cf.imes.module.system.dal.mysql.incomeandexpense.IncomeExpenseDetailsMapper; +import com.cf.imes.module.system.enums.pay.TradeTypeEnum; import com.cf.imes.module.system.service.funds.invoice.InvoiceService; import com.cf.imes.module.system.service.funds.purchase.PurchaseService; import com.cf.imes.module.system.controller.admin.funds.purchase.vo.OrgEarliestPurchaseProductRespVO; @@ -60,6 +67,9 @@ public class OrganAmountServiceImpl implements OrganAmountService { @Resource private OrganAmountMapper organAmountMapper; + @Resource + private IncomeExpenseDetailsMapper incomeExpenseDetailsMapper; + @Resource private OrganService organService; @@ -207,9 +217,9 @@ public class OrganAmountServiceImpl implements OrganAmountService { AllOrganAmountRespVO respVO = new AllOrganAmountRespVO(); // 所有账户的总额 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.select("sum(amount) as total"); - Map result = organAmountMapper.selectMaps(wrapper).get(0); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("sum(cash_amount_change) as total"); + Map result = incomeExpenseDetailsMapper.selectMaps(wrapper).get(0); BigDecimal allOrganAmount = (BigDecimal) result.get("total"); // 管理端查看可开票金额 InvoiceAmountRespVO invoiceAmount = invoiceService.getManageInvoiceAmount(); @@ -221,6 +231,42 @@ public class OrganAmountServiceImpl implements OrganAmountService { } + @Override + public PageResult getManageTotalAmountDetails(TotalAmountDetailsPageReqVO reqVO) { + PageResult pageResult = incomeExpenseDetailsMapper.selectTotalAmountDetailsPage(reqVO); + + List resultList = new ArrayList<>(); + List list = pageResult.getList(); + for (IncomeExpenseDetailsDO detailsDO : list) { + TotalAmountDetailsRespVO totalAmountDetailsRespVO = new TotalAmountDetailsRespVO(); + totalAmountDetailsRespVO.setBusinessNo(detailsDO.getBusinessNo()); + // 根据交易类型赋值对应的金额 + Integer tradeType = detailsDO.getTradeType(); + totalAmountDetailsRespVO.setTradeType(tradeType); + if (TradeTypeEnum.isRecharge(tradeType)) { + totalAmountDetailsRespVO.setRechargeAmount(detailsDO.getCashAmountChange()); + totalAmountDetailsRespVO.setProductAmount(BigDecimal.ZERO); + } + if (TradeTypeEnum.isProduct(tradeType)) { + totalAmountDetailsRespVO.setRechargeAmount(BigDecimal.ZERO); + totalAmountDetailsRespVO.setProductAmount(detailsDO.getCashAmountChange()); + } + totalAmountDetailsRespVO.setIncomeExpenseType(detailsDO.getIncomeExpenseType()); + totalAmountDetailsRespVO.setCashAmount(BigDecimal.ZERO); + totalAmountDetailsRespVO.setAccountCashBalance(detailsDO.getAmount()); + totalAmountDetailsRespVO.setOperatorName(detailsDO.getCreator()); + OrganizationDO organ = organService.getOrgan(detailsDO.getOrganId()); + if (ObjectUtil.isNotNull(organ)) { + totalAmountDetailsRespVO.setOrganName(organ.getName()); + } + totalAmountDetailsRespVO.setCreateTime(detailsDO.getCreateTime()); + + resultList.add(totalAmountDetailsRespVO); + } + + return new PageResult<>(resultList, pageResult.getTotal()); + } + @Override public Map getConsumptionTrend(OrganFundsStatisticsReqVO reqVO, boolean queryOrg) { Map resultMap = new HashMap<>(); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/pay/IncomeExpenseTypeEnumValid.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/pay/IncomeExpenseTypeEnumValid.java new file mode 100644 index 000000000..fc08e88fb --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/pay/IncomeExpenseTypeEnumValid.java @@ -0,0 +1,31 @@ +package com.cf.imes.module.system.validation.pay; + +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/9/2 14:31 + */ +@Target({ + ElementType.FIELD, +}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Constraint( + validatedBy = {IncomeExpenseTypeEnumValidator.class} +) +public @interface IncomeExpenseTypeEnumValid { + String message() default "不支持的收支类型"; + + Class[] groups() default {}; + + Class[] payload() default {}; +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/pay/IncomeExpenseTypeEnumValidator.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/pay/IncomeExpenseTypeEnumValidator.java new file mode 100644 index 000000000..ac2469bc7 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/pay/IncomeExpenseTypeEnumValidator.java @@ -0,0 +1,27 @@ +package com.cf.imes.module.system.validation.pay; + +import cn.hutool.core.util.ObjectUtil; +import com.cf.imes.module.system.enums.pay.IncomeExpenseTypeEnum; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + +/** + * 收支类型校验器 + * + * @author Gqr + * @since 2025/9/2 14:32 + */ +public class IncomeExpenseTypeEnumValidator implements ConstraintValidator { + @Override + public boolean isValid(Integer value, ConstraintValidatorContext context) { + if (ObjectUtil.isNull(value)) { + return true; + } + for (IncomeExpenseTypeEnum codeEnum : IncomeExpenseTypeEnum.values()) { + if (ObjectUtil.equal(codeEnum.getCode(), value)) { + return true; + } + } + return false; + } +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/pay/TradeTypeEnumValid.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/pay/TradeTypeEnumValid.java new file mode 100644 index 000000000..dff6aed7b --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/pay/TradeTypeEnumValid.java @@ -0,0 +1,32 @@ +package com.cf.imes.module.system.validation.pay; + +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/9/2 14:24 + */ +@Target({ + ElementType.FIELD, +}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Constraint( + validatedBy = {TradeTypeEnumValidator.class} +) +public @interface TradeTypeEnumValid { + String message() default "不支持的交易类型"; + + Class[] groups() default {}; + + Class[] payload() default {}; +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/pay/TradeTypeEnumValidator.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/pay/TradeTypeEnumValidator.java new file mode 100644 index 000000000..a271c7ff6 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/validation/pay/TradeTypeEnumValidator.java @@ -0,0 +1,27 @@ +package com.cf.imes.module.system.validation.pay; + +import cn.hutool.core.util.ObjectUtil; +import com.cf.imes.module.system.enums.pay.TradeTypeEnum; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + +/** + * 交易类型校验器 + * + * @author Gqr + * @since 2025/9/2 14:25 + */ +public class TradeTypeEnumValidator implements ConstraintValidator { + @Override + public boolean isValid(Integer value, ConstraintValidatorContext context) { + if (ObjectUtil.isNull(value)) { + return true; + } + for (TradeTypeEnum codeEnum : TradeTypeEnum.values()) { + if (ObjectUtil.equal(codeEnum.getCode(), value)) { + return true; + } + } + return false; + } +}