feat: 每日负债统计功能新增。

This commit is contained in:
2025-08-31 23:13:06 +08:00
parent 55892ac022
commit 2c0b46e5c2
13 changed files with 722 additions and 1 deletions

View File

@@ -93,5 +93,13 @@ public interface RemoteInvestService
@RequestMapping(value = "/job/synFuturesDailyHistory",method = RequestMethod.POST)
public R synFuturesDailyHistory();
/**
* 生成每日负债统计数据
*
* @return 结果
*/
@RequestMapping(value = "/job/generateDailyLiabilities",method = RequestMethod.POST)
public R generateDailyLiabilities();
}

View File

@@ -74,6 +74,10 @@ public class RemoteInvestFallbackFactory implements FallbackFactory<RemoteInvest
return R.fail("投资服务调用同步期货日行情数据失败");
}
@Override
public R generateDailyLiabilities() {
return R.fail("投资服务调用生成每日负债统计失败");
}
};
}

View File

@@ -0,0 +1,116 @@
package com.intc.invest.controller;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.intc.common.log.annotation.Log;
import com.intc.common.log.enums.BusinessType;
import com.intc.common.security.annotation.RequiresPermissions;
import com.intc.invest.domain.DailyLiabilities;
import com.intc.invest.domain.vo.DailyLiabilitiesVo;
import com.intc.invest.domain.dto.DailyLiabilitiesDto;
import com.intc.invest.service.IDailyLiabilitiesService;
import com.intc.common.core.web.controller.BaseController;
import com.intc.common.core.web.domain.AjaxResult;
import com.intc.common.core.utils.poi.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.intc.common.core.web.page.TableDataInfo;
/**
* 每日负债统计Controller
*
* @author tianyongbao
* @date 2025-08-31
*/
@Api(tags=" 每日负债统计")
@RestController
@RequestMapping("/dailyLiabilities")
public class DailyLiabilitiesController extends BaseController
{
@Resource
private IDailyLiabilitiesService dailyLiabilitiesService;
/**
* 查询每日负债统计列表
*/
@ApiOperation(value="查询每日负债统计列表",response = DailyLiabilitiesVo.class)
@RequiresPermissions("invest:dailyLiabilities:list")
@GetMapping("/list")
public TableDataInfo list(DailyLiabilitiesDto dailyLiabilitiesDto)
{
startPage();
List<DailyLiabilitiesVo> list = dailyLiabilitiesService.selectDailyLiabilitiesList(dailyLiabilitiesDto);
return getDataTable(list);
}
/**
* 导出每日负债统计列表
*/
@ApiOperation(value="导出每日负债统计列表")
@RequiresPermissions("invest:dailyLiabilities:export")
@Log(title = "每日负债统计", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, DailyLiabilitiesDto dailyLiabilitiesDto)
{
List<DailyLiabilitiesVo> list = dailyLiabilitiesService.selectDailyLiabilitiesList(dailyLiabilitiesDto);
ExcelUtil<DailyLiabilitiesVo> util = new ExcelUtil<DailyLiabilitiesVo>(DailyLiabilitiesVo.class);
util.exportExcel(response, list, "每日负债统计数据");
}
/**
* 获取每日负债统计详细信息
*/
@ApiOperation(value="获取每日负债统计详细信息")
@RequiresPermissions("invest:dailyLiabilities:query")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return success(dailyLiabilitiesService.selectDailyLiabilitiesById(id));
}
/**
* 新增每日负债统计
*/
@ApiOperation(value="新增每日负债统计")
@RequiresPermissions("invest:dailyLiabilities:add")
@Log(title = "每日负债统计", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody DailyLiabilities dailyLiabilities)
{
return toAjax(dailyLiabilitiesService.insertDailyLiabilities(dailyLiabilities));
}
/**
* 修改每日负债统计
*/
@ApiOperation(value="修改每日负债统计")
@RequiresPermissions("invest:dailyLiabilities:edit")
@Log(title = "每日负债统计", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody DailyLiabilities dailyLiabilities)
{
return toAjax(dailyLiabilitiesService.updateDailyLiabilities(dailyLiabilities));
}
/**
* 删除每日负债统计
*/
@ApiOperation(value="删除每日负债统计")
@RequiresPermissions("invest:dailyLiabilities:remove")
@Log(title = "每日负债统计", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(dailyLiabilitiesService.deleteDailyLiabilitiesByIds(ids));
}
}

