helixiao пре 1 година
родитељ
комит
d8f535a4fe
23 измењених фајлова са 1331 додато и 0 уклоњено
  1. 47 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/controller/CustomerProductController.java
  2. 301 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/domain/entity/LocalMerchantInfo.java
  3. 183 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/domain/entity/Product.java
  4. 71 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/domain/entity/ProductGroupItems.java
  5. 65 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/domain/entity/ProductGroups.java
  6. 27 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/domain/entity/ProductYXGroupTopDetailDTO.java
  7. 28 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/domain/entity/ProductYXListVo.java
  8. 65 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/domain/entity/SysCategory.java
  9. 55 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/domain/vo/ProductYXDetailDTO.java
  10. 54 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/domain/vo/ProductYXListDTO.java
  11. 19 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/mapper/LocalMerchantInfoMapper.java
  12. 16 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/mapper/ProductGroupItemsMapper.java
  13. 17 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/mapper/ProductGroupsMapper.java
  14. 31 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/mapper/ProductMapper.java
  15. 17 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/mapper/SysCategoryMapper.java
  16. 23 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/service/IProductGroupItemsService.java
  17. 23 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/service/IProductGroupsService.java
  18. 37 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/service/IProductService.java
  19. 36 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/service/impl/ProductGroupItemsServiceImpl.java
  20. 26 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/service/impl/ProductGroupsServiceImpl.java
  21. 150 0
      linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/service/impl/ProductServiceImpl.java
  22. 5 0
      linkwe-chinacoal/src/main/resources/mapper/modules/bdshdb/customer/ProductGroupsMapper.xml
  23. 35 0
      linkwe-chinacoal/src/main/resources/mapper/modules/bdshdb/customer/ProductMapper.xml

+ 47 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/controller/CustomerProductController.java

@@ -0,0 +1,47 @@
+package com.linkwechat.coal.modules.bdshdb.customer.controller;
+
+import com.linkwechat.coal.modules.bdshdb.customer.domain.entity.ProductYXListVo;
+import com.linkwechat.coal.modules.bdshdb.customer.domain.vo.ProductYXDetailDTO;
+import com.linkwechat.coal.modules.bdshdb.customer.service.IProductService;
+import com.linkwechat.common.core.controller.BaseController;
+import com.linkwechat.common.core.domain.AjaxResult;
+import com.linkwechat.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+@Slf4j
+@RestController
+@RequestMapping("/product")
+@Api(tags="客户端商品")
+public class CustomerProductController extends BaseController {
+
+    @Resource
+    private IProductService productService;
+
+
+    @ApiOperation(value = "营销系统-商品分页列表", notes = "营销系统-商品分页列表")
+    @GetMapping(value = "/getPageProductList")
+    public TableDataInfo<?> getYxPageProductList(ProductYXListVo productYXListVo) {
+        startPage();
+        return getDataTable(productService.getYxPageProductList(productYXListVo));
+    }
+
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2025/9/4 10:52
+     *  @Description:  通过商品id查询数据
+     */
+    @ApiOperation(value = "营销系统-商品详情", notes = "营销系统-商品详情")
+    @GetMapping(value = "/getProductDetail")
+    public AjaxResult<?> getProductDetail(@RequestParam("productId") String productId) {
+        ProductYXDetailDTO productYXDetailDTO= productService.getProductDetail(productId);
+        return AjaxResult.success(productYXDetailDTO);
+    }
+
+}

+ 301 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/domain/entity/LocalMerchantInfo.java

