瀏覽代碼

询价和回复相关功能开发

WangChanghua 1 年之前
父節點
當前提交
dc046820f2
共有 35 個文件被更改,包括 1190 次插入38 次删除
  1. 19 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/constant/Constants.java
  2. 57 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/ArticleDTO.java
  3. 1 1
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/CouponDTO.java
  4. 54 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/EnquireReplyDTO.java
  5. 37 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/ShareDTO.java
  6. 0 6
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/UserCouponDTO.java
  7. 54 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/ArticleModifyParam.java
  8. 36 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/ArticlePagingParam.java
  9. 1 1
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/CouponModifyParam.java
  10. 52 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/EnquireModifyParam.java
  11. 36 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/EnquirePagingParam.java
  12. 37 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/EnquireReplyModifyParam.java
  13. 36 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/EnquireReplyPagingParam.java
  14. 36 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/SharePagingParam.java
  15. 36 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/ArticleService.java
  16. 48 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/EnquireReplyService.java
  17. 36 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/EnquireService.java
  18. 39 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/ShareService.java
  19. 49 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/ArticleCopier.java
  20. 49 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/EnquireCopier.java
  21. 49 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/EnquireReplyCopier.java
  22. 30 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/ShareCopier.java
  23. 15 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/ShareMapper.java
  24. 1 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Coupon.java
  25. 5 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Merchant.java
  26. 43 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Share.java
  27. 1 13
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/UserCoupon.java
  28. 13 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/ShareService.java
  29. 63 3
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/ArticleServiceImpl.java
  30. 1 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/CouponActivityServiceImpl.java
  31. 1 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/CouponServiceImpl.java
  32. 61 4
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/EnquireReplyServiceImpl.java
  33. 107 3
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/EnquireServiceImpl.java
  34. 75 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/ShareServiceImpl.java
  35. 12 5
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/UserCouponServiceImpl.java

+ 19 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/constant/Constants.java

@@ -0,0 +1,19 @@
+package com.chelvc.cloud.vehicle.api.constant;
+
+/**
+ * @author xp
+ * @data 2023/4/10
+ */
+public class Constants {
+
+    /**
+     * 所有商家的坐标,redis key
+     */
+    public static final String MERCHANT_REDIS_KEY = "merchants_geo";
+
+    /**
+     * 商家可以看到的询价列表,redis key 前缀
+     */
+    public static final String MERCHANT_ENQUIRE_REDIS_KEY_PREFIX = "merchants_enquire_";
+
+}

+ 57 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/ArticleDTO.java

@@ -0,0 +1,57 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import java.io.Serializable;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 文章信息
+ *
+ * @author xp
+ * @data 2023/3/31
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ArticleDTO implements Serializable {
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 文章标题
+     */
+    private String title;
+
+    /**
+     * 文章内容
+     */
+    private String content;
+
+    /**
+     * 附件列表
+     */
+    private String attachments;
+
+    /**
+     * 浏览量
+     */
+    private Integer viewCount;
+
+    /**
+     * 状态
+     */
+    private String status;
+
+}

+ 1 - 1
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/CouponDTO.java

@@ -69,7 +69,7 @@ public class CouponDTO implements Serializable {
     /**
      * 优惠券状态
      */
-    private CouponStatus status;
+    private PromotionStatus status;
 
     /**
      * 创建用户

+ 54 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/EnquireReplyDTO.java

@@ -0,0 +1,54 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import com.chelvc.framework.common.model.File;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 询价回复信息
+ *
+ * @author xp
+ * @data 2023/3/31
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class EnquireReplyDTO implements Serializable {
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 询价id
+     */
+    private Long enquireId;
+
+    /**
+     * 回复内容
+     */
+    private String content;
+
+    /**
+     * 附件列表
+     */
+    private List<File> attachments;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+}

+ 37 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/ShareDTO.java

@@ -0,0 +1,37 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 分享记录信息
+ *
+ * @author xp
+ * @data 2023/3/31
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ShareDTO implements Serializable {
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+}

+ 0 - 6
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/UserCouponDTO.java

@@ -7,7 +7,6 @@ import lombok.NoArgsConstructor;
 import lombok.experimental.SuperBuilder;
 
 import java.io.Serializable;
-import java.util.Date;
 
 /**
  * 优惠卷领取记录
@@ -40,11 +39,6 @@ public class UserCouponDTO implements Serializable {
      */
     private CouponType type;
 
-    /**
-     * 是否已使用
-     */
-    private Boolean used;
-
     /**
      * 优惠券
      */

+ 54 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/ArticleModifyParam.java

@@ -0,0 +1,54 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import java.io.Serializable;
+import javax.validation.constraints.NotBlank;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 文章更新参数
+ * @author xp
+ * @data 2023/3/31
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ArticleModifyParam implements Serializable {
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 文章标题
+     */
+    @NotBlank(message = "文章标题不能为空")
+    private String title;
+
+    /**
+     * 文章内容
+     */
+    @NotBlank(message = "文章内容不能为空")
+    private String content;
+
+    /**
+     * 附件列表
+     */
+    private String attachments;
+
+    /**
+     * 浏览量
+     */
+    private Integer viewCount;
+
+    /**
+     * 状态
+     */
+    private String status;
+
+}

