From 28e85b011d662ef7b42216993f1f91d79b4d93c4 Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期日, 04 一月 2026 11:11:20 +0800
Subject: [PATCH] 私厨定制

---
 framework/src/main/java/cn/lili/modules/lmk/domain/entity/AdImg.java                      |   38 
 framework/src/main/java/cn/lili/modules/lmk/mapper/KitchenTagMapper.java                  |   34 
 framework/src/main/java/cn/lili/modules/lmk/domain/entity/KitchenTag.java                 |   35 
 framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenCustomizeForm.java         |   76 +
 framework/src/main/java/cn/lili/modules/lmk/service/impl/AdImgServiceImpl.java            |  145 +++
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenCustomizeVO.java             |   83 ++
 framework/src/main/java/cn/lili/modules/lmk/service/impl/KitchenCustomizeServiceImpl.java |  158 ++++
 framework/src/main/java/cn/lili/modules/lmk/domain/form/AdCoverForm.java                  |   38 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenTagQuery.java             |   33 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenCustomizeQuery.java       |   37 
 framework/src/main/java/cn/lili/modules/lmk/service/AdImgService.java                     |   67 +
 framework/src/main/resources/mapper/lmk/KitchenCustomizeMapper.xml                        |   81 ++
 framework/src/main/java/cn/lili/modules/lmk/domain/entity/AdCover.java                    |   26 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenTagVO.java                   |   43 +
 manager-api/src/main/java/cn/lili/controller/lmk/AdImgController.java                     |   76 +
 framework/src/main/java/cn/lili/modules/lmk/service/AdCoverService.java                   |   67 +
 framework/src/main/resources/mapper/lmk/AdCoverMapper.xml                                 |   38 
 framework/src/main/java/cn/lili/modules/lmk/mapper/KitchenCustomizeMapper.java            |   34 
 manager-api/src/main/java/cn/lili/controller/lmk/AdCoverController.java                   |   76 +
 framework/src/main/java/cn/lili/modules/lmk/domain/form/AdImgForm.java                    |   50 +
 framework/src/main/java/cn/lili/modules/lmk/mapper/AdCoverMapper.java                     |   34 
 manager-api/src/main/java/cn/lili/controller/lmk/KitchenCustomizeController.java          |   80 ++
 framework/src/main/resources/mapper/lmk/KitchenTagMapper.xml                              |   50 +
 framework/src/main/java/cn/lili/modules/lmk/domain/entity/KitchenCustomize.java           |   63 +
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/AdCoverVO.java                      |   35 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/AdCoverQuery.java                |   22 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/AdImgQuery.java                  |   22 
 framework/src/main/java/cn/lili/modules/lmk/service/impl/AdCoverServiceImpl.java          |  145 +++
 manager-api/src/main/java/cn/lili/controller/lmk/KitchenTagController.java                |   81 ++
 framework/src/main/java/cn/lili/modules/lmk/service/KitchenTagService.java                |   69 +
 framework/src/main/java/cn/lili/modules/lmk/service/impl/KitchenTagServiceImpl.java       |  151 +++
 framework/src/main/java/cn/lili/modules/lmk/service/KitchenCustomizeService.java          |   70 +
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/AdImgVO.java                        |   47 +
 framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenTagForm.java               |   50 +
 framework/src/main/java/cn/lili/modules/lmk/enums/general/StoreCouponStausEnum.java       |    9 
 framework/src/main/resources/mapper/lmk/AdImgMapper.xml                                   |   47 +
 buyer-api/src/main/java/cn/lili/controller/lmk/KitchenController.java                     |   65 +
 framework/src/main/java/cn/lili/modules/lmk/mapper/AdImgMapper.java                       |   34 
 38 files changed, 2,309 insertions(+), 0 deletions(-)

