From 8063ee7eee51bfe25a09428e6efc60f828b270c6 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期四, 19 六月 2025 20:00:52 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoTypeVO.java                |   34 
 framework/src/main/java/cn/lili/modules/lmk/domain/form/WxVideoForm.java                     |    9 
 buyer-api/src/main/java/cn/lili/controller/lmk/ShareController.java                          |   44 
 buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java                          |   21 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/WxHealthVideoQuery.java             |   25 
 framework/src/main/java/cn/lili/modules/search/service/EsGoodsSearchService.java             |   10 
 framework/src/main/resources/mapper/lmk/VideoGoodsMapper.xml                                 |    7 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxEditVideoVO.java                     |   14 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoGoodsEsQuery.java              |   28 
 framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoGoodsServiceImpl.java          |   22 
 framework/src/main/java/cn/lili/modules/lmk/domain/form/ShareForm.java                       |   49 
 buyer-api/src/main/java/cn/lili/controller/passport/connect/MiniProgramBuyerController.java  |    7 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenVideoTypeRefQuery.java       |   22 
 framework/src/main/java/cn/lili/modules/lmk/domain/entity/KitchenType.java                   |   33 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoTagVO.java                      |   36 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/ShareVO.java                           |   47 
 framework/src/main/java/cn/lili/modules/lmk/mapper/ShareClickRecordMapper.java               |   34 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenVideoQuery.java              |   39 
 framework/src/main/java/cn/lili/modules/lmk/domain/entity/VideoGoods.java                    |   45 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenTypeQuery.java               |   24 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/ShareClickRecordQuery.java          |   22 
 manager-api/src/main/java/cn/lili/controller/goods/GoodsManagerController.java               |   20 
 framework/src/main/resources/mapper/lmk/ShareMapper.xml                                      |   47 
 framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java          |   49 
 seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java                  |   15 
 framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java              |   33 
 framework/src/main/java/cn/lili/modules/lmk/domain/entity/ShareClickRecord.java              |   35 
 framework/src/main/java/cn/lili/modules/lmk/service/ShareService.java                        |   74 +
 framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java                          |    6 
 framework/src/main/java/cn/lili/modules/lmk/mapper/KitchenVideoTypeRefMapper.java            |   37 
 framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java            |    1 
 framework/src/main/java/cn/lili/modules/lmk/enums/general/VideoSupportOpEnum.java            |    4 
 framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPackageServiceImpl.java |   15 
 framework/src/main/java/cn/lili/modules/lmk/service/KitchenVideoTypeRefService.java          |   70 +
 framework/src/main/java/cn/lili/mybatis/BaseIdAndDeleteEntity.java                           |   40 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoVO.java                           |   14 
 framework/src/main/java/cn/lili/modules/lmk/domain/entity/Share.java                         |   40 
 framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java               |  299 ++++
 framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenVideoTypeRefForm.java         |   42 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/ShareQuery.java                     |   22 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenTypeVO.java                     |   43 
 framework/src/main/java/cn/lili/modules/lmk/service/impl/ShareServiceImpl.java               |  161 ++
 framework/src/main/java/cn/lili/modules/member/service/MemberService.java                    |    4 
 framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenVideoForm.java                |   59 +
 framework/src/main/java/cn/lili/modules/lmk/service/VideoGoodsService.java                   |   14 
 framework/src/main/java/cn/lili/modules/lmk/service/impl/KitchenTypeServiceImpl.java         |  135 ++
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java                         |    5 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoGoodsDetailVO.java                |   30 
 framework/src/main/resources/mapper/lmk/VideoMapper.xml                                      |  179 ++
 framework/src/main/java/cn/lili/modules/lmk/service/ShareClickRecordService.java             |   65 +
 manager-api/src/main/java/cn/lili/controller/lmk/KitchenTypeController.java                  |   76 +
 framework/src/main/java/cn/lili/modules/lmk/domain/entity/KitchenVideoTypeRef.java           |   37 
 framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java                        |   76 +
 framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java                          |   29 
 framework/src/main/resources/mapper/lmk/KitchenTypeMapper.xml                                |   48 
 buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java                   |    8 
 framework/src/main/java/cn/lili/modules/lmk/domain/form/HealthVideoForm.java                 |   54 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoGoodsPublishVO.java               |   21 
 framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java     |   37 
 framework/src/main/java/cn/lili/modules/connect/service/ConnectService.java                  |   11 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoVO.java                    |  116 +
 framework/src/main/resources/mapper/lmk/ShareClickRecordMapper.xml                           |   44 
 framework/src/main/java/cn/lili/modules/lmk/mapper/KitchenTypeMapper.java                    |   34 
 framework/src/main/java/cn/lili/modules/lmk/service/impl/ShareClickRecordServiceImpl.java    |  119 ++
 manager-api/src/main/java/cn/lili/controller/lmk/HealthController.java                       |   44 
 config/application.yml                                                                       |   25 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/ShareClickRecordVO.java                |   43 
 framework/src/main/java/cn/lili/modules/lmk/service/KitchenTypeService.java                  |   65 +
 framework/src/main/java/cn/lili/modules/lmk/domain/query/HealthVideoQuery.java               |   39 
 framework/src/main/java/cn/lili/modules/lmk/mapper/VideoGoodsMapper.java                     |   17 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoTypeRefVO.java             |   39 
 framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenTypeForm.java                 |   45 
 buyer-api/src/main/resources/apiclient_cert.pem                                              |   25 
 framework/src/main/java/cn/lili/modules/lmk/mapper/ShareMapper.java                          |   34 
 manager-api/src/main/java/cn/lili/controller/lmk/KitchenVideoController.java                 |   59 +
 framework/src/main/java/cn/lili/modules/lmk/domain/form/ShareClickRecordForm.java            |   42 
 buyer-api/src/main/resources/apiclient_cert.p12                                              |    0 
 framework/src/main/java/cn/lili/modules/lmk/service/impl/KitchenVideoTypeRefServiceImpl.java |  126 ++
 framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoTagServiceImpl.java            |    7 
 framework/src/main/resources/mapper/lmk/KitchenVideoTypeRefMapper.xml                        |   53 
 buyer-api/src/main/resources/apiclient_key.pem                                               |   28 
 81 files changed, 3,449 insertions(+), 82 deletions(-)

diff --git a/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java
index 087404b..c5d3d25 100644
--- a/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java
@@ -1,5 +1,6 @@
 package cn.lili.controller.goods;
 
+import cn.lili.base.Result;
 import cn.lili.common.enums.ResultCode;
 import cn.lili.common.enums.ResultUtil;
 import cn.lili.common.exception.ServiceException;
@@ -11,6 +12,7 @@
 import cn.lili.modules.goods.entity.vos.GoodsVO;
 import cn.lili.modules.goods.service.GoodsService;
 import cn.lili.modules.goods.service.GoodsSkuService;
+import cn.lili.modules.lmk.domain.query.VideoGoodsEsQuery;
 import cn.lili.modules.search.entity.dos.EsGoodsIndex;
 import cn.lili.modules.search.entity.dos.EsGoodsRelatedInfo;
 import cn.lili.modules.search.entity.dto.EsGoodsSearchDTO;
@@ -115,6 +117,12 @@
         return ResultUtil.data(goodsSearchService.searchGoodsByPage(goodsSearchParams, pageVO));
     }
 
+    @ApiOperation(value = "鍟嗗搧鍒嗛〉-鍙戝竷瑙嗛鏃跺叧鑱斿晢鍝�")
+    @GetMapping("/video/es")
+    public Result videoGoodsEsPage(VideoGoodsEsQuery query) {
+        return goodsSearchService.videoGoodsEsPage(query);
+    }
+
     @ApiOperation(value = "浠嶦S涓幏鍙栫浉鍏冲晢鍝佸搧鐗屽悕绉帮紝鍒嗙被鍚嶇О鍙婂睘鎬�")
     @GetMapping("/es/related")
     public ResultMessage<EsGoodsRelatedInfo> getGoodsRelatedByPageFromEs(EsGoodsSearchDTO goodsSearchParams, PageVO pageVO) {
diff --git a/buyer-api/src/main/java/cn/lili/controller/lmk/ShareController.java b/buyer-api/src/main/java/cn/lili/controller/lmk/ShareController.java
new file mode 100644
index 0000000..f620ab8
--- /dev/null
+++ b/buyer-api/src/main/java/cn/lili/controller/lmk/ShareController.java
@@ -0,0 +1,44 @@
+package cn.lili.controller.lmk;
+
+import cn.lili.base.Result;
+import cn.lili.group.Add;
+import cn.lili.modules.lmk.domain.form.ShareClickRecordForm;
+import cn.lili.modules.lmk.domain.form.ShareForm;
+import cn.lili.modules.lmk.service.ShareService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 鍒嗕韩璁板綍 鍓嶇鎺у埗鍣�
+ *
+ * @author xp
+ * @since 2025-06-16
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "鍒嗕韩璁板綍", tags = "鍒嗕韩璁板綍绠$悊")
+@RestController
+@RequestMapping("/buyer/lmk/share")
+public class ShareController {
+
+    private final ShareService shareService;
+
+
+    @PostMapping
+    @ApiOperation(value = "娣诲姞鍒嗕韩", notes = "娣诲姞鍒嗕韩")
+    public Result add(@RequestBody @Validated(Add.class) ShareForm form) {
+        return shareService.add(form);
+    }
+
+    @PostMapping("/click/record")
+    @ApiOperation(value = "娣诲姞鍒嗕韩璁块棶璁板綍", notes = "娣诲姞鍒嗕韩璁块棶璁板綍")
+    public Result addShareClick(@RequestBody @Validated(Add.class) ShareClickRecordForm form) {
+        return shareService.addShareClick(form);
+    }
+}
diff --git a/buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java b/buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java
index a1fba30..9ae68b3 100644
--- a/buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java
@@ -6,6 +6,8 @@
 import cn.lili.modules.lmk.domain.form.VideoHomePageInfoForm;
 import cn.lili.modules.lmk.domain.form.WxVideoForm;
 import cn.lili.modules.lmk.domain.query.AuthorVideoQuery;
+import cn.lili.modules.lmk.domain.query.HealthVideoQuery;
+import cn.lili.modules.lmk.domain.query.WxHealthVideoQuery;
 import org.springframework.validation.annotation.Validated;
 import lombok.RequiredArgsConstructor;
 import java.util.List;
@@ -41,13 +43,19 @@
     @PutMapping
     @ApiOperation(value = "淇敼", notes = "淇敼")
     public Result update(@RequestBody @Validated(Update.class) WxVideoForm form) {
-        return videoService.update(form);
+        return videoService.updatePublish(form);
     }
 
     @DeleteMapping("/{id}")
     @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
     public Result removeById(@PathVariable("id") String id) {
         return videoService.removeById(id);
+    }
+
+    @PostMapping("/down/{id}")
+    @ApiOperation(value = "鐢ㄦ埛涓嬫灦瑙嗛", notes = "鐢ㄦ埛涓嬫灦瑙嗛")
+    public Result downVideo(@PathVariable("id") String id) {
+        return videoService.buyerDownVideo(id);
     }
 
     @DeleteMapping("/batch")
@@ -67,6 +75,17 @@
     public Result recommendVideo(VideoQuery query) {
         return videoService.recommendVideo(query);
     }
+    @GetMapping("/health/recommend")
+    @ApiOperation(value = "澶у仴搴疯棰戞帹鑽�", notes = "澶у仴搴疯棰戞帹鑽�")
+    public Result healthRecommendVideo(WxHealthVideoQuery query) {
+        return videoService.healthRecommendVideo(query);
+    }
+
+    @GetMapping("/goods/detail/{videoId}")
+    @ApiOperation(value = "瑙嗛鍟嗗搧鏌ョ湅", notes = "瑙嗛鍟嗗搧鏌ョ湅")
+    public Result getGoodsDetail(@PathVariable("videoId") String videoId) {
+        return videoService.getGoodsDetail(videoId);
+    }
 
     @PostMapping("/view/record")
     @ApiOperation(value = "淇濆瓨瑙傜湅璁板綍", notes = "淇濆瓨瑙傜湅璁板綍")
diff --git a/buyer-api/src/main/java/cn/lili/controller/passport/connect/MiniProgramBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/passport/connect/MiniProgramBuyerController.java
index a3c1a6a..1e3b9e7 100644
--- a/buyer-api/src/main/java/cn/lili/controller/passport/connect/MiniProgramBuyerController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/passport/connect/MiniProgramBuyerController.java
@@ -1,5 +1,6 @@
 package cn.lili.controller.passport.connect;
 
+import cn.lili.base.Result;
 import cn.lili.common.enums.ResultUtil;
 import cn.lili.common.security.token.Token;
 import cn.lili.common.vo.ResultMessage;
@@ -47,6 +48,12 @@
         return ResultUtil.data(this.connectService.miniProgramAutoLogin(params));
     }
 
+    @GetMapping("/silent-login")
+    @ApiOperation(value = "灏忕▼搴忛潤榛樼櫥褰�--涓嶈幏鍙栫敤鎴蜂俊鎭�")
+    public Result silentLogin(String code) {
+        return this.connectService.silentLogin(code);
+    }
+
     @GetMapping("/subscribeMessage")
     @ApiOperation(value = "娑堟伅璁㈤槄")
     public ResultMessage<List<WechatMPMessage>> autoLogin() {
diff --git a/buyer-api/src/main/resources/apiclient_cert.p12 b/buyer-api/src/main/resources/apiclient_cert.p12
new file mode 100644
index 0000000..1813ac7
--- /dev/null
+++ b/buyer-api/src/main/resources/apiclient_cert.p12
Binary files differ
diff --git a/buyer-api/src/main/resources/apiclient_cert.pem b/buyer-api/src/main/resources/apiclient_cert.pem
new file mode 100644
index 0000000..22f765c
--- /dev/null
+++ b/buyer-api/src/main/resources/apiclient_cert.pem
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEKzCCAxOgAwIBAgIUQI+FRbtTLFAdR9seUI0sqtgzEHcwDQYJKoZIhvcNAQEL
+BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
+FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
+Q0EwHhcNMjUwNDAxMDU0NDU0WhcNMzAwMzMxMDU0NDU0WjCBhDETMBEGA1UEAwwK
+MTcxMjU3NzU5MDEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTAwLgYDVQQL
+DCfmt7HlnLPnvo7nm4rnrZDlhpzkuJrnp5HmioDmnInpmZDlhazlj7gxCzAJBgNV
+BAYTAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAMpJI0pxouUDKZGtpIytAnLQSZMgltCGEmfuuFaMRN0eqiPJHbo0
+EUiRfJNUCBcFsf71iW5bSA2oxyPxh1oljalUDagBWng+3zaXBoFOHrWoswd0B9u1
+GdTX/9LEBiLu3MqENckHxI/hx22HuK0vEg2VFroj+5IBIf+KnJoyAkfCH5e8Ea+t
+FCHlsZa5GqC3iAIB+JTmdSHTRKVfjWHGfGLmhHZt/intLDstlKP8IRbtTR9CRXE3
+Q5mVYURGzQ0VOe9zPGZE2CQ5Zd4ETOHwLRJy78nls4Eqn1D1UOZD88uSSi65MM86
+msjnH1u3upH1yeTT1Gr4Zvjz8FTjzVAzjL8CAwEAAaOBuTCBtjAJBgNVHRMEAjAA
+MAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0cDovL2V2
+Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJD
+MDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0MjJFMTJC
+MjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUAA4IBAQAf
+BTOdG7IOxZGUujH83E0RULUcAFy/fIhwM15ZgI7dflCNO3n3Vlx3Q/NuHEKS70hH
+kdmNCjusIMVDr8vixYwD3rQ6Dw5oi0DNWihLyj99JdqZlcxHSYsmuFXXWAzpvl1q
+wwAqF1RrrBkoK8T1L3SzZsBRwJcjPZAtQmdaYyZ2wc0RN0LmJQ26Kr+AWTsQ/4NK
+QC2dlIhRRCQzurBt4Y9s75iDnkckDZx82vJ2pCYAIgcPJRLTQ+06wRnMXajaEicN
+lXknSrML7I4jM5zOHzuj7RkviFpTdXep1Tk+4E0pN6pXxLyR7uNJ0YuJqnqcdlTY
+Di0KGtJMK0iUNMKQnFGA
+-----END CERTIFICATE-----
diff --git a/buyer-api/src/main/resources/apiclient_key.pem b/buyer-api/src/main/resources/apiclient_key.pem
new file mode 100644
index 0000000..cf00b91
--- /dev/null
+++ b/buyer-api/src/main/resources/apiclient_key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDKSSNKcaLlAymR
+raSMrQJy0EmTIJbQhhJn7rhWjETdHqojyR26NBFIkXyTVAgXBbH+9YluW0gNqMcj
+8YdaJY2pVA2oAVp4Pt82lwaBTh61qLMHdAfbtRnU1//SxAYi7tzKhDXJB8SP4cdt
+h7itLxINlRa6I/uSASH/ipyaMgJHwh+XvBGvrRQh5bGWuRqgt4gCAfiU5nUh00Sl
+X41hxnxi5oR2bf4p7Sw7LZSj/CEW7U0fQkVxN0OZlWFERs0NFTnvczxmRNgkOWXe
+BEzh8C0Scu/J5bOBKp9Q9VDmQ/PLkkouuTDPOprI5x9bt7qR9cnk09Rq+Gb48/BU
+481QM4y/AgMBAAECggEAdJoeFp5USHA/OPL/4/siay43CvEBHif6WiCX74Ohelhf
+uIsIcLnssIj0ZzRMCYFF7fJ5CrzhVsZQLB7gZ404EEAcMxi8no2XOy9pF4YBW7Nn
+p0cx9Gp6/l6X31UROHe5m58EJeItYsbBnxhZ0rJMVLn4xMlTDQFMKLIsvRFQkS2F
+ZHIFqklDP4kFMmpRlCdoLSTldYmFJ5AtepyXYimGA2dpYooDDhgR1FAudrybQFDh
+A2h0iZTTmhABnbW3elL6PydjY4yszvM6I15a/eiynevXKVLyVYBHTV39XUOjJp6f
+XpOW3nuxhkCK2xUfRgOgepxS+3/dauROtM4SQeo56QKBgQDsAoZwYRI0yeTYA0lo
+m+QAwYGcbTaccKOghc6taIJi4xAOH5WloB6Uv+Wx3gn1DufOJt3yeF4/1+2W1oH6
+9ZBZwNo98VqMg2oa4DxhX3Oa6v7VTqelFccGGZ+/Lim5bdMfcfapxlv8MB77OPJW
+fCAA514hp2ydkkPprFtcPU1z9QKBgQDba1xyHpKmFuz7kju9OWLBq1x8v2GnOqW6
+4ypfNob2ljYTK7BfldPupYF7VC4F6dZqqKlyJqe2rhgRWs49J772AHcGovEHaRsT
+Pi63/EA3ASfi58MmuWI5Y/hFSnM6q14ZTnpD9ZKiInK8HFHjVCrCrfAE1G13/s+R
+K+YpawTBYwKBgQCoqSlQWF69cObk5HxqkLWBQMiSdI4JgIm+5sELtdswNhq8LSAx
+q9sO7JCG6ynsgklwTuBgLlsUfwhguk1LfoA5VBPjHn9aWXPTXxpnb+Ja/MM+xyYR
+WR3RIzDBXIke5fhxyWzAaWxFLlKFsG2nFq98Vdw0asS5WtTDwpPLuFeInQKBgHHG
+nv4x6jsjgikE7+Mz4YipUeEB4CI14AAjkTIj9SHiTBHuwpsd9vI1cgnAYckBMwTF
+hm/BqY+pgKNnIbBGbtfi79VKIo+EKdz1joYq0CV1fPhE00W+NTerJe7QJyYR/E5F
+ClM5AJsAH9x5FuE5IJ8oUGBAwq7JO1p8l/F8I9AfAoGBAMvLmGi36QRzv9VjQO1Z
+S0yG9OjLqdexYl7ogZYW/ys1yZg9mYiFv1wjqkDhegiGM8QyNoUFq2d7cIFZtfz6
+3wrcFn4JDW1l9VaB+IM2G4GEsgrZ4wLalKdCRR83KRvuTyjUKZYVvWNNrNzv0gp/
+51l5UctJTdE2v4+9OTvpo8b2
+-----END PRIVATE KEY-----
diff --git a/config/application.yml b/config/application.yml
index 03aca44..0902162 100644
--- a/config/application.yml
+++ b/config/application.yml
@@ -319,29 +319,34 @@
 
 # 鑵捐cos-sts閰嶇疆
 cos:
-  secretId: AKIDYyBCzb1FOPGx0fCXfdOwJVWM1TjqmW3N  # 鑵捐ARM鐢ㄦ埛鐨剆ecretId
-  secretKey: DD1b1LWVIvPlusAOYjnfKm150jO0NYWH  # 鑵捐ARM鐢ㄦ埛鐨剆ecretKey
+  secretId: AKID6zd07yZtwjFVVGkxvc2C5h26uTmpc9QQ  # 鑵捐ARM鐢ㄦ埛鐨剆ecretId
+  secretKey: lFTcV6RVIo43lCMFsEKAk36tRjlVzC8n  # 鑵捐ARM鐢ㄦ埛鐨剆ecretKey
   durationSeconds: 1800  # STS涓存椂璁块棶鍑瘉鏈夋晥鏈燂紝鍗曚綅绉掞紝榛樿1800s锛屼富璐﹀彿鏈�闀�2灏忔椂锛屽瓙璐﹀彿(ARM鐢ㄦ埛)36灏忔椂
-  bucket: lmk-1308069279
+  bucket: lmk-1356772813
   region: ap-chengdu
-  endpoint: https://lmk-1308069279.cos.ap-chengdu.myqcloud.com  # 璁块棶鍩熷悕
+  endpoint: https://lmk-1356772813.cos.ap-chengdu.myqcloud.com  # 璁块棶鍩熷悕
   urlExpireMinute: 360  # 棰勭鍚島rl鏈夋晥鏃堕棿(鍒嗛挓)
   actions:  # sts鐨勬潈闄�
-    - cos:ListMultipartUploads
-    - cos:GetBucket
+    - cos:GetBucketACL
     - cos:GetObject
+    - cos:GetObjectACL
     - cos:GetObjectTagging
-    - cos:GetSymlink
     - cos:HeadObject
+    - cos:ListMultipartUploads
     - cos:ListParts
     - cos:AbortMultipartUpload
     - cos:AppendObject
     - cos:CompleteMultipartUpload
+    - cos:DeleteMultipleObjects
+    - cos:DeleteObject
     - cos:InitiateMultipartUpload
     - cos:PostObject
     - cos:PutObject
-    - cos:UploadPart
-    - cos:DeleteObject
+    - cos:PutObjectACL
+    - cos:PutObjectCopy
     - cos:PutObjectTagging
+    - cos:RenameObject
+    - cos:UploadPart
+    - cos:UploadPartCopy
   resources: # 鑳芥搷浣滃摢浜涜祫婧�
-    - qcs::cos:ap-chengdu:uid/1308069279:lmk-1308069279/*
+    - qcs::cos::uid/1356772813:lmk-1356772813/*
diff --git a/framework/src/main/java/cn/lili/modules/connect/service/ConnectService.java b/framework/src/main/java/cn/lili/modules/connect/service/ConnectService.java
index 94fc569..a9356e8 100644
--- a/framework/src/main/java/cn/lili/modules/connect/service/ConnectService.java
+++ b/framework/src/main/java/cn/lili/modules/connect/service/ConnectService.java
@@ -1,5 +1,6 @@
 package cn.lili.modules.connect.service;
 
+import cn.lili.base.Result;
 import cn.lili.cache.CachePrefix;
 import cn.lili.common.security.token.Token;
 import cn.lili.modules.connect.entity.Connect;
@@ -105,4 +106,12 @@
      * @param type 骞冲彴绫诲瀷
      */
     void loginBindUser(String userId, String unionId, String type);
-}
\ No newline at end of file
+
+    /**
+     * 灏忕▼搴忛潤榛樼櫥褰�
+     *
+     * @param code
+     * @return
+     */
+    Result silentLogin(String code);
+}
diff --git a/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java b/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java
index 6758887..e270ab4 100644
--- a/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java
@@ -4,6 +4,7 @@
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import cn.lili.base.Result;
 import cn.lili.cache.Cache;
 import cn.lili.common.enums.ClientTypeEnum;
 import cn.lili.common.enums.ResultCode;