+ 36 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/ArticlePagingParam.java

@@ -0,0 +1,36 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import java.io.Serializable;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import com.chelvc.framework.common.model.Paging;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 文章分页查询参数
+ *
+ * @author xp
+ * @data 2023/3/31
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ArticlePagingParam implements Serializable {
+
+    /**
+     * 分页信息
+     */
+    @NotNull(message = "分页不能为空")
+    private Paging paging;
+
+    /**
+     * 关键字
+     */
+    @Size(max = 100, message = "关键字长度不能大于100")
+    private String keyword;
+}

+ 1 - 1
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/CouponModifyParam.java

@@ -73,7 +73,7 @@ public class CouponModifyParam implements Serializable {
      * 优惠券状态
      */
     @NotNull(message = "优惠券状态不能为空")
-    private CouponStatus status;
+    private PromotionStatus status;
 
     /**
      * 限制领取数量

+ 52 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/EnquireModifyParam.java

@@ -0,0 +1,52 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import java.io.Serializable;
+import java.util.List;
+
+import com.chelvc.framework.common.model.File;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 询价更新参数
+ * @author xp
+ * @data 2023/3/31
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class EnquireModifyParam implements Serializable {
+
+    /**
+     * 询价类型
+     */
+    private String categoryId;
+
+    /**
+     * 询价内容
+     */
+    private String content;
+
+    /**
+     * 附件列表
+     */
+    private List<File> attachments;
+
+    /**
+     * 经度
+     */
+    private Double latitude;
+
+    /**
+     * 纬度
+     */
+    private Double longitude;
+
+    /**
+     * 状态
+     */
+    private String status;
+}

+ 36 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/EnquirePagingParam.java

@@ -0,0 +1,36 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import java.io.Serializable;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import com.chelvc.framework.common.model.Paging;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 询价分页查询参数
+ *
+ * @author xp
+ * @data 2023/3/31
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class EnquirePagingParam implements Serializable {
+
+    /**
+     * 分页信息
+     */
+    @NotNull(message = "分页不能为空")
+    private Paging paging;
+
+    /**
+     * 关键字
+     */
+    @Size(max = 100, message = "关键字长度不能大于100")
+    private String keyword;
+}

+ 37 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/EnquireReplyModifyParam.java

@@ -0,0 +1,37 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import java.io.Serializable;
+import java.util.List;
+
+import com.chelvc.framework.common.model.File;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 询价回复更新参数
+ * @author xp
+ * @data 2023/3/31
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class EnquireReplyModifyParam implements Serializable {
+
+    /**
+     * 询价id
+     */
+    private Long enquireId;
+
+    /**
+     * 回复内容
+     */
+    private String content;
+
+    /**
+     * 附件列表
+     */
+    private List<File> attachments;
+}

+ 36 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/EnquireReplyPagingParam.java

@@ -0,0 +1,36 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import java.io.Serializable;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import com.chelvc.framework.common.model.Paging;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 询价回复分页查询参数
+ *
+ * @author xp
+ * @data 2023/3/31
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class EnquireReplyPagingParam implements Serializable {
+
+    /**
+     * 分页信息
+     */
+    @NotNull(message = "分页不能为空")
+    private Paging paging;
+
+    /**
+     * 关键字
+     */
+    @Size(max = 100, message = "关键字长度不能大于100")
+    private String keyword;
+}

+ 36 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/SharePagingParam.java

@@ -0,0 +1,36 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import java.io.Serializable;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import com.chelvc.framework.common.model.Paging;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 分享记录分页查询参数
+ *
+ * @author xp
+ * @data 2023/3/31
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SharePagingParam implements Serializable {
+
+    /**
+     * 分页信息
+     */
+    @NotNull(message = "分页不能为空")
+    private Paging paging;
+
+    /**
+     * 关键字
+     */
+    @Size(max = 100, message = "关键字长度不能大于100")
+    private String keyword;
+}

+ 36 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/ArticleService.java

@@ -1,5 +1,10 @@
 package com.chelvc.cloud.vehicle.api.service;
 
+import com.chelvc.cloud.vehicle.api.dto.ArticleDTO;
+import com.chelvc.cloud.vehicle.api.param.ArticleModifyParam;
+import com.chelvc.cloud.vehicle.api.param.ArticlePagingParam;
+import com.chelvc.framework.common.model.Pagination;
+
 /**
  * 文章业务接口
  *
@@ -7,4 +12,35 @@ package com.chelvc.cloud.vehicle.api.service;
  * @data 2023/3/31
  */
 public interface ArticleService {
+    /**
+     * 添加文章
+     *
+     * @param param 新增参数
+     * @return 文章主键
+     */
+    Long addArticle(ArticleModifyParam param);
+
+    /**
+     * 更新文章
+     *
+     * @param param 更新参数
+     * @param id 主键
+     */
+    void updateArticle(Long id, ArticleModifyParam param);
+
+    /**
+     * id查找文章信息
+     *
+     * @param id
+     * @return
+     */
+    ArticleDTO getArticle(Long id);
+
+    /**
+     * 分页查询
+     *
+     * @param param 分页参数
+     * @return
+     */
+    Pagination<ArticleDTO> getArticlePaging(ArticlePagingParam param);
 }

