feat:提供用户修改钱包流水的"创建时间"和"部门"

This commit is contained in:
dzc committed 2026-09-07 16:12:59 +08:00
1 parent 5460d1471d
commit a1dfc6a991
4 files changed
+88

No files matched your search

@@ -0,0 +1,37 @@
package com.bsd.pjcloud.wallet.api.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 钱包流水信息修改参数,仅允许后台修正流水触发事件的归属部门和创建时间,
* 不承载金额、余额、业务关联等不可变流水信息。
*/
@Data
@Schema(description = "钱包流水信息修改参数")
public class WalletTransactionUpdateInfoDto {
/**
* 需要修改信息的钱包流水编号,由钱包流水列表返回。
*/
@NotNull(message = "钱包流水编号不能为空")
@Schema(description = "钱包流水编号", requiredMode = Schema.RequiredMode.REQUIRED)
private Long id;
/**
* 流水触发事件归属的新部门编号;必须是当前租户有效部门,用于更正部门归属统计口径。
*/
@NotNull(message = "流水归属部门不能为空")
@Schema(description = "流水归属部门编号", requiredMode = Schema.RequiredMode.REQUIRED)
private Long deptId;
/**
* 流水新的创建时间,用于更正流水归属的统计周期;时间格式为 yyyy-MM-dd HH:mm:ss。
*/
@NotNull(message = "流水创建时间不能为空")
@Schema(description = "流水创建时间,格式 yyyy-MM-dd HH:mm:ss", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
}
@@ -18,6 +18,7 @@ import com.bsd.pjcloud.wallet.api.dto.WalletTransactionDto;
import com.bsd.pjcloud.wallet.api.dto.WalletTransactionDepartmentSnapshotBatchDto;
import com.bsd.pjcloud.wallet.api.dto.WalletTransactionDepartmentSnapshotDto;
import com.bsd.pjcloud.wallet.api.dto.WalletTransactionRemarkDto;
import com.bsd.pjcloud.wallet.api.dto.WalletTransactionUpdateInfoDto;
import com.bsd.pjcloud.wallet.api.dto.WalletTransactionSumAndCountDto;
import com.bsd.pjcloud.wallet.api.entity.WalletTransactionEntity;
import com.bsd.pjcloud.wallet.api.vo.WalletCzTotalVo;
@@ -214,6 +215,20 @@ public class WalletTransactionController {
return R.ok(walletTransactionService.updateRemark(dto));
}
/**
* 修改单笔钱包流水的归属部门和创建时间,用于更正流水归属统计口径,不开放金额、余额等核心字段变更。
*
* @param dto 流水编号、新部门编号和新创建时间
* @return 更新到当前租户有效流水时返回 {@code true}
*/
@PutMapping("/update-info")
@Operation(summary = "修改钱包流水信息")
@SysLog("修改钱包流水信息")
@PreAuthorize("@pms.hasPermission('wallet_walletTransaction_update_info')")
public R<Boolean> updateInfo(@Valid @RequestBody WalletTransactionUpdateInfoDto dto) {
return R.ok(walletTransactionService.updateInfo(dto));
}
@Operation(summary = "后台充值分页", description = "后台充值分页")
@PostMapping("/page-cz")
public R pageCz(@ParameterObject Page page, @RequestBody WalletTransactionDto dto) {
@@ -8,6 +8,7 @@ import com.bsd.pjcloud.wallet.api.dto.WalletBalanceTransactionDto;
import com.bsd.pjcloud.wallet.api.dto.WalletTransactionDepartmentSnapshotBatchDto;
import com.bsd.pjcloud.wallet.api.dto.WalletTransactionDto;
import com.bsd.pjcloud.wallet.api.dto.WalletTransactionRemarkDto;
import com.bsd.pjcloud.wallet.api.dto.WalletTransactionUpdateInfoDto;
import com.bsd.pjcloud.wallet.api.entity.WalletTransactionEntity;
import com.bsd.pjcloud.wallet.api.vo.WalletCzTotalVo;
import com.bsd.pjcloud.wallet.api.vo.WalletTransactionDepartmentSnapshotVo;
@@ -186,6 +187,14 @@ public interface WalletTransactionService extends IService<WalletTransactionEnti
*/
Boolean updateRemark(WalletTransactionRemarkDto dto);
/**
* 修改单笔钱包流水的归属部门和创建时间,用于更正流水的部门归属统计和统计周期。
*
* @param dto 流水编号、新部门编号和新创建时间
* @return 更新到当前租户有效流水时返回 {@code true}
*/
Boolean updateInfo(WalletTransactionUpdateInfoDto dto);
/**
* 更新会员用户余额
*
@@ -42,6 +42,7 @@ import com.bsd.pjcloud.wallet.api.dto.WalletTransactionDepartmentSnapshotBatchDt
import com.bsd.pjcloud.wallet.api.dto.WalletTransactionDepartmentSnapshotDto;
import com.bsd.pjcloud.wallet.api.dto.WalletTransactionDto;
import com.bsd.pjcloud.wallet.api.dto.WalletTransactionRemarkDto;
import com.bsd.pjcloud.wallet.api.dto.WalletTransactionUpdateInfoDto;
import com.bsd.pjcloud.wallet.api.dto.WalletTypeDto;
import com.bsd.pjcloud.wallet.api.dto.mch.WalletMchDeptViewDto;
import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity;
@@ -829,6 +830,32 @@ public class WalletTransactionServiceImpl extends ServiceImpl<WalletTransactionM
return true;
}
/**
* 校验目标部门有效后,使用独立更新条件仅重写归属部门和创建时间,不触碰流水其他字段。
*
* @param dto 流水编号、新部门编号和新创建时间
* @return 更新到当前租户有效流水时返回 {@code true}
*/
@Override
public Boolean updateInfo(WalletTransactionUpdateInfoDto dto) {
// 部门归属直接决定部门统计口径,先经 UPMS 校验部门真实存在,避免把无效部门编号写入流水。
R<SysDept> deptResult = deptService.getDeptByDeptId(dto.getDeptId());
if (deptResult == null || !deptResult.isOk() || ObjectUtil.isEmpty(deptResult.getData())) {
throw new I18nBizException(ErrorCodes.COMMON_RECORD_NOT_FOUND);
}
// 传入空实体会跳过 MyBatis-Plus 的修改人和修改时间填充,因此保留更新实体承载审计字段。
WalletTransactionEntity updateEntity = new WalletTransactionEntity();
int updated = baseMapper.update(updateEntity, Wrappers.<WalletTransactionEntity>lambdaUpdate()
.eq(WalletTransactionEntity::getId, dto.getId())
.set(WalletTransactionEntity::getDeptId, dto.getDeptId())
.set(WalletTransactionEntity::getCreateTime, dto.getCreateTime()));
// 部分 MySQL affected-row 配置会把“值未变化”返回为 0,仅在记录也查不到时才判定失败。
if (updated == 0 && baseMapper.selectById(dto.getId()) == null) {
throw new I18nBizException(ErrorCodes.WALLET_TX_NOT_FOUND);
}
return true;
}
@Override
// @CacheEvict(value = CacheConstants.WALLET_DETAIL, key = "#dto.getWalletId()")
public Boolean updateWalletBalance(WalletTransactionDto dto) {