@@ -81,6 +82,8 @@
      */
     @Autowired
     private RocketmqCustomProperties rocketmqCustomProperties;
+
+    static String DEFAULT_PASSWORD = "111111";
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -243,6 +246,50 @@
         }
     }
 
+    @Override
+    public Result silentLogin(String code) {
+        JSONObject res = this.getConnect(code);
+        String unionId = res.getStr("unionid");
+        String openId = res.getStr("openid");
+        Member user = memberService.findByUUID(openId);
+        // 涓嶅瓨鍦ㄥ氨娉ㄥ唽
+        if (Objects.isNull(user)) {
+            user = new Member();
+            user.setUuId(openId);
+            user.setUsername(UuidUtils.getUUID());
+            user.setNickName("寰俊鐢ㄦ埛");
+            user.setPassword(DEFAULT_PASSWORD);
+            user.setFace("https://i.loli.net/2020/11/19/LyN6JF7zZRskdIe.png");
+            memberService.registerHandler(user);
+        }
+
+        ConnectAuthUser connectAuthUser = new ConnectAuthUser();
+        connectAuthUser.setUuid(openId);
+        connectAuthUser.setNickname(user.getNickName());
+        connectAuthUser.setAvatar(user.getFace());
+
+
+        connectAuthUser.setUsername(UuidUtils.getUUID());
+
+        connectAuthUser.setSource(ConnectEnum.WECHAT);
+        connectAuthUser.setType(ClientTypeEnum.WECHAT_MP);
+
+        AuthToken authToken = new AuthToken();
+        authToken.setUnionId(unionId);
+        connectAuthUser.setToken(authToken);
+
+        //鍙戦�佺敤鎴风涓夋柟鐧诲綍娑堟伅
+        MemberConnectLoginMessage memberConnectLoginMessage = new MemberConnectLoginMessage();
+        memberConnectLoginMessage.setMember(user);
+        memberConnectLoginMessage.setConnectAuthUser(connectAuthUser);
+        String destination =
+                rocketmqCustomProperties.getMemberTopic() + ":" + MemberTagsEnum.MEMBER_CONNECT_LOGIN.name();
+        //鍙戦�佺敤鎴风涓夋柟鐧诲綍娑堟伅
+        rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(memberConnectLoginMessage),
+                RocketmqSendCallbackBuilder.commonCallback());
+        Token token = memberTokenGenerate.createToken(user, Boolean.TRUE);
+        return Result.ok().data(token);
+    }
 
     /**
      * 绗笁鏂硅仈鍚堢櫥闄�
@@ -389,4 +436,4 @@
     }
 
 
-}
\ No newline at end of file
+}
diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java b/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java
index 029a66c..d8b663a 100644
--- a/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java
+++ b/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java
@@ -14,6 +14,8 @@
 import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
 import cn.lili.modules.goods.entity.enums.GoodsTypeEnum;
 import cn.lili.mybatis.BaseEntity;
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.xkcoding.http.util.StringUtil;
 import io.swagger.annotations.ApiModel;
@@ -87,12 +89,15 @@
     private Double grade;
 
     @ApiModelProperty(value = "缂╃暐鍥捐矾寰�")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private String thumbnail;
 
     @ApiModelProperty(value = "灏忓浘璺緞")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private String small;
 
     @ApiModelProperty(value = "鍘熷浘璺緞")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private String original;
 
     @ApiModelProperty(value = "搴楅摵鍒嗙被id")
@@ -129,6 +134,7 @@
     private String mobileIntro;
 
     @ApiModelProperty(value = "鍟嗗搧瑙嗛")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private String goodsVideo;
 
 
diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java
index 6909add..8465e1b 100644
--- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java
@@ -41,11 +41,13 @@
 import cn.lili.mybatis.util.PageUtil;
 import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
 import cn.lili.rocketmq.tags.GoodsTagsEnum;
+import cn.lili.utils.COSUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.rocketmq.spring.core.RocketMQTemplate;
@@ -121,6 +123,9 @@
     @Autowired
     private Cache<GoodsVO> cache;
 
+    @Autowired
+    private COSUtil cosUtil;
+
     @Override
     public List<Goods> getByBrandIds(List<String> brandIds) {
         LambdaQueryWrapper<Goods> lambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -172,7 +177,7 @@
         //妫�鏌ュ晢鍝�
         this.checkGoods(goods);
         //鍚慻oods鍔犲叆鍥剧墖
-        if (goodsOperationDTO.getGoodsGalleryList().size() > 0) {
+        if (goodsOperationDTO.getGoodsGalleryList()!=null&& !goodsOperationDTO.getGoodsGalleryList().isEmpty()) {
             this.setGoodsGalleryParam(goodsOperationDTO.getGoodsGalleryList().get(0), goods);
         }
         //娣诲姞鍟嗗搧鍙傛暟
@@ -201,7 +206,14 @@
         //妫�鏌ュ晢鍝佷俊鎭�
         this.checkGoods(goods);
         //鍚慻oods鍔犲叆鍥剧墖
-        this.setGoodsGalleryParam(goodsOperationDTO.getGoodsGalleryList().get(0), goods);
+        if (goodsOperationDTO.getGoodsGalleryList() != null&& !goodsOperationDTO.getGoodsGalleryList().isEmpty()) {
+            this.setGoodsGalleryParam(goodsOperationDTO.getGoodsGalleryList().get(0), goods);
+        }else {
+            goods.setOriginal(null);
+            goods.setSmall(null);
+            goods.setThumbnail(null);
+            goodsGalleryService.removeByGoodsId(goodsId);
+        }
         //娣诲姞鍟嗗搧鍙傛暟
         if (goodsOperationDTO.getGoodsParamsDTOList() != null && !goodsOperationDTO.getGoodsParamsDTOList().isEmpty()) {
             goods.setParams(JSONUtil.toJsonStr(goodsOperationDTO.getGoodsParamsDTOList()));
@@ -227,6 +239,17 @@
         //缂撳瓨鑾峰彇锛屽鏋滄病鏈夊垯璇诲彇缂撳瓨
         GoodsVO goodsVO = cache.get(CachePrefix.GOODS.getPrefix() + goodsId);
         if (goodsVO != null) {
+//            List<String> goodsGalleryList = goodsVO.getGoodsGalleryList();
+//            if (goodsGalleryList != null && !goodsGalleryList.isEmpty()) {
+//                List<String> galleryList = goodsGalleryList.stream().map(item -> {
+//                    if (StringUtils.isNotBlank(item)&&!item.contains("http")) {
+//                        return cosUtil.getPreviewUrl(item);
+//                    }else {
+//                        return item;
+//                    }
+//                }).collect(Collectors.toList());
+//                goodsVO.setGoodsGalleryList(galleryList);
+//            }
             return goodsVO;
         }
         //鏌ヨ鍟嗗搧淇℃伅
@@ -245,6 +268,12 @@
         List<GoodsGallery> galleryList = goodsGalleryService.goodsGalleryList(goodsId);
         for (GoodsGallery goodsGallery : galleryList) {
             images.add(goodsGallery.getOriginal());
+//            String original = goodsGallery.getOriginal();
+//            if (StringUtils.isNotBlank(original)&&!original.contains("http")) {
+//                images.add(cosUtil.getPreviewUrl(original));
+//            }else {
+//                images.add(goodsGallery.getOriginal());
+//            }
         }
         goodsVO.setGoodsGalleryList(images);
         //鍟嗗搧sku璧嬪��
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/KitchenType.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/KitchenType.java
new file mode 100644
index 0000000..7c22910
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/KitchenType.java
@@ -0,0 +1,33 @@
+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 lombok.Data;
+
+/**
+ * 鍘ㄧ绫诲瀷
+ *
+ * @author wp
+ * @since 2025-06-13
+ */
+@Data
+@TableName("lmk_kitchen_type")
+public class KitchenType extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("type_name")
+    /** 鍘ㄧ绫诲瀷 */
+    private String typeName;
+
+    @TableField("use_num")
+    /** 浣跨敤娆℃暟 */
+    private Long useNum;
+
+    @TableField("sort_num")
+    /** 鎺掑簭瀛楁 */
+    private Long sortNum;
+
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/KitchenVideoTypeRef.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/KitchenVideoTypeRef.java
new file mode 100644
index 0000000..b58f66e
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/KitchenVideoTypeRef.java
@@ -0,0 +1,37 @@
+package cn.lili.modules.lmk.domain.entity;
+
+import cn.lili.mybatis.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍘ㄧ瑙嗛鏍囩鍏崇郴琛�
+ *
+ * @author wp
+ * @since 2025-06-13
+ */
+@Data
+@TableName("lmk_kitchen_video_type_ref")
+public class KitchenVideoTypeRef implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId
+    @ApiModelProperty(value = "鍞竴鏍囪瘑", hidden = true)
+    private String id;
+
+    @TableField("video_id")
+    /** 瑙嗛id */
+    private String videoId;
+
+    @TableField("kitchen_type_id")
+    /** 鍘ㄧ鏍囩id */
+    private String kitchenTypeId;
+
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/Share.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/Share.java
new file mode 100644
index 0000000..84e057d
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/Share.java
@@ -0,0 +1,40 @@
+package cn.lili.modules.lmk.domain.entity;
+
+import cn.lili.mybatis.BaseIdAndDeleteEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * 鍒嗕韩璁板綍
+ *
+ * @author xp
+ * @since 2025-06-16
+ */
+@Data
+@TableName("lmk_share")
+public class Share extends BaseIdAndDeleteEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("share_type")
+    /** 鍝釜涓氬姟鐨勫垎浜� */
+    private String shareType;
+
+    @TableField("ref_id")
+    /** 涓氬姟id */
+    private String refId;
+
+    @TableField("share_user")
+    /** 鍒嗕韩浜� */
+    private String shareUser;
+
+    @TableField("share_time")
+    /** 鍒嗕韩鏃堕棿 */
+    private Date shareTime;
+
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/ShareClickRecord.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/ShareClickRecord.java
new file mode 100644
index 0000000..52c8a04
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/ShareClickRecord.java
@@ -0,0 +1,35 @@
+package cn.lili.modules.lmk.domain.entity;
+
+import cn.lili.mybatis.BaseIdAndDeleteEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 鍒嗕韩鐐瑰嚮璁板綍
+ *
+ * @author xp
+ * @since 2025-06-16
+ */
+@Data
+@TableName("lmk_share_click_record")
+public class ShareClickRecord extends BaseIdAndDeleteEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("share_id")
+    /** 鍒嗕韩id */
+    private String shareId;
+
+    @TableField("user_id")
+    /** 璋佺偣浜嗚繖涓垎浜� */
+    private String userId;
+
+    @TableField("click_time")
+    /** 鐐瑰嚮鏃堕棿 */
+    private Date clickTime;
+
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/VideoGoods.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/VideoGoods.java
new file mode 100644
index 0000000..1993606
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/VideoGoods.java
@@ -0,0 +1,45 @@
+package cn.lili.modules.lmk.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 瑙嗛鍟嗗搧涓棿琛�
+ *
+ * @author xp
+ * @since 2025-06-15
+ */
+@Data
+@TableName("lmk_video_goods")
+public class VideoGoods {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId
+    @ApiModelProperty(value = "鍞竴鏍囪瘑", hidden = true)
+    private String id;
+
+    @TableField("video_id")
+    /** 瑙嗛id */
+    private String videoId;
+
+    @TableField("goods_id")
+    /** 鍟嗗搧id */
+    private String goodsId;
+
+    @TableField("order_num")
+    /** 鎺掑簭 */
+    private Integer orderNum;
+
+    @TableField("goods_num")
+    /** 鍟嗗搧鏁伴噺 */
+    private Integer goodsNum;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "鍒犻櫎鏍囧織 true/false 鍒犻櫎/鏈垹闄�", hidden = true)
+    private Boolean deleteFlag;
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/HealthVideoForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/HealthVideoForm.java
new file mode 100644
index 0000000..d372d82
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/HealthVideoForm.java
@@ -0,0 +1,54 @@
+package cn.lili.modules.lmk.domain.form;
+
+import cn.lili.common.security.context.UserContext;
+import cn.lili.group.Add;
+import cn.lili.group.Update;
+import cn.lili.mybatis.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * 澶у仴搴疯棰戝唴瀹�
+ *
+ * @author wp
+ * @since 2025-06-12
+ */
+@Data
+@ApiModel(value = "澶у仴搴疯棰戝唴瀹�", description = "澶у仴搴疯棰戝唴瀹�")
+public class HealthVideoForm extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 浣滆�卛d */
+    @ApiModelProperty(value = "涓婚敭id")
+    private String id;
+
+    @ApiModelProperty(value = "鍥剧墖灏侀潰")
+    /** 鍥剧墖灏侀潰 */
+    @NotBlank(message = "灏侀潰鍥剧墖涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    private String coverUrl;
+
+    @TableField("video_file_key")
+    /** 瑙嗛鍦板潃 */
+    @NotBlank(message = "瑙嗛鍦板潃涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    private String videoFileKey;
+
+
+    /** 瑙嗛闀垮害(绉�) */
+//    @NotNull(message = "瑙嗛闀垮害涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    private Long videoDuration;
+
+    /** 瑙嗛鏍囬 */
+    @NotBlank(message = "鏍囬涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    private String title;
+
+
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenTypeForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenTypeForm.java
new file mode 100644
index 0000000..3887943
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenTypeForm.java
@@ -0,0 +1,45 @@
+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.KitchenType;
+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 wp
+ * @since 2025-06-13
+ */
+@Data
+@ApiModel(value = "KitchenType琛ㄥ崟", description = "鍘ㄧ绫诲瀷琛ㄥ崟")
+public class KitchenTypeForm extends AbsForm {
+
+    @NotBlank(message = "鍘ㄧ绫诲瀷涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍘ㄧ绫诲瀷")
+    private String typeName;
+
+    @ApiModelProperty("浣跨敤娆℃暟")
+    private Long useNum;
+
+    @NotNull(message = "鎺掑簭瀛楁涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鎺掑簭瀛楁")
+    private Long sortNum;
+
+    public static KitchenType getEntityByForm(@NonNull KitchenTypeForm form, KitchenType entity) {
+        if(entity == null) {
+          entity = new KitchenType();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenVideoForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenVideoForm.java
new file mode 100644
index 0000000..cb7906c
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenVideoForm.java
@@ -0,0 +1,59 @@
+package cn.lili.modules.lmk.domain.form;
+
+import cn.lili.group.Add;
+import cn.lili.group.Update;
+import cn.lili.mybatis.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.Size;
+import java.util.List;
+
+/**
+ * 鍘ㄧ瑙嗛鍙戝竷
+ *
+ * @author wp
+ * @since 2025-06-12
+ */
+@Data
+@ApiModel(value = "鍘ㄧ瑙嗛鍙戝竷", description = "鍘ㄧ瑙嗛鍙戝竷")
+public class KitchenVideoForm extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 浣滆�卛d */
+    @ApiModelProperty(value = "涓婚敭id")
+    private String id;
+
+    @ApiModelProperty(value = "鍥剧墖灏侀潰")
+    /** 鍥剧墖灏侀潰 */
+    @NotBlank(message = "灏侀潰鍥剧墖涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    private String coverUrl;
+
+    @TableField("video_file_key")
+    /** 瑙嗛鍦板潃 */
+    @NotBlank(message = "瑙嗛鍦板潃涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    private String videoFileKey;
+
+
+    /** 瑙嗛闀垮害(绉�) */
+//    @NotNull(message = "瑙嗛闀垮害涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    private Long videoDuration;
+
+    /** 瑙嗛鏍囬 */
+    @NotBlank(message = "鏍囬涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    private String title;
+
+    /** 鏍囩鍒楄〃 */
+    @Size(min = 1,max = 5, message = "鏍囩鍒楄〃涓嶈兘涓虹┖",groups = {Add.class, Update.class})
+    private List<String> checkKitchenType;
+
+
+
+
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenVideoTypeRefForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenVideoTypeRefForm.java
new file mode 100644
index 0000000..5f33b2c
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/KitchenVideoTypeRefForm.java
@@ -0,0 +1,42 @@
+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.KitchenVideoTypeRef;
+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 wp
+ * @since 2025-06-13
+ */
+@Data
+@ApiModel(value = "KitchenVideoTypeRef琛ㄥ崟", description = "鍘ㄧ瑙嗛鏍囩鍏崇郴琛ㄨ〃鍗�")
+public class KitchenVideoTypeRefForm extends AbsForm {
+
+    @NotBlank(message = "瑙嗛id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("瑙嗛id")
+    private String videoId;
+
+    @NotBlank(message = "鍘ㄧ鏍囩id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍘ㄧ鏍囩id")
+    private String kitchenTypeId;
+
+    public static KitchenVideoTypeRef getEntityByForm(@NonNull KitchenVideoTypeRefForm form, KitchenVideoTypeRef entity) {
+        if(entity == null) {
+          entity = new KitchenVideoTypeRef();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/ShareClickRecordForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/ShareClickRecordForm.java
new file mode 100644
index 0000000..2c17163
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/ShareClickRecordForm.java
@@ -0,0 +1,42 @@
+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.ShareClickRecord;
+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 xp
+ * @since 2025-06-16
+ */
+@Data
+@ApiModel(value = "ShareClickRecord琛ㄥ崟", description = "鍒嗕韩鐐瑰嚮璁板綍琛ㄥ崟")
+public class ShareClickRecordForm extends AbsForm {
+
+    @NotBlank(message = "涓氬姟id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓氬姟id")
+    private String refId;
+
+    @NotBlank(message = "鍒嗕韩浜轰笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍒嗕韩浜篿d")
+    private String shareUserId;
+
+    public static ShareClickRecord getEntityByForm(@NonNull ShareClickRecordForm form, ShareClickRecord entity) {
+        if(entity == null) {
+          entity = new ShareClickRecord();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/ShareForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/ShareForm.java
new file mode 100644
index 0000000..5eca51f
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/ShareForm.java
@@ -0,0 +1,49 @@
+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.Share;
+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 xp
+ * @since 2025-06-16
+ */
+@Data
+@ApiModel(value = "Share琛ㄥ崟", description = "鍒嗕韩璁板綍琛ㄥ崟")
+public class ShareForm extends AbsForm {
+
+    @NotBlank(message = "涓氬姟绫诲瀷涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍝釜涓氬姟鐨勫垎浜�")
+    private String shareType;
+
+    @NotBlank(message = "涓氬姟id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓氬姟id")
+    private String refId;
+
+    @NotBlank(message = "鍒嗕韩浜轰笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍒嗕韩浜�")
+    private String shareUser;
+
+    @ApiModelProperty("鍒嗕韩鏃堕棿")
+    private Date shareTime;
+
+    public static Share getEntityByForm(@NonNull ShareForm form, Share entity) {
+        if(entity == null) {
+          entity = new Share();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/WxVideoForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/WxVideoForm.java
index ab5fce0..4ef60fe 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/form/WxVideoForm.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/WxVideoForm.java
@@ -4,11 +4,12 @@
 import cn.lili.group.Add;
 import cn.lili.base.AbsForm;
 import cn.lili.modules.lmk.domain.entity.Video;
-import org.hibernate.validator.constraints.Length;
+import cn.lili.modules.lmk.domain.vo.VideoGoodsPublishVO;
 import org.springframework.beans.BeanUtils;
 
 import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
 
 import org.springframework.lang.NonNull;
 import io.swagger.annotations.ApiModel;
@@ -49,12 +50,12 @@
     private List<String> videoImgs;
 
     @ApiModelProperty("瑙嗛鏍囩")
-    @Length(max = 5, message = "鏈�澶氬彧鑳芥坊鍔犱簲涓爣绛�")
+    @Size(max = 5, message = "鏈�澶氬彧鑳芥坊鍔犱簲涓爣绛�", groups = {Add.class, Update.class})
     private List<WxVideoTagForm> tags = new ArrayList<>(2);
 
 //    @NotBlank(message = "鍟嗗搧id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
-    @ApiModelProperty("鍟嗗搧id")
-    private String goodsId;
+    @ApiModelProperty("鍟嗗搧鍒楄〃")
+    private List<VideoGoodsPublishVO> goodsList;
 
     @ApiModelProperty("瑙嗛濉厖妯″紡")
     private String videoFit;
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/HealthVideoQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/HealthVideoQuery.java
new file mode 100644
index 0000000..47b29b2
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/HealthVideoQuery.java
@@ -0,0 +1,39 @@
+package cn.lili.modules.lmk.domain.query;
+
+import cn.lili.base.AbsQuery;
+import cn.lili.modules.lmk.enums.general.VideoTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 瑙嗛鍐呭鏌ヨ
+ *
+ * @author xp
+ * @since 2025-05-16
+ */
+@Data
+@ApiModel(value = "骞冲彴绔疺ideo鏌ヨ鍙傛暟", description = "瑙嗛鍐呭鏌ヨ鍙傛暟")
+public class HealthVideoQuery extends AbsQuery {
+
+    @ApiModelProperty("鏍囬")
+    private String title;
+
+    @ApiModelProperty("瑙嗛鏍囩")
+    private List<String> tagList;
+
+    @ApiModelProperty("浣滆��")
+    private String authorId;
+
+    @ApiModelProperty("鐘舵��")
+    private String status;
+
+    /**
+     * @see VideoTypeEnum
+     */
+    @ApiModelProperty("瑙嗛绫诲瀷锛氳棰戙�佸ぇ鍋ュ悍銆佺鍘紝榛樿涓嶄紶鏌ヨ棰�")
+    private String videoType = VideoTypeEnum.HEALTH.getValue();
+}
+
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenTypeQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenTypeQuery.java
new file mode 100644
index 0000000..678b28c
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenTypeQuery.java
@@ -0,0 +1,24 @@
+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 wp
+ * @since 2025-06-13
+ */
+@Data
+@ApiModel(value = "KitchenType鏌ヨ鍙傛暟", description = "鍘ㄧ绫诲瀷鏌ヨ鍙傛暟")
+public class KitchenTypeQuery extends AbsQuery {
+    @ApiModelProperty("鏍囩鍚嶇О")
+    private String typeName;
+}
+
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenVideoQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenVideoQuery.java
new file mode 100644
index 0000000..f48ba62
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenVideoQuery.java
@@ -0,0 +1,39 @@
+package cn.lili.modules.lmk.domain.query;
+
+import cn.lili.base.AbsQuery;
+import cn.lili.modules.lmk.enums.general.VideoTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 瑙嗛鍐呭鏌ヨ
+ *
+ * @author xp
+ * @since 2025-05-16
+ */
+@Data
+@ApiModel(value = "骞冲彴绔帹绁濾ideo鏌ヨ鍙傛暟", description = "瑙嗛鍐呭鏌ヨ鍙傛暟")
+public class KitchenVideoQuery extends AbsQuery {
+
+    @ApiModelProperty("鏍囬")
+    private String title;
+
+    @ApiModelProperty("瑙嗛鏍囩")
+    private List<String> typeList;
+
+    @ApiModelProperty("浣滆��")
+    private String authorId;
+
+    @ApiModelProperty("鐘舵��")
+    private String status;
+
+    /**
+     * @see VideoTypeEnum
+     */
+    @ApiModelProperty("瑙嗛绫诲瀷锛氳棰戙�佸ぇ鍋ュ悍銆佺鍘紝榛樿涓嶄紶鏌ヨ棰�")
+    private String videoType = VideoTypeEnum.COOK.getValue();
+}
+
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenVideoTypeRefQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenVideoTypeRefQuery.java
new file mode 100644
index 0000000..e8cbb92
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/KitchenVideoTypeRefQuery.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 wp
+ * @since 2025-06-13
+ */
+@Data
+@ApiModel(value = "KitchenVideoTypeRef鏌ヨ鍙傛暟", description = "鍘ㄧ瑙嗛鏍囩鍏崇郴琛ㄦ煡璇㈠弬鏁�")
+public class KitchenVideoTypeRefQuery extends AbsQuery {
+}
+
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/ShareClickRecordQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/ShareClickRecordQuery.java
new file mode 100644
index 0000000..9b1a36c
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/ShareClickRecordQuery.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 xp
+ * @since 2025-06-16
+ */
+@Data
+@ApiModel(value = "ShareClickRecord鏌ヨ鍙傛暟", description = "鍒嗕韩鐐瑰嚮璁板綍鏌ヨ鍙傛暟")
+public class ShareClickRecordQuery extends AbsQuery {
+}
+
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/ShareQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/ShareQuery.java
new file mode 100644
index 0000000..4f0d067
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/ShareQuery.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 xp
+ * @since 2025-06-16
+ */
+@Data
+@ApiModel(value = "Share鏌ヨ鍙傛暟", description = "鍒嗕韩璁板綍鏌ヨ鍙傛暟")
+public class ShareQuery extends AbsQuery {
+}
+
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoGoodsEsQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoGoodsEsQuery.java
new file mode 100644
index 0000000..96d18e9
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoGoodsEsQuery.java
@@ -0,0 +1,28 @@
+package cn.lili.modules.lmk.domain.query;
+
+import cn.lili.base.AbsQuery;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍙戝竷瑙嗛鏃讹紝鍏宠仈鍟嗗搧鐨勬煡璇�
+ *
+ * @author锛歺p
+ * @date锛�2025/6/13 10:04
+ */
+@Data
+@ApiModel("鍙戝竷瑙嗛鏃讹紝鍏宠仈鍟嗗搧鐨勬煡璇�")
+public class VideoGoodsEsQuery {
+
+    @ApiModelProperty("鎼滅储鍏抽敭璇�")
+    private String keyword;
+
+    @ApiModelProperty("鏌ヨ嚜瀹跺簵閾虹殑鍟嗗搧")
+    private Boolean searchFromSelfStore;
+
+
+    private int pageNumber;
+
+    private int pageSize;
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/WxHealthVideoQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/WxHealthVideoQuery.java
new file mode 100644
index 0000000..dc2111f
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/WxHealthVideoQuery.java
@@ -0,0 +1,25 @@
+package cn.lili.modules.lmk.domain.query;
+
+import cn.lili.base.AbsQuery;
+import cn.lili.modules.lmk.enums.general.VideoTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 寰俊灏忕▼搴忓ぇ鍋ュ悍鏌ヨ鍙傛暟
+ *
+ * @author wp
+ * @since 2025-05-16
+ */
+@Data
+@ApiModel(value = "寰俊灏忕▼搴忓ぇ鍋ュ悍鏌ヨ鍙傛暟", description = "寰俊灏忕▼搴忓ぇ鍋ュ悍鏌ヨ鍙傛暟")
+public class WxHealthVideoQuery extends AbsQuery {
+
+    /**
+     * @see VideoTypeEnum
+     */
+    @ApiModelProperty("瑙嗛绫诲瀷锛氳棰戙�佸ぇ鍋ュ悍銆佺鍘紝榛樿涓嶄紶鏌ヨ棰�")
+    private String videoType = VideoTypeEnum.HEALTH.getValue();
+}
+
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenTypeVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenTypeVO.java
new file mode 100644
index 0000000..a56c395
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenTypeVO.java
@@ -0,0 +1,43 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import cn.lili.base.AbsVo;
+import cn.lili.modules.lmk.domain.entity.KitchenType;
+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 wp
+ * @since 2025-06-13
+ */
+@Data
+@ApiModel(value = "鍘ㄧ绫诲瀷鍝嶅簲鏁版嵁", description = "鍘ㄧ绫诲瀷鍝嶅簲鏁版嵁")
+public class KitchenTypeVO extends AbsVo {
+
+    /** 鍘ㄧ绫诲瀷 */
+    @ApiModelProperty("鍘ㄧ绫诲瀷")
+    private String typeName;
+
+    /** 浣跨敤娆℃暟 */
+    @ApiModelProperty("浣跨敤娆℃暟")
+    private Long useNum;
+
+    /** 鎺掑簭瀛楁 */
+    @ApiModelProperty("鎺掑簭瀛楁")
+    private Long sortNum;
+
+    public static KitchenTypeVO getVoByEntity(@NonNull KitchenType entity, KitchenTypeVO vo) {
+        if(vo == null) {
+            vo = new KitchenTypeVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoTypeRefVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoTypeRefVO.java
new file mode 100644
index 0000000..b8295a9
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoTypeRefVO.java
@@ -0,0 +1,39 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import cn.lili.base.AbsVo;
+import cn.lili.modules.lmk.domain.entity.KitchenVideoTypeRef;
+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 wp
+ * @since 2025-06-13
+ */
+@Data
+@ApiModel(value = "鍘ㄧ瑙嗛鏍囩鍏崇郴琛ㄥ搷搴旀暟鎹�", description = "鍘ㄧ瑙嗛鏍囩鍏崇郴琛ㄥ搷搴旀暟鎹�")
+public class KitchenVideoTypeRefVO extends AbsVo {
+
+    /** 瑙嗛id */
+    @ApiModelProperty("瑙嗛id")
+    private String videoId;
+
+    /** 鍘ㄧ鏍囩id */
+    @ApiModelProperty("鍘ㄧ鏍囩id")
+    private String kitchenTypeId;
+
+    public static KitchenVideoTypeRefVO getVoByEntity(@NonNull KitchenVideoTypeRef entity, KitchenVideoTypeRefVO vo) {
+        if(vo == null) {
+            vo = new KitchenVideoTypeRefVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoTypeVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoTypeVO.java
new file mode 100644
index 0000000..fbfd923
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoTypeVO.java
@@ -0,0 +1,34 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import cn.lili.base.AbsVo;
+import cn.lili.modules.lmk.domain.entity.KitchenVideoTypeRef;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+/**
+ * 鍘ㄧ瑙嗛鏍囩鍏崇郴琛ㄥ睍绀�
+ *
+ * @author wp
+ * @since 2025-06-13
+ */
+@Data
+@ApiModel(value = "鍘ㄧ瑙嗛鏍囩鍏崇郴琛ㄥ搷搴旀暟鎹�", description = "鍘ㄧ瑙嗛鏍囩鍏崇郴琛ㄥ搷搴旀暟鎹�")
+public class KitchenVideoTypeVO extends AbsVo {
+
+    /** 瑙嗛id */
+    @ApiModelProperty("瑙嗛id")
+    private String videoId;
+
+    /** 鍒嗙被id */
+    @ApiModelProperty("鍒嗙被id")
+    private String id;
+
+    /** 鍒嗙被鍚嶇О */
+    @ApiModelProperty("鍒嗙被鍚嶇О")
+    private String typeName;
+
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoVO.java
new file mode 100644
index 0000000..2c436fc
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoVO.java
@@ -0,0 +1,116 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import cn.lili.base.AbsVo;
+import cn.lili.modules.lmk.domain.entity.Video;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 瑙嗛鍐呭灞曠ず
+ *
+ * @author xp
+ * @since 2025-05-16
+ */
+@Data
+@ApiModel(value = "瑙嗛鍐呭鍝嶅簲鏁版嵁", description = "瑙嗛鍐呭鍝嶅簲鏁版嵁")
+public class KitchenVideoVO extends AbsVo {
+
+    /** 浣滆�卛d */
+    @ApiModelProperty("浣滆�卛d")
+    private String authorId;
+    private String authorName;
+
+    /** 鍥剧墖灏侀潰 */
+    @ApiModelProperty("鍥剧墖灏侀潰")
+    private String coverUrl;
+
+    /** 灏侀潰鏄剧ず鍦板潃 */
+    @ApiModelProperty("灏侀潰鏄剧ず鍦板潃")
+    private String coverShowUrl;
+
+    /** 瑙嗛鍦板潃 */
+    @ApiModelProperty("瑙嗛鍦板潃")
+    private String videoFileKey;
+    private String videoUrl;
+
+    @ApiModelProperty("瑙嗛鏍囩")
+    private List<KitchenVideoTypeVO> typeList;
+
+    @ApiModelProperty("瑙嗛鍐呭绫诲瀷锛氳棰戙�佸浘鐗�")
+    private String videoContentType;
+
+    @ApiModelProperty("瑙嗛绫诲瀷锛氳棰戙�佸ぇ鍋ュ悍銆佺鍘�")
+    private String videoType;
+
+    @ApiModelProperty(value = "鍥剧墖鍒楄〃锛宩son鏁扮粍", hidden = true)
+    private String videoImgs;
+
+    @ApiModelProperty("鍥剧墖鍒楄〃")
+    private List<String> imgs;
+
+    /** 瑙嗛濉厖妯″紡 */
+    @ApiModelProperty("瑙嗛濉厖妯″紡")
+    private String videoFit;
+
+    @ApiModelProperty("瑙嗛闀垮害锛氱")
+    private Long videoDuration;
+
+    /** 瑙嗛鏍囬 */
+    @ApiModelProperty("瑙嗛鏍囬")
+    private String title;
+
+    /** 鍟嗗搧id */
+    @ApiModelProperty("鍟嗗搧id")
+    private String goodsId;
+
+    /** 鍟嗗搧鏌ョ湅娆℃暟 */
+    @ApiModelProperty("鍟嗗搧鏌ョ湅娆℃暟")
+    private Long goodsViewNum;
+
+    /** 鍟嗗搧涓嬪崟娆℃暟 */
+    @ApiModelProperty("鍟嗗搧涓嬪崟娆℃暟")
+    private Long goodsOrderNum;
+
+    /** 鏄惁鎺ㄨ崘 */
+    @ApiModelProperty("鏄惁鎺ㄨ崘")
+    private Boolean recommend;
+
+    /** 鐘舵�� */
+    @ApiModelProperty("鐘舵��")
+    private String status;
+
+    /** 鎾斁閲� */
+    @ApiModelProperty("鎾斁閲�")
+    private Long playNum;
+
+    /** 鏀惰棌鏁� */
+    @ApiModelProperty("鏀惰棌鏁�")
+    private Long collectNum;
+
+    /** 璇勮鏁� */
+    @ApiModelProperty("璇勮鏁�")
+    private Long commentNum;
+
+    /** 鏉冮噸 */
+    @ApiModelProperty("鏉冮噸")
+    private double weight;
+
+    /** 瀹℃牳閫氳繃鏃堕棿 */
+    @ApiModelProperty("瀹℃牳閫氳繃鏃堕棿")
+    private Date auditPassTime;
+
+    public static KitchenVideoVO getVoByEntity(@NonNull Video entity, KitchenVideoVO vo) {
+        if(vo == null) {
+            vo = new KitchenVideoVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/ShareClickRecordVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/ShareClickRecordVO.java
new file mode 100644
index 0000000..bcfea1b
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/ShareClickRecordVO.java
@@ -0,0 +1,43 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import cn.lili.base.AbsVo;
+import cn.lili.modules.lmk.domain.entity.ShareClickRecord;
+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 xp
+ * @since 2025-06-16
+ */
+@Data
+@ApiModel(value = "鍒嗕韩鐐瑰嚮璁板綍鍝嶅簲鏁版嵁", description = "鍒嗕韩鐐瑰嚮璁板綍鍝嶅簲鏁版嵁")
+public class ShareClickRecordVO extends AbsVo {
+
+    /** 鍒嗕韩id */
+    @ApiModelProperty("鍒嗕韩id")
+    private String shareId;
+
+    /** 璋佺偣浜嗚繖涓垎浜� */
+    @ApiModelProperty("璋佺偣浜嗚繖涓垎浜�")
+    private String userId;
+
+    /** 鐐瑰嚮鏃堕棿 */
+    @ApiModelProperty("鐐瑰嚮鏃堕棿")
+    private Date clickTime;
+
+    public static ShareClickRecordVO getVoByEntity(@NonNull ShareClickRecord entity, ShareClickRecordVO vo) {
+        if(vo == null) {
+            vo = new ShareClickRecordVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/ShareVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/ShareVO.java
new file mode 100644
index 0000000..0efdae6
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/ShareVO.java
@@ -0,0 +1,47 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import cn.lili.base.AbsVo;
+import cn.lili.modules.lmk.domain.entity.Share;
+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 xp
+ * @since 2025-06-16
+ */
+@Data
+@ApiModel(value = "鍒嗕韩璁板綍鍝嶅簲鏁版嵁", description = "鍒嗕韩璁板綍鍝嶅簲鏁版嵁")
+public class ShareVO extends AbsVo {
+
+    /** 鍝釜涓氬姟鐨勫垎浜� */
+    @ApiModelProperty("鍝釜涓氬姟鐨勫垎浜�")
+    private String shareType;
+
+    /** 涓氬姟id */
+    @ApiModelProperty("涓氬姟id")
+    private String refId;
+
+    /** 鍒嗕韩浜� */
+    @ApiModelProperty("鍒嗕韩浜�")
+    private String shareUser;
+
+    /** 鍒嗕韩鏃堕棿 */
+    @ApiModelProperty("鍒嗕韩鏃堕棿")
+    private Date shareTime;
+
+    public static ShareVO getVoByEntity(@NonNull Share entity, ShareVO vo) {
+        if(vo == null) {
+            vo = new ShareVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoGoodsDetailVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoGoodsDetailVO.java
new file mode 100644
index 0000000..e765747
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoGoodsDetailVO.java
@@ -0,0 +1,30 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import cn.lili.base.AbsVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author锛歺p
+ * @date锛�2025/6/16 9:11
+ */
+@Data
+@ApiModel("瑙嗛鍟嗗搧璇︽儏")
+public class VideoGoodsDetailVO {
+
+    @ApiModelProperty("鍟嗗搧id")
+    private String goodsId;
+
+    @ApiModelProperty("鍟嗗搧鍚嶇О")
+    private String goodsName;
+
+    @ApiModelProperty("浠锋牸")
+    private String price;
+
+    @ApiModelProperty("缂╃暐鍥�")
+    private String thumbnail;
+
+    @ApiModelProperty("鍟嗗搧鏁伴噺")
+    private Integer goodsNum;
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoGoodsPublishVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoGoodsPublishVO.java
new file mode 100644
index 0000000..3d970f2
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoGoodsPublishVO.java
@@ -0,0 +1,21 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author锛歺p
+ * @date锛�2025/6/15 19:10
+ */
+@Data
+@ApiModel("鍙戝竷瑙嗛-鍟嗗搧淇℃伅")
+public class VideoGoodsPublishVO {
+
+    @ApiModelProperty("鍟嗗搧id")
+    private String goodsId;
+
+    @ApiModelProperty("鍟嗗搧鏁伴噺")
+    private Integer goodsNum;
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoVO.java
index fae271e..0fc6690 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoVO.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoVO.java
@@ -30,6 +30,10 @@
     @ApiModelProperty("鍥剧墖灏侀潰")
     private String coverUrl;
 
+    /** 灏侀潰鏄剧ず鍦板潃 */
+    @ApiModelProperty("灏侀潰鏄剧ず鍦板潃")
+    private String coverShowUrl;
+
     /** 瑙嗛鍦板潃 */
     @ApiModelProperty("瑙嗛鍦板潃")
     private String videoFileKey;
@@ -63,15 +67,7 @@
 
     /** 鍟嗗搧id */
     @ApiModelProperty("鍟嗗搧id")
-    private String goodsId;
-
-    /** 鍟嗗搧鏌ョ湅娆℃暟 */
-    @ApiModelProperty("鍟嗗搧鏌ョ湅娆℃暟")
-    private Long goodsViewNum;
-
-    /** 鍟嗗搧涓嬪崟娆℃暟 */
-    @ApiModelProperty("鍟嗗搧涓嬪崟娆℃暟")
-    private Long goodsOrderNum;
+    private List<VideoGoodsDetailVO> goodsList;
 
     /** 鏄惁鎺ㄨ崘 */
     @ApiModelProperty("鏄惁鎺ㄨ崘")
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxEditVideoVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxEditVideoVO.java
index 1c74bc9..943f81e 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxEditVideoVO.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxEditVideoVO.java
@@ -35,6 +35,18 @@
     @ApiModelProperty("瑙嗛鏍囩")
     private List<WxVideoTagForm> tags;
 
+    @ApiModelProperty("鍥鹃泦-json鏁扮粍")
+    private String videoImgs;
+
+    @ApiModelProperty("鍥鹃泦")
+    private List<String> imgs;
+
+    /**
+     * @see cn.lili.modules.lmk.enums.general.VideoContentTypeEnum
+     */
+    @ApiModelProperty("瑙嗛鍐呭绫诲瀷锛氳棰戙�佸浘鐗�")
+    private String videoContentType;
+
     /** 瑙嗛濉厖妯″紡 */
     @ApiModelProperty("瑙嗛濉厖妯″紡")
     private String videoFit;
@@ -45,7 +57,7 @@
 
     /** 鍟嗗搧淇℃伅 */
     @ApiModelProperty("鍟嗗搧淇℃伅")
-    private String goodsId;
+    private List<VideoGoodsDetailVO> goodsList;
 
     @ApiModelProperty("瑙嗛闀垮害锛氱")
     private Long videoDuration;
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoTagVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoTagVO.java
new file mode 100644
index 0000000..c8bc182
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoTagVO.java
@@ -0,0 +1,36 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import cn.lili.base.AbsVo;
+import cn.lili.modules.lmk.domain.entity.VideoTag;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+/**
+ * 瑙嗛鏍囩灞曠ず
+ *
+ * @author xp
+ * @since 2025-05-13
+ */
+@Data
+@ApiModel(value = "瑙嗛鏍囩鍝嶅簲鏁版嵁", description = "瑙嗛鏍囩鍝嶅簲鏁版嵁")
+public class WxVideoTagVO  {
+
+    private String id;
+
+    /** 鏍囩鍚嶇О */
+    @ApiModelProperty("鏍囩鍚嶇О")
+    private String tagName;
+
+
+    public static WxVideoTagVO getVoByEntity(@NonNull VideoTag entity, WxVideoTagVO vo) {
+        if(vo == null) {
+            vo = new WxVideoTagVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java
index 179415f..827efa3 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java
@@ -63,6 +63,9 @@
     @ApiModelProperty("瑙嗛鏍囩")
     private List<SimpleVideoTagVO> tagList;
 
+    @ApiModelProperty("瑙嗛鏃堕暱锛氱")
+    private Long videoDuration;
+
     /** 瑙嗛濉厖妯″紡 */
     @ApiModelProperty("瑙嗛濉厖妯″紡")
     private String videoFit;
@@ -73,7 +76,7 @@
 
     /** 鍟嗗搧淇℃伅 */
     @ApiModelProperty("鍟嗗搧淇℃伅")
-    private VideoGoodsVO goods;
+    private List<VideoGoodsDetailVO> goodsList;
 
     @ApiModelProperty("褰撳墠鐢ㄦ埛鏄惁鏀惰棌浜嗚瑙嗛")
     private Boolean collected = Boolean.FALSE;
diff --git a/framework/src/main/java/cn/lili/modules/lmk/enums/general/VideoSupportOpEnum.java b/framework/src/main/java/cn/lili/modules/lmk/enums/general/VideoSupportOpEnum.java
index a339215..36a9b22 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/enums/general/VideoSupportOpEnum.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/enums/general/VideoSupportOpEnum.java
@@ -17,7 +17,7 @@
 @Getter
 public enum VideoSupportOpEnum {
 
-    UP("UP", "鍙戝竷"),
+//    UP("UP", "鍙戝竷"),
     DOWN("DOWN", "涓嬫灦"),
     DELETE("DELETE", "鍒犻櫎"),
     EDIT("EDIT", "缂栬緫"),
@@ -43,7 +43,7 @@
         if (VideoStatusEnum.AUDITING.getValue().equals(status)) {
             return Arrays.asList(new VideoOption(EDIT.value, EDIT.desc), new VideoOption(DELETE.value, DELETE.desc));
         } else if (VideoStatusEnum.DISABLE.getValue().equals(status)) {
-            return Arrays.asList(new VideoOption(EDIT.value, EDIT.desc), new VideoOption(UP.value, UP.desc), new VideoOption(DELETE.value, DELETE.desc));
+            return Arrays.asList(new VideoOption(EDIT.value, EDIT.desc), new VideoOption(DELETE.value, DELETE.desc));
         } else if (VideoStatusEnum.PUBLISHED.getValue().equals(status)) {
             return Arrays.asList(new VideoOption(EDIT.value, EDIT.desc), new VideoOption(DOWN.value, DOWN.desc), new VideoOption(DELETE.value, DELETE.desc));
         } else if (VideoStatusEnum.REJECT.getValue().equals(status)) {
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/KitchenTypeMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/KitchenTypeMapper.java
new file mode 100644
index 0000000..199b8c8
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/KitchenTypeMapper.java
@@ -0,0 +1,34 @@
+package cn.lili.modules.lmk.mapper;
+
+import cn.lili.modules.lmk.domain.entity.KitchenType;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import cn.lili.modules.lmk.domain.vo.KitchenTypeVO;
+import cn.lili.modules.lmk.domain.form.KitchenTypeForm;
+import cn.lili.modules.lmk.domain.query.KitchenTypeQuery;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鍘ㄧ绫诲瀷 Mapper 鎺ュ彛
+ *
+ * @author wp
+ * @since 2025-06-13
+ */
+@Mapper
+public interface KitchenTypeMapper extends BaseMapper<KitchenType> {
+
+    /**
+     * id鏌ユ壘鍘ㄧ绫诲瀷
+     * @param id
+     * @return
+     */
+    KitchenTypeVO getById(String id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") KitchenTypeQuery query);
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/KitchenVideoTypeRefMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/KitchenVideoTypeRefMapper.java
new file mode 100644
index 0000000..c6157e8
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/KitchenVideoTypeRefMapper.java
@@ -0,0 +1,37 @@
+package cn.lili.modules.lmk.mapper;
+
+import cn.lili.modules.lmk.domain.entity.KitchenVideoTypeRef;
+import cn.lili.modules.lmk.domain.vo.KitchenVideoTypeVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import cn.lili.modules.lmk.domain.vo.KitchenVideoTypeRefVO;
+import cn.lili.modules.lmk.domain.form.KitchenVideoTypeRefForm;
+import cn.lili.modules.lmk.domain.query.KitchenVideoTypeRefQuery;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鍘ㄧ瑙嗛鏍囩鍏崇郴琛� Mapper 鎺ュ彛
+ *
+ * @author wp
+ * @since 2025-06-13
+ */
+@Mapper
+public interface KitchenVideoTypeRefMapper extends BaseMapper<KitchenVideoTypeRef> {
+
+    /**
+     * id鏌ユ壘鍘ㄧ瑙嗛鏍囩鍏崇郴琛�
+     * @param id
+     * @return
+     */
+    KitchenVideoTypeRefVO getById(String id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") KitchenVideoTypeRefQuery query);
+
+    List<KitchenVideoTypeVO> getTypeByVideoIds(@Param("videoIds") List<String> videoIds);
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/ShareClickRecordMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/ShareClickRecordMapper.java
new file mode 100644
index 0000000..88772b7
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/ShareClickRecordMapper.java
@@ -0,0 +1,34 @@
+package cn.lili.modules.lmk.mapper;
+
+import cn.lili.modules.lmk.domain.entity.ShareClickRecord;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import cn.lili.modules.lmk.domain.vo.ShareClickRecordVO;
+import cn.lili.modules.lmk.domain.form.ShareClickRecordForm;
+import cn.lili.modules.lmk.domain.query.ShareClickRecordQuery;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鍒嗕韩鐐瑰嚮璁板綍 Mapper 鎺ュ彛
+ *
+ * @author xp
+ * @since 2025-06-16
+ */
+@Mapper
+public interface ShareClickRecordMapper extends BaseMapper<ShareClickRecord> {
+
+    /**
+     * id鏌ユ壘鍒嗕韩鐐瑰嚮璁板綍
+     * @param id
+     * @return
+     */
+    ShareClickRecordVO getById(String id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") ShareClickRecordQuery query);
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/ShareMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/ShareMapper.java
new file mode 100644
index 0000000..932837b
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/ShareMapper.java
@@ -0,0 +1,34 @@
+package cn.lili.modules.lmk.mapper;
+
+import cn.lili.modules.lmk.domain.entity.Share;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import cn.lili.modules.lmk.domain.vo.ShareVO;
+import cn.lili.modules.lmk.domain.form.ShareForm;
+import cn.lili.modules.lmk.domain.query.ShareQuery;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鍒嗕韩璁板綍 Mapper 鎺ュ彛
+ *
+ * @author xp
+ * @since 2025-06-16
+ */
+@Mapper
+public interface ShareMapper extends BaseMapper<Share> {
+
+    /**
+     * id鏌ユ壘鍒嗕韩璁板綍
+     * @param id
+     * @return
+     */
+    ShareVO getById(String id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") ShareQuery query);
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoGoodsMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoGoodsMapper.java
new file mode 100644
index 0000000..8143ad6
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoGoodsMapper.java
@@ -0,0 +1,17 @@
+package cn.lili.modules.lmk.mapper;
+
+import cn.lili.modules.lmk.domain.entity.VideoGoods;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 瑙嗛鍟嗗搧涓棿琛� Mapper 鎺ュ彛
+ *
+ * @author xp
+ * @since 2025-06-15
+ */
+@Mapper
+public interface VideoGoodsMapper extends BaseMapper<VideoGoods> {
+
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java
index 4b2675f..a7396bd 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java
@@ -1,13 +1,8 @@
 package cn.lili.modules.lmk.mapper;
 
 import cn.lili.modules.lmk.domain.entity.Video;
-import cn.lili.modules.lmk.domain.query.AuthorVideoQuery;
-import cn.lili.modules.lmk.domain.query.ManagerVideoQuery;
-import cn.lili.modules.lmk.domain.query.VideoQuery;
-import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO;
-import cn.lili.modules.lmk.domain.vo.VideoAccountVO;
-import cn.lili.modules.lmk.domain.vo.VideoVO;
-import cn.lili.modules.lmk.domain.vo.WxEditVideoVO;
+import cn.lili.modules.lmk.domain.query.*;
+import cn.lili.modules.lmk.domain.vo.*;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Mapper;
@@ -50,6 +45,8 @@
      * @return
      */
     IPage recommendVideo(IPage page, @Param("query") VideoQuery query);
+
+    IPage recommendHealthVideo(IPage page, @Param("query") WxHealthVideoQuery query);
 
     /**
      * 鎵归噺鏇存柊瑙嗛鏀惰棌鏁伴噺
@@ -112,4 +109,22 @@
      * @return
      */
     WxEditVideoVO wxDetail(@Param("id") String id);
+
+    /**
+     * 澶у仴搴疯棰戝垎椤�
+     *
+     * @param page
+     * @param query
+     */
+    IPage healthPage(IPage page, @Param("query") HealthVideoQuery query);
+
+    IPage kitchenPage(IPage page, @Param("query") KitchenVideoQuery query);
+
+    /**
+     * 鑾峰彇瑙嗛鎮寕鍟嗗搧
+     *
+     * @param videoId
+     * @return
+     */
+    List<VideoGoodsDetailVO> getVideoGoods(@Param("id") String videoId);
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/KitchenTypeService.java b/framework/src/main/java/cn/lili/modules/lmk/service/KitchenTypeService.java
new file mode 100644
index 0000000..322ea84
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/KitchenTypeService.java
@@ -0,0 +1,65 @@
+package cn.lili.modules.lmk.service;
+
+import cn.lili.modules.lmk.domain.entity.KitchenType;
+import com.baomidou.mybatisplus.extension.service.IService;
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.form.KitchenTypeForm;
+import cn.lili.modules.lmk.domain.query.KitchenTypeQuery;
+import java.util.List;
+
+/**
+ * 鍘ㄧ绫诲瀷 鏈嶅姟绫�
+ *
+ * @author wp
+ * @since 2025-06-13
+ */
+public interface KitchenTypeService extends IService<KitchenType> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(KitchenTypeForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(KitchenTypeForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(KitchenTypeQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(String id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/KitchenVideoTypeRefService.java b/framework/src/main/java/cn/lili/modules/lmk/service/KitchenVideoTypeRefService.java
new file mode 100644
index 0000000..c7b6152
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/KitchenVideoTypeRefService.java
@@ -0,0 +1,70 @@
+package cn.lili.modules.lmk.service;
+
+import cn.lili.modules.lmk.domain.entity.KitchenVideoTypeRef;
+import cn.lili.modules.lmk.domain.vo.KitchenVideoTypeVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.form.KitchenVideoTypeRefForm;
+import cn.lili.modules.lmk.domain.query.KitchenVideoTypeRefQuery;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 鍘ㄧ瑙嗛鏍囩鍏崇郴琛� 鏈嶅姟绫�
+ *
+ * @author wp
+ * @since 2025-06-13
+ */
+public interface KitchenVideoTypeRefService extends IService<KitchenVideoTypeRef> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(KitchenVideoTypeRefForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(KitchenVideoTypeRefForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(KitchenVideoTypeRefQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(String id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+
+    List<KitchenVideoTypeVO> getTypeByVideoIds(List<String> videoIds);
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/ShareClickRecordService.java b/framework/src/main/java/cn/lili/modules/lmk/service/ShareClickRecordService.java
new file mode 100644
index 0000000..e5e4891
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/ShareClickRecordService.java
@@ -0,0 +1,65 @@
+package cn.lili.modules.lmk.service;
+
+import cn.lili.modules.lmk.domain.entity.ShareClickRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.form.ShareClickRecordForm;
+import cn.lili.modules.lmk.domain.query.ShareClickRecordQuery;
+import java.util.List;
+
+/**
+ * 鍒嗕韩鐐瑰嚮璁板綍 鏈嶅姟绫�
+ *
+ * @author xp
+ * @since 2025-06-16
+ */
+public interface ShareClickRecordService extends IService<ShareClickRecord> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(ShareClickRecordForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(ShareClickRecordForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(ShareClickRecordQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(String id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/ShareService.java b/framework/src/main/java/cn/lili/modules/lmk/service/ShareService.java
new file mode 100644
index 0000000..3cf7753
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/ShareService.java
@@ -0,0 +1,74 @@
+package cn.lili.modules.lmk.service;
+
+import cn.lili.modules.lmk.domain.entity.Share;
+import cn.lili.modules.lmk.domain.form.ShareClickRecordForm;
+import com.baomidou.mybatisplus.extension.service.IService;
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.form.ShareForm;
+import cn.lili.modules.lmk.domain.query.ShareQuery;
+import java.util.List;
+
+/**
+ * 鍒嗕韩璁板綍 鏈嶅姟绫�
+ *
+ * @author xp
+ * @since 2025-06-16
+ */
+public interface ShareService extends IService<Share> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(ShareForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(ShareForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(ShareQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(String id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+
+    /**
+     * 娣诲姞鍒嗕韩璁块棶璁板綍
+     *
+     * @param form
+     * @return
+     */
+    Result addShareClick(ShareClickRecordForm form);
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/VideoGoodsService.java b/framework/src/main/java/cn/lili/modules/lmk/service/VideoGoodsService.java
new file mode 100644
index 0000000..e2363c0
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/VideoGoodsService.java
@@ -0,0 +1,14 @@
+package cn.lili.modules.lmk.service;
+
+import cn.lili.modules.lmk.domain.entity.VideoGoods;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 瑙嗛鍟嗗搧涓棿琛� 鏈嶅姟绫�
+ *
+ * @author xp
+ * @since 2025-06-15
+ */
+public interface VideoGoodsService extends IService<VideoGoods> {
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java b/framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java
index 0a4b93d..8b8f5c4 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java
@@ -1,13 +1,15 @@
 package cn.lili.modules.lmk.service;
 
+import cn.lili.group.Add;
 import cn.lili.modules.lmk.domain.entity.Video;
 import cn.lili.modules.lmk.domain.form.*;
-import cn.lili.modules.lmk.domain.query.AuthorVideoQuery;
-import cn.lili.modules.lmk.domain.query.ManagerVideoQuery;
+import cn.lili.modules.lmk.domain.query.*;
 import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import cn.lili.base.Result;
-import cn.lili.modules.lmk.domain.query.VideoQuery;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestBody;
+
 import java.util.List;
 
 /**
@@ -122,6 +124,8 @@
      */
     Result recommendVideo(VideoQuery query);
 
+    Result healthRecommendVideo(WxHealthVideoQuery query);
+
     /**
      * 鎵归噺鏇存柊瑙嗛鏀惰棌鏁伴噺
      *
@@ -183,4 +187,70 @@
      * @return
      */
     Result wxDetail(String id);
+
+    /**
+     * 澶у仴搴疯棰戝彂甯�
+     *
+     * @param form
+     * @return
+     */
+    Result healthVideo(HealthVideoForm form);
+    /**
+     * 淇敼澶у仴搴疯棰�
+     *
+     * @param form
+     * @return
+     */
+    Result updateHealthVideo(HealthVideoForm form);
+    /**
+     * 澶у仴搴疯棰戝垪琛�
+     *
+     * @param query
+     * @return
+     */
+    Result healthPage(HealthVideoQuery query);
+    /**
+     * 鍒犻櫎澶у仴搴疯棰�
+
+     * @param id 涓婚敭id
+     * @return
+     */
+    Result delHealth(String id);
+
+    Result addKitchenVideo( KitchenVideoForm form);
+
+    Result updateKitchenVideo( KitchenVideoForm form);
+    /**
+     * 鍘ㄧ瑙嗛鍒楄〃
+     *
+     * @param query
+     * @return
+     */
+    Result KitchenVideoQuery(KitchenVideoQuery query);
+
+    Result delKitchen(String id);
+
+    /**
+     * 瑙嗛鍟嗗搧鏌ョ湅
+     *
+     * @param videoId
+     * @return
+     */
+    Result getGoodsDetail(String videoId);
+
+    /**
+     * 鐢ㄦ埛涓嬫灦瑙嗛
+     *
+     * @param id
+     * @return
+     */
+    Result buyerDownVideo(String id);
+
+    /**
+     * 淇敼瑙嗛
+     *
+     * @param form
+     * @return
+     */
+    Result updatePublish(WxVideoForm form);
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/KitchenTypeServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/KitchenTypeServiceImpl.java
new file mode 100644
index 0000000..d2e0f9c
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/KitchenTypeServiceImpl.java
@@ -0,0 +1,135 @@
+package cn.lili.modules.lmk.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import cn.lili.modules.lmk.domain.entity.KitchenType;
+import cn.lili.modules.lmk.mapper.KitchenTypeMapper;
+import cn.lili.modules.lmk.service.KitchenTypeService;
+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.KitchenTypeForm;
+import cn.lili.modules.lmk.domain.vo.KitchenTypeVO;
+import cn.lili.modules.lmk.domain.query.KitchenTypeQuery;
+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 wp
+ * @since 2025-06-13
+ */
+@Service
+@RequiredArgsConstructor
+public class KitchenTypeServiceImpl extends ServiceImpl<KitchenTypeMapper, KitchenType> implements KitchenTypeService {
+
+    private final KitchenTypeMapper kitchenTypeMapper;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(KitchenTypeForm form) {
+        KitchenType entity = KitchenTypeForm.getEntityByForm(form, null);
+        entity.setUseNum(0L);
+        LambdaQueryWrapper<KitchenType> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(KitchenType::getTypeName, form.getTypeName());
+        List<KitchenType> kitchenTypes = baseMapper.selectList(wrapper);
+        if (!kitchenTypes.isEmpty()) {
+            return Result.error("娣诲姞澶辫触鏍囩瀛樺湪");
+        }
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(KitchenTypeForm form) {
+        KitchenType entity = baseMapper.selectById(form.getId());
+
+        // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
+        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+        BeanUtils.copyProperties(form, entity);
+        //鏍¢獙鏍囩鏄惁瀛樺湪
+        LambdaQueryWrapper<KitchenType> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(KitchenType::getTypeName, form.getTypeName());
+        List<KitchenType> kitchenTypes = baseMapper.selectList(wrapper);
+        if (!kitchenTypes.isEmpty()) {
+            return Result.error("淇敼澶辫触鏍囩瀛樺湪");
+        }
+        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(KitchenTypeQuery query) {
+        IPage<KitchenTypeVO> page = PageUtil.getPage(query, KitchenTypeVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(String id) {
+        KitchenTypeVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<KitchenType> entities = baseMapper.selectList(null);
+        List<KitchenTypeVO> vos = entities.stream()
+                .map(entity -> KitchenTypeVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/KitchenVideoTypeRefServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/KitchenVideoTypeRefServiceImpl.java
new file mode 100644
index 0000000..6aac262
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/KitchenVideoTypeRefServiceImpl.java
@@ -0,0 +1,126 @@
+package cn.lili.modules.lmk.service.impl;
+
+import cn.lili.modules.lmk.domain.vo.KitchenVideoTypeVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import cn.lili.modules.lmk.domain.entity.KitchenVideoTypeRef;
+import cn.lili.modules.lmk.mapper.KitchenVideoTypeRefMapper;
+import cn.lili.modules.lmk.service.KitchenVideoTypeRefService;
+import cn.lili.base.Result;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.lili.modules.lmk.domain.form.KitchenVideoTypeRefForm;
+import cn.lili.modules.lmk.domain.vo.KitchenVideoTypeRefVO;
+import cn.lili.modules.lmk.domain.query.KitchenVideoTypeRefQuery;
+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.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 鍘ㄧ瑙嗛鏍囩鍏崇郴琛� 鏈嶅姟瀹炵幇绫�
+ *
+ * @author wp
+ * @since 2025-06-13
+ */
+@Service
+@RequiredArgsConstructor
+public class KitchenVideoTypeRefServiceImpl extends ServiceImpl<KitchenVideoTypeRefMapper, KitchenVideoTypeRef> implements KitchenVideoTypeRefService {
+
+    private final KitchenVideoTypeRefMapper kitchenVideoTypeRefMapper;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(KitchenVideoTypeRefForm form) {
+        KitchenVideoTypeRef entity = KitchenVideoTypeRefForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(KitchenVideoTypeRefForm form) {
+        KitchenVideoTypeRef 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(KitchenVideoTypeRefQuery query) {
+        IPage<KitchenVideoTypeRefVO> page = PageUtil.getPage(query, KitchenVideoTypeRefVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(String id) {
+        KitchenVideoTypeRefVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<KitchenVideoTypeRef> entities = baseMapper.selectList(null);
+        List<KitchenVideoTypeRefVO> vos = entities.stream()
+                .map(entity -> KitchenVideoTypeRefVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+
+    @Override
+    public List<KitchenVideoTypeVO> getTypeByVideoIds(List<String> videoIds) {
+        return baseMapper.getTypeByVideoIds(videoIds);
+    }
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/ShareClickRecordServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ShareClickRecordServiceImpl.java
new file mode 100644
index 0000000..a3fd375
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ShareClickRecordServiceImpl.java
@@ -0,0 +1,119 @@
+package cn.lili.modules.lmk.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import cn.lili.modules.lmk.domain.entity.ShareClickRecord;
+import cn.lili.modules.lmk.mapper.ShareClickRecordMapper;
+import cn.lili.modules.lmk.service.ShareClickRecordService;
+import cn.lili.base.Result;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.lili.modules.lmk.domain.form.ShareClickRecordForm;
+import cn.lili.modules.lmk.domain.vo.ShareClickRecordVO;
+import cn.lili.modules.lmk.domain.query.ShareClickRecordQuery;
+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 xp
+ * @since 2025-06-16
+ */
+@Service
+@RequiredArgsConstructor
+public class ShareClickRecordServiceImpl extends ServiceImpl<ShareClickRecordMapper, ShareClickRecord> implements ShareClickRecordService {
+
+    private final ShareClickRecordMapper shareClickRecordMapper;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(ShareClickRecordForm form) {
+        ShareClickRecord entity = ShareClickRecordForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(ShareClickRecordForm form) {
+        ShareClickRecord 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(ShareClickRecordQuery query) {
+        IPage<ShareClickRecordVO> page = PageUtil.getPage(query, ShareClickRecordVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(String id) {
+        ShareClickRecordVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<ShareClickRecord> entities = baseMapper.selectList(null);
+        List<ShareClickRecordVO> vos = entities.stream()
+                .map(entity -> ShareClickRecordVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/ShareServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ShareServiceImpl.java
new file mode 100644
index 0000000..ba8b794
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ShareServiceImpl.java
@@ -0,0 +1,161 @@
+package cn.lili.modules.lmk.service.impl;
+
+import cn.lili.common.security.context.UserContext;
+import cn.lili.modules.lmk.domain.entity.ShareClickRecord;
+import cn.lili.modules.lmk.domain.form.ShareClickRecordForm;
+import cn.lili.modules.lmk.service.ShareClickRecordService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import cn.lili.modules.lmk.domain.entity.Share;
+import cn.lili.modules.lmk.mapper.ShareMapper;
+import cn.lili.modules.lmk.service.ShareService;
+import cn.lili.base.Result;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.lili.modules.lmk.domain.form.ShareForm;
+import cn.lili.modules.lmk.domain.vo.ShareVO;
+import cn.lili.modules.lmk.domain.query.ShareQuery;
+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.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 鍒嗕韩璁板綍 鏈嶅姟瀹炵幇绫�
+ *
+ * @author xp
+ * @since 2025-06-16
+ */
+@Service
+@RequiredArgsConstructor
+public class ShareServiceImpl extends ServiceImpl<ShareMapper, Share> implements ShareService {
+
+    private final ShareMapper shareMapper;
+    private final ShareClickRecordService shareClickRecordService;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(ShareForm form) {
+        // 娌″垎浜繃鎵嶆柊澧�
+        boolean exists = new LambdaQueryChainWrapper<>(baseMapper)
+                .eq(Share::getShareType, form.getShareType())
+                .eq(Share::getRefId, form.getRefId())
+                .eq(Share::getShareUser, form.getShareUser())
+                .exists();
+        if (! exists) {
+            Share entity = ShareForm.getEntityByForm(form, null);
+            entity.setShareTime(new Date());
+            baseMapper.insert(entity);
+        }
+        return Result.ok();
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(ShareForm form) {
+        Share 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(ShareQuery query) {
+        IPage<ShareVO> page = PageUtil.getPage(query, ShareVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(String id) {
+        ShareVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<Share> entities = baseMapper.selectList(null);
+        List<ShareVO> vos = entities.stream()
+                .map(entity -> ShareVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+
+    @Override
+    public Result addShareClick(ShareClickRecordForm form) {
+        // 鏌ュ嚭鍒嗕韩璁板綍
+        Share share = new LambdaQueryChainWrapper<>(baseMapper)
+                .eq(Share::getShareUser, form.getShareUserId())
+                .eq(Share::getRefId, form.getRefId())
+                .one();
+        if (Objects.isNull(share)) {
+            return Result.ok();
+        }
+        // 娌℃湁璁块棶杩囨墠娣诲姞
+        boolean exists = new LambdaQueryChainWrapper<>(shareClickRecordService.getBaseMapper())
+                .eq(ShareClickRecord::getUserId, UserContext.getCurrentUserId())
+                .eq(ShareClickRecord::getShareId, share.getId())
+                .exists();
+        if (! exists) {
+            ShareClickRecord record = new ShareClickRecord();
+            record.setShareId(share.getId());
+            record.setUserId(UserContext.getCurrentUserId());
+            record.setClickTime(new Date());
+            shareClickRecordService.save(record);
+        }
+        return Result.ok();
+    }
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoGoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoGoodsServiceImpl.java
new file mode 100644
index 0000000..dff92fa
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoGoodsServiceImpl.java
@@ -0,0 +1,22 @@
+package cn.lili.modules.lmk.service.impl;
+
+import cn.lili.modules.lmk.domain.entity.VideoGoods;
+import cn.lili.modules.lmk.mapper.VideoGoodsMapper;
+import cn.lili.modules.lmk.service.VideoGoodsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 瑙嗛鍟嗗搧涓棿琛� 鏈嶅姟瀹炵幇绫�
+ *
+ * @author xp
+ * @since 2025-06-15
+ */
+@Service
+@RequiredArgsConstructor
+public class VideoGoodsServiceImpl extends ServiceImpl<VideoGoodsMapper, VideoGoods> implements VideoGoodsService {
+
+    private final VideoGoodsMapper videoGoodsMapper;
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java
index 74b939e..b56d9ba 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java
@@ -3,8 +3,7 @@
 import cn.lili.common.security.context.UserContext;
 import cn.lili.modules.lmk.domain.entity.*;
 import cn.lili.modules.lmk.domain.form.*;
-import cn.lili.modules.lmk.domain.query.AuthorVideoQuery;
-import cn.lili.modules.lmk.domain.query.ManagerVideoQuery;
+import cn.lili.modules.lmk.domain.query.*;
 import cn.lili.modules.lmk.domain.vo.*;
 import cn.lili.modules.lmk.enums.general.*;
 import cn.lili.modules.lmk.service.*;
@@ -17,10 +16,10 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import cn.lili.modules.lmk.mapper.VideoMapper;
 import cn.lili.base.Result;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import cn.lili.modules.lmk.domain.query.VideoQuery;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.ListUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -55,6 +54,8 @@
     private final MySubscribeService mySubscribeService;
     private final MemberService memberService;
     private final VideoAccountService videoAccountService;
+    private final KitchenVideoTypeRefService kitchenVideoTypeRefService;
+    private final VideoGoodsService videoGoodsService;
 
 
     /**
@@ -187,11 +188,86 @@
             return videoTagRef;
         }).collect(Collectors.toList());
         videoTagRefService.saveBatch(videoTagRefs);
-        // 3.淇濆瓨瑙嗛鏂囦欢淇℃伅
+        // 3. 淇濆瓨瑙嗛鏂囦欢淇℃伅
         lmkFileService.addByForm(form.getFileInfo());
+        // 4. 澶勭悊閫夋嫨鐨勫晢鍝�
+        if (CollectionUtils.isNotEmpty(form.getGoodsList())) {
+            List<VideoGoods> videoGoods = new ArrayList<>(2);
+            for (int i = 0; i < form.getGoodsList().size(); i++) {
+                VideoGoods e = new VideoGoods();
+                e.setVideoId(video.getId());
+                e.setGoodsId(form.getGoodsList().get(i).getGoodsId());
+                e.setGoodsNum(form.getGoodsList().get(i).getGoodsNum());
+                e.setOrderNum(i);
+                videoGoods.add(e);
+            }
+            videoGoodsService.saveBatch(videoGoods);
+        }
         return Result.ok("鍙戝竷鎴愬姛锛岃棰戝鏍镐腑~");
     }
 
+    @Override
+    public Result updatePublish(WxVideoForm form) {
+        Video video = baseMapper.selectById(form.getId());
+        if (Objects.isNull(video)) {
+            return Result.error("淇敼瑙嗛涓嶅瓨鍦�");
+        }
+        // 1.淇敼瑙嗛
+        WxVideoForm.getEntityByForm(form, video);
+        video.setAuthorId(UserContext.getCurrentUserId());
+        video.setStatus(VideoStatusEnum.AUDITING.getValue());
+        video.setCoverUrl(form.getCover());
+        video.setVideoType(VideoTypeEnum.VIDEO.getValue());
+        if (VideoContentTypeEnum.IMG.getValue().equals(form.getVideoContentType())) {
+            video.setVideoImgs(JSON.toJSONString(form.getVideoImgs()));
+        }
+        baseMapper.updateById(video);
+        // 2.澶勭悊鏍囩---鍒犻櫎涔嬪墠鐨勮棰戞爣绛惧叧绯伙紝鍐嶆柊澧�
+        new LambdaUpdateChainWrapper<>(videoTagRefService.getBaseMapper())
+                .eq(VideoTagRef::getVideoId, video.getId())
+                .remove();
+        List<VideoTagRef> videoTagRefs = form.getTags().stream().map(tag -> {
+            VideoTagRef videoTagRef = new VideoTagRef();
+            videoTagRef.setVideoId(video.getId());
+            if (StringUtils.isBlank(tag.getId())) {
+                VideoTag videoTag = new LambdaQueryChainWrapper<>(videoTagService.getBaseMapper())
+                        .eq(VideoTag::getTagName, tag.getTagName())
+                        .one();
+                if (Objects.nonNull(videoTag)) {
+                    videoTagRef.setVideoTagId(videoTag.getId());
+                } else {
+                    videoTag = new VideoTag();
+                    videoTag.setTagName(tag.getTagName());
+                    videoTag.setCreateType(TagCreateTypeEnum.USER.getValue());
+                    videoTagService.save(videoTag);
+                    videoTagRef.setVideoTagId(videoTag.getId());
+                }
+            } else {
+                videoTagRef.setVideoTagId(tag.getId());
+            }
+            return videoTagRef;
+        }).collect(Collectors.toList());
+        videoTagRefService.saveBatch(videoTagRefs);
+        // 3. 淇濆瓨瑙嗛鏂囦欢淇℃伅
+        lmkFileService.addByForm(form.getFileInfo());
+        // 4. 澶勭悊閫夋嫨鐨勫晢鍝侊紝鍏堝垹闄や箣鍓嶇殑鍐嶆柊澧�
+        new LambdaUpdateChainWrapper<>(videoGoodsService.getBaseMapper())
+                .eq(VideoGoods::getVideoId, video.getId())
+                .remove();
+        if (CollectionUtils.isNotEmpty(form.getGoodsList())) {
+            List<VideoGoods> videoGoods = new ArrayList<>(2);
+            for (int i = 0; i < form.getGoodsList().size(); i++) {
+                VideoGoods e = new VideoGoods();
+                e.setVideoId(video.getId());
+                e.setGoodsId(form.getGoodsList().get(i).getGoodsId());
+                e.setGoodsNum(form.getGoodsList().get(i).getGoodsNum());
+                e.setOrderNum(i);
+                videoGoods.add(e);
+            }
+            videoGoodsService.saveBatch(videoGoods);
+        }
+        return Result.ok("鍙戝竷鎴愬姛锛岃棰戝鏍镐腑~");
+    }
 
     @Override
     public Result managerPage(ManagerVideoQuery query) {
@@ -202,7 +278,7 @@
         if (page.getTotal() > 0) {
             Map<String, List<SimpleVideoTagVO>> tagMap = videoTagRefService.getTagsByVideoIds(
                     page.getRecords().stream().map(VideoVO::getId).collect(Collectors.toList())
-            ).stream().collect(Collectors.groupingBy(SimpleVideoTagVO::getVideoId));;
+            ).stream().collect(Collectors.groupingBy(SimpleVideoTagVO::getVideoId));
             // 3. 鑾峰彇瑙嗛涓存椂璁块棶鍦板潃銆佽缃棰戞爣绛�
             page.getRecords().forEach(v -> {
                 v.setTagList(tagMap.get(v.getId()));
@@ -269,6 +345,15 @@
     }
 
     @Override
+    public Result buyerDownVideo(String id) {
+        new LambdaUpdateChainWrapper<>(baseMapper)
+                .eq(Video::getId, id)
+                .set(Video::getStatus, VideoStatusEnum.DISABLE.getValue())
+                .update();
+        return Result.ok("涓嬫灦鎴愬姛");
+    }
+
+    @Override
     public Result recommendVideo(VideoQuery query) {
         // 鎺ㄨ崘绠楁硶锛� 1. 鏍规嵁鐢ㄦ埛鐨勬敹钘忚棰戠殑鏍囩  2. 鏍规嵁鐢ㄦ埛鍏虫敞鐨勪綔鑰呯殑鍏跺畠瑙嗛  3. 鏍规嵁鐢ㄦ埛鐨勮鐪嬭褰曪紙瑙傜湅鏃堕暱杈冮暱鐨勩�侀噸澶嶈鐪嬫鏁拌緝澶氱殑锛� 4. 鍩轰簬鐩镐技鐢ㄦ埛鐨勮鐪嬭涓烘潵缁欒鐢ㄦ埛鎺ㄨ崘
         IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class);
@@ -300,17 +385,34 @@
             List<String> subscribes = mySubscribeService.getSubscribesByUserId(UserContext.getCurrentUserId());
             // 3. 鑾峰彇瑙嗛涓存椂璁块棶鍦板潃銆佽缃棰戞爣绛俱�佹垜鏄惁鏀惰棌銆佷綔鑰呮槸鍚﹀叧娉�
             page.getRecords().forEach(v -> {
-                v.setGoods(new VideoGoodsVO());
                 v.setTagList(tagMap.get(v.getId()));
                 v.setCollected(CollectionUtils.isNotEmpty(collectMap.get(v.getId())));
                 if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
-                    //                v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
-                    v.setVideoUrl("https://videos.pexels.com/video-files/13602965/13602965-hd_1920_1080_30fps.mp4");
+                    v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
+                    v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
                 } else if (VideoContentTypeEnum.IMG.getValue().equals(v.getVideoContentType()) && StringUtils.isNotBlank(v.getVideoImgs())) {
                     v.setImgs(JSON.parseArray(v.getVideoImgs(), String.class).stream().map(fileKey -> cosUtil.getPreviewUrl(fileKey)).collect(Collectors.toList()));
                 }
-                v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
+
                 v.setSubscribeThisAuthor(subscribes.contains(v.getAuthorId()));
+            });
+        }
+        return Result.ok().data(page.getRecords());
+    }
+
+    @Override
+    public Result healthRecommendVideo(WxHealthVideoQuery query) {
+        IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class);
+        //鑾峰彇澶у仴搴疯棰戝垪琛�
+                baseMapper.recommendHealthVideo(page,query);
+        if (page.getTotal() > 0) {
+            page.getRecords().forEach(v -> {
+                if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
+                    v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
+                    v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
+                } else if (VideoContentTypeEnum.IMG.getValue().equals(v.getVideoContentType()) && StringUtils.isNotBlank(v.getVideoImgs())) {
+                    v.setImgs(JSON.parseArray(v.getVideoImgs(), String.class).stream().map(cosUtil::getPreviewUrl).collect(Collectors.toList()));
+                }
             });
         }
         return Result.ok().data(page.getRecords());
@@ -368,9 +470,14 @@
         query.setAuthorSelf(UserContext.getCurrentUserId().equals(query.getAuthorId()));
         baseMapper.getAuthorVideoPage(page, query);
         for (WxVideoVO vo : page.getRecords()) {
-            vo.setCoverUrl(cosUtil.getPreviewUrl(vo.getCoverFileKey()));
-//            vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoFileKey()));
-            vo.setVideoUrl("https://videos.pexels.com/video-files/13602965/13602965-hd_1920_1080_30fps.mp4");
+            if (VideoContentTypeEnum.VIDEO.getValue().equals(vo.getVideoContentType())) {
+                vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoFileKey()));
+                vo.setCoverUrl(cosUtil.getPreviewUrl(vo.getCoverFileKey()));
+            } else if (VideoContentTypeEnum.IMG.getValue().equals(vo.getVideoContentType()) && StringUtils.isNotBlank(vo.getVideoImgs())) {
+                vo.setImgs(JSON.parseArray(vo.getVideoImgs(), String.class).stream().map(fileKey -> cosUtil.getPreviewUrl(fileKey)).collect(Collectors.toList()));
+            }
+
+
             vo.setOptions(VideoSupportOpEnum.getVideoOpByStatus(vo.getStatus()));
         }
         return Result.ok().data(page.getRecords()).total(page.getTotal());
@@ -381,12 +488,21 @@
         IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class);
         baseMapper.getAuthorCollectVideoPage(page, query);
         for (WxVideoVO vo : page.getRecords()) {
-            vo.setCoverUrl(cosUtil.getPreviewUrl(vo.getCoverFileKey()));
-//            vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoFileKey()));
-            vo.setVideoUrl("https://videos.pexels.com/video-files/13602965/13602965-hd_1920_1080_30fps.mp4");
+            if (VideoContentTypeEnum.VIDEO.getValue().equals(vo.getVideoContentType())) {
+                vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoFileKey()));
+                vo.setCoverUrl(cosUtil.getPreviewUrl(vo.getCoverFileKey()));
+            } else if (VideoContentTypeEnum.IMG.getValue().equals(vo.getVideoContentType()) && StringUtils.isNotBlank(vo.getVideoImgs())) {
+                vo.setImgs(JSON.parseArray(vo.getVideoImgs(), String.class).stream().map(fileKey -> cosUtil.getPreviewUrl(fileKey)).collect(Collectors.toList()));
+            }
             vo.setCollected(Boolean.TRUE);
         }
         return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    @Override
+    public Result getGoodsDetail(String videoId) {
+        List<VideoGoodsDetailVO> goodsList = baseMapper.getVideoGoods(videoId);
+        return Result.ok().data(goodsList);
     }
 
     @Override
@@ -410,9 +526,12 @@
         if (Objects.isNull(vo)) {
             return Result.error("瑙嗛涓嶅瓨鍦�");
         }
-        vo.setCoverUrl(cosUtil.getPreviewUrl(vo.getCoverFileKey()));
-//        vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoFileKey()));
-        vo.setVideoUrl("https://videos.pexels.com/video-files/13602965/13602965-hd_1920_1080_30fps.mp4");
+        if (VideoContentTypeEnum.VIDEO.getValue().equals(vo.getVideoContentType())) {
+            vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoFileKey()));
+            vo.setCoverUrl(cosUtil.getPreviewUrl(vo.getCoverFileKey()));
+        } else if (VideoContentTypeEnum.IMG.getValue().equals(vo.getVideoContentType()) && StringUtils.isNotBlank(vo.getVideoImgs())) {
+            vo.setImgs(JSON.parseArray(vo.getVideoImgs(), String.class).stream().map(fileKey -> cosUtil.getPreviewUrl(fileKey)).collect(Collectors.toList()));
+        }
         List<WxVideoTagForm> tags = videoTagRefService.getTagsByVideoIds(Arrays.asList(vo.getId()))
                 .stream()
                 .map(i -> {
@@ -425,4 +544,148 @@
         vo.setTags(tags);
         return Result.ok().data(vo);
     }
+
+    @Override
+    public Result healthVideo(HealthVideoForm form) {
+        Video video = new Video();
+        BeanUtils.copyProperties(form, video);
+        video.setAuthorId(UserContext.getCurrentUserId());
+        video.setVideoType(VideoTypeEnum.HEALTH.getValue());
+        //璁剧疆濉厖妯″紡 淇濇寔姣斾緥锛屽畬鏁存樉绀�
+        video.setVideoFit("contain");
+        video.setVideoContentType(VideoContentTypeEnum.VIDEO.getValue());
+        video.setStatus(VideoStatusEnum.PUBLISHED.getValue());
+        baseMapper.insert(video);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    @Override
+    public Result healthPage(HealthVideoQuery query) {
+        IPage<VideoVO> page = PageUtil.getPage(query, VideoVO.class);
+        // 1. 鍏堟煡鍑鸿棰戜俊鎭�
+        baseMapper.healthPage(page, query);
+        // 2. 鍗曠嫭鏌ュ嚭鏍囩淇℃伅
+        if (page.getTotal() > 0) {
+            Map<String, List<SimpleVideoTagVO>> tagMap = videoTagRefService.getTagsByVideoIds(
+                    page.getRecords().stream().map(VideoVO::getId).collect(Collectors.toList())
+            ).stream().collect(Collectors.groupingBy(SimpleVideoTagVO::getVideoId));;
+            // 3. 鑾峰彇瑙嗛涓存椂璁块棶鍦板潃銆佽缃棰戞爣绛�
+            page.getRecords().forEach(v -> {
+                v.setTagList(tagMap.get(v.getId()));
+                v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
+                v.setCoverShowUrl(cosUtil.getPreviewUrl(v.getCoverUrl()));
+            });
+        }
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    @Override
+    public Result updateHealthVideo(HealthVideoForm form) {
+        Video entity = baseMapper.selectById(form.getId());
+        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+        BeanUtils.copyProperties(form, entity);
+        baseMapper.updateById(entity);
+        return Result.ok("淇敼鎴愬姛");
+    }
+
+    @Override
+    public Result delHealth(String id) {
+        Video entity = baseMapper.selectById(id);
+        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+        String videoType = entity.getVideoType();
+        if (!VideoTypeEnum.HEALTH.getValue().equals(videoType)) {
+            log.error("鍒犻櫎闈炲ぇ鍋ュ悍瑙嗛瑙嗛id涓�------->"+id);
+            return Result.error("鍒犻櫎澶辫触");
+        }
+        baseMapper.deleteById(id);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result addKitchenVideo(KitchenVideoForm form) {
+        Video video = new Video();
+        BeanUtils.copyProperties(form, video);
+        video.setAuthorId(UserContext.getCurrentUserId());
+        video.setVideoType(VideoTypeEnum.COOK.getValue());
+        //璁剧疆濉厖妯″紡 淇濇寔姣斾緥锛屽畬鏁存樉绀�
+        video.setVideoFit("contain");
+        video.setVideoContentType(VideoContentTypeEnum.VIDEO.getValue());
+        video.setStatus(VideoStatusEnum.PUBLISHED.getValue());
+        baseMapper.insert(video);
+        String id = video.getId();
+        List<KitchenVideoTypeRef> collect = form.getCheckKitchenType().stream().map(item -> {
+                    KitchenVideoTypeRef kitchenVideoTypeRef = new KitchenVideoTypeRef();
+                    //璁剧疆瑙嗛id
+                    kitchenVideoTypeRef.setVideoId(id);
+                    //璁剧疆鏍囩id
+                    kitchenVideoTypeRef.setKitchenTypeId(item);
+                    return kitchenVideoTypeRef;
+                }
+        ).collect(Collectors.toList());
+        kitchenVideoTypeRefService.saveBatch(collect);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result updateKitchenVideo(KitchenVideoForm form) {
+        Video video = baseMapper.selectById(form.getId());
+        Assert.notNull(video, "璁板綍涓嶅瓨鍦�");
+        BeanUtils.copyProperties(form, video);
+        baseMapper.updateById(video);
+        //鍒犻櫎鍘熸潵鐨勭被鍨嬪叧绯�
+        kitchenVideoTypeRefService.remove(Wrappers.<KitchenVideoTypeRef>lambdaQuery()
+                .eq(KitchenVideoTypeRef::getVideoId, form.getId()));
+        String id = video.getId();
+        List<KitchenVideoTypeRef> collect = form.getCheckKitchenType().stream().map(item -> {
+                    KitchenVideoTypeRef kitchenVideoTypeRef = new KitchenVideoTypeRef();
+                    //璁剧疆瑙嗛id
+                    kitchenVideoTypeRef.setVideoId(id);
+                    //璁剧疆鏍囩id
+                    kitchenVideoTypeRef.setKitchenTypeId(item);
+                    return kitchenVideoTypeRef;
+                }
+        ).collect(Collectors.toList());
+        kitchenVideoTypeRefService.saveBatch(collect);
+        return Result.ok("淇敼鎴愬姛");
+    }
+
+    @Override
+    public Result KitchenVideoQuery(KitchenVideoQuery query) {
+        IPage<KitchenVideoVO> page = PageUtil.getPage(query, KitchenVideoVO.class);
+        // 1. 鍏堟煡鍑鸿棰戜俊鎭�
+        baseMapper.kitchenPage(page, query);
+        // 2. 鍗曠嫭鏌ュ嚭鏍囩淇℃伅
+        if (page.getTotal() > 0) {
+            Map<String, List<KitchenVideoTypeVO>> typeMap = kitchenVideoTypeRefService
+                    .getTypeByVideoIds(
+                            page.getRecords()
+                                    .stream().map(KitchenVideoVO::getId).collect(Collectors.toList()))
+                    .stream().collect(Collectors.groupingBy(KitchenVideoTypeVO::getVideoId));
+            // 3. 鑾峰彇瑙嗛涓存椂璁块棶鍦板潃銆佽缃棰戞爣绛�
+            page.getRecords().forEach(v -> {
+                v.setTypeList(typeMap.get(v.getId()));
+                v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
+                v.setCoverShowUrl(cosUtil.getPreviewUrl(v.getCoverUrl()));
+            });
+        }
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result delKitchen(String id) {
+        Video entity = baseMapper.selectById(id);
+        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+        String videoType = entity.getVideoType();
+        if (!VideoTypeEnum.COOK.getValue().equals(videoType)) {
+            log.error("鍒犻櫎闈炲ぇ绁炲帹瑙嗛瑙嗛id涓�------->"+id);
+            return Result.error("鍒犻櫎澶辫触");
+        }
+        baseMapper.deleteById(id);
+        kitchenVideoTypeRefService.remove(Wrappers.<KitchenVideoTypeRef>lambdaQuery()
+                .eq(KitchenVideoTypeRef::getVideoId, id));
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoTagServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoTagServiceImpl.java
index 85474dd..75a473a 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoTagServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoTagServiceImpl.java
@@ -2,6 +2,7 @@
 
 import cn.lili.modules.lmk.domain.query.WxVideoTagQuery;
 import cn.lili.modules.lmk.domain.vo.SimpleVideoTagVO;
+import cn.lili.modules.lmk.domain.vo.WxVideoTagVO;
 import cn.lili.modules.lmk.enums.general.TagCreateTypeEnum;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import cn.lili.modules.lmk.domain.entity.VideoTag;
@@ -139,7 +140,7 @@
 
     @Override
     public Result recommend(WxVideoTagQuery query) {
-        List<VideoTagVO> tags = new ArrayList<>(3);
+        List<WxVideoTagVO> tags = new ArrayList<>(3);
         switch (query.getSearchType()) {
             case "HOT":
                 // TODO 鐑棬鏍囩閫氳繃瀹氭椂浠诲姟缁熻琛╨mk_video_tag_ref鏁伴噺鍒發mk_video_tag涓�
@@ -147,7 +148,7 @@
                         .orderByDesc(VideoTag::getUseNum)
                         .last("limit 3")
                         .list().stream().map(entity -> {
-                            return VideoTagVO.getVoByEntity(entity, null);
+                            return WxVideoTagVO.getVoByEntity(entity, null);
                         }).collect(Collectors.toList());
             case "SEARCH":
                 tags = new LambdaQueryChainWrapper<>(baseMapper)
@@ -155,7 +156,7 @@
                         .like(VideoTag::getTagName, query.getTagName())
                         .last("limit 3")
                         .list().stream().map(entity -> {
-                            return VideoTagVO.getVoByEntity(entity, null);
+                            return WxVideoTagVO.getVoByEntity(entity, null);
                         }).collect(Collectors.toList());
         }
         return Result.ok().data(tags);
diff --git a/framework/src/main/java/cn/lili/modules/member/service/MemberService.java b/framework/src/main/java/cn/lili/modules/member/service/MemberService.java
index 20983da..a3ba9b1 100644
--- a/framework/src/main/java/cn/lili/modules/member/service/MemberService.java
+++ b/framework/src/main/java/cn/lili/modules/member/service/MemberService.java
@@ -338,4 +338,6 @@
     QRLoginResultVo loginWithSession(String token);
 
     Member findByUUID(String uuid);
-}
\ No newline at end of file
+
+    void registerHandler(Member user);
+}
diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java
index 5cf289a..489d7ea 100644
--- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java
@@ -313,6 +313,7 @@
      * @param member
      */
     @Transactional
+    @Override
     public void registerHandler(Member member) {
         member.setId(SnowFlake.getIdStr());
         //淇濆瓨浼氬憳
diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPackageServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPackageServiceImpl.java
index 92319c0..d82f943 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPackageServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPackageServiceImpl.java
@@ -1,5 +1,6 @@
 package cn.lili.modules.order.order.serviceimpl;
 
+import cn.hutool.core.util.ArrayUtil;
 import cn.lili.common.enums.ResultCode;
 import cn.lili.common.exception.ServiceException;
 import cn.lili.modules.order.order.entity.dos.OrderPackage;
@@ -8,9 +9,11 @@
 import cn.lili.modules.order.order.mapper.OrderPackageMapper;
 import cn.lili.modules.order.order.service.OrderPackageItemService;
 import cn.lili.modules.order.order.service.OrderPackageService;
+import cn.lili.modules.system.entity.dos.Logistics;
 import cn.lili.modules.system.entity.vo.Traces;
 import cn.lili.modules.system.service.LogisticsService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -54,8 +57,16 @@
             orderPackageVO.setOrderPackageItemList(orderPackageItemList);
             String str = orderPackage.getConsigneeMobile();
             str = str.substring(str.length() - 4);
-//            Traces traces = logisticsService.getLogisticTrack(orderPackage.getLogisticsCode(), orderPackage.getLogisticsNo(), str);
-//            orderPackageVO.setTraces(traces);
+            //涓嶉渶瑕佸彇鏄惁鎵撳紑鐨勫彲鑳藉瓨鍦ㄧ幇鍦ㄤ笉鍙戦�佸揩閫掗渶瑕佹煡璇㈢墿娴佷俊鎭�
+            List<Logistics> list = logisticsService.list(Wrappers.<Logistics>lambdaQuery()
+                    .eq(Logistics::getCode,
+                            orderPackage.getLogisticsCode()));
+            String logisticsId = orderPackage.getLogisticsCode();
+            if (ArrayUtil.isNotEmpty(list)) {
+                logisticsId = list.get(0).getId();
+            }
+            Traces traces = logisticsService.getLogisticTrack(logisticsId, orderPackage.getLogisticsNo(), str);
+            orderPackageVO.setTraces(traces);
             orderPackageVOS.add(orderPackageVO);
         });
 
diff --git a/framework/src/main/java/cn/lili/modules/search/service/EsGoodsSearchService.java b/framework/src/main/java/cn/lili/modules/search/service/EsGoodsSearchService.java
index 61930be..76b8d7b 100644
--- a/framework/src/main/java/cn/lili/modules/search/service/EsGoodsSearchService.java
+++ b/framework/src/main/java/cn/lili/modules/search/service/EsGoodsSearchService.java
@@ -1,6 +1,8 @@
 package cn.lili.modules.search.service;
 
+import cn.lili.base.Result;
 import cn.lili.common.vo.PageVO;
+import cn.lili.modules.lmk.domain.query.VideoGoodsEsQuery;
 import cn.lili.modules.search.entity.dos.EsGoodsIndex;
 import cn.lili.modules.search.entity.dos.EsGoodsRelatedInfo;
 import cn.lili.modules.search.entity.dto.EsGoodsSearchDTO;
@@ -59,4 +61,12 @@
      * @return 鍟嗗搧绱㈠紩
      */
     EsGoodsIndex getEsGoodsById(String id);
+
+    /**
+     * 鍟嗗搧鍒嗛〉锛屽彂甯冭棰戞椂鍏宠仈鍟嗗搧鐨勬煡璇�
+     *
+     * @param query
+     * @return
+     */
+    Result videoGoodsEsPage(VideoGoodsEsQuery query);
 }
diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java
index f752e4c..11aa047 100644
--- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java
@@ -3,12 +3,15 @@
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.core.util.ArrayUtil;
+import cn.lili.base.Result;
 import cn.lili.cache.Cache;
 import cn.lili.cache.CachePrefix;
 import cn.lili.common.exception.ServiceException;
+import cn.lili.common.security.context.UserContext;
 import cn.lili.common.vo.PageVO;
 import cn.lili.modules.goods.entity.enums.GoodsAuthEnum;
 import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
+import cn.lili.modules.lmk.domain.query.VideoGoodsEsQuery;
 import cn.lili.modules.search.entity.dos.EsGoodsIndex;
 import cn.lili.modules.search.entity.dos.EsGoodsRelatedInfo;
 import cn.lili.modules.search.entity.dto.EsGoodsSearchDTO;
@@ -29,6 +32,7 @@
 import org.elasticsearch.index.query.functionscore.FieldValueFactorFunctionBuilder;
 import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder;
 import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders;
+import org.elasticsearch.index.search.MultiMatchQuery;
 import org.elasticsearch.search.aggregations.*;
 import org.elasticsearch.search.aggregations.bucket.nested.ParsedNested;
 import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms;
@@ -38,6 +42,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
 import org.springframework.data.elasticsearch.core.*;
 import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
 import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
@@ -176,6 +181,38 @@
         return this.restTemplate.get(id, EsGoodsIndex.class);
     }
 
+    @Override
+    public Result videoGoodsEsPage(VideoGoodsEsQuery q) {
+        // 鍒ゆ柇鍟嗗搧绱㈠紩鏄惁瀛樺湪
+        if (!restTemplate.indexOps(EsGoodsIndex.class).exists()) {
+            return Result.ok();
+        }
+        // 鏍规嵁閿�閲忓�掑簭鎺掑垪
+        Pageable pageable = PageRequest.of(q.getPageNumber(), q.getPageSize(), Sort.by("buyCount").descending());
+
+        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
+        queryBuilder.withPageable(pageable);
+
+        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
+
+        // 鍏抽敭璇嶅尮閰嶅晢鍝佸悕绉般�佸晢鍝佺紪鍙�
+        if (!StringUtils.isEmpty(q.getKeyword())) {
+            boolQuery.must(QueryBuilders.multiMatchQuery(q.getKeyword(), "goodsName", "sn"));
+        }
+
+        if (q.getSearchFromSelfStore()) {
+            // 濡傛灉鍙煡鑷搴楅摵鍟嗗搧
+            boolQuery.must(QueryBuilders.termQuery("storeId", UserContext.getCurrentUser().getStoreId()));
+        }
+
+        queryBuilder.withQuery(boolQuery);
+
+        NativeSearchQuery query = queryBuilder.build();
+        SearchHits<EsGoodsIndex> searchHits = restTemplate.search(query, EsGoodsIndex.class);
+        List<EsGoodsIndex> data = searchHits.stream().map(hit -> hit.getContent()).collect(Collectors.toList());
+        return Result.ok().data(data).total(searchHits.getTotalHits());
+    }
+
     /**
      * 杞崲鎼滅储缁撴灉涓鸿仛鍚堝晢鍝佸睍绀轰俊鎭�
      *
diff --git a/framework/src/main/java/cn/lili/mybatis/BaseIdAndDeleteEntity.java b/framework/src/main/java/cn/lili/mybatis/BaseIdAndDeleteEntity.java
new file mode 100644
index 0000000..7ca9902
--- /dev/null
+++ b/framework/src/main/java/cn/lili/mybatis/BaseIdAndDeleteEntity.java
@@ -0,0 +1,40 @@
+package cn.lili.mybatis;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+
+/**
+ * 鏁版嵁搴撳熀纭�瀹炰綋绫�
+ *
+ * @author Chopper
+ * @version v1.0
+ * @since 2020/8/20 14:34
+ */
+@Data
+@JsonIgnoreProperties(value = { "handler", "fieldHandler"})
+@AllArgsConstructor
+@NoArgsConstructor
+public abstract class BaseIdAndDeleteEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+
+    @TableId
+    @ApiModelProperty(value = "鍞竴鏍囪瘑", hidden = true)
+    private String id;
+
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "鍒犻櫎鏍囧織 true/false 鍒犻櫎/鏈垹闄�", hidden = true)
+    private Boolean deleteFlag;
+
+}
diff --git a/framework/src/main/resources/mapper/lmk/KitchenTypeMapper.xml b/framework/src/main/resources/mapper/lmk/KitchenTypeMapper.xml
new file mode 100644
index 0000000..ce33f35
--- /dev/null
+++ b/framework/src/main/resources/mapper/lmk/KitchenTypeMapper.xml
@@ -0,0 +1,48 @@
+<?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.KitchenTypeMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.KitchenTypeVO">
+        <id column="id" property="id"/>
+        <result column="type_name" property="typeName" />
+        <result column="use_num" property="useNum" />
+        <result column="sort_num" property="sortNum" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            LKT.type_name,
+            LKT.use_num,
+            LKT.sort_num,
+            LKT.id
+        FROM
+            lmk_kitchen_type LKT
+        WHERE
+            LKT.id = #{id} AND LKT.delete_flag = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+        LKT.type_name,
+        LKT.use_num,
+        LKT.sort_num,
+        LKT.id
+        FROM
+        lmk_kitchen_type LKT
+        WHERE
+        LKT.delete_flag = 0
+        <if test="query.typeName != null and query.typeName != ''">
+            AND LKT.type_name LIKE CONCAT('%', #{query.typeName},'%')
+        </if>
+        order by LKT.sort_num asc
+    </select>
+
+</mapper>
diff --git a/framework/src/main/resources/mapper/lmk/KitchenVideoTypeRefMapper.xml b/framework/src/main/resources/mapper/lmk/KitchenVideoTypeRefMapper.xml
new file mode 100644
index 0000000..42268c3
--- /dev/null
+++ b/framework/src/main/resources/mapper/lmk/KitchenVideoTypeRefMapper.xml
@@ -0,0 +1,53 @@
+<?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.KitchenVideoTypeRefMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.KitchenVideoTypeRefVO">
+        <id column="id" property="id"/>
+        <result column="video_id" property="videoId" />
+        <result column="kitchen_type_id" property="kitchenTypeId" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            LKVTR.video_id,
+            LKVTR.kitchen_type_id,
+            LKVTR.id
+        FROM
+            lmk_kitchen_video_type_ref LKVTR
+        WHERE
+            LKVTR.id = #{id} AND LKVTR.delete_flag = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            LKVTR.video_id,
+            LKVTR.kitchen_type_id,
+            LKVTR.id
+        FROM
+            lmk_kitchen_video_type_ref LKVTR
+        WHERE
+            LKVTR.delete_flag = 0
+    </select>
+
+    <select id="getTypeByVideoIds" resultType="cn.lili.modules.lmk.domain.vo.KitchenVideoTypeVO">
+        SELECT
+        LKVTR.video_id,
+        LKT.id,
+        LKT.type_name
+        FROM
+        lmk_kitchen_video_type_ref LKVTR
+        JOIN lmk_kitchen_type LKT ON LKVTR.kitchen_type_id = LKT.id
+        WHERE
+        LKVTR.video_id IN <foreach collection="videoIds" open="(" item="videoId" close=")" separator=",">#{videoId}</foreach>
+    </select>
+
+</mapper>
diff --git a/framework/src/main/resources/mapper/lmk/ShareClickRecordMapper.xml b/framework/src/main/resources/mapper/lmk/ShareClickRecordMapper.xml
new file mode 100644
index 0000000..d55f048
--- /dev/null
+++ b/framework/src/main/resources/mapper/lmk/ShareClickRecordMapper.xml
@@ -0,0 +1,44 @@
+<?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.ShareClickRecordMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.ShareClickRecordVO">
+        <id column="id" property="id"/>
+        <result column="share_id" property="shareId" />
+        <result column="user_id" property="userId" />
+        <result column="click_time" property="clickTime" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            LSCR.share_id,
+            LSCR.user_id,
+            LSCR.click_time,
+            LSCR.id
+        FROM
+            lmk_share_click_record LSCR
+        WHERE
+            LSCR.id = #{id} AND LSCR.delete_flag = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            LSCR.share_id,
+            LSCR.user_id,
+            LSCR.click_time,
+            LSCR.id
+        FROM
+            lmk_share_click_record LSCR
+        WHERE
+            LSCR.delete_flag = 0
+    </select>
+
+</mapper>
diff --git a/framework/src/main/resources/mapper/lmk/ShareMapper.xml b/framework/src/main/resources/mapper/lmk/ShareMapper.xml
new file mode 100644
index 0000000..a16a2cb
--- /dev/null
+++ b/framework/src/main/resources/mapper/lmk/ShareMapper.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.ShareMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.ShareVO">
+        <id column="id" property="id"/>
+        <result column="share_type" property="shareType" />
+        <result column="ref_id" property="refId" />
+        <result column="share_user" property="shareUser" />
+        <result column="share_time" property="shareTime" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            LS.share_type,
+            LS.ref_id,
+            LS.share_user,
+            LS.share_time,
+            LS.id
+        FROM
+            lmk_share LS
+        WHERE
+            LS.id = #{id} AND LS.delete_flag = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            LS.share_type,
+            LS.ref_id,
+            LS.share_user,
+            LS.share_time,
+            LS.id
+        FROM
+            lmk_share LS
+        WHERE
+            LS.delete_flag = 0
+    </select>
+
+</mapper>
diff --git a/framework/src/main/resources/mapper/lmk/VideoGoodsMapper.xml b/framework/src/main/resources/mapper/lmk/VideoGoodsMapper.xml
new file mode 100644
index 0000000..ed34fd8
--- /dev/null
+++ b/framework/src/main/resources/mapper/lmk/VideoGoodsMapper.xml
@@ -0,0 +1,7 @@
+<?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.VideoGoodsMapper">
+
+
+
+</mapper>
diff --git a/framework/src/main/resources/mapper/lmk/VideoMapper.xml b/framework/src/main/resources/mapper/lmk/VideoMapper.xml
index b2bd6bd..523d764 100644
--- a/framework/src/main/resources/mapper/lmk/VideoMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/VideoMapper.xml
@@ -11,7 +11,55 @@
         <result column="video_file_key" property="videoFileKey" />
         <result column="video_fit" property="videoFit" />
         <result column="title" property="title" />
-        <result column="goods_id" property="goodsId" />
+        <result column="video_duration" property="videoDuration" />
+        <result column="recommend" property="recommend" />
+        <result column="status" property="status" />
+        <result column="play_num" property="playNum" />
+        <result column="collect_num" property="collectNum" />
+        <result column="comment_num" property="commentNum" />
+        <result column="weight" property="weight" />
+        <result column="audit_pass_time" property="auditPassTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="video_content_type" property="videoContentType" />
+        <result column="video_type" property="videoType" />
+        <result column="video_imgs" property="videoImgs" />
+        <collection property="goodsList" column="id" select="getVideoGoods" ofType="cn.lili.modules.lmk.domain.vo.VideoGoodsDetailVO"/>
+    </resultMap>
+
+    <resultMap id="VideoGoodsMap" type="cn.lili.modules.lmk.domain.vo.VideoGoodsDetailVO">
+        <result column="goods_id" property="goodsId"/>
+        <result column="goods_num" property="goodsNum"/>
+        <result column="goods_name" property="goodsName"/>
+        <result column="thumbnail" property="thumbnail"/>
+        <result column="price" property="price"/>
+    </resultMap>
+
+    <select id="getVideoGoods" parameterType="string" resultMap="VideoGoodsMap">
+        SELECT
+               LVG.goods_id,
+               LVG.goods_num,
+               LVG.order_num,
+               LG.goods_name,
+               LG.thumbnail,
+               LG.price
+        FROM
+             lmk_video_goods LVG
+             INNER JOIN li_goods LG ON LVG.goods_id = LG.id AND LG.market_enable = 'UPPER' AND LG.delete_flag = 0
+        WHERE
+             LVG.video_id = #{id} AND LVG.delete_flag = 0
+        ORDER BY
+            LVG.order_num ASC
+    </select>
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="KitchenVideoMap" type="cn.lili.modules.lmk.domain.vo.KitchenVideoVO">
+        <id column="id" property="id"/>
+        <result column="author_id" property="authorId" />
+        <result column="authorName" property="authorName" />
+        <result column="cover_url" property="coverUrl" />
+        <result column="video_file_key" property="videoFileKey" />
+        <result column="video_fit" property="videoFit" />
+        <result column="title" property="title" />
         <result column="goods_view_num" property="goodsViewNum" />
         <result column="video_duration" property="videoDuration" />
         <result column="goods_order_num" property="goodsOrderNum" />
@@ -37,6 +85,7 @@
         <result column="cover_url" property="coverFileKey" />
         <result column="video_file_key" property="videoFileKey" />
         <result column="video_fit" property="videoFit" />
+        <result column="video_duration" property="videoDuration" />
         <result column="title" property="title" />
         <result column="collect_num" property="collectNum" />
         <result column="comment_num" property="commentNum" />
@@ -44,6 +93,7 @@
         <result column="video_content_type" property="videoContentType" />
         <result column="video_type" property="videoType" />
         <result column="video_imgs" property="videoImgs" />
+        <collection property="goodsList" column="id" select="getVideoGoods" ofType="cn.lili.modules.lmk.domain.vo.VideoGoodsDetailVO"/>
     </resultMap>
 
 
@@ -180,6 +230,37 @@
             LEFT JOIN li_member LM ON LV.author_id = LM.id
         WHERE
             LV.delete_flag = 0 AND LV.status = '1' AND LV.video_type = #{query.videoType}
+    </select>
+    <select id="recommendHealthVideo" resultMap="WxResultMap">
+        SELECT
+            LV.author_id,
+            LV.cover_url,
+            LV.video_fit,
+            LV.video_duration,
+            LV.video_file_key,
+            LV.title,
+            LV.goods_view_num,
+            LV.goods_order_num,
+            LV.recommend,
+            LV.status,
+            LV.play_num,
+            LV.comment_num,
+            LV.collect_num,
+            LV.weight,
+            LV.audit_pass_time,
+            LV.update_time,
+            LV.video_content_type,
+            LV.video_type,
+            LV.video_imgs,
+            LV.id,
+            LAU.nick_name AS authorName,
+            LAU.avatar AS authorAvatar
+        FROM
+            lmk_video LV
+            LEFT JOIN li_admin_user LAU ON LV.author_id = LAU.id
+        WHERE
+            LV.delete_flag = 0 AND LV.status = '1' AND LV.video_type = #{query.videoType}
+        AND LV.video_content_type = 'video'
     </select>
 
 
@@ -323,29 +404,19 @@
         <result column="video_fit" property="videoFit" />
         <result column="title" property="title" />
         <result column="video_duration" property="videoDuration" />
-        <result column="goods_id" property="goodsId" />
+        <result column="video_imgs" property="videoImgs" />
+        <result column="video_content_type" property="videoContentType" />
+        <collection property="goodsList" column="id" select="getVideoGoods" ofType="cn.lili.modules.lmk.domain.vo.VideoGoodsDetailVO"/>
     </resultMap>
 
     <select id="wxDetail" resultMap="WxEditResultMap">
         SELECT
-            LV.author_id,
             LV.cover_url,
             LV.video_fit,
             LV.video_duration,
             LV.video_file_key,
             LV.title,
-            LV.goods_view_num,
-            LV.goods_order_num,
-            LV.recommend,
-            LV.status,
-            LV.play_num,
-            LV.comment_num,
-            LV.collect_num,
-            LV.weight,
-            LV.audit_pass_time,
-            LV.update_time,
             LV.video_content_type,
-            LV.video_type,
             LV.video_imgs,
             LV.id
         FROM
@@ -353,5 +424,85 @@
         WHERE
             LV.delete_flag = 0 AND LV.id = #{id}
     </select>
+    <select id="healthPage" resultMap="BaseResultMap">
+        SELECT
+        LV.author_id,
+        LV.cover_url,
+        LV.video_fit,
+        LV.video_duration,
+        LV.video_file_key,
+        LV.title,
+        LV.goods_view_num,
+        LV.goods_order_num,
+        LV.recommend,
+        LV.status,
+        LV.play_num,
+        LV.collect_num,
+        LV.comment_num,
+        LV.weight,
+        LV.audit_pass_time,
+        LV.update_time,
+        LV.video_content_type,
+        LV.video_type,
+        LV.video_imgs,
+        LV.id,
+        LM.nick_name as authorName
+        FROM
+        lmk_video LV
+        LEFT JOIN li_member LM ON LV.author_id = LM.id
+        <if test="query.tagList != null and query.tagList.size > 0">
+            INNER JOIN (
+            SELECT DISTINCT video_id
+            FROM lmk_video_tag_ref
+            WHERE video_tag_id IN
+            <foreach collection="query.tagList" open="(" item="tagId" close=")" separator=",">#{tagId}</foreach>
+            ) AS LVT ON LV.id = LVT.video_id
+        </if>
+        WHERE
+        LV.delete_flag = 0 AND LV.video_type = #{query.videoType}
+        <if test="query.title != null and query.title != ''">AND LV.title LIKE CONCAT('%', #{query.title}, '%')</if>
+        <if test="query.authorId != null and query.authorId != ''">AND LV.author_id = #{query.authorId}</if>
+        <if test="query.status != null and query.status != ''">AND LV.status = #{query.status}</if>
+    </select>
 
+    <select id="kitchenPage" resultMap="KitchenVideoMap">
+        SELECT
+        LV.author_id,
+        LV.cover_url,
+        LV.video_fit,
+        LV.video_duration,
+        LV.video_file_key,
+        LV.title,
+        LV.goods_view_num,
+        LV.goods_order_num,
+        LV.recommend,
+        LV.status,
+        LV.play_num,
+        LV.collect_num,
+        LV.comment_num,
+        LV.weight,
+        LV.audit_pass_time,
+        LV.update_time,
+        LV.video_content_type,
+        LV.video_type,
+        LV.video_imgs,
+        LV.id,
+        LM.nick_name as authorName
+        FROM
+        lmk_video LV
+        LEFT JOIN li_member LM ON LV.author_id = LM.id
+        <if test="query.typeList != null and query.typeList.size > 0">
+            INNER JOIN (
+            SELECT DISTINCT video_id
+            FROM lmk_kitchen_video_type_ref
+            WHERE kitchen_type_id IN
+            <foreach collection="query.typeList" open="(" item="tagId" close=")" separator=",">#{tagId}</foreach>
+            ) AS LVT ON LV.id = LVT.video_id
+        </if>
+        WHERE
+        LV.delete_flag = 0 AND LV.video_type = #{query.videoType}
+        <if test="query.title != null and query.title != ''">AND LV.title LIKE CONCAT('%', #{query.title}, '%')</if>
+        <if test="query.authorId != null and query.authorId != ''">AND LV.author_id = #{query.authorId}</if>
+        <if test="query.status != null and query.status != ''">AND LV.status = #{query.status}</if>
+    </select>
 </mapper>
diff --git a/manager-api/src/main/java/cn/lili/controller/goods/GoodsManagerController.java b/manager-api/src/main/java/cn/lili/controller/goods/GoodsManagerController.java
index 18d8248..b252dab 100644
--- a/manager-api/src/main/java/cn/lili/controller/goods/GoodsManagerController.java
+++ b/manager-api/src/main/java/cn/lili/controller/goods/GoodsManagerController.java
@@ -5,6 +5,7 @@
 import cn.lili.common.enums.ResultCode;
 import cn.lili.common.enums.ResultUtil;
 import cn.lili.common.exception.ServiceException;
+import cn.lili.common.utils.StringUtils;
 import cn.lili.common.vo.ResultMessage;
 import cn.lili.modules.goods.entity.dos.Goods;
 import cn.lili.modules.goods.entity.dos.GoodsSku;
@@ -14,6 +15,7 @@
 import cn.lili.modules.goods.entity.vos.GoodsVO;
 import cn.lili.modules.goods.service.GoodsService;
 import cn.lili.modules.goods.service.GoodsSkuService;
+import cn.lili.utils.COSUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -25,6 +27,8 @@
 import javax.validation.constraints.NotEmpty;
 import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * 绠$悊绔�,鍟嗗搧绠$悊鎺ュ彛
@@ -47,6 +51,9 @@
     @Autowired
     private GoodsSkuService goodsSkuService;
 
+    @Autowired
+    private COSUtil cosUtil;
+
     @ApiOperation(value = "鍒嗛〉鑾峰彇")
     @GetMapping(value = "/list")
     public ResultMessage<IPage<Goods>> getByPage(GoodsSearchParams goodsSearchParams) {
@@ -63,7 +70,18 @@
     @GetMapping(value = "/auth/list")
     public ResultMessage<IPage<Goods>> getAuthPage(GoodsSearchParams goodsSearchParams) {
         goodsSearchParams.setAuthFlag(GoodsAuthEnum.TOBEAUDITED.name());
-        return ResultUtil.data(goodsService.queryByParams(goodsSearchParams));
+        IPage<Goods> page = goodsService.queryByParams(goodsSearchParams);
+        page.getRecords().forEach(item -> {
+            String original = item.getOriginal();
+            String goodsVideo = item.getGoodsVideo();
+            if (StringUtils.isNotBlank(original)&&!original.contains("http")) {
+                item.setOriginal(cosUtil.getPreviewUrl(original));
+            }
+            if (StringUtils.isNotBlank(goodsVideo)&&!goodsVideo.contains("http")) {
+                item.setGoodsVideo(cosUtil.getPreviewUrl(goodsVideo));
+            }
+        });
+        return ResultUtil.data(page);
     }
 
     @PreventDuplicateSubmissions
diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/HealthController.java b/manager-api/src/main/java/cn/lili/controller/lmk/HealthController.java
new file mode 100644
index 0000000..f983a29
--- /dev/null
+++ b/manager-api/src/main/java/cn/lili/controller/lmk/HealthController.java
@@ -0,0 +1,44 @@
+package cn.lili.controller.lmk;
+
+import cn.lili.base.Result;
+import cn.lili.group.Add;
+import cn.lili.group.Update;
+import cn.lili.modules.lmk.domain.form.HealthVideoForm;
+import cn.lili.modules.lmk.domain.query.HealthVideoQuery;
+import cn.lili.modules.lmk.service.VideoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+@Validated
+@RequiredArgsConstructor
+@Api(value = "澶у仴搴�", tags = "澶у仴搴�")
+@RestController
+@RequestMapping("/manager/lkm/health")
+public class HealthController {
+    private final VideoService videoService;
+
+    @PostMapping("/healthVideo")
+    @ApiOperation(value = "澶у仴搴疯棰戝彂甯�", notes = "澶у仴搴疯棰戝彂甯�")
+    public Result healthVideo(@RequestBody @Validated(Add.class) HealthVideoForm form) {
+        return videoService.healthVideo(form);
+    }
+    @PostMapping("/updateHealthVideo")
+    @ApiOperation(value = "澶у仴搴疯棰戝彂甯�", notes = "澶у仴搴疯棰戝彂甯�")
+    public Result updateHealthVideo(@RequestBody @Validated(Update.class) HealthVideoForm form) {
+        return videoService.updateHealthVideo(form);
+    }
+    @PostMapping("/page")
+    @ApiOperation(value = "澶у仴搴疯棰戝垪琛�", notes = "澶у仴搴疯棰戝垪琛�")
+    public Result page(@RequestBody HealthVideoQuery query) {
+        return videoService.healthPage(query);
+    }
+    //鍒犻櫎澶у帹绁炶棰�
+    @PostMapping("/del/{id}")
+    @ApiOperation(value = "鍒犻櫎澶у帹绁炶棰�", notes = "鍒犻櫎澶у帹绁炶棰�")
+    public Result delHealth(@PathVariable("id") String id) {
+        return videoService.delHealth(id);
+    }
+}
diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/KitchenTypeController.java b/manager-api/src/main/java/cn/lili/controller/lmk/KitchenTypeController.java
new file mode 100644
index 0000000..d2c3d80
--- /dev/null
+++ b/manager-api/src/main/java/cn/lili/controller/lmk/KitchenTypeController.java
@@ -0,0 +1,76 @@
+package cn.lili.controller.lmk;
+
+import cn.lili.group.Update;
+import cn.lili.group.Add;
+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.modules.lmk.service.KitchenTypeService;
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.form.KitchenTypeForm;
+import cn.lili.modules.lmk.domain.query.KitchenTypeQuery;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 鍘ㄧ绫诲瀷 鍓嶇鎺у埗鍣�
+ *
+ * @author wp
+ * @since 2025-06-13
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "鍘ㄧ绫诲瀷", tags = "鍘ㄧ绫诲瀷绠$悊")
+@RestController
+@RequestMapping("/manager/lmk/kitchen-type")
+public class KitchenTypeController {
+
+    private final KitchenTypeService kitchenTypeService;
+
+    @PostMapping
+    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
+    public Result add(@RequestBody @Validated(Add.class) KitchenTypeForm form) {
+        return kitchenTypeService.add(form);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    public Result update(@RequestBody @Validated(Update.class) KitchenTypeForm form) {
+        return kitchenTypeService.update(form);
+    }
+
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
+    public Result removeById(@PathVariable("id") String id) {
+        return kitchenTypeService.removeById(id);
+    }
+
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
+    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
+        return kitchenTypeService.remove(ids);
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    public Result page(KitchenTypeQuery query) {
+        return kitchenTypeService.page(query);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+    public Result detail(@PathVariable("id") String id) {
+        return kitchenTypeService.detail(id);
+    }
+
+    @GetMapping("/list")
+    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
+    public Result list() {
+        return kitchenTypeService.all();
+    }
+}
diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/KitchenVideoController.java b/manager-api/src/main/java/cn/lili/controller/lmk/KitchenVideoController.java
new file mode 100644
index 0000000..1b2c182
--- /dev/null
+++ b/manager-api/src/main/java/cn/lili/controller/lmk/KitchenVideoController.java
@@ -0,0 +1,59 @@
+package cn.lili.controller.lmk;
+
+import cn.lili.base.Result;
+import cn.lili.group.Add;
+import cn.lili.group.Update;
+import cn.lili.modules.lmk.domain.form.HealthVideoForm;
+import cn.lili.modules.lmk.domain.form.KitchenTypeForm;
+import cn.lili.modules.lmk.domain.form.KitchenVideoForm;
+import cn.lili.modules.lmk.domain.query.HealthVideoQuery;
+import cn.lili.modules.lmk.domain.query.KitchenTypeQuery;
+import cn.lili.modules.lmk.domain.query.KitchenVideoQuery;
+import cn.lili.modules.lmk.service.KitchenTypeService;
+import cn.lili.modules.lmk.service.VideoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 鍘ㄧ瑙嗛 鍓嶇鎺у埗鍣�
+ *
+ * @author wp
+ * @since 2025-06-13
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "鍘ㄧ瑙嗛", tags = "鍘ㄧ瑙嗛绠$悊")
+@RestController
+@RequestMapping("/manager/lmk/kitchen-video")
+public class KitchenVideoController {
+
+    private final VideoService videoService;
+
+   @PostMapping("/addKitchenVideo")
+    @ApiOperation(value = "鍘ㄧ瑙嗛鍙戝竷", notes = "鍘ㄧ瑙嗛鍙戝竷")
+    public Result addKitchenVideo(@RequestBody @Validated(Add.class) KitchenVideoForm form) {
+        return videoService.addKitchenVideo(form);
+    }
+    @PostMapping("/updateKitchenVideo")
+    @ApiOperation(value = "鍘ㄧ瑙嗛淇敼", notes = "鍘ㄧ瑙嗛淇敼")
+    public Result updateKitchenVideo(@RequestBody @Validated(Update.class) KitchenVideoForm form) {
+        return videoService.updateKitchenVideo(form);
+    }
+    @PostMapping("/page")
+    @ApiOperation(value = "鍘ㄧ瑙嗛鍒楄〃", notes = "鍘ㄧ瑙嗛鍒楄〃")
+    public Result page(@RequestBody KitchenVideoQuery query) {
+        return videoService.KitchenVideoQuery(query);
+    }
+
+    @PostMapping("/del/{id}")
+    @ApiOperation(value = "鍒犻櫎澶у帹绁炶棰�", notes = "鍒犻櫎澶у帹绁炶棰�")
+    public Result delKitchen(@PathVariable("id") String id) {
+        return videoService.delKitchen(id);
+    }
+}
diff --git a/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java b/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java
index 48a9b03..8142cdf 100644
--- a/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java
+++ b/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java
@@ -8,6 +8,7 @@
 import cn.lili.common.exception.ServiceException;
 import cn.lili.common.security.OperationalJudgment;
 import cn.lili.common.security.context.UserContext;
+import cn.lili.common.utils.StringUtils;
 import cn.lili.common.vo.ResultMessage;
 import cn.lili.modules.goods.entity.dos.Goods;
 import cn.lili.modules.goods.entity.dos.GoodsSku;
@@ -25,6 +26,7 @@
 import cn.lili.modules.statistics.aop.enums.PageViewEnum;
 import cn.lili.modules.store.entity.dos.StoreDetail;
 import cn.lili.modules.store.service.StoreDetailService;
+import cn.lili.utils.COSUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -70,6 +72,8 @@
      */
     @Autowired
     private GoodsSkuService goodsSkuService;
+    @Autowired
+    private COSUtil cosUtil;
 
 
     @ApiOperation(value = "鍒嗛〉鑾峰彇鍟嗗搧鍒楄〃")
@@ -78,7 +82,16 @@
         //鑾峰彇褰撳墠鐧诲綍鍟嗗璐﹀彿
         String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId();
         goodsSearchParams.setStoreId(storeId);
-        return ResultUtil.data(goodsService.queryByParams(goodsSearchParams));
+        IPage<Goods> page = goodsService.queryByParams(goodsSearchParams);
+        page.getRecords().forEach(goodsVO -> {
+            if (StringUtils.isNotBlank(goodsVO.getOriginal())&& !goodsVO.getOriginal().contains("http")) {
+                goodsVO.setOriginal(cosUtil.getPreviewUrl(goodsVO.getOriginal()));
+            }
+            if (StringUtils.isNotBlank(goodsVO.getGoodsVideo())&& !goodsVO.getGoodsVideo().contains("http")) {
+                goodsVO.setGoodsVideo(cosUtil.getPreviewUrl(goodsVO.getGoodsVideo()));
+            }
+        });
+        return ResultUtil.data(page);
     }
 
     @ApiOperation(value = "鍒嗛〉鑾峰彇鍟嗗搧Sku鍒楄〃")

--
Gitblit v1.8.0