View File

@@ -0,0 +1,86 @@
package com.intc.invest.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.intc.common.core.annotation.Excel;
import com.intc.common.core.web.domain.BaseEntity;
import lombok.Data;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.*;
/**
* 每日负债统计对象 daily_liabilities
*
* @author tianyongbao
* @date 2025-08-31
*/
@ApiModel("每日负债统计对象")
@Data
public class DailyLiabilities extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键 */
private Long id;
/** 名称 */
@ApiModelProperty(value="名称")
@Excel(name = "名称")
private String name;
/** 总负债 */
@ApiModelProperty(value="总负债")
@Excel(name = "总负债")
private Double totalBalance;
/** 信用卡余额 */
@ApiModelProperty(value="信用卡余额")
@Excel(name = "信用卡余额")
private Double creditBalance;
/** 投资账户余额 */
@ApiModelProperty(value="投资账户余额")
@Excel(name = "投资账户余额")
private Double investBalance;
/** 储蓄账户余额 */
@ApiModelProperty(value="储蓄账户余额")
@Excel(name = "储蓄账户余额")
private Double debitBalance;
/** 借贷账户余额 */
@ApiModelProperty(value="借贷账户余额")
@Excel(name = "借贷账户余额")
private Double lendingBalance;
/** 删除标志0代表存在 1代表删除 */
private String delFlag;
/** 记录时间 */
@ApiModelProperty(value="记录时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "记录时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date recordDate;
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("name", getName())
.append("totalBalance", getTotalBalance())
.append("creditBalance", getCreditBalance())
.append("investBalance", getInvestBalance())
.append("debitBalance", getDebitBalance())
.append("lendingBalance", getLendingBalance())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("delFlag", getDelFlag())
.append("remark", getRemark())
.append("recordDate", getRecordDate())
.toString();
}
}

View File

