zhaoyun 2 months ago
parent
commit
1429d6f293
29 changed files with 1744 additions and 16 deletions
  1. 97 0
      ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/merchant/MerchantArticleCategoryController.java
  2. 111 0
      ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/merchant/MerchantArticleController.java
  3. 142 0
      ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/service/SelectedService.java
  4. 85 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/article/MerchantArticle.java
  5. 59 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/article/MerchantArticleCategory.java
  6. 4 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/seckill/SeckillActivity.java
  7. 73 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/selected/SelectedActivity.java
  8. 53 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/selected/SelectedActivityTime.java
  9. 139 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/selected/SelectedProduct.java
  10. 57 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/selected/SelectedTimeInterval.java
  11. 16 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/query/IndexMerchantQuery.java
  12. 4 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/SeckillActivitySaveRequest.java
  13. 3 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/SeckillProductSearchRequest.java
  14. 1 1
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/IndexInfoResponse.java
  15. 2 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/SeckillProductPageResponse.java
  16. 19 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/utils/DistanceCalculator.java
  17. 21 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/utils/GeoUtils.java
  18. 42 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/BaiduMapAPI.java
  19. 28 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/TencentMapApiExample.java
  20. 17 0
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/dao/MerchantArticleCategoryDao.java
  21. 21 0
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/dao/MerchantArticleDao.java
  22. 64 0
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/MerchantArticleCategoryService.java
  23. 119 0
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/MerchantArticleService.java
  24. 1 1
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/MerchantService.java
  25. 181 0
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/MerchantArticleCategoryServiceImpl.java
  26. 351 0
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/MerchantArticleServiceImpl.java
  27. 21 13
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/MerchantServiceImpl.java
  28. 6 0
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/SeckillProductServiceImpl.java
  29. 7 1
      ydd_mer_java/crmeb-service/src/main/resources/mapper/seckill/SeckillProductMapper.xml

+ 97 - 0
ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/merchant/MerchantArticleCategoryController.java

@@ -0,0 +1,97 @@
+package com.zbkj.admin.controller.merchant;
+
+import com.zbkj.common.annotation.LogControllerAnnotation;
+import com.zbkj.common.enums.MethodType;
+import com.zbkj.common.request.ArticleCategoryRequest;
+import com.zbkj.common.response.ArticleCategoryResponse;
+import com.zbkj.common.result.CommonResult;
+import com.zbkj.service.service.MerchantArticleCategoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+
+/**
+ * 文章管理表 前端控制器
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Slf4j
+@RestController
+@RequestMapping("api/admin/merchant/article/category")
+@Api(tags = "文章分类管理")
+public class MerchantArticleCategoryController {
+
+    @Autowired
+    private MerchantArticleCategoryService articleCategoryService;
+
+    @PreAuthorize("hasAuthority('merchant:article:category:list')")
+    @ApiOperation(value = "文章分类分页列表")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    public CommonResult<List<ArticleCategoryResponse>> getList() {
+        return CommonResult.success(articleCategoryService.getAdminList());
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.ADD, description = "新增文章分类")
+    @PreAuthorize("hasAuthority('merchant:article:category:add')")
+    @ApiOperation(value = "新增文章分类")
+    @RequestMapping(value = "/add", method = RequestMethod.POST)
+    public CommonResult<String> add(@RequestBody @Validated ArticleCategoryRequest request) {
+        if (articleCategoryService.create(request)) {
+            return CommonResult.success();
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.DELETE, description = "删除文章分类")
+    @PreAuthorize("hasAuthority('merchant:article:category:delete')")
+    @ApiOperation(value = "删除文章分类")
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
+    public CommonResult<String> delete(@PathVariable(value = "id") Integer id) {
+        if (articleCategoryService.deleteById(id)) {
+            return CommonResult.success();
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "修改文章分类")
+    @PreAuthorize("hasAuthority('merchant:article:category:update')")
+    @ApiOperation(value = "修改文章分类")
+    @RequestMapping(value = "/update", method = RequestMethod.POST)
+    public CommonResult<String> update(@RequestBody @Validated ArticleCategoryRequest request) {
+        if (articleCategoryService.edit(request)) {
+            return CommonResult.success();
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "文章分类开关")
+    @PreAuthorize("hasAuthority('merchant:article:category:switch')")
+    @ApiOperation(value="文章分类开关")
+    @RequestMapping(value = "/switch/{id}", method = RequestMethod.POST)
+    public CommonResult<String> categorySwitch(@PathVariable("id") Integer id) {
+        if (articleCategoryService.categorySwitch(id)) {
+            return CommonResult.success("切换文章分类开关成功");
+        }
+        return CommonResult.failed("切换文章分类开关失败");
+    }
+}
+
+
+

+ 111 - 0
ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/merchant/MerchantArticleController.java

@@ -0,0 +1,111 @@
+package com.zbkj.admin.controller.merchant;
+
+import com.zbkj.common.annotation.LogControllerAnnotation;
+import com.zbkj.common.enums.MethodType;
+import com.zbkj.common.page.CommonPage;
+import com.zbkj.common.request.ArticleRequest;
+import com.zbkj.common.request.ArticleSearchRequest;
+import com.zbkj.common.request.PageParamRequest;
+import com.zbkj.common.response.ArticleInfoResponse;
+import com.zbkj.common.response.ArticleResponse;
+import com.zbkj.common.result.CommonResult;
+import com.zbkj.service.service.MerchantArticleService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * 文章管理表 前端控制器
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Slf4j
+@RestController
+@RequestMapping("api/admin/merchant/article")
+@Api(tags = "文章管理")
+public class MerchantArticleController {
+
+    @Autowired
+    private MerchantArticleService articleService;
+
+    @PreAuthorize("hasAuthority('merchant:article:list')")
+    @ApiOperation(value = "文章分页列表")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "cid", value = "分类id", dataType = "int"),
+            @ApiImplicitParam(name = "title", value = "标题", dataType = "string"),
+            @ApiImplicitParam(name = "author", value = "作者", dataType = "string")
+    })
+    public CommonResult<CommonPage<ArticleResponse>> getList(@Validated ArticleSearchRequest request,
+                                                             @Validated PageParamRequest pageParamRequest) {
+        return CommonResult.success(CommonPage.restPage(articleService.getAdminList(request, pageParamRequest)));
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.ADD, description = "文章新增")
+    @PreAuthorize("hasAuthority('merchant:article:save')")
+    @ApiOperation(value = "文章新增")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    public CommonResult<String> save(@RequestBody @Validated ArticleRequest articleRequest) {
+        if (articleService.create(articleRequest)) {
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.DELETE, description = "删除文章")
+    @PreAuthorize("hasAuthority('merchant:article:delete')")
+    @ApiOperation(value = "删除文章")
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
+    public CommonResult<String> delete(@PathVariable(value = "id") Integer id) {
+        if (articleService.deleteById(id)) {
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "文章编辑")
+    @PreAuthorize("hasAuthority('merchant:article:update')")
+    @ApiOperation(value = "文章编辑")
+    @RequestMapping(value = "/update", method = RequestMethod.POST)
+    public CommonResult<String> update(@RequestBody @Validated ArticleRequest articleRequest) {
+        if (articleService.updateArticle(articleRequest)) {
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+
+    @PreAuthorize("hasAuthority('merchant:article:info')")
+    @ApiOperation(value = "文章详情")
+    @RequestMapping(value = "/info/{id}", method = RequestMethod.GET)
+    public CommonResult<ArticleInfoResponse> info(@PathVariable(value = "id") Integer id) {
+        return CommonResult.success(articleService.getDetail(id));
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "文章开关")
+    @PreAuthorize("hasAuthority('merchant:article:switch')")
+    @ApiOperation(value = "文章开关")
+    @RequestMapping(value = "/switch/{id}", method = RequestMethod.POST)
+    public CommonResult<String> articleSwitch(@PathVariable("id") Integer id) {
+        if (articleService.articleSwitch(id)) {
+            return CommonResult.success("切换文章开关成功");
+        }
+        return CommonResult.failed("切换文章开关失败");
+    }
+}
+
+
+

+ 142 - 0
ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/service/SelectedService.java

@@ -0,0 +1,142 @@
+package com.zbkj.admin.service;
+
+import com.github.pagehelper.PageInfo;
+import com.zbkj.common.request.*;
+import com.zbkj.common.response.SeckillActivityDetailResponse;
+import com.zbkj.common.response.SeckillActivityPageResponse;
+import com.zbkj.common.response.SeckillProductPageResponse;
+import com.zbkj.common.response.SeckillTimeIntervalResponse;
+
+import java.util.List;
+
+/**
+ * 精选service
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+public interface SelectedService {
+
+    /**
+     * 新增秒杀时段
+     */
+    Boolean createTimeInterval(SeckillTimeIntervalRequest request);
+
+    /**
+     * 编辑秒杀时段
+     */
+    Boolean updateTimeInterval(SeckillTimeIntervalRequest request);
+
+    /**
+     * 删除秒杀时段
+     * @param id 秒杀时段ID
+     */
+    Boolean deleteTimeInterval(Integer id);
+
+    /**
+     * 秒杀时段列表
+     * @param request 搜索参数
+     */
+    List<SeckillTimeIntervalResponse> getTimeIntervalList(SeckillTimeIntervalSearchRequest request);
+
+    /**
+     * 秒杀时段开关
+     * @param id 秒杀时段ID
+     */
+    Boolean switchTimeInterval(Integer id);
+
+    /**
+     * 新增秒杀活动
+     */
+    Boolean createActivity(SeckillActivitySaveRequest request);
+
+    /**
+     * 秒杀活动分页列表
+     */
+    PageInfo<SeckillActivityPageResponse> activityPage(SeckillActivitySearchRequest request);
+
+    /**
+     * 秒杀活动详情
+     */
+    SeckillActivityDetailResponse activityDetail(Integer id);
+
+    /**
+     * 编辑秒杀活动
+     */
+    Boolean updateActivity(SeckillActivitySaveRequest request);
+
+    /**
+     * 删除秒杀活动
+     * @param id 活动id
+     */
+    Boolean deleteActivity(Integer id);
+
+    /**
+     * 秒杀活动开关
+     * @param id 活动id
+     */
+    Boolean switchActivity(Integer id);
+
+    /**
+     * 获取秒杀商品分页列表
+     * @param request 搜索参数
+     */
+    PageInfo<SeckillProductPageResponse> getSeckillProductPage(SeckillProductSearchRequest request);
+
+    /**
+     * 秒杀商品设置活动价
+     */
+    Boolean setProductPrice(SeckillProductPriceRequest request);
+
+    /**
+     * 秒杀商品强制下架
+     */
+    Boolean forceDownProduct(SeckillProductBatchRequest request);
+
+    /**
+     * 秒杀商品删除
+     */
+    Boolean deleteProduct(SeckillProductBatchRequest request);
+
+    /**
+     * 秒杀商品上架
+     */
+    Boolean upProduct(SeckillProductBatchRequest request);
+
+    /**
+     * 秒杀商品下架
+     */
+    Boolean downProduct(SeckillProductBatchRequest request);
+
+    /**
+     * 商户端删除秒杀商品
+     */
+    Boolean merchantDeleteProduct(SeckillProductBatchRequest request);
+
+    /**
+     * 秒杀商品撤回审核
+     * @param id 秒杀商品ID
+     */
+    Boolean withdrawProductAudit(Integer id);
+
+    /**
+     * 商户秒杀商品添加
+     */
+    Boolean merchantAddProduct(SeckillProductAddRequest request);
+
+    /**
+     * 平台秒杀商品添加
+     */
+    Boolean platAddProduct(SeckillProductAddRequest request);
+
+    /**
+     * 秒杀商品审核
+     */
+    Boolean auditProduct(ProductAuditRequest request);
+}

