From 1e62576d36a22568fbedcdaa826308abb591b0e0 Mon Sep 17 00:00:00 2001 From: Timi Date: Mon, 7 Sep 2026 23:10:27 +0800 Subject: [PATCH] v1.0.34 --- pom.xml | 2 +- ...aoCustomerConsumptionRecordController.java | 31 +++++++++++++++++-- .../controller/GaoFundRecordController.java | 29 +++++++++++++++++ .../controller/GaoSalesOrderController.java | 3 +- .../gao/service/GaoOrderPaymentService.java | 2 +- ...omerConsumptionRecordServiceImplement.java | 11 +++---- .../GaoOrderPaymentServiceImplement.java | 7 ++++- .../api/modules/gao/vo/GaoFundRecordPage.java | 3 ++ .../timi-server/gao/GaoFundRecordMapper.xml | 1 + 9 files changed, 76 insertions(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index 07736aa..36b71c2 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ com.imyeyu.timiserverapi TimiServerAPI - 1.0.33 + 1.0.34 jar TimiServerAPI imyeyu.com API diff --git a/src/main/java/com/imyeyu/api/modules/gao/controller/GaoCustomerConsumptionRecordController.java b/src/main/java/com/imyeyu/api/modules/gao/controller/GaoCustomerConsumptionRecordController.java index d254066..18e17c4 100644 --- a/src/main/java/com/imyeyu/api/modules/gao/controller/GaoCustomerConsumptionRecordController.java +++ b/src/main/java/com/imyeyu/api/modules/gao/controller/GaoCustomerConsumptionRecordController.java @@ -1,8 +1,12 @@ package com.imyeyu.api.modules.gao.controller; +import com.imyeyu.api.modules.common.entity.Attachment; +import com.imyeyu.api.modules.common.service.AttachmentService; import com.imyeyu.api.modules.gao.annotation.RequireGaoPermission; import com.imyeyu.api.modules.gao.bean.GaoPermissionCode; +import com.imyeyu.api.modules.gao.entity.GaoCustomerConsumptionRecord; import com.imyeyu.api.modules.gao.service.GaoCustomerConsumptionRecordService; +import com.imyeyu.api.modules.gao.service.GaoCustomerService; import com.imyeyu.api.modules.gao.service.GaoStoreScopeService; import com.imyeyu.api.modules.gao.vo.GaoCustomerConsumptionRecordPage; import com.imyeyu.api.modules.gao.vo.GaoCustomerConsumptionRecordPageResult; @@ -15,6 +19,9 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; +import java.util.Map; + /// GAO 客户消费事实接口 /// /// @author Codex @@ -24,8 +31,10 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/gao/customer/consumption-record") public class GaoCustomerConsumptionRecordController { - private final GaoCustomerConsumptionRecordService service; + private final AttachmentService attachmentService; + private final GaoCustomerService customerService; private final GaoStoreScopeService storeScopeService; + private final GaoCustomerConsumptionRecordService service; @AOPLog @RequestRateLimit @@ -34,6 +43,24 @@ public class GaoCustomerConsumptionRecordController { public GaoCustomerConsumptionRecordPageResult list(@RequestBody GaoCustomerConsumptionRecordPage page) { TimiException.required(page, "not found consumption record page"); page.setStoreId(storeScopeService.resolveStoreId(page.getStoreId())); - return service.pageByQuery(page); + + GaoCustomerConsumptionRecordPageResult result = service.pageByQuery(page); + List customerIdList = result.getList() + .stream() + .map(GaoCustomerConsumptionRecord::getCustomerId) + .filter(customerId -> customerId != null && !customerId.isBlank()) + .distinct() + .toList(); + var customerMap = customerService.mapByIdList(customerIdList); + Map> attachmentMap = attachmentService.mapByBizIdList(Attachment.BizType.GAO_CUSTOMER, customerIdList); + for (GaoCustomerConsumptionRecord record : result.getList()) { + var customer = customerMap.get(record.getCustomerId()); + if (customer == null) { + continue; + } + customer.setAttachmentList(attachmentMap.getOrDefault(customer.getId(), List.of())); + record.setCustomer(customer); + } + return result; } } diff --git a/src/main/java/com/imyeyu/api/modules/gao/controller/GaoFundRecordController.java b/src/main/java/com/imyeyu/api/modules/gao/controller/GaoFundRecordController.java index 30d1ae3..f4681f6 100644 --- a/src/main/java/com/imyeyu/api/modules/gao/controller/GaoFundRecordController.java +++ b/src/main/java/com/imyeyu/api/modules/gao/controller/GaoFundRecordController.java @@ -12,6 +12,7 @@ import com.imyeyu.api.modules.gao.vo.GaoFundRecordPage; import com.imyeyu.api.modules.gao.vo.GaoFundRevokeRequest; import com.imyeyu.api.modules.gao.vo.GaoOrderPaymentRevokeRequest; import com.imyeyu.api.modules.user.entity.User; +import com.imyeyu.api.modules.user.service.UserLoginService; import com.imyeyu.api.modules.user.service.UserService; import com.imyeyu.java.bean.timi.TimiException; import com.imyeyu.spring.annotation.AOPLog; @@ -42,6 +43,7 @@ public class GaoFundRecordController { private final GaoStoreScopeService storeScopeService; private final AttachmentService attachmentService; private final UserService userService; + private final UserLoginService userLoginService; @AOPLog @RequestRateLimit @@ -66,6 +68,33 @@ public class GaoFundRecordController { return result; } + @AOPLog + @RequestRateLimit + @RequireGaoPermission(GaoPermissionCode.FUND_RECEIVE_CREATE) + @PostMapping("/my-receive/list") + public PageResult listMyReceive(@RequestBody GaoFundRecordPage page) { + TimiException.required(page, "not found page"); + page.setStoreId(storeScopeService.resolveStoreId(page.getStoreId())); + page.setOperatorUserId(userLoginService.getRequireLoginUserId()); + page.setOperationType(GaoFundRecord.OperationType.RECEIVE); + PageResult result = service.pageByQuery(page); + fillTransient(result.getList()); + return result; + } + + @AOPLog + @RequestRateLimit + @RequireGaoPermission(GaoPermissionCode.FUND_RECEIVE_CREATE) + @PostMapping("/my-receive/detail") + public GaoFundRecord detailMyReceive(@RequestParam String id) { + GaoFundRecord result = service.detail(id); + TimiException.requiredTrue(result.getOperationType() == GaoFundRecord.OperationType.RECEIVE, "not found fund receive record"); + TimiException.requiredTrue(userLoginService.getRequireLoginUserId().equals(result.getOperatorUserId()), "只能读取自己提交的收款"); + storeScopeService.checkStoreId(result.getStoreId()); + fillTransient(List.of(result)); + return result; + } + @AOPLog @RequestRateLimit @RequireGaoPermission(GaoPermissionCode.FUND_REVOKE) diff --git a/src/main/java/com/imyeyu/api/modules/gao/controller/GaoSalesOrderController.java b/src/main/java/com/imyeyu/api/modules/gao/controller/GaoSalesOrderController.java index 1701140..0caf16e 100644 --- a/src/main/java/com/imyeyu/api/modules/gao/controller/GaoSalesOrderController.java +++ b/src/main/java/com/imyeyu/api/modules/gao/controller/GaoSalesOrderController.java @@ -2,6 +2,7 @@ package com.imyeyu.api.modules.gao.controller; import com.imyeyu.api.modules.gao.annotation.RequireGaoPermission; import com.imyeyu.api.modules.gao.bean.GaoPermissionCode; +import com.imyeyu.api.bean.PermissionMatchMode; import com.imyeyu.api.modules.gao.entity.GaoFundRecord; import com.imyeyu.api.modules.gao.entity.GaoSalesOrder; import com.imyeyu.api.modules.gao.service.GaoOrderPaymentService; @@ -112,7 +113,7 @@ public class GaoSalesOrderController { @AOPLog @RequestRateLimit - @RequireGaoPermission(GaoPermissionCode.FUND_RECEIVE_CREATE) + @RequireGaoPermission(value = {GaoPermissionCode.FUND_RECEIVE_CREATE, GaoPermissionCode.FUND_RECORD_READ}, mode = PermissionMatchMode.ANY) @PostMapping("/payment/cancel") public GaoFundRecord cancelPayment(@RequestBody GaoOrderPaymentActionRequest request) { return paymentService.cancel(request); diff --git a/src/main/java/com/imyeyu/api/modules/gao/service/GaoOrderPaymentService.java b/src/main/java/com/imyeyu/api/modules/gao/service/GaoOrderPaymentService.java index 71f51ec..e291449 100644 --- a/src/main/java/com/imyeyu/api/modules/gao/service/GaoOrderPaymentService.java +++ b/src/main/java/com/imyeyu/api/modules/gao/service/GaoOrderPaymentService.java @@ -22,7 +22,7 @@ public interface GaoOrderPaymentService { /// 拒绝收款 GaoFundRecord reject(GaoOrderPaymentActionRequest request); - /// 撤销自己提交的收款 + /// 撤销待核销收款 GaoFundRecord cancel(GaoOrderPaymentActionRequest request); /// 登记退款 diff --git a/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoCustomerConsumptionRecordServiceImplement.java b/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoCustomerConsumptionRecordServiceImplement.java index ca5ca8a..d0a47de 100644 --- a/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoCustomerConsumptionRecordServiceImplement.java +++ b/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoCustomerConsumptionRecordServiceImplement.java @@ -1,11 +1,12 @@ package com.imyeyu.api.modules.gao.service.implement; import com.imyeyu.api.config.dbsource.TimiServerDBConfig; +import com.imyeyu.api.modules.common.service.AttachmentService; import com.imyeyu.api.modules.gao.entity.GaoCustomerConsumptionRecord; import com.imyeyu.api.modules.gao.entity.GaoSalesOrder; import com.imyeyu.api.modules.gao.mapper.GaoCustomerConsumptionRecordMapper; -import com.imyeyu.api.modules.gao.service.GaoCustomerService; import com.imyeyu.api.modules.gao.service.GaoCustomerConsumptionRecordService; +import com.imyeyu.api.modules.gao.service.GaoCustomerService; import com.imyeyu.api.modules.gao.vo.GaoCustomerConsumptionRecordPage; import com.imyeyu.api.modules.gao.vo.GaoCustomerConsumptionRecordPageResult; import com.imyeyu.java.bean.timi.TimiException; @@ -28,6 +29,7 @@ public class GaoCustomerConsumptionRecordServiceImplement extends AbstractEntity private final GaoCustomerConsumptionRecordMapper mapper; private final GaoCustomerService customerService; + private final AttachmentService attachmentService; @Override protected BaseMapper mapper() { @@ -40,12 +42,7 @@ public class GaoCustomerConsumptionRecordServiceImplement extends AbstractEntity GaoCustomerConsumptionRecordPageResult result = new GaoCustomerConsumptionRecordPageResult(); result.setTotal(mapper.countByQuery(page)); result.setAmountTotal(mapper.sumAmountByPage(page)); - List list = mapper.selectByQuery(page); - result.setList(list); - var customerMap = customerService.mapByIdList(list.stream().map(GaoCustomerConsumptionRecord::getCustomerId).toList()); - for (GaoCustomerConsumptionRecord record : list) { - record.setCustomer(customerMap.get(record.getCustomerId())); - } + result.setList(mapper.selectByQuery(page)); return result; } diff --git a/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoOrderPaymentServiceImplement.java b/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoOrderPaymentServiceImplement.java index c1dfd6b..6ef23e3 100644 --- a/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoOrderPaymentServiceImplement.java +++ b/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoOrderPaymentServiceImplement.java @@ -1,10 +1,12 @@ package com.imyeyu.api.modules.gao.service.implement; import com.imyeyu.api.config.dbsource.TimiServerDBConfig; +import com.imyeyu.api.bean.ModuleCode; import com.imyeyu.api.modules.common.entity.Attachment; import com.imyeyu.api.modules.common.service.AttachmentService; import com.imyeyu.api.modules.gao.entity.GaoFundRecord; import com.imyeyu.api.modules.gao.entity.GaoSalesOrder; +import com.imyeyu.api.modules.gao.bean.GaoPermissionCode; import com.imyeyu.api.modules.gao.service.GaoFundRecordService; import com.imyeyu.api.modules.gao.service.GaoOrderPaymentService; import com.imyeyu.api.modules.gao.service.GaoPointTriggerService; @@ -17,6 +19,7 @@ import com.imyeyu.api.modules.gao.vo.GaoOrderPaymentRevokeRequest; import com.imyeyu.api.modules.system.entity.Logger; import com.imyeyu.api.modules.system.service.LoggerService; import com.imyeyu.api.modules.user.service.UserLoginService; +import com.imyeyu.api.modules.user.service.PermissionChecker; import com.imyeyu.java.TimiJava; import com.imyeyu.java.bean.timi.TimiException; import com.imyeyu.spring.service.AbstractEntityService; @@ -40,6 +43,7 @@ public class GaoOrderPaymentServiceImplement implements GaoOrderPaymentService { private final GaoPointTriggerService pointTriggerService; private final AttachmentService attachmentService; private final UserLoginService userLoginService; + private final PermissionChecker permissionChecker; private final LoggerService loggerService; @Transactional(TimiServerDBConfig.ROLLBACKER) @@ -110,7 +114,8 @@ public class GaoOrderPaymentServiceImplement implements GaoOrderPaymentService { @Transactional(TimiServerDBConfig.ROLLBACKER) @Override public GaoFundRecord cancel(GaoOrderPaymentActionRequest request) { - return releasePending(request, GaoFundRecord.Status.CANCELLED, true); + boolean onlyOperator = !permissionChecker.hasAny(ModuleCode.GAO, GaoPermissionCode.FUND_RECORD_READ.getValue()); + return releasePending(request, GaoFundRecord.Status.CANCELLED, onlyOperator); } private GaoFundRecord releasePending(GaoOrderPaymentActionRequest request, GaoFundRecord.Status targetStatus, boolean onlyOperator) { diff --git a/src/main/java/com/imyeyu/api/modules/gao/vo/GaoFundRecordPage.java b/src/main/java/com/imyeyu/api/modules/gao/vo/GaoFundRecordPage.java index 2e3e568..9671015 100644 --- a/src/main/java/com/imyeyu/api/modules/gao/vo/GaoFundRecordPage.java +++ b/src/main/java/com/imyeyu/api/modules/gao/vo/GaoFundRecordPage.java @@ -39,4 +39,7 @@ public class GaoFundRecordPage extends BasePage { /// 操作结束时间 private Long endAt; + + /// 操作用户 ID,仅限服务端设置的数据范围条件 + private String operatorUserId; } diff --git a/src/main/resources/mapper/timi-server/gao/GaoFundRecordMapper.xml b/src/main/resources/mapper/timi-server/gao/GaoFundRecordMapper.xml index fa509cd..bb96737 100644 --- a/src/main/resources/mapper/timi-server/gao/GaoFundRecordMapper.xml +++ b/src/main/resources/mapper/timi-server/gao/GaoFundRecordMapper.xml @@ -52,6 +52,7 @@ AND f.`status` = #{status} AND f.`occurred_at` >= #{beginAt} AND f.`occurred_at` <= #{endAt} + AND f.`operator_user_id` = #{operatorUserId}