From ed171eda88ec7e99e60e9c593b4ee129fb6e6b44 Mon Sep 17 00:00:00 2001 From: guotao <499836921@qq.com> Date: Fri, 9 Jan 2026 12:20:44 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E6=AC=A1=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 210 ++++++++++-------- .../xjhs/findmemerchant/common/ApiResult.java | 14 +- .../xjhs/findmemerchant/common/ErrorCode.java | 16 +- .../common/jackson/JsonLong.java | 2 +- .../common/jackson/SafeLongDeserializer.java | 16 +- .../common/jpa/AbstractBaseEntity.java | 17 +- .../common/jpa/id/SnowflakeGenerated.java | 2 +- .../common/jpa/id/SnowflakeIdGenerator.java | 2 +- .../common/jpa/id/SnowflakeIdWorker.java | 2 +- .../common/jpa/json/HashMapJsonConverter.java | 2 +- .../jpa/json/StringListJsonConverter.java | 2 +- .../common/mvc/GlobalResponseHandler.java | 70 +++++- .../findmemerchant/common/mvc/PageVo.java | 20 ++ .../findmemerchant/config/JacksonConfig.java | 1 + .../xjhs/findmemerchant/config/JpaConfig.java | 26 +++ .../controller/AuthController.java | 65 +++--- .../controller/MerchantController.java | 67 +++--- .../controller/StoreController.java | 162 +++++++++++--- .../controller/StoreEmployeeController.java | 153 +++++++++++++ .../xjhs/findmemerchant/dto/MerchantDto.java | 13 +- .../findmemerchant/dto/auth/RegisterDto.java | 33 ++- .../dto/member/EmployeeDto.java | 36 +++ .../dto/store/BusinessPeriodDto.java | 18 +- .../dto/store/StoreBusinessStatusDto.java | 32 +++ .../findmemerchant/dto/store/StoreDto.java | 10 +- .../xjhs/findmemerchant/entity/BankCard.java | 8 +- .../entity/BusinessLicense.java | 6 +- .../findmemerchant/entity/BusinessPeriod.java | 10 +- .../xjhs/findmemerchant/entity/Coupon.java | 22 +- .../findmemerchant/entity/CouponCode.java | 6 +- .../xjhs/findmemerchant/entity/Employee.java | 16 +- .../entity/HealthCertificate.java | 6 +- .../xjhs/findmemerchant/entity/Member.java | 8 +- .../xjhs/findmemerchant/entity/Merchant.java | 14 +- .../xjhs/findmemerchant/entity/Message.java | 18 +- .../com/xjhs/findmemerchant/entity/Order.java | 10 +- .../xjhs/findmemerchant/entity/OrderItem.java | 15 +- .../xjhs/findmemerchant/entity/Product.java | 19 +- .../entity/ProductCategory.java | 8 +- .../findmemerchant/entity/ProductSKU.java | 13 +- .../xjhs/findmemerchant/entity/Review.java | 28 +-- .../findmemerchant/entity/ReviewReply.java | 15 +- .../com/xjhs/findmemerchant/entity/Role.java | 10 +- .../findmemerchant/entity/Settlement.java | 22 +- .../com/xjhs/findmemerchant/entity/Store.java | 47 ++-- .../findmemerchant/entity/Transaction.java | 15 +- .../xjhs/findmemerchant/entity/Wallet.java | 30 +-- .../findmemerchant/entity/Withdrawal.java | 16 +- .../findmemerchant/mapper/EmployeeMapper.java | 18 +- .../findmemerchant/mapper/MerchantMapper.java | 3 + .../findmemerchant/mapper/StoreMapper.java | 15 ++ .../repository/ActivityRepository.java | 5 +- .../repository/BankCardRepository.java | 10 +- .../repository/BusinessLicenseRepository.java | 4 +- .../repository/BusinessPeriodRepository.java | 4 +- .../repository/CouponCodeRepository.java | 4 +- .../repository/CouponRepository.java | 11 +- .../repository/CouponStoreRepository.java | 6 +- .../repository/EmployeeRepository.java | 13 -- .../HealthCertificateRepository.java | 4 +- .../repository/MemberRepository.java | 6 +- .../repository/MerchantRepository.java | 2 +- .../repository/MessageRepository.java | 11 +- .../repository/OrderItemRepository.java | 5 +- .../repository/OrderRepository.java | 7 +- .../repository/ProductCategoryRepository.java | 6 +- .../repository/ProductRepository.java | 8 +- .../repository/ReviewRepository.java | 2 +- .../repository/SettlementRepository.java | 2 +- .../repository/StoreRepository.java | 2 +- .../repository/TransactionRepository.java | 2 +- .../repository/WalletRepository.java | 4 +- .../repository/WithdrawalRepository.java | 2 +- .../security/JwtAuthenticationFilter.java | 2 +- .../security/JwtTokenService.java | 3 +- .../sms/SmsAuthenticationProvider.java | 2 +- .../service/MerchantService.java | 22 +- .../findmemerchant/service/StoreService.java | 2 +- .../findmemerchant/types/ActivityStatus.java | 13 +- .../findmemerchant/types/ActivityType.java | 9 + .../xjhs/findmemerchant/types/AuthStatus.java | 8 +- .../types/BusinessLicenseStatus.java | 9 + .../findmemerchant/types/BusinessStatus.java | 9 + .../findmemerchant/types/CommonStatus.java | 6 + .../types/CouponCodeStatus.java | 31 +-- .../findmemerchant/types/CouponStatus.java | 9 + .../xjhs/findmemerchant/types/CouponType.java | 12 + .../types/HealthCertificateStatus.java | 9 + .../findmemerchant/types/MessageType.java | 9 + .../findmemerchant/types/OrderStatus.java | 15 ++ .../findmemerchant/types/ProductStatus.java | 6 + .../findmemerchant/types/ReviewStatus.java | 6 + .../types/SettlementStatus.java | 6 + .../findmemerchant/types/SettlementType.java | 6 + .../types/StoreAuditStatus.java | 9 + .../findmemerchant/types/TransactionType.java | 15 ++ .../types/WithdrawalStatus.java | 15 ++ .../findmemerchant/vo/auth/SmsLoginVo.java | 2 +- .../findmemerchant/vo/auth/SmsSendVo.java | 2 +- .../vo/member/EmployeeCreateVo.java | 33 +++ .../vo/member/EmployeeUpdateVo.java | 18 ++ .../vo/merchant/MerchantUpdateVo.java | 2 +- .../vo/merchant/MerchantVerifyVo.java | 2 +- .../vo/store/BusinessPeriodVo.java | 26 +++ .../vo/store/StoreBusinessStatusUpdateVo.java | 20 ++ src/main/resources/application-local.yml | 14 ++ src/main/resources/application.yml | 33 +++ 107 files changed, 1370 insertions(+), 524 deletions(-) diff --git a/pom.xml b/pom.xml index 6c527b8..28f0542 100644 --- a/pom.xml +++ b/pom.xml @@ -1,102 +1,120 @@ - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 4.0.1 - - - com.xjhs.findme.merchant - findme-merchant - 0.0.1-SNAPSHOT - findme-backend-merchant-java - findme-backend-merchant-java - - - - - - - - - - - - - - - 25 - - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-webmvc - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.5.9 + + + com.xjhs.findmemerchant + findme-backend-merchant-java + 0.0.1-SNAPSHOT + findme-backend-merchant-java + findme-backend-merchant-java - - com.mysql - mysql-connector-j - runtime - - - org.projectlombok - lombok - true - - - org.springframework.boot - spring-boot-starter-actuator-test - test - - - org.springframework.boot - spring-boot-starter-data-jpa-test - test - - - org.springframework.boot - spring-boot-starter-webmvc-test - test - - + + 25 + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-test + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-data-jpa + + + com.mysql + mysql-connector-j + runtime + + + org.projectlombok + lombok + true + + + org.mapstruct + mapstruct + 1.6.3 + + + org.projectlombok + lombok-mapstruct-binding + 0.2.0 + + + org.bitbucket.b_c + jose4j + 0.9.6 + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.apache.commons + commons-lang3 + 3.18.0 + + - - - - org.apache.maven.plugins - maven-compiler-plugin - - - - org.projectlombok - lombok - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - org.projectlombok - lombok - - - - - - + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.mapstruct + mapstruct-processor + 1.6.3 + + + org.projectlombok + lombok + + + org.projectlombok + lombok-mapstruct-binding + 0.2.0 + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + diff --git a/src/main/java/com/xjhs/findmemerchant/common/ApiResult.java b/src/main/java/com/xjhs/findmemerchant/common/ApiResult.java index 40d6f72..d6a0458 100644 --- a/src/main/java/com/xjhs/findmemerchant/common/ApiResult.java +++ b/src/main/java/com/xjhs/findmemerchant/common/ApiResult.java @@ -66,18 +66,26 @@ public class ApiResult { public static ApiResult fail(){ var result = new ApiResult(); - result.code = ErrorCode.FAIL; - result.msg = ErrorCode.FAIL.getMsg(); + result.code = ErrorCode.Fail; + result.msg = ErrorCode.Fail.getMsg(); return result; } public static ApiResult fail(String msg){ var result = new ApiResult(); - result.code = ErrorCode.FAIL; + result.code = ErrorCode.Fail; result.msg = msg; return result; } + public static ApiResult fail(String msg,T data){ + var result = new ApiResult(); + result.code = ErrorCode.Fail; + result.msg = msg; + result.data = data; + return result; + } + public static ApiResult fail(ErrorCode errorCode){ var result = new ApiResult(); result.code = errorCode; diff --git a/src/main/java/com/xjhs/findmemerchant/common/ErrorCode.java b/src/main/java/com/xjhs/findmemerchant/common/ErrorCode.java index ca23ba3..9884ab1 100644 --- a/src/main/java/com/xjhs/findmemerchant/common/ErrorCode.java +++ b/src/main/java/com/xjhs/findmemerchant/common/ErrorCode.java @@ -11,10 +11,18 @@ import lombok.Getter; @AllArgsConstructor @Getter public enum ErrorCode { - - OK(200,"操作成功"), - FAIL(500,"fail"), - Unauthorized(401,"Unauthorized") + /** + * 成功 + */ + OK(200,"成功"), + /** + * 失败 + */ + Fail(500,"失败"), + /** + * 未登录 + */ + Unauthorized(401,"未登录") ; diff --git a/src/main/java/com/xjhs/findmemerchant/common/jackson/JsonLong.java b/src/main/java/com/xjhs/findmemerchant/common/jackson/JsonLong.java index 4e4acea..7083cf5 100644 --- a/src/main/java/com/xjhs/findmemerchant/common/jackson/JsonLong.java +++ b/src/main/java/com/xjhs/findmemerchant/common/jackson/JsonLong.java @@ -10,5 +10,5 @@ import java.lang.annotation.*; @Documented @JacksonAnnotationsInside @JsonDeserialize(using = SafeLongDeserializer.class) -public @interface JsonDeserializeToLong { +public @interface JsonLong { } diff --git a/src/main/java/com/xjhs/findmemerchant/common/jackson/SafeLongDeserializer.java b/src/main/java/com/xjhs/findmemerchant/common/jackson/SafeLongDeserializer.java index e051b0a..ae72dae 100644 --- a/src/main/java/com/xjhs/findmemerchant/common/jackson/SafeLongDeserializer.java +++ b/src/main/java/com/xjhs/findmemerchant/common/jackson/SafeLongDeserializer.java @@ -1,4 +1,18 @@ package com.xjhs.findmemerchant.common.jackson; -public class SafeLongDeserializer { +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; + +import java.io.IOException; + +public class SafeLongDeserializer extends JsonDeserializer { + @Override + public Long deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + String value = p.getText(); + if (value == null || value.isBlank()) { + return null; + } + return Long.valueOf(value); + } } diff --git a/src/main/java/com/xjhs/findmemerchant/common/jpa/AbstractBaseEntity.java b/src/main/java/com/xjhs/findmemerchant/common/jpa/AbstractBaseEntity.java index bf3dda8..0d16da2 100644 --- a/src/main/java/com/xjhs/findmemerchant/common/jpa/AbstractBaseEntity.java +++ b/src/main/java/com/xjhs/findmemerchant/common/jpa/AbstractBaseEntity.java @@ -1,10 +1,7 @@ package com.xjhs.findmemerchant.common.jpa; -import com.xjhs.findmemerchant.adapter.id.SnowflakeGenerated; -import jakarta.persistence.Column; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.MappedSuperclass; +import com.xjhs.findmemerchant.common.jpa.id.SnowflakeGenerated; +import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; import org.hibernate.annotations.Comment; @@ -12,12 +9,14 @@ import org.springframework.data.annotation.CreatedBy; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedBy; import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.time.LocalDateTime; @MappedSuperclass @Getter @Setter +@EntityListeners(AuditingEntityListener.class) public class AbstractBaseEntity { /** * 主键(雪花 ID) @@ -40,9 +39,9 @@ public class AbstractBaseEntity { * 创建人 */ @CreatedBy - @Column(name = "created_at", nullable = false, updatable = false) + @Column(name = "created_by", nullable = false, updatable = false) @Comment("创建人") - private String createdBy; + private Long createdBy; /** * 更新时间 @@ -55,9 +54,9 @@ public class AbstractBaseEntity { * 更新人 */ @LastModifiedBy - @Column(name = "updated_at", nullable = false) + @Column(name = "updated_by") @Comment("更新人") - private String updatedBy; + private Long updatedBy; /** * 软删除时间(null 表示未删除) */ diff --git a/src/main/java/com/xjhs/findmemerchant/common/jpa/id/SnowflakeGenerated.java b/src/main/java/com/xjhs/findmemerchant/common/jpa/id/SnowflakeGenerated.java index 273632e..64e7a3f 100644 --- a/src/main/java/com/xjhs/findmemerchant/common/jpa/id/SnowflakeGenerated.java +++ b/src/main/java/com/xjhs/findmemerchant/common/jpa/id/SnowflakeGenerated.java @@ -1,4 +1,4 @@ -package com.xjhs.findmemerchant.adapter.id; +package com.xjhs.findmemerchant.common.jpa.id; import org.hibernate.annotations.IdGeneratorType; diff --git a/src/main/java/com/xjhs/findmemerchant/common/jpa/id/SnowflakeIdGenerator.java b/src/main/java/com/xjhs/findmemerchant/common/jpa/id/SnowflakeIdGenerator.java index 6ce7186..bf9d7d4 100644 --- a/src/main/java/com/xjhs/findmemerchant/common/jpa/id/SnowflakeIdGenerator.java +++ b/src/main/java/com/xjhs/findmemerchant/common/jpa/id/SnowflakeIdGenerator.java @@ -1,4 +1,4 @@ -package com.xjhs.findmemerchant.adapter.id; +package com.xjhs.findmemerchant.common.jpa.id; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.id.IdentifierGenerator; diff --git a/src/main/java/com/xjhs/findmemerchant/common/jpa/id/SnowflakeIdWorker.java b/src/main/java/com/xjhs/findmemerchant/common/jpa/id/SnowflakeIdWorker.java index 0f660df..1548c0b 100644 --- a/src/main/java/com/xjhs/findmemerchant/common/jpa/id/SnowflakeIdWorker.java +++ b/src/main/java/com/xjhs/findmemerchant/common/jpa/id/SnowflakeIdWorker.java @@ -1,4 +1,4 @@ -package com.xjhs.findmemerchant.adapter.id; +package com.xjhs.findmemerchant.common.jpa.id; /** * 雪花Id生成器 diff --git a/src/main/java/com/xjhs/findmemerchant/common/jpa/json/HashMapJsonConverter.java b/src/main/java/com/xjhs/findmemerchant/common/jpa/json/HashMapJsonConverter.java index da3d541..473ff45 100644 --- a/src/main/java/com/xjhs/findmemerchant/common/jpa/json/HashMapJsonConverter.java +++ b/src/main/java/com/xjhs/findmemerchant/common/jpa/json/HashMapJsonConverter.java @@ -1,4 +1,4 @@ -package com.xjhs.findmemerchant.adapter.json; +package com.xjhs.findmemerchant.common.jpa.json; import com.fasterxml.jackson.core.type.TypeReference; diff --git a/src/main/java/com/xjhs/findmemerchant/common/jpa/json/StringListJsonConverter.java b/src/main/java/com/xjhs/findmemerchant/common/jpa/json/StringListJsonConverter.java index 0d3dde0..20c6cb6 100644 --- a/src/main/java/com/xjhs/findmemerchant/common/jpa/json/StringListJsonConverter.java +++ b/src/main/java/com/xjhs/findmemerchant/common/jpa/json/StringListJsonConverter.java @@ -1,4 +1,4 @@ -package com.xjhs.findmemerchant.adapter.json; +package com.xjhs.findmemerchant.common.jpa.json; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/main/java/com/xjhs/findmemerchant/common/mvc/GlobalResponseHandler.java b/src/main/java/com/xjhs/findmemerchant/common/mvc/GlobalResponseHandler.java index acac268..677cc44 100644 --- a/src/main/java/com/xjhs/findmemerchant/common/mvc/GlobalResponseHandler.java +++ b/src/main/java/com/xjhs/findmemerchant/common/mvc/GlobalResponseHandler.java @@ -1,4 +1,72 @@ package com.xjhs.findmemerchant.common.mvc; -public class GlobalResponseHandler { +import com.xjhs.findmemerchant.common.ApiResult; +import jakarta.validation.ConstraintViolationException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.MethodParameter; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.lang.Nullable; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; + +import java.util.HashMap; +import java.util.Map; + +/** + * mvc响应处理器 & 统一异常处理器 + */ +@Slf4j +@RestControllerAdvice +public class GlobalResponseHandler implements ResponseBodyAdvice { + + @Override + public boolean supports(MethodParameter returnType, Class> converterType) { + return true; + } + + @Nullable + @Override + public Object beforeBodyWrite(@Nullable Object body, MethodParameter returnType, MediaType selectedContentType, Class> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { + String url = request.getURI().toString(); // 完整请求 URL + log.info("发起请求: {} {} ", request.getMethod(), url); + return body; + } + + /** + * 捕获 @Valid 触发的字段级校验异常 + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public ApiResult handleValidException(MethodArgumentNotValidException ex) { + Map errors = new HashMap<>(); + ex.getBindingResult() + .getFieldErrors() + .forEach(err -> errors.put(err.getField(), err.getDefaultMessage())); + log.error("参数校验失败:{}", errors); + return ApiResult.fail("参数校验失败: " + errors); + } + + /** + * 捕获 @Validated 触发的单参数校验异常(形参上加了 @Validated) + */ + @ExceptionHandler(ConstraintViolationException.class) + public ApiResult handleConstraintViolation(ConstraintViolationException ex) { + Map errors = new HashMap<>(); + ex.getConstraintViolations().forEach(cv -> { + String field = cv.getPropertyPath().toString(); + errors.put(field, cv.getMessage()); + }); + log.error("参数校验失败:{}", errors); + return ApiResult.fail("参数校验失败",errors); + } + + @ExceptionHandler(Exception.class) + public ApiResult handleException(Exception ex) { + log.error("系统异常", ex); + return ApiResult.fail("系统内部错误:" + ex.getMessage()); + } } diff --git a/src/main/java/com/xjhs/findmemerchant/common/mvc/PageVo.java b/src/main/java/com/xjhs/findmemerchant/common/mvc/PageVo.java index dcd2bc4..7b54e41 100644 --- a/src/main/java/com/xjhs/findmemerchant/common/mvc/PageVo.java +++ b/src/main/java/com/xjhs/findmemerchant/common/mvc/PageVo.java @@ -1,4 +1,24 @@ package com.xjhs.findmemerchant.common.mvc; +import lombok.Data; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; + +/** + * 分页请求参数 + */ +@Data public class PageVo { + /** + * 页号(默认 1) + */ + private int pageNo = 1; + /** + * 当页数据条数(默认 20) + */ + private int pageSize = 20; + + public Pageable getPageable() { + return PageRequest.of(pageNo, pageSize); + } } diff --git a/src/main/java/com/xjhs/findmemerchant/config/JacksonConfig.java b/src/main/java/com/xjhs/findmemerchant/config/JacksonConfig.java index dfbd502..c3c32d8 100644 --- a/src/main/java/com/xjhs/findmemerchant/config/JacksonConfig.java +++ b/src/main/java/com/xjhs/findmemerchant/config/JacksonConfig.java @@ -1,5 +1,6 @@ package com.xjhs.findmemerchant.config; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; diff --git a/src/main/java/com/xjhs/findmemerchant/config/JpaConfig.java b/src/main/java/com/xjhs/findmemerchant/config/JpaConfig.java index 4635302..18bf7fa 100644 --- a/src/main/java/com/xjhs/findmemerchant/config/JpaConfig.java +++ b/src/main/java/com/xjhs/findmemerchant/config/JpaConfig.java @@ -1,4 +1,30 @@ package com.xjhs.findmemerchant.config; +import com.xjhs.findmemerchant.entity.Merchant; +import com.xjhs.findmemerchant.security.sms.SmsAuthenticationToken; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.domain.AuditorAware; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +import org.springframework.security.core.context.SecurityContextHolder; + +import java.util.Optional; + +@Configuration +@EnableJpaAuditing(auditorAwareRef = "auditorAwareImpl") public class JpaConfig { + + @Bean(name = "auditorAwareImpl") + public AuditorAware auditorAwareImpl(){ + return ()->{ + var auth = SecurityContextHolder.getContext().getAuthentication(); + if (auth instanceof SmsAuthenticationToken){ + var principal = auth.getPrincipal(); + if (principal instanceof Merchant merchant){ + return Optional.of(merchant.getId()); + } + } + return Optional.of(0L); + }; + } } diff --git a/src/main/java/com/xjhs/findmemerchant/controller/AuthController.java b/src/main/java/com/xjhs/findmemerchant/controller/AuthController.java index b592703..745053d 100644 --- a/src/main/java/com/xjhs/findmemerchant/controller/AuthController.java +++ b/src/main/java/com/xjhs/findmemerchant/controller/AuthController.java @@ -4,32 +4,32 @@ import com.xjhs.findmemerchant.common.ApiResult; import com.xjhs.findmemerchant.dto.MerchantDto; import com.xjhs.findmemerchant.dto.auth.RegisterDto; import com.xjhs.findmemerchant.entity.Merchant; -import com.xjhs.findmemerchant.mapper.MerchantMapper; import com.xjhs.findmemerchant.redis.TokenBlacklistRedisService; import com.xjhs.findmemerchant.repository.MerchantRepository; import com.xjhs.findmemerchant.security.JwtTokenService; import com.xjhs.findmemerchant.security.RefreshTokenService; import com.xjhs.findmemerchant.security.sms.SmsAuthenticationToken; import com.xjhs.findmemerchant.security.sms.SmsCodeService; -import com.xjhs.findmemerchant.security.sms.SmsLoginVo; -import com.xjhs.findmemerchant.security.sms.SmsSendVo; +import com.xjhs.findmemerchant.vo.auth.SmsLoginVo; +import com.xjhs.findmemerchant.vo.auth.SmsSendVo; import com.xjhs.findmemerchant.service.MerchantService; import com.xjhs.findmemerchant.vo.merchant.MerchantUpdateVo; import com.xjhs.findmemerchant.vo.auth.RegisterVo; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.http.HttpHeaders; import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; -import java.security.Principal; import java.util.Map; /** * 登录授权管理接口 */ +@Slf4j @RestController @RequiredArgsConstructor @RequestMapping("/auth") @@ -39,13 +39,14 @@ public class AuthController { private final AuthenticationManager authenticationManager; private final RefreshTokenService refreshTokenService; private final MerchantRepository merchantRepository; - private final MerchantMapper merchantMapper; - private final StringRedisTemplate stringRedisTemplate; private final TokenBlacklistRedisService tokenBlacklistRedisService; private final MerchantService merchantService; /** * 发送短信验证码 + * + * @param sendVo 请求参数 + * @return 发送结果 */ @PostMapping("/sms/send") public ApiResult sendCode(@Valid @RequestBody SmsSendVo sendVo) { @@ -55,6 +56,7 @@ public class AuthController { /** * 短信验证码登录 + * * @param vo 登录信息 * @return 令牌信息 */ @@ -67,6 +69,7 @@ public class AuthController { var refreshToken = refreshTokenService.create(vo.getPhone()); return ApiResult.returnToken(accessToken, refreshToken); } catch (Exception e) { + log.error("登录失败", e); return ApiResult.fail("登录失败:" + e.getMessage()); } } @@ -93,12 +96,13 @@ public class AuthController { /** * 注销登录 + * * @param authHeader @ignore 认证头信息 * @return 注销结果 */ @PostMapping("/logout") - public ApiResult logout(@RequestHeader(HttpHeaders.AUTHORIZATION) String authHeader){ - if (StringUtils.isEmpty(authHeader) || !authHeader.startsWith("Bearer ")) { + public ApiResult logout(@RequestHeader(HttpHeaders.AUTHORIZATION) String authHeader) { + if (StringUtils.isEmpty(authHeader) || !authHeader.startsWith("Bearer ")) { return ApiResult.fail("访问令牌错误"); } try { @@ -136,42 +140,43 @@ public class AuthController { ) ); } catch (Exception e) { + log.error("注册失败", e); return ApiResult.fail("注册失败:" + e.getMessage()); } } /** - * 获取当前登录的商户基本信息 - * @param principal @ignore 登录信息对象 - * @return 商户信息 + * 获取当前登录的商家基本信息 + * + * @param merchant @ignore 当前商家 + * @return 商家信息 */ @GetMapping("/profile") - public ApiResult getProfile(Principal principal) { - if (principal instanceof Merchant merchant) { - return this.merchantService.getById(merchant.getId()) - .map(ApiResult::data) - .orElse(ApiResult.fail("商户信息不存在")); + public ApiResult getProfile(@AuthenticationPrincipal Merchant merchant) { + if (merchant == null) { + return ApiResult.fail("商家信息不存在"); } - return ApiResult.fail("商户信息不存在"); + return this.merchantService.getById(merchant.getId()) + .map(ApiResult::data) + .orElse(ApiResult.fail("商家信息不存在")); } /** - * 更新当前登录的商户基本信息 - * @param principal @ignore 登录信息对象 + * 更新当前登录的商家基本信息 + * + * @param merchant @ignore 当前商家 * @param merchantUpdateVo 更新信息对象 - * @return 商户信息 + * @return 商家信息 */ @PutMapping("/profile") - public ApiResult updateProfile(Principal principal,@Valid @RequestBody MerchantUpdateVo merchantUpdateVo) { - if (principal instanceof Merchant merchant) { - try { - var result = this.merchantService.updateMerchant(merchant.getId(),merchantUpdateVo); - return ApiResult.data(result); - } catch (Exception e) { - return ApiResult.fail(e.getMessage()); - } + public ApiResult updateProfile(@AuthenticationPrincipal Merchant merchant, + @Valid @RequestBody MerchantUpdateVo merchantUpdateVo) { + try { + var result = this.merchantService.updateMerchant(merchant.getId(), merchantUpdateVo); + return ApiResult.data(result); + } catch (Exception e) { + return ApiResult.fail(e.getMessage()); } - return ApiResult.fail("商户信息不存在"); } } diff --git a/src/main/java/com/xjhs/findmemerchant/controller/MerchantController.java b/src/main/java/com/xjhs/findmemerchant/controller/MerchantController.java index 47d22a2..332bc93 100644 --- a/src/main/java/com/xjhs/findmemerchant/controller/MerchantController.java +++ b/src/main/java/com/xjhs/findmemerchant/controller/MerchantController.java @@ -9,10 +9,14 @@ import com.xjhs.findmemerchant.vo.merchant.MerchantVerifyVo; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import java.security.Principal; +/** + * 商家管理接口 + */ @Slf4j @RestController @RequestMapping("/merchant") @@ -20,39 +24,52 @@ import java.security.Principal; public class MerchantController { private final MerchantService merchantService; + /** + * 查询当前登录商家详情 + * + * @param merchant @ignore 当前商家 + * @return 商家详情信息 + */ @GetMapping - public ApiResult getMerchant(Principal principal) { - if (principal instanceof Merchant merchant) { - return this.merchantService.getById(merchant.getId()) - .map(ApiResult::data) - .orElse(ApiResult.fail("商户信息不存在")); - } - return ApiResult.fail("商户信息不存在"); + public ApiResult getMerchant(@AuthenticationPrincipal Merchant merchant) { + return this.merchantService.getById(merchant.getId()) + .map(ApiResult::data) + .orElse(ApiResult.fail("商家信息不存在")); } + /** + * 更新当前登录商家信息 + * + * @param merchant @ignore 当前商家 + * @param merchantUpdateVo 更新参数 + * @return 商家信息 + */ @PutMapping - public ApiResult updateMerchant(Principal principal,@Valid @RequestBody MerchantUpdateVo merchantUpdateVo) { - if (principal instanceof Merchant merchant) { - try { - var dto = this.merchantService.updateMerchant(merchant.getId(),merchantUpdateVo); - return ApiResult.data(dto); - } catch (Exception e) { - return ApiResult.fail(e.getMessage()); - } + public ApiResult updateMerchant(@AuthenticationPrincipal Merchant merchant, + @Valid @RequestBody MerchantUpdateVo merchantUpdateVo) { + try { + var dto = this.merchantService.updateMerchant(merchant.getId(), merchantUpdateVo); + return ApiResult.data(dto); + } catch (Exception e) { + return ApiResult.fail(e.getMessage()); } - return ApiResult.fail("商户信息不存在"); } + /** + * 当前商家验证 + * + * @param merchant @ignore 当前商家 + * @param merchantVerifyVo 验证参数 + * @return 商家信息 + */ @PostMapping("/verify") - public ApiResult verifyMerchant(Principal principal,@Valid @RequestBody MerchantVerifyVo merchantVerifyVo) { - if (principal instanceof Merchant merchant) { - try { - var dto = this.merchantService.verifyMerchant(merchant.getId(),merchantVerifyVo.getIdCardNo(),merchantVerifyVo.getRealName()); - return ApiResult.data(dto); - } catch (Exception e) { - return ApiResult.fail(e.getMessage()); - } + public ApiResult verifyMerchant(@AuthenticationPrincipal Merchant merchant, + @Valid @RequestBody MerchantVerifyVo merchantVerifyVo) { + try { + var dto = this.merchantService.verifyMerchant(merchant.getId(), merchantVerifyVo.getIdCardNo(), merchantVerifyVo.getRealName()); + return ApiResult.data(dto); + } catch (Exception e) { + return ApiResult.fail(e.getMessage()); } - return ApiResult.fail("商户信息不存在"); } } diff --git a/src/main/java/com/xjhs/findmemerchant/controller/StoreController.java b/src/main/java/com/xjhs/findmemerchant/controller/StoreController.java index 3dc32cd..e2bbe03 100644 --- a/src/main/java/com/xjhs/findmemerchant/controller/StoreController.java +++ b/src/main/java/com/xjhs/findmemerchant/controller/StoreController.java @@ -3,25 +3,37 @@ package com.xjhs.findmemerchant.controller; import com.xjhs.findmemerchant.common.ApiResult; import com.xjhs.findmemerchant.common.PageData; import com.xjhs.findmemerchant.common.jpa.query.JpaSpecs; +import com.xjhs.findmemerchant.common.mvc.PageVo; +import com.xjhs.findmemerchant.dto.store.BusinessPeriodDto; +import com.xjhs.findmemerchant.dto.store.StoreBusinessStatusDto; import com.xjhs.findmemerchant.dto.store.StoreDto; +import com.xjhs.findmemerchant.entity.BusinessPeriod; import com.xjhs.findmemerchant.entity.Merchant; import com.xjhs.findmemerchant.entity.Store; import com.xjhs.findmemerchant.mapper.StoreMapper; +import com.xjhs.findmemerchant.repository.BusinessPeriodRepository; import com.xjhs.findmemerchant.repository.MerchantRepository; import com.xjhs.findmemerchant.repository.StoreRepository; +import com.xjhs.findmemerchant.vo.store.BusinessPeriodVo; +import com.xjhs.findmemerchant.vo.store.StoreBusinessStatusUpdateVo; import com.xjhs.findmemerchant.vo.store.StoreCreateVo; import com.xjhs.findmemerchant.vo.store.StoreUpdateVo; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.security.Principal; +import java.util.List; import java.util.Objects; +/** + * 门店管理接口 + */ @Slf4j @RestController @RequestMapping("/stores") @@ -30,38 +42,36 @@ public class StoreController { private final MerchantRepository merchantRepository; private final StoreRepository storeRepository; private final StoreMapper storeMapper; + private final BusinessPeriodRepository businessPeriodRepository; + /** * 门店信息(分页查询) * - * @param pageable 分页参数 - * @param principal @ignore 当前登录门店 + * @param pageVo 分页参数 + * @param merchant @ignore 当前登录商家 * @return 分页数据信息 */ @GetMapping @Transactional(readOnly = true) - public ApiResult> findPage(Pageable pageable, Principal principal) { - var merchant = (Merchant) principal; + public ApiResult> findPage(@AuthenticationPrincipal Merchant merchant, PageVo pageVo) { var pageData = this.storeRepository.findAll(Specification.allOf( JpaSpecs.eq("merchant.id", merchant.getId()) - ), pageable).map(this.storeMapper::toDto); + ), pageVo.getPageable()).map(this.storeMapper::toDto); return ApiResult.page(pageData.getTotalElements(), pageData.getContent()); } /** - * 创建商户的门店 + * 创建商家的门店 * * @param vo 门店信息 - * @param principal @ignore 当前登录的商户 + * @param merchant @ignore 当前登录的商家 * @return 门店信息 */ @PostMapping @Transactional(rollbackFor = Exception.class) - public ApiResult create(@Valid @RequestBody StoreCreateVo vo, Principal principal) { - var merchant = (Merchant) principal; - if (Objects.isNull(merchant)) { - return ApiResult.fail("商家信息错误"); - } + public ApiResult create(@AuthenticationPrincipal Merchant merchant, + @Valid @RequestBody StoreCreateVo vo) { var store = this.storeMapper.toEntity(vo); merchant.addStore(store); this.storeRepository.save(store); @@ -73,16 +83,13 @@ public class StoreController { * 查询门店详情 * * @param storeId 门店id - * @param principal @ignore 当前登录的商户 + * @param merchant @ignore 当前登录的商家 * @return 门店详情 */ @GetMapping("/{storeId}") @Transactional(readOnly = true) - public ApiResult findById(@PathVariable("storeId") String storeId, Principal principal) { - var merchant = (Merchant) principal; - if (Objects.isNull(merchant)) { - return ApiResult.fail("商家信息错误"); - } + public ApiResult findById(@AuthenticationPrincipal Merchant merchant, + @PathVariable("storeId") String storeId) { var storeIdLong = Long.parseLong(storeId); return merchant.getStores().stream() .filter(x -> Objects.equals(x.getId(), storeIdLong)) @@ -96,17 +103,15 @@ public class StoreController { * 更新门店信息 * * @param storeId 门店id - * @param principal @ignore 当前登录的商户 + * @param merchant @ignore 当前登录的商家 * @param vo 更新对象 * @return 门店信息 */ @PutMapping("/{storeId}") @Transactional(rollbackFor = Exception.class) - public ApiResult updateById(@PathVariable("storeId") String storeId, Principal principal, @Valid @RequestBody StoreUpdateVo vo) { - var merchant = (Merchant) principal; - if (Objects.isNull(merchant)) { - return ApiResult.fail("商家信息错误"); - } + public ApiResult updateById(@AuthenticationPrincipal Merchant merchant, + @PathVariable("storeId") String storeId, + @Valid @RequestBody StoreUpdateVo vo) { var storeIdLong = Long.parseLong(storeId); for (Store store : merchant.getStores()) { if (Objects.equals(storeIdLong, store.getId())) { @@ -121,19 +126,112 @@ public class StoreController { /** * 删除门店 * - * @param storeId 门店id - * @param principal @ignore 当前登录的商户 + * @param storeId 门店id + * @param merchant @ignore 当前登录的商家 */ @DeleteMapping("/{storeId}") @Transactional(rollbackFor = Exception.class) - public ApiResult delteById(@PathVariable("storeId") String storeId, Principal principal) { - var merchant = (Merchant) principal; - if (Objects.isNull(merchant)) { - return ApiResult.fail("商家信息错误"); - } + public ApiResult delteById(@AuthenticationPrincipal Merchant merchant, + @PathVariable("storeId") String storeId) { var storeIdLong = Long.parseLong(storeId); merchant.getStores().removeIf(x -> Objects.equals(storeIdLong, x.getId())); this.merchantRepository.save(merchant); return ApiResult.success("删除成功"); } + + /** + * 获取门店营业状态 + * + * @param storeId 门店id + * @param merchant @ignore 当前商户 + * @return 门店营业状态信息 + */ + @GetMapping("/{storeId}/business-status") + @Transactional(readOnly = true) + public ApiResult getStoreBusinessStatus(@AuthenticationPrincipal Merchant merchant, + @PathVariable("storeId") String storeId) { + var storeIdLong = Long.parseLong(storeId); + return merchant.getStores().stream() + .filter(x -> Objects.equals(x.getId(), storeIdLong)) + .map(this.storeMapper::toBusinessStatusDto) + .map(ApiResult::data) + .findFirst() + .orElse(ApiResult.fail("门店信息不存在")); + } + + /** + * 设置门店营业状态 + * + * @param storeId 门店id + * @param merchant @ignore 当前商家 + * @param updateVo 更新参数 + * @return 门店营业状态信息 + */ + @PutMapping("/{storeId}/business-status") + @Transactional(rollbackFor = Exception.class) + public ApiResult putStoreBusinessStatus(@PathVariable("storeId") String storeId, + @AuthenticationPrincipal Merchant merchant, + @Validated @RequestBody StoreBusinessStatusUpdateVo updateVo) { + var storeIdLong = Long.parseLong(storeId); + return merchant.getStores().stream() + .filter(x -> Objects.equals(x.getId(), storeIdLong)) + .findFirst() + .map(x -> { + this.storeMapper.updateFromBusinessUpdateVo(updateVo, x); + this.storeRepository.save(x); + return this.storeMapper.toBusinessStatusDto(x); + }) + .map(ApiResult::data) + .orElse(ApiResult.fail("门店信息不存在")); + + } + + /** + * 获取门店营业时间段 + * + * @param storeId 门店id + * @param merchant @ignore 当前商家 + * @return 门店营业时间段 列表 + */ + @GetMapping("/{storeId}/business-periods") + public ApiResult> getStoreBusinessPeriodList(@AuthenticationPrincipal Merchant merchant, + @PathVariable("storeId") String storeId) { + var storeIdLong = Long.parseLong(storeId); + return merchant.getStores().stream() + .filter(x -> Objects.equals(x.getId(), storeIdLong)) + .findFirst() + .map(x -> this.storeMapper.toDtoList(x.getBusinessPeriods())) + .map(ApiResult::data) + .orElse(ApiResult.fail("门店信息不存在")); + } + + /** + * 设置门店营业时间段 + * + * @param storeId 门店id + * @param merchant @ignore 当前商家 + * @param updateVoList 门店营业时间段更新参数列表 + * @return 门店营业时间段 列表 + */ + @PutMapping("/{storeId}/business-periods") + public ApiResult> putStoreBusinessPeriodList(@PathVariable("storeId") String storeId, + @AuthenticationPrincipal Merchant merchant, + @Validated @RequestBody List updateVoList) { + var storeIdLong = Long.parseLong(storeId); + return merchant.getStores().stream() + .filter(x -> Objects.equals(x.getId(), storeIdLong)) + .findFirst() + .map(store -> { + store.getBusinessPeriods().clear(); + for (BusinessPeriodVo businessPeriodVo : updateVoList) { + var entity = this.storeMapper.toEntity(businessPeriodVo); + store.addBusinessPeriods(entity); + this.businessPeriodRepository.save(entity); + } + return this.storeMapper.toDtoList(store.getBusinessPeriods()); + }) + .map(ApiResult::data) + .orElse(ApiResult.fail("门店信息不存在")); + + } } diff --git a/src/main/java/com/xjhs/findmemerchant/controller/StoreEmployeeController.java b/src/main/java/com/xjhs/findmemerchant/controller/StoreEmployeeController.java index 751b2dd..00d452e 100644 --- a/src/main/java/com/xjhs/findmemerchant/controller/StoreEmployeeController.java +++ b/src/main/java/com/xjhs/findmemerchant/controller/StoreEmployeeController.java @@ -1,4 +1,157 @@ package com.xjhs.findmemerchant.controller; +import com.xjhs.findmemerchant.common.ApiResult; +import com.xjhs.findmemerchant.dto.member.EmployeeDto; +import com.xjhs.findmemerchant.entity.Merchant; +import com.xjhs.findmemerchant.mapper.EmployeeMapper; +import com.xjhs.findmemerchant.repository.EmployeeRepository; +import com.xjhs.findmemerchant.vo.member.EmployeeCreateVo; +import com.xjhs.findmemerchant.vo.member.EmployeeUpdateVo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + * 门店员工管理接口 + */ +@Slf4j +@RestController +@RequestMapping("/stores/{storeId}/employees") +@RequiredArgsConstructor public class StoreEmployeeController { + private final EmployeeRepository employeeRepository; + private final EmployeeMapper employeeMapper; + + /** + * 查询门店员工列表 + * @param merchant @ignore 当前商户 + * @param storeId 门店id + * @return 员工列表信息 + */ + @GetMapping + @Transactional(readOnly = true) + public ApiResult> getList(@AuthenticationPrincipal Merchant merchant, + @PathVariable("storeId") Long storeId) { + var list = this.employeeRepository.findByStoreId(storeId) + .stream().map(this.employeeMapper::toDto) + .toList(); + return ApiResult.data(list); + } + + /** + * 新建门店员工 + * @param merchant @ignore 当前商户 + * @param storeId 门店id + * @param createVo 员工信息参数 + * @return 门店员工信息 + */ + @PostMapping + @Transactional + public ApiResult create(@AuthenticationPrincipal Merchant merchant, + @PathVariable("storeId") Long storeId, + @Validated @RequestBody EmployeeCreateVo createVo) throws Exception { + try { + var store = merchant.getStores().stream() + .filter(x -> Objects.equals(storeId, x.getId())) + .findFirst() + .orElseThrow(() -> new Exception("门店信息不存在")); + var phoneExists = store.getEmployees().stream() + .anyMatch(x -> Objects.equals(x.getPhone(), createVo.getPhone())); + if (phoneExists) { + throw new Exception("手机号码已被使用"); + } + var employee = this.employeeMapper.toEntity(createVo); + store.addEmployee(employee); + this.employeeRepository.save(employee); + var dto = this.employeeMapper.toDto(employee); + return ApiResult.data(dto); + } catch (Exception e) { + log.error("员工信息注册失败", e); + throw e; + } + } + + /** + * 查询门店员工详情 + * @param merchant @ignore 当前商户 + * @param storeId 门店id + * @param employeeId 门店员工id + * @return 员工详情 + */ + @GetMapping("/{employeeId}") + @Transactional(readOnly = true) + public ApiResult findById(@AuthenticationPrincipal Merchant merchant, + @PathVariable("storeId") Long storeId, + @PathVariable("employeeId") Long employeeId) { + return merchant.getStores().stream() + .filter(x -> Objects.equals(storeId, x.getId())) + .flatMap(x -> x.getEmployees().stream()) + .filter(x -> Objects.equals(employeeId, x.getId())) + .findFirst() + .map(this.employeeMapper::toDto) + .map(ApiResult::data) + .orElse(ApiResult.fail("员工信息不存在")); + + } + + /** + * 根据员工id更新员工信息 + * @param merchant @ignore 当前商户 + * @param storeId 门店id + * @param employeeId 员工id + * @param updateVo 更新参数 + * @return 员工详情 + */ + @PutMapping("/{employeeId}") + @Transactional + public ApiResult updateById(@AuthenticationPrincipal Merchant merchant, + @PathVariable("storeId") Long storeId, + @PathVariable("employeeId") Long employeeId, + @Validated @RequestBody EmployeeUpdateVo updateVo) { + return merchant.getStores().stream() + .filter(x -> Objects.equals(storeId, x.getId())) + .flatMap(x -> x.getEmployees().stream()) + .filter(x -> Objects.equals(employeeId, x.getId())) + .findFirst() + .map(employee -> { + this.employeeMapper.updateEntityFormUpdateVo(updateVo, employee); + this.employeeRepository.save(employee); + return ApiResult.data( + this.employeeMapper.toDto(employee) + ); + }) + .orElse(ApiResult.fail("员工信息不存在")); + } + + /** + * 根据id删除员工信息 + * @param merchant @ignore 当前商户 + * @param storeId 门店id + * @param employeeId 员工id + * @return 删除结果 + */ + @DeleteMapping("/{employeeId}") + @Transactional + public ApiResult deleteById(@AuthenticationPrincipal Merchant merchant, + @PathVariable("storeId") Long storeId, + @PathVariable("employeeId") Long employeeId) throws Exception { + try { + var store = merchant.getStores().stream() + .filter(x -> Objects.equals(storeId, x.getId())) + .findFirst() + .orElseThrow(()->new Exception("门店信息不存在")); + store.getEmployees().removeIf(x->Objects.equals(employeeId,x.getId())); + return ApiResult.success(); + } catch (Exception e) { + log.error("删除员工失败",e); + throw e; + } + } + } diff --git a/src/main/java/com/xjhs/findmemerchant/dto/MerchantDto.java b/src/main/java/com/xjhs/findmemerchant/dto/MerchantDto.java index 4bd8f0b..1c235c3 100644 --- a/src/main/java/com/xjhs/findmemerchant/dto/MerchantDto.java +++ b/src/main/java/com/xjhs/findmemerchant/dto/MerchantDto.java @@ -1,17 +1,22 @@ package com.xjhs.findmemerchant.dto; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.xjhs.findmemerchant.types.AuthStatus; import lombok.Data; +import java.time.LocalDateTime; + /** - * 商户信息 + * 商家信息 */ @Data public class MerchantDto { /** - * 商户id + * 商家id */ - private String id; + @JsonSerialize(using = ToStringSerializer.class) + private Long id; /** * 手机号码 * TODO: 手机号码需要脱敏 @@ -36,5 +41,5 @@ public class MerchantDto { /** * 创建时间 */ - private String createAt; + private LocalDateTime createdAt; } diff --git a/src/main/java/com/xjhs/findmemerchant/dto/auth/RegisterDto.java b/src/main/java/com/xjhs/findmemerchant/dto/auth/RegisterDto.java index c3f8dbd..6a415d8 100644 --- a/src/main/java/com/xjhs/findmemerchant/dto/auth/RegisterDto.java +++ b/src/main/java/com/xjhs/findmemerchant/dto/auth/RegisterDto.java @@ -1,15 +1,30 @@ package com.xjhs.findmemerchant.dto.auth; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + /** * 商家注册响应内容 - * - * @param merchantId 商户id - * @param accessToken 访问令牌 - * @param refreshToken 刷新令牌 */ -public record RegisterDto( - Long merchantId, - String accessToken, - String refreshToken -) { +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RegisterDto { + /** + * 商家id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long merchantId; + /** + * 访问令牌 + */ + private String accessToken; + /** + * 刷新令牌 + */ + private String refreshToken; + } diff --git a/src/main/java/com/xjhs/findmemerchant/dto/member/EmployeeDto.java b/src/main/java/com/xjhs/findmemerchant/dto/member/EmployeeDto.java index f43a24f..d592180 100644 --- a/src/main/java/com/xjhs/findmemerchant/dto/member/EmployeeDto.java +++ b/src/main/java/com/xjhs/findmemerchant/dto/member/EmployeeDto.java @@ -1,4 +1,40 @@ package com.xjhs.findmemerchant.dto.member; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data public class EmployeeDto { + + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + /** + * 员工姓名 + */ + private String name; + /** + * 手机号码 + */ + private String phone; + /** + * 关联角色id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long roleId; + /** + * 关联门店id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long storeId; + /** + * 员工状态 + */ + private Integer status; + /** + * 创建时间 + */ + private LocalDateTime createdAt; } diff --git a/src/main/java/com/xjhs/findmemerchant/dto/store/BusinessPeriodDto.java b/src/main/java/com/xjhs/findmemerchant/dto/store/BusinessPeriodDto.java index e6fc08b..c7201d8 100644 --- a/src/main/java/com/xjhs/findmemerchant/dto/store/BusinessPeriodDto.java +++ b/src/main/java/com/xjhs/findmemerchant/dto/store/BusinessPeriodDto.java @@ -1,27 +1,27 @@ -package com.xjhs.findmemerchant.vo.store; +package com.xjhs.findmemerchant.dto.store; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Size; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; @Data -public class BusinessPeriodVo { +public class BusinessPeriodDto { + /** + * 门店id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long storeId; /** * 周几,周天0,... */ - @Size(max = 6) - @NotNull private Integer dayOfWeek; /** * 开始营业时间 HH:mm 格式 */ - @NotBlank private String startTime; /** * 结束营业时间 HH:mm 格式 */ - @NotBlank private String endTime; /** * 是否启用 diff --git a/src/main/java/com/xjhs/findmemerchant/dto/store/StoreBusinessStatusDto.java b/src/main/java/com/xjhs/findmemerchant/dto/store/StoreBusinessStatusDto.java index d6875e1..67c1533 100644 --- a/src/main/java/com/xjhs/findmemerchant/dto/store/StoreBusinessStatusDto.java +++ b/src/main/java/com/xjhs/findmemerchant/dto/store/StoreBusinessStatusDto.java @@ -1,4 +1,36 @@ package com.xjhs.findmemerchant.dto.store; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 门店营业状态 + */ +@Data public class StoreBusinessStatusDto { + /** + * 业务状态值 + */ + private Integer status; + + /** + * 业务状态文案 + */ + private String statusText; + + /** + * 临时关闭原因(可为空) + */ + private String tempCloseReason; + + /** + * 临时关闭截止时间(可为空) + */ + private LocalDateTime tempCloseUntil; + + /** + * 是否营业 + */ + private Boolean isOpen; } diff --git a/src/main/java/com/xjhs/findmemerchant/dto/store/StoreDto.java b/src/main/java/com/xjhs/findmemerchant/dto/store/StoreDto.java index b6cd736..563a993 100644 --- a/src/main/java/com/xjhs/findmemerchant/dto/store/StoreDto.java +++ b/src/main/java/com/xjhs/findmemerchant/dto/store/StoreDto.java @@ -1,5 +1,7 @@ package com.xjhs.findmemerchant.dto.store; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.xjhs.findmemerchant.types.BusinessStatus; import com.xjhs.findmemerchant.types.CommonStatus; import com.xjhs.findmemerchant.types.StoreAuditStatus; @@ -12,11 +14,13 @@ public class StoreDto { /** * 门店id */ - private String id; + @JsonSerialize(using = ToStringSerializer.class) + private Long id; /** - * 商户id + * 商家id */ - private String merchantId; + @JsonSerialize(using = ToStringSerializer.class) + private Long merchantId; /** * 门店名称 */ diff --git a/src/main/java/com/xjhs/findmemerchant/entity/BankCard.java b/src/main/java/com/xjhs/findmemerchant/entity/BankCard.java index 1726b53..1f26233 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/BankCard.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/BankCard.java @@ -8,7 +8,7 @@ import lombok.Setter; import org.hibernate.annotations.Comment; /** - * 商户提现银行卡 + * 商家提现银行卡 * 对应表:bank_cards */ @Getter @@ -23,7 +23,7 @@ import org.hibernate.annotations.Comment; public class BankCard extends AbstractBaseEntity { /** - * 商户 + * 商家 */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "merchant_id", insertable = false, updatable = false) @@ -67,14 +67,14 @@ public class BankCard extends AbstractBaseEntity { /** * 是否默认卡 */ - @Column(name = "is_default", nullable = false) + @Column(name = "is_default") @Comment("是否默认卡") private Boolean isDefault = false; /** * 状态:0-禁用 1-启用 */ - @Column(name = "status",columnDefinition = "VARCHAR(15)",length = 15, nullable = false) + @Column(name = "status",columnDefinition = "VARCHAR(15)",length = 15) @Enumerated(EnumType.STRING) @Comment("状态:0禁用 1启用") private CommonStatus status = CommonStatus.ENABLED; diff --git a/src/main/java/com/xjhs/findmemerchant/entity/BusinessLicense.java b/src/main/java/com/xjhs/findmemerchant/entity/BusinessLicense.java index fffa4cb..03b579e 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/BusinessLicense.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/BusinessLicense.java @@ -1,7 +1,7 @@ package com.xjhs.findmemerchant.entity; -import com.xjhs.findmemerchant.adapter.json.HashMapJsonConverter; +import com.xjhs.findmemerchant.common.jpa.json.HashMapJsonConverter; import com.xjhs.findmemerchant.common.jpa.AbstractBaseEntity; import com.xjhs.findmemerchant.types.BusinessLicenseStatus; import jakarta.persistence.*; @@ -30,7 +30,7 @@ public class BusinessLicense extends AbstractBaseEntity { @JoinColumn(name = "merchant_id", insertable = false, updatable = false) private Merchant merchant; - @Column(name = "image_url", nullable = false, length = 500) + @Column(name = "image_url", length = 500) @Comment("营业执照图片URL") private String imageUrl; @@ -47,7 +47,7 @@ public class BusinessLicense extends AbstractBaseEntity { @Comment("OCR原始结果") private HashMap ocrRaw; - @Column(name = "status",length = 15,columnDefinition = "VARCHAR(15)", nullable = false) + @Column(name = "status",length = 15,columnDefinition = "VARCHAR(15)") @Enumerated(EnumType.STRING) @Comment("状态:0待审核 1已通过 2已拒绝") private BusinessLicenseStatus status = BusinessLicenseStatus.PENDING; diff --git a/src/main/java/com/xjhs/findmemerchant/entity/BusinessPeriod.java b/src/main/java/com/xjhs/findmemerchant/entity/BusinessPeriod.java index 1aa022a..489b74f 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/BusinessPeriod.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/BusinessPeriod.java @@ -32,28 +32,28 @@ public class BusinessPeriod extends AbstractBaseEntity { /** * 周几:0=周日 ... 6=周六 */ - @Column(name = "day_of_week", nullable = false) + @Column(name = "day_of_week") @Comment("周几:0周日 1周一 ... 6周六") - private Byte dayOfWeek; + private Integer dayOfWeek; /** * 开始时间,HH:MM */ - @Column(name = "start_time", nullable = false, length = 5) + @Column(name = "start_time", length = 5) @Comment("开始时间,HH:MM") private String startTime; /** * 结束时间,HH:MM */ - @Column(name = "end_time", nullable = false, length = 5) + @Column(name = "end_time", length = 5) @Comment("结束时间,HH:MM") private String endTime; /** * 是否启用 */ - @Column(name = "is_enabled", nullable = false) + @Column(name = "is_enabled") @Comment("是否启用") private Boolean isEnabled = Boolean.TRUE; diff --git a/src/main/java/com/xjhs/findmemerchant/entity/Coupon.java b/src/main/java/com/xjhs/findmemerchant/entity/Coupon.java index e0d84a9..5f8b1d7 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/Coupon.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/Coupon.java @@ -32,14 +32,14 @@ public class Coupon extends AbstractBaseEntity { /** * 优惠券名称 */ - @Column(name = "name", nullable = false, length = 100) + @Column(name = "name", length = 100) @Comment("优惠券名称") private String name; /** * 优惠券类型:1-折扣券 2-满减券 3-现金券 4-赠品券 */ - @Column(name = "type",length = 15,columnDefinition = "VARCHAR(15)", nullable = false) + @Column(name = "type",length = 15,columnDefinition = "VARCHAR(15)") @Comment("优惠券类型:1折扣券 2满减券 3现金券 4赠品券") private CouponType type; @@ -74,49 +74,49 @@ public class Coupon extends AbstractBaseEntity { /** * 赠品数量,默认 1 */ - @Column(name = "gift_quantity", nullable = false) + @Column(name = "gift_quantity") @Comment("赠品数量") private Integer giftQuantity = 1; /** * 发放总量 */ - @Column(name = "total_count", nullable = false) + @Column(name = "total_count") @Comment("发放总量") private Integer totalCount; /** * 已领取数量 */ - @Column(name = "claimed_count", nullable = false) + @Column(name = "claimed_count") @Comment("已领取数量") private Integer claimedCount = 0; /** * 每人限领数量,0 表示不限 */ - @Column(name = "per_user_limit", nullable = false) + @Column(name = "per_user_limit") @Comment("每人限领数量,0表示不限") private Integer perUserLimit = 1; /** * 领取后有效天数 */ - @Column(name = "valid_days", nullable = false) + @Column(name = "valid_days") @Comment("领取后有效天数") private Integer validDays; /** * 活动开始时间 */ - @Column(name = "start_time", nullable = false) + @Column(name = "start_time") @Comment("活动开始时间") private LocalDateTime startTime; /** * 活动结束时间 */ - @Column(name = "end_time", nullable = false) + @Column(name = "end_time") @Comment("活动结束时间") private LocalDateTime endTime; @@ -130,7 +130,7 @@ public class Coupon extends AbstractBaseEntity { /** * 状态:0-下架 1-进行中 2-已结束 */ - @Column(name = "status",columnDefinition = "VARCHAR(15)",length = 15, nullable = false) + @Column(name = "status",columnDefinition = "VARCHAR(15)",length = 15) @Comment("状态:0下架 1进行中 2已结束") private CouponStatus status = CouponStatus.ONLINE; @@ -138,7 +138,7 @@ public class Coupon extends AbstractBaseEntity { // ================= 关联关系 ================= /** - * 所属商户 + * 所属商家 */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "merchant_id", insertable = false, updatable = false) diff --git a/src/main/java/com/xjhs/findmemerchant/entity/CouponCode.java b/src/main/java/com/xjhs/findmemerchant/entity/CouponCode.java index 6f0b73a..fe78cc2 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/CouponCode.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/CouponCode.java @@ -33,14 +33,14 @@ public class CouponCode extends AbstractBaseEntity { /** * 券码 */ - @Column(name = "code", nullable = false, length = 32) + @Column(name = "code", length = 32) @Comment("优惠券码") private String code; /** * 状态:0-未领取 1-已领取 2-已核销 3-已过期 */ - @Column(name = "status",columnDefinition = "VARCHAR(20)",length = 20, nullable = false) + @Column(name = "status",columnDefinition = "VARCHAR(20)",length = 20) @Comment("状态:0未领取 1已领取 2已核销 3已过期") private CouponCodeStatus status = CouponCodeStatus.UNCLAIMED; @@ -117,7 +117,7 @@ public class CouponCode extends AbstractBaseEntity { */ public boolean isClaimed() { return this.status != null && - this.status.getCodeValue() >= CouponCodeStatus.CLAIMED.getCodeValue(); + this.status.ordinal() >= CouponCodeStatus.CLAIMED.ordinal(); } /** diff --git a/src/main/java/com/xjhs/findmemerchant/entity/Employee.java b/src/main/java/com/xjhs/findmemerchant/entity/Employee.java index e131c73..9350ab8 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/Employee.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/Employee.java @@ -29,35 +29,27 @@ public class Employee extends AbstractBaseEntity { /** * 手机号 */ - @Column(name = "phone", nullable = false, length = 11) + @Column(name = "phone", length = 11) @Comment("手机号") private String phone; /** * 员工姓名 */ - @Column(name = "name", nullable = false, length = 50) + @Column(name = "name", length = 50) @Comment("员工姓名") private String name; /** * 状态:0-禁用 1-启用 */ - @Column(name = "status",columnDefinition = "VARCHAR(15)",length = 15, nullable = false) - @Comment("状态:0禁用 1启用") + @Column(name = "status",columnDefinition = "VARCHAR(15)",length = 15) + @Comment("状态") private CommonStatus status = CommonStatus.ENABLED; // ===== 关联关系 ===== - - /** - * 商户 - */ - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "merchant_id", insertable = false, updatable = false) - private Merchant merchant; - /** * 门店 */ diff --git a/src/main/java/com/xjhs/findmemerchant/entity/HealthCertificate.java b/src/main/java/com/xjhs/findmemerchant/entity/HealthCertificate.java index b9db5b8..b0111a9 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/HealthCertificate.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/HealthCertificate.java @@ -1,6 +1,6 @@ package com.xjhs.findmemerchant.entity; -import com.xjhs.findmemerchant.adapter.json.HashMapJsonConverter; +import com.xjhs.findmemerchant.common.jpa.json.HashMapJsonConverter; import com.xjhs.findmemerchant.common.jpa.AbstractBaseEntity; import com.xjhs.findmemerchant.types.HealthCertificateStatus; import jakarta.persistence.*; @@ -27,7 +27,7 @@ import java.util.HashMap; ) public class HealthCertificate extends AbstractBaseEntity { - @Column(name = "image_url", nullable = false, length = 500) + @Column(name = "image_url", length = 500) @Comment("健康证图片URL") private String imageUrl; @@ -48,7 +48,7 @@ public class HealthCertificate extends AbstractBaseEntity { @Comment("OCR原始结果") private HashMap ocrRaw; - @Column(name = "status",columnDefinition = "VARCHAR(20)",length = 20, nullable = false) + @Column(name = "status",columnDefinition = "VARCHAR(20)",length = 20) @Comment("状态:0待审核 1有效 2过期") private HealthCertificateStatus status = HealthCertificateStatus.PENDING; diff --git a/src/main/java/com/xjhs/findmemerchant/entity/Member.java b/src/main/java/com/xjhs/findmemerchant/entity/Member.java index 724255e..994abee 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/Member.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/Member.java @@ -34,7 +34,7 @@ public class Member extends AbstractBaseEntity { /** * 手机号 */ - @Column(name = "phone", nullable = false, length = 11) + @Column(name = "phone", length = 11) @Comment("手机号") private String phone; @@ -55,14 +55,14 @@ public class Member extends AbstractBaseEntity { /** * 累计订单数 */ - @Column(name = "total_orders", nullable = false) + @Column(name = "total_orders") @Comment("累计订单数") private Integer totalOrders = 0; /** * 累计消费金额 */ - @Column(name = "total_amount", nullable = false, precision = 12, scale = 2) + @Column(name = "total_amount", precision = 12, scale = 2) @Comment("累计消费金额") private BigDecimal totalAmount = BigDecimal.ZERO; @@ -75,7 +75,7 @@ public class Member extends AbstractBaseEntity { // ============ 关联关系 ============ /** - * 商户 + * 商家 */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "merchant_id", insertable = false, updatable = false) diff --git a/src/main/java/com/xjhs/findmemerchant/entity/Merchant.java b/src/main/java/com/xjhs/findmemerchant/entity/Merchant.java index 2d74c7d..15a4bc2 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/Merchant.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/Merchant.java @@ -12,7 +12,7 @@ import org.hibernate.annotations.Comment; import java.util.List; /** - * 商户实体 + * 商家实体 * 对应表:merchants */ @Getter @@ -34,7 +34,7 @@ public class Merchant extends AbstractBaseEntity { /** * 登录手机号 */ - @Column(name = "phone", nullable = false, length = 11) + @Column(name = "phone", length = 11) @Comment("手机号") private String phone; @@ -68,15 +68,17 @@ public class Merchant extends AbstractBaseEntity { /** * 认证状态 */ - @Column(name = "auth_status",length = 20,columnDefinition = "VARCHAR(20)", nullable = false) - @Comment("认证状态:0未认证 1已认证") + @Column(name = "auth_status",length = 20,columnDefinition = "VARCHAR(20)") + @Comment("认证状态") + @Enumerated(EnumType.STRING) private AuthStatus authStatus = AuthStatus.NOT_VERIFIED; /** * 账户状态 */ - @Column(name = "status", nullable = false) - @Comment("账户状态:0禁用 1启用") + @Column(name = "status",length = 20,columnDefinition = "VARCHAR(20)") + @Comment("账户状态") + @Enumerated(EnumType.STRING) private CommonStatus status = CommonStatus.ENABLED; // ========== 关联关系 ========== diff --git a/src/main/java/com/xjhs/findmemerchant/entity/Message.java b/src/main/java/com/xjhs/findmemerchant/entity/Message.java index c9dc220..baf6965 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/Message.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/Message.java @@ -28,7 +28,7 @@ public class Message extends AbstractBaseEntity { /** * 消息类型:1-系统通知 2-活动提醒 3-私信 */ - @Column(name = "type",columnDefinition = "VARCHAR(20)",length = 20,nullable = false) + @Column(name = "type",columnDefinition = "VARCHAR(20)",length = 20) @Enumerated(EnumType.STRING) @Comment("消息类型:1系统通知 2活动提醒 3私信") private MessageType type; @@ -36,28 +36,28 @@ public class Message extends AbstractBaseEntity { /** * 标题 */ - @Column(name = "title", nullable = false, length = 200) + @Column(name = "title", length = 200) @Comment("消息标题") private String title; /** * 内容 */ - @Column(name = "content", nullable = false, columnDefinition = "text") + @Column(name = "content", columnDefinition = "text") @Comment("消息内容") private String content; /** * 是否已读:0-未读 1-已读 */ - @Column(name = "is_read", nullable = false) + @Column(name = "is_read") @Comment("是否已读:0未读 1已读") - private Byte isRead = 0; + private Boolean isRead = false; /** * 创建时间 */ - @Column(name = "created_at", nullable = false) + @Column(name = "created_at") @Comment("创建时间") private LocalDateTime createdAt; @@ -69,7 +69,7 @@ public class Message extends AbstractBaseEntity { private LocalDateTime readAt; /** - * 商户 + * 商家 */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "merchant_id", insertable = false, updatable = false) @@ -81,7 +81,7 @@ public class Message extends AbstractBaseEntity { * 标记为已读 */ public void markAsRead() { - this.isRead = 1; + this.isRead = true; this.readAt = LocalDateTime.now(); } @@ -89,7 +89,7 @@ public class Message extends AbstractBaseEntity { * 是否未读 */ public boolean isUnread() { - return this.isRead != null && this.isRead == 0; + return this.isRead != null && !this.isRead; } /** diff --git a/src/main/java/com/xjhs/findmemerchant/entity/Order.java b/src/main/java/com/xjhs/findmemerchant/entity/Order.java index c668a17..f690469 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/Order.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/Order.java @@ -33,7 +33,7 @@ public class Order extends AbstractBaseEntity { /** * 订单号 */ - @Column(name = "order_no", nullable = false, length = 32) + @Column(name = "order_no", length = 32) @Comment("订单号") private String orderNo; @@ -41,21 +41,21 @@ public class Order extends AbstractBaseEntity { /** * 订单总金额 */ - @Column(name = "total_amount", nullable = false, precision = 10, scale = 2) + @Column(name = "total_amount", precision = 10, scale = 2) @Comment("订单总金额") private BigDecimal totalAmount; /** * 优惠金额 */ - @Column(name = "discount_amount", nullable = false, precision = 10, scale = 2) + @Column(name = "discount_amount", precision = 10, scale = 2) @Comment("优惠金额") private BigDecimal discountAmount = BigDecimal.ZERO; /** * 实付金额 */ - @Column(name = "pay_amount", nullable = false, precision = 10, scale = 2) + @Column(name = "pay_amount", precision = 10, scale = 2) @Comment("实付金额") private BigDecimal payAmount; @@ -69,7 +69,7 @@ public class Order extends AbstractBaseEntity { /** * 订单状态:1-待支付 2-已支付 3-已完成 4-已退款 5-已取消 */ - @Column(name = "status", nullable = false) + @Column(name = "status") @Comment("订单状态:1待支付 2已支付 3已完成 4已退款 5已取消") private OrderStatus status; diff --git a/src/main/java/com/xjhs/findmemerchant/entity/OrderItem.java b/src/main/java/com/xjhs/findmemerchant/entity/OrderItem.java index aa54f86..640d5f2 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/OrderItem.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/OrderItem.java @@ -1,6 +1,6 @@ package com.xjhs.findmemerchant.entity; -import com.xjhs.findmemerchant.adapter.id.SnowflakeGenerated; +import com.xjhs.findmemerchant.common.jpa.id.SnowflakeGenerated; import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; @@ -32,7 +32,6 @@ public class OrderItem { @Id @GeneratedValue @SnowflakeGenerated - @Column(nullable = false) @Comment("主键ID") private Long id; @@ -48,7 +47,7 @@ public class OrderItem { /** * 商品名称(快照) */ - @Column(name = "product_name", nullable = false, length = 100) + @Column(name = "product_name", length = 100) @Comment("商品名称(快照)") private String productName; @@ -76,28 +75,28 @@ public class OrderItem { /** * 商品单价 */ - @Column(name = "unit_price", nullable = false, precision = 10, scale = 2) + @Column(name = "unit_price", precision = 10, scale = 2) @Comment("商品单价") private BigDecimal unitPrice; /** * 购买数量 */ - @Column(name = "quantity", nullable = false) + @Column(name = "quantity") @Comment("购买数量") private Integer quantity = 1; /** * 小计金额 */ - @Column(name = "total_price", nullable = false, precision = 10, scale = 2) + @Column(name = "total_price", precision = 10, scale = 2) @Comment("小计金额") private BigDecimal totalPrice; /** * 创建时间 */ - @Column(name = "created_at", nullable = false) + @Column(name = "created_at") @Comment("创建时间") private LocalDateTime createdAt; @@ -107,7 +106,7 @@ public class OrderItem { * 所属订单 */ @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "order_id", insertable = false, updatable = false) + @JoinColumn(name = "order_id") private Order order; // ========== 业务方法 ========== diff --git a/src/main/java/com/xjhs/findmemerchant/entity/Product.java b/src/main/java/com/xjhs/findmemerchant/entity/Product.java index e609224..ca1cd2b 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/Product.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/Product.java @@ -8,6 +8,7 @@ import lombok.Setter; import org.hibernate.annotations.Comment; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.List; /** @@ -31,7 +32,7 @@ public class Product extends AbstractBaseEntity { /** * 商品名称 */ - @Column(name = "name", nullable = false, length = 100) + @Column(name = "name", length = 100) @Comment("商品名称") private String name; @@ -52,42 +53,42 @@ public class Product extends AbstractBaseEntity { /** * 原价 */ - @Column(name = "original_price", nullable = false, precision = 10, scale = 2) + @Column(name = "original_price", precision = 10, scale = 2) @Comment("原价") private BigDecimal originalPrice; /** * 售价 */ - @Column(name = "sale_price", nullable = false, precision = 10, scale = 2) + @Column(name = "sale_price", precision = 10, scale = 2) @Comment("售价") private BigDecimal salePrice; /** * 库存,-1 表示无限库存 */ - @Column(name = "stock", nullable = false) + @Column(name = "stock") @Comment("库存,-1表示无限库存") private Integer stock = -1; /** * 已售数量 */ - @Column(name = "sold_count", nullable = false) + @Column(name = "sold_count") @Comment("已售数量") private Integer soldCount = 0; /** * 排序值 */ - @Column(name = "sort_order", nullable = false) + @Column(name = "sort_order") @Comment("排序值") private Integer sortOrder = 0; /** * 商品状态:0-下架 1-上架 */ - @Column(name = "status",columnDefinition = "VARCHAR(20)",length = 20, nullable = false) + @Column(name = "status",columnDefinition = "VARCHAR(20)",length = 20) @Enumerated(EnumType.STRING) @Comment("商品状态:0下架 1上架") private ProductStatus status = ProductStatus.OFF_SALE; @@ -95,7 +96,7 @@ public class Product extends AbstractBaseEntity { // ========== 关联关系 ========== /** - * 商户 + * 商家 */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "merchant_id", insertable = false, updatable = false) @@ -155,7 +156,7 @@ public class Product extends AbstractBaseEntity { return 0; } BigDecimal rate = salePrice - .divide(originalPrice, 2, BigDecimal.ROUND_HALF_UP) + .divide(originalPrice, 2, RoundingMode.HALF_UP) .multiply(BigDecimal.valueOf(100)); return rate.intValue(); } diff --git a/src/main/java/com/xjhs/findmemerchant/entity/ProductCategory.java b/src/main/java/com/xjhs/findmemerchant/entity/ProductCategory.java index 0f2e0f9..c0aca82 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/ProductCategory.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/ProductCategory.java @@ -29,7 +29,7 @@ public class ProductCategory extends AbstractBaseEntity { /** * 分类名称 */ - @Column(name = "name", nullable = false, length = 50) + @Column(name = "name", length = 50) @Comment("分类名称") private String name; @@ -43,21 +43,21 @@ public class ProductCategory extends AbstractBaseEntity { /** * 排序值 */ - @Column(name = "sort_order", nullable = false) + @Column(name = "sort_order") @Comment("排序值") private Integer sortOrder = 0; /** * 状态:0-禁用 1-启用 */ - @Column(name = "status", nullable = false) + @Column(name = "status") @Comment("状态:0禁用 1启用") private CommonStatus status = CommonStatus.ENABLED; // ========== 关联关系 ========== /** - * 商户 + * 商家 */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "merchant_id", insertable = false, updatable = false) diff --git a/src/main/java/com/xjhs/findmemerchant/entity/ProductSKU.java b/src/main/java/com/xjhs/findmemerchant/entity/ProductSKU.java index 3b28035..aa78e36 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/ProductSKU.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/ProductSKU.java @@ -1,6 +1,6 @@ package com.xjhs.findmemerchant.entity; -import com.xjhs.findmemerchant.adapter.id.SnowflakeGenerated; +import com.xjhs.findmemerchant.common.jpa.id.SnowflakeGenerated; import com.xjhs.findmemerchant.common.jpa.AbstractBaseEntity; import com.xjhs.findmemerchant.types.CommonStatus; import jakarta.persistence.*; @@ -32,14 +32,13 @@ public class ProductSKU extends AbstractBaseEntity { @Id @GeneratedValue @SnowflakeGenerated - @Column(nullable = false) @Comment("主键ID") private Long id; /** * 规格名称(如:大杯/加冰) */ - @Column(name = "sku_name", nullable = false, length = 100) + @Column(name = "sku_name", length = 100) @Comment("规格名称") private String skuName; @@ -53,28 +52,28 @@ public class ProductSKU extends AbstractBaseEntity { /** * 售价 */ - @Column(name = "price", nullable = false, precision = 10, scale = 2) + @Column(name = "price", precision = 10, scale = 2) @Comment("规格价格") private BigDecimal price; /** * 库存,-1 表示无限库存 */ - @Column(name = "stock", nullable = false) + @Column(name = "stock") @Comment("库存,-1表示无限库存") private Integer stock = -1; /** * 已售数量 */ - @Column(name = "sold_count", nullable = false) + @Column(name = "sold_count") @Comment("已售数量") private Integer soldCount = 0; /** * 状态:0-禁用 1-启用 */ - @Column(name = "status",columnDefinition = "VARCHAR(20)",length = 20,nullable = false) + @Column(name = "status",columnDefinition = "VARCHAR(20)",length = 20) @Comment("状态:0禁用 1启用") private CommonStatus status = CommonStatus.ENABLED; diff --git a/src/main/java/com/xjhs/findmemerchant/entity/Review.java b/src/main/java/com/xjhs/findmemerchant/entity/Review.java index 3c33d96..6928222 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/Review.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/Review.java @@ -27,19 +27,12 @@ import org.hibernate.annotations.Comment; public class Review extends AbstractBaseEntity { - /** - * 订单ID - */ - @Column(name = "order_id", nullable = false) - @Comment("订单ID") - private Long orderId; - /** * C端用户ID */ - @Column(name = "user_id", nullable = false) + @Column(name = "user_id") @Comment("C端用户ID") private Long userId; @@ -60,7 +53,7 @@ public class Review extends AbstractBaseEntity { /** * 评分 1-5 */ - @Column(name = "rating", nullable = false) + @Column(name = "rating") @Comment("评分 1-5") private Integer rating; @@ -81,14 +74,14 @@ public class Review extends AbstractBaseEntity { /** * 是否匿名 */ - @Column(name = "is_anonymous", nullable = false) + @Column(name = "is_anonymous") @Comment("是否匿名") private Boolean isAnonymous = Boolean.FALSE; /** * 状态:1-正常 0-隐藏 */ - @Column(name = "status",columnDefinition = "VARCHAR(20)",length = 20, nullable = false) + @Column(name = "status",columnDefinition = "VARCHAR(20)",length = 20) @Comment("状态:1正常 0隐藏") private ReviewStatus status = ReviewStatus.NORMAL; @@ -104,16 +97,25 @@ public class Review extends AbstractBaseEntity { * 门店 */ @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "store_id", insertable = false, updatable = false) + @JoinColumn(name = "merchant_id") + private Merchant merchant; + /** + * 门店 + */ + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "store_id") private Store store; /** * 订单 */ @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "order_id", insertable = false, updatable = false) + @JoinColumn(name = "order_id") private Order order; + + + // ========== 业务方法 ========== /** diff --git a/src/main/java/com/xjhs/findmemerchant/entity/ReviewReply.java b/src/main/java/com/xjhs/findmemerchant/entity/ReviewReply.java index 066bc24..3a3b223 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/ReviewReply.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/ReviewReply.java @@ -1,6 +1,6 @@ package com.xjhs.findmemerchant.entity; -import com.xjhs.findmemerchant.adapter.id.SnowflakeGenerated; +import com.xjhs.findmemerchant.common.jpa.id.SnowflakeGenerated; import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; @@ -30,35 +30,34 @@ public class ReviewReply{ @Id @GeneratedValue @SnowflakeGenerated - @Column(nullable = false) @Comment("主键ID") private Long id; /** * 评价ID(唯一,一个评价一条回复) */ - @Column(name = "review_id", nullable = false) + @Column(name = "review_id") @Comment("评价ID") private Long reviewId; /** - * 商户ID + * 商家ID */ - @Column(name = "merchant_id", nullable = false) - @Comment("商户ID") + @Column(name = "merchant_id") + @Comment("商家ID") private Long merchantId; /** * 回复内容 */ - @Column(name = "content", nullable = false, columnDefinition = "text") + @Column(name = "content", columnDefinition = "text") @Comment("回复内容") private String content; /** * 回复人ID(商家或员工) */ - @Column(name = "replier_id", nullable = false) + @Column(name = "replier_id") @Comment("回复人ID(商家或员工)") private Long replierId; diff --git a/src/main/java/com/xjhs/findmemerchant/entity/Role.java b/src/main/java/com/xjhs/findmemerchant/entity/Role.java index e6a4a01..e9f9004 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/Role.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/Role.java @@ -1,6 +1,6 @@ package com.xjhs.findmemerchant.entity; -import com.xjhs.findmemerchant.adapter.json.StringListJsonConverter; +import com.xjhs.findmemerchant.common.jpa.json.StringListJsonConverter; import com.xjhs.findmemerchant.common.jpa.AbstractBaseEntity; import jakarta.persistence.*; import lombok.Getter; @@ -32,14 +32,14 @@ public class Role extends AbstractBaseEntity { /** * 角色名称 */ - @Column(name = "name", nullable = false, length = 50) + @Column(name = "name", length = 50) @Comment("角色名称") private String name; /** * 角色编码(唯一) */ - @Column(name = "code", nullable = false, length = 50) + @Column(name = "code", length = 50) @Comment("角色编码") private String code; @@ -54,14 +54,14 @@ public class Role extends AbstractBaseEntity { * 权限列表(JSON数组) */ @Convert(converter = StringListJsonConverter.class) - @Column(name = "permissions", nullable = false, columnDefinition = "json") + @Column(name = "permissions", columnDefinition = "json") @Comment("权限列表(JSON数组)") private List permissions = new ArrayList<>(); /** * 是否系统内置角色:1-是 0-否 */ - @Column(name = "is_system", nullable = false) + @Column(name = "is_system") @Comment("是否系统内置角色:1是 0否") private Byte isSystem = 0; diff --git a/src/main/java/com/xjhs/findmemerchant/entity/Settlement.java b/src/main/java/com/xjhs/findmemerchant/entity/Settlement.java index fc3b20a..9e0f89c 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/Settlement.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/Settlement.java @@ -35,7 +35,7 @@ public class Settlement extends AbstractBaseEntity { DateTimeFormatter.ofPattern("yyyy-MM-dd"); /** - * 商户 + * 商家 */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "merchant_id", insertable = false, updatable = false) @@ -45,70 +45,70 @@ public class Settlement extends AbstractBaseEntity { /** * 结算单号 */ - @Column(name = "settlement_no", nullable = false, length = 32) + @Column(name = "settlement_no", length = 32) @Comment("结算单号") private String settlementNo; /** * 结算类型:1-日结 2-周结 */ - @Column(name = "type", nullable = false) + @Column(name = "type") @Comment("结算类型:1日结 2周结") private SettlementType type; /** * 结算周期开始时间 */ - @Column(name = "period_start", nullable = false) + @Column(name = "period_start") @Comment("结算周期开始时间") private LocalDateTime periodStart; /** * 结算周期结束时间 */ - @Column(name = "period_end", nullable = false) + @Column(name = "period_end") @Comment("结算周期结束时间") private LocalDateTime periodEnd; /** * 订单数量 */ - @Column(name = "order_count", nullable = false) + @Column(name = "order_count") @Comment("订单数量") private Integer orderCount = 0; /** * 订单总额 */ - @Column(name = "total_amount", nullable = false, precision = 12, scale = 2) + @Column(name = "total_amount", precision = 12, scale = 2) @Comment("订单总额") private BigDecimal totalAmount; /** * 退款金额 */ - @Column(name = "refund_amount", nullable = false, precision = 12, scale = 2) + @Column(name = "refund_amount", precision = 12, scale = 2) @Comment("退款金额") private BigDecimal refundAmount = BigDecimal.ZERO; /** * 平台服务费 */ - @Column(name = "platform_fee", nullable = false, precision = 10, scale = 2) + @Column(name = "platform_fee", precision = 10, scale = 2) @Comment("平台服务费") private BigDecimal platformFee = BigDecimal.ZERO; /** * 结算金额 */ - @Column(name = "settlement_amount", nullable = false, precision = 12, scale = 2) + @Column(name = "settlement_amount", precision = 12, scale = 2) @Comment("结算金额") private BigDecimal settlementAmount; /** * 结算状态:0-待结算 1-已结算 */ - @Column(name = "status", nullable = false) + @Column(name = "status") @Comment("结算状态:0待结算 1已结算") private SettlementStatus status = SettlementStatus.PENDING; diff --git a/src/main/java/com/xjhs/findmemerchant/entity/Store.java b/src/main/java/com/xjhs/findmemerchant/entity/Store.java index 75e1fbe..550d0d6 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/Store.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/Store.java @@ -9,7 +9,9 @@ import lombok.Getter; import lombok.Setter; import org.hibernate.annotations.Comment; +import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; /** @@ -30,7 +32,7 @@ public class Store extends AbstractBaseEntity { /** * 门店名称 */ - @Column(name = "name", nullable = false, length = 100) + @Column(name = "name", length = 100) @Comment("门店名称") private String name; @@ -44,35 +46,35 @@ public class Store extends AbstractBaseEntity { /** * 联系电话 */ - @Column(name = "phone", nullable = false, length = 11) + @Column(name = "phone", length = 11) @Comment("联系电话") private String phone; /** * 省 */ - @Column(name = "province", nullable = false, length = 50) + @Column(name = "province", length = 50) @Comment("省") private String province; /** * 市 */ - @Column(name = "city", nullable = false, length = 50) + @Column(name = "city", length = 50) @Comment("市") private String city; /** * 区/县 */ - @Column(name = "district", nullable = false, length = 50) + @Column(name = "district", length = 50) @Comment("区/县") private String district; /** * 详细地址 */ - @Column(name = "address", nullable = false, length = 200) + @Column(name = "address", length = 200) @Comment("详细地址") private String address; @@ -81,14 +83,14 @@ public class Store extends AbstractBaseEntity { */ @Column(name = "longitude", precision = 10, scale = 7) @Comment("经度") - private Double longitude; + private BigDecimal longitude; /** * 纬度 */ @Column(name = "latitude", precision = 10, scale = 7) @Comment("纬度") - private Double latitude; + private BigDecimal latitude; /** * 营业时间描述 @@ -100,7 +102,7 @@ public class Store extends AbstractBaseEntity { /** * 营业状态:0-已打烊 1-营业中 2-临时打烊 */ - @Column(name = "business_status",columnDefinition = "VARCHAR(20)", length = 20,nullable = false) + @Column(name = "business_status",columnDefinition = "VARCHAR(20)", length = 20) @Enumerated(EnumType.STRING) @Comment("营业状态:0已打烊 1营业中 2临时打烊") private BusinessStatus businessStatus = BusinessStatus.OPEN; @@ -122,7 +124,7 @@ public class Store extends AbstractBaseEntity { /** * 审核状态 */ - @Column(name = "audit_status",columnDefinition = "VARCHAR(20)", length = 20, nullable = false) + @Column(name = "audit_status",columnDefinition = "VARCHAR(20)", length = 20) @Comment("审核状态:0待审核 1已通过 2已拒绝") private StoreAuditStatus auditStatus = StoreAuditStatus.PENDING; @@ -136,30 +138,41 @@ public class Store extends AbstractBaseEntity { /** * 启用状态:0-禁用 1-启用 */ - @Column(name = "status",columnDefinition = "VARCHAR(20)", length = 20, nullable = false) + @Column(name = "status",columnDefinition = "VARCHAR(20)", length = 20) @Comment("启用状态:0禁用 1启用") private CommonStatus status = CommonStatus.ENABLED; // ========== 关联关系 ========== /** - * 商户 + * 商家 */ @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "merchant_id", insertable = false, updatable = false) + @JoinColumn(name = "merchant_id") private Merchant merchant; /** * 员工列表 */ - @OneToMany(mappedBy = "store", fetch = FetchType.LAZY) - private List employees; + @OneToMany(mappedBy = "store", fetch = FetchType.LAZY,cascade = CascadeType.ALL,orphanRemoval = true) + private List employees = new ArrayList<>(); + + public void addEmployee(Employee employee){ + employee.setStore(this); + this.employees.add(employee); + } /** * 营业时间段 */ - @OneToMany(mappedBy = "store", fetch = FetchType.LAZY) - private List businessPeriods; + @OneToMany(mappedBy = "store", fetch = FetchType.LAZY,cascade = CascadeType.ALL,orphanRemoval = true) + private List businessPeriods = new ArrayList<>(); + + public void addBusinessPeriods(BusinessPeriod businessPeriod){ + businessPeriod.setStore(this); + this.businessPeriods.add(businessPeriod); + } + // ========== 业务方法 ========== diff --git a/src/main/java/com/xjhs/findmemerchant/entity/Transaction.java b/src/main/java/com/xjhs/findmemerchant/entity/Transaction.java index 5e26123..4a1c803 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/Transaction.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/Transaction.java @@ -1,6 +1,6 @@ package com.xjhs.findmemerchant.entity; -import com.xjhs.findmemerchant.adapter.id.SnowflakeGenerated; +import com.xjhs.findmemerchant.common.jpa.id.SnowflakeGenerated; import com.xjhs.findmemerchant.types.TransactionType; import jakarta.persistence.*; import lombok.Getter; @@ -34,7 +34,6 @@ public class Transaction { @Id @GeneratedValue @SnowflakeGenerated - @Column(nullable = false) @Comment("主键ID") private Long id; @@ -42,28 +41,28 @@ public class Transaction { /** * 交易类型:1-收入 2-支出 3-冻结 4-解冻 5-提现 */ - @Column(name = "type",columnDefinition = "VARCHAR(20)",length = 20, nullable = false) + @Column(name = "type",columnDefinition = "VARCHAR(20)",length = 20) @Comment("交易类型:1收入 2支出 3冻结 4解冻 5提现") private TransactionType type; /** * 交易金额 */ - @Column(name = "amount", nullable = false, precision = 12, scale = 2) + @Column(name = "amount", precision = 12, scale = 2) @Comment("交易金额") private BigDecimal amount; /** * 交易前余额 */ - @Column(name = "balance_before", nullable = false, precision = 12, scale = 2) + @Column(name = "balance_before", precision = 12, scale = 2) @Comment("交易前余额") private BigDecimal balanceBefore; /** * 交易后余额 */ - @Column(name = "balance_after", nullable = false, precision = 12, scale = 2) + @Column(name = "balance_after", precision = 12, scale = 2) @Comment("交易后余额") private BigDecimal balanceAfter; @@ -91,7 +90,7 @@ public class Transaction { /** * 创建时间 */ - @Column(name = "created_at", nullable = false) + @Column(name = "created_at") @Comment("创建时间") private LocalDateTime createdAt; @@ -104,7 +103,7 @@ public class Transaction { /** - * 商户 + * 商家 */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "merchant_id", insertable = false, updatable = false) diff --git a/src/main/java/com/xjhs/findmemerchant/entity/Wallet.java b/src/main/java/com/xjhs/findmemerchant/entity/Wallet.java index 1170b7b..06dffe2 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/Wallet.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/Wallet.java @@ -1,6 +1,5 @@ package com.xjhs.findmemerchant.entity; -import com.xjhs.findmemerchant.adapter.id.SnowflakeGenerated; import com.xjhs.findmemerchant.common.jpa.AbstractBaseEntity; import jakarta.persistence.*; import lombok.Getter; @@ -10,7 +9,7 @@ import org.hibernate.annotations.Comment; import java.math.BigDecimal; /** - * 商户钱包 + * 商家钱包 * 对应表:wallets */ @Getter @@ -23,59 +22,48 @@ import java.math.BigDecimal; } ) public class Wallet extends AbstractBaseEntity { - - /** - * 主键(雪花ID) - */ - @Id - @GeneratedValue - @SnowflakeGenerated - @Column(nullable = false) - @Comment("主键ID") - private Long id; - - + /** * 可用余额 */ - @Column(name = "balance", nullable = false, precision = 12, scale = 2) + @Column(name = "balance", precision = 12, scale = 2) @Comment("可用余额") private BigDecimal balance = BigDecimal.ZERO; /** * 冻结余额(提现中) */ - @Column(name = "frozen_balance", nullable = false, precision = 12, scale = 2) + @Column(name = "frozen_balance", precision = 12, scale = 2) @Comment("冻结余额(提现中)") private BigDecimal frozenBalance = BigDecimal.ZERO; /** * 累计收入 */ - @Column(name = "total_income", nullable = false, precision = 12, scale = 2) + @Column(name = "total_income", precision = 12, scale = 2) @Comment("累计收入") private BigDecimal totalIncome = BigDecimal.ZERO; /** * 累计提现 */ - @Column(name = "total_withdrawn", nullable = false, precision = 12, scale = 2) + @Column(name = "total_withdrawn", precision = 12, scale = 2) @Comment("累计提现") private BigDecimal totalWithdrawn = BigDecimal.ZERO; /** * 待结算金额 */ - @Column(name = "pending_settlement", nullable = false, precision = 12, scale = 2) + @Column(name = "pending_settlement", precision = 12, scale = 2) @Comment("待结算金额") private BigDecimal pendingSettlement = BigDecimal.ZERO; /** - * 商户 + * 商家 */ @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "merchant_id", insertable = false, updatable = false) + @JoinColumn(name = "merchant_id") private Merchant merchant; // ========== 业务方法 ========== diff --git a/src/main/java/com/xjhs/findmemerchant/entity/Withdrawal.java b/src/main/java/com/xjhs/findmemerchant/entity/Withdrawal.java index 7e2ec75..8efa02e 100644 --- a/src/main/java/com/xjhs/findmemerchant/entity/Withdrawal.java +++ b/src/main/java/com/xjhs/findmemerchant/entity/Withdrawal.java @@ -32,49 +32,49 @@ public class Withdrawal extends AbstractBaseEntity { /** * 提现金额 */ - @Column(name = "amount", nullable = false, precision = 12, scale = 2) + @Column(name = "amount", precision = 12, scale = 2) @Comment("提现金额") private BigDecimal amount; /** * 手续费 */ - @Column(name = "fee", nullable = false, precision = 10, scale = 2) + @Column(name = "fee", precision = 10, scale = 2) @Comment("提现手续费") private BigDecimal fee = BigDecimal.ZERO; /** * 实际到账金额 */ - @Column(name = "actual_amount", nullable = false, precision = 12, scale = 2) + @Column(name = "actual_amount", precision = 12, scale = 2) @Comment("实际到账金额") private BigDecimal actualAmount; /** * 银行名称 */ - @Column(name = "bank_name", nullable = false, length = 50) + @Column(name = "bank_name", length = 50) @Comment("银行名称") private String bankName; /** * 银行账号(加密存储) */ - @Column(name = "bank_account", nullable = false, length = 30) + @Column(name = "bank_account", length = 30) @Comment("银行账号(加密)") private String bankAccount; /** * 户名 */ - @Column(name = "account_name", nullable = false, length = 50) + @Column(name = "account_name", length = 50) @Comment("开户人姓名") private String accountName; /** * 状态:0-待审核 1-处理中 2-已完成 3-已拒绝 4-已取消 */ - @Column(name = "status", nullable = false) + @Column(name = "status") @Comment("提现状态") private Byte status = 0; @@ -114,7 +114,7 @@ public class Withdrawal extends AbstractBaseEntity { private String remark; /** - * 商户 + * 商家 */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "merchant_id", insertable = false, updatable = false) diff --git a/src/main/java/com/xjhs/findmemerchant/mapper/EmployeeMapper.java b/src/main/java/com/xjhs/findmemerchant/mapper/EmployeeMapper.java index 28d046f..5ec5ed3 100644 --- a/src/main/java/com/xjhs/findmemerchant/mapper/EmployeeMapper.java +++ b/src/main/java/com/xjhs/findmemerchant/mapper/EmployeeMapper.java @@ -1,4 +1,20 @@ package com.xjhs.findmemerchant.mapper; -public class EmployeeMapper { +import com.xjhs.findmemerchant.dto.member.EmployeeDto; +import com.xjhs.findmemerchant.entity.Employee; +import com.xjhs.findmemerchant.vo.member.EmployeeCreateVo; +import com.xjhs.findmemerchant.vo.member.EmployeeUpdateVo; +import org.mapstruct.*; + +@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE,unmappedSourcePolicy = ReportingPolicy.IGNORE) +public interface EmployeeMapper { + @Mapping(target = "storeId",source = "store.id") + @Mapping(target = "roleId",source = "role.id") + EmployeeDto toDto(Employee employee); + + Employee toEntity(EmployeeCreateVo createVo); + + @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE) + void updateEntityFormUpdateVo(EmployeeUpdateVo updateVo, @MappingTarget Employee employee); + } diff --git a/src/main/java/com/xjhs/findmemerchant/mapper/MerchantMapper.java b/src/main/java/com/xjhs/findmemerchant/mapper/MerchantMapper.java index 8c5703f..e74e846 100644 --- a/src/main/java/com/xjhs/findmemerchant/mapper/MerchantMapper.java +++ b/src/main/java/com/xjhs/findmemerchant/mapper/MerchantMapper.java @@ -3,10 +3,13 @@ package com.xjhs.findmemerchant.mapper; import com.xjhs.findmemerchant.dto.MerchantDto; import com.xjhs.findmemerchant.entity.Merchant; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; import org.mapstruct.ReportingPolicy; @Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE,unmappedSourcePolicy = ReportingPolicy.IGNORE) public interface MerchantMapper { + + @Mapping(target = "authStatusDesc",source = "authStatus.desc") MerchantDto toDto(Merchant merchant); } diff --git a/src/main/java/com/xjhs/findmemerchant/mapper/StoreMapper.java b/src/main/java/com/xjhs/findmemerchant/mapper/StoreMapper.java index c421086..0db647e 100644 --- a/src/main/java/com/xjhs/findmemerchant/mapper/StoreMapper.java +++ b/src/main/java/com/xjhs/findmemerchant/mapper/StoreMapper.java @@ -1,17 +1,32 @@ package com.xjhs.findmemerchant.mapper; +import com.xjhs.findmemerchant.dto.store.BusinessPeriodDto; +import com.xjhs.findmemerchant.dto.store.StoreBusinessStatusDto; import com.xjhs.findmemerchant.dto.store.StoreDto; +import com.xjhs.findmemerchant.entity.BusinessPeriod; import com.xjhs.findmemerchant.entity.Store; +import com.xjhs.findmemerchant.vo.store.BusinessPeriodVo; +import com.xjhs.findmemerchant.vo.store.StoreBusinessStatusUpdateVo; import com.xjhs.findmemerchant.vo.store.StoreCreateVo; import com.xjhs.findmemerchant.vo.store.StoreUpdateVo; import org.mapstruct.*; +import java.util.List; + @Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE,unmappedSourcePolicy = ReportingPolicy.IGNORE) public interface StoreMapper { StoreDto toDto(Store store); + StoreBusinessStatusDto toBusinessStatusDto(Store store); Store toEntity(StoreCreateVo createVo); Store toEntity(StoreUpdateVo updateVo); @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE) void updateFromVo(StoreUpdateVo vo, @MappingTarget Store entity); + @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE) + void updateFromBusinessUpdateVo(StoreBusinessStatusUpdateVo updateVo,@MappingTarget Store store); + + BusinessPeriod toEntity(BusinessPeriodVo vo); + @Mapping(source = "store.id",target = "storeId") + BusinessPeriodDto toDto(BusinessPeriod entity); + List toDtoList(List entityList); } diff --git a/src/main/java/com/xjhs/findmemerchant/repository/ActivityRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/ActivityRepository.java index 0ccc682..fd53c89 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/ActivityRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/ActivityRepository.java @@ -1,13 +1,14 @@ package com.xjhs.findmemerchant.repository; import com.xjhs.findmemerchant.entity.Activity; +import com.xjhs.findmemerchant.types.ActivityStatus; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface ActivityRepository extends JpaRepository { - List findByMerchantId(Long merchantId); + List findByMerchant_Id(Long merchantId); - List findByStatus(Byte status); + List findByStatus(ActivityStatus status); } diff --git a/src/main/java/com/xjhs/findmemerchant/repository/BankCardRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/BankCardRepository.java index 2ab0277..7c2df2b 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/BankCardRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/BankCardRepository.java @@ -8,18 +8,18 @@ import java.util.List; import java.util.Optional; /** - * 商户银行卡仓储 + * 商家银行卡仓储 */ public interface BankCardRepository extends JpaRepository, JpaSpecificationExecutor { /** - * 按商户查询所有银行卡 + * 按商家查询所有银行卡 */ - List findByMerchantId(Long merchantId); + List findByMerchant_Id(Long merchantId); /** - * 查询商户的默认卡 + * 查询商家的默认卡 */ - Optional findByMerchantIdAndIsDefaultTrue(Long merchantId); + Optional findByMerchant_IdAndIsDefaultTrue(Long merchantId); } diff --git a/src/main/java/com/xjhs/findmemerchant/repository/BusinessLicenseRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/BusinessLicenseRepository.java index 3d0aa20..5dcf65a 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/BusinessLicenseRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/BusinessLicenseRepository.java @@ -10,7 +10,7 @@ import java.util.Optional; public interface BusinessLicenseRepository extends JpaRepository, JpaSpecificationExecutor { - List findByMerchantId(Long merchantId); + List findByMerchant_Id(Long merchantId); - Optional findTopByMerchantIdOrderByCreatedAtDesc(Long merchantId); + Optional findTopByMerchant_IdOrderByCreatedAtDesc(Long merchantId); } diff --git a/src/main/java/com/xjhs/findmemerchant/repository/BusinessPeriodRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/BusinessPeriodRepository.java index 6222679..0980b1b 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/BusinessPeriodRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/BusinessPeriodRepository.java @@ -15,10 +15,10 @@ public interface BusinessPeriodRepository extends JpaRepository findByStoreId(Long storeId); + List findByStore_Id(Long storeId); /** * 按门店 + 周几查询启用的时间段 */ - List findByStoreIdAndDayOfWeekAndIsEnabledTrue(Long storeId, Byte dayOfWeek); + List findByStore_IdAndDayOfWeekAndIsEnabledTrue(Long storeId, Byte dayOfWeek); } diff --git a/src/main/java/com/xjhs/findmemerchant/repository/CouponCodeRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/CouponCodeRepository.java index 3ec2a84..2d21ff2 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/CouponCodeRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/CouponCodeRepository.java @@ -16,12 +16,12 @@ public interface CouponCodeRepository extends JpaRepository, /** * 按券模板查询券码 */ - List findByCouponId(Long couponId); + List findByCoupon_Id(Long couponId); /** * 按会员查询券码 */ - List findByMemberId(Long memberId); + List findByMember_Id(Long memberId); /** * 按券码查询 diff --git a/src/main/java/com/xjhs/findmemerchant/repository/CouponRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/CouponRepository.java index 42e65a4..6638486 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/CouponRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/CouponRepository.java @@ -1,6 +1,7 @@ package com.xjhs.findmemerchant.repository; import com.xjhs.findmemerchant.entity.Coupon; +import com.xjhs.findmemerchant.types.CouponStatus; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; @@ -12,17 +13,17 @@ import java.util.Optional; public interface CouponRepository extends JpaRepository { /** - * 按商户查询优惠券 + * 按商家查询优惠券 */ - List findByMerchantId(Long merchantId); + List findByMerchant_Id(Long merchantId); /** * 按状态查询优惠券 */ - List findByStatus(Byte status); + List findByStatus(CouponStatus status); /** - * 按ID + 商户ID 查询(防越权) + * 按ID + 商家ID 查询(防越权) */ - Optional findByIdAndMerchantId(Long id, Long merchantId); + Optional findByIdAndMerchant_Id(Long id, Long merchantId); } diff --git a/src/main/java/com/xjhs/findmemerchant/repository/CouponStoreRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/CouponStoreRepository.java index fcb1c0f..8e762d8 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/CouponStoreRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/CouponStoreRepository.java @@ -12,9 +12,9 @@ import java.util.Optional; */ public interface CouponStoreRepository extends JpaSpecificationExecutor,JpaRepository { - List findByCouponId(Long couponId); + List findByCoupon_Id(Long couponId); - List findByStoreId(Long storeId); + List findByStore_Id(Long storeId); - Optional findByCouponIdAndStoreId(Long couponId, Long storeId); + Optional findByCoupon_IdAndStore_Id(Long couponId, Long storeId); } diff --git a/src/main/java/com/xjhs/findmemerchant/repository/EmployeeRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/EmployeeRepository.java index eb8dd18..042e926 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/EmployeeRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/EmployeeRepository.java @@ -13,18 +13,5 @@ import java.util.Optional; public interface EmployeeRepository extends JpaRepository, JpaSpecificationExecutor { - /** - * 按商户查询员工 - */ - List findByMerchantId(Long merchantId); - - /** - * 按门店查询员工 - */ List findByStoreId(Long storeId); - - /** - * 按手机号与商户查询(防止跨商户重复) - */ - Optional findByMerchantIdAndPhone(Long merchantId, String phone); } diff --git a/src/main/java/com/xjhs/findmemerchant/repository/HealthCertificateRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/HealthCertificateRepository.java index 53448ae..99ba8e9 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/HealthCertificateRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/HealthCertificateRepository.java @@ -9,7 +9,7 @@ import java.util.List; public interface HealthCertificateRepository extends JpaRepository, JpaSpecificationExecutor { - List findByStoreId(Long storeId); + List findByStore_Id(Long storeId); - List findByEmployeeId(Long employeeId); + List findByEmployee_Id(Long employeeId); } diff --git a/src/main/java/com/xjhs/findmemerchant/repository/MemberRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/MemberRepository.java index 27bbbf8..87edaf7 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/MemberRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/MemberRepository.java @@ -14,12 +14,12 @@ public interface MemberRepository extends JpaRepository, JpaSpecificationExecutor { /** - * 按商户查询会员 + * 按商家查询会员 */ - List findByMerchantId(Long merchantId); + List findByMerchant_Id(Long merchantId); /** - * 按商户 + 手机号查询(唯一) + * 按商家 + 手机号查询(唯一) */ Optional findByPhone(String phone); diff --git a/src/main/java/com/xjhs/findmemerchant/repository/MerchantRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/MerchantRepository.java index 8563793..0a51aaa 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/MerchantRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/MerchantRepository.java @@ -7,7 +7,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import java.util.Optional; /** - * 商户仓储 + * 商家仓储 */ public interface MerchantRepository extends JpaRepository, JpaSpecificationExecutor { diff --git a/src/main/java/com/xjhs/findmemerchant/repository/MessageRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/MessageRepository.java index 9029830..79989a0 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/MessageRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/MessageRepository.java @@ -13,17 +13,14 @@ public interface MessageRepository extends JpaRepository, JpaSpecificationExecutor { /** - * 按商户查询消息 + * 按商家查询消息 */ - List findByMerchantId(Long merchantId); + List findByMerchant_Id(Long merchantId); - /** - * 按商户 + 是否已读查询 - */ - List findByMerchantIdAndIsRead(Long merchantId, Byte isRead); + List findByMerchant_IdAndIsRead(Long merchantId, Boolean isRead); /** * 统计未读消息数量 */ - long countByMerchantIdAndIsRead(Long merchantId, Byte isRead); + long countByMerchant_IdAndIsRead(Long merchantId, Boolean isRead); } diff --git a/src/main/java/com/xjhs/findmemerchant/repository/OrderItemRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/OrderItemRepository.java index efb5502..138e3c9 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/OrderItemRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/OrderItemRepository.java @@ -15,10 +15,7 @@ public interface OrderItemRepository extends JpaRepository, /** * 按订单查询订单明细 */ - List findByOrderId(Long orderId); + List findByOrder_Id(Long orderId); - /** - * 按商品查询订单明细 - */ List findByProductId(Long productId); } diff --git a/src/main/java/com/xjhs/findmemerchant/repository/OrderRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/OrderRepository.java index 3894551..f32769e 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/OrderRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/OrderRepository.java @@ -21,10 +21,7 @@ public interface OrderRepository extends JpaRepository, /** * 按门店查询订单 */ - List findByStoreId(Long storeId); + List findByStore_Id(Long storeId); - /** - * 按会员查询订单 - */ - List findByMemberId(Long memberId); + List findByMember_Id(Long memberId); } diff --git a/src/main/java/com/xjhs/findmemerchant/repository/ProductCategoryRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/ProductCategoryRepository.java index 9168284..59f6448 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/ProductCategoryRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/ProductCategoryRepository.java @@ -13,12 +13,12 @@ public interface ProductCategoryRepository extends JpaRepository { /** - * 按商户查询所有分类 + * 按商家查询所有分类 */ - List findByMerchantId(Long merchantId); + List findByMerchant_Id(Long merchantId); /** - * 查询某商户下指定父分类的子分类 + * 查询某商家下指定父分类的子分类 */ List findByMerchantIdAndParentId(Long merchantId, Long parentId); } diff --git a/src/main/java/com/xjhs/findmemerchant/repository/ProductRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/ProductRepository.java index b258cd2..77a861f 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/ProductRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/ProductRepository.java @@ -1,6 +1,7 @@ package com.xjhs.findmemerchant.repository; import com.xjhs.findmemerchant.entity.Product; +import com.xjhs.findmemerchant.types.ProductStatus; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; @@ -12,10 +13,7 @@ import java.util.List; public interface ProductRepository extends JpaRepository, JpaSpecificationExecutor { - /** - * 按商户查询商品 - */ - List findByMerchantId(Long merchantId); + List findByMerchant_Id(Long merchantId); /** * 按门店查询商品 @@ -30,5 +28,5 @@ public interface ProductRepository extends JpaRepository, /** * 按状态查询商品 */ - List findByStatus(Byte status); + List findByStatus(ProductStatus status); } diff --git a/src/main/java/com/xjhs/findmemerchant/repository/ReviewRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/ReviewRepository.java index 9361b40..79a70cd 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/ReviewRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/ReviewRepository.java @@ -12,7 +12,7 @@ import java.util.List; public interface ReviewRepository extends JpaRepository, JpaSpecificationExecutor { - List findByMerchantId(Long merchantId); + List findByMerchant_Id(Long merchantId); List findByStoreId(Long storeId); diff --git a/src/main/java/com/xjhs/findmemerchant/repository/SettlementRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/SettlementRepository.java index 841fac9..275b644 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/SettlementRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/SettlementRepository.java @@ -19,7 +19,7 @@ public interface SettlementRepository extends JpaRepository, Optional findBySettlementNo(String settlementNo); /** - * 按商户查询结算记录 + * 按商家查询结算记录 */ List findByMerchantId(Long merchantId); } diff --git a/src/main/java/com/xjhs/findmemerchant/repository/StoreRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/StoreRepository.java index 947b319..2ee48b0 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/StoreRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/StoreRepository.java @@ -14,7 +14,7 @@ public interface StoreRepository extends JpaRepository, JpaSpecificationExecutor { /** - * 按商户查询门店 + * 按商家查询门店 */ List findByMerchantId(Long merchantId); diff --git a/src/main/java/com/xjhs/findmemerchant/repository/TransactionRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/TransactionRepository.java index 7b58b6d..ef1d01b 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/TransactionRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/TransactionRepository.java @@ -18,7 +18,7 @@ public interface TransactionRepository extends JpaRepository, List findByWalletId(Long walletId); /** - * 按商户查询流水 + * 按商家查询流水 */ List findByMerchantId(Long merchantId); } diff --git a/src/main/java/com/xjhs/findmemerchant/repository/WalletRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/WalletRepository.java index f2fb7df..515f6b1 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/WalletRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/WalletRepository.java @@ -7,13 +7,13 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import java.util.Optional; /** - * 商户钱包仓储 + * 商家钱包仓储 */ public interface WalletRepository extends JpaRepository, JpaSpecificationExecutor { /** - * 根据商户ID查询钱包(唯一) + * 根据商家ID查询钱包(唯一) */ Optional findByMerchantId(Long merchantId); } diff --git a/src/main/java/com/xjhs/findmemerchant/repository/WithdrawalRepository.java b/src/main/java/com/xjhs/findmemerchant/repository/WithdrawalRepository.java index b97b73e..0754d57 100644 --- a/src/main/java/com/xjhs/findmemerchant/repository/WithdrawalRepository.java +++ b/src/main/java/com/xjhs/findmemerchant/repository/WithdrawalRepository.java @@ -13,7 +13,7 @@ public interface WithdrawalRepository extends JpaRepository, JpaSpecificationExecutor { /** - * 按商户查提现记录 + * 按商家查提现记录 */ List findByMerchantId(Long merchantId); diff --git a/src/main/java/com/xjhs/findmemerchant/security/JwtAuthenticationFilter.java b/src/main/java/com/xjhs/findmemerchant/security/JwtAuthenticationFilter.java index 6c63e85..fd97ad4 100644 --- a/src/main/java/com/xjhs/findmemerchant/security/JwtAuthenticationFilter.java +++ b/src/main/java/com/xjhs/findmemerchant/security/JwtAuthenticationFilter.java @@ -29,7 +29,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { private SmsAuthenticationToken getAuthenticationToken(String phone) throws Exception { - // 手机号查商户 + // 手机号查商家 var merchant = merchantRepository.findByPhone(phone).orElse(null); if(merchant != null){ var authorities = List.of(new SimpleGrantedAuthority("ROLE_USER")); diff --git a/src/main/java/com/xjhs/findmemerchant/security/JwtTokenService.java b/src/main/java/com/xjhs/findmemerchant/security/JwtTokenService.java index bb462dc..d602e27 100644 --- a/src/main/java/com/xjhs/findmemerchant/security/JwtTokenService.java +++ b/src/main/java/com/xjhs/findmemerchant/security/JwtTokenService.java @@ -14,7 +14,7 @@ import java.nio.charset.StandardCharsets; public class JwtTokenService { // 建议改成配置:application.yml 里 - private final String secret = "secret-key-1234567890"; + private final String secret = "secret-key-123456789012345678901234567890"; private final long expireMillis = 30 * 24 * 60 * 60 * 1000L; // 30 天 /** @@ -33,7 +33,6 @@ public class JwtTokenService { )); jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA256); - return jws.getCompactSerialization(); } diff --git a/src/main/java/com/xjhs/findmemerchant/security/sms/SmsAuthenticationProvider.java b/src/main/java/com/xjhs/findmemerchant/security/sms/SmsAuthenticationProvider.java index 433cb63..199089a 100644 --- a/src/main/java/com/xjhs/findmemerchant/security/sms/SmsAuthenticationProvider.java +++ b/src/main/java/com/xjhs/findmemerchant/security/sms/SmsAuthenticationProvider.java @@ -29,7 +29,7 @@ public class SmsAuthenticationProvider implements AuthenticationProvider { } catch (Exception e) { throw new UsernameNotFoundException(e.getMessage()); } - // 手机号查商户 + // 手机号查商家 var merchant = merchantRepository.findByPhone(phone).orElse(null); if(merchant != null){ var authorities = List.of(new SimpleGrantedAuthority("ROLE_USER")); diff --git a/src/main/java/com/xjhs/findmemerchant/service/MerchantService.java b/src/main/java/com/xjhs/findmemerchant/service/MerchantService.java index b3ef525..7f3e11b 100644 --- a/src/main/java/com/xjhs/findmemerchant/service/MerchantService.java +++ b/src/main/java/com/xjhs/findmemerchant/service/MerchantService.java @@ -20,9 +20,9 @@ public class MerchantService { public final MerchantMapper merchantMapper; /** - * 根据商户id获取商户信息 - * @param id 商户id - * @return 商户信息 + * 根据商家id获取商家信息 + * @param id 商家id + * @return 商家信息 */ public Optional getById(Long id) { return this.merchantRepository.findById(id) @@ -30,25 +30,25 @@ public class MerchantService { } /** - * 更新商户信息 - * @param id 商户id + * 更新商家信息 + * @param id 商家id * @param merchantUpdateVo 更新信息 - * @return 商户信息 + * @return 商家信息 * @throws Exception 错误信息 */ @Transactional(rollbackOn = Exception.class) public MerchantDto updateMerchant(Long id, MerchantUpdateVo merchantUpdateVo) throws Exception { var entity = this.merchantRepository.findById(id) - .orElseThrow(() -> new Exception("商户信息不存在")); + .orElseThrow(() -> new Exception("商家信息不存在")); entity.setRealName(merchantUpdateVo.getRealName()); this.merchantRepository.save(entity); return this.merchantMapper.toDto(entity); } /** - * 商户身份证信息验证 + * 商家身份证信息验证 * - * @param id 商户id + * @param id 商家id * @param idCardNo 身份证号 * @param realName 真实姓名 * @throws Exception 验证异常信息 @@ -56,9 +56,9 @@ public class MerchantService { @Transactional(rollbackOn = Exception.class) public MerchantDto verifyMerchant(Long id, String idCardNo, String realName) throws Exception { var entity = this.merchantRepository.findById(id) - .orElseThrow(() -> new Exception("商户信息不存在")); + .orElseThrow(() -> new Exception("商家信息不存在")); if (entity.getAuthStatus() == AuthStatus.VERIFIED) { - throw new Exception("商户信息已认证"); + throw new Exception("商家信息已认证"); } this.idCardVerify(idCardNo, realName); entity.setAuthStatus(AuthStatus.VERIFIED); diff --git a/src/main/java/com/xjhs/findmemerchant/service/StoreService.java b/src/main/java/com/xjhs/findmemerchant/service/StoreService.java index e6ac56f..acdc4b9 100644 --- a/src/main/java/com/xjhs/findmemerchant/service/StoreService.java +++ b/src/main/java/com/xjhs/findmemerchant/service/StoreService.java @@ -23,7 +23,7 @@ public class StoreService { * 分页查询 * * @param pageable 分页参数 - * @param merchantId 商户id + * @param merchantId 商家id * @return 分页数据 */ public Page findPage(Pageable pageable, Long merchantId) { diff --git a/src/main/java/com/xjhs/findmemerchant/types/ActivityStatus.java b/src/main/java/com/xjhs/findmemerchant/types/ActivityStatus.java index 7432179..a0d47a7 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/ActivityStatus.java +++ b/src/main/java/com/xjhs/findmemerchant/types/ActivityStatus.java @@ -10,10 +10,21 @@ import lombok.Getter; @Getter @AllArgsConstructor public enum ActivityStatus { - + /** + * 未开始 + */ NOT_STARTED("未开始"), + /** + * 进行中 + */ ONGOING("进行中"), + /** + * 已结束 + */ ENDED("已结束"), + /** + * 已下架 + */ OFFLINE("已下架"); private final String desc; diff --git a/src/main/java/com/xjhs/findmemerchant/types/ActivityType.java b/src/main/java/com/xjhs/findmemerchant/types/ActivityType.java index 5d184ee..c07b365 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/ActivityType.java +++ b/src/main/java/com/xjhs/findmemerchant/types/ActivityType.java @@ -7,8 +7,17 @@ import lombok.Getter; @AllArgsConstructor public enum ActivityType { + /** + * 团购 + */ GROUP_BUY("团购"), + /** + * 折扣 + */ DISCOUNT("折扣"), + /** + * 限时优惠 + */ FLASH_SALE("限时优惠"); private final String desc; diff --git a/src/main/java/com/xjhs/findmemerchant/types/AuthStatus.java b/src/main/java/com/xjhs/findmemerchant/types/AuthStatus.java index faecfb9..4c817cd 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/AuthStatus.java +++ b/src/main/java/com/xjhs/findmemerchant/types/AuthStatus.java @@ -4,14 +4,20 @@ import lombok.AllArgsConstructor; import lombok.Getter; /** - * 商户实名认证状态 + * 商家实名认证状态 * 0-未认证 1-已认证 */ @Getter @AllArgsConstructor public enum AuthStatus { + /** + * 未认证 + */ NOT_VERIFIED("未认证"), + /** + * 已认证 + */ VERIFIED("已认证"); private final String desc; diff --git a/src/main/java/com/xjhs/findmemerchant/types/BusinessLicenseStatus.java b/src/main/java/com/xjhs/findmemerchant/types/BusinessLicenseStatus.java index fc60b92..6643d75 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/BusinessLicenseStatus.java +++ b/src/main/java/com/xjhs/findmemerchant/types/BusinessLicenseStatus.java @@ -11,8 +11,17 @@ import lombok.Getter; @AllArgsConstructor public enum BusinessLicenseStatus { + /** + * 待审核 + */ PENDING("待审核"), + /** + * 已通过 + */ APPROVED("已通过"), + /** + * 已拒绝 + */ REJECTED("已拒绝"); private final String desc; diff --git a/src/main/java/com/xjhs/findmemerchant/types/BusinessStatus.java b/src/main/java/com/xjhs/findmemerchant/types/BusinessStatus.java index 3d00c4f..e8622cc 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/BusinessStatus.java +++ b/src/main/java/com/xjhs/findmemerchant/types/BusinessStatus.java @@ -11,8 +11,17 @@ import lombok.Getter; @AllArgsConstructor public enum BusinessStatus { + /** + * 已打烊 + */ CLOSED("已打烊"), // 0 + /** + * 营业中 + */ OPEN("营业中"), // 1 + /** + * 临时打烊 + */ TEMP_CLOSED("临时打烊"); // 2 private final String desc; diff --git a/src/main/java/com/xjhs/findmemerchant/types/CommonStatus.java b/src/main/java/com/xjhs/findmemerchant/types/CommonStatus.java index 8e1baf2..a98d6a2 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/CommonStatus.java +++ b/src/main/java/com/xjhs/findmemerchant/types/CommonStatus.java @@ -11,7 +11,13 @@ import lombok.Getter; @AllArgsConstructor public enum CommonStatus { + /** + * 禁用 + */ DISABLED("禁用"), + /** + * 启用 + */ ENABLED("启用"); private final String desc; diff --git a/src/main/java/com/xjhs/findmemerchant/types/CouponCodeStatus.java b/src/main/java/com/xjhs/findmemerchant/types/CouponCodeStatus.java index d037060..bb3e650 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/CouponCodeStatus.java +++ b/src/main/java/com/xjhs/findmemerchant/types/CouponCodeStatus.java @@ -11,13 +11,25 @@ import lombok.Getter; @AllArgsConstructor public enum CouponCodeStatus { - UNCLAIMED("未领取", (byte) 0), - CLAIMED("已领取", (byte) 1), - VERIFIED("已核销", (byte) 2), - EXPIRED("已过期", (byte) 3); + /** + * 未领取 + */ + UNCLAIMED("未领取"), + /** + * 已领取 + */ + CLAIMED("已领取"), + /** + * 已核销 + */ + VERIFIED("已核销"), + /** + * 已过期 + */ + EXPIRED("已过期"); private final String desc; - private final byte code; + public static CouponCodeStatus fromCode(Byte code) { if (code == null) return null; @@ -30,14 +42,5 @@ public enum CouponCodeStatus { }; } - public byte code() { - return code; - } - /** - * 为了 isClaimed 方便比较,给一个 int 形式 - */ - public int getCodeValue() { - return code; - } } diff --git a/src/main/java/com/xjhs/findmemerchant/types/CouponStatus.java b/src/main/java/com/xjhs/findmemerchant/types/CouponStatus.java index 2fd608f..f9ad8fb 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/CouponStatus.java +++ b/src/main/java/com/xjhs/findmemerchant/types/CouponStatus.java @@ -11,8 +11,17 @@ import lombok.Getter; @AllArgsConstructor public enum CouponStatus { + /** + * 下架 + */ OFFLINE("下架"), + /** + * 进行中 + */ ONLINE("进行中"), + /** + * 已结束 + */ ENDED("已结束"); private final String desc; diff --git a/src/main/java/com/xjhs/findmemerchant/types/CouponType.java b/src/main/java/com/xjhs/findmemerchant/types/CouponType.java index 800c6d7..7a4118a 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/CouponType.java +++ b/src/main/java/com/xjhs/findmemerchant/types/CouponType.java @@ -11,9 +11,21 @@ import lombok.Getter; @AllArgsConstructor public enum CouponType { + /** + * 折扣券 + */ DISCOUNT("折扣券"), + /** + * 满减券 + */ REDUCE("满减券"), + /** + * 现金券 + */ CASH("现金券"), + /** + * 赠品券 + */ GIFT("赠品券"); private final String desc; diff --git a/src/main/java/com/xjhs/findmemerchant/types/HealthCertificateStatus.java b/src/main/java/com/xjhs/findmemerchant/types/HealthCertificateStatus.java index 754970e..477ae33 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/HealthCertificateStatus.java +++ b/src/main/java/com/xjhs/findmemerchant/types/HealthCertificateStatus.java @@ -11,8 +11,17 @@ import lombok.Getter; @AllArgsConstructor public enum HealthCertificateStatus { + /** + * 待审核 + */ PENDING("待审核"), + /** + * 有效 + */ VALID("有效"), + /** + * 已过期 + */ EXPIRED("已过期"); private final String desc; diff --git a/src/main/java/com/xjhs/findmemerchant/types/MessageType.java b/src/main/java/com/xjhs/findmemerchant/types/MessageType.java index 70378e8..5ed8cd9 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/MessageType.java +++ b/src/main/java/com/xjhs/findmemerchant/types/MessageType.java @@ -11,8 +11,17 @@ import lombok.Getter; @AllArgsConstructor public enum MessageType { + /** + * 系统通知 + */ SYSTEM("系统通知"), + /** + * 活动提醒 + */ ACTIVITY("活动提醒"), + /** + * 私信 + */ PRIVATE("私信"); private final String desc; diff --git a/src/main/java/com/xjhs/findmemerchant/types/OrderStatus.java b/src/main/java/com/xjhs/findmemerchant/types/OrderStatus.java index 33e3900..3f872ec 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/OrderStatus.java +++ b/src/main/java/com/xjhs/findmemerchant/types/OrderStatus.java @@ -11,10 +11,25 @@ import lombok.Getter; @AllArgsConstructor public enum OrderStatus { + /** + * 待支付 + */ PENDING("待支付"), // 1 + /** + * 已支付 + */ PAID("已支付"), // 2 + /** + * 已完成 + */ COMPLETED("已完成"), // 3 + /** + * 已退款 + */ REFUNDED("已退款"), // 4 + /** + * 已取消 + */ CANCELLED("已取消"); // 5 private final String desc; diff --git a/src/main/java/com/xjhs/findmemerchant/types/ProductStatus.java b/src/main/java/com/xjhs/findmemerchant/types/ProductStatus.java index df5d2eb..4f0f015 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/ProductStatus.java +++ b/src/main/java/com/xjhs/findmemerchant/types/ProductStatus.java @@ -11,7 +11,13 @@ import lombok.Getter; @AllArgsConstructor public enum ProductStatus { + /** + * 已下架 + */ OFF_SALE("已下架"), + /** + * 已上架 + */ ON_SALE("已上架"); private final String desc; diff --git a/src/main/java/com/xjhs/findmemerchant/types/ReviewStatus.java b/src/main/java/com/xjhs/findmemerchant/types/ReviewStatus.java index c726e36..b5fcd6d 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/ReviewStatus.java +++ b/src/main/java/com/xjhs/findmemerchant/types/ReviewStatus.java @@ -11,7 +11,13 @@ import lombok.Getter; @AllArgsConstructor public enum ReviewStatus { + /** + * 隐藏 + */ HIDDEN("隐藏"), + /** + * 正常 + */ NORMAL("正常"); private final String desc; diff --git a/src/main/java/com/xjhs/findmemerchant/types/SettlementStatus.java b/src/main/java/com/xjhs/findmemerchant/types/SettlementStatus.java index 9909634..d9caf44 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/SettlementStatus.java +++ b/src/main/java/com/xjhs/findmemerchant/types/SettlementStatus.java @@ -11,7 +11,13 @@ import lombok.Getter; @AllArgsConstructor public enum SettlementStatus { + /** + * 待结算 + */ PENDING("待结算"), + /** + * 已结算 + */ SETTLED("已结算"); private final String desc; diff --git a/src/main/java/com/xjhs/findmemerchant/types/SettlementType.java b/src/main/java/com/xjhs/findmemerchant/types/SettlementType.java index bddeaaf..43536a7 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/SettlementType.java +++ b/src/main/java/com/xjhs/findmemerchant/types/SettlementType.java @@ -11,7 +11,13 @@ import lombok.Getter; @AllArgsConstructor public enum SettlementType { + /** + * 日结 + */ DAILY("日结"), + /** + * 周结 + */ WEEKLY("周结"); private final String desc; diff --git a/src/main/java/com/xjhs/findmemerchant/types/StoreAuditStatus.java b/src/main/java/com/xjhs/findmemerchant/types/StoreAuditStatus.java index 708e9d2..1f8fe0b 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/StoreAuditStatus.java +++ b/src/main/java/com/xjhs/findmemerchant/types/StoreAuditStatus.java @@ -11,8 +11,17 @@ import lombok.Getter; @AllArgsConstructor public enum StoreAuditStatus { + /** + * 待审核 + */ PENDING("待审核"), + /** + * 已通过 + */ APPROVED("已通过"), + /** + * 已拒绝 + */ REJECTED("已拒绝"); private final String desc; diff --git a/src/main/java/com/xjhs/findmemerchant/types/TransactionType.java b/src/main/java/com/xjhs/findmemerchant/types/TransactionType.java index 5f333f4..50b7f86 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/TransactionType.java +++ b/src/main/java/com/xjhs/findmemerchant/types/TransactionType.java @@ -11,10 +11,25 @@ import lombok.Getter; @AllArgsConstructor public enum TransactionType { + /** + * 收入 + */ INCOME("收入"), // 1 + /** + * 支出 + */ EXPENSE("支出"), // 2 + /** + * 冻结 + */ FREEZE("冻结"), // 3 + /** + * 解冻 + */ UNFREEZE("解冻"), // 4 + /** + * 提现 + */ WITHDRAW("提现"); // 5 private final String desc; diff --git a/src/main/java/com/xjhs/findmemerchant/types/WithdrawalStatus.java b/src/main/java/com/xjhs/findmemerchant/types/WithdrawalStatus.java index d2cb964..400a6f1 100644 --- a/src/main/java/com/xjhs/findmemerchant/types/WithdrawalStatus.java +++ b/src/main/java/com/xjhs/findmemerchant/types/WithdrawalStatus.java @@ -11,10 +11,25 @@ import lombok.Getter; @AllArgsConstructor public enum WithdrawalStatus { + /** + * 待审核 + */ PENDING("待审核"), + /** + * 处理中 + */ PROCESSING("处理中"), + /** + * 已完成 + */ COMPLETED("已完成"), + /** + * 已拒绝 + */ REJECTED("已拒绝"), + /** + * 已取消 + */ CANCELLED("已取消"); private final String desc; diff --git a/src/main/java/com/xjhs/findmemerchant/vo/auth/SmsLoginVo.java b/src/main/java/com/xjhs/findmemerchant/vo/auth/SmsLoginVo.java index 97a1383..9d38bb3 100644 --- a/src/main/java/com/xjhs/findmemerchant/vo/auth/SmsLoginVo.java +++ b/src/main/java/com/xjhs/findmemerchant/vo/auth/SmsLoginVo.java @@ -1,4 +1,4 @@ -package com.xjhs.findmemerchant.security.sms; +package com.xjhs.findmemerchant.vo.auth; import jakarta.validation.constraints.NotBlank; diff --git a/src/main/java/com/xjhs/findmemerchant/vo/auth/SmsSendVo.java b/src/main/java/com/xjhs/findmemerchant/vo/auth/SmsSendVo.java index b44c38b..2c4c7da 100644 --- a/src/main/java/com/xjhs/findmemerchant/vo/auth/SmsSendVo.java +++ b/src/main/java/com/xjhs/findmemerchant/vo/auth/SmsSendVo.java @@ -1,4 +1,4 @@ -package com.xjhs.findmemerchant.security.sms; +package com.xjhs.findmemerchant.vo.auth; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; diff --git a/src/main/java/com/xjhs/findmemerchant/vo/member/EmployeeCreateVo.java b/src/main/java/com/xjhs/findmemerchant/vo/member/EmployeeCreateVo.java index ff98b2f..e412ccc 100644 --- a/src/main/java/com/xjhs/findmemerchant/vo/member/EmployeeCreateVo.java +++ b/src/main/java/com/xjhs/findmemerchant/vo/member/EmployeeCreateVo.java @@ -1,4 +1,37 @@ package com.xjhs.findmemerchant.vo.member; +import com.xjhs.findmemerchant.common.jackson.JsonLong; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; +import lombok.Data; + +@Data public class EmployeeCreateVo { + /** + * 员工姓名 + */ + @NotBlank(message = "name 不能为空") + @Size(min = 2, max = 50, message = "name 长度必须在 2~50 之间") + private String name; + /** + * 员工手机号 + */ + @NotBlank(message = "phone 不能为空") + @Pattern(regexp = "^\\d{11}$", message = "phone 必须是 11 位数字") + private String phone; + /** + * 角色id(前端传递请使用 string 类型) + */ + @NotNull(message = "roleId 不能为空") + @JsonLong + private Long roleId; + /** + * 角色id(前端传递请使用 string 类型) + */ + @NotNull(message = "storeId 不能为空") + @JsonLong + @Deprecated(since = "多余的") + private Long storeId; } diff --git a/src/main/java/com/xjhs/findmemerchant/vo/member/EmployeeUpdateVo.java b/src/main/java/com/xjhs/findmemerchant/vo/member/EmployeeUpdateVo.java index b09f465..64bcfc2 100644 --- a/src/main/java/com/xjhs/findmemerchant/vo/member/EmployeeUpdateVo.java +++ b/src/main/java/com/xjhs/findmemerchant/vo/member/EmployeeUpdateVo.java @@ -1,4 +1,22 @@ package com.xjhs.findmemerchant.vo.member; +import com.xjhs.findmemerchant.common.jackson.JsonLong; +import jakarta.validation.constraints.Size; +import lombok.Data; + +/** + * 员工更新参数 + */ +@Data public class EmployeeUpdateVo { + /** + * 员工姓名 + */ + @Size(min = 2,max = 50) + private String name; + /** + * 员工角色(前端传递string类型) + */ + @JsonLong + private Long roleId; } diff --git a/src/main/java/com/xjhs/findmemerchant/vo/merchant/MerchantUpdateVo.java b/src/main/java/com/xjhs/findmemerchant/vo/merchant/MerchantUpdateVo.java index 053a388..bb5dfde 100644 --- a/src/main/java/com/xjhs/findmemerchant/vo/merchant/MerchantUpdateVo.java +++ b/src/main/java/com/xjhs/findmemerchant/vo/merchant/MerchantUpdateVo.java @@ -3,7 +3,7 @@ package com.xjhs.findmemerchant.vo.merchant; import lombok.Data; /** - * 商户信息更新对象 + * 商家信息更新对象 */ @Data public class MerchantUpdateVo { diff --git a/src/main/java/com/xjhs/findmemerchant/vo/merchant/MerchantVerifyVo.java b/src/main/java/com/xjhs/findmemerchant/vo/merchant/MerchantVerifyVo.java index 0d6ef3f..22ed468 100644 --- a/src/main/java/com/xjhs/findmemerchant/vo/merchant/MerchantVerifyVo.java +++ b/src/main/java/com/xjhs/findmemerchant/vo/merchant/MerchantVerifyVo.java @@ -5,7 +5,7 @@ import jakarta.validation.constraints.Size; import lombok.Data; /** - * 商户验证参数 + * 商家验证参数 */ @Data public class MerchantVerifyVo { diff --git a/src/main/java/com/xjhs/findmemerchant/vo/store/BusinessPeriodVo.java b/src/main/java/com/xjhs/findmemerchant/vo/store/BusinessPeriodVo.java index cacffe9..e6fc08b 100644 --- a/src/main/java/com/xjhs/findmemerchant/vo/store/BusinessPeriodVo.java +++ b/src/main/java/com/xjhs/findmemerchant/vo/store/BusinessPeriodVo.java @@ -1,4 +1,30 @@ package com.xjhs.findmemerchant.vo.store; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +@Data public class BusinessPeriodVo { + /** + * 周几,周天0,... + */ + @Size(max = 6) + @NotNull + private Integer dayOfWeek; + /** + * 开始营业时间 HH:mm 格式 + */ + @NotBlank + private String startTime; + /** + * 结束营业时间 HH:mm 格式 + */ + @NotBlank + private String endTime; + /** + * 是否启用 + */ + private Boolean enabled; } diff --git a/src/main/java/com/xjhs/findmemerchant/vo/store/StoreBusinessStatusUpdateVo.java b/src/main/java/com/xjhs/findmemerchant/vo/store/StoreBusinessStatusUpdateVo.java index 5f51555..459133b 100644 --- a/src/main/java/com/xjhs/findmemerchant/vo/store/StoreBusinessStatusUpdateVo.java +++ b/src/main/java/com/xjhs/findmemerchant/vo/store/StoreBusinessStatusUpdateVo.java @@ -1,4 +1,24 @@ package com.xjhs.findmemerchant.vo.store; +import com.xjhs.findmemerchant.types.BusinessStatus; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data public class StoreBusinessStatusUpdateVo { + /** + * 营业状态 + */ + @NotNull + private BusinessStatus businessStatus; + + /** + * 临时关闭原因(可选;temp_closed 时使用) + */ + private String reason; + + /** + * 重新营业时间(RFC3339 字符串,可选) + */ + private String until; } diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index e69de29..074d7f7 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -0,0 +1,14 @@ + +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://192.168.1.20:3306/findme-merchant?useSSL=false&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true + username: root + password: 123456 + data: + redis: + host: 192.168.1.20 + port: 6379 + password: 123456 + database: 0 + timeout: 3s \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index e69de29..8c6d574 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -0,0 +1,33 @@ +spring: + profiles: + active: default,local + application: + name: findme-backend-merchant + main: + keep-alive: true + threads: + virtual: + enabled: true + jpa: + generate-ddl: true + hibernate: + ddl-auto: update + show-sql: true + open-in-view: true + properties: + hibernate: + dialect: org.hibernate.dialect.MySQLDialect + ddl-auto: update + format_sql: true + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://${MYSQL_HOST:192.168.1.20}:${MYSQL_PORT:3306}/findme-merchant?useSSL=false&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true + username: ${MYSQL_USER:root} + password: ${MYSQL_PASS:123456} + data: + redis: + host: ${REDIS_HOST:192.168.1.20} + port: ${REDIS_PORT:6379} + password: ${REDIS_PASS:123456} + database: 0 + timeout: 3s \ No newline at end of file