@@ -0,0 +1,39 @@
package com.intc.invest.domain.dto;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.intc.common.core.web.domain.BaseEntity;
import lombok.Data;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* 每日负债统计Dto对象 daily_liabilities
*
* @author tianyongbao
* @date 2025-08-31
*/
@ApiModel("每日负债统计Dto对象")
@Data
public class DailyLiabilitiesDto extends BaseEntity implements Serializable
{
private static final long serialVersionUID = 1L;
/** 名称 */
@ApiModelProperty(value="名称")
private String name;
/** 记录时间 */
@ApiModelProperty(value="记录时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date recordDate;
/** 开始日期 */
@ApiModelProperty(value="开始日期")
private String startTime;
/** 结束日期 */
@ApiModelProperty(value="结束日期")
private String endTime;
}

View File

@@ -0,0 +1,18 @@
package com.intc.invest.domain.vo;
import com.intc.common.core.annotation.Excel;
import com.intc.invest.domain.DailyLiabilities;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import io.swagger.annotations.ApiModel;
/**
* 每日负债统计Vo对象 daily_liabilities
*
* @author tianyongbao
* @date 2025-08-31
*/
@ApiModel("每日负债统计Vo对象")
@Data
public class DailyLiabilitiesVo extends DailyLiabilities
{
}

View File

@@ -0,0 +1,91 @@
package com.intc.invest.mapper;
import java.util.List;
import com.intc.common.datascope.annotation.DataScope;
import com.intc.invest.domain.DailyLiabilities;
import com.intc.invest.domain.dto.DailyLiabilitiesDto;
import com.intc.invest.domain.vo.DailyLiabilitiesVo;
/**
* 每日负债统计Mapper接口
*
* @author tianyongbao
* @date 2025-08-31
*/
public interface DailyLiabilitiesMapper
{
/**
* 查询每日负债统计
*
* @param id 每日负债统计主键
* @return 每日负债统计
*/
public DailyLiabilitiesVo selectDailyLiabilitiesById(Long id);
/**
* 查询每日负债统计列表
*
* @param dailyLiabilitiesDto 每日负债统计
* @return 每日负债统计集合
*/
@DataScope(businessAlias = "a")
public List<DailyLiabilitiesVo> selectDailyLiabilitiesList(DailyLiabilitiesDto dailyLiabilitiesDto);
/**
* 新增每日负债统计
*
* @param dailyLiabilities 每日负债统计
* @return 结果
*/
public int insertDailyLiabilities(DailyLiabilities dailyLiabilities);
/**
* 修改每日负债统计
*
* @param dailyLiabilities 每日负债统计
* @return 结果
*/
public int updateDailyLiabilities(DailyLiabilities dailyLiabilities);
/**
* 删除每日负债统计
*
* @param id 每日负债统计主键
* @return 结果
*/
public int deleteDailyLiabilitiesById(Long id);
/**
* 批量删除每日负债统计
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteDailyLiabilitiesByIds(Long[] ids);
/**
* 逻辑删除每日负债统计
*
* @param id 每日负债统计主键
* @return 结果
*/
public int removeDailyLiabilitiesById(Long id);
/**
* 批量逻辑删除每日负债统计
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int removeDailyLiabilitiesByIds(Long[] ids);
/**
* 查询每日负债
*
* @return 每日负债统计
*/
public List<DailyLiabilitiesVo> selectDailyLiabilities();
}

View File

@@ -0,0 +1,63 @@
package com.intc.invest.service;
import java.util.List;
import com.intc.invest.domain.DailyLiabilities;
import com.intc.invest.domain.dto.DailyLiabilitiesDto;
import com.intc.invest.domain.vo.DailyLiabilitiesVo;
/**
* 每日负债统计Service接口
*
* @author tianyongbao
* @date 2025-08-31
*/
public interface IDailyLiabilitiesService
{
/**
* 查询每日负债统计
*
* @param id 每日负债统计主键
* @return 每日负债统计
*/
public DailyLiabilitiesVo selectDailyLiabilitiesById(Long id);
/**
* 查询每日负债统计列表
*
* @param dailyLiabilitiesDto 每日负债统计
* @return 每日负债统计集合
*/
public List<DailyLiabilitiesVo> selectDailyLiabilitiesList(DailyLiabilitiesDto dailyLiabilitiesDto);
/**
* 新增每日负债统计
*
* @param dailyLiabilities 每日负债统计
* @return 结果
*/
public int insertDailyLiabilities(DailyLiabilities dailyLiabilities);
/**
* 修改每日负债统计
*
* @param dailyLiabilities 每日负债统计
* @return 结果
*/
public int updateDailyLiabilities(DailyLiabilities dailyLiabilities);
/**
* 批量删除每日负债统计
*
* @param ids 需要删除的每日负债统计主键集合
* @return 结果
*/
public int deleteDailyLiabilitiesByIds(Long[] ids);
/**
* 删除每日负债统计信息
*
* @param id 每日负债统计主键
* @return 结果
*/
public int deleteDailyLiabilitiesById(Long id);
}

View File

@@ -0,0 +1,103 @@
package com.intc.invest.service.impl;
import java.util.List;
import com.intc.common.core.utils.DateUtils;
import com.intc.common.core.utils.IdWorker;
import com.intc.common.security.utils.SecurityUtils;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.intc.invest.mapper.DailyLiabilitiesMapper;
import com.intc.invest.domain.DailyLiabilities;
import com.intc.invest.domain.dto.DailyLiabilitiesDto;
import com.intc.invest.domain.vo.DailyLiabilitiesVo;
import com.intc.invest.service.IDailyLiabilitiesService;
/**
* 每日负债统计Service业务层处理
*
* @author tianyongbao
* @date 2025-08-31
*/
@Service
public class DailyLiabilitiesServiceImpl implements IDailyLiabilitiesService
{
@Resource
private DailyLiabilitiesMapper dailyLiabilitiesMapper;
/**
* 查询每日负债统计
*
* @param id 每日负债统计主键
* @return 每日负债统计
*/
@Override
public DailyLiabilitiesVo selectDailyLiabilitiesById(Long id)
{
return dailyLiabilitiesMapper.selectDailyLiabilitiesById(id);
}
/**
* 查询每日负债统计列表
*
* @param dailyLiabilitiesDto 每日负债统计
* @return 每日负债统计
*/
@Override
public List<DailyLiabilitiesVo> selectDailyLiabilitiesList(DailyLiabilitiesDto dailyLiabilitiesDto)
{
return dailyLiabilitiesMapper.selectDailyLiabilitiesList(dailyLiabilitiesDto);
}
/**
* 新增每日负债统计
*
* @param dailyLiabilities 每日负债统计
* @return 结果
*/
@Override
public int insertDailyLiabilities(DailyLiabilities dailyLiabilities)
{
dailyLiabilities.setCreateBy(SecurityUtils.getUsername());
dailyLiabilities.setCreateTime(DateUtils.getNowDate());
dailyLiabilities.setId(IdWorker.getId());
return dailyLiabilitiesMapper.insertDailyLiabilities(dailyLiabilities);
}
/**
* 修改每日负债统计
*
* @param dailyLiabilities 每日负债统计
* @return 结果
*/
@Override
public int updateDailyLiabilities(DailyLiabilities dailyLiabilities)
{
dailyLiabilities.setUpdateBy(SecurityUtils.getUsername());
dailyLiabilities.setUpdateTime(DateUtils.getNowDate());
return dailyLiabilitiesMapper.updateDailyLiabilities(dailyLiabilities);
}
/**
* 批量删除每日负债统计
*
* @param ids 需要删除的每日负债统计主键
* @return 结果
*/
@Override
public int deleteDailyLiabilitiesByIds(Long[] ids)
{
return dailyLiabilitiesMapper.removeDailyLiabilitiesByIds(ids);
}
/**
* 删除每日负债统计信息
*
* @param id 每日负债统计主键
* @return 结果
*/
@Override
public int deleteDailyLiabilitiesById(Long id)
{
return dailyLiabilitiesMapper.removeDailyLiabilitiesById(id);
}
}

View File

@@ -150,7 +150,14 @@ public class InvestJob
return AjaxResult.success();
}
@PostMapping("/generateDailyLiabilities")
public AjaxResult generateDailyLiabilities()
{
System.out.println("================================开始生成每日负债统计数据("+ DateUtils.getTime() +")=================================");
investJobService.generateDailyLiabilities();
System.out.println("================================结束生成每日负债统计数据("+ DateUtils.getTime() +")=================================");
return AjaxResult.success();
}
}

