diff --git a/pom.xml b/pom.xml index 01bb32e..a455028 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ 21 UTF-8 - 3.5.5 + 3.5.7 8.5.7 0.12.3 5.8.26 @@ -86,7 +86,7 @@ com.mysql mysql-connector-j - runtime + 8.2.0 @@ -149,12 +149,6 @@ spring-boot-starter-test test - - org.springframework.boot - spring-boot-devtools - runtime - true - diff --git a/src/main/java/com/aida/seller/AidaSellerApplication.java b/src/main/java/com/aida/seller/AidaSellerApplication.java index a2e5e6e..7195cc5 100644 --- a/src/main/java/com/aida/seller/AidaSellerApplication.java +++ b/src/main/java/com/aida/seller/AidaSellerApplication.java @@ -5,11 +5,13 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.ComponentScan; @SpringBootApplication @MapperScan("com.aida.seller.module.*.mapper") @EnableFeignClients @EnableDiscoveryClient +@ComponentScan(basePackages = "com.aida.seller") public class AidaSellerApplication { public static void main(String[] args) { diff --git a/src/main/java/com/aida/seller/config/MyBatisPlusConfig.java b/src/main/java/com/aida/seller/config/MyBatisPlusConfig.java deleted file mode 100644 index 8bc8277..0000000 --- a/src/main/java/com/aida/seller/config/MyBatisPlusConfig.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.aida.seller.config; - -import com.baomidou.mybatisplus.annotation.DbType; -import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; -import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; -import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; -import org.apache.ibatis.reflection.MetaObject; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.time.LocalDateTime; - -@Configuration -public class MyBatisPlusConfig { - - @Bean - public MybatisPlusInterceptor mybatisPlusInterceptor() { - MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); - interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); - return interceptor; - } - - @Bean - public MetaObjectHandler metaObjectHandler() { - return new MetaObjectHandler() { - @Override - public void insertFill(MetaObject metaObject) { - this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime::now); - this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime::now); - } - - @Override - public void updateFill(MetaObject metaObject) { - this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime::now); - } - }; - } -} diff --git a/src/main/java/com/aida/seller/config/MyMetaObjectHandler.java b/src/main/java/com/aida/seller/config/MyMetaObjectHandler.java new file mode 100644 index 0000000..36f08e0 --- /dev/null +++ b/src/main/java/com/aida/seller/config/MyMetaObjectHandler.java @@ -0,0 +1,23 @@ +package com.aida.seller.config; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import org.apache.ibatis.reflection.MetaObject; +import org.springframework.stereotype.Component; +import java.time.LocalDateTime; + +@Component +public class MyMetaObjectHandler implements MetaObjectHandler { + + @Override + public void insertFill(MetaObject metaObject) { + this.setFieldValByName("createTime", LocalDateTime.now(), metaObject); + this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject); + this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); + this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); + } + + @Override + public void updateFill(MetaObject metaObject) { + this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject); + } +} \ No newline at end of file diff --git a/src/main/java/com/aida/seller/config/PrimaryDataSourceConfig.java b/src/main/java/com/aida/seller/config/PrimaryDataSourceConfig.java index decf195..79c0e40 100644 --- a/src/main/java/com/aida/seller/config/PrimaryDataSourceConfig.java +++ b/src/main/java/com/aida/seller/config/PrimaryDataSourceConfig.java @@ -1,7 +1,10 @@ package com.aida.seller.config; +import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.core.config.GlobalConfig; +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionTemplate; @@ -14,16 +17,28 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; +import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.sql.DataSource; @Configuration +@EnableTransactionManagement @MapperScan(basePackages = "com.aida.seller.module.*.mapper", sqlSessionFactoryRef = "primarySqlSessionFactory") public class PrimaryDataSourceConfig { + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + return interceptor; + } + @Autowired private MybatisPlusInterceptor mybatisPlusInterceptor; + @Autowired + private MetaObjectHandler myMetaObjectHandler; + @Primary @Bean(name = "primaryDataSource") @ConfigurationProperties(prefix = "spring.datasource.primary") @@ -42,6 +57,7 @@ public class PrimaryDataSourceConfig { GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setBanner(false); + globalConfig.setMetaObjectHandler(myMetaObjectHandler); bean.setGlobalConfig(globalConfig); bean.setPlugins(mybatisPlusInterceptor); diff --git a/src/main/java/com/aida/seller/module/designer/dto/DesignerAuditDTO.java b/src/main/java/com/aida/seller/module/designer/dto/DesignerAuditDTO.java index cbe79fd..51f544a 100644 --- a/src/main/java/com/aida/seller/module/designer/dto/DesignerAuditDTO.java +++ b/src/main/java/com/aida/seller/module/designer/dto/DesignerAuditDTO.java @@ -1,5 +1,7 @@ package com.aida.seller.module.designer.dto; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; diff --git a/src/main/java/com/aida/seller/module/designer/entity/DesignerEntity.java b/src/main/java/com/aida/seller/module/designer/entity/DesignerEntity.java index 9521f58..3edbfa5 100644 --- a/src/main/java/com/aida/seller/module/designer/entity/DesignerEntity.java +++ b/src/main/java/com/aida/seller/module/designer/entity/DesignerEntity.java @@ -1,6 +1,8 @@ package com.aida.seller.module.designer.entity; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import java.io.Serializable; import java.time.LocalDateTime; @@ -16,6 +18,7 @@ public class DesignerEntity implements Serializable { /** 设计师ID */ @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** 用户ID(关联用户表) */ diff --git a/src/main/java/com/aida/seller/module/designer/vo/DesignerApplyDetailVo.java b/src/main/java/com/aida/seller/module/designer/vo/DesignerApplyDetailVo.java index fc8ea27..7a98684 100644 --- a/src/main/java/com/aida/seller/module/designer/vo/DesignerApplyDetailVo.java +++ b/src/main/java/com/aida/seller/module/designer/vo/DesignerApplyDetailVo.java @@ -1,5 +1,7 @@ package com.aida.seller.module.designer.vo; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.io.Serializable; @@ -14,8 +16,6 @@ public class DesignerApplyDetailVo implements Serializable { private static final long serialVersionUID = 1L; - @Schema(description = "设计师ID") - private Long id; @Schema(description = "店铺名称") private String shopName; diff --git a/src/main/java/com/aida/seller/module/listing/controller/ListingController.java b/src/main/java/com/aida/seller/module/listing/controller/ListingController.java index 70ebba4..c9e2954 100644 --- a/src/main/java/com/aida/seller/module/listing/controller/ListingController.java +++ b/src/main/java/com/aida/seller/module/listing/controller/ListingController.java @@ -68,15 +68,6 @@ public class ListingController { return Response.success(); } - @Operation(summary = "批量设置库存", description = "入参为商品ID和库存值列表") - @PutMapping("/stock/batch") - public Response batchUpdateStock( - @Parameter(description = "库存更新列表") @RequestBody List list) { - Long sellerId = UserContext.getUserId(); - listingService.batchUpdateStock(list, sellerId); - return Response.success(); - } - @Operation(summary = "设置弹窗提醒标志", description = "在Redis中设置7天过期的弹窗提醒标志") @PostMapping("/popup/set") public Response setPopupReminder() { diff --git a/src/main/java/com/aida/seller/module/listing/dto/ListingImageDTO.java b/src/main/java/com/aida/seller/module/listing/dto/ListingImageDTO.java index 1f4a433..26a9b34 100644 --- a/src/main/java/com/aida/seller/module/listing/dto/ListingImageDTO.java +++ b/src/main/java/com/aida/seller/module/listing/dto/ListingImageDTO.java @@ -1,5 +1,7 @@ package com.aida.seller.module.listing.dto; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -15,6 +17,7 @@ public class ListingImageDTO implements Serializable { /** 图片ID,有值则更新,无则新增 */ @Schema(description = "图片ID,有值则更新,无则新增") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** 图片类别: cover/main_product/product/sketch/apparel */ diff --git a/src/main/java/com/aida/seller/module/listing/dto/ListingSaveDTO.java b/src/main/java/com/aida/seller/module/listing/dto/ListingSaveDTO.java index 2ecb898..51070a7 100644 --- a/src/main/java/com/aida/seller/module/listing/dto/ListingSaveDTO.java +++ b/src/main/java/com/aida/seller/module/listing/dto/ListingSaveDTO.java @@ -1,5 +1,7 @@ package com.aida.seller.module.listing.dto; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -17,6 +19,7 @@ public class ListingSaveDTO implements Serializable { /** 商品ID,无则新建,有则更新 */ @Schema(description = "商品ID,无则新建,有则更新") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** 商品标题 */ @@ -31,9 +34,6 @@ public class ListingSaveDTO implements Serializable { @Schema(description = "价格") private BigDecimal price; - /** 库存 */ - @Schema(description = "库存") - private Integer stock; /** 浏览量(更新时传入) */ @Schema(description = "浏览量(更新时传入)") diff --git a/src/main/java/com/aida/seller/module/listing/dto/ListingStockDTO.java b/src/main/java/com/aida/seller/module/listing/dto/ListingStockDTO.java deleted file mode 100644 index 97af457..0000000 --- a/src/main/java/com/aida/seller/module/listing/dto/ListingStockDTO.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.aida.seller.module.listing.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.io.Serializable; - -/** - * 批量库存更新 DTO - */ -@Data -public class ListingStockDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - /** 商品ID */ - @Schema(description = "商品ID") - private Long id; - - /** 库存值 */ - @Schema(description = "库存值") - private Integer stock; -} diff --git a/src/main/java/com/aida/seller/module/listing/entity/ListingEntity.java b/src/main/java/com/aida/seller/module/listing/entity/ListingEntity.java index 5a3ca81..742b9c5 100644 --- a/src/main/java/com/aida/seller/module/listing/entity/ListingEntity.java +++ b/src/main/java/com/aida/seller/module/listing/entity/ListingEntity.java @@ -3,6 +3,9 @@ package com.aida.seller.module.listing.entity; import com.aida.seller.module.listing.enums.ProductCategoryEnum; import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import java.io.Serializable; @@ -21,6 +24,7 @@ public class ListingEntity implements Serializable { /** 商品ID */ @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** 卖家ID */ @@ -35,8 +39,8 @@ public class ListingEntity implements Serializable { /** 价格 */ private BigDecimal price; - /** 库存数量 */ - private Integer stock; + /** 销量 */ + private Integer salesVolume; /** 封面图URL(列表页展示用) */ private String cover; @@ -48,11 +52,13 @@ public class ListingEntity implements Serializable { private Integer status; /** 创建时间 */ - @TableField(fill = FieldFill.INSERT) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(value = "create_time", fill = FieldFill.INSERT_UPDATE) private LocalDateTime createTime; /** 更新时间 */ - @TableField(fill = FieldFill.INSERT_UPDATE) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; /** 是否删除:0-否,1-是 */ diff --git a/src/main/java/com/aida/seller/module/listing/entity/ListingImageEntity.java b/src/main/java/com/aida/seller/module/listing/entity/ListingImageEntity.java index a3b6f6d..0838f89 100644 --- a/src/main/java/com/aida/seller/module/listing/entity/ListingImageEntity.java +++ b/src/main/java/com/aida/seller/module/listing/entity/ListingImageEntity.java @@ -1,6 +1,9 @@ package com.aida.seller.module.listing.entity; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import java.io.Serializable; @@ -17,9 +20,11 @@ public class ListingImageEntity implements Serializable { /** 图片ID */ @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** 商品ID */ + @JsonSerialize(using = ToStringSerializer.class) private Long listingId; /** 图片类别: cover/main_product/product/sketch/apparel */ @@ -35,6 +40,7 @@ public class ListingImageEntity implements Serializable { private Integer isSelected; /** 创建时间 */ - @TableField(fill = FieldFill.INSERT) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(value = "create_time", fill = FieldFill.INSERT_UPDATE) private LocalDateTime createTime; } diff --git a/src/main/java/com/aida/seller/module/listing/service/ListingService.java b/src/main/java/com/aida/seller/module/listing/service/ListingService.java index 6afba2b..761379b 100644 --- a/src/main/java/com/aida/seller/module/listing/service/ListingService.java +++ b/src/main/java/com/aida/seller/module/listing/service/ListingService.java @@ -58,14 +58,6 @@ public interface ListingService extends IService { */ void updateStatus(Long id, Integer status, Long sellerId); - /** - * 批量更新库存 - * - * @param list 库存列表 - * @param sellerId 卖家ID - */ - void batchUpdateStock(java.util.List list, Long sellerId); - /** * 设置弹窗提醒标志(7天过期) * diff --git a/src/main/java/com/aida/seller/module/listing/service/ListingServiceImpl.java b/src/main/java/com/aida/seller/module/listing/service/ListingServiceImpl.java index 9d0ee09..287a6d5 100644 --- a/src/main/java/com/aida/seller/module/listing/service/ListingServiceImpl.java +++ b/src/main/java/com/aida/seller/module/listing/service/ListingServiceImpl.java @@ -187,26 +187,6 @@ public class ListingServiceImpl extends ServiceImpl list, Long sellerId) { - if (CollectionUtils.isEmpty(list)) { - return; - } - List ids = list.stream().map(ListingStockDTO::getId).collect(Collectors.toList()); - List existing = this.list( - new LambdaQueryWrapper() - .eq(ListingEntity::getSellerId, sellerId) - .in(ListingEntity::getId, ids)); - if (existing.size() != ids.size()) { - throw new BusinessException("部分商品不存在或无权操作"); - } - Map stockMap = list.stream() - .collect(Collectors.toMap(ListingStockDTO::getId, ListingStockDTO::getStock)); - existing.forEach(e -> e.setStock(stockMap.get(e.getId()))); - this.updateBatchById(existing); - } - private void handleImages(Long listingId, List images) { Map> byCategory = images.stream() .collect(Collectors.groupingBy(img -> img.getCategory() == null ? "" : img.getCategory())); diff --git a/src/main/java/com/aida/seller/module/listing/vo/ListingPageVO.java b/src/main/java/com/aida/seller/module/listing/vo/ListingPageVO.java index 3fd0017..56782a3 100644 --- a/src/main/java/com/aida/seller/module/listing/vo/ListingPageVO.java +++ b/src/main/java/com/aida/seller/module/listing/vo/ListingPageVO.java @@ -1,5 +1,7 @@ package com.aida.seller.module.listing.vo; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import java.io.Serializable; @@ -15,6 +17,7 @@ public class ListingPageVO implements Serializable { private static final long serialVersionUID = 1L; /** 商品ID */ + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** 封面图URL(列表页直返,无须关联图片表) */ @@ -26,8 +29,8 @@ public class ListingPageVO implements Serializable { /** 价格 */ private BigDecimal price; - /** 库存 */ - private Integer stock; + /** 销量 */ + private Integer salesVolume; /** 浏览量 */ private Integer viewCount; diff --git a/src/main/java/com/aida/seller/module/order/entity/OrderInfoEntity.java b/src/main/java/com/aida/seller/module/order/entity/OrderInfoEntity.java index b662d00..589a06b 100644 --- a/src/main/java/com/aida/seller/module/order/entity/OrderInfoEntity.java +++ b/src/main/java/com/aida/seller/module/order/entity/OrderInfoEntity.java @@ -1,6 +1,8 @@ package com.aida.seller.module.order.entity; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import java.io.Serializable; @@ -17,6 +19,7 @@ public class OrderInfoEntity implements Serializable { private static final long serialVersionUID = 1L; @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** 卖家ID */ diff --git a/src/main/java/com/aida/seller/module/order/entity/OrderItemEntity.java b/src/main/java/com/aida/seller/module/order/entity/OrderItemEntity.java index ee8f82a..3a9bbf4 100644 --- a/src/main/java/com/aida/seller/module/order/entity/OrderItemEntity.java +++ b/src/main/java/com/aida/seller/module/order/entity/OrderItemEntity.java @@ -1,6 +1,8 @@ package com.aida.seller.module.order.entity; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import java.io.Serializable; @@ -18,12 +20,15 @@ public class OrderItemEntity implements Serializable { /** 主键ID */ @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** 订单ID(关联 seller_orders) */ + @JsonSerialize(using = ToStringSerializer.class) private Long orderId; /** 商品ID */ + @JsonSerialize(using = ToStringSerializer.class) private Long productId; /** 商品名称 */ diff --git a/src/main/java/com/aida/seller/module/order/vo/OrderVO.java b/src/main/java/com/aida/seller/module/order/vo/OrderVO.java index 117696b..6ef66b0 100644 --- a/src/main/java/com/aida/seller/module/order/vo/OrderVO.java +++ b/src/main/java/com/aida/seller/module/order/vo/OrderVO.java @@ -1,5 +1,7 @@ package com.aida.seller.module.order.vo; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -15,6 +17,7 @@ public class OrderVO implements Serializable { private static final long serialVersionUID = 1L; @Schema(description = "订单唯一标识") + @JsonSerialize(using = ToStringSerializer.class) private Long orderId; @Schema(description = "商品明细列表") @@ -36,6 +39,7 @@ public class OrderVO implements Serializable { private static final long serialVersionUID = 1L; @Schema(description = "商品ID") + @JsonSerialize(using = ToStringSerializer.class) private Long productId; @Schema(description = "商品名")