+ 48 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/EnquireReplyService.java

@@ -0,0 +1,48 @@
+package com.chelvc.cloud.vehicle.api.service;
+
+
+import com.chelvc.cloud.vehicle.api.param.EnquireReplyModifyParam;
+import com.chelvc.cloud.vehicle.api.param.EnquireReplyPagingParam;
+import com.chelvc.cloud.vehicle.api.dto.EnquireReplyDTO;
+import com.chelvc.framework.common.model.Pagination;
+
+/**
+ * 询价回复业务接口
+ *
+ * @author xp
+ * @data 2023/3/31
+ */
+public interface EnquireReplyService {
+
+    /**
+     * 添加询价回复
+     *
+     * @param param 新增参数
+     * @return 询价回复主键
+     */
+    Long addEnquireReply(EnquireReplyModifyParam param);
+
+    /**
+     * 更新询价回复
+     *
+     * @param param 更新参数
+     * @param id 主键
+     */
+    void updateEnquireReply(Long id, EnquireReplyModifyParam param);
+
+    /**
+     * id查找询价回复信息
+     *
+     * @param id
+     * @return
+     */
+    EnquireReplyDTO getEnquireReply(Long id);
+
+    /**
+     * 分页查询
+     *
+     * @param param 分页参数
+     * @return
+     */
+    Pagination<EnquireReplyDTO> getEnquireReplyPaging(EnquireReplyPagingParam param);
+}

+ 36 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/EnquireService.java

@@ -1,5 +1,10 @@
 package com.chelvc.cloud.vehicle.api.service;
 
+import com.chelvc.cloud.vehicle.api.dto.EnquireDTO;
+import com.chelvc.cloud.vehicle.api.param.EnquireModifyParam;
+import com.chelvc.cloud.vehicle.api.param.EnquirePagingParam;
+import com.chelvc.framework.common.model.Pagination;
+
 /**
  * 询价业务接口
  *
@@ -7,4 +12,35 @@ package com.chelvc.cloud.vehicle.api.service;
  * @data 2023/3/31
  */
 public interface EnquireService {
+    /**
+     * 添加询价
+     *
+     * @param param 新增参数
+     * @return 询价主键
+     */
+    Long addEnquire(EnquireModifyParam param);
+
+    /**
+     * 更新询价
+     *
+     * @param param 更新参数
+     * @param id 主键
+     */
+    void updateEnquire(Long id, EnquireModifyParam param);
+
+    /**
+     * id查找询价信息
+     *
+     * @param id
+     * @return
+     */
+    EnquireDTO getEnquire(Long id);
+
+    /**
+     * 分页查询
+     *
+     * @param param 分页参数
+     * @return
+     */
+    Pagination<EnquireDTO> getEnquirePaging(EnquirePagingParam param);
 }

+ 39 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/ShareService.java

@@ -0,0 +1,39 @@
+package com.chelvc.cloud.vehicle.api.service;
+
+
+import com.chelvc.cloud.vehicle.api.dto.ShareDTO;
+import com.chelvc.cloud.vehicle.api.param.SharePagingParam;
+import com.chelvc.framework.common.model.Pagination;
+
+/**
+ * 分享记录业务接口
+ *
+ * @author xp
+ * @data 2023/3/31
+ */
+public interface ShareService {
+
+    /**
+     * 添加分享记录
+     *
+     * @param 
+     * @return 分享记录主键
+     */
+    Long addShare();
+
+    /**
+     * id查找分享记录信息
+     *
+     * @param id
+     * @return
+     */
+    ShareDTO getShare(Long id);
+
+    /**
+     * 分页查询
+     *
+     * @param param 分页参数
+     * @return
+     */
+    Pagination<ShareDTO> getSharePaging(SharePagingParam param);
+}

+ 49 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/ArticleCopier.java

@@ -0,0 +1,49 @@
+package com.chelvc.cloud.vehicle.server.copier;
+
+import com.chelvc.cloud.vehicle.api.dto.ArticleDTO;
+import com.chelvc.cloud.vehicle.api.param.ArticleModifyParam;
+import com.chelvc.cloud.vehicle.server.entity.Article;
+import org.mapstruct.Builder;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingTarget;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 文章对象拷贝接口
+ *
+ * @author xp
+ * @data 2023/3/31
+ */
+@Mapper(builder = @Builder(disableBuilder = true))
+public interface ArticleCopier {
+
+    /**
+     * 对象拷贝接口实例
+     */
+    ArticleCopier INSTANCE = Mappers.getMapper(ArticleCopier.class);
+
+    /**
+     * 文章信息拷贝
+     *
+     * @param article 文章信息
+     * @return 文章信息
+     */
+    ArticleDTO copying(Article article);
+
+    /**
+     * 文章信息拷贝
+     *
+     * @param param 文章更新参数
+     * @return 文章信息
+     */
+    Article copying(ArticleModifyParam param);
+
+    /**
+     * 文章信息拷贝
+     *
+     * @param param  文章更新参数
+     * @param article 文章信息
+     */
+    void copying(ArticleModifyParam param, @MappingTarget Article article);
+
+}