@@ -0,0 +1,301 @@
+package com.linkwechat.coal.modules.bdshdb.customer.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Description: 商户表实体
+ * @Author: jeecg-boot
+ * @Date:   2025-01-06
+ * @Version: V1.0
+ */
+@Data
+@TableName("local_merchant_info")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="local_merchant_info对象", description="商户表实体")
+public class LocalMerchantInfo {
+
+	/**
+	 * ID
+	 */
+	@TableId(type = IdType.ASSIGN_ID)
+	@ApiModelProperty(value = "ID")
+	private java.lang.String id;
+
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	@TableField(fill = FieldFill.INSERT)
+	private java.lang.String createBy;
+
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@TableField(fill = FieldFill.INSERT)
+	private java.util.Date createTime;
+
+	/**
+	 * 更新人
+	 */
+	@ApiModelProperty(value = "更新人")
+	@TableField(fill = FieldFill.INSERT_UPDATE)
+	private java.lang.String updateBy;
+
+	/**
+	 * 更新时间
+	 */
+	@ApiModelProperty(value = "更新时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@TableField(fill = FieldFill.INSERT_UPDATE)
+	private java.util.Date updateTime;
+
+	@ApiModelProperty(value = "联系人")
+	@TableField(exist = false)
+	private String name;
+	@ApiModelProperty(value = "手机号")
+	@TableField(exist = false)
+	private String phone;
+
+	@ApiModelProperty(value = "密码")
+	@TableField(exist = false)
+	private String passWord;
+
+
+	@ApiModelProperty(value = "供应商名称")
+	private String purveyorName;
+
+	/**商户账号*/
+    @ApiModelProperty(value = "商户账号")
+	private String userId;
+	/**公司主体类型*/
+    @ApiModelProperty(value = "公司主体类型(1:普通企业 2:个体工商户) ")
+	private Integer type;
+	/**公司名称*/
+    @ApiModelProperty(value = "公司名称")
+	private String corporateName;
+	/**统一社会信用代码*/
+    @ApiModelProperty(value = "统一社会信用代码")
+	private String creditCode;
+
+	@ApiModelProperty(value = "营业执照有效期类型(1.长期有效 2.固定期限)")
+	private String lifespanType;
+
+	/**营业执照有效期*/
+    @ApiModelProperty(value = "营业执照有效期开始时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	private String lifespanBegin;
+
+	@ApiModelProperty(value = "营业执照有效期结束时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	private String lifespanEnd;
+	/**法人*/
+    @ApiModelProperty(value = "法人")
+	private String legalPerson;
+	/**法人证件号*/
+    @ApiModelProperty(value = "法人证件号")
+	private String legalPersonCode;
+	/**营业执照*/
+    @ApiModelProperty(value = "营业执照")
+	private String businessLicense;
+	/**身份证人像面*/
+    @ApiModelProperty(value = "身份证人像面")
+	private String identityOne;
+	/**身份证国徽面*/
+    @ApiModelProperty(value = "身份证国徽面")
+	private String identityTwo;
+	/**门店类型*/
+    @ApiModelProperty(value = "门店类型(1:单体 2:连锁店)")
+	private Integer storeType;
+	/**门店名称*/
+    @ApiModelProperty(value = "门店名称")
+	private String storeName;
+	/**店铺面积*/
+	@ApiModelProperty(value = "店铺面积")
+	private String storeExtent;
+	/**所在地区*/
+    @ApiModelProperty(value = "所在地区码")
+	private String country;
+	/**所在地区全部码*/
+    @ApiModelProperty(value = "所在地区全部码")
+	private String countryAll;
+
+	@ApiModelProperty(value = "所在地区")
+	private String locality;
+	/**所属供应商*/
+    @ApiModelProperty(value = "所属供应商")
+	private String purveyorId;
+	/**详细地址*/
+    @ApiModelProperty(value = "详细地址")
+	private String address;
+	/**地图位置经度*/
+    @ApiModelProperty(value = "地图位置经度")
+	private String longitude;
+	/**地图位置维度*/
+    @ApiModelProperty(value = "地图位置维度")
+	private String latitude;
+	/**门头照*/
+    @ApiModelProperty(value = "门头照")
+	private String headPhoto;
+	/**商户状态(1:上架,2:下架 ,3:暂停营业, 4:解约下线)*/
+    @ApiModelProperty(value = "商户状态(1:正常营业,2:关闭门店 ,3:暂停营业, 4:解约下线)")
+	private Integer merchantStatus;
+	@ApiModelProperty(value = "来源(1-平台 2-个人 3-供应商)")
+	private Integer source;
+
+	@ApiModelProperty(value = "门店评分")
+	@TableField(exist = false)
+	private BigDecimal grade;
+
+	@ApiModelProperty(value = "完成服务数")
+	@TableField(exist = false)
+	private Integer serviceNum;
+
+	@ApiModelProperty(value = "产品id")
+	@TableField(exist = false)
+	private String productId;
+
+	/**
+	 * 1.4新增商户字段
+	 */
+	/**商户关联用户id*/
+	@ApiModelProperty(value = "商户关联用户id")
+	private String merchantUserId;
+
+	/**商户关联用户姓名*/
+	@ApiModelProperty(value = "商户关联用户姓名")
+	private String merchantUserName;
+
+	/**商户关联用户手机号*/
+	@ApiModelProperty(value = "商户关联用户手机号")
+	private String merchantUserPhone;
+
+	/**推荐人昵称*/
+	@ApiModelProperty(value = "推荐人昵称")
+	private String referenceNick;
+
+	/**推荐人姓名*/
+	@ApiModelProperty(value = "推荐人姓名")
+	private String referenceName;
+
+	/**推荐人id*/
+	@ApiModelProperty(value = "推荐人id")
+	private String referenceId;
+
+	/**推荐人手机号*/
+	@ApiModelProperty(value = "推荐人手机号")
+	private String referencePhone;
+
+	/**推荐码*/
+	@ApiModelProperty(value = "推荐码")
+	private String referenceCode;
+
+	/**管理人昵称*/
+	@ApiModelProperty(value = "管理人昵称")
+	private String manageNick;
+
+	/**管理人id*/
+	@ApiModelProperty(value = "管理人id")
+	private String manageUserId;
+
+	/**管理人姓名*/
+	@ApiModelProperty(value = "管理人姓名")
+	private String manageUserName;
+
+	/**管理人手机号*/
+	@ApiModelProperty(value = "管理人手机号")
+	private String manageUserPhone;
+
+	/**法人手机号*/
+	@ApiModelProperty(value = "法人手机号")
+	private String legalPersonPhone;
+
+	/**商户银行账号*/
+	@ApiModelProperty(value = "商户银行账号")
+	private String accCode;
+
+	/**商户银行名称*/
+	@ApiModelProperty(value = "商户银行名称")
+	private String bankName;
+
+	/**商户开户行*/
+	@ApiModelProperty(value = "商户开户行")
+	private String accName;
+
+	/**营业执照地址*/
+	@ApiModelProperty(value = "营业执照地址")
+	private String tradeCardAddr;
+
+	/**行业*/
+	@ApiModelProperty(value = "行业")
+	private String industry;
+
+	/**商户负责人姓名*/
+	@ApiModelProperty(value = "商户负责人姓名")
+	private String leaderName;
+
+	/**商户负责人手机号*/
+	@ApiModelProperty(value = "商户负责人手机号")
+	private String leaderPhone;
+
+	/**是否进入回收站(0:否 1:是)*/
+	@ApiModelProperty(value = "是否进入回收站(0:否 1:是)")
+	private Integer isRecycle;
+
+	/**是否进入黑名单(0:否 1:是)*/
+	@ApiModelProperty(value = "是否进入黑名单(0:否 1:是)")
+	private Integer isBlacklist;
+
+	/**是否进入拒绝注册(0:否 1:是)*/
+	@ApiModelProperty(value = "是否进入拒绝注册(0:否 1:是)")
+	private Integer isRefuse;
+
+	/**是否进入临时用户(0:否 1:是)*/
+	@ApiModelProperty(value = "是否进入临时用户(0:否 1:是)")
+	private Integer isTemporary;
+
+	/**数据是否删除 0-否 1-是*/
+	@ApiModelProperty(value = "数据是否删除 0-否 1-是")
+	private Integer isDelete;
+
+	@TableField(exist = false)
+	@ApiModelProperty(value = "普通用户id")
+	private String ordinaryUserId;
+
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+	@DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "开业时间")
+	private Date openingTime;
+
+	/**权益等级*/
+	@ApiModelProperty(value = "权益等级")
+	private String rightsLevel;
+
+	/**是否启用禁用 1 启用 0 禁用*/
+	@ApiModelProperty(value = "是否启用禁用 1 启用 0 禁用")
+	private String isEnable;
+
+	/**经营范围*/
+	@ApiModelProperty(value = "经营范围")
+	private String businessScope;
+
+	@TableField(exist = false)
+	@ApiModelProperty(value = "logo")
+	private String logo;
+}

+ 183 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/domain/entity/Product.java

@@ -0,0 +1,183 @@
+package com.linkwechat.coal.modules.bdshdb.customer.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Description: 商品管理
+ * @Author: jeecg-boot
+ * @Date:   2025-01-06
+ * @Version: V1.0
+ */
+@Data
+@TableName("local_products")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="local_products对象", description="商品管理")
+public class Product {
+
+	/**商品ID,主键*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "商品ID,主键")
+	@JsonFormat(shape = JsonFormat.Shape.STRING)
+	private Long productId;
+	/**商品名称,最多80个字符*/
+    @ApiModelProperty(value = "商品名称,最多80个字符")
+	private String productName;
+	/**商品类目ID*/
+    @ApiModelProperty(value = "商品类目ID")
+	private String categoryId;
+	/**商品类目*/
+	@TableField(exist = false)
+    @ApiModelProperty(value = "商品类目")
+	private String productCategory;
+
+	@ApiModelProperty(value = "视频")
+	private String video;
+
+	@ApiModelProperty(value = "供应商的商品id")
+	private String purveyorProductId;
+
+	/**商品价格*/
+    @ApiModelProperty(value = "商品价格")
+	private BigDecimal price;
+
+	@ApiModelProperty(value = "商品售价")
+	private BigDecimal soldPrice;
+	/**已售数量*/
+    @ApiModelProperty(value = "已售数量")
+	private Integer soldQuantity;
+	/**库存数量*/
+    @ApiModelProperty(value = "库存数量")
+	private Integer stockQuantity;
+	/**商品状态(0: 下架, 1: 上架)*/
+    @ApiModelProperty(value = "商品状态(0:下架, 1:上架, 2:审核中, 3:未通过)")
+	private Integer productStatus;
+
+	/**供应商ID*/
+    @ApiModelProperty(value = "供应商ID")
+	private String supplierId;
+
+	/**供应商ID*/
+	@ApiModelProperty(value = "商家Id")
+	private String merchantId;
+
+	@ApiModelProperty(value = "使用说明")
+	private String instructions;
+	/**商品封面图路径*/
+    @ApiModelProperty(value = "商品封面图路径")
+	private String productImage;
+	/**商品详情图路径,多个路径可以用逗号分隔*/
+    @ApiModelProperty(value = "商品详情图路径,多个路径可以用逗号分隔")
+	private Object detailImages;
+	/**售卖开始时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "售卖开始时间")
+	private Date saleStartDate;
+	/**售卖结束时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "售卖结束时间")
+	private Date saleEndDate;
+	/**可用开始时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "可用开始时间")
+	private Date availableStartDate;
+	/**可用结束时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "可用结束时间")
+	private Date availableEndDate;
+
+	@ApiModelProperty(value = "是否需要预约(0否 1是)")
+	private Integer preBook;
+
+	@ApiModelProperty(value = "需要填写信息")
+	private String writeMessage;
+
+	@ApiModelProperty(value = "退款标签(1.随时退 2.过期自动退)")
+	private Integer refundLabel;
+
+	@ApiModelProperty(value = "退款是否商家确认(0否 1是)")
+	private Integer refundConfirm;
+
+	@ApiModelProperty(value = "是否平台产品(0否 1是)")
+	private Integer isPlatform;
+
+	/**失效天数(购买后多少天内失效)*/
+    @ApiModelProperty(value = "失效天数(购买后多少天内失效)")
+	private Integer expirationDays;
+	/**删除标识(0: 未删除, 1: 已删除)*/
+	@TableLogic(value = "0", delval = "1")
+    @ApiModelProperty(value = "删除标识(0: 未删除, 1: 已删除)")
+	private Integer isDeleted;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+	private String createBy;
+	/**修改人*/
+    @ApiModelProperty(value = "修改人")
+	private String updateBy;
+	/**备注*/
+    @ApiModelProperty(value = "备注")
+	private String remark;
+	/**创建时间*/
+    @ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**更新时间*/
+    @ApiModelProperty(value = "更新时间")
+	private Date updateTime;
+
+	/**是否可以修改售价(0:否 ,1:是)*/
+	@ApiModelProperty(value = "是否可以修改售价(0:否 ,1:是)")
+	private Integer isUpdatePrice;
+	/**金豆奖励*/
+	@ApiModelProperty(value = "金豆奖励")
+	private Integer goldAward;
+	/**金豆扣除账户(0:当前账户 1:分店账户)*/
+	@ApiModelProperty(value = "金豆扣除账户(0:当前账户 1:分店账户)")
+	private Integer goldAwardAccount;
+	/**积分奖励*/
+	@ApiModelProperty(value = "积分奖励")
+	private Integer integralAward;
+	/**积分扣除账户(0:当前账户 1:分店账户)*/
+	@ApiModelProperty(value = "积分扣除账户(0:当前账户 1:分店账户)")
+	private Integer integralAwardAccount;
+	/**结算方式(0:结算到供应商 1:结算到分店 )*/
+	@ApiModelProperty(value = "结算方式(0:结算到供应商 1:结算到分店 )")
+	private Integer clearingForm;
+	/**佣金支付配置(0:当前账户支付 1:分店支付)*/
+	@ApiModelProperty(value = "佣金支付配置(0:当前账户支付 1:分店支付)")
+	private Integer commissionPayment;
+
+	@ApiModelProperty(value = "富文本")
+	private String richText;
+
+	@ApiModelProperty(value = "是否长期有效(0否 1是)")
+	private Integer longTimeUse;
+
+	@ApiModelProperty(value = "有效类型(1:购买后失效,2:有效区间,3:长期有效)")
+	private Integer useType;
+
+	@ApiModelProperty(value = "是否权益商品 0:否 1:是")
+	private Integer isRights;
+
+	@ApiModelProperty(value = "购买人数")
+	@TableField(exist = false)
+	private Integer buyUserCount;
+
+	@ApiModelProperty(value = "参与等级优惠1参与 0不参与")
+	private Integer isLevelDiscount;
+
+
+}

+ 71 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/domain/entity/ProductGroupItems.java

@@ -0,0 +1,71 @@
+package com.linkwechat.coal.modules.bdshdb.customer.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * @Description: 商品管理
+ * @Author: jeecg-boot
+ * @Date:   2025-01-06
+ * @Version: V1.0
+ */
+@Data
+@TableName("local_product_group_items")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="local_product_group_items对象", description="商品管理")
+public class ProductGroupItems {
+
+	/**明细ID,主键*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "明细ID,主键")
+	@JsonFormat(shape = JsonFormat.Shape.STRING)
+	private Long itemId;
+	/**关联的商品组ID*/
+    @ApiModelProperty(value = "关联的商品组ID")
+	@JsonFormat(shape = JsonFormat.Shape.STRING)
+	private Long groupId;
+	/**关联的商品ID*/
+    @ApiModelProperty(value = "关联的商品ID")
+	@JsonFormat(shape = JsonFormat.Shape.STRING)
+	private Long productId;
+	/**单品名称*/
+    @ApiModelProperty(value = "单品名称")
+	private String productName;
+	/**单品数量*/
+    @ApiModelProperty(value = "单品数量")
+	private Integer quantity;
+	/**单位(如“份”、“个”)*/
+    @ApiModelProperty(value = "单位(如“份”、“个”)")
+	private String unit;
+	/**价格*/
+    @ApiModelProperty(value = "价格")
+	private java.math.BigDecimal price;
+	/**删除标识(0: 未删除, 1: 已删除)*/
+    @ApiModelProperty(value = "删除标识(0: 未删除, 1: 已删除)")
+	private Integer isDeleted;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+	private String createBy;
+	/**修改人*/
+    @ApiModelProperty(value = "修改人")
+	private String updateBy;
+	/**备注*/
+    @ApiModelProperty(value = "备注")
+	private String remark;
+	/**创建时间*/
+    @ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**更新时间*/
+    @ApiModelProperty(value = "更新时间")
+	private Date updateTime;
+}

