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}