View File

@@ -34,5 +34,12 @@ public interface IInvestJobService
public void generateFutureStocksBill();
/**
* 生成每日负债统计数据
*
* @author tianyongbao
* @date 2025-08-31
*/
public void generateDailyLiabilities();
}

View File

@@ -53,6 +53,8 @@ public class InvestJobImpl implements IInvestJobService
@Resource
private StocksDailyHistoryMapper stocksDailyHistoryMapper;
@Resource
private DailyLiabilitiesMapper dailyLiabilitiesMapper;
/**
* 生成数据
@@ -423,4 +425,32 @@ public class InvestJobImpl implements IInvestJobService
}
}
/**
* 生成每日负债统计数据
*
* @author tianyongbao
* @date 2025-08-31
*/
@Override
public void generateDailyLiabilities() {
List<DailyLiabilitiesVo> list=dailyLiabilitiesMapper.selectDailyLiabilities();
//修改子类别
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日负债统计");
for (DailyLiabilitiesVo vo : list) {
DailyLiabilities dailyLiabilities=new DailyLiabilities();
dailyLiabilities.setCreditBalance(vo.getCreditBalance());
dailyLiabilities.setDebitBalance(vo.getDebitBalance());
dailyLiabilities.setInvestBalance(vo.getInvestBalance());
dailyLiabilities.setLendingBalance(vo.getLendingBalance());
dailyLiabilities.setName(simpleDateFormat.format(new Date()));
dailyLiabilities.setTotalBalance(vo.getInvestBalance()+vo.getDebitBalance()+vo.getCreditBalance()+vo.getLendingBalance());
dailyLiabilities.setCreateBy(vo.getCreateBy());
dailyLiabilities.setCreateTime(DateUtils.getNowDate());
dailyLiabilities.setRecordDate(DateUtils.getNowDate());
dailyLiabilities.setId(IdWorker.getId());
dailyLiabilitiesMapper.insertDailyLiabilities(dailyLiabilities);
}
}
}

View File

