diff --git a/bms-back/bms-admin/src/main/java/com/bms/web/controller/report/PrcProfitReportController.java b/bms-back/bms-admin/src/main/java/com/bms/web/controller/report/PrcProfitReportController.java index ef20114f..cccb3df8 100644 --- a/bms-back/bms-admin/src/main/java/com/bms/web/controller/report/PrcProfitReportController.java +++ b/bms-back/bms-admin/src/main/java/com/bms/web/controller/report/PrcProfitReportController.java @@ -140,14 +140,14 @@ public class PrcProfitReportController extends BaseController public TableDataInfo exports() { startPage(); - return getDataTable(profitReportService.selectExports(getUsername())); + return getDataTable(profitReportService.selectExports()); } @PreAuthorize("@ss.hasPermi('report:profit:export')") @GetMapping("/exports/{exportId}/download") public void downloadExport(@PathVariable Long exportId, HttpServletResponse response) throws Exception { - PrcProfitReportExport export = profitReportService.selectExport(exportId, getUsername()); + PrcProfitReportExport export = profitReportService.selectExport(exportId); if (export == null || !"SUCCESS".equals(export.getExportStatus()) || export.getStorageKey() == null || export.getStorageKey().isBlank()) { diff --git a/bms-back/bms-system/src/main/java/com/bms/ar/domain/ArBalanceWriteoff.java b/bms-back/bms-system/src/main/java/com/bms/ar/domain/ArBalanceWriteoff.java index c433ddd4..b9f0f1ac 100644 --- a/bms-back/bms-system/src/main/java/com/bms/ar/domain/ArBalanceWriteoff.java +++ b/bms-back/bms-system/src/main/java/com/bms/ar/domain/ArBalanceWriteoff.java @@ -65,6 +65,12 @@ public class ArBalanceWriteoff extends BaseEntity /** 核销备注 */ private String remark; + /** 执行核销的用户主键 */ + private Long createUserId; + + /** 执行反核销的用户主键 */ + private Long cancelUserId; + /** 反核销人 */ private String cancelBy; diff --git a/bms-back/bms-system/src/main/java/com/bms/ar/mapper/ArBalanceWriteoffMapper.java b/bms-back/bms-system/src/main/java/com/bms/ar/mapper/ArBalanceWriteoffMapper.java index d21664cb..08842035 100644 --- a/bms-back/bms-system/src/main/java/com/bms/ar/mapper/ArBalanceWriteoffMapper.java +++ b/bms-back/bms-system/src/main/java/com/bms/ar/mapper/ArBalanceWriteoffMapper.java @@ -27,6 +27,7 @@ public interface ArBalanceWriteoffMapper int updateCancelled(@Param("writeoffId") Long writeoffId, @Param("reverseFlowId") Long reverseFlowId, @Param("cancelBy") String cancelBy, + @Param("cancelUserId") Long cancelUserId, @Param("cancelRemark") String cancelRemark, @Param("status") String status, @Param("effectiveStatus") String effectiveStatus); diff --git a/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBalanceWriteoffServiceImpl.java b/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBalanceWriteoffServiceImpl.java index c33c7d23..3786331b 100644 --- a/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBalanceWriteoffServiceImpl.java +++ b/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBalanceWriteoffServiceImpl.java @@ -116,6 +116,7 @@ public class ArBalanceWriteoffServiceImpl implements IArBalanceWriteoffService { } String operator = SecurityUtils.getUsername(); + Long operatorUserId = SecurityUtils.getUserId(); String requestId = IdUtils.fastSimpleUUID(); String currency = StringUtils.hasText(bill.getCurrency()) ? bill.getCurrency().trim().toUpperCase() : "CNY"; Date writeoffDate = cmd.getWriteoffDate() != null ? cmd.getWriteoffDate() : new Date(); @@ -133,6 +134,7 @@ public class ArBalanceWriteoffServiceImpl implements IArBalanceWriteoffService { writeoff.setWriteoffDate(writeoffDate); writeoff.setStatus(ArBalanceWriteoffStatus.EFFECTIVE.getCode()); writeoff.setRemark(StringUtils.hasText(cmd.getRemark()) ? cmd.getRemark().trim() : null); + writeoff.setCreateUserId(operatorUserId); writeoff.setCreateBy(operator); writeoffMapper.insertArBalanceWriteoff(writeoff); @@ -177,6 +179,7 @@ public class ArBalanceWriteoffServiceImpl implements IArBalanceWriteoffService { } String operator = SecurityUtils.getUsername(); + Long operatorUserId = SecurityUtils.getUserId(); String requestId = IdUtils.fastSimpleUUID(); String cancelRemark = StringUtils.hasText(remark) ? remark.trim() : "取消余额核销"; String fromStatus = bill.getStatus(); @@ -195,7 +198,7 @@ public class ArBalanceWriteoffServiceImpl implements IArBalanceWriteoffService { } // 3. 核销单置为CANCELLED(口径变更后无回补流水,reverse_flow_id 置空) - if (writeoffMapper.updateCancelled(writeoffId, null, operator, cancelRemark, + if (writeoffMapper.updateCancelled(writeoffId, null, operator, operatorUserId, cancelRemark, ArBalanceWriteoffStatus.CANCELLED.getCode(), ArBalanceWriteoffStatus.EFFECTIVE.getCode()) != 1) { throw new ServiceException("核销记录状态已变化,请刷新后重试"); } diff --git a/bms-back/bms-system/src/main/java/com/bms/price/domain/PrcProfitReportExport.java b/bms-back/bms-system/src/main/java/com/bms/price/domain/PrcProfitReportExport.java index af5bf004..008cfd01 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/domain/PrcProfitReportExport.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/domain/PrcProfitReportExport.java @@ -22,6 +22,8 @@ public class PrcProfitReportExport implements Serializable private Integer rowCount; /** PROCESSING 生成中,SUCCESS 成功,FAILED 失败。 */ private String exportStatus; + /** 发起导出的用户主键。 */ + private Long exportUserId; private String exportBy; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date exportTime; diff --git a/bms-back/bms-system/src/main/java/com/bms/price/mapper/PrcProfitReportMapper.java b/bms-back/bms-system/src/main/java/com/bms/price/mapper/PrcProfitReportMapper.java index 28ed98a3..484908b8 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/mapper/PrcProfitReportMapper.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/mapper/PrcProfitReportMapper.java @@ -23,8 +23,7 @@ public interface PrcProfitReportMapper int markExportFailed(@Param("exportId") Long exportId, @Param("remark") String remark); - List selectExportsByUser(String exportBy); + List selectExports(); - PrcProfitReportExport selectExportByIdAndUser(@Param("exportId") Long exportId, - @Param("exportBy") String exportBy); + PrcProfitReportExport selectExportById(@Param("exportId") Long exportId); } diff --git a/bms-back/bms-system/src/main/java/com/bms/price/service/IPrcProfitReportService.java b/bms-back/bms-system/src/main/java/com/bms/price/service/IPrcProfitReportService.java index 7da8d988..069a2d3f 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/service/IPrcProfitReportService.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/service/IPrcProfitReportService.java @@ -23,9 +23,9 @@ public interface IPrcProfitReportService int failExport(Long exportId, String remark); - List selectExports(String exportBy); + List selectExports(); - PrcProfitReportExport selectExport(Long exportId, String exportBy); + PrcProfitReportExport selectExport(Long exportId); /* 提成比例维护暂停使用。 List selectCommissionRates(); diff --git a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcProfitReportServiceImpl.java b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcProfitReportServiceImpl.java index b9256126..2fb489a3 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcProfitReportServiceImpl.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcProfitReportServiceImpl.java @@ -9,7 +9,7 @@ import org.springframework.stereotype.Service; // 提成功能暂停使用:import org.springframework.transaction.annotation.Transactional; import com.bms.common.annotation.DataScope; import com.bms.common.exception.ServiceException; -// 提成功能暂停使用:import com.bms.common.utils.SecurityUtils; +import com.bms.common.utils.SecurityUtils; // 提成功能暂停使用:import com.bms.price.domain.PrcProfitCommissionRate; // 提成功能暂停使用:import com.bms.price.mapper.PrcProfitCommissionRateMapper; import com.bms.price.domain.PrcProfitReportExport; @@ -61,6 +61,7 @@ public class PrcProfitReportServiceImpl implements IPrcProfitReportService @Override public int createExport(PrcProfitReportExport export) { + export.setExportUserId(SecurityUtils.getUserId()); return profitReportMapper.insertExport(export); } @@ -77,15 +78,15 @@ public class PrcProfitReportServiceImpl implements IPrcProfitReportService } @Override - public List selectExports(String exportBy) + public List selectExports() { - return profitReportMapper.selectExportsByUser(exportBy); + return profitReportMapper.selectExports(); } @Override - public PrcProfitReportExport selectExport(Long exportId, String exportBy) + public PrcProfitReportExport selectExport(Long exportId) { - return profitReportMapper.selectExportByIdAndUser(exportId, exportBy); + return profitReportMapper.selectExportById(exportId); } /** 将报表的多行输入拆分为去重后的查询条件,支持换行、空格、逗号和分号分隔。 */ diff --git a/bms-back/bms-system/src/main/resources/mapper/ar/ArBalanceWriteoffMapper.xml b/bms-back/bms-system/src/main/resources/mapper/ar/ArBalanceWriteoffMapper.xml index 59f0ac57..852f39fb 100644 --- a/bms-back/bms-system/src/main/resources/mapper/ar/ArBalanceWriteoffMapper.xml +++ b/bms-back/bms-system/src/main/resources/mapper/ar/ArBalanceWriteoffMapper.xml @@ -19,8 +19,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + @@ -31,8 +33,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select w.writeoff_id, w.writeoff_no, w.ar_bill_id, w.bill_no, w.customer_id, w.receipt_id, w.account_id, w.currency, w.writeoff_amount, w.balance_flow_id, w.reverse_flow_id, - w.writeoff_date, w.status, w.remark, w.create_by, w.create_time, - w.cancel_by, w.cancel_time, w.cancel_remark, + w.writeoff_date, w.status, w.remark, w.create_user_id, w.create_by, w.create_time, + w.cancel_user_id, w.cancel_by, w.cancel_time, w.cancel_remark, b.bill_name, b.customer_name from ar_balance_writeoff w left join ar_bill b on b.ar_bill_id = w.ar_bill_id @@ -43,11 +45,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" insert into ar_balance_writeoff ( writeoff_no, ar_bill_id, bill_no, customer_id, receipt_id, account_id, currency, writeoff_amount, balance_flow_id, reverse_flow_id, writeoff_date, - status, remark, create_by, create_time + status, remark, create_user_id, create_by, create_time ) values ( #{writeoffNo}, #{arBillId}, #{billNo}, #{customerId}, #{receiptId}, #{accountId}, #{currency}, #{writeoffAmount}, #{balanceFlowId}, #{reverseFlowId}, #{writeoffDate}, - #{status}, #{remark}, #{createBy}, sysdate() + #{status}, #{remark}, #{createUserId}, #{createBy}, sysdate() ) @@ -68,6 +70,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update ar_balance_writeoff set status = #{status}, reverse_flow_id = #{reverseFlowId}, + cancel_user_id = #{cancelUserId}, cancel_by = #{cancelBy}, cancel_time = sysdate(), cancel_remark = #{cancelRemark} diff --git a/bms-back/bms-system/src/main/resources/mapper/price/PrcProfitReportMapper.xml b/bms-back/bms-system/src/main/resources/mapper/price/PrcProfitReportMapper.xml index 15d769c9..5904c397 100644 --- a/bms-back/bms-system/src/main/resources/mapper/price/PrcProfitReportMapper.xml +++ b/bms-back/bms-system/src/main/resources/mapper/price/PrcProfitReportMapper.xml @@ -11,6 +11,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -18,15 +19,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select export_id, dimension, file_name, storage_key, row_count, - export_status, export_by, export_time, remark + export_status, export_user_id, export_by, export_time, remark from prc_profit_report_export insert into prc_profit_report_export ( - dimension, file_name, storage_key, row_count, export_status, export_by, export_time, remark + dimension, file_name, storage_key, row_count, export_status, export_user_id, export_by, export_time, remark ) values ( - #{dimension}, #{fileName}, #{storageKey}, #{rowCount}, #{exportStatus}, #{exportBy}, sysdate(), #{remark} + #{dimension}, #{fileName}, #{storageKey}, #{rowCount}, #{exportStatus}, #{exportUserId}, #{exportBy}, sysdate(), #{remark} ) @@ -43,15 +44,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where export_id = #{exportId} and export_status = 'PROCESSING' - - where export_by = #{exportBy} order by export_time desc, export_id desc - - where export_id = #{exportId} and export_by = #{exportBy} + where export_id = #{exportId} diff --git a/bms-back/sql/20261019_add_ar_balance_writeoff_user_ids.sql b/bms-back/sql/20261019_add_ar_balance_writeoff_user_ids.sql new file mode 100644 index 00000000..5a02f7d6 --- /dev/null +++ b/bms-back/sql/20261019_add_ar_balance_writeoff_user_ids.sql @@ -0,0 +1,30 @@ +-- 为余额核销记录增加核销人与反核销人用户主键。 +-- 本脚本仅调整表结构;历史记录保持 NULL,新操作由服务写入当前登录用户ID。 + +SET @column_exists := ( + SELECT COUNT(1) FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'ar_balance_writeoff' + AND COLUMN_NAME = 'create_user_id' +); +SET @sql := IF(@column_exists = 0, + 'ALTER TABLE `ar_balance_writeoff` ADD COLUMN `create_user_id` bigint(20) DEFAULT NULL COMMENT ''核销人用户ID'' AFTER `remark`', + 'ALTER TABLE `ar_balance_writeoff` MODIFY COLUMN `create_user_id` bigint(20) DEFAULT NULL COMMENT ''核销人用户ID'' AFTER `remark`' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @column_exists := ( + SELECT COUNT(1) FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'ar_balance_writeoff' + AND COLUMN_NAME = 'cancel_user_id' +); +SET @sql := IF(@column_exists = 0, + 'ALTER TABLE `ar_balance_writeoff` ADD COLUMN `cancel_user_id` bigint(20) DEFAULT NULL COMMENT ''反核销人用户ID'' AFTER `create_time`', + 'ALTER TABLE `ar_balance_writeoff` MODIFY COLUMN `cancel_user_id` bigint(20) DEFAULT NULL COMMENT ''反核销人用户ID'' AFTER `create_time`' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; diff --git a/bms-back/sql/bms_init.sql b/bms-back/sql/bms_init.sql index a63f3ba3..15a151a3 100644 --- a/bms-back/sql/bms_init.sql +++ b/bms-back/sql/bms_init.sql @@ -25,8 +25,10 @@ CREATE TABLE `ar_balance_writeoff` ( `writeoff_date` date NOT NULL COMMENT '核销日期', `status` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '状态:EFFECTIVE=有效(已扣减客户余额),CANCELLED=已反核销(已回补客户余额)', `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '核销备注', + `create_user_id` bigint(20) DEFAULT NULL COMMENT '核销人用户ID', `create_by` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建人', `create_time` datetime NOT NULL COMMENT '创建时间', + `cancel_user_id` bigint(20) DEFAULT NULL COMMENT '反核销人用户ID', `cancel_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '反核销人', `cancel_time` datetime DEFAULT NULL COMMENT '反核销时间', `cancel_remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '反核销原因', @@ -2268,6 +2270,7 @@ CREATE TABLE IF NOT EXISTS `prc_profit_report_export` ( `storage_key` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '下载目录下的文件Key', `row_count` int(11) DEFAULT NULL COMMENT '导出记录数', `export_status` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PROCESSING生成中,SUCCESS成功,FAILED失败', + `export_user_id` bigint(20) DEFAULT NULL COMMENT '导出人用户ID', `export_by` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '导出人', `export_time` datetime NOT NULL COMMENT '导出时间', `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '失败原因', diff --git a/bms-back/sql/price/prc_profit_report_export_log.sql b/bms-back/sql/price/prc_profit_report_export_log.sql index 7dad1026..24a8c73f 100644 --- a/bms-back/sql/price/prc_profit_report_export_log.sql +++ b/bms-back/sql/price/prc_profit_report_export_log.sql @@ -6,6 +6,7 @@ CREATE TABLE IF NOT EXISTS `prc_profit_report_export` ( `storage_key` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '下载目录下的文件Key', `row_count` int(11) DEFAULT NULL COMMENT '导出记录数', `export_status` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PROCESSING生成中,SUCCESS成功,FAILED失败', + `export_user_id` bigint(20) DEFAULT NULL COMMENT '导出人用户ID', `export_by` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '导出人', `export_time` datetime NOT NULL COMMENT '导出时间', `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '失败原因', @@ -13,3 +14,18 @@ CREATE TABLE IF NOT EXISTS `prc_profit_report_export` ( KEY `idx_profit_report_export_user_time` (`export_by`, `export_time`), KEY `idx_profit_report_export_status` (`export_status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='毛利报表导出日志'; + +-- 已存在的表补充导出用户ID;再次执行时仅校正字段位置与定义。 +SET @column_exists := ( + SELECT COUNT(1) FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'prc_profit_report_export' + AND COLUMN_NAME = 'export_user_id' +); +SET @sql := IF(@column_exists = 0, + 'ALTER TABLE `prc_profit_report_export` ADD COLUMN `export_user_id` bigint(20) DEFAULT NULL COMMENT ''导出人用户ID'' AFTER `export_status`', + 'ALTER TABLE `prc_profit_report_export` MODIFY COLUMN `export_user_id` bigint(20) DEFAULT NULL COMMENT ''导出人用户ID'' AFTER `export_status`' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; diff --git a/bms-back/sql/price/profit_report.sql b/bms-back/sql/price/profit_report.sql index f252a01f..41968b97 100644 --- a/bms-back/sql/price/profit_report.sql +++ b/bms-back/sql/price/profit_report.sql @@ -24,6 +24,7 @@ CREATE TABLE IF NOT EXISTS `prc_profit_report_export` ( `storage_key` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '下载目录下的文件Key', `row_count` int(11) DEFAULT NULL COMMENT '导出记录数', `export_status` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PROCESSING生成中,SUCCESS成功,FAILED失败', + `export_user_id` bigint(20) DEFAULT NULL COMMENT '导出人用户ID', `export_by` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '导出人', `export_time` datetime NOT NULL COMMENT '导出时间', `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '失败原因', @@ -32,6 +33,20 @@ CREATE TABLE IF NOT EXISTS `prc_profit_report_export` ( KEY `idx_profit_report_export_status` (`export_status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='毛利报表导出日志'; +SET @column_exists := ( + SELECT COUNT(1) FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'prc_profit_report_export' + AND COLUMN_NAME = 'export_user_id' +); +SET @sql := IF(@column_exists = 0, + 'ALTER TABLE `prc_profit_report_export` ADD COLUMN `export_user_id` bigint(20) DEFAULT NULL COMMENT ''导出人用户ID'' AFTER `export_status`', + 'ALTER TABLE `prc_profit_report_export` MODIFY COLUMN `export_user_id` bigint(20) DEFAULT NULL COMMENT ''导出人用户ID'' AFTER `export_status`' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + SET @index_exists := ( SELECT COUNT(1) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prc_order_bill'