1、管理端分析页账户资金统计改为只展示销售额;2、移除组织资金相关;

This commit is contained in:
gaoqr
2025-11-07 10:24:22 +08:00
parent 55a75f8d3c
commit 3ff8a544b0
13 changed files with 75 additions and 226 deletions
@@ -77,7 +77,7 @@ public class ManageStatisticsController {
}
@GetMapping("/funds/tradeType/group")
@Operation(summary = "账户资金充值、软件购买统计")
@Operation(summary = "销售额统计")
public CommonResult<Map<String, Object>> getFunsTradeTypeGroupStatistics(@Valid OrgStatusGroupStatisticsReqVO reqVO) {
return success(fundsStatisticsService.getFunsTradeTypeGroupStatistics(reqVO));
}
@@ -1,63 +0,0 @@
package com.cf.imes.module.system.dal.dataobject.funds.organamount;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
import lombok.*;
import java.math.BigDecimal;
@TableName("system_organization_amount")
@KeySequence("system_organization_amount_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OrganAmountDO extends BaseDO {
/**
* 主键
*/
@TableId
private Long id;
/**
* 组织ID
*/
private Long organId;
/**
* 现金金额
*/
private BigDecimal amount;
/**
* 赠送金额
*/
private BigDecimal giftAmount;
/**
* 货币类型
*/
private Integer currency;
/**
* 货币单位
*/
private String currencyUnit;
/**
* 版本号
*/
private int version;
}
@@ -1,22 +0,0 @@
package com.cf.imes.module.system.dal.mysql.funds.organamount;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganAmountGroupByCreateTimeRespVO;
import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganFundsStatisticsReqVO;
import com.cf.imes.module.system.dal.dataobject.funds.organamount.OrganAmountDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface OrganAmountMapper extends BaseMapperX<OrganAmountDO> {
/**
* 查询基于创建时间的组织收支趋势
*
* @param reqVO
* @return
*/
List<OrganAmountGroupByCreateTimeRespVO> selectOrganIncomeExpenseTrendGroupByCreateTime(@Param("req") OrganFundsStatisticsReqVO reqVO, @Param("organId") Long organId);
}
@@ -11,9 +11,7 @@ import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceAmount
import com.cf.imes.module.system.controller.admin.funds.organamount.vo.TotalSalesAmountRespVO;
import com.cf.imes.module.system.controller.admin.funds.purchase.vo.PurchaseRecordPageReqVO;
import com.cf.imes.module.system.controller.admin.funds.purchase.vo.SalesDetailsPageReqVO;
import com.cf.imes.module.system.controller.admin.statistics.vo.OrgStatusGroupStatisticsReqVO;
import com.cf.imes.module.system.dal.dataobject.funds.purchase.PurchaseRecordDO;
import com.cf.imes.module.system.dal.dataobject.funds.statistics.FundsTradeTypeGroupStatisticsDO;
import com.cf.imes.module.system.enums.pay.InvoiceStatusEnum;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -133,12 +131,4 @@ public interface PurchaseRecordMapper extends BaseMapperX<PurchaseRecordDO> {
PurchaseRecordDO::getCreator, PurchaseRecordDO::getCreateTime, PurchaseRecordDO::getPaymentMethod)
);
}
/**
* 获取软件购买统计分组
*
* @param reqVO
* @return
*/
List<FundsTradeTypeGroupStatisticsDO> getPurchaseGroupStatistics(@Param("req") OrgStatusGroupStatisticsReqVO reqVO);
}
@@ -1,8 +1,16 @@
package com.cf.imes.module.system.dal.mysql.incomeandexpense;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganAmountGroupByCreateTimeRespVO;
import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganFundsStatisticsReqVO;
import com.cf.imes.module.system.controller.admin.statistics.vo.OrgStatusGroupStatisticsReqVO;
import com.cf.imes.module.system.dal.dataobject.funds.statistics.FundsTradeTypeGroupStatisticsDO;
import com.cf.imes.module.system.dal.dataobject.incomeandexpense.IncomeExpenseDetailsDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 收支明细 Mapper
*
@@ -11,4 +19,20 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface IncomeExpenseDetailsMapper extends BaseMapperX<IncomeExpenseDetailsDO> {
/**
* 查询基于创建时间的组织收支趋势
*
* @param reqVO
* @return
*/
List<OrganAmountGroupByCreateTimeRespVO> selectOrganIncomeExpenseTrendGroupByCreateTime(@Param("req") OrganFundsStatisticsReqVO reqVO, @Param("organId") Long organId);
/**
* 查询基于创建时间的组织消费额趋势
*
* @param reqVO
* @return
*/
List<FundsTradeTypeGroupStatisticsDO> selectTotalSalesTrendGroupByCreateTime(@Param("req") OrgStatusGroupStatisticsReqVO reqVO);
}
@@ -1,14 +1,10 @@
package com.cf.imes.module.system.dal.mysql.pay;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cf.imes.module.system.controller.admin.statistics.vo.OrgStatusGroupStatisticsReqVO;
import com.cf.imes.module.system.dal.dataobject.funds.statistics.FundsTradeTypeGroupStatisticsDO;
import com.cf.imes.module.system.dal.dataobject.pay.PayOrderDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
/**
* 支付订单 Mapper
@@ -25,12 +21,4 @@ public interface PayOrderMapper extends BaseMapper<PayOrderDO> {
* @return
*/
BigDecimal getRechargeTotalAmount();
/**
* 获取充值统计分组
*
* @param reqVO
* @return
*/
List<FundsTradeTypeGroupStatisticsDO> getRechargeGroupStatistics(@Param("req") OrgStatusGroupStatisticsReqVO reqVO);
}
@@ -10,9 +10,9 @@ import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganProd
import com.cf.imes.module.system.controller.admin.funds.organamount.vo.TotalSalesAmountRespVO;
import com.cf.imes.module.system.controller.admin.funds.purchase.vo.OrgEarliestPurchaseProductRespVO;
import com.cf.imes.module.system.dal.dataobject.funds.purchase.PurchaseRecordDO;
import com.cf.imes.module.system.dal.mysql.incomeandexpense.IncomeExpenseDetailsMapper;
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.dal.mysql.funds.organamount.OrganAmountMapper;
import com.cf.imes.module.system.service.organ.OrganService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -43,7 +43,7 @@ public class OrganAmountServiceImpl implements OrganAmountService {
@Resource
private OrganAmountMapper organAmountMapper;
private IncomeExpenseDetailsMapper incomeExpenseDetailsMapper;
@Resource
private OrganService organService;
@@ -106,7 +106,7 @@ public class OrganAmountServiceImpl implements OrganAmountService {
Map<String, Object> orgAmountSeriesItem = new HashMap<>();
// 查询组织收支趋势统计
Map<String, List<OrganAmountGroupByCreateTimeRespVO>> organIncomeExpenseGroupByCreateTimeRespMap = organAmountMapper.selectOrganIncomeExpenseTrendGroupByCreateTime(reqVO, queryOrg ? organId : null).stream()
Map<String, List<OrganAmountGroupByCreateTimeRespVO>> organIncomeExpenseGroupByCreateTimeRespMap = incomeExpenseDetailsMapper.selectOrganIncomeExpenseTrendGroupByCreateTime(reqVO, queryOrg ? organId : null).stream()
.sorted(Comparator.naturalOrder())
.collect(Collectors.groupingBy(OrganAmountGroupByCreateTimeRespVO::getDate, LinkedHashMap::new, Collectors.toList()));
@@ -2,8 +2,7 @@ package com.cf.imes.module.system.service.funds.statistics;
import com.cf.imes.module.system.controller.admin.statistics.vo.OrgStatusGroupStatisticsReqVO;
import com.cf.imes.module.system.dal.dataobject.funds.statistics.FundsTradeTypeGroupStatisticsDO;
import com.cf.imes.module.system.dal.mysql.funds.purchase.PurchaseRecordMapper;
import com.cf.imes.module.system.dal.mysql.pay.PayOrderMapper;
import com.cf.imes.module.system.dal.mysql.incomeandexpense.IncomeExpenseDetailsMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
@@ -30,10 +29,7 @@ import static com.cf.imes.framework.common.util.time.StatisticsChangeUtils.getDa
public class FundsStatisticsServiceImpl implements FundsStatisticsService {
@Resource
private PurchaseRecordMapper purchaseRecordMapper;
@Resource
private PayOrderMapper payOrderMapper;
private IncomeExpenseDetailsMapper incomeExpenseDetailsMapper;
@Override
public Map<String, Object> getFunsTradeTypeGroupStatistics(OrgStatusGroupStatisticsReqVO reqVO) {
@@ -43,29 +39,16 @@ public class FundsStatisticsServiceImpl implements FundsStatisticsService {
List<String> dateList = getDateList(reqVO);
// 销售额Map
LinkedHashMap<String, List<FundsTradeTypeGroupStatisticsDO>> purchaseMap = purchaseRecordMapper.getPurchaseGroupStatistics(reqVO).stream()
.sorted(Comparator.naturalOrder())
.collect(Collectors.groupingBy(FundsTradeTypeGroupStatisticsDO::getDate, LinkedHashMap::new, Collectors.toList()));
// 充值Map
LinkedHashMap<String, List<FundsTradeTypeGroupStatisticsDO>> rechargeMap = payOrderMapper.getRechargeGroupStatistics(reqVO).stream()
LinkedHashMap<String, List<FundsTradeTypeGroupStatisticsDO>> purchaseMap = incomeExpenseDetailsMapper.selectTotalSalesTrendGroupByCreateTime(reqVO).stream()
.sorted(Comparator.naturalOrder())
.collect(Collectors.groupingBy(FundsTradeTypeGroupStatisticsDO::getDate, LinkedHashMap::new, Collectors.toList()));
List<Map<String, Object>> series = new ArrayList<>();
Map<String, Object> rechargeSeriesItem = new HashMap<>();
Map<String, Object> purchaseSeriesItem = new HashMap<>();
BigDecimal[] rechargeCountArr = new BigDecimal[dateList.size()];
BigDecimal[] purchaseCountArr = new BigDecimal[dateList.size()];
// 遍历时间跨度列表,匹配数量存入数组,没有补0存入数组
for (int i = 0; i < dateList.size(); i++) {
String dateStr = dateList.get(i);
// 充值金额
BigDecimal rechargeAmount = Optional.ofNullable(rechargeMap.get(dateStr))
.map(list -> list.stream().findFirst().orElse(new FundsTradeTypeGroupStatisticsDO()))
.map(FundsTradeTypeGroupStatisticsDO::getAmount)
.orElse(BigDecimal.valueOf(0));
rechargeCountArr[i] = rechargeAmount;
// 软件购买金额
BigDecimal purchaseAmount = Optional.ofNullable(purchaseMap.get(dateStr))
@@ -74,11 +57,8 @@ public class FundsStatisticsServiceImpl implements FundsStatisticsService {
.orElse(BigDecimal.valueOf(0));
purchaseCountArr[i] = purchaseAmount;
}
rechargeSeriesItem.put("data", rechargeCountArr);
rechargeSeriesItem.put("name", "充值");
purchaseSeriesItem.put("data", purchaseCountArr);
purchaseSeriesItem.put("name", "软件购买");
series.add(rechargeSeriesItem);
purchaseSeriesItem.put("name", "销售额");
series.add(purchaseSeriesItem);
// x轴时间区间字符串
@@ -35,7 +35,6 @@ import com.cf.imes.module.system.controller.admin.tokenconfig.vo.JwtConfig;
import com.cf.imes.module.system.controller.admin.user.vo.user.UserSaveReqVO;
import com.cf.imes.module.system.convert.organ.OrganConvert;
import com.cf.imes.module.system.dal.dataobject.dict.DictDataDO;
import com.cf.imes.module.system.dal.dataobject.funds.organamount.OrganAmountDO;
import com.cf.imes.module.system.dal.dataobject.lable.LabelDO;
import com.cf.imes.module.system.dal.dataobject.machine.MachineDO;
import com.cf.imes.module.system.dal.dataobject.machine.MachineLimitDO;
@@ -46,7 +45,6 @@ import com.cf.imes.module.system.dal.dataobject.permission.RoleDO;
import com.cf.imes.module.system.dal.dataobject.systemconfig.*;
import com.cf.imes.module.system.dal.dataobject.tokenconfig.TokenConfigDO;
import com.cf.imes.module.system.dal.mysql.dict.DictDataMapper;
import com.cf.imes.module.system.dal.mysql.funds.organamount.OrganAmountMapper;
import com.cf.imes.module.system.dal.mysql.label.LabelMapper;
import com.cf.imes.module.system.dal.mysql.machine.MachineLimitMapper;
import com.cf.imes.module.system.dal.mysql.machine.MachineMapper;
@@ -160,9 +158,6 @@ public class OrganServiceImpl implements OrganService {
@Resource
private LabelMapper labelMapper;
@Resource
private OrganAmountMapper organAmountMapper;
@Resource
private PurchaseService purchaseService;
@@ -242,11 +237,6 @@ public class OrganServiceImpl implements OrganService {
// 复制系统配置里的相关配置
copySystemConfig(organId);
// 创建组织套餐
organAmountMapper.insert(OrganAmountDO.builder()
.organId(organId)
.build());
// 创建产品购买记录
List<OrganCreateProductPurchaseReqVO> productPurchaseReqVOS = createReqVO.getProductPurchaseReqVOS();
// 根据productId去重,初次订购每个产品只能有一种订购
@@ -1,32 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.cf.imes.module.system.dal.mysql.funds.organamount.OrganAmountMapper">
<sql id="dateFormat">
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.StatisticsUnit@QUARTER.getValue()">
,CONCAT(YEAR(create_time), '-', QUARTER(create_time)) as date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.StatisticsUnit@MONTH.getValue()">
,CONCAT(YEAR(create_time), '-', MONTH(create_time)) as date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.StatisticsUnit@WEEK.getValue()">
,CONCAT(YEAR(create_time), '-', MONTH(create_time), '-', WEEK(create_time, 1)) AS date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.StatisticsUnit@DAY.getValue()">
,CONCAT(YEAR(create_time), '-', MONTH(create_time), '-', DAY(create_time)) as date
</if>
</sql>
<select id="selectOrganIncomeExpenseTrendGroupByCreateTime"
resultType="com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganAmountGroupByCreateTimeRespVO">
select sum(cash_amount_change) as amount
<include refid="dateFormat"/>
from income_expense_details
where create_time between #{req.createTime[0]} and #{req.createTime[1]}
<if test="organId != null">
and organ_id = #{organId}
</if>
GROUP BY date
</select>
</mapper>
@@ -1,4 +1,41 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.cf.imes.module.system.dal.mysql.incomeandexpense.IncomeExpenseDetailsMapper">
<sql id="dateFormat">
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.StatisticsUnit@QUARTER.getValue()">
,CONCAT(YEAR(create_time), '-', QUARTER(create_time)) as date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.StatisticsUnit@MONTH.getValue()">
,CONCAT(YEAR(create_time), '-', MONTH(create_time)) as date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.StatisticsUnit@WEEK.getValue()">
,CONCAT(YEAR(create_time), '-', MONTH(create_time), '-', WEEK(create_time, 1)) AS date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.StatisticsUnit@DAY.getValue()">
,CONCAT(YEAR(create_time), '-', MONTH(create_time), '-', DAY(create_time)) as date
</if>
</sql>
<select id="selectOrganIncomeExpenseTrendGroupByCreateTime"
resultType="com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganAmountGroupByCreateTimeRespVO">
select sum(amount) as amount
<include refid="dateFormat"/>
from income_expense_details
where create_time between #{req.createTime[0]} and #{req.createTime[1]}
and deleted = false
<if test="organId != null">
and organ_id = #{organId}
</if>
GROUP BY date
</select>
<select id="selectTotalSalesTrendGroupByCreateTime"
resultType="com.cf.imes.module.system.dal.dataobject.funds.statistics.FundsTradeTypeGroupStatisticsDO">
select sum(amount) as amount
<include refid="dateFormat"/>
from income_expense_details
where create_time between #{req.createTime[0]} and #{req.createTime[1]}
and deleted = false
GROUP BY date
</select>
</mapper>
@@ -6,32 +6,4 @@
select sum(price) from pay_order
where status = '${@com.cf.imes.module.system.enums.pay.PayOrderStatusEnum@SUCCESS.status}' and deleted = false
</select>
<sql id="dateCreate">
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.StatisticsUnit@QUARTER.getValue()">
,CONCAT(YEAR(o.notify_time), '-', QUARTER(o.notify_time)) as date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.StatisticsUnit@MONTH.getValue()">
,CONCAT(YEAR(o.notify_time), '-', MONTH(o.notify_time)) as date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.StatisticsUnit@WEEK.getValue()">
,CONCAT(YEAR(o.notify_time), '-', MONTH(o.notify_time), '-', FLOOR((DayOfMonth(o.notify_time)-1)/7)+1) AS
date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.StatisticsUnit@DAY.getValue()">
,CONCAT(YEAR(o.notify_time), '-', MONTH(o.notify_time), '-', DAY(o.notify_time)) as date
</if>
</sql>
<select id="getRechargeGroupStatistics"
resultType="com.cf.imes.module.system.dal.dataobject.funds.statistics.FundsTradeTypeGroupStatisticsDO">
select sum(o.price) as amount
<include refid="dateCreate"/>
from pay_order o
where o.deleted = false
and o.status = '${@com.cf.imes.module.system.enums.pay.PayOrderStatusEnum@SUCCESS.status}'
and o.trade_type = '${@com.cf.imes.module.system.enums.pay.TradeTypeEnum@RECHARGE.code}'
and o.notify_time between #{req.createTime[0]} and #{req.createTime[1]}
group by date;
</select>
</mapper>
@@ -2,12 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.cf.imes.module.system.dal.mysql.funds.purchase.PurchaseRecordMapper">
<select id="getInvoicingAmount" resultType="java.math.BigDecimal">
SELECT SUM(
CASE
WHEN initial = TRUE THEN total_amount
ELSE account_balance_spent
END
) AS total_spent
SELECT SUM(totalAmount) AS total_spent
FROM purchase_record
where organ_id = #{organId} and is_invocing = '${@com.cf.imes.module.system.enums.pay.InvoiceStatusEnum@INVOICABLE.code}' and deleted = false and initial != true;
</select>
@@ -18,7 +13,7 @@
SUM(
CASE
WHEN is_invocing = '${@com.cf.imes.module.system.enums.pay.InvoiceStatusEnum@INVOICABLE.code}'
THEN account_balance_spent + external_spent
THEN external_spent
ELSE 0
END
) AS invocable,
@@ -26,7 +21,7 @@
SUM(
CASE
WHEN is_invocing = '${@com.cf.imes.module.system.enums.pay.InvoiceStatusEnum@PENDINGINVOICING.code}'
THEN account_balance_spent + external_spent
THEN external_spent
ELSE 0
END
) AS inTheInvoice,
@@ -34,7 +29,7 @@
SUM(
CASE
WHEN is_invocing = '${@com.cf.imes.module.system.enums.pay.InvoiceStatusEnum@INVOICINGSUCCESSFUL.code}'
THEN account_balance_spent + external_spent
THEN external_spent
ELSE 0
END
) AS invoiced
@@ -43,7 +38,7 @@
</select>
<select id="getInvoicableAmount" resultType="java.math.BigDecimal">
select sum(account_balance_spent + external_spent) from purchase_record
select sum(external_spent) from purchase_record
where organ_id = #{organId} and is_invocing = '${@com.cf.imes.module.system.enums.pay.InvoiceStatusEnum@INVOICABLE.code}'
and id in
<foreach collection="ids" item="id" open="(" close=")" separator=",">
@@ -63,7 +58,7 @@
<select id="getTodaySales"
resultType="java.math.BigDecimal">
select
sum(total_amount - gift_money_spent) as amount
sum(total_amount) as amount
from purchase_record
where deleted = false and initial != true
and create_time &gt;= CURDATE()
@@ -85,14 +80,4 @@
,CONCAT(YEAR(o.create_time), '-', MONTH(o.create_time), '-', DAY(o.create_time)) as date
</if>
</sql>
<select id="getPurchaseGroupStatistics"
resultType="com.cf.imes.module.system.dal.dataobject.funds.statistics.FundsTradeTypeGroupStatisticsDO">
select sum(o.total_amount - o.gift_money_spent) as amount
<include refid="dateCreate"/>
from purchase_record o
where o.deleted = false and o.initial != true
and o.create_time between #{req.createTime[0]} and #{req.createTime[1]}
group by date;
</select>
</mapper>