+ 65 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/domain/entity/ProductGroups.java

@@ -0,0 +1,65 @@
+package com.linkwechat.coal.modules.bdshdb.customer.domain.entity;
+
+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.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 商品管理
+ * @Author: jeecg-boot
+ * @Date:   2025-01-06
+ * @Version: V1.0
+ */
+@Data
+@TableName("local_product_groups")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="loca_product_groups对象", description="商品管理")
+public class ProductGroups {
+
+	/**商品组ID,主键*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "商品组ID,主键")
+	@JsonFormat(shape = JsonFormat.Shape.STRING)
+	private Long groupId;
+	/**关联的商品ID*/
+    @ApiModelProperty(value = "关联的商品ID")
+	@JsonFormat(shape = JsonFormat.Shape.STRING)
+	private Long productId;
+	/**商品组名称,最多30个字符*/
+    @ApiModelProperty(value = "商品组名称,最多30个字符")
+	private String groupName;
+	/**删除标识(0: 未删除, 1: 已删除)*/
+    @ApiModelProperty(value = "删除标识(0: 未删除, 1: 已删除)")
+	private Integer isDeleted;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+	private String createBy;
+	/**修改人*/
+    @ApiModelProperty(value = "修改人")
+	private String updateBy;
+	/**备注*/
+    @ApiModelProperty(value = "备注")
+	private String remark;
+	/**创建时间*/
+    @ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**更新时间*/
+    @ApiModelProperty(value = "更新时间")
+	private Date updateTime;
+
+	@TableField(exist = false)
+	@ApiModelProperty(value = "单品")
+	private List<ProductGroupItems> singleProduct = new ArrayList<>();
+}