+ 49 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/EnquireCopier.java

@@ -0,0 +1,49 @@
+package com.chelvc.cloud.vehicle.server.copier;
+
+import com.chelvc.cloud.vehicle.api.dto.EnquireDTO;
+import com.chelvc.cloud.vehicle.api.param.EnquireModifyParam;
+import com.chelvc.cloud.vehicle.server.entity.Enquire;
+import org.mapstruct.Builder;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingTarget;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 询价对象拷贝接口
+ *
+ * @author xp
+ * @data 2023/3/31
+ */
+@Mapper(builder = @Builder(disableBuilder = true))
+public interface EnquireCopier {
+
+    /**
+     * 对象拷贝接口实例
+     */
+    EnquireCopier INSTANCE = Mappers.getMapper(EnquireCopier.class);
+
+    /**
+     * 询价信息拷贝
+     *
+     * @param enquire 询价信息
+     * @return 询价信息
+     */
+    EnquireDTO copying(Enquire enquire);
+
+    /**
+     * 询价信息拷贝
+     *
+     * @param param 询价更新参数
+     * @return 询价信息
+     */
+    Enquire copying(EnquireModifyParam param);
+
+    /**
+     * 询价信息拷贝
+     *
+     * @param param  询价更新参数
+     * @param enquire 询价信息
+     */
+    void copying(EnquireModifyParam param, @MappingTarget Enquire enquire);
+
+}

+ 49 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/EnquireReplyCopier.java

@@ -0,0 +1,49 @@
+package com.chelvc.cloud.vehicle.server.copier;
+
+import com.chelvc.cloud.vehicle.api.dto.EnquireReplyDTO;
+import com.chelvc.cloud.vehicle.api.param.EnquireReplyModifyParam;
+import com.chelvc.cloud.vehicle.server.entity.EnquireReply;
+import org.mapstruct.Builder;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingTarget;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 询价回复对象拷贝接口
+ *
+ * @author xp
+ * @data 2023/3/31
+ */
+@Mapper(builder = @Builder(disableBuilder = true))
+public interface EnquireReplyCopier {
+
+    /**
+     * 对象拷贝接口实例
+     */
+    EnquireReplyCopier INSTANCE = Mappers.getMapper(EnquireReplyCopier.class);
+
+    /**
+     * 询价回复信息拷贝
+     *
+     * @param enquireReply 询价回复信息
+     * @return 询价回复信息
+     */
+    EnquireReplyDTO copying(EnquireReply enquireReply);
+
+    /**
+     * 询价回复信息拷贝
+     *
+     * @param param 询价回复更新参数
+     * @return 询价回复信息
+     */
+    EnquireReply copying(EnquireReplyModifyParam param);
+
+    /**
+     * 询价回复信息拷贝
+     *
+     * @param param  询价回复更新参数
+     * @param enquireReply 询价回复信息
+     */
+    void copying(EnquireReplyModifyParam param, @MappingTarget EnquireReply enquireReply);
+
+}

+ 30 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/copier/ShareCopier.java

@@ -0,0 +1,30 @@
+package com.chelvc.cloud.vehicle.server.copier;
+
+import com.chelvc.cloud.vehicle.api.dto.ShareDTO;
+import com.chelvc.cloud.vehicle.server.entity.Share;
+import org.mapstruct.Builder;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 分享记录对象拷贝接口
+ *
+ * @author xp
+ * @data 2023/3/31
+ */
+@Mapper(builder = @Builder(disableBuilder = true))
+public interface ShareCopier {
+
+    /**
+     * 对象拷贝接口实例
+     */
+    ShareCopier INSTANCE = Mappers.getMapper(ShareCopier.class);
+
+    /**
+     * 分享记录信息拷贝
+     *
+     * @param share 分享记录信息
+     * @return 分享记录信息
+     */
+    ShareDTO copying(Share share);
+}

+ 15 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/ShareMapper.java

@@ -0,0 +1,15 @@
+package com.chelvc.cloud.vehicle.server.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chelvc.cloud.vehicle.server.entity.Share;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 分享记录数据操作接口
+ *
+ * @author xp
+ * @data 2023/3/31
+ */
+@Mapper
+public interface ShareMapper extends BaseMapper<Share> {
+}

+ 1 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Coupon.java

