v1.0.9 #16
@@ -173,7 +173,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.imyeyu.spring</groupId>
|
<groupId>com.imyeyu.spring</groupId>
|
||||||
<artifactId>timi-spring</artifactId>
|
<artifactId>timi-spring</artifactId>
|
||||||
<version>0.0.18</version>
|
<version>0.0.19</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.imyeyu.network</groupId>
|
<groupId>com.imyeyu.network</groupId>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.imyeyu.api.modules.gao.controller;
|
package com.imyeyu.api.modules.gao.controller;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonView;
|
import com.fasterxml.jackson.annotation.JsonView;
|
||||||
|
import com.imyeyu.api.bean.ModuleCode;
|
||||||
import com.imyeyu.api.bean.RoleMatchMode;
|
import com.imyeyu.api.bean.RoleMatchMode;
|
||||||
import com.imyeyu.api.modules.common.entity.Attachment;
|
import com.imyeyu.api.modules.common.entity.Attachment;
|
||||||
import com.imyeyu.api.modules.common.service.AttachmentService;
|
import com.imyeyu.api.modules.common.service.AttachmentService;
|
||||||
@@ -10,9 +11,12 @@ import com.imyeyu.api.modules.gao.bean.GaoPermissionCode;
|
|||||||
import com.imyeyu.api.modules.gao.bean.GaoRoleCode;
|
import com.imyeyu.api.modules.gao.bean.GaoRoleCode;
|
||||||
import com.imyeyu.api.modules.gao.entity.GaoCustomer;
|
import com.imyeyu.api.modules.gao.entity.GaoCustomer;
|
||||||
import com.imyeyu.api.modules.gao.service.GaoCustomerService;
|
import com.imyeyu.api.modules.gao.service.GaoCustomerService;
|
||||||
|
import com.imyeyu.api.modules.gao.service.GaoStoreService;
|
||||||
import com.imyeyu.api.modules.gao.vo.GaoCustomerDailyStateView;
|
import com.imyeyu.api.modules.gao.vo.GaoCustomerDailyStateView;
|
||||||
import com.imyeyu.api.modules.gao.vo.GaoCustomerGenderStatView;
|
import com.imyeyu.api.modules.gao.vo.GaoCustomerGenderStatView;
|
||||||
import com.imyeyu.api.modules.gao.vo.GaoCustomerTrendStateReq;
|
import com.imyeyu.api.modules.gao.vo.GaoCustomerTrendStateReq;
|
||||||
|
import com.imyeyu.api.modules.user.service.RoleChecker;
|
||||||
|
import com.imyeyu.api.modules.user.service.UserLoginService;
|
||||||
import com.imyeyu.api.modules.user.service.UserService;
|
import com.imyeyu.api.modules.user.service.UserService;
|
||||||
import com.imyeyu.java.TimiJava;
|
import com.imyeyu.java.TimiJava;
|
||||||
import com.imyeyu.java.bean.timi.TimiException;
|
import com.imyeyu.java.bean.timi.TimiException;
|
||||||
@@ -42,14 +46,17 @@ import java.util.Map;
|
|||||||
/// @author 夜雨
|
/// @author 夜雨
|
||||||
/// @since 2026-07-27 14:12
|
/// @since 2026-07-27 14:12
|
||||||
@RestController
|
@RestController
|
||||||
@RequireGaoRole(value = {GaoRoleCode.STORE_MANAGER, GaoRoleCode.EMPLOYEE}, mode = RoleMatchMode.ANY)
|
@RequireGaoRole(value = {GaoRoleCode.GLOBAL_MANAGER, GaoRoleCode.STORE_MANAGER, GaoRoleCode.EMPLOYEE}, mode = RoleMatchMode.ANY)
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@RequestMapping("/gao/customer")
|
@RequestMapping("/gao/customer")
|
||||||
public class GaoCustomerController {
|
public class GaoCustomerController {
|
||||||
|
|
||||||
private final UserService userService;
|
private final UserService userService;
|
||||||
|
private final RoleChecker roleChecker;
|
||||||
private final AttachmentService attachmentService;
|
private final AttachmentService attachmentService;
|
||||||
private final GaoCustomerService service;
|
private final GaoCustomerService service;
|
||||||
|
private final GaoStoreService gaoStoreService;
|
||||||
|
private final UserLoginService userLoginService;
|
||||||
|
|
||||||
@AOPLog
|
@AOPLog
|
||||||
@RequestRateLimit
|
@RequestRateLimit
|
||||||
@@ -92,6 +99,9 @@ public class GaoCustomerController {
|
|||||||
@PostMapping("/create")
|
@PostMapping("/create")
|
||||||
@JsonView(ResponseView.Public.class)
|
@JsonView(ResponseView.Public.class)
|
||||||
public String create(@RequestBody GaoCustomer customer) {
|
public String create(@RequestBody GaoCustomer customer) {
|
||||||
|
if (!roleChecker.hasAny(ModuleCode.GAO, GaoRoleCode.GLOBAL_MANAGER.name())) {
|
||||||
|
customer.setStoreId(gaoStoreService.getByUserId(userLoginService.getRequireLoginUserId()).getId());
|
||||||
|
}
|
||||||
service.create(customer);
|
service.create(customer);
|
||||||
return customer.getId();
|
return customer.getId();
|
||||||
}
|
}
|
||||||
@@ -101,6 +111,9 @@ public class GaoCustomerController {
|
|||||||
@RequireGaoPermission(GaoPermissionCode.CUSTOMER_UPDATE)
|
@RequireGaoPermission(GaoPermissionCode.CUSTOMER_UPDATE)
|
||||||
@PostMapping("/update")
|
@PostMapping("/update")
|
||||||
public void update(@RequestBody GaoCustomer customer) {
|
public void update(@RequestBody GaoCustomer customer) {
|
||||||
|
if (!roleChecker.hasAny(ModuleCode.GAO, GaoRoleCode.GLOBAL_MANAGER.name())) {
|
||||||
|
customer.setStoreId(gaoStoreService.getByUserId(userLoginService.getRequireLoginUserId()).getId());
|
||||||
|
}
|
||||||
service.updateWithAttachment(customer);
|
service.updateWithAttachment(customer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.imyeyu.api.modules.gao.controller;
|
package com.imyeyu.api.modules.gao.controller;
|
||||||
|
|
||||||
|
import com.imyeyu.api.bean.ModuleCode;
|
||||||
import com.imyeyu.api.bean.RoleMatchMode;
|
import com.imyeyu.api.bean.RoleMatchMode;
|
||||||
import com.imyeyu.api.modules.gao.annotation.RequireGaoPermission;
|
import com.imyeyu.api.modules.gao.annotation.RequireGaoPermission;
|
||||||
import com.imyeyu.api.modules.gao.annotation.RequireGaoRole;
|
import com.imyeyu.api.modules.gao.annotation.RequireGaoRole;
|
||||||
@@ -7,6 +8,9 @@ import com.imyeyu.api.modules.gao.bean.GaoPermissionCode;
|
|||||||
import com.imyeyu.api.modules.gao.bean.GaoRoleCode;
|
import com.imyeyu.api.modules.gao.bean.GaoRoleCode;
|
||||||
import com.imyeyu.api.modules.gao.entity.GaoEvent;
|
import com.imyeyu.api.modules.gao.entity.GaoEvent;
|
||||||
import com.imyeyu.api.modules.gao.service.GaoEventService;
|
import com.imyeyu.api.modules.gao.service.GaoEventService;
|
||||||
|
import com.imyeyu.api.modules.gao.service.GaoStoreService;
|
||||||
|
import com.imyeyu.api.modules.user.service.RoleChecker;
|
||||||
|
import com.imyeyu.api.modules.user.service.UserLoginService;
|
||||||
import com.imyeyu.spring.annotation.AOPLog;
|
import com.imyeyu.spring.annotation.AOPLog;
|
||||||
import com.imyeyu.spring.annotation.RequestRateLimit;
|
import com.imyeyu.spring.annotation.RequestRateLimit;
|
||||||
import com.imyeyu.spring.bean.Page;
|
import com.imyeyu.spring.bean.Page;
|
||||||
@@ -26,12 +30,15 @@ import java.util.Map;
|
|||||||
/// @author 夜雨
|
/// @author 夜雨
|
||||||
/// @since 2026-07-27 14:13
|
/// @since 2026-07-27 14:13
|
||||||
@RestController
|
@RestController
|
||||||
@RequireGaoRole(value = {GaoRoleCode.STORE_MANAGER, GaoRoleCode.EMPLOYEE}, mode = RoleMatchMode.ANY)
|
@RequireGaoRole(value = {GaoRoleCode.GLOBAL_MANAGER, GaoRoleCode.STORE_MANAGER, GaoRoleCode.EMPLOYEE}, mode = RoleMatchMode.ANY)
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@RequestMapping("/gao/event")
|
@RequestMapping("/gao/event")
|
||||||
public class GaoEventController {
|
public class GaoEventController {
|
||||||
|
|
||||||
private final GaoEventService service;
|
private final GaoEventService service;
|
||||||
|
private final RoleChecker roleChecker;
|
||||||
|
private final GaoStoreService gaoStoreService;
|
||||||
|
private final UserLoginService userLoginService;
|
||||||
|
|
||||||
@AOPLog
|
@AOPLog
|
||||||
@RequestRateLimit
|
@RequestRateLimit
|
||||||
@@ -65,16 +72,22 @@ public class GaoEventController {
|
|||||||
@RequestRateLimit
|
@RequestRateLimit
|
||||||
@RequireGaoPermission(GaoPermissionCode.EVENT_CREATE)
|
@RequireGaoPermission(GaoPermissionCode.EVENT_CREATE)
|
||||||
@PostMapping("/create")
|
@PostMapping("/create")
|
||||||
public void create(@RequestBody GaoEvent registrationEvent) {
|
public void create(@RequestBody GaoEvent event) {
|
||||||
service.create(registrationEvent);
|
if (!roleChecker.hasAny(ModuleCode.GAO, GaoRoleCode.GLOBAL_MANAGER.name())) {
|
||||||
|
event.setStoreId(gaoStoreService.getByUserId(userLoginService.getRequireLoginUserId()).getId());
|
||||||
|
}
|
||||||
|
service.create(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@AOPLog
|
@AOPLog
|
||||||
@RequestRateLimit
|
@RequestRateLimit
|
||||||
@RequireGaoPermission(GaoPermissionCode.EVENT_UPDATE)
|
@RequireGaoPermission(GaoPermissionCode.EVENT_UPDATE)
|
||||||
@PostMapping("/update")
|
@PostMapping("/update")
|
||||||
public void update(@RequestBody GaoEvent registrationEvent) {
|
public void update(@RequestBody GaoEvent event) {
|
||||||
service.update(registrationEvent);
|
if (!roleChecker.hasAny(ModuleCode.GAO, GaoRoleCode.GLOBAL_MANAGER.name())) {
|
||||||
|
event.setStoreId(gaoStoreService.getByUserId(userLoginService.getRequireLoginUserId()).getId());
|
||||||
|
}
|
||||||
|
service.update(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@AOPLog
|
@AOPLog
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.imyeyu.api.modules.gao.controller;
|
package com.imyeyu.api.modules.gao.controller;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonView;
|
import com.fasterxml.jackson.annotation.JsonView;
|
||||||
|
import com.imyeyu.api.bean.ModuleCode;
|
||||||
import com.imyeyu.api.bean.RoleMatchMode;
|
import com.imyeyu.api.bean.RoleMatchMode;
|
||||||
import com.imyeyu.api.modules.common.entity.Attachment;
|
import com.imyeyu.api.modules.common.entity.Attachment;
|
||||||
import com.imyeyu.api.modules.common.service.AttachmentService;
|
import com.imyeyu.api.modules.common.service.AttachmentService;
|
||||||
@@ -14,10 +15,14 @@ import com.imyeyu.api.modules.gao.entity.GaoEventRecord;
|
|||||||
import com.imyeyu.api.modules.gao.service.GaoCustomerService;
|
import com.imyeyu.api.modules.gao.service.GaoCustomerService;
|
||||||
import com.imyeyu.api.modules.gao.service.GaoEventRecordService;
|
import com.imyeyu.api.modules.gao.service.GaoEventRecordService;
|
||||||
import com.imyeyu.api.modules.gao.service.GaoEventService;
|
import com.imyeyu.api.modules.gao.service.GaoEventService;
|
||||||
|
import com.imyeyu.api.modules.gao.service.GaoStoreService;
|
||||||
import com.imyeyu.api.modules.gao.vo.GaoCustomerEventRankView;
|
import com.imyeyu.api.modules.gao.vo.GaoCustomerEventRankView;
|
||||||
import com.imyeyu.api.modules.gao.vo.GaoEventRecordPage;
|
import com.imyeyu.api.modules.gao.vo.GaoEventRecordPage;
|
||||||
import com.imyeyu.api.modules.gao.vo.GaoEventRecordRankPage;
|
import com.imyeyu.api.modules.gao.vo.GaoEventRecordRankPage;
|
||||||
|
import com.imyeyu.api.modules.user.service.RoleChecker;
|
||||||
|
import com.imyeyu.api.modules.user.service.UserLoginService;
|
||||||
import com.imyeyu.api.modules.user.service.UserService;
|
import com.imyeyu.api.modules.user.service.UserService;
|
||||||
|
import com.imyeyu.java.TimiJava;
|
||||||
import com.imyeyu.network.Network;
|
import com.imyeyu.network.Network;
|
||||||
import com.imyeyu.spring.TimiSpring;
|
import com.imyeyu.spring.TimiSpring;
|
||||||
import com.imyeyu.spring.annotation.AOPLog;
|
import com.imyeyu.spring.annotation.AOPLog;
|
||||||
@@ -43,16 +48,19 @@ import java.util.Map;
|
|||||||
/// @author 夜雨
|
/// @author 夜雨
|
||||||
/// @since 2026-07-27 14:11
|
/// @since 2026-07-27 14:11
|
||||||
@RestController
|
@RestController
|
||||||
@RequireGaoRole(value = {GaoRoleCode.STORE_MANAGER, GaoRoleCode.EMPLOYEE}, mode = RoleMatchMode.ANY)
|
@RequireGaoRole(value = {GaoRoleCode.GLOBAL_MANAGER, GaoRoleCode.STORE_MANAGER, GaoRoleCode.EMPLOYEE}, mode = RoleMatchMode.ANY)
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@RequestMapping("/gao/event/record")
|
@RequestMapping("/gao/event/record")
|
||||||
public class GaoEventRecordController {
|
public class GaoEventRecordController {
|
||||||
|
|
||||||
private final UserService userService;
|
private final UserService userService;
|
||||||
|
private final RoleChecker roleChecker;
|
||||||
private final GaoEventService eventService;
|
private final GaoEventService eventService;
|
||||||
private final AttachmentService attachmentService;
|
private final AttachmentService attachmentService;
|
||||||
private final GaoCustomerService customerService;
|
private final GaoCustomerService customerService;
|
||||||
|
private final GaoStoreService gaoStoreService;
|
||||||
private final GaoEventRecordService service;
|
private final GaoEventRecordService service;
|
||||||
|
private final UserLoginService userLoginService;
|
||||||
|
|
||||||
@AOPLog
|
@AOPLog
|
||||||
@RequestRateLimit
|
@RequestRateLimit
|
||||||
@@ -92,22 +100,40 @@ public class GaoEventRecordController {
|
|||||||
|
|
||||||
@AOPLog
|
@AOPLog
|
||||||
@RequestRateLimit
|
@RequestRateLimit
|
||||||
|
@RequireGaoPermission(GaoPermissionCode.EVENT_RECORD_CREATE)
|
||||||
@PostMapping("/create")
|
@PostMapping("/create")
|
||||||
public void create(@RequestBody GaoEventRecord record) {
|
public void create(@RequestBody GaoEventRecord record) {
|
||||||
|
if (!roleChecker.hasAny(ModuleCode.GAO, GaoRoleCode.GLOBAL_MANAGER.name())) {
|
||||||
|
record.setStoreId(gaoStoreService.getByUserId(userLoginService.getRequireLoginUserId()).getId());
|
||||||
|
}
|
||||||
service.create(record);
|
service.create(record);
|
||||||
}
|
}
|
||||||
|
|
||||||
@AOPLog
|
@AOPLog
|
||||||
@RequestRateLimit
|
@RequestRateLimit
|
||||||
|
@RequireGaoPermission(GaoPermissionCode.EVENT_RECORD_CREATE)
|
||||||
@PostMapping("/create/batch")
|
@PostMapping("/create/batch")
|
||||||
public void createBatch(@RequestBody List<GaoEventRecord> recordList) {
|
public void createBatch(@RequestBody List<GaoEventRecord> recordList) {
|
||||||
|
if (!roleChecker.hasAny(ModuleCode.GAO, GaoRoleCode.GLOBAL_MANAGER.name())) {
|
||||||
|
String storeId = gaoStoreService.getBelongIdByRequiredLoginUserId();
|
||||||
|
for (GaoEventRecord record : recordList) {
|
||||||
|
record.setStoreId(storeId);
|
||||||
|
}
|
||||||
|
}
|
||||||
service.createBatch(recordList);
|
service.createBatch(recordList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@AOPLog
|
@AOPLog
|
||||||
@RequestRateLimit
|
@RequestRateLimit
|
||||||
|
@RequireGaoPermission(GaoPermissionCode.EVENT_RECORD_CREATE)
|
||||||
@PostMapping("/create/customer")
|
@PostMapping("/create/customer")
|
||||||
public void createWithCustomer(@RequestBody GaoCustomer customer) {
|
public void createWithCustomer(@RequestBody GaoCustomer customer) {
|
||||||
|
if (!roleChecker.hasAny(ModuleCode.GAO, GaoRoleCode.GLOBAL_MANAGER.name())) {
|
||||||
|
String storeId = gaoStoreService.getBelongIdByRequiredLoginUserId();
|
||||||
|
for (GaoEventRecord record : TimiJava.safeIterable(customer.getEventRecordList())) {
|
||||||
|
record.setStoreId(storeId);
|
||||||
|
}
|
||||||
|
}
|
||||||
service.createWithCustomer(customer);
|
service.createWithCustomer(customer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,6 +142,9 @@ public class GaoEventRecordController {
|
|||||||
@RequireGaoPermission(GaoPermissionCode.EVENT_RECORD_UPDATE)
|
@RequireGaoPermission(GaoPermissionCode.EVENT_RECORD_UPDATE)
|
||||||
@PostMapping("/update")
|
@PostMapping("/update")
|
||||||
public void update(@RequestBody GaoEventRecord record) {
|
public void update(@RequestBody GaoEventRecord record) {
|
||||||
|
if (!roleChecker.hasAny(ModuleCode.GAO, GaoRoleCode.GLOBAL_MANAGER.name())) {
|
||||||
|
record.setStoreId(gaoStoreService.getBelongIdByRequiredLoginUserId());
|
||||||
|
}
|
||||||
service.update(record);
|
service.update(record);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.imyeyu.api.modules.gao.controller;
|
package com.imyeyu.api.modules.gao.controller;
|
||||||
|
|
||||||
|
import com.imyeyu.api.bean.RoleMatchMode;
|
||||||
import com.imyeyu.api.modules.gao.annotation.RequireGaoPermission;
|
import com.imyeyu.api.modules.gao.annotation.RequireGaoPermission;
|
||||||
import com.imyeyu.api.modules.gao.annotation.RequireGaoRole;
|
import com.imyeyu.api.modules.gao.annotation.RequireGaoRole;
|
||||||
import com.imyeyu.api.modules.gao.bean.GaoPermissionCode;
|
import com.imyeyu.api.modules.gao.bean.GaoPermissionCode;
|
||||||
@@ -7,7 +8,6 @@ import com.imyeyu.api.modules.gao.bean.GaoRoleCode;
|
|||||||
import com.imyeyu.api.modules.gao.entity.GaoStore;
|
import com.imyeyu.api.modules.gao.entity.GaoStore;
|
||||||
import com.imyeyu.api.modules.gao.service.GaoStoreService;
|
import com.imyeyu.api.modules.gao.service.GaoStoreService;
|
||||||
import com.imyeyu.api.modules.user.service.UserLoginService;
|
import com.imyeyu.api.modules.user.service.UserLoginService;
|
||||||
import com.imyeyu.api.bean.RoleMatchMode;
|
|
||||||
import com.imyeyu.network.Network;
|
import com.imyeyu.network.Network;
|
||||||
import com.imyeyu.spring.TimiSpring;
|
import com.imyeyu.spring.TimiSpring;
|
||||||
import com.imyeyu.spring.annotation.AOPLog;
|
import com.imyeyu.spring.annotation.AOPLog;
|
||||||
@@ -105,8 +105,8 @@ public class GaoStoreController {
|
|||||||
@AOPLog
|
@AOPLog
|
||||||
@RequestRateLimit
|
@RequestRateLimit
|
||||||
@RequireGaoRole(value = {GaoRoleCode.GLOBAL_MANAGER, GaoRoleCode.STORE_MANAGER, GaoRoleCode.EMPLOYEE}, mode = RoleMatchMode.ANY)
|
@RequireGaoRole(value = {GaoRoleCode.GLOBAL_MANAGER, GaoRoleCode.STORE_MANAGER, GaoRoleCode.EMPLOYEE}, mode = RoleMatchMode.ANY)
|
||||||
@PostMapping("/detail/user")
|
@PostMapping("/user")
|
||||||
public GaoStore getByLoginUser() {
|
public GaoStore getLoginStore() {
|
||||||
return service.getByUserId(userLoginService.getRequireLoginUserId());
|
return service.getByUserId(userLoginService.getRequireLoginUserId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,9 +39,9 @@ import java.util.Map;
|
|||||||
/// @author 夜雨
|
/// @author 夜雨
|
||||||
/// @since 2026-07-30 14:15
|
/// @since 2026-07-30 14:15
|
||||||
@RestController
|
@RestController
|
||||||
|
@RequireGaoRole(GaoRoleCode.STORE_MANAGER)
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@RequestMapping("/gao/user")
|
@RequestMapping("/gao/user")
|
||||||
@RequireGaoRole(GaoRoleCode.STORE_MANAGER)
|
|
||||||
public class GaoUserController {
|
public class GaoUserController {
|
||||||
|
|
||||||
private final UserService userService;
|
private final UserService userService;
|
||||||
@@ -99,6 +99,9 @@ public class GaoUserController {
|
|||||||
@PostMapping("/create")
|
@PostMapping("/create")
|
||||||
@JsonView(ResponseView.Public.class)
|
@JsonView(ResponseView.Public.class)
|
||||||
public GaoUser create(@RequestBody GaoUser gaoUser) {
|
public GaoUser create(@RequestBody GaoUser gaoUser) {
|
||||||
|
if (!roleChecker.hasAny(ModuleCode.GAO, GaoRoleCode.GLOBAL_MANAGER.name())) {
|
||||||
|
gaoUser.setStoreId(gaoStoreService.getByUserId(userLoginService.getRequireLoginUserId()).getId());
|
||||||
|
}
|
||||||
service.create(gaoUser);
|
service.create(gaoUser);
|
||||||
return service.get(gaoUser.getId());
|
return service.get(gaoUser.getId());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ package com.imyeyu.api.modules.gao.mapper;
|
|||||||
|
|
||||||
import com.imyeyu.api.modules.gao.entity.GaoUser;
|
import com.imyeyu.api.modules.gao.entity.GaoUser;
|
||||||
import com.imyeyu.spring.mapper.BaseMapper;
|
import com.imyeyu.spring.mapper.BaseMapper;
|
||||||
import org.apache.ibatis.annotations.Param;
|
|
||||||
import org.apache.ibatis.annotations.Select;
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// GAO 用户 Mapper
|
/// GAO 用户 Mapper
|
||||||
@@ -11,10 +9,4 @@ import org.apache.ibatis.annotations.Select;
|
|||||||
/// @author Codex
|
/// @author Codex
|
||||||
/// @since 2026-07-30
|
/// @since 2026-07-30
|
||||||
public interface GaoUserMapper extends BaseMapper<GaoUser, String> {
|
public interface GaoUserMapper extends BaseMapper<GaoUser, String> {
|
||||||
|
|
||||||
@Select("SELECT * FROM `gao_user` WHERE `user_id` = #{userId} AND `deleted_at` IS NULL LIMIT 1")
|
|
||||||
GaoUser selectByUserId(@Param("userId") String userId);
|
|
||||||
|
|
||||||
@Select("SELECT * FROM `gao_user` WHERE `store_id` = #{storeId} AND `user_id` = #{userId} AND `deleted_at` IS NULL LIMIT 1")
|
|
||||||
GaoUser selectByStoreIdAndUserId(@Param("storeId") String storeId, @Param("userId") String userId);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ public interface GaoStoreService extends BaseService<GaoStore, String> {
|
|||||||
/// @return 门店
|
/// @return 门店
|
||||||
GaoStore getByUserId(String userId);
|
GaoStore getByUserId(String userId);
|
||||||
|
|
||||||
|
String getBelongIdByRequiredLoginUserId();
|
||||||
|
|
||||||
/// 导出门店列表
|
/// 导出门店列表
|
||||||
///
|
///
|
||||||
/// @param page 分页查询条件
|
/// @param page 分页查询条件
|
||||||
|
|||||||
+4
-1
@@ -91,7 +91,10 @@ public class GaoEventRecordServiceImplement extends AbstractEntityService<GaoEve
|
|||||||
int registeredDateValue = dateValue(registeredAt);
|
int registeredDateValue = dateValue(registeredAt);
|
||||||
long businessDayNo = businessDayService.resolveOpenBusinessDay(event.getStoreId(), registeredDateValue).getBusinessDayNo();
|
long businessDayNo = businessDayService.resolveOpenBusinessDay(event.getStoreId(), registeredDateValue).getBusinessDayNo();
|
||||||
|
|
||||||
List<String> customerIdList = TimiJava.defaultIfEmpty(record.getCustomerIdList(), List.of(record.getCustomerId()));
|
List<String> customerIdList = record.getCustomerIdList();
|
||||||
|
if (TimiJava.isEmpty(customerIdList)) {
|
||||||
|
customerIdList = List.of(record.getCustomerId());
|
||||||
|
}
|
||||||
TimiException.required(customerIdList, "not found customerId or empty customerIdList");
|
TimiException.required(customerIdList, "not found customerId or empty customerIdList");
|
||||||
|
|
||||||
GaoEventRecord firstRecord = null;
|
GaoEventRecord firstRecord = null;
|
||||||
|
|||||||
+27
-21
@@ -66,13 +66,8 @@ public class GaoEventServiceImplement extends AbstractEntityService<GaoEvent, St
|
|||||||
event.setStatus(TimiJava.defaultIfNull(event.getStatus(), GaoEvent.Status.DRAFT));
|
event.setStatus(TimiJava.defaultIfNull(event.getStatus(), GaoEvent.Status.DRAFT));
|
||||||
event.setRequirePhoto(TimiJava.defaultIfNull(event.getRequirePhoto(), false));
|
event.setRequirePhoto(TimiJava.defaultIfNull(event.getRequirePhoto(), false));
|
||||||
event.setLimitType(TimiJava.defaultIfNull(event.getLimitType(), GaoEvent.LimitType.NONE));
|
event.setLimitType(TimiJava.defaultIfNull(event.getLimitType(), GaoEvent.LimitType.NONE));
|
||||||
if (TimiJava.isNotEmpty(event.getLimitType())) {
|
|
||||||
TimiException.requiredTrue(event.getLimitType().getMin() < event.getLimitValue(), "约束值最低 %s".formatted(event.getLimitType().getMin()));
|
|
||||||
}
|
|
||||||
if (event.getBeginAt() != null || event.getEndAt() != null) {
|
|
||||||
TimiException.requiredTrue(event.getBeginAt() == null || event.getEndAt() == null || event.getBeginAt() <= event.getEndAt(), "invalid beginAt or endAt");
|
|
||||||
}
|
|
||||||
event.setSort(TimiJava.defaultIfNull(event.getSort(), 0));
|
event.setSort(TimiJava.defaultIfNull(event.getSort(), 0));
|
||||||
|
verifyEvent(event);
|
||||||
super.create(event);
|
super.create(event);
|
||||||
|
|
||||||
saveRoleRelation(event.getId(), event.getRoleCodeList());
|
saveRoleRelation(event.getId(), event.getRoleCodeList());
|
||||||
@@ -94,25 +89,27 @@ public class GaoEventServiceImplement extends AbstractEntityService<GaoEvent, St
|
|||||||
|
|
||||||
@Transactional(TimiServerDBConfig.ROLLBACKER)
|
@Transactional(TimiServerDBConfig.ROLLBACKER)
|
||||||
@Override
|
@Override
|
||||||
public void update(GaoEvent entity) {
|
public void update(GaoEvent event) {
|
||||||
Logger logger = new Logger(Logger.Module.GAO, "GAO_EVENT_UPDATE");
|
Logger logger = new Logger(Logger.Module.GAO, "GAO_EVENT_UPDATE");
|
||||||
try {
|
try {
|
||||||
logger.setContent(jackson.writeValueAsString(entity));
|
logger.setContent(jackson.writeValueAsString(event));
|
||||||
GaoEvent dbEvent = get(entity.getId());
|
GaoEvent dbEvent = get(event.getId());
|
||||||
TimiException.requiredTrue(dbEvent.getStoreId().equals(entity.getStoreId()), "event.storeId invalid");
|
TimiException.requiredTrue(dbEvent.getStoreId().equals(event.getStoreId()), "event.storeId invalid");
|
||||||
dbEvent.setName(entity.getName());
|
dbEvent.setName(event.getName());
|
||||||
dbEvent.setDescription(entity.getDescription());
|
dbEvent.setDescription(event.getDescription());
|
||||||
dbEvent.setColor(entity.getColor());
|
dbEvent.setColor(event.getColor());
|
||||||
dbEvent.setStatus(entity.getStatus());
|
dbEvent.setStatus(event.getStatus());
|
||||||
dbEvent.setRequirePhoto(entity.getRequirePhoto());
|
dbEvent.setRequirePhoto(event.getRequirePhoto());
|
||||||
dbEvent.setLimitType(entity.getLimitType());
|
dbEvent.setLimitType(event.getLimitType());
|
||||||
dbEvent.setLimitValue(entity.getLimitValue());
|
dbEvent.setLimitValue(event.getLimitValue());
|
||||||
dbEvent.setBeginAt(entity.getBeginAt());
|
dbEvent.setBeginAt(event.getBeginAt());
|
||||||
dbEvent.setEndAt(entity.getEndAt());
|
dbEvent.setEndAt(event.getEndAt());
|
||||||
|
|
||||||
|
verifyEvent(dbEvent);
|
||||||
mapper.update(dbEvent);
|
mapper.update(dbEvent);
|
||||||
saveRoleRelation(entity.getId(), entity.getRoleCodeList());
|
saveRoleRelation(event.getId(), event.getRoleCodeList());
|
||||||
logger.setLevel(Logger.Level.INFO);
|
logger.setLevel(Logger.Level.INFO);
|
||||||
logger.setResult(entity.getId());
|
logger.setResult(event.getId());
|
||||||
} catch (TimiException e) {
|
} catch (TimiException e) {
|
||||||
logger.setLevel(Logger.Level.WARN);
|
logger.setLevel(Logger.Level.WARN);
|
||||||
logger.setException(e.getMessage());
|
logger.setException(e.getMessage());
|
||||||
@@ -192,6 +189,15 @@ public class GaoEventServiceImplement extends AbstractEntityService<GaoEvent, St
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void verifyEvent(GaoEvent event) {
|
||||||
|
if (TimiJava.isNotEmpty(event.getLimitType()) && event.getLimitType() != GaoEvent.LimitType.NONE) {
|
||||||
|
TimiException.requiredTrue(event.getLimitType().getMin() < event.getLimitValue(), "约束值最低 %s".formatted(event.getLimitType().getMin()));
|
||||||
|
}
|
||||||
|
if (event.getBeginAt() != null || event.getEndAt() != null) {
|
||||||
|
TimiException.requiredTrue(event.getBeginAt() == null || event.getEndAt() == null || event.getBeginAt() <= event.getEndAt(), "invalid beginAt or endAt");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void saveRoleRelation(String eventId, List<String> roleCodeList) {
|
private void saveRoleRelation(String eventId, List<String> roleCodeList) {
|
||||||
List<GaoEventRoleRelation> dbRoleRelationList = roleRelationMapper.selectAllByEventIdList(List.of(eventId));
|
List<GaoEventRoleRelation> dbRoleRelationList = roleRelationMapper.selectAllByEventIdList(List.of(eventId));
|
||||||
Set<String> roleCodeSet = TimiJava.defaultIfEmpty(roleCodeList, List.<String>of()).stream().filter(TimiJava::isNotEmpty).collect(Collectors.toSet());
|
Set<String> roleCodeSet = TimiJava.defaultIfEmpty(roleCodeList, List.<String>of()).stream().filter(TimiJava::isNotEmpty).collect(Collectors.toSet());
|
||||||
|
|||||||
+7
@@ -8,6 +8,7 @@ import com.imyeyu.api.modules.gao.service.GaoStoreService;
|
|||||||
import com.imyeyu.api.modules.gao.util.StoreXSSFBuilder;
|
import com.imyeyu.api.modules.gao.util.StoreXSSFBuilder;
|
||||||
import com.imyeyu.api.modules.system.entity.Logger;
|
import com.imyeyu.api.modules.system.entity.Logger;
|
||||||
import com.imyeyu.api.modules.system.service.LoggerService;
|
import com.imyeyu.api.modules.system.service.LoggerService;
|
||||||
|
import com.imyeyu.api.modules.user.service.UserLoginService;
|
||||||
import com.imyeyu.java.TimiJava;
|
import com.imyeyu.java.TimiJava;
|
||||||
import com.imyeyu.java.bean.timi.TimiCode;
|
import com.imyeyu.java.bean.timi.TimiCode;
|
||||||
import com.imyeyu.java.bean.timi.TimiException;
|
import com.imyeyu.java.bean.timi.TimiException;
|
||||||
@@ -39,6 +40,7 @@ public class GaoStoreServiceImplement extends AbstractEntityService<GaoStore, St
|
|||||||
private final ObjectMapper jackson;
|
private final ObjectMapper jackson;
|
||||||
|
|
||||||
private final LoggerService loggerService;
|
private final LoggerService loggerService;
|
||||||
|
private final UserLoginService userLoginService;
|
||||||
|
|
||||||
private final GaoStoreMapper mapper;
|
private final GaoStoreMapper mapper;
|
||||||
private final StoreXSSFBuilder storeXSSFBuilder;
|
private final StoreXSSFBuilder storeXSSFBuilder;
|
||||||
@@ -143,6 +145,11 @@ public class GaoStoreServiceImplement extends AbstractEntityService<GaoStore, St
|
|||||||
return mapper.selectByUserId(userId);
|
return mapper.selectByUserId(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getBelongIdByRequiredLoginUserId() {
|
||||||
|
return getByUserId(userLoginService.getRequireLoginUserId()).getId();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] export(Page<GaoStore> page) throws IOException {
|
public byte[] export(Page<GaoStore> page) throws IOException {
|
||||||
page.setIndex(0);
|
page.setIndex(0);
|
||||||
|
|||||||
-2
@@ -9,7 +9,6 @@ import com.imyeyu.api.modules.gao.service.GaoStoreService;
|
|||||||
import com.imyeyu.api.modules.gao.service.GaoUserService;
|
import com.imyeyu.api.modules.gao.service.GaoUserService;
|
||||||
import com.imyeyu.api.modules.system.entity.Logger;
|
import com.imyeyu.api.modules.system.entity.Logger;
|
||||||
import com.imyeyu.api.modules.system.service.LoggerService;
|
import com.imyeyu.api.modules.system.service.LoggerService;
|
||||||
import com.imyeyu.api.modules.user.service.RoleService;
|
|
||||||
import com.imyeyu.api.modules.user.service.UserService;
|
import com.imyeyu.api.modules.user.service.UserService;
|
||||||
import com.imyeyu.java.TimiJava;
|
import com.imyeyu.java.TimiJava;
|
||||||
import com.imyeyu.java.bean.timi.TimiCode;
|
import com.imyeyu.java.bean.timi.TimiCode;
|
||||||
@@ -33,7 +32,6 @@ public class GaoUserServiceImplement extends AbstractEntityService<GaoUser, Stri
|
|||||||
|
|
||||||
private final ObjectMapper jackson;
|
private final ObjectMapper jackson;
|
||||||
private final UserService userService;
|
private final UserService userService;
|
||||||
private final RoleService roleService;
|
|
||||||
private final LoggerService loggerService;
|
private final LoggerService loggerService;
|
||||||
private final GaoStoreService gaoStoreService;
|
private final GaoStoreService gaoStoreService;
|
||||||
|
|
||||||
|
|||||||
+8
-10
@@ -3,10 +3,7 @@ package com.imyeyu.api.modules.system.service.implement;
|
|||||||
import com.imyeyu.api.modules.system.entity.Logger;
|
import com.imyeyu.api.modules.system.entity.Logger;
|
||||||
import com.imyeyu.api.modules.system.mapper.LoggerMapper;
|
import com.imyeyu.api.modules.system.mapper.LoggerMapper;
|
||||||
import com.imyeyu.api.modules.system.service.LoggerService;
|
import com.imyeyu.api.modules.system.service.LoggerService;
|
||||||
import com.imyeyu.api.modules.user.entity.User;
|
|
||||||
import com.imyeyu.api.modules.user.service.UserLoginService;
|
import com.imyeyu.api.modules.user.service.UserLoginService;
|
||||||
import com.imyeyu.java.TimiJava;
|
|
||||||
import com.imyeyu.spring.TimiSpring;
|
|
||||||
import com.imyeyu.spring.mapper.BaseMapper;
|
import com.imyeyu.spring.mapper.BaseMapper;
|
||||||
import com.imyeyu.spring.service.AbstractEntityService;
|
import com.imyeyu.spring.service.AbstractEntityService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@@ -39,13 +36,14 @@ public class LoggerServiceImplement extends AbstractEntityService<Logger, String
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createSync(Logger logger) {
|
public void createSync(Logger logger) {
|
||||||
if (TimiJava.isEmpty(logger.getUserId())) {
|
// TODO 异步请求上下文已丢失
|
||||||
User loginUser = userLoginService.getLoginUser();
|
// if (TimiJava.isEmpty(logger.getUserId())) {
|
||||||
if (TimiJava.isNotEmpty(loginUser)) {
|
// User loginUser = userLoginService.getLoginUser();
|
||||||
logger.setUserId(loginUser.getId());
|
// if (TimiJava.isNotEmpty(loginUser)) {
|
||||||
}
|
// logger.setUserId(loginUser.getId());
|
||||||
}
|
// }
|
||||||
logger.setIp(TimiJava.defaultIfEmpty(logger.getIp(), TimiSpring.getRequestIP()));
|
// }
|
||||||
|
// logger.setIp(TimiJava.defaultIfEmpty(logger.getIp(), TimiSpring.getRequestIP()));
|
||||||
super.create(logger);
|
super.create(logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import com.imyeyu.api.modules.user.vo.LoginResponse;
|
|||||||
import com.imyeyu.api.modules.user.vo.PhoneVerifyCodeSendRequest;
|
import com.imyeyu.api.modules.user.vo.PhoneVerifyCodeSendRequest;
|
||||||
import com.imyeyu.api.modules.user.vo.PhoneVerifyRequest;
|
import com.imyeyu.api.modules.user.vo.PhoneVerifyRequest;
|
||||||
import com.imyeyu.api.modules.user.vo.UpdatePasswordRequest;
|
import com.imyeyu.api.modules.user.vo.UpdatePasswordRequest;
|
||||||
|
import com.imyeyu.java.TimiJava;
|
||||||
import com.imyeyu.spring.TimiSpring;
|
import com.imyeyu.spring.TimiSpring;
|
||||||
import com.imyeyu.spring.annotation.AOPLog;
|
import com.imyeyu.spring.annotation.AOPLog;
|
||||||
import com.imyeyu.spring.annotation.CaptchaValid;
|
import com.imyeyu.spring.annotation.CaptchaValid;
|
||||||
@@ -130,6 +131,7 @@ public class UserController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@AOPLog
|
@AOPLog
|
||||||
|
@JsonView(ResponseView.Public.class)
|
||||||
@RequiredToken
|
@RequiredToken
|
||||||
@RequestRateLimit
|
@RequestRateLimit
|
||||||
@RequestMapping("/login/token")
|
@RequestMapping("/login/token")
|
||||||
@@ -140,37 +142,24 @@ public class UserController {
|
|||||||
/**
|
/**
|
||||||
* 更新当前用户资料
|
* 更新当前用户资料
|
||||||
*
|
*
|
||||||
* @param req 用户资料
|
* @param user 用户资料
|
||||||
* @return 最新登录用户
|
* @return 最新登录用户
|
||||||
*/
|
*/
|
||||||
@AOPLog
|
@AOPLog
|
||||||
@RequiredToken
|
@RequiredToken
|
||||||
@RequestRateLimit
|
@RequestRateLimit
|
||||||
@RequireCorePermission(CorePermissionCode.USER_UPDATE)
|
|
||||||
@PostMapping("/current/update")
|
@PostMapping("/current/update")
|
||||||
public LoginResponse updateCurrent(@RequestBody User req) {
|
public LoginResponse updateCurrent(@RequestBody User user) {
|
||||||
User loginUser = userLoginService.getRequireLoginUser();
|
User loginUser = userLoginService.getRequireLoginUser();
|
||||||
User user = userService.get(loginUser.getId());
|
User dbUser = userService.get(loginUser.getId());
|
||||||
if (req.getName() != null) {
|
dbUser.setName(TimiJava.defaultIfEmpty(user.getName(), dbUser.getName()));
|
||||||
user.setName(req.getName());
|
dbUser.setNick(TimiJava.defaultIfEmpty(user.getNick(), dbUser.getNick()));
|
||||||
}
|
dbUser.setGender(TimiJava.defaultIfNull(user.getGender(), dbUser.getGender()));
|
||||||
if (req.getNick() != null) {
|
dbUser.setDescription(user.getDescription());
|
||||||
user.setNick(req.getNick());
|
dbUser.setAvatarType(TimiJava.defaultIfNull(user.getAvatarType(), dbUser.getAvatarType()));
|
||||||
}
|
dbUser.setWrapperType(TimiJava.defaultIfNull(user.getAvatarType(), dbUser.getWrapperType()));
|
||||||
if (req.getGender() != null) {
|
userService.update(dbUser);
|
||||||
user.setGender(req.getGender());
|
updateCurrentAvatar(loginUser.getId(), user.getTempFileIdList());
|
||||||
}
|
|
||||||
if (req.getDescription() != null) {
|
|
||||||
user.setDescription(req.getDescription());
|
|
||||||
}
|
|
||||||
if (req.getAvatarType() != null) {
|
|
||||||
user.setAvatarType(req.getAvatarType());
|
|
||||||
}
|
|
||||||
if (req.getWrapperType() != null) {
|
|
||||||
user.setWrapperType(req.getWrapperType());
|
|
||||||
}
|
|
||||||
userService.update(user);
|
|
||||||
updateCurrentAvatar(loginUser.getId(), req.getTempFileIdList());
|
|
||||||
return userLoginService.login(TimiSpring.getToken(), loginUser.getId());
|
return userLoginService.login(TimiSpring.getToken(), loginUser.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.imyeyu.api.modules.user.service;
|
|||||||
import com.imyeyu.api.modules.user.entity.User;
|
import com.imyeyu.api.modules.user.entity.User;
|
||||||
import com.imyeyu.api.modules.user.vo.LoginRequest;
|
import com.imyeyu.api.modules.user.vo.LoginRequest;
|
||||||
import com.imyeyu.api.modules.user.vo.LoginResponse;
|
import com.imyeyu.api.modules.user.vo.LoginResponse;
|
||||||
|
import com.imyeyu.spring.TimiSpring;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户登录服务
|
* 用户登录服务
|
||||||
@@ -27,7 +28,11 @@ public interface UserLoginService {
|
|||||||
*
|
*
|
||||||
* @return 用户
|
* @return 用户
|
||||||
*/
|
*/
|
||||||
User getLoginUser();
|
default User getLoginUser() {
|
||||||
|
return getLoginUser(TimiSpring.getToken());
|
||||||
|
}
|
||||||
|
|
||||||
|
User getLoginUser(String token);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据令牌获取必须有效登录的用户,否则抛出错误
|
* 根据令牌获取必须有效登录的用户,否则抛出错误
|
||||||
|
|||||||
+1
-2
@@ -99,8 +99,7 @@ public class UserLoginServiceImplement implements UserLoginService, TimiJava {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public User getLoginUser() {
|
public User getLoginUser(String token) {
|
||||||
String token = TimiSpring.getToken();
|
|
||||||
if (TimiJava.isEmpty(token)) {
|
if (TimiJava.isEmpty(token)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user