+ 27 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/domain/entity/ProductYXGroupTopDetailDTO.java

@@ -0,0 +1,27 @@
+package com.linkwechat.coal.modules.bdshdb.customer.domain.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2025/9/4 11:17
+ *  @Description: 营销商品详情页面
+ */
+@Data
+public class ProductYXGroupTopDetailDTO implements Serializable {
+
+    @ApiModelProperty(value = "套餐名称")
+    private String productGroupTopName;
+
+
+    @ApiModelProperty(value = "套餐列表")
+    private List<ProductGroupItems>  list;
+
+    
+}

+ 28 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/domain/entity/ProductYXListVo.java

@@ -0,0 +1,28 @@
+package com.linkwechat.coal.modules.bdshdb.customer.domain.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+@Data
+public class ProductYXListVo implements Serializable {
+
+
+    @ApiModelProperty(value = "当前页")
+    private Integer pageNum;
+
+    @ApiModelProperty(value = "页数")
+    private Integer pageSize;
+
+
+    @ApiModelProperty(value = "商品ID")
+    private String productId;
+
+    @ApiModelProperty(value = "商品名称")
+    private String productName;
+
+    @ApiModelProperty(value = "商品状态(0:下架, 1:上架")
+    private Integer productStatus;
+
+
+}

+ 65 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/domain/entity/SysCategory.java