@@ -56,7 +56,7 @@ public class Coupon extends BasePromotion {
     /**
      * 优惠券状态
      */
-    private CouponStatus status;
+    private PromotionStatus status;
 
     /**
      * 限制领取数量

+ 5 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Merchant.java

@@ -42,6 +42,11 @@ public class Merchant extends ModifyEntity<Long> {
      */
     private Long userId;
 
+    /**
+     * 分销用户id
+     */
+    private Long referrerId;
+
     /**
      * 商家名称
      */

+ 43 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Share.java

@@ -0,0 +1,43 @@
+package com.chelvc.cloud.vehicle.server.entity;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.chelvc.framework.database.entity.Entity;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 分享记录数据模型
+ *
+ * @author xp
+ * @data 2023/3/31
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString(callSuper = true)
+@TableName(autoResultMap = true)
+public class Share implements Entity<Long> {
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+}

+ 1 - 13
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/UserCoupon.java

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.chelvc.cloud.vehicle.api.constant.CouponType;
 import com.chelvc.cloud.vehicle.api.constant.UserCouponStatus;
 import com.chelvc.framework.database.entity.BasicEntity;
-import com.chelvc.framework.database.interceptor.DeletedTypeHandler;
 import lombok.*;
 import lombok.experimental.SuperBuilder;
 
@@ -39,7 +38,7 @@ public class UserCoupon extends BasicEntity<Long> {
     /**
      * 用户名称
      */
-    private Long userName;
+    private String userName;
 
     /**
      * 优惠券ID
@@ -51,11 +50,6 @@ public class UserCoupon extends BasicEntity<Long> {
      */
     private CouponType type;
 
-    /**
-     * 是否已使用
-     */
-    private Boolean used;
-
     /**
      * 使用起始时间
      */
@@ -81,12 +75,6 @@ public class UserCoupon extends BasicEntity<Long> {
      */
     private UserCouponStatus status;
 
-    /**
-     * 是否已删除
-     */
-    @TableField(typeHandler = DeletedTypeHandler.class)
-    private Boolean deleted;
-
     /**
      * 优惠券
      */

+ 13 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/ShareService.java

@@ -0,0 +1,13 @@
+package com.chelvc.cloud.vehicle.server.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chelvc.cloud.vehicle.server.entity.Share;
+
+/**
+ * 分享记录业务操作接口
+ *
+ * @author xp
+ * @data 2023/3/31
+ */
+public interface ShareService extends IService<Share> {
+}

+ 63 - 3
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/ArticleServiceImpl.java

@@ -1,10 +1,24 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chelvc.cloud.vehicle.api.dto.ArticleDTO;
+import com.chelvc.cloud.vehicle.api.param.ArticleModifyParam;
+import com.chelvc.cloud.vehicle.api.param.ArticlePagingParam;
+import com.chelvc.cloud.vehicle.server.copier.ArticleCopier;
 import com.chelvc.cloud.vehicle.server.dao.ArticleMapper;
 import com.chelvc.cloud.vehicle.server.entity.Article;
 import com.chelvc.cloud.vehicle.server.service.ArticleService;
-import org.springframework.stereotype.Service;
+import com.chelvc.framework.base.util.ResourceUtils;
+import com.chelvc.framework.common.model.Pagination;
+import com.chelvc.framework.database.util.PagingUtils;
+import lombok.NonNull;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 文章业务操作实现
@@ -12,6 +26,52 @@ import org.springframework.stereotype.Service;
  * @author Woody
  * @date 2023/5/2
  */
-@Service
-public class ArticleServiceImpl extends ServiceImpl<ArticleMapper, Article> implements ArticleService {
+@DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.ArticleService.class)
+public class ArticleServiceImpl extends ServiceImpl<ArticleMapper, Article> implements ArticleService,
+        com.chelvc.cloud.vehicle.api.service.ArticleService {
+
+    @Override
+    public Long addArticle(@NonNull ArticleModifyParam param) {
+        Article article = ArticleCopier.INSTANCE.copying(param);
+        this.save(article);
+        return article.getId();
+    }
+
+    @Override
+    public void updateArticle(@NonNull Long id, @NonNull ArticleModifyParam param) {
+        Article article = ResourceUtils.required(this.getById(id), "文章不存在");
+        ArticleCopier.INSTANCE.copying(param, article);
+        this.updateById(article);
+    }
+
+    @Override
+    public ArticleDTO getArticle(@NonNull Long id) {
+        return this.convert(this.getById(id));
+    }
+
+    @Override
+    public Pagination<ArticleDTO> getArticlePaging(@NonNull ArticlePagingParam param) {
+        // 查询文章分页
+        Page<Article> page = this.lambdaQuery()
+                .like(StringUtils.hasText(param.getKeyword()), Article::getTitle, param.getKeyword())
+                .orderByDesc(Article::getId).page(PagingUtils.convert(param.getPaging()));
+        List<Article> records = page.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            return Pagination.empty();
+        }
+
+        // 构建文章信息
+        List<ArticleDTO> articles = records.stream().map(this::convert).collect(Collectors.toList());
+        return PagingUtils.convert(page, articles);
+    }
+
+    /**
+     * 转换文章信息
+     *
+     * @param article 文章
+     * @return 文章
+     */
+    private ArticleDTO convert(Article article) {
+        return ArticleCopier.INSTANCE.copying(article);
+    }
 }

+ 1 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/CouponActivityServiceImpl.java

@@ -284,7 +284,7 @@ public class CouponActivityServiceImpl extends AbstractPromotionServiceImpl<Coup
                     UserCoupon userCoupon = UserCoupon.builder()
                             .userId(user.getId())
                             .couponId(coupon.getId())
-                            .userCouponStatus(UserCouponStatus.CLAIMED)
+                            .status(UserCouponStatus.CLAIMED)
                             .platformFlag(PromotionUtils.PLATFORM_ID.equals(coupon.getMerchantId()))
                             .build();
                     userCouponList.add(userCoupon);

+ 1 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/CouponServiceImpl.java

@@ -128,6 +128,7 @@ public class CouponServiceImpl extends AbstractPromotionServiceImpl<CouponMapper
         LambdaQueryChainWrapper<Coupon> lambdaQueryChainWrapper = this.lambdaQuery()
                 .eq(Coupon::getMerchantId, merchantId)
                 .eq(Objects.nonNull(param.getCouponClaimType()), Coupon::getClaimType, param.getCouponClaimType())
+                .eq(Objects.nonNull(param.getPromotionStatus()), Coupon::getStatus, param.getPromotionStatus())
                 .eq(Objects.nonNull(param.getCouponType()), Coupon::getType, param.getCouponType())
                 .ge(Objects.nonNull(param.getStartTime()), Coupon::getStartTime, param.getStartTime())
                 .le(Objects.nonNull(param.getEndTime()), Coupon::getStartTime, param.getEndTime())

+ 61 - 4
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/EnquireReplyServiceImpl.java

@@ -1,10 +1,23 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chelvc.cloud.vehicle.api.param.EnquireReplyModifyParam;
+import com.chelvc.cloud.vehicle.api.dto.EnquireReplyDTO;
+import com.chelvc.cloud.vehicle.api.param.EnquireReplyPagingParam;
+import com.chelvc.cloud.vehicle.server.copier.EnquireReplyCopier;
 import com.chelvc.cloud.vehicle.server.dao.EnquireReplyMapper;
 import com.chelvc.cloud.vehicle.server.entity.EnquireReply;
 import com.chelvc.cloud.vehicle.server.service.EnquireReplyService;
-import org.springframework.stereotype.Service;
+import com.chelvc.framework.base.util.ResourceUtils;
+import com.chelvc.framework.common.model.Pagination;
+import com.chelvc.framework.database.util.PagingUtils;
+import lombok.NonNull;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 询价回复业务操作实现
@@ -12,7 +25,51 @@ import org.springframework.stereotype.Service;
  * @author Woody
  * @date 2023/5/2
  */
-@Service
-public class EnquireReplyServiceImpl extends ServiceImpl<EnquireReplyMapper, EnquireReply>
-        implements EnquireReplyService {
+@DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.EnquireReplyService.class)
+public class EnquireReplyServiceImpl extends ServiceImpl<EnquireReplyMapper,EnquireReply> implements EnquireReplyService,
+        com.chelvc.cloud.vehicle.api.service.EnquireReplyService{
+
+    @Override
+    public Long addEnquireReply(@NonNull EnquireReplyModifyParam param) {
+        EnquireReply enquireReply = EnquireReplyCopier.INSTANCE.copying(param);
+        this.save(enquireReply);
+        return enquireReply.getId();
+    }
+
+    @Override
+    public void updateEnquireReply(@NonNull Long id, @NonNull EnquireReplyModifyParam param) {
+        EnquireReply enquireReply = ResourceUtils.required(this.getById(id), "询价回复不存在");
+        EnquireReplyCopier.INSTANCE.copying(param, enquireReply);
+        this.updateById(enquireReply);
+    }
+
+    @Override
+    public EnquireReplyDTO getEnquireReply(@NonNull Long id) {
+        return this.convert(this.getById(id));
+    }
+
+    @Override
+    public Pagination<EnquireReplyDTO> getEnquireReplyPaging(@NonNull EnquireReplyPagingParam param) {
+        // 查询询价回复分页
+        Page<EnquireReply> page = this.lambdaQuery()
+                .orderByDesc(EnquireReply::getId).page(PagingUtils.convert(param.getPaging()));
+        List<EnquireReply> records = page.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            return Pagination.empty();
+        }
+
+        // 构建询价回复信息
+        List<EnquireReplyDTO> enquireReplies = records.stream().map(this::convert).collect(Collectors.toList());
+        return PagingUtils.convert(page, enquireReplies);
+    }
+
+    /**
+     * 转换询价回复信息
+     *
+     * @param enquireReply 询价回复
+     * @return EnquireDTO 询价回复
+     */
+    private EnquireReplyDTO convert(EnquireReply enquireReply) {
+        return EnquireReplyCopier.INSTANCE.copying(enquireReply);
+    }
 }

+ 107 - 3
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/EnquireServiceImpl.java

@@ -1,10 +1,34 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chelvc.cloud.vehicle.api.constant.Constants;
+import com.chelvc.cloud.vehicle.api.dto.EnquireDTO;
+import com.chelvc.cloud.vehicle.api.param.EnquireModifyParam;
+import com.chelvc.cloud.vehicle.api.param.EnquirePagingParam;
+import com.chelvc.cloud.vehicle.server.copier.EnquireCopier;
 import com.chelvc.cloud.vehicle.server.dao.EnquireMapper;
+import com.chelvc.cloud.vehicle.server.dao.MerchantMapper;
 import com.chelvc.cloud.vehicle.server.entity.Enquire;
+import com.chelvc.cloud.vehicle.server.entity.Merchant;
 import com.chelvc.cloud.vehicle.server.service.EnquireService;
-import org.springframework.stereotype.Service;
+import com.chelvc.framework.base.context.SessionContextHolder;
+import com.chelvc.framework.base.util.ResourceUtils;
+import com.chelvc.framework.common.model.Pagination;
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.geo.Circle;
+import org.springframework.data.geo.GeoResult;
+import org.springframework.data.geo.Point;
+import org.springframework.data.redis.connection.RedisGeoCommands;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 询价业务操作实现
@@ -12,6 +36,86 @@ import org.springframework.stereotype.Service;
  * @author Woody
  * @date 2023/5/2
  */
-@Service
-public class EnquireServiceImpl extends ServiceImpl<EnquireMapper, Enquire> implements EnquireService {
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
+@DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.EnquireService.class)
+public class EnquireServiceImpl extends ServiceImpl<EnquireMapper,Enquire> implements EnquireService,
+        com.chelvc.cloud.vehicle.api.service.EnquireService{
+
+    private final RedisTemplate redisTemplate;
+    private final MerchantMapper merchantMapper;
+
+    @Override
+    public Long addEnquire(@NonNull EnquireModifyParam param) {
+        Enquire enquire = EnquireCopier.INSTANCE.copying(param);
+        this.save(enquire);
+        // 先检查redis中有不有商家的数据
+        if (! redisTemplate.hasKey(Constants.MERCHANT_REDIS_KEY)) {
+            // 查询所有商家
+            List<Merchant> merchants = new LambdaQueryChainWrapper<>(merchantMapper)
+                    .select(Merchant::getId, Merchant::getLatitude, Merchant::getLongitude)
+                    .list();
+            // 将商家的经纬度存入redis
+            List<RedisGeoCommands.GeoLocation<String>> locations = new ArrayList<>(merchants.size());
+            merchants.stream().forEach(merchant -> {
+                locations.add(new RedisGeoCommands.GeoLocation<String>(merchant.getId().toString(), new Point(merchant.getLatitude(), merchant.getLongitude())));
+            });
+            redisTemplate.opsForGeo().add(Constants.MERCHANT_REDIS_KEY, locations);
+        }
+        // 查询附近商家,50km内
+        List<GeoResult<RedisGeoCommands.GeoLocation<String>>> geoResults = redisTemplate.opsForGeo().radius(Constants.MERCHANT_REDIS_KEY,
+                new Circle(new Point(param.getLongitude(),
+                        param.getLatitude()), 50),
+                // 添加命令:包含距离、升序排列
+                RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance().sortAscending())
+                .getContent();
+        // 将该询价存入到对应商家可见列表中
+        geoResults.stream().forEach(result -> {
+            Merchant merchant = merchantMapper.selectById(result.getContent().getName());
+            if (merchant != null) {
+                redisTemplate.opsForList().leftPush(Constants.MERCHANT_ENQUIRE_REDIS_KEY_PREFIX + merchant.getReferrerId(), enquire.getId());
+            }
+        });
+        return enquire.getId();
+    }
+
+    @Override
+    public void updateEnquire(@NonNull Long id, @NonNull EnquireModifyParam param) {
+        Enquire enquire = ResourceUtils.required(this.getById(id), "询价不存在");
+        EnquireCopier.INSTANCE.copying(param, enquire);
+        this.updateById(enquire);
+    }
+
+    @Override
+    public EnquireDTO getEnquire(@NonNull Long id) {
+        return this.convert(this.getById(id));
+    }
+
+    @Override
+    public Pagination<EnquireDTO> getEnquirePaging(@NonNull EnquirePagingParam param) {
+        Long userId = SessionContextHolder.getSession().getId();
+        int size = param.getPaging().getSize();
+        int number = param.getPaging().getNumber();
+        int start = (number - 1) * size;
+        // 从redis中获取可见的附近询价
+        List<Long> enquireIds = redisTemplate.opsForList().range(Constants.MERCHANT_ENQUIRE_REDIS_KEY_PREFIX + userId, start, size);
+        List<Enquire> enquireList = baseMapper.selectBatchIds(enquireIds);
+
+        if (CollectionUtils.isEmpty(enquireList)) {
+            return Pagination.empty();
+        }
+
+        // 构建询价信息
+        List<EnquireDTO> enquires = enquireList.stream().map(this::convert).collect(Collectors.toList());
+        return new Pagination<>().convert(enquires);
+    }
+
+    /**
+     * 转换询价信息
+     *
+     * @param enquire 询价
+     * @return EnquireDTO 询价
+     */
+    private EnquireDTO convert(Enquire enquire) {
+        return EnquireCopier.INSTANCE.copying(enquire);
+    }
 }

+ 75 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/ShareServiceImpl.java

@@ -0,0 +1,75 @@
+package com.chelvc.cloud.vehicle.server.service.impl;
+
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chelvc.cloud.vehicle.api.dto.ShareDTO;
+import com.chelvc.cloud.vehicle.api.param.SharePagingParam;
+import com.chelvc.cloud.vehicle.server.copier.ShareCopier;
+import com.chelvc.cloud.vehicle.server.dao.ShareMapper;
+import com.chelvc.cloud.vehicle.server.entity.Share;
+import com.chelvc.cloud.vehicle.server.service.ShareService;
+import com.chelvc.framework.base.context.SessionContextHolder;
+import com.chelvc.framework.common.model.Pagination;
+import com.chelvc.framework.database.util.PagingUtils;
+import lombok.NonNull;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+/**
+ * 分享记录业务操作实现
+ *
+ * @author xp
+ * @data 2023/3/31
+ */
+@DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.ShareService.class)
+public class ShareServiceImpl extends ServiceImpl<ShareMapper, Share> implements ShareService,
+        com.chelvc.cloud.vehicle.api.service.ShareService{
+
+    @Override
+    public Long addShare() {
+        Long userId = SessionContextHolder.getSession().getId();
+        Share share = new Share();
+        share.setUserId(userId);
+        share.setCreateTime(new Date());
+        this.save(share);
+        return share.getId();
+    }
+
+
+    @Override
+    public ShareDTO getShare(@NonNull Long id) {
+        return this.convert(this.getById(id));
+    }
+
+    @Override
+    public Pagination<ShareDTO> getSharePaging(@NonNull SharePagingParam param) {
+        // todo 后端可以按用户名搜?
+        // 查询分享记录分页
+        Page<Share> page = this.lambdaQuery()
+                .eq(StringUtils.hasText(param.getKeyword()), Share::getUserId, param.getKeyword())
+                .orderByDesc(Share::getId).page(PagingUtils.convert(param.getPaging()));
+        List<Share> records = page.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            return Pagination.empty();
+        }
+
+        // 构建分享记录信息
+        List<ShareDTO> shares = records.stream().map(this::convert).collect(Collectors.toList());
+        return PagingUtils.convert(page, shares);
+    }
+
+    /**
+     * 转换分享记录信息
+     *
+     * @param share 分享记录
+     * @return 分享记录
+     */
+    private ShareDTO convert(Share share) {
+        return ShareCopier.INSTANCE.copying(share);
+    }
+}