@@ -0,0 +1,149 @@
<?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.intc.invest.mapper.DailyLiabilitiesMapper">
<resultMap type="DailyLiabilitiesVo" id="DailyLiabilitiesResult">
<result property="id" column="id" />
<result property="name" column="name" />
<result property="totalBalance" column="total_balance" />
<result property="creditBalance" column="credit_balance" />
<result property="investBalance" column="invest_balance" />
<result property="debitBalance" column="debit_balance" />
<result property="lendingBalance" column="lending_balance" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="delFlag" column="del_flag" />
<result property="remark" column="remark" />
<result property="recordDate" column="record_date" />
</resultMap>
<sql id="selectDailyLiabilitiesVo">
select a.id, a.name, a.total_balance, a.credit_balance, a.invest_balance, a.debit_balance, a.lending_balance, a.create_by, a.create_time, a.update_by, a.update_time, a.del_flag, a.remark, a.record_date from daily_liabilities a
</sql>
<select id="selectDailyLiabilitiesList" parameterType="DailyLiabilitiesDto" resultMap="DailyLiabilitiesResult">
<include refid="selectDailyLiabilitiesVo"/>
<where>
a.del_flag='0'
<if test="name != null and name != ''"> and a.name like '%'|| #{name}||'%'</if>
<if test="recordDate != null "> and a.record_date = #{recordDate}</if>
<if test="endTime!=null and endTime !=''">
and #{endTime}>=to_char(a.record_date, 'yyyy-MM-dd')
</if>
<if test="startTime!=null and startTime !=''">
and to_char(a.record_date, 'yyyy-MM-dd')>=#{startTime}
</if>
</where>
<!-- 数据范围过滤 -->
${params.dataScope}
order by a.create_time desc
</select>
<select id="selectDailyLiabilitiesById" parameterType="Long" resultMap="DailyLiabilitiesResult">
<include refid="selectDailyLiabilitiesVo"/>
where a.id = #{id}
</select>
<insert id="insertDailyLiabilities" parameterType="DailyLiabilities">
insert into daily_liabilities
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>
<if test="name != null">name,</if>
<if test="totalBalance != null">total_balance,</if>
<if test="creditBalance != null">credit_balance,</if>
<if test="investBalance != null">invest_balance,</if>
<if test="debitBalance != null">debit_balance,</if>
<if test="lendingBalance != null">lending_balance,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="delFlag != null">del_flag,</if>
<if test="remark != null">remark,</if>
<if test="recordDate != null">record_date,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
<if test="name != null">#{name},</if>
<if test="totalBalance != null">#{totalBalance},</if>
<if test="creditBalance != null">#{creditBalance},</if>
<if test="investBalance != null">#{investBalance},</if>
<if test="debitBalance != null">#{debitBalance},</if>
<if test="lendingBalance != null">#{lendingBalance},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="delFlag != null">#{delFlag},</if>
<if test="remark != null">#{remark},</if>
<if test="recordDate != null">#{recordDate},</if>
</trim>
</insert>
<update id="updateDailyLiabilities" parameterType="DailyLiabilities">
update daily_liabilities
<trim prefix="SET" suffixOverrides=",">
<if test="name != null">name = #{name},</if>
<if test="totalBalance != null">total_balance = #{totalBalance},</if>
<if test="creditBalance != null">credit_balance = #{creditBalance},</if>
<if test="investBalance != null">invest_balance = #{investBalance},</if>
<if test="debitBalance != null">debit_balance = #{debitBalance},</if>
<if test="lendingBalance != null">lending_balance = #{lendingBalance},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="delFlag != null">del_flag = #{delFlag},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="recordDate != null">record_date = #{recordDate},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteDailyLiabilitiesById" parameterType="Long">
delete from daily_liabilities where id = #{id}
</delete>
<delete id="deleteDailyLiabilitiesByIds" parameterType="String">
delete from daily_liabilities where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<update id="removeDailyLiabilitiesById" parameterType="Long">
update daily_liabilities set del_flag='1' where id = #{id}
</update>
<update id="removeDailyLiabilitiesByIds" parameterType="String">
update daily_liabilities set del_flag='1' where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</update>
<select id="selectDailyLiabilities" resultMap="DailyLiabilitiesResult">
SELECT * FROM crosstab(
-- 源数据子查询按create_by分组type作为列标识balance作为值
'SELECT
create_by,
type::text, -- 转换为文本类型,确保与列定义匹配
sum(balance)::numeric -- 确保数值类型一致
FROM accounts
WHERE balance != 0
GROUP BY create_by, type
ORDER BY 1, 2', -- 必须按create_by和type排序
-- 指定要转为列的type值你的场景中是1、23、5
'SELECT unnest(ARRAY[''1'', ''2'', ''3'', ''5''])' -- 显式列出所有type值
) AS pivot_result (
create_by TEXT, -- 行标识:创建人
"debit_balance" NUMERIC, -- type=1对应的余额总和
"credit_balance" NUMERIC, -- type=2对应的余额总和
"lending_balance" NUMERIC, -- type=3对应的余额总和
"invest_balance" NUMERIC -- type=5对应的余额总和
);
</select>
</mapper>