@@ -0,0 +1,65 @@
+package com.linkwechat.coal.modules.bdshdb.customer.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 分类字典
+ * @Author: jeecg-boot
+ * @Date:   2019-05-29
+ * @Version: V1.0
+ */
+@Data
+@TableName("sys_category")
+public class SysCategory implements Serializable,Comparable<SysCategory>{
+    private static final long serialVersionUID = 1L;
+    
+	/**主键*/
+	@TableId(type = IdType.ASSIGN_ID)
+	private java.lang.String id;
+	/**父级节点*/
+	private java.lang.String pid;
+	/**类型名称*/
+	private java.lang.String name;
+	/**类型编码*/
+	private java.lang.String code;
+	/**创建人*/
+	private java.lang.String createBy;
+	/**创建日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	private java.util.Date createTime;
+	/**更新人*/
+	private java.lang.String updateBy;
+	/**更新日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	private java.util.Date updateTime;
+	/**所属部门*/
+	private java.lang.String sysOrgCode;
+	/**是否有子节点*/
+	private java.lang.String hasChild;
+
+	/**租户ID*/
+	private java.lang.Integer tenantId;
+
+	@Override
+	public int compareTo(SysCategory o) {
+		//比较条件我们定的是按照code的长度升序
+		// <0:当前对象比传入对象小。
+		// =0:当前对象等于传入对象。
+		// >0:当前对象比传入对象大。
+		int	 s = this.code.length() - o.code.length();
+		return s;
+	}
+	@Override
+	public String toString() {
+		return "SysCategory [code=" + code + ", name=" + name + "]";
+	}
+}

+ 55 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/domain/vo/ProductYXDetailDTO.java

@@ -0,0 +1,55 @@
+package com.linkwechat.coal.modules.bdshdb.customer.domain.vo;
+
+import com.linkwechat.coal.modules.bdshdb.customer.domain.entity.ProductYXGroupTopDetailDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2025/9/4 11:17
+ *  @Description: 营销商品详情页面
+ */
+@Data
+public class ProductYXDetailDTO implements Serializable {
+
+    @ApiModelProperty(value = "商家Id")
+    private String merchantId;
+
+    @ApiModelProperty(value = "商家名称")
+    private String merchantName;
+
+    @ApiModelProperty(value = "商品ID,主键")
+    private String productId;
+
+    @ApiModelProperty(value = "商品名称")
+    private String productName;
+
+    @ApiModelProperty(value = "视频")
+    private String video;
+
+    @ApiModelProperty(value = "商品售价")
+    private BigDecimal soldPrice;
+
+    @ApiModelProperty(value = "商品价格")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "商品图标")
+    private String productImage;
+
+    @ApiModelProperty("类目id")
+    private String categoryId;
+
+    @ApiModelProperty("类目名称")
+    private String categoryName;
+
+    @ApiModelProperty("商品详情描述")
+    private String instructions;
+
+    @ApiModelProperty("组合套餐")
+    private List<ProductYXGroupTopDetailDTO> groupList;
+}

+ 54 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/domain/vo/ProductYXListDTO.java

@@ -0,0 +1,54 @@
+package com.linkwechat.coal.modules.bdshdb.customer.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2025/9/4 11:17
+ *  @Description: 营销商品列表页面
+ */
+@Data
+public class ProductYXListDTO implements Serializable {
+
+
+    @ApiModelProperty(value = "商家Id")
+    private String merchantId;
+
+    @ApiModelProperty(value = "商家名称")
+    private String merchantName;
+
+
+    @ApiModelProperty(value = "商品ID,主键")
+    private String productId;
+
+    @ApiModelProperty(value = "商品名称")
+    private String productName;
+
+
+    @ApiModelProperty(value = "商品售价")
+    private BigDecimal soldPrice;
+
+
+    @ApiModelProperty(value = "商品图标")
+    private String productImage;
+
+
+    @ApiModelProperty(value = "商品状态(0:下架, 1:上架")
+    private Integer productStatus;
+
+    @ApiModelProperty("已售")
+    private Integer soldQuantity;
+
+
+    @ApiModelProperty("类目id")
+    private String categoryId;
+
+    @ApiModelProperty("类目名称")
+    private String categoryName;
+
+}