+ 85 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/article/MerchantArticle.java

@@ -0,0 +1,85 @@
+package com.zbkj.common.model.article;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 文章管理表
+ * </p>
+ *
+ * @author HZW
+ * @since 2022-07-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("eb_merchant_article")
+@ApiModel(value="Article对象", description="文章管理表")
+public class MerchantArticle implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "文章ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "分类id")
+    private Integer cid;
+
+    @ApiModelProperty(value = "文章标题")
+    private String title;
+
+    @ApiModelProperty(value = "文章作者")
+    private String author;
+
+    @ApiModelProperty(value = "文章封面")
+    private String cover;
+
+    @ApiModelProperty(value = "文章简介")
+    private String synopsis;
+
+    @ApiModelProperty(value = "文章内容")
+    private String content;
+
+    @ApiModelProperty(value = "浏览次数")
+    private Long visit;
+
+    @ApiModelProperty(value = "商户id")
+    private Integer merId;
+
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
+    @ApiModelProperty(value = "状态,0-关闭,1-开启")
+    private Boolean status;
+
+    @ApiModelProperty(value = "是否热门(小程序)")
+    private Boolean isHot;
+
+    @ApiModelProperty(value = "是否轮播图(小程序)")
+    private Boolean isBanner;
+
+    @ApiModelProperty(value = "商品关联id")
+    private Integer productId;
+
+    @ApiModelProperty(value = "是否删除,0-未删除,1-删除")
+    private Boolean isDel;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+
+}

+ 59 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/article/MerchantArticleCategory.java

@@ -0,0 +1,59 @@
+package com.zbkj.common.model.article;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 文章分类表
+ * </p>
+ *
+ * @author HZW
+ * @since 2022-07-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("eb_merchant_article_category")
+@ApiModel(value="ArticleCategory对象", description="文章分类表")
+public class MerchantArticleCategory implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "文章分类ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "分类名称")
+    private String name;
+
+    @ApiModelProperty(value = "分类图标")
+    private String icon;
+
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+    @ApiModelProperty(value = "商户id")
+    private Integer merId;
+    @ApiModelProperty(value = "状态,0-关闭,1-开启")
+    private Boolean status;
+
+    @ApiModelProperty(value = "是否删除,0-未删除,1-删除")
+    private Boolean isDel;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+
+}

+ 4 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/seckill/SeckillActivity.java

@@ -9,6 +9,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
 
@@ -69,5 +70,8 @@ public class SeckillActivity implements Serializable {
     @ApiModelProperty(value = "更新时间")
     private Date updateTime;
 
+    @ApiModelProperty(value = "是否热门(小程序)", example = "false")
+    private Boolean isHot;
+
 
 }