diff --git a/buyer-api/src/main/java/cn/lili/controller/lmk/KitchenController.java b/buyer-api/src/main/java/cn/lili/controller/lmk/KitchenController.java
new file mode 100644
index 0000000..83245c5
--- /dev/null
+++ b/buyer-api/src/main/java/cn/lili/controller/lmk/KitchenController.java
@@ -0,0 +1,65 @@
+package cn.lili.controller.lmk;
+
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.service.AdCoverService;
+import cn.lili.modules.lmk.service.AdImgService;
+import cn.lili.modules.lmk.service.KitchenCustomizeService;
+import cn.lili.modules.lmk.service.KitchenTagService;
+import io.swagger.annotations.Api;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 绉佸帹妯″潡
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "绉佸帹妯″潡", tags = "绉佸帹妯″潡")
+@RestController
+@RequestMapping("/buyer/lmk/kitchen")
+public class KitchenController {
+    private final KitchenCustomizeService kitchenCustomizeService;
+    private final AdCoverService adCoverService;
+    private final AdImgService adImgService;
+    private final KitchenTagService kitchenTagService;
+
+    /**
+     * 绉佸帹 banner
+     * @return banner 鍒楄〃
+     */
+    @GetMapping("/banner")
+    public Result getKitchenBanner(){
+        return adImgService.getKitchenBanner();
+    }
+
+    /**
+     * 绉佸帹鏍囩
+     * @return 绉佸帹鏍囩
+     */
+    @GetMapping("/kitchenTag")
+    public Result getKitchenTag(){
+        return kitchenTagService.getKitchenTag();
+    }
+
+    /**
+     * 绉佸帹鍟嗗搧
+     * @return 绉佸帹鍟嗗搧
+     */
+    @GetMapping("/kitchenGoods")
+    public Result getKitchenGoods(String id){
+        return kitchenCustomizeService.getKitchenGoods(id);
+    }
+
+    /**
+     * 鍘ㄥ笀灏侀潰
+     * @return 鍘ㄥ笀灏侀潰
+     */
+    @GetMapping("/kitchenCover")
+    public Result getKitchenCover(){
+        return adCoverService.getKitchenCover();
+    }
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/AdCover.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/AdCover.java
new file mode 100644
index 0000000..fcc41ec
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/AdCover.java
@@ -0,0 +1,26 @@
+package cn.lili.modules.lmk.domain.entity;
+
+import cn.lili.mybatis.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ * 鍘ㄥ笀灏侀潰鍥剧墖
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Data
+@TableName("lmk_ad_cover")
+public class AdCover extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("cover_url")
+    /** 鍥剧墖鍦板潃 */
+    private String coverUrl;
+
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/AdImg.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/AdImg.java
new file mode 100644
index 0000000..6a80cb7
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/AdImg.java
@@ -0,0 +1,38 @@
+package cn.lili.modules.lmk.domain.entity;
+
+import cn.lili.mybatis.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ * 绉佸帹瀹氬埗骞垮憡鍥剧墖
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Data
+@TableName("lmk_ad_img")
+public class AdImg extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("sort")
+    /**  */
+    private Integer sort;
+
+    @TableField("open_type")
+    /** 鎵撳紑绫诲瀷 */
+    private String openType;
+
+    @TableField("direct_url")
+    /** 璺宠浆璺緞 */
+    private String directUrl;
+
+    @TableField("cover_url")
+    /** 鍥剧墖鍦板潃 */
+    private String coverUrl;
+
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/KitchenCustomize.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/KitchenCustomize.java
new file mode 100644
index 0000000..58632c0
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/KitchenCustomize.java
@@ -0,0 +1,63 @@
+package cn.lili.modules.lmk.domain.entity;
+
+import cn.lili.mybatis.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import lombok.Data;
+
+/**
+ * 鍘ㄥ笀瀹氬埗妯″潡
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Data
+@TableName("lmk_kitchen_customize")
+public class KitchenCustomize extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("goods_id")
+    /** 鍟嗗搧id */
+    private String goodsId;
+
+    @TableField("sku_id")
+    /** skuId */
+    private String skuId;
+
+    @TableField("combo_name")
+    /** 濂楅鍚嶅瓧 */
+    private String comboName;
+
+    @TableField("remark")
+    /** 澶囨敞 */
+    private String remark;
+
+    @TableField("num")
+    /** 浜烘暟 */
+    private String num;
+
+    @TableField("cover_img")
+    /** 灏侀潰鍥剧墖 */
+    private String coverImg;
+
+    @TableField("orgin_price")
+    /** 鍘熶环 */
+    private BigDecimal orginPrice;
+
+    @TableField("tag_id")
+    /** 鏍囩id */
+    private String tagId;
+
+    @TableField("status")
+    /** 鍚敤鐘舵�� */
+    private String status;
+
+    @TableField("sort")
+    /** 鎺掑簭 */
+    private Integer sort;
+
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/KitchenTag.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/KitchenTag.java
new file mode 100644
index 0000000..c90bba2
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/KitchenTag.java
@@ -0,0 +1,35 @@
+package cn.lili.modules.lmk.domain.entity;
+
+import cn.lili.modules.lmk.enums.general.StoreCouponStausEnum;
+import cn.lili.mybatis.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * 绉佸帹瀹氬埗鏍囩
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Data
+@TableName("lmk_kitchen_tag")
+public class KitchenTag extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("tag_name")
+    /** 鏍囩鍚嶇О */
+    private String tagName;
+
+    @TableField("sort")
+    /** 鏄剧ず椤哄簭 */
+    private Integer sort;
+    /**
+     * @see StoreCouponStausEnum
+     * 鍚敤鐘舵��
+     */
+    private String enable;
+
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/AdCoverForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/AdCoverForm.java
new file mode 100644
index 0000000..80ce5d1
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/AdCoverForm.java
@@ -0,0 +1,38 @@
+package cn.lili.modules.lmk.domain.form;
+
+import cn.lili.group.Update;
+import cn.lili.group.Add;
+import cn.lili.base.AbsForm;
+import cn.lili.modules.lmk.domain.entity.AdCover;
+import org.springframework.beans.BeanUtils;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import org.springframework.lang.NonNull;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * 鍘ㄥ笀灏侀潰鍥剧墖琛ㄥ崟
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Data
+@ApiModel(value = "AdCover琛ㄥ崟", description = "鍘ㄥ笀灏侀潰鍥剧墖琛ㄥ崟")
+public class AdCoverForm extends AbsForm {
+
+    @NotBlank(message = "鍥剧墖鍦板潃涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍥剧墖鍦板潃")
+    private String coverUrl;
+
+    public static AdCover getEntityByForm(@NonNull AdCoverForm form, AdCover entity) {
+        if(entity == null) {
+          entity = new AdCover();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/AdImgForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/AdImgForm.java
new file mode 100644
index 0000000..bd2b61c
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/AdImgForm.java
@@ -0,0 +1,50 @@
+package cn.lili.modules.lmk.domain.form;
+
+import cn.lili.group.Update;
+import cn.lili.group.Add;
+import cn.lili.base.AbsForm;
+import cn.lili.modules.lmk.domain.entity.AdImg;
+import org.springframework.beans.BeanUtils;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import org.springframework.lang.NonNull;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * 绉佸帹瀹氬埗骞垮憡鍥剧墖琛ㄥ崟
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Data
+@ApiModel(value = "AdImg琛ㄥ崟", description = "绉佸帹瀹氬埗骞垮憡鍥剧墖琛ㄥ崟")
+public class AdImgForm extends AbsForm {
+
+//    @NotNull(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("")
+    private Integer sort;
+
+//    @NotBlank(message = "鎵撳紑绫诲瀷涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鎵撳紑绫诲瀷")
+    private String openType;
+
+//    @NotBlank(message = "璺宠浆璺緞涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("璺宠浆璺緞")
+    private String directUrl;
+
+    @NotBlank(message = "鍥剧墖鍦板潃涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍥剧墖鍦板潃")
+    private String coverUrl;
+
+    public static AdImg getEntityByForm(@NonNull AdImgForm form, AdImg entity) {
+        if(entity == null) {
+          entity = new AdImg();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenCustomizeForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenCustomizeForm.java
new file mode 100644
index 0000000..9f80ac2
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenCustomizeForm.java
@@ -0,0 +1,76 @@
+package cn.lili.modules.lmk.domain.form;
+
+import cn.lili.group.Update;
+import cn.lili.group.Add;
+import cn.lili.base.AbsForm;
+import cn.lili.modules.lmk.domain.entity.KitchenCustomize;
+import org.springframework.beans.BeanUtils;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import org.springframework.lang.NonNull;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 鍘ㄥ笀瀹氬埗妯″潡琛ㄥ崟
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Data
+@ApiModel(value = "KitchenCustomize琛ㄥ崟", description = "鍘ㄥ笀瀹氬埗妯″潡琛ㄥ崟")
+public class KitchenCustomizeForm extends AbsForm {
+
+    @NotNull(message = "鍟嗗搧id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍟嗗搧id")
+    private String goodsId;
+
+    @NotNull(message = "skuId涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("skuId")
+    private String skuId;
+
+    @NotBlank(message = "濂楅鍚嶅瓧涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("濂楅鍚嶅瓧")
+    private String comboName;
+
+    @NotBlank(message = "澶囨敞涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @NotBlank(message = "浜烘暟涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("浜烘暟")
+    private String num;
+
+    @NotBlank(message = "灏侀潰鍥剧墖涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("灏侀潰鍥剧墖")
+    private String coverImg;
+
+    @NotNull(message = "鍘熶环涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍘熶环")
+    private BigDecimal orginPrice;
+
+    @NotNull(message = "鏍囩id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏍囩id")
+    private String tagId;
+
+    @NotBlank(message = "鍚敤鐘舵�佷笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍚敤鐘舵��")
+    private String status;
+
+    @NotNull(message = "鎺掑簭涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鎺掑簭")
+    private Integer sort;
+
+    public static KitchenCustomize getEntityByForm(@NonNull KitchenCustomizeForm form, KitchenCustomize entity) {
+        if(entity == null) {
+          entity = new KitchenCustomize();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenTagForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenTagForm.java
new file mode 100644
index 0000000..49e23d3
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenTagForm.java
@@ -0,0 +1,50 @@
+package cn.lili.modules.lmk.domain.form;
+
+import cn.lili.group.Update;
+import cn.lili.group.Add;
+import cn.lili.base.AbsForm;
+import cn.lili.modules.lmk.domain.entity.KitchenTag;
+import cn.lili.modules.lmk.enums.general.StoreCouponStausEnum;
+import org.springframework.beans.BeanUtils;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import org.springframework.lang.NonNull;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * 绉佸帹瀹氬埗鏍囩琛ㄥ崟
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Data
+@ApiModel(value = "KitchenTag琛ㄥ崟", description = "绉佸帹瀹氬埗鏍囩琛ㄥ崟")
+public class KitchenTagForm extends AbsForm {
+
+    @NotBlank(message = "鏍囩鍚嶇О涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏍囩鍚嶇О")
+    private String tagName;
+
+    @NotNull(message = "鏄剧ず椤哄簭涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏄剧ず椤哄簭")
+    private Integer sort;
+
+    @NotNull(message = "鏄惁鍚敤", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏄惁鍚敤")
+    /**
+     * @see StoreCouponStausEnum
+     */
+    private String enable;
+
+    public static KitchenTag getEntityByForm(@NonNull KitchenTagForm form, KitchenTag entity) {
+        if(entity == null) {
+          entity = new KitchenTag();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/AdCoverQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/AdCoverQuery.java
new file mode 100644
index 0000000..52a7ada
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/AdCoverQuery.java
@@ -0,0 +1,22 @@
+package cn.lili.modules.lmk.domain.query;
+
+import cn.lili.base.AbsQuery;
+import java.util.List;
+import org.springframework.lang.NonNull;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍘ㄥ笀灏侀潰鍥剧墖鏌ヨ
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Data
+@ApiModel(value = "AdCover鏌ヨ鍙傛暟", description = "鍘ㄥ笀灏侀潰鍥剧墖鏌ヨ鍙傛暟")
+public class AdCoverQuery extends AbsQuery {
+}
+
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/AdImgQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/AdImgQuery.java
new file mode 100644
index 0000000..72f38be
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/AdImgQuery.java
@@ -0,0 +1,22 @@
+package cn.lili.modules.lmk.domain.query;
+
+import cn.lili.base.AbsQuery;
+import java.util.List;
+import org.springframework.lang.NonNull;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 绉佸帹瀹氬埗骞垮憡鍥剧墖鏌ヨ
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Data
+@ApiModel(value = "AdImg鏌ヨ鍙傛暟", description = "绉佸帹瀹氬埗骞垮憡鍥剧墖鏌ヨ鍙傛暟")
+public class AdImgQuery extends AbsQuery {
+}
+
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenCustomizeQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenCustomizeQuery.java
new file mode 100644
index 0000000..870080b
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenCustomizeQuery.java
@@ -0,0 +1,37 @@
+package cn.lili.modules.lmk.domain.query;
+
+import cn.lili.base.AbsQuery;
+import java.util.List;
+
+import cn.lili.modules.lmk.enums.general.StoreCouponStausEnum;
+import org.springframework.lang.NonNull;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍘ㄥ笀瀹氬埗妯″潡鏌ヨ
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Data
+@ApiModel(value = "KitchenCustomize鏌ヨ鍙傛暟", description = "鍘ㄥ笀瀹氬埗妯″潡鏌ヨ鍙傛暟")
+public class KitchenCustomizeQuery extends AbsQuery {
+    /**
+     * 鍒嗙被id
+     */
+    private String tagId;
+    /**
+     * @see StoreCouponStausEnum
+     * 鍚敤鐘舵��
+     */
+    private String status;
+    /**
+     * 濂楅鍚嶅瓧
+     */
+    private String comboName;
+}
+
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenTagQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenTagQuery.java
new file mode 100644
index 0000000..4a0a306
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenTagQuery.java
@@ -0,0 +1,33 @@
+package cn.lili.modules.lmk.domain.query;
+
+import cn.lili.base.AbsQuery;
+import java.util.List;
+
+import cn.lili.modules.lmk.enums.general.StoreCouponStausEnum;
+import org.springframework.lang.NonNull;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 绉佸帹瀹氬埗鏍囩鏌ヨ
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Data
+@ApiModel(value = "KitchenTag鏌ヨ鍙傛暟", description = "绉佸帹瀹氬埗鏍囩鏌ヨ鍙傛暟")
+public class KitchenTagQuery extends AbsQuery {
+    /**
+     * @see StoreCouponStausEnum
+     * 鍚敤鐘舵��
+     */
+    private String enable;
+    /**
+     * 鍒嗙被鍚嶇О
+     */
+    private String tagName;
+}
+
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/AdCoverVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/AdCoverVO.java
new file mode 100644
index 0000000..c0cc16a
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/AdCoverVO.java
@@ -0,0 +1,35 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import cn.lili.base.AbsVo;
+import cn.lili.modules.lmk.domain.entity.AdCover;
+import java.util.List;
+import org.springframework.lang.NonNull;
+import org.springframework.beans.BeanUtils;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * 鍘ㄥ笀灏侀潰鍥剧墖灞曠ず
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Data
+@ApiModel(value = "鍘ㄥ笀灏侀潰鍥剧墖鍝嶅簲鏁版嵁", description = "鍘ㄥ笀灏侀潰鍥剧墖鍝嶅簲鏁版嵁")
+public class AdCoverVO extends AbsVo {
+
+    /** 鍥剧墖鍦板潃 */
+    @ApiModelProperty("鍥剧墖鍦板潃")
+    private String coverUrl;
+
+    public static AdCoverVO getVoByEntity(@NonNull AdCover entity, AdCoverVO vo) {
+        if(vo == null) {
+            vo = new AdCoverVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/AdImgVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/AdImgVO.java
new file mode 100644
index 0000000..bcbcf12
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/AdImgVO.java
@@ -0,0 +1,47 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import cn.lili.base.AbsVo;
+import cn.lili.modules.lmk.domain.entity.AdImg;
+import java.util.List;
+import org.springframework.lang.NonNull;
+import org.springframework.beans.BeanUtils;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * 绉佸帹瀹氬埗骞垮憡鍥剧墖灞曠ず
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Data
+@ApiModel(value = "绉佸帹瀹氬埗骞垮憡鍥剧墖鍝嶅簲鏁版嵁", description = "绉佸帹瀹氬埗骞垮憡鍥剧墖鍝嶅簲鏁版嵁")
+public class AdImgVO extends AbsVo {
+
+    /** 鎺掑簭 */
+    @ApiModelProperty("鎺掑簭")
+    private Integer sort;
+
+    /** 鎵撳紑绫诲瀷 */
+    @ApiModelProperty("鎵撳紑绫诲瀷")
+    private String openType;
+
+    /** 璺宠浆璺緞 */
+    @ApiModelProperty("璺宠浆璺緞")
+    private String directUrl;
+
+    /** 鍥剧墖鍦板潃 */
+    @ApiModelProperty("鍥剧墖鍦板潃")
+    private String coverUrl;
+
+    public static AdImgVO getVoByEntity(@NonNull AdImg entity, AdImgVO vo) {
+        if(vo == null) {
+            vo = new AdImgVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenCustomizeVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenCustomizeVO.java
new file mode 100644
index 0000000..f1dc7ce
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenCustomizeVO.java
@@ -0,0 +1,83 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import cn.lili.base.AbsVo;
+import cn.lili.modules.lmk.domain.entity.KitchenCustomize;
+import org.springframework.lang.NonNull;
+import org.springframework.beans.BeanUtils;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 鍘ㄥ笀瀹氬埗妯″潡灞曠ず
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Data
+@ApiModel(value = "鍘ㄥ笀瀹氬埗妯″潡鍝嶅簲鏁版嵁", description = "鍘ㄥ笀瀹氬埗妯″潡鍝嶅簲鏁版嵁")
+public class KitchenCustomizeVO extends AbsVo {
+
+    /** 鍟嗗搧id */
+    @ApiModelProperty("鍟嗗搧id")
+    private String goodsId;
+
+    /** skuId */
+    @ApiModelProperty("skuId")
+    private String skuId;
+
+    /** 濂楅鍚嶅瓧 */
+    @ApiModelProperty("濂楅鍚嶅瓧")
+    private String comboName;
+
+    /** 澶囨敞 */
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    /** 浜烘暟 */
+    @ApiModelProperty("浜烘暟")
+    private String num;
+
+    /** 灏侀潰鍥剧墖 */
+    @ApiModelProperty("灏侀潰鍥剧墖")
+    private String coverImg;
+
+    /** 鍘熶环 */
+    @ApiModelProperty("鍘熶环")
+    private BigDecimal orginPrice;
+
+    /** 鏍囩id */
+    @ApiModelProperty("鏍囩id")
+    private String tagId;
+
+    /** 鍚敤鐘舵�� */
+    @ApiModelProperty("鍚敤鐘舵��")
+    private String status;
+
+    /** 鎺掑簭 */
+    @ApiModelProperty("鎺掑簭")
+    private Integer sort;
+
+    /** 鍟嗗搧鍚嶇О */
+    @ApiModelProperty("鍟嗗搧鍚嶇О")
+    private String goodsName;
+
+    /** 浠锋牸 */
+    @ApiModelProperty("浠锋牸")
+    private BigDecimal price;
+
+    /** 鍥剧墖 */
+    @ApiModelProperty("鍥剧墖")
+    private String thumbnail;
+
+    public static KitchenCustomizeVO getVoByEntity(@NonNull KitchenCustomize entity, KitchenCustomizeVO vo) {
+        if(vo == null) {
+            vo = new KitchenCustomizeVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenTagVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenTagVO.java
new file mode 100644
index 0000000..e26a57c
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenTagVO.java
@@ -0,0 +1,43 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import cn.lili.base.AbsVo;
+import cn.lili.modules.lmk.domain.entity.KitchenTag;
+import java.util.List;
+import org.springframework.lang.NonNull;
+import org.springframework.beans.BeanUtils;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * 绉佸帹瀹氬埗鏍囩灞曠ず
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Data
+@ApiModel(value = "绉佸帹瀹氬埗鏍囩鍝嶅簲鏁版嵁", description = "绉佸帹瀹氬埗鏍囩鍝嶅簲鏁版嵁")
+public class KitchenTagVO extends AbsVo {
+
+    /** 鏍囩鍚嶇О */
+    @ApiModelProperty("鏍囩鍚嶇О")
+    private String tagName;
+
+    /** 鏄剧ず椤哄簭 */
+    @ApiModelProperty("鏄剧ず椤哄簭")
+    private Integer sort;
+
+    /** 鏄惁鍚敤 */
+    @ApiModelProperty("鏄惁鍚敤")
+    private String enable;
+
+    public static KitchenTagVO getVoByEntity(@NonNull KitchenTag entity, KitchenTagVO vo) {
+        if(vo == null) {
+            vo = new KitchenTagVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/enums/general/StoreCouponStausEnum.java b/framework/src/main/java/cn/lili/modules/lmk/enums/general/StoreCouponStausEnum.java
index 287ed75..8bf642c 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/enums/general/StoreCouponStausEnum.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/enums/general/StoreCouponStausEnum.java
@@ -10,5 +10,14 @@
 
     private String des;
 
+    public static StoreCouponStausEnum select(String name){
+        for (StoreCouponStausEnum value : StoreCouponStausEnum.values()) {
+            if (value.name().equals(name)) {
+                return value;
+            }
+        }
+        return null;
+    }
+
 
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/AdCoverMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/AdCoverMapper.java
new file mode 100644
index 0000000..195a563
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/AdCoverMapper.java
@@ -0,0 +1,34 @@
+package cn.lili.modules.lmk.mapper;
+
+import cn.lili.modules.lmk.domain.entity.AdCover;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import cn.lili.modules.lmk.domain.vo.AdCoverVO;
+import cn.lili.modules.lmk.domain.form.AdCoverForm;
+import cn.lili.modules.lmk.domain.query.AdCoverQuery;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鍘ㄥ笀灏侀潰鍥剧墖 Mapper 鎺ュ彛
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Mapper
+public interface AdCoverMapper extends BaseMapper<AdCover> {
+
+    /**
+     * id鏌ユ壘鍘ㄥ笀灏侀潰鍥剧墖
+     * @param id
+     * @return
+     */
+    AdCoverVO getById(String id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") AdCoverQuery query);
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/AdImgMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/AdImgMapper.java
new file mode 100644
index 0000000..f442428
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/AdImgMapper.java
@@ -0,0 +1,34 @@
+package cn.lili.modules.lmk.mapper;
+
+import cn.lili.modules.lmk.domain.entity.AdImg;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import cn.lili.modules.lmk.domain.vo.AdImgVO;
+import cn.lili.modules.lmk.domain.form.AdImgForm;
+import cn.lili.modules.lmk.domain.query.AdImgQuery;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 绉佸帹瀹氬埗骞垮憡鍥剧墖 Mapper 鎺ュ彛
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Mapper
+public interface AdImgMapper extends BaseMapper<AdImg> {
+
+    /**
+     * id鏌ユ壘绉佸帹瀹氬埗骞垮憡鍥剧墖
+     * @param id
+     * @return
+     */
+    AdImgVO getById(String id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") AdImgQuery query);
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/KitchenCustomizeMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/KitchenCustomizeMapper.java
new file mode 100644
index 0000000..55293cc
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/KitchenCustomizeMapper.java
@@ -0,0 +1,34 @@
+package cn.lili.modules.lmk.mapper;
+
+import cn.lili.modules.lmk.domain.entity.KitchenCustomize;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import cn.lili.modules.lmk.domain.vo.KitchenCustomizeVO;
+import cn.lili.modules.lmk.domain.form.KitchenCustomizeForm;
+import cn.lili.modules.lmk.domain.query.KitchenCustomizeQuery;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鍘ㄥ笀瀹氬埗妯″潡 Mapper 鎺ュ彛
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Mapper
+public interface KitchenCustomizeMapper extends BaseMapper<KitchenCustomize> {
+
+    /**
+     * id鏌ユ壘鍘ㄥ笀瀹氬埗妯″潡
+     * @param id
+     * @return
+     */
+    KitchenCustomizeVO getById(String id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") KitchenCustomizeQuery query);
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/KitchenTagMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/KitchenTagMapper.java
new file mode 100644
index 0000000..9167d2d
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/KitchenTagMapper.java
@@ -0,0 +1,34 @@
+package cn.lili.modules.lmk.mapper;
+
+import cn.lili.modules.lmk.domain.entity.KitchenTag;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import cn.lili.modules.lmk.domain.vo.KitchenTagVO;
+import cn.lili.modules.lmk.domain.form.KitchenTagForm;
+import cn.lili.modules.lmk.domain.query.KitchenTagQuery;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 绉佸帹瀹氬埗鏍囩 Mapper 鎺ュ彛
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Mapper
+public interface KitchenTagMapper extends BaseMapper<KitchenTag> {
+
+    /**
+     * id鏌ユ壘绉佸帹瀹氬埗鏍囩
+     * @param id
+     * @return
+     */
+    KitchenTagVO getById(String id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") KitchenTagQuery query);
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/AdCoverService.java b/framework/src/main/java/cn/lili/modules/lmk/service/AdCoverService.java
new file mode 100644
index 0000000..9ef9d83
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/AdCoverService.java
@@ -0,0 +1,67 @@
+package cn.lili.modules.lmk.service;
+
+import cn.lili.modules.lmk.domain.entity.AdCover;
+import com.baomidou.mybatisplus.extension.service.IService;
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.form.AdCoverForm;
+import cn.lili.modules.lmk.domain.query.AdCoverQuery;
+import java.util.List;
+
+/**
+ * 鍘ㄥ笀灏侀潰鍥剧墖 鏈嶅姟绫�
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+public interface AdCoverService extends IService<AdCover> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(AdCoverForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(AdCoverForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(AdCoverQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(String id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+
+    Result getKitchenCover();
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/AdImgService.java b/framework/src/main/java/cn/lili/modules/lmk/service/AdImgService.java
new file mode 100644
index 0000000..737148d
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/AdImgService.java
@@ -0,0 +1,67 @@
+package cn.lili.modules.lmk.service;
+
+import cn.lili.modules.lmk.domain.entity.AdImg;
+import com.baomidou.mybatisplus.extension.service.IService;
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.form.AdImgForm;
+import cn.lili.modules.lmk.domain.query.AdImgQuery;
+import java.util.List;
+
+/**
+ * 绉佸帹瀹氬埗骞垮憡鍥剧墖 鏈嶅姟绫�
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+public interface AdImgService extends IService<AdImg> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(AdImgForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(AdImgForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(AdImgQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(String id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+
+    Result getKitchenBanner();
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/KitchenCustomizeService.java b/framework/src/main/java/cn/lili/modules/lmk/service/KitchenCustomizeService.java
new file mode 100644
index 0000000..0e7ad62
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/KitchenCustomizeService.java
@@ -0,0 +1,70 @@
+package cn.lili.modules.lmk.service;
+
+import cn.lili.modules.lmk.domain.entity.KitchenCustomize;
+import com.baomidou.mybatisplus.extension.service.IService;
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.form.KitchenCustomizeForm;
+import cn.lili.modules.lmk.domain.query.KitchenCustomizeQuery;
+import org.springframework.web.bind.annotation.PathVariable;
+
+import java.util.List;
+
+/**
+ * 鍘ㄥ笀瀹氬埗妯″潡 鏈嶅姟绫�
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+public interface KitchenCustomizeService extends IService<KitchenCustomize> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(KitchenCustomizeForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(KitchenCustomizeForm form);
+
+    Result updateStatus( String id , String status);
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(KitchenCustomizeQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(String id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+
+    Result getKitchenGoods(String id);
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/KitchenTagService.java b/framework/src/main/java/cn/lili/modules/lmk/service/KitchenTagService.java
new file mode 100644
index 0000000..391880b
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/KitchenTagService.java
@@ -0,0 +1,69 @@
+package cn.lili.modules.lmk.service;
+
+import cn.lili.modules.lmk.domain.entity.KitchenTag;
+import com.baomidou.mybatisplus.extension.service.IService;
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.form.KitchenTagForm;
+import cn.lili.modules.lmk.domain.query.KitchenTagQuery;
+import java.util.List;
+
+/**
+ * 绉佸帹瀹氬埗鏍囩 鏈嶅姟绫�
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+public interface KitchenTagService extends IService<KitchenTag> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(KitchenTagForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(KitchenTagForm form);
+
+    Result updateStatus(String id,String status);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(KitchenTagQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(String id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+
+    Result getKitchenTag();
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/AdCoverServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/AdCoverServiceImpl.java
new file mode 100644
index 0000000..13477cf
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/AdCoverServiceImpl.java
@@ -0,0 +1,145 @@
+package cn.lili.modules.lmk.service.impl;
+
+import cn.lili.common.exception.ServiceException;
+import cn.lili.common.utils.StringUtils;
+import cn.lili.modules.lmk.domain.entity.AdImg;
+import cn.lili.utils.COSUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import cn.lili.modules.lmk.domain.entity.AdCover;
+import cn.lili.modules.lmk.mapper.AdCoverMapper;
+import cn.lili.modules.lmk.service.AdCoverService;
+import cn.lili.base.Result;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.lili.modules.lmk.domain.form.AdCoverForm;
+import cn.lili.modules.lmk.domain.vo.AdCoverVO;
+import cn.lili.modules.lmk.domain.query.AdCoverQuery;
+import org.abego.treelayout.internal.util.java.lang.string.StringUtil;
+import org.springframework.stereotype.Service;
+import lombok.RequiredArgsConstructor;
+import cn.lili.utils.PageUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.Assert;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 鍘ㄥ笀灏侀潰鍥剧墖 鏈嶅姟瀹炵幇绫�
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Service
+@RequiredArgsConstructor
+public class AdCoverServiceImpl extends ServiceImpl<AdCoverMapper, AdCover> implements AdCoverService {
+
+    private final AdCoverMapper adCoverMapper;
+    private final COSUtil cosUtil;
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(AdCoverForm form) {
+        AdCover entity = AdCoverForm.getEntityByForm(form, null);
+        List<AdCover> adCovers = baseMapper.selectList(null);
+        if (!adCovers.isEmpty()) {
+            throw new ServiceException("宸茬粡鏈夊皝闈㈠瓨鍦ㄤ簡");
+        }
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(AdCoverForm form) {
+        AdCover entity = baseMapper.selectById(form.getId());
+
+        // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
+        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+        BeanUtils.copyProperties(form, entity);
+        baseMapper.updateById(entity);
+        return Result.ok("淇敼鎴愬姛");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    @Override
+    public Result remove(List<String> ids) {
+        baseMapper.deleteBatchIds(ids);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    @Override
+    public Result removeById(String id) {
+        baseMapper.deleteById(id);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    @Override
+    public Result page(AdCoverQuery query) {
+        IPage<AdCoverVO> page = PageUtil.getPage(query, AdCoverVO.class);
+        baseMapper.getPage(page, query);
+        for (AdCoverVO record : page.getRecords()) {
+            if (StringUtils.isNotBlank(record.getCoverUrl())&&!record.getCoverUrl().contains("http")) {
+                record.setCoverUrl(cosUtil.getPreviewUrl(record.getCoverUrl()));
+            }
+        }
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(String id) {
+        AdCoverVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<AdCover> entities = baseMapper.selectList(null);
+        List<AdCoverVO> vos = entities.stream()
+                .map(entity -> AdCoverVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+
+    @Override
+    public Result getKitchenCover() {
+        List<AdCover> adCovers = baseMapper.selectList(null);
+        if (adCovers.size()>1) {
+            AdCover adImg = adCovers.get(0);
+            adCovers = new ArrayList<>();
+            adCovers.add(adImg);
+        }
+        return Result.ok().data(adCovers);
+    }
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/AdImgServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/AdImgServiceImpl.java
new file mode 100644
index 0000000..ebf2e8b
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/AdImgServiceImpl.java
@@ -0,0 +1,145 @@
+package cn.lili.modules.lmk.service.impl;
+
+import cn.lili.common.exception.ServiceException;
+import cn.lili.common.utils.StringUtils;
+import cn.lili.utils.COSUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import cn.lili.modules.lmk.domain.entity.AdImg;
+import cn.lili.modules.lmk.mapper.AdImgMapper;
+import cn.lili.modules.lmk.service.AdImgService;
+import cn.lili.base.Result;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.lili.modules.lmk.domain.form.AdImgForm;
+import cn.lili.modules.lmk.domain.vo.AdImgVO;
+import cn.lili.modules.lmk.domain.query.AdImgQuery;
+import org.abego.treelayout.internal.util.java.lang.string.StringUtil;
+import org.springframework.stereotype.Service;
+import lombok.RequiredArgsConstructor;
+import cn.lili.utils.PageUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.Assert;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 绉佸帹瀹氬埗骞垮憡鍥剧墖 鏈嶅姟瀹炵幇绫�
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Service
+@RequiredArgsConstructor
+public class AdImgServiceImpl extends ServiceImpl<AdImgMapper, AdImg> implements AdImgService {
+
+    private final AdImgMapper adImgMapper;
+    private final COSUtil cosUtil;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(AdImgForm form) {
+        AdImg entity = AdImgForm.getEntityByForm(form, null);
+        List<AdImg> adImgs = baseMapper.selectList(null);
+        if (!adImgs.isEmpty()) {
+            throw new ServiceException("褰撳墠灏侀潰鏈夊浘鐗囦簡");
+        }
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(AdImgForm form) {
+        AdImg entity = baseMapper.selectById(form.getId());
+
+        // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
+        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+        BeanUtils.copyProperties(form, entity);
+        baseMapper.updateById(entity);
+        return Result.ok("淇敼鎴愬姛");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    @Override
+    public Result remove(List<String> ids) {
+        baseMapper.deleteBatchIds(ids);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    @Override
+    public Result removeById(String id) {
+        baseMapper.deleteById(id);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    @Override
+    public Result page(AdImgQuery query) {
+        IPage<AdImgVO> page = PageUtil.getPage(query, AdImgVO.class);
+        baseMapper.getPage(page, query);
+        for (AdImgVO record : page.getRecords()) {
+            if (StringUtils.isNotBlank(record.getCoverUrl())&&!record.getCoverUrl().contains("http")) {
+                record.setCoverUrl(cosUtil.getPreviewUrl(record.getCoverUrl()));
+            }
+        }
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(String id) {
+        AdImgVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<AdImg> entities = baseMapper.selectList(null);
+        List<AdImgVO> vos = entities.stream()
+                .map(entity -> AdImgVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+
+    @Override
+    public Result getKitchenBanner() {
+        List<AdImg> adImgs = baseMapper.selectList(null);
+        if (adImgs.size()>1) {
+            AdImg adImg = adImgs.get(0);
+            adImgs = new ArrayList<>();
+            adImgs.add(adImg);
+        }
+        return Result.ok().data(adImgs);
+    }
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/KitchenCustomizeServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/KitchenCustomizeServiceImpl.java
new file mode 100644
index 0000000..a9f7e82
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/KitchenCustomizeServiceImpl.java
@@ -0,0 +1,158 @@
+package cn.lili.modules.lmk.service.impl;
+
+import cn.lili.common.exception.ServiceException;
+import cn.lili.common.utils.StringUtils;
+import cn.lili.modules.lmk.domain.entity.KitchenTag;
+import cn.lili.modules.lmk.domain.vo.AdImgVO;
+import cn.lili.modules.lmk.enums.general.StoreCouponStausEnum;
+import cn.lili.utils.COSUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import cn.lili.modules.lmk.domain.entity.KitchenCustomize;
+import cn.lili.modules.lmk.mapper.KitchenCustomizeMapper;
+import cn.lili.modules.lmk.service.KitchenCustomizeService;
+import cn.lili.base.Result;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.lili.modules.lmk.domain.form.KitchenCustomizeForm;
+import cn.lili.modules.lmk.domain.vo.KitchenCustomizeVO;
+import cn.lili.modules.lmk.domain.query.KitchenCustomizeQuery;
+import org.springframework.stereotype.Service;
+import lombok.RequiredArgsConstructor;
+import cn.lili.utils.PageUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.Assert;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 鍘ㄥ笀瀹氬埗妯″潡 鏈嶅姟瀹炵幇绫�
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Service
+@RequiredArgsConstructor
+public class KitchenCustomizeServiceImpl extends ServiceImpl<KitchenCustomizeMapper, KitchenCustomize> implements KitchenCustomizeService {
+
+    private final KitchenCustomizeMapper kitchenCustomizeMapper;
+    private final COSUtil cosUtil;
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(KitchenCustomizeForm form) {
+        KitchenCustomize entity = KitchenCustomizeForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(KitchenCustomizeForm form) {
+        KitchenCustomize entity = baseMapper.selectById(form.getId());
+
+        // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
+        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+        BeanUtils.copyProperties(form, entity);
+        baseMapper.updateById(entity);
+        return Result.ok("淇敼鎴愬姛");
+    }
+
+    @Override
+    public Result updateStatus(String id, String status) {
+        if (StoreCouponStausEnum.select(status) == null) {
+            throw new ServiceException("褰撳墠鐘舵�佷笉瀛樺湪");
+        }
+        KitchenCustomize kitchenCustomize = baseMapper.selectById(id);
+        if (kitchenCustomize == null) {
+            throw new ServiceException("鍒嗙被涓嶅瓨鍦�");
+        }
+        kitchenCustomize.setStatus(status);
+        baseMapper.updateById(kitchenCustomize);
+        return Result.ok("淇敼鎴愬姛");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    @Override
+    public Result remove(List<String> ids) {
+        baseMapper.deleteBatchIds(ids);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    @Override
+    public Result removeById(String id) {
+        baseMapper.deleteById(id);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    @Override
+    public Result page(KitchenCustomizeQuery query) {
+        IPage<KitchenCustomizeVO> page = PageUtil.getPage(query, KitchenCustomizeVO.class);
+        baseMapper.getPage(page, query);
+        for (KitchenCustomizeVO record : page.getRecords()) {
+            if (StringUtils.isNotBlank(record.getThumbnail())&&!record.getThumbnail().contains("http")) {
+                record.setThumbnail(cosUtil.getPreviewUrl(record.getThumbnail()));
+            }
+            if (StringUtils.isNotBlank(record.getCoverImg())&&!record.getCoverImg().contains("http")) {
+                record.setCoverImg(cosUtil.getPreviewUrl(record.getCoverImg()));
+            }
+        }
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(String id) {
+        KitchenCustomizeVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<KitchenCustomize> entities = baseMapper.selectList(null);
+        List<KitchenCustomizeVO> vos = entities.stream()
+                .map(entity -> KitchenCustomizeVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+
+    @Override
+    public Result getKitchenGoods(String id) {
+        if (StringUtils.isBlank(id)) {
+            return Result.ok().data(new ArrayList<>());
+        }
+//        kitchenCustomizeMapper.getKitchenGoods();
+        return null;
+    }
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/KitchenTagServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/KitchenTagServiceImpl.java
new file mode 100644
index 0000000..2f62bc9
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/KitchenTagServiceImpl.java
@@ -0,0 +1,151 @@
+package cn.lili.modules.lmk.service.impl;
+
+import cn.lili.common.exception.ServiceException;
+import cn.lili.modules.lmk.enums.general.StoreCouponStausEnum;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import cn.lili.modules.lmk.domain.entity.KitchenTag;
+import cn.lili.modules.lmk.mapper.KitchenTagMapper;
+import cn.lili.modules.lmk.service.KitchenTagService;
+import cn.lili.base.Result;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.lili.modules.lmk.domain.form.KitchenTagForm;
+import cn.lili.modules.lmk.domain.vo.KitchenTagVO;
+import cn.lili.modules.lmk.domain.query.KitchenTagQuery;
+import org.springframework.stereotype.Service;
+import lombok.RequiredArgsConstructor;
+import cn.lili.utils.PageUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.Assert;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 绉佸帹瀹氬埗鏍囩 鏈嶅姟瀹炵幇绫�
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Service
+@RequiredArgsConstructor
+public class KitchenTagServiceImpl extends ServiceImpl<KitchenTagMapper, KitchenTag> implements KitchenTagService {
+
+    private final KitchenTagMapper kitchenTagMapper;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(KitchenTagForm form) {
+        if (StoreCouponStausEnum.select(form.getEnable()) == null) {
+            throw new ServiceException("褰撳墠鐘舵�佷笉瀛樺湪");
+        }
+        KitchenTag entity = KitchenTagForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(KitchenTagForm form) {
+        if (StoreCouponStausEnum.select(form.getEnable()) == null) {
+            throw new ServiceException("褰撳墠鐘舵�佷笉瀛樺湪");
+        }
+        KitchenTag entity = baseMapper.selectById(form.getId());
+
+        // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
+        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+        BeanUtils.copyProperties(form, entity);
+        baseMapper.updateById(entity);
+        return Result.ok("淇敼鎴愬姛");
+    }
+
+    @Override
+    public Result updateStatus(String id, String status) {
+        if (StoreCouponStausEnum.select(status) == null) {
+            throw new ServiceException("褰撳墠鐘舵�佷笉瀛樺湪");
+        }
+        KitchenTag entity = baseMapper.selectById(id);
+        if (entity == null) {
+            throw new ServiceException("鍒嗙被涓嶅瓨鍦�");
+        }
+        entity.setEnable(status);
+        baseMapper.updateById(entity);
+        return Result.ok("淇敼鎴愬姛");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    @Override
+    public Result remove(List<String> ids) {
+        baseMapper.deleteBatchIds(ids);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    @Override
+    public Result removeById(String id) {
+        baseMapper.deleteById(id);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    @Override
+    public Result page(KitchenTagQuery query) {
+        IPage<KitchenTagVO> page = PageUtil.getPage(query, KitchenTagVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(String id) {
+        KitchenTagVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<KitchenTag> entities = baseMapper.selectList(null);
+        List<KitchenTagVO> vos = entities.stream()
+                .map(entity -> KitchenTagVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+
+    @Override
+    public Result getKitchenTag() {
+        LambdaQueryWrapper<KitchenTag> query = Wrappers.<KitchenTag>lambdaQuery().eq(KitchenTag::getEnable, StoreCouponStausEnum.ENABLE.name())
+                .orderByAsc(KitchenTag::getSort);
+        List<KitchenTag> kitchenTags = baseMapper.selectList(query);
+        return Result.ok().data(kitchenTags);
+    }
+}
diff --git a/framework/src/main/resources/mapper/lmk/AdCoverMapper.xml b/framework/src/main/resources/mapper/lmk/AdCoverMapper.xml
new file mode 100644
index 0000000..85e2f83
--- /dev/null
+++ b/framework/src/main/resources/mapper/lmk/AdCoverMapper.xml
@@ -0,0 +1,38 @@
+<?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="cn.lili.modules.lmk.mapper.AdCoverMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.AdCoverVO">
+        <id column="id" property="id"/>
+        <result column="cover_url" property="coverUrl" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            LAC.cover_url,
+            LAC.id
+        FROM
+            lmk_ad_cover LAC
+        WHERE
+            LAC.id = #{id} AND LAC.delete_flag = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            LAC.cover_url,
+            LAC.id
+        FROM
+            lmk_ad_cover LAC
+        WHERE
+            LAC.delete_flag = 0
+    </select>
+
+</mapper>
diff --git a/framework/src/main/resources/mapper/lmk/AdImgMapper.xml b/framework/src/main/resources/mapper/lmk/AdImgMapper.xml
new file mode 100644
index 0000000..69f2e7e
--- /dev/null
+++ b/framework/src/main/resources/mapper/lmk/AdImgMapper.xml
@@ -0,0 +1,47 @@
+<?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="cn.lili.modules.lmk.mapper.AdImgMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.AdImgVO">
+        <id column="id" property="id"/>
+        <result column="sort" property="sort" />
+        <result column="open_type" property="openType" />
+        <result column="direct_url" property="directUrl" />
+        <result column="cover_url" property="coverUrl" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            LAI.sort,
+            LAI.open_type,
+            LAI.direct_url,
+            LAI.cover_url,
+            LAI.id
+        FROM
+            lmk_ad_img LAI
+        WHERE
+            LAI.id = #{id} AND LAI.delete_flag = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            LAI.sort,
+            LAI.open_type,
+            LAI.direct_url,
+            LAI.cover_url,
+            LAI.id
+        FROM
+            lmk_ad_img LAI
+        WHERE
+            LAI.delete_flag = 0
+    </select>
+
+</mapper>
diff --git a/framework/src/main/resources/mapper/lmk/KitchenCustomizeMapper.xml b/framework/src/main/resources/mapper/lmk/KitchenCustomizeMapper.xml
new file mode 100644
index 0000000..c036f62
--- /dev/null
+++ b/framework/src/main/resources/mapper/lmk/KitchenCustomizeMapper.xml
@@ -0,0 +1,81 @@
+<?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="cn.lili.modules.lmk.mapper.KitchenCustomizeMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.KitchenCustomizeVO">
+        <id column="id" property="id"/>
+        <result column="goods_id" property="goodsId" />
+        <result column="sku_id" property="skuId" />
+        <result column="combo_name" property="comboName" />
+        <result column="remark" property="remark" />
+        <result column="num" property="num" />
+        <result column="cover_img" property="coverImg" />
+        <result column="orgin_price" property="orginPrice" />
+        <result column="tag_id" property="tagId" />
+        <result column="status" property="status" />
+        <result column="sort" property="sort" />
+        <result column="goods_name" property="goodsName" />
+        <result column="price" property="price" />
+        <result column="thumbnail" property="thumbnail" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            LKC.goods_id,
+            LKC.sku_id,
+            LKC.combo_name,
+            LKC.remark,
+            LKC.num,
+            LKC.cover_img,
+            LKC.orgin_price,
+            LKC.tag_id,
+            LKC.status,
+            LKC.sort,
+            LKC.id
+        FROM
+            lmk_kitchen_customize LKC
+        WHERE
+            LKC.id = #{id} AND LKC.delete_flag = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            LKC.goods_id,
+            LKC.sku_id,
+            LKC.combo_name,
+            LKC.remark,
+            LKC.num,
+            LKC.cover_img,
+            LKC.orgin_price,
+            LKC.tag_id,
+            LKC.STATUS,
+            LKC.sort,
+            LKC.id,
+            lgs.goods_name,
+            lgs.price,
+            lgs.thumbnail
+        FROM
+            lmk_kitchen_customize LKC JOIN li_goods_sku lgs ON lgs.id = LKC.sku_id AND lgs.delete_flag = 0
+        WHERE
+            LKC.delete_flag = 0
+        <if test="query.comboName !='' and query.comboName != null">
+           and LKC.combo_name like concat('%',#{query.comboName},'%')
+        </if>
+        <if test="query.status !='' and query.status != null">
+           and LKC.STATUS  = #{query.status}
+        </if>
+        <if test="query.tagId !='' and query.tagId != null">
+           and LKC.tag_id  = #{query.tagId}
+        </if>
+        order by LKC.create_time desc
+    </select>
+
+</mapper>
diff --git a/framework/src/main/resources/mapper/lmk/KitchenTagMapper.xml b/framework/src/main/resources/mapper/lmk/KitchenTagMapper.xml
new file mode 100644
index 0000000..86df857
--- /dev/null
+++ b/framework/src/main/resources/mapper/lmk/KitchenTagMapper.xml
@@ -0,0 +1,50 @@
+<?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="cn.lili.modules.lmk.mapper.KitchenTagMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.KitchenTagVO">
+        <id column="id" property="id"/>
+        <result column="tag_name" property="tagName" />
+        <result column="sort" property="sort" />
+        <result column="enable" property="enable" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            LKT.tag_name,
+            LKT.sort,
+            LKT.id
+        FROM
+            lmk_kitchen_tag LKT
+        WHERE
+            LKT.id = #{id} AND LKT.delete_flag = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            LKT.tag_name,
+            LKT.sort,
+            LKT.id,
+            LKT.enable
+        FROM
+            lmk_kitchen_tag LKT
+        WHERE
+            LKT.delete_flag = 0
+        <if test="query.enable != '' and query.enable !=null">
+          and  LKT.enable = #{query.enable}
+        </if>
+        <if test="query.tagName != '' and query.tagName !=null">
+            and  LKT.tag_name like concat('%',#{query.tagName},'%')
+        </if>
+        order by LKT.create_time desc
+    </select>
+
+</mapper>
diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/AdCoverController.java b/manager-api/src/main/java/cn/lili/controller/lmk/AdCoverController.java
new file mode 100644
index 0000000..7181ede
--- /dev/null
+++ b/manager-api/src/main/java/cn/lili/controller/lmk/AdCoverController.java
@@ -0,0 +1,76 @@
+package cn.lili.controller.lmk;
+
+import cn.lili.group.Update;
+import cn.lili.group.Add;
+import cn.lili.modules.lmk.service.AdCoverService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.validation.annotation.Validated;
+import javax.validation.constraints.NotEmpty;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.form.AdCoverForm;
+import cn.lili.modules.lmk.domain.query.AdCoverQuery;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 鍘ㄥ笀灏侀潰鍥剧墖 鍓嶇鎺у埗鍣�
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "鍘ㄥ笀灏侀潰鍥剧墖", tags = "鍘ㄥ笀灏侀潰鍥剧墖绠$悊")
+@RestController
+@RequestMapping("/manager/lmk/ad-cover")
+public class AdCoverController {
+
+    private final AdCoverService adCoverService;
+
+    @PostMapping
+    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
+    public Result add(@RequestBody @Validated(Add.class) AdCoverForm form) {
+        return adCoverService.add(form);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    public Result update(@RequestBody @Validated(Update.class) AdCoverForm form) {
+        return adCoverService.update(form);
+    }
+
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
+    public Result removeById(@PathVariable("id") String id) {
+        return adCoverService.removeById(id);
+    }
+
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
+    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
+        return adCoverService.remove(ids);
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    public Result page(AdCoverQuery query) {
+        return adCoverService.page(query);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+    public Result detail(@PathVariable("id") String id) {
+        return adCoverService.detail(id);
+    }
+
+    @GetMapping("/list")
+    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
+    public Result list() {
+        return adCoverService.all();
+    }
+}
diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/AdImgController.java b/manager-api/src/main/java/cn/lili/controller/lmk/AdImgController.java
new file mode 100644
index 0000000..0a6b82a
--- /dev/null
+++ b/manager-api/src/main/java/cn/lili/controller/lmk/AdImgController.java
@@ -0,0 +1,76 @@
+package cn.lili.controller.lmk;
+
+import cn.lili.group.Update;
+import cn.lili.group.Add;
+import cn.lili.modules.lmk.service.AdImgService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.validation.annotation.Validated;
+import javax.validation.constraints.NotEmpty;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.form.AdImgForm;
+import cn.lili.modules.lmk.domain.query.AdImgQuery;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 绉佸帹瀹氬埗骞垮憡鍥剧墖 鍓嶇鎺у埗鍣�
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "绉佸帹瀹氬埗骞垮憡鍥剧墖", tags = "绉佸帹瀹氬埗骞垮憡鍥剧墖绠$悊")
+@RestController
+@RequestMapping("/manager/lmk/ad-img")
+public class AdImgController {
+
+    private final AdImgService adImgService;
+
+    @PostMapping
+    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
+    public Result add(@RequestBody @Validated(Add.class) AdImgForm form) {
+        return adImgService.add(form);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    public Result update(@RequestBody @Validated(Update.class) AdImgForm form) {
+        return adImgService.update(form);
+    }
+
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
+    public Result removeById(@PathVariable("id") String id) {
+        return adImgService.removeById(id);
+    }
+
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
+    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
+        return adImgService.remove(ids);
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    public Result page(AdImgQuery query) {
+        return adImgService.page(query);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+    public Result detail(@PathVariable("id") String id) {
+        return adImgService.detail(id);
+    }
+
+    @GetMapping("/list")
+    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
+    public Result list() {
+        return adImgService.all();
+    }
+}
diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/KitchenCustomizeController.java b/manager-api/src/main/java/cn/lili/controller/lmk/KitchenCustomizeController.java
new file mode 100644
index 0000000..cc5fe8c
--- /dev/null
+++ b/manager-api/src/main/java/cn/lili/controller/lmk/KitchenCustomizeController.java
@@ -0,0 +1,80 @@
+package cn.lili.controller.lmk;
+
+import cn.lili.group.Update;
+import cn.lili.group.Add;
+import cn.lili.modules.lmk.service.KitchenCustomizeService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.validation.annotation.Validated;
+import javax.validation.constraints.NotEmpty;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.form.KitchenCustomizeForm;
+import cn.lili.modules.lmk.domain.query.KitchenCustomizeQuery;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 鍘ㄥ笀瀹氬埗妯″潡 鍓嶇鎺у埗鍣�
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "鍘ㄥ笀瀹氬埗妯″潡", tags = "鍘ㄥ笀瀹氬埗妯″潡绠$悊")
+@RestController
+@RequestMapping("/manager/lmk/kitchen-customize")
+public class KitchenCustomizeController {
+
+    private final KitchenCustomizeService kitchenCustomizeService;
+
+    @PostMapping
+    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
+    public Result add(@RequestBody @Validated(Add.class) KitchenCustomizeForm form) {
+        return kitchenCustomizeService.add(form);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    public Result update(@RequestBody @Validated(Update.class) KitchenCustomizeForm form) {
+        return kitchenCustomizeService.update(form);
+    }
+    @PutMapping("/{id}/{status}")
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    public Result updateStatus(@PathVariable String id ,@PathVariable String status) {
+        return kitchenCustomizeService.updateStatus(id,status);
+    }
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
+    public Result removeById(@PathVariable("id") String id) {
+        return kitchenCustomizeService.removeById(id);
+    }
+
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
+    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
+        return kitchenCustomizeService.remove(ids);
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    public Result page(KitchenCustomizeQuery query) {
+        return kitchenCustomizeService.page(query);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+    public Result detail(@PathVariable("id") String id) {
+        return kitchenCustomizeService.detail(id);
+    }
+
+    @GetMapping("/list")
+    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
+    public Result list() {
+        return kitchenCustomizeService.all();
+    }
+}
diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/KitchenTagController.java b/manager-api/src/main/java/cn/lili/controller/lmk/KitchenTagController.java
new file mode 100644
index 0000000..e6c1129
--- /dev/null
+++ b/manager-api/src/main/java/cn/lili/controller/lmk/KitchenTagController.java
@@ -0,0 +1,81 @@
+package cn.lili.controller.lmk;
+
+import cn.lili.group.Update;
+import cn.lili.group.Add;
+import cn.lili.modules.lmk.service.KitchenTagService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.validation.annotation.Validated;
+import javax.validation.constraints.NotEmpty;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.form.KitchenTagForm;
+import cn.lili.modules.lmk.domain.query.KitchenTagQuery;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 绉佸帹瀹氬埗鏍囩 鍓嶇鎺у埗鍣�
+ *
+ * @author peng
+ * @since 2025-12-24
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "绉佸帹瀹氬埗鏍囩", tags = "绉佸帹瀹氬埗鏍囩绠$悊")
+@RestController
+@RequestMapping("/manager/lmk/kitchen-tag")
+public class KitchenTagController {
+
+    private final KitchenTagService kitchenTagService;
+
+    @PostMapping
+    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
+    public Result add(@RequestBody @Validated(Add.class) KitchenTagForm form) {
+        return kitchenTagService.add(form);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    public Result update(@RequestBody @Validated(Update.class) KitchenTagForm form) {
+        return kitchenTagService.update(form);
+    }
+    @PutMapping("/{id}/{status}")
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    public Result update(@PathVariable String id ,@PathVariable String status) {
+        return kitchenTagService.updateStatus(id,status);
+    }
+
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
+    public Result removeById(@PathVariable("id") String id) {
+        return kitchenTagService.removeById(id);
+    }
+
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
+    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
+        return kitchenTagService.remove(ids);
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    public Result page(KitchenTagQuery query) {
+        return kitchenTagService.page(query);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+    public Result detail(@PathVariable("id") String id) {
+        return kitchenTagService.detail(id);
+    }
+
+    @GetMapping("/list")
+    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
+    public Result list() {
+        return kitchenTagService.all();
+    }
+}

--
Gitblit v1.8.0