+ 19 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/mapper/LocalMerchantInfoMapper.java

@@ -0,0 +1,19 @@
+package com.linkwechat.coal.modules.bdshdb.customer.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.linkwechat.coal.modules.bdshdb.customer.domain.entity.LocalMerchantInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Description: 商户表实体
+ * @Author: jeecg-boot
+ * @Date:   2025-01-06
+ * @Version: V1.0
+ */
+@Mapper
+public interface LocalMerchantInfoMapper extends BaseMapper<LocalMerchantInfo> {
+
+
+}

+ 16 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/mapper/ProductGroupItemsMapper.java

@@ -0,0 +1,16 @@
+package com.linkwechat.coal.modules.bdshdb.customer.mapper;
+
+import java.util.List;
+
+import com.linkwechat.coal.modules.bdshdb.customer.domain.entity.ProductGroupItems;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 商品管理
+ * @Author: jeecg-boot
+ * @Date:   2025-01-06
+ * @Version: V1.0
+ */
+public interface ProductGroupItemsMapper extends BaseMapper<ProductGroupItems> {
+
+}

+ 17 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/mapper/ProductGroupsMapper.java

@@ -0,0 +1,17 @@
+package com.linkwechat.coal.modules.bdshdb.customer.mapper;
+
+import java.util.List;
+
+import com.linkwechat.coal.modules.bdshdb.customer.domain.entity.ProductGroups;
+import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 商品管理
+ * @Author: jeecg-boot
+ * @Date:   2025-01-06
+ * @Version: V1.0
+ */
+public interface ProductGroupsMapper extends BaseMapper<ProductGroups> {
+
+}

+ 31 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/mapper/ProductMapper.java

@@ -0,0 +1,31 @@
+package com.linkwechat.coal.modules.bdshdb.customer.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.linkwechat.coal.modules.bdshdb.customer.domain.entity.Product;
+import com.linkwechat.coal.modules.bdshdb.customer.domain.entity.ProductYXListVo;
+import com.linkwechat.coal.modules.bdshdb.customer.domain.vo.ProductYXListDTO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @Description: 商品管理
+ * @Author: jeecg-boot
+ * @Date: 2025-01-06
+ * @Version: V1.0
+ */
+@Mapper
+public interface ProductMapper extends BaseMapper<Product> {
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2025/9/4 14:32
+     *  @Description: 运营中心客户管理接口
+     */
+    List<ProductYXListDTO> getYxPageProductList(@Param("vo") ProductYXListVo productYXListVo);
+}

+ 17 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/mapper/SysCategoryMapper.java

@@ -0,0 +1,17 @@
+package com.linkwechat.coal.modules.bdshdb.customer.mapper;
+
+import com.linkwechat.coal.modules.bdshdb.customer.domain.entity.SysCategory;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 分类字典
+ * @Author: jeecg-boot
+ * @Date:   2019-05-29
+ * @Version: V1.0
+ */
+public interface SysCategoryMapper extends BaseMapper<SysCategory> {
+	
+
+
+}

+ 23 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/service/IProductGroupItemsService.java

@@ -0,0 +1,23 @@
+package com.linkwechat.coal.modules.bdshdb.customer.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.linkwechat.coal.modules.bdshdb.customer.domain.entity.ProductGroupItems;
+
+import java.util.List;
+
+/**
+ * @Description: 商品管理
+ * @Author: jeecg-boot
+ * @Date:   2025-01-06
+ * @Version: V1.0
+ */
+public interface IProductGroupItemsService extends IService<ProductGroupItems> {
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2025/9/4 12:02
+     *  @Description: 通过产品id和分组名称查询组合套餐数据
+     */
+    List<ProductGroupItems> queryByProductIdAndGroupId(String productId, String groupId);
+}

+ 23 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/service/IProductGroupsService.java

@@ -0,0 +1,23 @@
+package com.linkwechat.coal.modules.bdshdb.customer.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.linkwechat.coal.modules.bdshdb.customer.domain.entity.ProductGroups;
+
+import java.util.List;
+
+/**
+ * @Description: 商品管理
+ * @Author: jeecg-boot
+ * @Date:   2025-01-06
+ * @Version: V1.0
+ */
+public interface IProductGroupsService extends IService<ProductGroups> {
+
+    /**
+     * 根据商品id查询商品分组
+     * @param productId
+     * @return
+     */
+    List<ProductGroups> queryByProductId(Long productId);
+
+}

+ 37 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/service/IProductService.java

@@ -0,0 +1,37 @@
+package com.linkwechat.coal.modules.bdshdb.customer.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.linkwechat.coal.modules.bdshdb.customer.domain.entity.Product;
+import com.linkwechat.coal.modules.bdshdb.customer.domain.entity.ProductYXListVo;
+import com.linkwechat.coal.modules.bdshdb.customer.domain.vo.ProductYXDetailDTO;
+import com.linkwechat.coal.modules.bdshdb.customer.domain.vo.ProductYXListDTO;
+import com.linkwechat.common.core.page.TableDataInfo;
+
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * @Description: 商品管理
+ * @Author: jeecg-boot
+ * @Date:   2025-01-06
+ * @Version: V1.0
+ */
+public interface IProductService extends IService<Product> {
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2025/9/4 12:12
+     *  @Description:营销系统商品列表
+     */
+    List<ProductYXListDTO> getYxPageProductList(ProductYXListVo productYXListVo);
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2025/9/4 11:28
+     *  @Description: 营销系统详情内容
+     */
+    ProductYXDetailDTO getProductDetail(String productId);
+}