+ 73 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/selected/SelectedActivity.java

@@ -0,0 +1,73 @@
+package com.zbkj.common.model.selected;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 精选活动表
+ * </p>
+ *
+ * @author HZW
+ * @since 2022-12-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("eb_selected_activity")
+@ApiModel(value="SelectedActivity对象", description="精选活动表")
+public class SelectedActivity implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "精选活动ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "精选活动名称")
+    private String name;
+
+    @ApiModelProperty(value = "精选开始日期")
+    private String startDate;
+
+    @ApiModelProperty(value = "精选结束日期")
+    private String endDate;
+
+    @ApiModelProperty(value = "活动期间单笔下单购买数量,0不限制")
+    private Integer oneQuota;
+
+    @ApiModelProperty(value = "全部活动期间,用户购买总数限制,0不限制")
+    private Integer allQuota;
+
+    @ApiModelProperty(value = "商家星级")
+    private Integer merStars;
+
+    @ApiModelProperty(value = "商品类型,英文逗号拼接")
+    private String proCategory;
+
+    @ApiModelProperty(value = "开启状态: 0=关闭 1=开启")
+    private Integer isOpen;
+
+    @ApiModelProperty(value = "状态:0未开始,1进行中,2已结束")
+    private Integer status;
+
+    @ApiModelProperty(value = "删除标记 0=未删除 1=删除")
+    private Boolean isDel;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+
+}

+ 53 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/selected/SelectedActivityTime.java

@@ -0,0 +1,53 @@
+package com.zbkj.common.model.selected;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 精选活动时间表
+ * </p>
+ *
+ * @author HZW
+ * @since 2022-12-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("eb_selected_activity_time")
+@ApiModel(value="SelectedActivityTime对象", description="精选活动时间表")
+public class SelectedActivityTime implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "精选id")
+    private Integer selectedId;
+
+    @ApiModelProperty(value = "精选时段id")
+    private Integer timeIntervalId;
+
+    @ApiModelProperty(value = "精选开始日期")
+    private Integer startDate;
+
+    @ApiModelProperty(value = "精选结束日期")
+    private Integer endDate;
+
+    @ApiModelProperty(value = "精选开启时间")
+    private Integer startTime;
+
+    @ApiModelProperty(value = "精选结束时间")
+    private Integer endTime;
+
+
+}

+ 139 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/selected/SelectedProduct.java

@@ -0,0 +1,139 @@
+package com.zbkj.common.model.selected;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zbkj.common.model.product.ProductAttrValue;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 精选商品表
+ * </p>
+ *
+ * @author HZW
+ * @since 2022-12-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("eb_selected_product")
+@ApiModel(value="SelectedProduct对象", description="精选商品表")
+public class SelectedProduct implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "精选商品ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "活动id")
+    private Integer activityId;
+
+    @ApiModelProperty(value = "商品id")
+    private Integer productId;
+
+    @ApiModelProperty(value = "商户Id")
+    private Integer merId;
+
+    @ApiModelProperty(value = "商品图片")
+    private String image;
+
+    @ApiModelProperty(value = "展示图")
+    private String flatPattern;
+
+    @ApiModelProperty(value = "轮播图")
+    private String sliderImage;
+
+    @ApiModelProperty(value = "商品名称")
+    private String name;
+
+    @ApiModelProperty(value = "商品简介")
+    private String intro;
+
+    @ApiModelProperty(value = "关键字,英文逗号拼接")
+    private String keyword;
+
+    @ApiModelProperty(value = "品牌id")
+    private Integer brandId;
+
+    @ApiModelProperty(value = "平台分类id")
+    private Integer categoryId;
+
+    @ApiModelProperty(value = "保障服务ids(英文逗号拼接)")
+    private String guaranteeIds;
+
+    @ApiModelProperty(value = "商品价格")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "精选价格")
+    private BigDecimal selectedPrice;
+
+    @ApiModelProperty(value = "单位名")
+    private String unitName;
+
+    @ApiModelProperty(value = "销量")
+    private Integer sales;
+
+    @ApiModelProperty(value = "运费模板ID")
+    private Integer tempId;
+
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
+    @ApiModelProperty(value = "规格 0单 1多")
+    private Boolean specType;
+
+    @ApiModelProperty(value = "状态(0:未上架,1:上架)")
+    private Boolean isShow;
+
+    @ApiModelProperty(value = "审核状态:1-待审核,2-审核成功,3-审核拒绝")
+    private Integer auditStatus;
+
+    @ApiModelProperty(value = "拒绝原因")
+    private String reason;
+
+    @ApiModelProperty(value = "限购总数显示.不变")
+    private Integer quotaShow;
+
+    @ApiModelProperty(value = "限购总数,随减")
+    private Integer quota;
+
+    @ApiModelProperty(value = "是否删除")
+    private Boolean isDel;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "基础类型:0=普通商品,1-积分商品,2-虚拟商品,4=视频号,5-云盘商品,6-卡密商品")
+    private Integer type;
+
+    @ApiModelProperty(value = "规格sku")
+    @TableField(exist = false)
+    private List<ProductAttrValue> attrValue;
+
+    @ApiModelProperty(value = "商品分类名称")
+    @TableField(exist = false)
+    private String categoryName;
+
+    @ApiModelProperty(value = "商户名称")
+    @TableField(exist = false)
+    private String merName;
+
+    @ApiModelProperty(value = "商品详情")
+    @TableField(exist = false)
+    private String content;
+}

+ 57 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/selected/SelectedTimeInterval.java

@@ -0,0 +1,57 @@
+package com.zbkj.common.model.selected;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 精选时段表
+ * </p>
+ *
+ * @author HZW
+ * @since 2022-12-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("eb_selected_time_interval")
+@ApiModel(value="SelectedTimeInterval对象", description="精选时段表")
+public class SelectedTimeInterval implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "精选时段名称")
+    private String name;
+
+    @ApiModelProperty(value = "精选时段开始时间")
+    private Integer startTime;
+
+    @ApiModelProperty(value = "精选时段结束时间")
+    private Integer endTime;
+
+    @ApiModelProperty(value = "状态 0=关闭 1=开启")
+    private Integer status;
+
+    @ApiModelProperty(value = "删除标记 0=未删除 1=删除")
+    private Boolean isDel;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+
+}

+ 16 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/query/IndexMerchantQuery.java

@@ -0,0 +1,16 @@
+package com.zbkj.common.query;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class IndexMerchantQuery {
+    @ApiModelProperty(value = "维度")
+    private  Double latitude;
+    @ApiModelProperty(value = "经度")
+    private Double longitude;
+    @ApiModelProperty(value = "条件集合0-按销售排行,1-满减大促,2-首单立减,3-减配送费")
+    private List<String> condition;
+}

+ 4 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/SeckillActivitySaveRequest.java

@@ -67,6 +67,10 @@ public class SeckillActivitySaveRequest implements Serializable {
     @NotBlank(message = "秒杀时段不能为空")
     private String timeIntervals;
 
+    @ApiModelProperty(value = "是否热门(小程序)", example = "false")
+    @NotNull(message = "是否热门(小程序)不能为空")
+    private Boolean isHot;
+
     @ApiModelProperty(value = "秒杀商品列表")
     private List<SeckillActivityProductRequest> productList;
 }