+ 12 - 5
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/UserCouponServiceImpl.java

@@ -4,6 +4,8 @@ package com.chelvc.cloud.vehicle.server.service.impl;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chelvc.cloud.uc.api.dto.UserDTO;
+import com.chelvc.cloud.uc.api.service.UserService;
 import com.chelvc.cloud.vehicle.api.constant.CouponClaimType;
 import com.chelvc.cloud.vehicle.api.constant.PromotionStatus;
 import com.chelvc.cloud.vehicle.api.constant.UserCouponStatus;
@@ -44,6 +46,7 @@ public class UserCouponServiceImpl extends ServiceImpl<UserCouponMapper, UserCou
         com.chelvc.cloud.vehicle.api.service.UserCouponService {
 
     private final CouponService couponService;
+    private final UserService userService;
 
     @Override
     public List<UserCouponDTO> listUserCoupons(@NonNull UserCouponQueryParam param) {
@@ -110,9 +113,9 @@ public class UserCouponServiceImpl extends ServiceImpl<UserCouponMapper, UserCou
     public Pagination<UserCouponDTO> getUserCouponPaging(@NonNull UserCouponPagingParam param) {
         // 查询优惠券领取记录列表
         Page<UserCoupon> page = this.lambdaQuery()
-                .eq(Objects.nonNull(param.getType()), UserCoupon::getType, param.getType().name())
-                .eq(UserCouponStatus.USED.equals(param.getStatus()), UserCoupon::getUsed, 1)
-                .eq(UserCouponStatus.CLAIMED.equals(param.getStatus()), UserCoupon::getUsed, 0)
+                .eq(Objects.nonNull(param.getType()), UserCoupon::getType, param.getType())
+                .eq(Objects.nonNull(param.getStatus()), UserCoupon::getStatus, param.getStatus())
+                .eq(UserCoupon::getDeleted, false)
                 .orderByDesc(UserCoupon::getId).page(PagingUtils.convert(param.getPaging()));
         List<UserCoupon> records = page.getRecords();
         if (CollectionUtils.isEmpty(records)) {
@@ -144,11 +147,15 @@ public class UserCouponServiceImpl extends ServiceImpl<UserCouponMapper, UserCou
             throw new ResourceUnavailableException("当前优惠券不允许免费领取");
         }
         Long userId = SessionContextHolder.getId();
+        UserDTO user = ResourceUtils.required(this.userService.getUser(userId), "用户不存在");
         // 检查该用户可领取的优惠券的数量
         this.checkCouponLimit(coupon, userId);
         // 保存优惠券领取记录
-        UserCoupon userCoupon = UserCoupon.builder().userId(userId).couponId(couponId)
-                .type(coupon.getType()).used(false).build();
+        UserCoupon userCoupon = UserCoupon.builder().userId(userId).userName(user.getNickname())
+                .couponId(couponId).status(UserCouponStatus.CLAIMED)
+                .type(coupon.getType())
+                .platformFlag(PromotionUtils.PLATFORM_ID.equals(coupon.getMerchantId()))
+                .build();
         this.save(userCoupon);
         // 修改优惠券的领取数量
         couponService.updateCouponReceivedNum(couponId, 1);