+ 36 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/service/impl/ProductGroupItemsServiceImpl.java

@@ -0,0 +1,36 @@
+package com.linkwechat.coal.modules.bdshdb.customer.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.linkwechat.coal.modules.bdshdb.customer.domain.entity.ProductGroupItems;
+import com.linkwechat.coal.modules.bdshdb.customer.mapper.ProductGroupItemsMapper;
+import com.linkwechat.coal.modules.bdshdb.customer.service.IProductGroupItemsService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Description: 商品管理
+ * @Author: jeecg-boot
+ * @Date: 2025-01-06
+ * @Version: V1.0
+ */
+@Service
+public class ProductGroupItemsServiceImpl extends ServiceImpl<ProductGroupItemsMapper, ProductGroupItems> implements IProductGroupItemsService {
+
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2025/9/4 12:03
+     *  @Description: 通过产品id和分组id查询数据
+     */
+    @Override
+    public List<ProductGroupItems> queryByProductIdAndGroupId(String productId, String groupId) {
+        LambdaQueryWrapper<ProductGroupItems> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ProductGroupItems::getProductId,  productId)
+                .eq(ProductGroupItems::getGroupId,  groupId);
+
+        return this.list(wrapper);
+    }
+}

+ 26 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/service/impl/ProductGroupsServiceImpl.java

@@ -0,0 +1,26 @@
+package com.linkwechat.coal.modules.bdshdb.customer.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.linkwechat.coal.modules.bdshdb.customer.domain.entity.ProductGroups;
+import com.linkwechat.coal.modules.bdshdb.customer.mapper.ProductGroupsMapper;
+import com.linkwechat.coal.modules.bdshdb.customer.service.IProductGroupsService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Description: 商品管理
+ * @Author: jeecg-boot
+ * @Date:   2025-01-06
+ * @Version: V1.0
+ */
+@Service
+public class ProductGroupsServiceImpl extends ServiceImpl<ProductGroupsMapper, ProductGroups> implements IProductGroupsService {
+
+    @Override
+    public List<ProductGroups> queryByProductId(Long productId) {
+        return this.list(new LambdaQueryWrapper<ProductGroups>().eq(ProductGroups::getProductId, productId));
+    }
+
+}

+ 150 - 0
linkwe-chinacoal/src/main/java/com/linkwechat/coal/modules/bdshdb/customer/service/impl/ProductServiceImpl.java