+ 3 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/SeckillProductSearchRequest.java

@@ -52,4 +52,7 @@ public class SeckillProductSearchRequest extends PageParamRequest implements Ser
 
     @ApiModelProperty(value = "秒杀活动ID列表,前端不填")
     private List<Integer> activityIdList;
+
+    @ApiModelProperty(value = "小程序:0关闭,1开启")
+    private Integer isHot;
 }

+ 1 - 1
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/IndexInfoResponse.java

@@ -60,5 +60,5 @@ public class IndexInfoResponse implements Serializable {
 
 
     @ApiModelProperty(value = "商户对应推荐商品")
-    private List<ProMerchantProductResponse> proList;
+    private List<SeckillProductPageResponse> proList;
 }

+ 2 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/SeckillProductPageResponse.java

@@ -94,4 +94,6 @@ public class SeckillProductPageResponse {
 
     @ApiModelProperty(value = "基础类型:0=普通商品,1-积分商品,2-虚拟商品,4=视频号,5-云盘商品,6-卡密商品")
     private Integer type;
+    @ApiModelProperty(value = "商品简介")
+    private String intro;
 }

+ 19 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/utils/DistanceCalculator.java

@@ -0,0 +1,19 @@
+package com.zbkj.common.utils;
+
+/**
+ * 计算距离和时间
+ */
+public class DistanceCalculator {
+    public static final double AVERAGE_SPEED = 25.0; // 平均速度,单位为公里/小时(例如,电动车平均速度)
+    public static double haversineDistance(double lat1, double lon1, double lat2, double lon2) {
+        double distance = GeoUtils.haversineDistance(lat1, lon1, lat2, lon2);
+        double deliveTime = distanceToTimeInMinutes(distance, AVERAGE_SPEED);
+        return deliveTime; // 返回配送时间,单位为分钟
+    }
+    public static int distanceToTimeInMinutes(double distance, double speed) {
+        // 速度单位为 km/h,距离单位为 km,返回时间单位为分钟
+        double hours = distance / speed; // 计算小时数
+        int minutes = (int) (hours * 60); // 将小时转换为分钟
+        return minutes;
+    }
+}

+ 21 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/utils/GeoUtils.java

