Browse Source

1.16 资金流水账修改

milestone-20260113-现金管理0109
huangqizhen 4 hours ago
parent
commit
12a8eedcbe
  1. 1
      src/main/java/com/example/demo/domain/vo/cash/FundsDTO.java
  2. 3
      src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java
  3. 44
      src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java
  4. 26
      src/main/resources/cashMapper/CashRefundMapper.xml

1
src/main/java/com/example/demo/domain/vo/cash/FundsDTO.java

@ -38,6 +38,7 @@ public class FundsDTO {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date payTime;
private Integer status;
private List<Integer> statuses;
@ExcelIgnore
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date startTime;

3
src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java

@ -40,5 +40,6 @@ public interface CashRefundMapper {
CashRecordDTO selectById(Integer id);
List<FundsDTO> selectfunds(FundsDTO fundsDTO);
int selectRefundCount(Integer id);
List<FundsDTO> selectRefundCount(List<Integer> needQueryIds);
}

44
src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java

@ -582,8 +582,52 @@ CashRecordDone cashRecordDone1 = new CashRecordDone();
@Override
public PageInfo<FundsDTO> funds(Integer pageNum, Integer pageSize, FundsDTO fundsDTO) {
// 1. 分页查询主数据
PageHelper.startPage(pageNum, pageSize);
if(fundsDTO.getStatuses()==null||fundsDTO.getStatuses().isEmpty()){
List<Integer> list_a = Arrays.asList(4,6);
fundsDTO.setStatuses(list_a);
}
List<FundsDTO> list = cashRefundMapper.selectfunds(fundsDTO);
// 2. 收集 status == 6 的记录 ID注意status int
List<Integer> needQueryIds = new ArrayList<>();
for (FundsDTO dto : list) {
if (dto.getStatuses() != null && dto.getStatuses().contains(6)) {
needQueryIds.add(dto.getId());
}
}
// 3. 批量查询额外信息关键必须有返回对象的方法
if (!needQueryIds.isEmpty()) {
// 👇 请替换为你的实际 Mapper 方法返回 List<RefundDetailDTO>
List<FundsDTO> detailList = cashRefundMapper.selectRefundCount(needQueryIds);
// 4. 构建 HashMap: id -> RefundDetailDTO
Map<Integer, FundsDTO> detailMap = new HashMap<>();
for (FundsDTO detail : detailList) {
detailMap.put(detail.getId(), detail); // 假设 detail getId()
}
// 5. 回填到账金额和到账币种
for (FundsDTO dto : list) {
if (dto.getStatuses() != null && dto.getStatuses().contains(6)) {
FundsDTO detail = detailMap.get(dto.getId());
if (detail != null) {
// 将到账金额转为负数正数 负数
BigDecimal amount = detail.getReceivedAmount();
if (amount != null) {
dto.setReceivedAmount(amount.negate()); // 👈 关键取负数
} else {
dto.setReceivedAmount(null); // 或设为 BigDecimal.ZERO根据业务需求
}
// 币种保持不变
dto.setReceivedCurrency(detail.getReceivedCurrency());
}
}
}
}
return new PageInfo<>(list);
}

26
src/main/resources/cashMapper/CashRefundMapper.xml

@ -430,7 +430,7 @@
crc.pay_time,
crc.status
from cash_record_collection crc
where crc.status = 4|| crc.status = 6
<where>
<if test="jwcode != null">
and crc.jwcode = #{jwcode}
</if>
@ -447,14 +447,28 @@
AND crc.pay_type like CONCAT('%', #{payType}, '%')
</if>
<if test="orderCode!= null and orderCode.length > 0">
AND crc.orderCode like CONCAT('%', #{orderCode}, '%')
AND crc.order_code like CONCAT('%', #{orderCode}, '%')
</if>
<if test="status!=null">
and crc.status = #{status}
<if test="statuses!=null and statuses.size()>0">
and crc.status IN
<foreach collection="statuses" item="statuses" open="(" separator="," close=")">
#{statuses}
</foreach>
</if>
</where>
</select>
<select id="selectRefundCount" resultType="java.lang.Integer">
select
<select id="selectRefundCount" resultType="com.example.demo.domain.vo.cash.FundsDTO">
select crr.refund_currency as receivedCurrency,
crr.refund_amount as receivedAmount
from cash_record_refund crr
<where>
<if test="needQueryIds != null and needQueryIds.size() > 0">
and crr.related_id IN
<foreach collection="needQueryIds" item="needQueryId" open="(" separator="," close=")">
#{needQueryId}
</foreach>
</if>
</where>
</select>
Loading…
Cancel
Save