@@ -0,0 +1,150 @@
+package com.linkwechat.coal.modules.bdshdb.customer.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.linkwechat.coal.modules.bdshdb.customer.domain.entity.*;
+import com.linkwechat.coal.modules.bdshdb.customer.domain.vo.ProductYXDetailDTO;
+import com.linkwechat.coal.modules.bdshdb.customer.domain.vo.ProductYXListDTO;
+import com.linkwechat.coal.modules.bdshdb.customer.mapper.LocalMerchantInfoMapper;
+import com.linkwechat.coal.modules.bdshdb.customer.mapper.ProductMapper;
+import com.linkwechat.coal.modules.bdshdb.customer.mapper.SysCategoryMapper;
+import com.linkwechat.coal.modules.bdshdb.customer.service.IProductGroupItemsService;
+import com.linkwechat.coal.modules.bdshdb.customer.service.IProductGroupsService;
+import com.linkwechat.coal.modules.bdshdb.customer.service.IProductService;
+import com.linkwechat.common.core.page.TableDataInfo;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 商品管理
+ * @Author: jeecg-boot
+ * @Date: 2025-01-06
+ * @Version: V1.0
+ */
+@Slf4j
+@Service
+public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements IProductService {
+    private static final String CATEGORY_SHEET_METAL_PAINTING = "1945013773786701826";//供应商分类
+
+
+
+    @Resource
+    private LocalMerchantInfoMapper localMerchantInfoMapper;
+    @Resource
+    private IProductGroupsService productGroupssService;
+    @Resource
+    private IProductGroupItemsService productGroupItemsService;
+
+    @Resource
+    private SysCategoryMapper sysCategoryMapper;
+
+    @Resource
+    private ProductMapper productMapper;
+
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2025/9/4 12:12
+     *  @Description: 营销系统商品列表详情
+     */
+    @Override
+    public List<ProductYXListDTO> getYxPageProductList(ProductYXListVo productYXListVo) {
+//        Page<ProductYXListDTO> page = new Page<>(productYXListVo.getPageNum(), productYXListVo.getPageSize());
+        List<ProductYXListDTO> pagelist = productMapper.getYxPageProductList(productYXListVo);
+        if(pagelist==null || pagelist.isEmpty()){
+            pagelist =new ArrayList<>();
+        }else{
+            pagelist.stream()
+                    .map(item -> {
+                        if(StringUtils.isNotBlank(item.getCategoryId())){
+                            StringBuilder nameBuilder = new StringBuilder();
+                            String[] split = item.getCategoryId().split(",");
+                            for (String part : split) {
+                                Optional<SysCategory> sysCategoryOptional = Optional.ofNullable(sysCategoryMapper.selectById(part.trim()));
+                                sysCategoryOptional.ifPresent(sysCategory -> {
+                                    if (nameBuilder.length() > 0) {
+                                        nameBuilder.append(",");
+                                    }
+                                    nameBuilder.append(sysCategory.getName());
+                                });
+                            }
+                            item.setCategoryName(nameBuilder.toString());
+                        }
+                        return item;
+                    })
+                    .collect(Collectors.toList());
+        }
+
+        return pagelist;
+    }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2025/9/4 11:29
+     *  @Description:  营销产品详情
+     */
+    @Override
+    public ProductYXDetailDTO getProductDetail(String productId) {
+        ProductYXDetailDTO productDetailDTO = new ProductYXDetailDTO();
+        Product product = this.getById(productId);
+        if (ObjectUtil.isEmpty(product)) {
+            throw new SecurityException("产品不存在!");
+        }
+        productDetailDTO.setProductId(String.valueOf(product.getProductId()));
+        productDetailDTO.setProductName(product.getProductName());
+        productDetailDTO.setProductImage(product.getProductImage());
+        productDetailDTO.setVideo(product.getVideo());
+        productDetailDTO.setInstructions(product.getInstructions());
+        productDetailDTO.setPrice(product.getPrice());
+        productDetailDTO.setSoldPrice(product.getSoldPrice());
+        //查询商户地址
+        LocalMerchantInfo localMerchantInfo = localMerchantInfoMapper.selectById(product.getMerchantId());
+        productDetailDTO.setMerchantId(localMerchantInfo==null?null:localMerchantInfo.getId());
+        productDetailDTO.setMerchantName(localMerchantInfo==null?null:localMerchantInfo.getStoreName());
+        //分类名称
+        if(org.apache.commons.lang3.StringUtils.isNotBlank(product.getCategoryId())){
+            StringBuilder nameBuilder = new StringBuilder();
+            String[] split = product.getCategoryId().split(",");
+            for (String part : split) {
+                Optional<SysCategory> sysCategoryOptional = Optional.ofNullable(sysCategoryMapper.selectById(part.trim()));
+                sysCategoryOptional.ifPresent(sysCategory -> {
+                    if (nameBuilder.length() > 0) {
+                        nameBuilder.append(",");
+                    }
+                    nameBuilder.append(sysCategory.getName());
+                });
+            }
+            productDetailDTO.setCategoryName(nameBuilder.toString());
+        }
+
+        //组合套餐列表
+        List<ProductYXGroupTopDetailDTO> groupList  =new ArrayList<>();
+
+        List<ProductGroups> productGroupList = productGroupssService.queryByProductId(Long.valueOf(productId));
+        if (productGroupList!=null &&productGroupList.size()>0) {
+
+            productGroupList.stream()
+                    .forEach(productGroup -> {
+                        ProductYXGroupTopDetailDTO  productYXGroupTopDetailDTO =new ProductYXGroupTopDetailDTO();
+                        productYXGroupTopDetailDTO.setProductGroupTopName(productGroup.getGroupName());
+                        List<ProductGroupItems> productGroupItemList = productGroupItemsService.queryByProductIdAndGroupId(productId, String.valueOf(productGroup.getGroupId()));
+                        if(productGroupItemList!=null && !productGroupItemList.isEmpty()){
+                            productYXGroupTopDetailDTO.setList(productGroupItemList);
+                        }
+                        groupList.add(productYXGroupTopDetailDTO);
+                    });
+        }
+        productDetailDTO.setGroupList(groupList);
+        return productDetailDTO;
+    }
+}

+ 5 - 0
linkwe-chinacoal/src/main/resources/mapper/modules/bdshdb/customer/ProductGroupsMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.linkwechat.coal.modules.bdshdb.customer.mapper.ProductGroupsMapper">
+
+</mapper>

+ 35 - 0
linkwe-chinacoal/src/main/resources/mapper/modules/bdshdb/customer/ProductMapper.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.linkwechat.coal.modules.bdshdb.customer.mapper.ProductMapper">
+
+    <select id="getYxPageProductList" resultType="com.linkwechat.coal.modules.bdshdb.customer.domain.vo.ProductYXListDTO">
+        select
+            p.product_id as productId,
+            p.product_name as productName,
+            p.category_id AS categoryId,
+            p.sold_quantity AS soldQuantity,
+            p.sold_price  as soldPrice,
+            p.product_image  as productImage,
+            p.product_status  as productStatus,
+            m.id AS merchantId,
+            m.store_name AS merchantName
+        from  local_products p
+        LEFT JOIN local_merchant_info m ON p.merchant_id = m.id
+        <where>
+            p.is_deleted = 0
+            AND (p.category_id LIKE '%1889837829066899458%'  or p.category_id LIKE '%1889837335015636994%')
+            AND p.stock_quantity > 0
+            AND p.sale_end_date <![CDATA[>=]]> CURDATE()
+            <if test="vo.productId !=null and vo.productId !=''">
+                AND p.product_id = #{vo.productId}
+            </if>
+            <if test="vo.productStatus !=null">
+                AND p.product_status = #{vo.productStatus}
+            </if>
+            <if test="vo.productName !=null and vo.productName !=''">
+                AND p.product_name like  concat('%', #{vo.productName}, '%')
+            </if>
+        </where>
+        order by p.sold_price
+    </select>
+</mapper>