fix gao store id

This commit is contained in:
Timi
2026-08-07 19:10:25 +08:00
parent ab79391cdc
commit 6e43ff349d
16 changed files with 138 additions and 81 deletions
+1 -1
View File
@@ -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 分页查询条件
@@ -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;
@@ -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());
@@ -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);
@@ -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;
@@ -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);
/** /**
* 根据令牌获取必须有效登录的用户,否则抛出错误 * 根据令牌获取必须有效登录的用户,否则抛出错误
@@ -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;
} }