@@ -0,0 +1,21 @@
+package com.zbkj.common.utils;
+
+public class GeoUtils {
+    private static final double EARTH_RADIUS = 6371.0; // 地球半径,单位为公里
+
+    public static double haversineDistance(double lat1, double lon1, double lat2, double lon2) {
+        lat1 = Math.toRadians(lat1);
+        lon1 = Math.toRadians(lon1);
+        lat2 = Math.toRadians(lat2);
+        lon2 = Math.toRadians(lon2);
+
+        double dlon = lon2 - lon1;
+        double dlat = lat2 - lat1;
+
+        double a = Math.pow(Math.sin(dlat / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(dlon / 2), 2);
+        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
+        double distance = EARTH_RADIUS * c;
+
+        return distance; // 返回距离,单位为公里
+    }
+}

+ 42 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/BaiduMapAPI.java

@@ -0,0 +1,42 @@
+package com.zbkj.front;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.text.DecimalFormat;
+
+import org.json.JSONObject;
+
+public class BaiduMapAPI {
+    public static void main(String[] args) {
+        try {
+            String address = "长沙枫林3路8号"; // 例如:北京市海淀区某地址
+            String apiKey = "XsXnvmH2oO7xNwHK5xIWrblxHZgMmrI5"; // 替换为你的百度地图API Key
+            String sn="2NczeKtfgzr4r1Omej0hNwGoGbamrU8j";
+            String urlString = "http://api.map.baidu.com/geocoding/v3/?address=" + address + "&output=json&ak=" + apiKey;
+            URL url = new URL(urlString);
+            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+            connection.setRequestMethod("GET");
+            connection.connect();
+            DecimalFormat df = new DecimalFormat("#.#####");
+            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+            StringBuilder response = new StringBuilder();
+            String line;
+            while ((line = reader.readLine()) != null) {
+                response.append(line);
+            }
+            reader.close();
+            connection.disconnect();
+            System.out.println(response.toString());
+            JSONObject jsonResponse = new JSONObject(response.toString());
+            JSONObject result = jsonResponse.getJSONObject("result");
+            JSONObject location = result.getJSONObject("location");
+            double lat = location.getDouble("lat"); // 纬度
+            double lng = location.getDouble("lng"); // 经度
+            System.out.println("纬度: " + lat + ", 经度: " + lng);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 28 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/TencentMapApiExample.java

@@ -0,0 +1,28 @@
+package com.zbkj.front.service;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+import org.json.JSONObject;
+
+import java.io.IOException;
+
+public class TencentMapApiExample {
+    private static final String API_KEY = "7FJBZ-ACWCN-EFWFQ-SBXR5-QXC7K-LPF2U";
+    private static final String BASE_URL = "https://apis.map.qq.com/ws/";
+
+    public static void main(String[] args) {
+        OkHttpClient client = new OkHttpClient();
+        String url = BASE_URL + "distance/v1/?mode=bicycle&from=39.905206,116.399994&to=39.917801,116.424279&key=" + API_KEY;
+        Request request = new Request.Builder()
+                .url(url)
+                .build();
+
+        try (Response response = client.newCall(request).execute()) {
+            if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
+            String responseData = response.body().string();
+            System.out.println(responseData);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 17 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/dao/MerchantArticleCategoryDao.java

@@ -0,0 +1,17 @@
+package com.zbkj.service.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zbkj.common.model.article.ArticleCategory;
+import com.zbkj.common.model.article.MerchantArticleCategory;
+
+/**
+ * <p>
+ * 文章分类表 Mapper 接口
+ * </p>
+ *
+ * @author HZW
+ * @since 2022-07-19
+ */
+public interface MerchantArticleCategoryDao extends BaseMapper<MerchantArticleCategory> {
+
+}

+ 21 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/dao/MerchantArticleDao.java

@@ -0,0 +1,21 @@
+package com.zbkj.service.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zbkj.common.model.article.Article;
+import com.zbkj.common.model.article.MerchantArticle;
+
+/**
+ * 文章管理表 Mapper 接口
+ *  +----------------------------------------------------------------------
+ *  | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ *  +----------------------------------------------------------------------
+ *  | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ *  +----------------------------------------------------------------------
+ *  | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ *  +----------------------------------------------------------------------
+ *  | Author: CRMEB Team <admin@crmeb.com>
+ *  +----------------------------------------------------------------------
+ */
+public interface MerchantArticleDao extends BaseMapper<MerchantArticle> {
+
+}

+ 64 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/MerchantArticleCategoryService.java

@@ -0,0 +1,64 @@
+package com.zbkj.service.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zbkj.common.model.article.ArticleCategory;
+import com.zbkj.common.model.article.MerchantArticleCategory;
+import com.zbkj.common.request.ArticleCategoryRequest;
+import com.zbkj.common.response.ArticleCategoryResponse;
+
+import java.util.List;
+
+/**
+ * ArticleCategoryService 接口
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+public interface MerchantArticleCategoryService extends IService<MerchantArticleCategory> {
+
+    /**
+     * 获取文章分类列表
+     */
+    List<ArticleCategoryResponse> getAdminList();
+
+    /**
+     * 文章新增
+     *
+     * @param request 文章分类新增对象
+     * @return Boolean
+     */
+    Boolean create(ArticleCategoryRequest request);
+
+    /**
+     * 文章分类删除
+     *
+     * @param id 文章分类id
+     * @return Boolean
+     */
+    Boolean deleteById(Integer id);
+
+    /**
+     * 文章分类修改
+     *
+     * @param request 文章分类修改参数
+     */
+    Boolean edit(ArticleCategoryRequest request);
+
+    /**
+     * 文章分类开关
+     * @param id 文章分类ID
+     * @return Boolean
+     */
+    Boolean categorySwitch(Integer id);
+
+    /**
+     * 获取移动端文章分类列表
+     */
+    List<ArticleCategoryResponse> getFrontList();
+}

+ 119 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/MerchantArticleService.java

@@ -0,0 +1,119 @@
+package com.zbkj.service.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.pagehelper.PageInfo;
+import com.zbkj.common.model.article.Article;
+import com.zbkj.common.model.article.MerchantArticle;
+import com.zbkj.common.request.ArticleRequest;
+import com.zbkj.common.request.ArticleSearchRequest;
+import com.zbkj.common.request.PageParamRequest;
+import com.zbkj.common.response.ArticleInfoResponse;
+import com.zbkj.common.response.ArticleResponse;
+
+import java.util.List;
+
+/**
+ * ArticleService 接口
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+public interface MerchantArticleService extends IService<MerchantArticle> {
+
+    /**
+     * 文章列表
+     *
+     * @param cid              文章分类id
+     * @param pageParamRequest 分页类参数
+     * @return PageInfo<Article>
+     */
+    PageInfo<ArticleResponse> getList(Integer cid, PageParamRequest pageParamRequest);
+
+    /**
+     * 获取文章列表
+     *
+     * @param request          请求参数
+     * @param pageParamRequest 分页参数
+     * @return PageInfo
+     */
+    PageInfo<ArticleResponse> getAdminList(ArticleSearchRequest request, PageParamRequest pageParamRequest);
+
+    /**
+     * 文章详情
+     *
+     * @param id 文章id
+     * @return ArticleVo
+     */
+    ArticleInfoResponse getVoByFront(Integer id);
+
+    /**
+     * 获取移动端banner列表
+     *
+     * @return List<Article>
+     */
+    List<MerchantArticle> getBannerList();
+
+    /**
+     * 获取移动端热门列表
+     *
+     * @return List<ArticleResponse>
+     */
+    List<ArticleResponse> getHotList();
+
+    /**
+     * 文章新增
+     *
+     * @param articleRequest 文章新增参数
+     * @return Boolean
+     */
+    Boolean create(ArticleRequest articleRequest);
+
+    /**
+     * 文章删除
+     *
+     * @param id 文章id
+     * @return Boolean
+     */
+    Boolean deleteById(Integer id);
+
+    /**
+     * 文章修改
+     *
+     * @param articleRequest 文章修改参数
+     */
+    Boolean updateArticle(ArticleRequest articleRequest);
+
+    /**
+     * 获取文章详情
+     *
+     * @param id 文章id
+     * @return Article
+     */
+    ArticleInfoResponse getDetail(Integer id);
+
+    /**
+     * 文章是否使用分类
+     *
+     * @param categoryId 分类ID
+     * @return Boolean
+     */
+    Boolean isUseCategory(Integer categoryId);
+
+    /**
+     * 获取首页新闻头条
+     */
+    List<MerchantArticle> getIndexHeadline();
+
+    /**
+     * 文章开关
+     * @param id 文章id
+     * @return Boolean
+     */
+    Boolean articleSwitch(Integer id);
+}

+ 1 - 1
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/MerchantService.java

@@ -365,5 +365,5 @@ public interface MerchantService extends IService<Merchant> {
      * 首页商户推荐商品列表
      * @param recomdProdsNum 店铺街推荐商品数量
      */
-    List<ProMerchantProductResponse> findProIndexList( Integer recomdProdsNum);
+    List<SeckillProductPageResponse> findProIndexList( Integer recomdProdsNum);
 }

+ 181 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/MerchantArticleCategoryServiceImpl.java

@@ -0,0 +1,181 @@
+package com.zbkj.service.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zbkj.common.exception.CrmebException;
+import com.zbkj.common.model.admin.SystemAdmin;
+import com.zbkj.common.model.article.ArticleCategory;
+import com.zbkj.common.model.article.MerchantArticle;
+import com.zbkj.common.model.article.MerchantArticleCategory;
+import com.zbkj.common.request.ArticleCategoryRequest;
+import com.zbkj.common.response.ArticleCategoryResponse;
+import com.zbkj.common.result.CommonResultCode;
+import com.zbkj.common.result.MarketingResultCode;
+import com.zbkj.common.utils.SecurityUtil;
+import com.zbkj.service.dao.ArticleCategoryDao;
+import com.zbkj.service.dao.MerchantArticleCategoryDao;
+import com.zbkj.service.service.*;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * ArticleCategoryServiceImpl 接口实现
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Service
+public class MerchantArticleCategoryServiceImpl extends ServiceImpl<MerchantArticleCategoryDao, MerchantArticleCategory> implements MerchantArticleCategoryService {
+
+    @Resource
+    private MerchantArticleCategoryDao dao;
+
+    @Autowired
+    private MerchantArticleService articleService;
+
+    @Autowired
+    private SystemAttachmentService systemAttachmentService;
+
+    /**
+     * 获取文章分类列表
+     */
+    @Override
+    public List<ArticleCategoryResponse> getAdminList() {
+        LambdaQueryWrapper<MerchantArticleCategory> lqw = Wrappers.lambdaQuery();
+        SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser();
+        lqw.eq(MerchantArticleCategory::getMerId, systemAdmin.getMerId());
+        lqw.eq(MerchantArticleCategory::getIsDel, false);
+        lqw.orderByDesc(MerchantArticleCategory::getSort, MerchantArticleCategory::getId);
+        List<MerchantArticleCategory> categoryList = dao.selectList(lqw);
+        if (CollUtil.isEmpty(categoryList)) {
+            return CollUtil.newArrayList();
+        }
+        List<ArticleCategoryResponse> responseList = CollUtil.newArrayList();
+        for (MerchantArticleCategory category : categoryList) {
+            ArticleCategoryResponse response = new ArticleCategoryResponse();
+            BeanUtils.copyProperties(category, response);
+            responseList.add(response);
+        }
+        return responseList;
+    }
+
+    /**
+     * 文章分类新增
+     *
+     * @param request 文章分类新增对象
+     * @return Boolean
+     */
+    @Override
+    public Boolean create(ArticleCategoryRequest request) {
+        MerchantArticleCategory articleCategory = new MerchantArticleCategory();
+        BeanUtils.copyProperties(request, articleCategory);
+        articleCategory.setId(null);
+        if (StrUtil.isNotBlank(request.getIcon())) {
+            articleCategory.setIcon(systemAttachmentService.clearPrefix(articleCategory.getIcon()));
+        }
+        SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser();
+       articleCategory.setMerId(systemAdmin.getMerId());
+        articleCategory.setStatus(true);
+        return save(articleCategory);
+    }
+
+    /**
+     * 文章分类删除
+     *
+     * @param id 文章分类id
+     * @return Boolean
+     */
+    @Override
+    public Boolean deleteById(Integer id) {
+        MerchantArticleCategory articleCategory = getByIdException(id);
+        if (articleService.isUseCategory(id)) {
+            throw new CrmebException(MarketingResultCode.ARTICLE_CATEGORY_USED);
+        }
+        articleCategory.setIsDel(true);
+        return dao.updateById(articleCategory) > 0;
+    }
+
+    private MerchantArticleCategory getByIdException(Integer id) {
+        MerchantArticleCategory articleCategory = getById(id);
+        if (ObjectUtil.isNull(articleCategory)) {
+            throw new CrmebException(MarketingResultCode.ARTICLE_CATEGORY_NOT_EXIST);
+        }
+        if (articleCategory.getIsDel()) {
+            throw new CrmebException(MarketingResultCode.ARTICLE_CATEGORY_NOT_EXIST);
+        }
+        return articleCategory;
+    }
+
+    /**
+     * 文章分类修改
+     *
+     * @param request 文章分类修改参数
+     */
+    @Override
+    public Boolean edit(ArticleCategoryRequest request) {
+        if (ObjectUtil.isNull(request.getId()) || request.getId() < 1) {
+            throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请传入分类ID");
+        }
+        getByIdException(request.getId());
+        MerchantArticleCategory articleCategory = new MerchantArticleCategory();
+        BeanUtils.copyProperties(request, articleCategory);
+        if (StrUtil.isNotBlank(request.getIcon())) {
+            articleCategory.setIcon(systemAttachmentService.clearPrefix(articleCategory.getIcon()));
+        }
+        return updateById(articleCategory);
+    }
+
+    /**
+     * 文章分类开关
+     * @param id 文章分类ID
+     * @return Boolean
+     */
+    @Override
+    public Boolean categorySwitch(Integer id) {
+        MerchantArticleCategory articleCategory = getByIdException(id);
+        LambdaUpdateWrapper<MerchantArticleCategory> wrapper = Wrappers.lambdaUpdate();
+        wrapper.set(MerchantArticleCategory::getStatus, !articleCategory.getStatus());
+        wrapper.eq(MerchantArticleCategory::getId, id);
+        return update(wrapper);
+    }
+
+    /**
+     * 获取移动端文章分类列表
+     */
+    @Override
+    public List<ArticleCategoryResponse> getFrontList() {
+        LambdaQueryWrapper<MerchantArticleCategory> lqw = Wrappers.lambdaQuery();
+        SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser();
+        lqw.eq(MerchantArticleCategory::getMerId, systemAdmin.getMerId());
+        lqw.eq(MerchantArticleCategory::getIsDel, false);
+        lqw.eq(MerchantArticleCategory::getStatus, true);
+        lqw.orderByDesc(MerchantArticleCategory::getSort, MerchantArticleCategory::getId);
+        List<MerchantArticleCategory> categoryList = dao.selectList(lqw);
+        if (CollUtil.isEmpty(categoryList)) {
+            return CollUtil.newArrayList();
+        }
+        List<ArticleCategoryResponse> responseList = CollUtil.newArrayList();
+        for (MerchantArticleCategory category : categoryList) {
+            ArticleCategoryResponse response = new ArticleCategoryResponse();
+            BeanUtils.copyProperties(category, response);
+            responseList.add(response);
+        }
+        return responseList;
+    }
+}
+

+ 351 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/MerchantArticleServiceImpl.java

@@ -0,0 +1,351 @@
+package com.zbkj.service.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.core.util.URLUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.zbkj.common.constants.SysConfigConstants;
+import com.zbkj.common.exception.CrmebException;
+import com.zbkj.common.model.admin.SystemAdmin;
+import com.zbkj.common.model.article.Article;
+import com.zbkj.common.model.article.MerchantArticle;
+import com.zbkj.common.page.CommonPage;
+import com.zbkj.common.request.ArticleRequest;
+import com.zbkj.common.request.ArticleSearchRequest;
+import com.zbkj.common.request.PageParamRequest;
+import com.zbkj.common.response.ArticleInfoResponse;
+import com.zbkj.common.response.ArticleResponse;
+import com.zbkj.common.result.CommonResultCode;
+import com.zbkj.common.result.MarketingResultCode;
+import com.zbkj.common.utils.SecurityUtil;
+import com.zbkj.service.dao.ArticleDao;
+import com.zbkj.service.dao.MerchantArticleDao;
+import com.zbkj.service.service.ArticleService;
+import com.zbkj.service.service.MerchantArticleService;
+import com.zbkj.service.service.SystemAttachmentService;
+import com.zbkj.service.service.SystemConfigService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * ArticleServiceImpl 接口实现
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Service
+public class MerchantArticleServiceImpl extends ServiceImpl<MerchantArticleDao, MerchantArticle> implements MerchantArticleService {
+
+    private final Logger logger = LoggerFactory.getLogger(MerchantArticleServiceImpl.class);
+
+    @Resource
+    private MerchantArticleDao dao;
+
+    @Autowired
+    private SystemConfigService systemConfigService;
+
+    @Autowired
+    private SystemAttachmentService systemAttachmentService;
+
+    /**
+     * 列表
+     *
+     * @param cid              文章分类id
+     * @param pageParamRequest 分页类参数
+     * @return PageInfo<Article>
+     */
+    @Override
+    public PageInfo<ArticleResponse> getList(Integer cid, PageParamRequest pageParamRequest) {
+        Page<Article> articlePage = PageHelper.startPage(pageParamRequest.getPage(), pageParamRequest.getLimit());
+
+        LambdaQueryWrapper<MerchantArticle> lqw = Wrappers.lambdaQuery();
+        if (ObjectUtil.isNotNull(cid) && cid > 0) {
+            lqw.eq(MerchantArticle::getCid, cid);
+        }
+        lqw.eq(MerchantArticle::getStatus, true);
+        lqw.eq(MerchantArticle::getIsDel, false);
+        lqw.orderByDesc(MerchantArticle::getSort, MerchantArticle::getId).orderByDesc(MerchantArticle::getVisit).orderByDesc(MerchantArticle::getCreateTime);
+        List<MerchantArticle> articleList = dao.selectList(lqw);
+        if (CollUtil.isEmpty(articleList)) {
+            return CommonPage.copyPageInfo(articlePage, CollUtil.newArrayList());
+        }
+        List<ArticleResponse> responseList = articleList.stream().map(e -> {
+            ArticleResponse articleResponse = new ArticleResponse();
+            BeanUtils.copyProperties(e, articleResponse);
+            return articleResponse;
+        }).collect(Collectors.toList());
+        return CommonPage.copyPageInfo(articlePage, responseList);
+    }
+
+    /**
+     * 获取文章列表
+     *
+     * @param request          请求参数
+     * @param pageParamRequest 分页参数
+     * @return PageInfo
+     */
+    @Override
+    public PageInfo<ArticleResponse> getAdminList(ArticleSearchRequest request, PageParamRequest pageParamRequest) {
+        Page<Article> articlePage = PageHelper.startPage(pageParamRequest.getPage(), pageParamRequest.getLimit());
+
+        LambdaQueryWrapper<MerchantArticle> lqw = Wrappers.lambdaQuery();
+        SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser();
+        lqw.eq(MerchantArticle::getMerId, systemAdmin.getMerId());
+        if (ObjectUtil.isNotNull(request.getCid())) {
+            lqw.eq(MerchantArticle::getCid, request.getCid());
+        }
+        if (StrUtil.isNotBlank(request.getTitle())) {
+            String title = URLUtil.decode(request.getTitle());
+            lqw.like(MerchantArticle::getTitle, title);
+        }
+        if (StrUtil.isNotBlank(request.getAuthor())) {
+            lqw.eq(MerchantArticle::getAuthor, URLUtil.decode(request.getAuthor()));
+        }
+        lqw.eq(MerchantArticle::getIsDel, false);
+        lqw.orderByDesc(MerchantArticle::getSort).orderByDesc(MerchantArticle::getId);
+        List<MerchantArticle> articleList = dao.selectList(lqw);
+
+        List<ArticleResponse> responseList = new ArrayList<>();
+        if (CollUtil.isEmpty(articleList)) {
+            return CommonPage.copyPageInfo(articlePage, responseList);
+        }
+        for (MerchantArticle article : articleList) {
+            ArticleResponse response = new ArticleResponse();
+            BeanUtils.copyProperties(article, response);
+            responseList.add(response);
+        }
+        return CommonPage.copyPageInfo(articlePage, responseList);
+    }
+
+    /**
+     * 查询文章详情
+     *
+     * @param id Integer
+     * @return ArticleVo
+     */
+    @Override
+    public ArticleInfoResponse getVoByFront(Integer id) {
+        MerchantArticle article = getById(id);
+        if (ObjectUtil.isNull(article) || article.getIsDel()) {
+            throw new CrmebException(MarketingResultCode.ARTICLE_NOT_EXIST);
+        }
+        if (!article.getStatus()) {
+            throw new CrmebException(MarketingResultCode.ARTICLE_NOT_EXIST);
+        }
+        ArticleInfoResponse articleResponse = new ArticleInfoResponse();
+        BeanUtils.copyProperties(article, articleResponse);
+        if (addArticleVisit(id)) {
+            logger.error("增加文章阅读次数失败,文章id = {}", id);
+        }
+        return articleResponse;
+    }
+
+    /**
+     * 增加文章浏览次数
+     *
+     * @param id 文章id
+     */
+    private Boolean addArticleVisit(Integer id) {
+        UpdateWrapper<MerchantArticle> wrapper = Wrappers.update();
+        wrapper.setSql("visit = visit + 1");
+        wrapper.eq("id", id);
+        return update(wrapper);
+    }
+
+    /**
+     * 获取移动端banner列表
+     *
+     * @return List<Article>
+     */
+    @Override
+    public List<MerchantArticle> getBannerList() {
+        int articleBannerLimit = 5;
+        // 根据配置控制banner的数量
+        String articleBannerLimitString = systemConfigService.getValueByKey(SysConfigConstants.ARTICLE_BANNER_LIMIT);
+        if (StrUtil.isNotBlank(articleBannerLimitString)) {
+            articleBannerLimit = Integer.parseInt(articleBannerLimitString);
+        }
+        LambdaQueryWrapper<MerchantArticle> lqw = Wrappers.lambdaQuery();
+        lqw.select(MerchantArticle::getId, MerchantArticle::getCover, MerchantArticle::getTitle);
+        lqw.eq(MerchantArticle::getIsBanner, true);
+        SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser();
+        lqw.eq(MerchantArticle::getMerId, systemAdmin.getMerId());
+        lqw.eq(MerchantArticle::getStatus, true);
+        lqw.eq(MerchantArticle::getIsDel, false);
+        lqw.orderByDesc(MerchantArticle::getSort, MerchantArticle::getId);
+        lqw.last(" limit " + articleBannerLimit);
+        return dao.selectList(lqw);
+    }
+
+    /**
+     * 获取移动端热门列表
+     *
+     * @return List<ArticleResponse>
+     */
+    @Override
+    public List<ArticleResponse> getHotList() {
+        LambdaQueryWrapper<MerchantArticle> lqw = Wrappers.lambdaQuery();
+        lqw.select(MerchantArticle::getId, MerchantArticle::getCover, MerchantArticle::getTitle, MerchantArticle::getCreateTime);
+        SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser();
+        lqw.eq(MerchantArticle::getMerId, systemAdmin.getMerId());
+        lqw.eq(MerchantArticle::getIsHot, true);
+        lqw.eq(MerchantArticle::getStatus, true);
+        lqw.eq(MerchantArticle::getIsDel, false);
+        lqw.orderByDesc(MerchantArticle::getSort, MerchantArticle::getId);
+        lqw.last(" limit 10");
+        List<MerchantArticle> articleList = dao.selectList(lqw);
+        if (CollUtil.isEmpty(articleList)) {
+            return CollUtil.newArrayList();
+        }
+        return articleList.stream().map(e -> {
+            ArticleResponse articleResponse = new ArticleResponse();
+            BeanUtils.copyProperties(e, articleResponse);
+            return articleResponse;
+        }).collect(Collectors.toList());
+    }
+
+    /**
+     * 文章新增
+     *
+     * @param articleRequest 文章新增参数
+     * @return Boolean
+     */
+    @Override
+    public Boolean create(ArticleRequest articleRequest) {
+        MerchantArticle article = new MerchantArticle();
+        BeanUtils.copyProperties(articleRequest, article);
+        article.setId(null);
+        SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser();
+        article.setMerId(systemAdmin.getMerId());
+        String cdnUrl = systemAttachmentService.getCdnUrl();
+        article.setCover(systemAttachmentService.clearPrefix(article.getCover(), cdnUrl));
+        article.setContent(systemAttachmentService.clearPrefix(article.getContent(), cdnUrl));
+        article.setVisit(0L);
+        return save(article);
+    }
+
+    /**
+     * 文章删除
+     *
+     * @param id 文章id
+     * @return Boolean
+     */
+    @Override
+    public Boolean deleteById(Integer id) {
+        MerchantArticle article = getByIdException(id);
+        article.setIsDel(true);
+        return updateById(article);
+    }
+
+    private MerchantArticle getByIdException(Integer id) {
+        MerchantArticle article = getById(id);
+        if (ObjectUtil.isNull(article) || article.getIsDel()) {
+            throw new CrmebException(MarketingResultCode.ARTICLE_NOT_EXIST);
+        }
+        return article;
+    }
+
+
+    /**
+     * 文章修改
+     *
+     * @param articleRequest 文章修改参数
+     */
+    @Override
+    public Boolean updateArticle(ArticleRequest articleRequest) {
+        if (ObjectUtil.isNull(articleRequest.getId())) {
+            throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "文章ID不能为空");
+        }
+        getByIdException(articleRequest.getId());
+        MerchantArticle article = new MerchantArticle();
+        BeanUtils.copyProperties(articleRequest, article);
+        String cdnUrl = systemAttachmentService.getCdnUrl();
+        article.setCover(systemAttachmentService.clearPrefix(article.getCover(), cdnUrl));
+        article.setContent(systemAttachmentService.clearPrefix(article.getContent(), cdnUrl));
+        return updateById(article);
+    }
+
+    /**
+     * 获取文章详情
+     *
+     * @param id 文章id
+     * @return Article
+     */
+    @Override
+    public ArticleInfoResponse getDetail(Integer id) {
+        MerchantArticle article = getByIdException(id);
+        ArticleInfoResponse response = new ArticleInfoResponse();
+        BeanUtils.copyProperties(article, response);
+        return response;
+    }
+
+    /**
+     * 文章是否使用分类
+     *
+     * @param categoryId 分类ID
+     * @return Boolean
+     */
+    @Override
+    public Boolean isUseCategory(Integer categoryId) {
+        LambdaQueryWrapper<MerchantArticle> lqw = Wrappers.lambdaQuery();
+        SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser();
+        lqw.eq(MerchantArticle::getMerId, systemAdmin.getMerId());
+        lqw.eq(MerchantArticle::getCid, categoryId);
+        lqw.eq(MerchantArticle::getIsDel, false);
+        lqw.eq(MerchantArticle::getIsDel, false);
+        lqw.last(" limit 1");
+        MerchantArticle article = dao.selectOne(lqw);
+        return ObjectUtil.isNotNull(article);
+    }
+
+    /**
+     * 获取首页新闻头条
+     */
+    @Override
+    public List<MerchantArticle> getIndexHeadline() {
+        LambdaQueryWrapper<MerchantArticle> lqw = Wrappers.lambdaQuery();
+        lqw.select(MerchantArticle::getId, MerchantArticle::getTitle);
+        SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser();
+        lqw.eq(MerchantArticle::getMerId, systemAdmin.getMerId());
+        lqw.eq(MerchantArticle::getIsHot, true);
+        lqw.eq(MerchantArticle::getStatus, true);
+        lqw.eq(MerchantArticle::getIsDel, false);
+        lqw.orderByDesc(MerchantArticle::getSort);
+        lqw.last(" limit 10");
+        return dao.selectList(lqw);
+    }
+
+    /**
+     * 文章开关
+     * @param id 文章id
+     * @return Boolean
+     */
+    @Override
+    public Boolean articleSwitch(Integer id) {
+        MerchantArticle article = getByIdException(id);
+        article.setStatus(!article.getStatus());
+        return updateById(article);
+    }
+}
+

+ 21 - 13
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/MerchantServiceImpl.java

@@ -29,6 +29,7 @@ import com.zbkj.common.model.system.SystemNotification;
 import com.zbkj.common.page.CommonPage;
 import com.zbkj.common.query.IndexMerchantQuery;
 import com.zbkj.common.request.PageParamRequest;
+import com.zbkj.common.request.SeckillProductSearchRequest;
 import com.zbkj.common.request.merchant.*;
 import com.zbkj.common.response.*;
 import com.zbkj.common.result.CommonResultCode;
@@ -1313,19 +1314,26 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantDao, Merchant> impl
     }
 
     @Override
-    public List<ProMerchantProductResponse> findProIndexList(Integer recomdProdsNum) {
-        List<ProMerchantProductResponse> merchantProductResponseList=new ArrayList<>();
-        LambdaQueryWrapper<Merchant> lqw = Wrappers.lambdaQuery();
-        lqw.eq(Merchant::getIsSwitch, true);
-        lqw.eq(Merchant::getIsDel, false);
-        lqw.orderByDesc(Merchant::getIsRecommend, Merchant::getSort, Merchant::getId);
-        lqw.last(" limit " + recomdProdsNum);
-        List<Merchant> merchantList = dao.selectList(lqw);
-        for(Merchant mer:merchantList){
-             // 根据商户再获取1条商户对应的1条推荐商品 适用于DIY样;
-             merchantProductResponseList.addAll(productService.getRecommendedProductsByMerId(mer.getId(), 1));
-        }
-        return merchantProductResponseList;
+    public List<SeckillProductPageResponse> findProIndexList(Integer recomdProdsNum) {
+       // List<ProMerchantProductResponse> merchantProductResponseList=new ArrayList<>();
+//        LambdaQueryWrapper<Merchant> lqw = Wrappers.lambdaQuery();
+//        lqw.eq(Merchant::getIsSwitch, true);
+//        lqw.eq(Merchant::getIsDel, false);
+//        lqw.orderByDesc(Merchant::getIsRecommend, Merchant::getSort, Merchant::getId);
+//        lqw.last(" limit " + recomdProdsNum);
+//        List<Merchant> merchantList = dao.selectList(lqw);
+//        for(Merchant mer:merchantList){
+//             // 根据商户再获取1条商户对应的1条推荐商品 适用于DIY样;
+//             merchantProductResponseList.addAll(productService.getRecommendedProductsByMerId(mer.getId(), 1));
+//        }
+        SeckillProductSearchRequest request=new SeckillProductSearchRequest();
+        request.setIsHot(1);//小程序端显示
+        request.setProStatus(1);//已上架商品
+        request.setActivityStatus(1);//活动开启
+        request.setAuditStatus(2);//已审核
+        request.setLimit(recomdProdsNum);//显示商品数量
+        PageInfo<SeckillProductPageResponse> seckillProductListPage=seckillProductService.getSeckillProductPage(request);
+        return seckillProductListPage.getList();
     }
 
     /**

+ 6 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/SeckillProductServiceImpl.java

@@ -147,6 +147,12 @@ public class SeckillProductServiceImpl extends ServiceImpl<SeckillProductDao, Se
         if (ObjectUtil.isNotNull(request.getAuditStatus())) {
             map.put("auditStatus", request.getAuditStatus());
         }
+        if (ObjectUtil.isNotNull(request.getAuditStatus())) {
+            map.put("auditStatus", request.getAuditStatus());
+        }
+        if (ObjectUtil.isNotNull(request.getIsHot())) {
+            map.put("isHot", request.getIsHot());
+        }
         Page<SeckillProduct> page = PageHelper.startPage(request.getPage(), request.getLimit());
         List<SeckillProductPageResponse> productList = dao.getSeckillProductPage(map);
         if (CollUtil.isNotEmpty(productList)) {

+ 7 - 1
ydd_mer_java/crmeb-service/src/main/resources/mapper/seckill/SeckillProductMapper.xml

@@ -7,7 +7,7 @@
         p.is_show as isShow,p.sort,p.spec_type as specType,p.audit_status as auditStatus,p.reason,p.activity_id as activityId,
         p.product_id as productId,p.type,
         m.name as merName,m.star_level as merStarLevel,sa.name as activityName,sa.status as activityStatus,
-        pc.name as categoryName
+        pc.name as categoryName,bp.intro as intro
         FROM eb_seckill_product AS p
         left join eb_merchant AS m on p.mer_id = m.id
         left join eb_seckill_activity AS sa on p.activity_id = sa.id
@@ -35,7 +35,13 @@
         <if test="merStars != null">
             and m.star_level &gt;= #{merStars}
         </if>
+        <if test="isHot != null">
+            and sa.is_hot= #{isHot}
+        </if>
         ORDER BY p.sort desc, (p.quota_show - p.quota) desc
     </select>
 
+    <select id=""  resultType="com.zbkj.common.response.ProMerchantProductResponse">
+        select p.* FROM eb_seckill_product p WHERE EXISTS(select 1 from eb_seckill_activity a  where a.id=p.activity_id and  a.is_hot=1  )
+    </select>
 </mapper>