From 4e6d6e7c8e4ca42e96528a71162f5e58e473f652 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期五, 11 七月 2025 09:37:15 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 framework/src/main/java/cn/lili/modules/lmk/service/impl/GoodsTagServiceImpl.java             |   92 +
 framework/src/main/java/cn/lili/modules/lmk/domain/form/FileInfoForm.java                     |    4 
 framework/src/main/resources/mapper/lmk/PriceChangeMapper.xml                                 |   68 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/PriceChangeQuery.java                |   17 
 framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java               |    9 
 framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java            |   72 
 buyer-api/src/main/java/cn/lili/controller/lmk/MySubscribeController.java                     |    2 
 consumer/src/main/resources/application.yml                                                   |    6 
 framework/src/main/java/cn/lili/modules/lmk/mapper/CommissionRecordMapper.java                |   32 
 framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java                   |   23 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/GoodsSimilarlyQuery.java             |   27 
 seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java                   |    1 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/PriceChangeVO.java                      |   75 
 framework/src/main/java/cn/lili/modules/member/entity/vo/MemberVO.java                        |    4 
 framework/src/main/java/cn/lili/modules/lmk/enums/general/ChangePriceAudioStatusEnum.java     |   29 
 lmk-job/src/main/java/cn/lili/handler/EveryMinuteExecute.java                                 |   17 
 framework/src/main/resources/mapper/lmk/MemberMapper.xml                                      |   41 
 framework/src/main/java/cn/lili/modules/lmk/domain/form/PriceChangeForm.java                  |   79 +
 framework/src/main/java/cn/lili/modules/search/entity/dto/EsGoodsSearchDTO.java               |    3 
 framework/src/main/java/cn/lili/modules/lmk/service/PriceChangeService.java                   |   65 
 buyer-api/src/main/java/cn/lili/controller/lmk/SupplierController.java                        |  130 +
 framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java           |    3 
 framework/src/main/java/cn/lili/modules/lmk/domain/entity/MemberTag.java                      |   13 
 framework/src/main/java/cn/lili/elasticsearch/BaseElasticsearchService.java                   |    8 
 lmk-job/src/main/java/cn/lili/handler/impl/statistics/MemberStatisticsExecute.java            |   55 
 framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java                       |    2 
 framework/src/main/java/cn/lili/modules/lmk/domain/entity/CommissionRecord.java               |   92 +
 framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java               |    4 
 framework/src/main/java/cn/lili/modules/lmk/mapper/MemberTagMapper.java                       |   16 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/TagQuery.java                        |    2 
 lmk-job/src/main/java/cn/lili/handler/impl/promotion/PromotionEverydayExecute.java            |   85 +
 framework/src/main/java/cn/lili/modules/lmk/service/impl/PriceChangeServiceImpl.java          |  119 +
 framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java                           |   17 
 framework/src/main/java/cn/lili/modules/order/cart/render/impl/CommissionRender.java          |   21 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/CommissionRecordVO.java                 |  100 +
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/GoodsTagVO.java                         |   33 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/CommissionRecordQuery.java           |   17 
 lmk-job/src/main/java/cn/lili/handler/impl/order/OrderEveryDayTaskExecute.java                |  287 +++
 framework/src/main/java/cn/lili/modules/lmk/enums/general/ChangePriceOperationTypeEnum.java   |   28 
 framework/src/main/java/cn/lili/modules/lmk/domain/form/MemberTagForm.java                    |   52 
 lmk-job/src/main/java/cn/lili/handler/EveryDayExecute.java                                    |   18 
 framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java                |  100 +
 framework/src/main/resources/mapper/lmk/CustomerMapper.xml                                    |   10 
 framework/src/main/java/cn/lili/modules/lmk/mapper/PriceChangeMapper.java                     |   32 
 framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java          |    4 
 framework/src/main/resources/mapper/lmk/VideoMapper.xml                                       |  117 +
 buyer-api/src/main/java/cn/lili/controller/store/StoreBuyerController.java                    |   50 
 lmk-job/src/main/java/cn/lili/handler/impl/broadcast/BroadcastExecute.java                    |   25 
 buyer-api/src/main/java/cn/lili/controller/order/AfterSaleBuyerController.java                |   13 
 framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java                         |    8 
 framework/src/main/java/cn/lili/modules/permission/entity/dos/AdminUser.java                  |    2 
 framework/src/main/resources/mapper/lmk/TagMapper.xml                                         |    5 
 buyer-api/src/main/java/cn/lili/controller/lmk/CustomerController.java                        |   24 
 framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java     |    1 
 lmk-job/src/main/java/cn/lili/handler/impl/view/PageViewStatisticsExecute.java                |  195 ++
 manager-api/src/main/java/cn/lili/controller/lmk/CustomerController.java                      |   36 
 consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java                             |    2 
 framework/src/main/java/cn/lili/modules/member/service/FootprintService.java                  |    5 
 framework/src/main/resources/mapper/lmk/CommissionRecordMapper.xml                            |   86 +
 buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java                           |   27 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoQuery.java                      |   21 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoHistoryVO.java                     |   26 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoHistoryQuery.java               |   18 
 framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java                         |    2 
 lmk-job/src/main/java/cn/lili/handler/impl/hotwords/HotWordsEveryDayTaskExecute.java          |   86 +
 framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java                    |    2 
 framework/src/main/java/cn/lili/modules/lmk/domain/entity/GoodsTag.java                       |   13 
 lmk-job/src/main/java/cn/lili/handler/impl/order/RechargeOrderTaskExecute.java                |   61 
 framework/src/main/resources/mapper/lmk/MemberTagMapper.xml                                   |   43 
 buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java                    |   11 
 framework/src/main/resources/mapper/lmk/MySubscribeMapper.xml                                 |    3 
 lmk-job/src/main/java/cn/lili/handler/impl/store/StoreRatingExecute.java                      |   60 
 framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java                 |    3 
 framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java         |   63 
 framework/src/main/java/cn/lili/modules/member/entity/dto/ManagerMemberEditDTO.java           |    3 
 framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java                   |   15 
 framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java                 |    4 
 framework/src/main/java/cn/lili/modules/lmk/domain/entity/PriceChange.java                    |   72 
 framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java               |   24 
 seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java                   |    3 
 framework/src/main/java/cn/lili/modules/order/order/entity/dto/SupplierOrderSearchParams.java |  227 ++
 lmk-job/src/main/java/cn/lili/job/TimedTaskJobHandler.java                                    |  104 +
 framework/src/main/java/cn/lili/modules/lmk/domain/form/GoodsTagForm.java                     |   51 
 framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java             |   25 
 framework/src/main/java/cn/lili/modules/goods/entity/enums/GoodsSalesModeEnum.java            |    1 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/MemberTagVO.java                        |   28 
 framework/src/main/java/cn/lili/modules/lmk/service/GoodsTagService.java                      |   51 
 framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSkuDTO.java                     |   16 
 framework/src/main/java/cn/lili/modules/lmk/service/CommissionRecordService.java              |   65 
 lmk-job/src/main/java/cn/lili/handler/impl/order/CancelOrderTaskExecute.java                  |   61 
 lmk-job/src/main/java/cn/lili/handler/impl/store/StoreExecute.java                            |   49 
 lmk-job/src/main/java/cn/lili/handler/impl/statistics/OnlineMemberStatistics.java             |  114 +
 framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java                           |   19 
 framework/src/main/resources/mapper/lmk/GoodsTagMapper.xml                                    |   15 
 framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java      |   23 
 lmk-job/src/main/java/cn/lili/handler/EveryHourExecute.java                                   |   17 
 framework/src/main/java/cn/lili/modules/lmk/service/MemberTagService.java                     |   29 
 framework/src/main/java/cn/lili/modules/lmk/service/impl/CommissionRecordServiceImpl.java     |  119 +
 framework/src/main/java/cn/lili/modules/lmk/service/impl/MemberTagServiceImpl.java            |  158 ++
 framework/src/main/resources/mapper/lmk/MyCollectMapper.xml                                   |    3 
 framework/src/main/java/cn/lili/modules/lmk/mapper/GoodsTagMapper.java                        |   16 
 lmk-job/src/main/java/cn/lili/handler/impl/coupon/CouponExecute.java                          |   56 
 lmk-job/src/main/java/cn/lili/handler/impl/goods/GoodsExecute.java                            |   48 
 lmk-job/src/main/java/cn/lili/handler/impl/promotion/MemberCouponSignEverydayExecute.java     |   35 
 /dev/null                                                                                     |   51 
 framework/src/main/java/cn/lili/modules/goods/mapper/GoodsSkuMapper.java                      |    2 
 framework/src/main/java/cn/lili/modules/lmk/domain/form/CommissionRecordForm.java             |  104 +
 107 files changed, 4,321 insertions(+), 209 deletions(-)

diff --git a/buyer-api/src/main/java/cn/lili/controller/lmk/CustomerController.java b/buyer-api/src/main/java/cn/lili/controller/lmk/CustomerController.java
index 1478a62..4a7a4d2 100644
--- a/buyer-api/src/main/java/cn/lili/controller/lmk/CustomerController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/lmk/CustomerController.java
@@ -3,13 +3,13 @@
 import cn.lili.base.Result;
 import cn.lili.group.Add;
 import cn.lili.group.Update;
-import cn.lili.modules.lmk.domain.form.CustomerTagForm;
+import cn.lili.modules.lmk.domain.form.MemberTagForm;
 import cn.lili.modules.lmk.domain.form.CustomerTagRefForm;
 import cn.lili.modules.lmk.domain.query.CustomerQuery;
 import cn.lili.modules.lmk.domain.query.CustomerTagQuery;
 import cn.lili.modules.lmk.service.CustomerService;
 import cn.lili.modules.lmk.service.CustomerTagRefService;
-import cn.lili.modules.lmk.service.CustomerTagService;
+import cn.lili.modules.lmk.service.MemberTagService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -27,7 +27,7 @@
 public class CustomerController {
 
     private final CustomerService customerService;
-    private final CustomerTagService customerTagService;
+    private final MemberTagService memberTagService;
     private final CustomerTagRefService customerTagRefService;
 
     @ApiOperation(value = "鍟嗛摵涓嬫媺鍒楄〃")
@@ -45,39 +45,39 @@
 
     @PostMapping("/addTag")
     @ApiOperation(value = "娣诲姞鏍囩", notes = "娣诲姞鏍囩")
-    public Result add(@RequestBody @Validated(Add.class) CustomerTagForm form) {
-        return customerTagService.add(form);
+    public Result add(@RequestBody @Validated(Add.class) MemberTagForm form) {
+        return memberTagService.add(form);
     }
 
     @PutMapping("/editTag")
     @ApiOperation(value = "淇敼鏍囩", notes = "淇敼鏍囩")
-    public Result update(@RequestBody @Validated(Update.class) CustomerTagForm form) {
-        return customerTagService.update(form);
+    public Result update(@RequestBody @Validated(Update.class) MemberTagForm form) {
+        return memberTagService.update(form);
     }
 
     @DeleteMapping("/tag/{id}")
     @ApiOperation(value = "ID鍒犻櫎鏍囩", notes = "ID鍒犻櫎")
     public Result removeById(@PathVariable("id") String id) {
-        return customerTagService.removeById(id);
+        return memberTagService.removeById(id);
     }
 
 
     @GetMapping("/tagList")
     @ApiOperation(value = "鏍囩鍒楄〃", notes = "鏍囩鍒楄〃")
     public Result list() {
-        return customerTagService.all();
+        return memberTagService.all();
     }
     @GetMapping("/pageTagList")
     @ApiOperation(value = "鍒嗛〉鏍囩鍒楄〃", notes = "鏍囩鍒楄〃")
     public Result pageList(CustomerTagQuery query) {
-        return customerTagService.page(query);
+        return memberTagService.page(query);
     }
 
 
     @PostMapping("/customerAddTag")
     @ApiOperation(value = "娣诲姞瀹㈡埛鏍囩鏍囪瘑", notes = "娣诲姞瀹㈡埛鏍囩鏍囪瘑")
-    public Result addCustomerTag(@RequestBody @Validated(Add.class) CustomerTagForm form) {
-        return customerTagService.addCustomerTag(form);
+    public Result addCustomerTag(@RequestBody @Validated(Add.class) MemberTagForm form) {
+        return memberTagService.addMemberTag(form);
     }
 
 //    @PostMapping("/customerAddTag")
diff --git a/buyer-api/src/main/java/cn/lili/controller/lmk/MySubscribeController.java b/buyer-api/src/main/java/cn/lili/controller/lmk/MySubscribeController.java
index c741b90..88446a9 100644
--- a/buyer-api/src/main/java/cn/lili/controller/lmk/MySubscribeController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/lmk/MySubscribeController.java
@@ -38,7 +38,7 @@
     }
 
     @GetMapping("/page")
-    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    @ApiOperation(value = "鎴戠殑鍏虫敞鐢ㄦ埛鍒嗛〉", notes = "鎴戠殑鍏虫敞鐢ㄦ埛鍒嗛〉")
     public Result page(MySubscribeQuery query) {
         return mySubscribeService.page(query);
     }
diff --git a/buyer-api/src/main/java/cn/lili/controller/lmk/SupplierController.java b/buyer-api/src/main/java/cn/lili/controller/lmk/SupplierController.java
new file mode 100644
index 0000000..637d39a
--- /dev/null
+++ b/buyer-api/src/main/java/cn/lili/controller/lmk/SupplierController.java
@@ -0,0 +1,130 @@
+package cn.lili.controller.lmk;
+
+import cn.lili.common.enums.ResultUtil;
+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.vos.CategoryVO;
+import cn.lili.modules.goods.service.CategoryService;
+import cn.lili.modules.member.entity.dos.Clerk;
+import cn.lili.modules.member.service.ClerkService;
+import cn.lili.modules.member.service.StoreLogisticsService;
+import cn.lili.modules.order.order.entity.dto.PartDeliveryParamsDTO;
+import cn.lili.modules.order.order.entity.dto.SupplierOrderSearchParams;
+import cn.lili.modules.order.order.entity.vo.OrderDetailVO;
+import cn.lili.modules.order.order.entity.vo.OrderSimpleXcxVO;
+import cn.lili.modules.order.order.service.OrderService;
+import cn.lili.modules.store.service.StoreDetailService;
+import cn.lili.modules.system.entity.vo.StoreLogisticsVO;
+import cn.lili.utils.COSUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+import java.util.Objects;
+
+@Validated
+@RequiredArgsConstructor
+@Api(value = "灏忕▼搴忓晢鎴风鎺ュ彛", tags = "灏忕▼搴忓晢鎴风鎺ュ彛")
+@RestController
+@RequestMapping("/buyer/lmk/supplier")
+public class SupplierController {
+    /**
+     * 鍒嗙被
+     */
+    @Autowired
+    private CategoryService categoryService;
+    /**
+     * 搴楅摵璇︽儏
+     */
+    @Autowired
+    private StoreDetailService storeDetailService;
+    /**
+     * 鐗╂祦鍏徃
+     */
+    @Autowired
+    private StoreLogisticsService storeLogisticsService;
+    /**
+     * 璁㈠崟
+     */
+    @Autowired
+    private OrderService orderService;
+
+    @Autowired
+    private COSUtil cosUtil;
+    @Autowired
+    private ClerkService clerkService;
+
+    @ApiOperation(value = "鑾峰彇搴楅摵缁忚惀鐨勫垎绫�")
+    @GetMapping(value = "/allCategery")
+    public ResultMessage<List<CategoryVO>> getListAll() {
+
+        String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId();
+        if (StringUtils.isEmpty(storeId)) {
+            Clerk clerk = clerkService.getClerkByMemberId(UserContext.getCurrentUserId());
+            storeId = clerk.getStoreId();
+        }
+
+        //鑾峰彇搴楅摵缁忚惀鑼冨洿
+        String goodsManagementCategory = storeDetailService.getStoreDetail(storeId).getGoodsManagementCategory();
+        return ResultUtil.data(this.categoryService.getStoreCategory(goodsManagementCategory.split(",")));
+    }
+
+    @ApiOperation(value = "鏌ヨ浼氬憳璁㈠崟鍒楄〃")
+    @GetMapping("/orderList")
+    public ResultMessage<IPage<OrderSimpleXcxVO>> orderList(SupplierOrderSearchParams orderSearchParams) {
+        String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId();
+        if (StringUtils.isEmpty(storeId)) {
+            Clerk clerk = clerkService.getClerkByMemberId(UserContext.getCurrentUserId());
+            orderSearchParams.setStoreId(clerk.getStoreId());
+        } else {
+            orderSearchParams.setStoreId(storeId);
+        }
+        return ResultUtil.data(orderService.querySupplierOrderParams(orderSearchParams));
+    }
+
+    @ApiOperation(value = "璁㈠崟鏄庣粏")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "orderSn", value = "璁㈠崟缂栧彿", required = true, dataType = "String", paramType = "path")
+    })
+    @GetMapping(value = "/orderDetail/{orderSn}")
+    public ResultMessage<OrderDetailVO> detail(@NotNull @PathVariable String orderSn) {
+        OperationalJudgment.judgment(orderService.getBySn(orderSn));
+        OrderDetailVO orderDetailVO = orderService.queryDetail(orderSn);
+        orderDetailVO.getOrderItems().forEach(orderItem -> {
+            String image = orderItem.getImage();
+            if (StringUtils.isNotBlank(image) && !image.contains("http")) {
+                orderItem.setImage(cosUtil.getPreviewUrl(image));
+            }
+        });
+        return ResultUtil.data(orderDetailVO);
+    }
+
+    @ApiOperation(value = "鑾峰彇鍟嗗宸查�夋嫨鐗╂祦鍏徃鍒楄〃")
+    @GetMapping("/getChecked")
+    public ResultMessage<List<StoreLogisticsVO>> getChecked() {
+        String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId();
+        return ResultUtil.data(storeLogisticsService.getStoreSelectedLogistics(storeId));
+    }
+
+    @ApiOperation(value = "璁㈠崟鍖呰9鍙戣揣")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "orderSn", value = "璁㈠崟sn", required = true, dataType = "String", paramType = "path"),
+            @ApiImplicitParam(name = "logisticsNo", value = "鍙戣揣鍗曞彿", required = true, dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "logisticsId", value = "鐗╂祦鍏徃", required = true, dataType = "String", paramType = "query")
+    })
+    @PostMapping(value = "/{orderSn}/partDelivery")
+    public ResultMessage<Object> delivery(@RequestBody PartDeliveryParamsDTO partDeliveryParamsDTO) {
+        return ResultUtil.data(orderService.partDelivery(partDeliveryParamsDTO));
+    }
+
+}
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 8078d3f..32fc3b6 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
@@ -1,21 +1,22 @@
 package cn.lili.controller.lmk;
 
-import cn.lili.group.Update;
+import cn.lili.base.Result;
 import cn.lili.group.Add;
+import cn.lili.group.Update;
 import cn.lili.modules.lmk.domain.form.ThumbsUpRecordForm;
 import cn.lili.modules.lmk.domain.form.VideoFootPrintForm;
 import cn.lili.modules.lmk.domain.form.VideoHomePageInfoForm;
 import cn.lili.modules.lmk.domain.form.WxVideoForm;
 import cn.lili.modules.lmk.domain.query.*;
-import org.springframework.validation.annotation.Validated;
-import lombok.RequiredArgsConstructor;
-import java.util.List;
-import javax.validation.constraints.NotEmpty;
+import cn.lili.modules.lmk.service.VideoService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import cn.lili.modules.lmk.service.VideoService;
-import cn.lili.base.Result;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
 
 /**
  * 瑙嗛鍐呭 鍓嶇鎺у埗鍣�
@@ -148,4 +149,16 @@
     public Result esSearch(VideoEsQuery query) {
         return videoService.esSearch(query);
     }
+
+    @PostMapping("/goods/similarly")
+    @ApiOperation(value = "鎸傜浉鍚屽晢鍝佺殑瑙嗛", notes = "鎸傜浉鍚屽晢鍝佺殑瑙嗛")
+    public Result goodsSimilarly(@RequestBody VideoQuery query) {
+        return videoService.recommendVideo(query);
+    }
+
+    @GetMapping("/history")
+    @ApiOperation(value = "鑾峰彇鍘嗗彶鎾斁璁板綍")
+    public Result getHistoryPage(VideoHistoryQuery query) {
+        return videoService.getHistoryPage(query);
+    }
 }
diff --git a/buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java b/buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java
index 43318e5..caf0910 100644
--- a/buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java
@@ -3,7 +3,6 @@
 import cn.lili.common.enums.ResultUtil;
 import cn.lili.common.security.context.UserContext;
 import cn.lili.common.utils.StringUtils;
-import cn.lili.common.vo.PageVO;
 import cn.lili.common.vo.ResultMessage;
 import cn.lili.modules.member.entity.dto.FootPrintQueryParams;
 import cn.lili.modules.member.service.FootprintService;
@@ -13,7 +12,6 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
-import org.apache.catalina.User;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -40,6 +38,7 @@
 
     @Autowired
     private COSUtil cosUtil;
+
     @ApiOperation(value = "鍒嗛〉鑾峰彇")
     @GetMapping
     public ResultMessage<IPage<EsGoodsIndex>> getByPage(FootPrintQueryParams params) {
@@ -65,10 +64,10 @@
     }
 
     @ApiOperation(value = "鏍规嵁id鍒犻櫎")
-    @ApiImplicitParam(name = "ids", value = "鍟嗗搧ID", required = true, allowMultiple = true, dataType = "String", paramType = "path")
-    @DeleteMapping(value = "/delByIds/{ids}")
-    public ResultMessage<Object> delAllByIds(@NotNull(message = "鍟嗗搧ID涓嶈兘涓虹┖") @PathVariable("ids") List ids) {
-        footprintService.deleteByIds(ids);
+    @ApiImplicitParam(name = "ids", value = "鍏宠仈ID", required = true, allowMultiple = true, dataType = "String", paramType = "path")
+    @DeleteMapping(value = "/delByIds/{viewType}/{ids}")
+    public ResultMessage<Object> delAllByIds(@NotNull(message = "鍏宠仈ID涓嶈兘涓虹┖") @PathVariable("ids") List ids, @PathVariable("viewType") String viewType) {
+        footprintService.deleteByIds(ids, viewType);
         return ResultUtil.success();
 
     }
diff --git a/buyer-api/src/main/java/cn/lili/controller/order/AfterSaleBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/order/AfterSaleBuyerController.java
index 4f4b802..68a8a0f 100644
--- a/buyer-api/src/main/java/cn/lili/controller/order/AfterSaleBuyerController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/order/AfterSaleBuyerController.java
@@ -3,6 +3,7 @@
 import cn.lili.common.aop.annotation.PreventDuplicateSubmissions;
 import cn.lili.common.enums.ResultUtil;
 import cn.lili.common.security.OperationalJudgment;
+import cn.lili.common.utils.StringUtils;
 import cn.lili.common.vo.ResultMessage;
 import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
 import cn.lili.modules.order.aftersale.entity.dos.AfterSaleLog;
@@ -15,6 +16,7 @@
 import cn.lili.modules.order.aftersale.service.AfterSaleReasonService;
 import cn.lili.modules.order.aftersale.service.AfterSaleService;
 import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO;
+import cn.lili.utils.COSUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -55,6 +57,8 @@
     @Autowired
     private AfterSaleLogService afterSaleLogService;
 
+    @Autowired
+    private COSUtil cosUtil;
     @ApiOperation(value = "鏌ョ湅鍞悗鏈嶅姟璇︽儏")
     @ApiImplicitParam(name = "sn", value = "鍞悗鍗曞彿", required = true, paramType = "path")
     @GetMapping(value = "/get/{sn}")
@@ -66,7 +70,14 @@
     @ApiOperation(value = "鍒嗛〉鑾峰彇鍞悗鏈嶅姟")
     @GetMapping(value = "/page")
     public ResultMessage<IPage<AfterSaleVO>> getByPage(AfterSaleSearchParams searchParams) {
-        return ResultUtil.data(afterSaleService.getAfterSalePages(searchParams));
+        IPage<AfterSaleVO> afterSalePages = afterSaleService.getAfterSalePages(searchParams);
+        afterSalePages.getRecords().forEach(item->{
+            String goodsImage = item.getGoodsImage();
+            if (StringUtils.isNotBlank(goodsImage)&&!goodsImage.contains("http")) {
+                item.setGoodsImage(cosUtil.getPreviewUrl(goodsImage));
+            }
+        });
+        return ResultUtil.data(afterSalePages);
     }
 
     @ApiOperation(value = "鑾峰彇鐢宠鍞悗椤甸潰淇℃伅")
diff --git a/buyer-api/src/main/java/cn/lili/controller/store/StoreBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/store/StoreBuyerController.java
index 35bdfbd..349ac8d 100644
--- a/buyer-api/src/main/java/cn/lili/controller/store/StoreBuyerController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/store/StoreBuyerController.java
@@ -1,19 +1,29 @@
 package cn.lili.controller.store;
 
+import cn.lili.base.Result;
 import cn.lili.common.enums.ResultUtil;
 import cn.lili.common.security.AuthUser;
 import cn.lili.common.security.context.UserContext;
+import cn.lili.common.utils.StringUtils;
 import cn.lili.common.vo.PageVO;
 import cn.lili.common.vo.ResultMessage;
+import cn.lili.modules.goods.entity.dos.GoodsUnit;
+import cn.lili.modules.goods.entity.dto.GoodsOperationDTO;
 import cn.lili.modules.goods.entity.vos.StoreGoodsLabelVO;
+import cn.lili.modules.goods.service.GoodsService;
+import cn.lili.modules.goods.service.GoodsUnitService;
 import cn.lili.modules.goods.service.StoreGoodsLabelService;
 import cn.lili.modules.store.entity.dos.Store;
 import cn.lili.modules.store.entity.dto.StoreBankDTO;
 import cn.lili.modules.store.entity.dto.StoreCompanyDTO;
 import cn.lili.modules.store.entity.dto.StoreOtherInfoDTO;
 import cn.lili.modules.store.entity.vos.*;
+import cn.lili.modules.store.service.FreightTemplateService;
 import cn.lili.modules.store.service.StoreDetailService;
 import cn.lili.modules.store.service.StoreService;
+import cn.lili.mybatis.util.PageUtil;
+import cn.lili.utils.COSUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -22,8 +32,10 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
 import javax.validation.constraints.NotNull;
 import java.util.List;
+import java.util.Objects;
 
 
 /**
@@ -52,6 +64,17 @@
      */
     @Autowired
     private StoreDetailService storeDetailService;
+    @Autowired
+    private COSUtil cosUtil;
+
+    @Autowired
+    private FreightTemplateService freightTemplateService;
+
+    @Autowired
+    private GoodsUnitService goodsUnitService;
+
+    @Autowired
+    private GoodsService goodsService;
 
     @ApiOperation(value = "鑾峰彇搴楅摵鍒楄〃鍒嗛〉")
     @GetMapping
@@ -77,7 +100,11 @@
     @ApiImplicitParam(name = "id", value = "搴楅摵ID", required = true, paramType = "path")
     @GetMapping(value = "/get/detail/{id}")
     public ResultMessage<StoreBasicInfoVO> detail(@NotNull @PathVariable String id) {
-        return ResultUtil.data(storeDetailService.getStoreBasicInfoDTO(id));
+        StoreBasicInfoVO storeBasicInfoDTO = storeDetailService.getStoreBasicInfoDTO(id);
+        if (StringUtils.isNotBlank(storeBasicInfoDTO.getStoreLogo())&&!storeBasicInfoDTO.getStoreLogo().contains("http")) {
+            storeBasicInfoDTO.setStoreLogo(cosUtil.getPreviewUrl(storeBasicInfoDTO.getStoreLogo()));
+        }
+        return ResultUtil.data(storeBasicInfoDTO);
     }
 
     @ApiOperation(value = "閫氳繃id鑾峰彇搴楅摵璇︾粏淇℃伅-钀ヤ笟鎵х収")
@@ -122,4 +149,25 @@
     public ResultMessage<StoreDetailVO> apply() {
         return ResultUtil.data(storeDetailService.getStoreDetailVOByMemberId(UserContext.getCurrentUser().getId()));
     }
+
+
+    @ApiOperation(value = "鑾峰彇搴楅摵涓嬬殑鐗╂祦妯℃澘")
+    @GetMapping(value = "/freightTemplate")
+    public ResultMessage<List<FreightTemplateVO>> freightTemplate() {
+        String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId();
+        return ResultUtil.data(freightTemplateService.getFreightTemplateList(storeId));
+    }
+
+    @ApiOperation(value = "鑾峰彇搴楅摵涓嬬殑璁¢噺鍗曚綅")
+    @GetMapping(value = "/goods/unit")
+    public ResultMessage<IPage<GoodsUnit>> goodsUnit(PageVO pageVO) {
+        return ResultUtil.data(goodsUnitService.page(PageUtil.initPage(pageVO)));
+    }
+
+    @ApiOperation(value = "鏂板鍟嗗搧")
+    @PostMapping(value = "/goods/create", consumes = "application/json", produces = "application/json")
+    public ResultMessage<GoodsOperationDTO> save(@Valid @RequestBody GoodsOperationDTO goodsOperationDTO) {
+        goodsService.addGoods(goodsOperationDTO);
+        return ResultUtil.success();
+    }
 }
diff --git a/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java b/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java
index 555d3d4..78a065f 100644
--- a/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java
+++ b/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java
@@ -406,6 +406,8 @@
         }
         goodsIndex.setAuthFlag(goods.getAuthFlag());
         goodsIndex.setMarketEnable(goods.getMarketEnable());
+        goodsIndex.setPreSaleBeginDate(goods.getPreSaleBeginDate());
+        goodsIndex.setPreSaleEndDate(goods.getPreSaleEndDate());
         this.settingUpGoodsIndexOtherParam(goodsIndex);
         return goodsIndex;
     }
diff --git a/consumer/src/main/resources/application.yml b/consumer/src/main/resources/application.yml
index 042711c..f7351bd 100644
--- a/consumer/src/main/resources/application.yml
+++ b/consumer/src/main/resources/application.yml
@@ -38,7 +38,7 @@
   redis:
     host: 127.0.0.1
     port: 6379
-#    password: lilishop
+    #    password: lilishop
     lettuce:
       pool:
         # 杩炴帴姹犳渶澶ц繛鎺ユ暟锛堜娇鐢ㄨ礋鍊艰〃绀烘病鏈夐檺鍒讹級 榛樿 8
@@ -247,8 +247,8 @@
     #      account:
     #        username: elastic
     #        password: LiLiShopES
-#    logstash:
-#      server: 127.0.0.1:4560
+    #    logstash:
+    #      server: 127.0.0.1:4560
     rocketmq:
       promotion-topic: lili_promotion_topic
       promotion-group: lili_promotion_group
diff --git a/framework/src/main/java/cn/lili/elasticsearch/BaseElasticsearchService.java b/framework/src/main/java/cn/lili/elasticsearch/BaseElasticsearchService.java
index e597687..0b2d077 100644
--- a/framework/src/main/java/cn/lili/elasticsearch/BaseElasticsearchService.java
+++ b/framework/src/main/java/cn/lili/elasticsearch/BaseElasticsearchService.java
@@ -168,6 +168,14 @@
                         "        \"type\": \"date\",\n" +
                         "        \"format\": \"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\"\n" +
                         "      },\n" +
+                        "      \"preSaleEndDate\": {\n" +
+                        "        \"type\": \"date\",\n" +
+                        "        \"format\": \"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\"\n" +
+                        "      },\n" +
+                        "      \"preSaleBeginDate\": {\n" +
+                        "        \"type\": \"date\",\n" +
+                        "        \"format\": \"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\"\n" +
+                        "      },\n" +
                         "      \"categoryPath\": {\n" +
                         "        \"type\": \"text\",\n" +
                         "        \"fielddata\": true,\n" +
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 e270ab4..f0c599a 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
@@ -259,7 +259,8 @@
             user.setUsername(UuidUtils.getUUID());
             user.setNickName("寰俊鐢ㄦ埛");
             user.setPassword(DEFAULT_PASSWORD);
-            user.setFace("https://i.loli.net/2020/11/19/LyN6JF7zZRskdIe.png");
+            user.setFace("");
+            user.setDisabled(Boolean.TRUE);
             memberService.registerHandler(user);
         }
 
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 d8b663a..f233523 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
@@ -17,17 +17,21 @@
 import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.xkcoding.http.util.StringUtil;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.hibernate.validator.constraints.Length;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
 import java.util.Map;
 
 /**
@@ -157,7 +161,17 @@
     @ApiModelProperty(value = "鍟嗗搧鍙傛暟json", hidden = true)
     private String params;
 
+    @ApiModelProperty(value = "棰勫敭缁撴潫鏃堕棿")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date preSaleEndDate;
 
+    @ApiModelProperty(value = "棰勫敭寮�濮嬫椂闂�")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date preSaleBeginDate;
+    @ApiModelProperty(value = "鎶芥垚姣斾緥")
+    private BigDecimal commission;
     public Goods() {
     }
 
@@ -175,6 +189,9 @@
         this.mobileIntro = goodsOperationDTO.getMobileIntro();
         this.goodsVideo = goodsOperationDTO.getGoodsVideo();
         this.price = goodsOperationDTO.getPrice();
+        this.preSaleEndDate = goodsOperationDTO.getPreSaleEndDate();
+        this.preSaleBeginDate = goodsOperationDTO.getPreSaleBeginDate();
+        this.commission =  goodsOperationDTO.getCommission();
         if (goodsOperationDTO.getGoodsParamsDTOList() != null && goodsOperationDTO.getGoodsParamsDTOList().isEmpty()) {
             this.params = JSONUtil.toJsonStr(goodsOperationDTO.getGoodsParamsDTOList());
         }
diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java
index b795f16..d96d861 100644
--- a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java
+++ b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java
@@ -3,17 +3,17 @@
 import cn.lili.common.validation.EnumValue;
 import cn.lili.modules.goods.entity.enums.GoodsSalesModeEnum;
 import cn.lili.modules.goods.entity.enums.GoodsTypeEnum;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 import org.hibernate.validator.constraints.Length;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.Valid;
 import javax.validation.constraints.*;
 import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.math.BigDecimal;
+import java.util.*;
 
 /**
  * 鍟嗗搧鎿嶄綔DTO
@@ -141,6 +141,22 @@
     @ApiModelProperty(value = "娴忚鏉冮檺")
     private String browsePermissions;
 
+
+    @ApiModelProperty(value = "棰勫敭缁撴潫鏃堕棿")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date preSaleEndDate;
+
+    @ApiModelProperty(value = "棰勫敭寮�濮嬫椂闂�")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date preSaleBeginDate;
+
+    @ApiModelProperty(value = "鎶芥垚姣斾緥")
+    @DecimalMax(value = "100",message = "鎶芥垚姣斾緥蹇呴』灏忎簬100")
+    @DecimalMin(value = "0",message = "鎶芥垚姣斾緥蹇呴』澶т簬0")
+    private BigDecimal commission;
+
     public String getGoodsName() {
         //瀵瑰晢鍝佸鍚嶇О鍋氫竴涓瀬闄愬鐞嗐�傝繖閲屾病鏈夌敤xss杩囨护鏄洜涓簒ss杩囨护涓哄叏灞�杩囨护锛屽奖鍝嶅緢澶с��
         // 涓氬姟涓紝鍏ㄥ眬浠g爜涓彧鏈夊晢鍝佸悕绉颁笉鑳芥嫢鏈夎嫳鏂囬�楀彿锛屾槸鐢变簬鍟嗗搧鍚嶇О瀛樺湪涓�涓暟鎹簱鑱斿悎鏌ヨ锛岀粨鏋滆鏍规嵁閫楀彿鍒嗙粍
diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSkuDTO.java b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSkuDTO.java
index a93db09..2d105d4 100644
--- a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSkuDTO.java
+++ b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSkuDTO.java
@@ -1,11 +1,15 @@
 package cn.lili.modules.goods.entity.dto;
 
 import cn.lili.modules.goods.entity.dos.GoodsSku;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
 
 /**
  * @author paulG
@@ -22,4 +26,16 @@
     @ApiModelProperty(value = "鍟嗗搧鍙傛暟json")
     private String params;
 
+
+    @ApiModelProperty(value = "棰勫敭缁撴潫鏃堕棿")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date preSaleEndDate;
+
+    @ApiModelProperty(value = "棰勫敭寮�濮嬫椂闂�")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date preSaleBeginDate;
+
+
 }
diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/enums/GoodsSalesModeEnum.java b/framework/src/main/java/cn/lili/modules/goods/entity/enums/GoodsSalesModeEnum.java
index b6d03aa..21e7a3f 100644
--- a/framework/src/main/java/cn/lili/modules/goods/entity/enums/GoodsSalesModeEnum.java
+++ b/framework/src/main/java/cn/lili/modules/goods/entity/enums/GoodsSalesModeEnum.java
@@ -9,6 +9,7 @@
 public enum GoodsSalesModeEnum {
 
     RETAIL("闆跺敭"),
+    PRESALE("棰勫敭"),
     WHOLESALE("鎵瑰彂");
 
     private final String description;
diff --git a/framework/src/main/java/cn/lili/modules/goods/mapper/GoodsSkuMapper.java b/framework/src/main/java/cn/lili/modules/goods/mapper/GoodsSkuMapper.java
index 6b65a74..189fa33 100644
--- a/framework/src/main/java/cn/lili/modules/goods/mapper/GoodsSkuMapper.java
+++ b/framework/src/main/java/cn/lili/modules/goods/mapper/GoodsSkuMapper.java
@@ -114,7 +114,7 @@
      * @param queryWrapper 鏌ヨ鏉′欢
      * @return 鍞悗VO鍒嗛〉
      */
-    @Select("SELECT *,g.params as params FROM li_goods_sku gs inner join li_goods g on gs.goods_id = g.id ${ew.customSqlSegment}")
+    @Select("SELECT *,g.params as params,g.pre_sale_end_date,g.pre_sale_begin_date FROM li_goods_sku gs inner join li_goods g on gs.goods_id = g.id ${ew.customSqlSegment}")
     IPage<GoodsSkuDTO> queryByParams(IPage<GoodsSkuDTO> page, @Param(Constants.WRAPPER) Wrapper<GoodsSkuDTO> queryWrapper);
 
     @Select("SELECT id as sku_id, quantity, goods_id,simple_specs,sn,goods_name FROM li_goods_sku ${ew.customSqlSegment}")
diff --git a/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java b/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java
index 61b555e..ab11843 100644
--- a/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java
+++ b/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java
@@ -60,7 +60,7 @@
      * @param goods             鍟嗗搧淇℃伅
      * @param goodsOperationDTO 鍟嗗搧鎿嶄綔淇℃伅
      */
-    void update(Goods goods, GoodsOperationDTO goodsOperationDTO);
+    void update(Goods goods, GoodsOperationDTO goodsOperationDTO,Goods previousGoods);
 
     /**
      * 鏇存柊鍟嗗搧sku
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 8465e1b..48a6b24 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
@@ -47,7 +47,6 @@
 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;
@@ -218,10 +217,11 @@
         if (goodsOperationDTO.getGoodsParamsDTOList() != null && !goodsOperationDTO.getGoodsParamsDTOList().isEmpty()) {
             goods.setParams(JSONUtil.toJsonStr(goodsOperationDTO.getGoodsParamsDTOList()));
         }
+        Goods previousGoods = this.getById(goodsId);
         //淇敼鍟嗗搧
         this.updateById(goods);
         //淇敼鍟嗗搧sku淇℃伅
-        this.goodsSkuService.update(goods, goodsOperationDTO);
+        this.goodsSkuService.update(goods, goodsOperationDTO,previousGoods);
         //娣诲姞鐩稿唽
         if (goodsOperationDTO.getGoodsGalleryList() != null && !goodsOperationDTO.getGoodsGalleryList().isEmpty()) {
             this.goodsGalleryService.add(goodsOperationDTO.getGoodsGalleryList(), goods.getId());
diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java
index e05801a..0d8e1d9 100644
--- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java
@@ -37,7 +37,11 @@
 import cn.lili.modules.goods.service.WholesaleService;
 import cn.lili.modules.goods.sku.GoodsSkuBuilder;
 import cn.lili.modules.goods.sku.render.SalesModelRender;
+import cn.lili.modules.lmk.domain.entity.PriceChange;
+import cn.lili.modules.lmk.enums.general.ChangePriceAudioStatusEnum;
+import cn.lili.modules.lmk.enums.general.ChangePriceOperationTypeEnum;
 import cn.lili.modules.lmk.enums.general.ViewTypeEnum;
+import cn.lili.modules.lmk.service.PriceChangeService;
 import cn.lili.modules.member.entity.dos.FootPrint;
 import cn.lili.modules.promotion.entity.dos.Coupon;
 import cn.lili.modules.promotion.entity.dos.PromotionGoods;
@@ -56,6 +60,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.poi.ss.usermodel.*;
@@ -73,8 +78,10 @@
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.InputStream;
+import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -137,6 +144,9 @@
     @Autowired
     private List<SalesModelRender> salesModelRenders;
 
+    @Autowired
+    private PriceChangeService priceChangeService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void add(Goods goods, GoodsOperationDTO goodsOperationDTO) {
@@ -151,12 +161,29 @@
         if (!goodsSkus.isEmpty()) {
             this.saveOrUpdateBatch(goodsSkus);
             this.updateGoodsStock(goodsSkus);
+            //璁板綍浠锋牸鍙樺姩
+            List<PriceChange> priceChangeList = goodsSkus.stream().map(item -> {
+                PriceChange priceChange = new PriceChange();
+                priceChange.setCurrentPrice(BigDecimal.valueOf(item.getPrice()));
+                priceChange.setSkuId(item.getId());
+                priceChange.setGoodsId(item.getGoodsId());
+                priceChange.setPreviousPrice(BigDecimal.ZERO);
+                priceChange.setPreviousCommission(BigDecimal.ZERO);
+                priceChange.setCurrentCommission(goods.getCommission());
+                priceChange.setOperatorType(ChangePriceOperationTypeEnum.STORE.name());
+                priceChange.setExamineStatus(ChangePriceAudioStatusEnum.APPLY.name());
+                priceChange.setOperatorId(UserContext.getCurrentUser().getId());
+                priceChange.setOperatorName(UserContext.getCurrentUser().getNickName());
+                priceChange.setStoreId(item.getStoreId());
+                return priceChange;
+            }).collect(Collectors.toList());
+            priceChangeService.saveBatch(priceChangeList);
         }
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void update(Goods goods, GoodsOperationDTO goodsOperationDTO) {
+    public void update(Goods goods, GoodsOperationDTO goodsOperationDTO,Goods previousGoods) {
         // 鏄惁瀛樺湪瑙勬牸
         if (goodsOperationDTO.getSkuList() == null || goodsOperationDTO.getSkuList().isEmpty()) {
             throw new ServiceException(ResultCode.MUST_HAVE_GOODS_SKU);
@@ -199,9 +226,41 @@
             unnecessarySkuIdsQuery.eq(GoodsSku::getGoodsId, goods.getId());
             unnecessarySkuIdsQuery.notIn(GoodsSku::getId,
                     skuList.stream().map(BaseEntity::getId).collect(Collectors.toList()));
+            LambdaQueryWrapper<GoodsSku> skuIdsQuery = new LambdaQueryWrapper<>();
+            skuIdsQuery.eq(GoodsSku::getGoodsId, goods.getId());
+            skuIdsQuery.in(GoodsSku::getId,
+                    skuList.stream().map(BaseEntity::getId).collect(Collectors.toList()));
+            Map<String, GoodsSku> skuMap = this.list(skuIdsQuery).stream().collect(Collectors.toMap(GoodsSku::getId, Function.identity()));
             this.remove(unnecessarySkuIdsQuery);
             this.saveOrUpdateBatch(skuList);
             this.updateGoodsStock(skuList);
+            //璁板綍浠锋牸鍙樺姩
+            //鍒犻櫎褰撳墠瀹℃牳鐘舵�佷负鐢宠鐨勬敼浠风殑鍟嗗搧 搴楅摵id涓�鑷村晢鍝乮d涓�鑷翠笖涓虹敵璇风姸鎬佺殑绉婚櫎
+            LambdaQueryWrapper<PriceChange> needRemove = Wrappers.<PriceChange>lambdaQuery()
+                    .eq(PriceChange::getGoodsId, goods.getId())
+                    .eq(PriceChange::getStoreId, goods.getStoreId())
+                    .eq(PriceChange::getExamineStatus, ChangePriceAudioStatusEnum.APPLY.name());
+            priceChangeService.remove(needRemove);
+            //閲嶆柊娣诲姞鏀逛环鍟嗗搧
+            List<PriceChange> priceChangeList = skuList.stream().map(item -> {
+                PriceChange priceChange = new PriceChange();
+                priceChange.setCurrentPrice(BigDecimal.valueOf(item.getPrice()));
+                GoodsSku goodsSku = skuMap.get(item.getId());
+                priceChange.setSkuId(item.getId());
+                priceChange.setGoodsId(item.getGoodsId());
+                if (Objects.nonNull(goodsSku)) {
+                    priceChange.setPreviousPrice(BigDecimal.valueOf(goodsSku.getPrice()));
+                }
+                priceChange.setPreviousCommission(previousGoods.getCommission());
+                priceChange.setCurrentCommission(goods.getCommission());
+                priceChange.setOperatorType(ChangePriceOperationTypeEnum.STORE.name());
+                priceChange.setExamineStatus(ChangePriceAudioStatusEnum.APPLY.name());
+                priceChange.setOperatorId(UserContext.getCurrentUser().getId());
+                priceChange.setOperatorName(UserContext.getCurrentUser().getNickName());
+                priceChange.setStoreId(item.getStoreId());
+                return priceChange;
+            }).collect(Collectors.toList());
+            priceChangeService.saveBatch(priceChangeList);
         }
     }
 
@@ -389,6 +448,17 @@
         updateWrapper.set(GoodsSku::getDeleteFlag, goods.getDeleteFlag());
         boolean update = this.update(updateWrapper);
         if (Boolean.TRUE.equals(update)) {
+            //淇敼璁㈠崟鏀逛环鐘舵�佷负閫氳繃鎴栬�呭け璐�
+            LambdaUpdateWrapper<PriceChange> updatePriceChange = Wrappers.<PriceChange>lambdaUpdate()
+                    .eq(PriceChange::getGoodsId, goods.getId())
+                    .eq(PriceChange::getStoreId, goods.getStoreId())
+                    .eq(PriceChange::getExamineStatus, ChangePriceAudioStatusEnum.APPLY.name());
+            if (GoodsAuthEnum.PASS.name().equals(goods.getAuthFlag())) {
+                updatePriceChange.set(PriceChange::getExamineStatus, ChangePriceAudioStatusEnum.PASS.name());
+            }else {
+                updatePriceChange.set(PriceChange::getExamineStatus, ChangePriceAudioStatusEnum.REFUSE.name());
+            }
+            priceChangeService.update(updatePriceChange);
             List<GoodsSku> goodsSkus = this.getGoodsSkuListByGoodsId(goods.getId());
             for (GoodsSku sku : goodsSkus) {
                 cache.remove(GoodsSkuService.getCacheKeys(sku.getId()));
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/CommissionRecord.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/CommissionRecord.java
new file mode 100644
index 0000000..cb457ee
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/CommissionRecord.java
@@ -0,0 +1,92 @@
+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;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 鎶芥垚璁板綍琛�
+ *
+ * @author peng
+ * @since 2025-07-04
+ */
+@Data
+@TableName("lmk_commission_record")
+public class CommissionRecord extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("store_id")
+    /** 搴楅摵id */
+    private Long storeId;
+
+    @TableField("goods_id")
+    /** 鍟嗗搧id */
+    private Long goodsId;
+
+    @TableField("sku_id")
+    /** skuId */
+    private Long skuId;
+
+    @TableField("goods_name")
+    /** 鍟嗗搧鍚嶇О */
+    private String goodsName;
+
+    @TableField("img_url")
+    /** 鍟嗗搧鍥剧墖鍦板潃 */
+    private String imgUrl;
+
+    @TableField("price")
+    /** 鍟嗗搧鍗曚环 */
+    private BigDecimal price;
+
+    @TableField("num")
+    /** 鍟嗗搧鏁伴噺 */
+    private BigDecimal num;
+
+    @TableField("sum_price")
+    /** 鍟嗗搧鎬讳环 */
+    private BigDecimal sumPrice;
+
+    @TableField("commission")
+    /** 褰撳墠鎶芥垚姣斾緥 */
+    private BigDecimal commission;
+
+    @TableField("commission_price")
+    /** 骞冲彴鎶芥垚閲戦 */
+    private BigDecimal commissionPrice;
+
+    @TableField("remain_money")
+    /** 鎵i櫎骞冲彴鎶芥垚閲戦 */
+    private BigDecimal remainMoney;
+
+    @TableField("settlement_status")
+    /** 缁撶畻璁㈠崟鐘舵�� */
+    private String settlementStatus;
+
+    @TableField("can_settlement_time")
+    /** 鍙互缁撶畻鏃堕棿 */
+    private LocalDateTime canSettlementTime;
+
+    @TableField("trade_sn")
+    /** 浜ゆ槗鍗曞彿 */
+    private String tradeSn;
+
+    @TableField("sn")
+    /** 瀛愯鍗曞彿 */
+    private String sn;
+
+    @TableField("type")
+    /** 鎶芥垚绫诲瀷锛堥��娆鹃��浣i噾锛� */
+    private String type;
+
+    @TableField("delivery_status")
+    /** 鍚︾‘璁ゆ敹璐� */
+    private String deliveryStatus;
+
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/CustomerTag.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/GoodsTag.java
similarity index 72%
rename from framework/src/main/java/cn/lili/modules/lmk/domain/entity/CustomerTag.java
rename to framework/src/main/java/cn/lili/modules/lmk/domain/entity/GoodsTag.java
index 3a5ae77..7ead7dc 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/CustomerTag.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/GoodsTag.java
@@ -3,21 +3,24 @@
 import cn.lili.mybatis.BaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.time.LocalDateTime;
 import lombok.Data;
 
 /**
- *
- *
  * @author zxl
  * @since 2025-05-14
  */
 @Data
-@TableName("lmk_customer_tag")
-public class CustomerTag extends BaseEntity {
+@TableName("lmk_goods_tag")
+public class GoodsTag extends BaseEntity {
 
     private static final long serialVersionUID = 1L;
 
+    @TableField("tag_id")
+    private String tagId;
+
+    @TableField("goods_id")
+    private String goodsId;
+
     @TableField("tag_name")
     /**  鏍囩鍚嶇О*/
     private String tagName;
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/CustomerTag.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/MemberTag.java
similarity index 72%
copy from framework/src/main/java/cn/lili/modules/lmk/domain/entity/CustomerTag.java
copy to framework/src/main/java/cn/lili/modules/lmk/domain/entity/MemberTag.java
index 3a5ae77..45c334a 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/CustomerTag.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/MemberTag.java
@@ -3,21 +3,24 @@
 import cn.lili.mybatis.BaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.time.LocalDateTime;
 import lombok.Data;
 
 /**
- *
- *
  * @author zxl
  * @since 2025-05-14
  */
 @Data
-@TableName("lmk_customer_tag")
-public class CustomerTag extends BaseEntity {
+@TableName("lmk_member_tag")
+public class MemberTag extends BaseEntity {
 
     private static final long serialVersionUID = 1L;
 
+    @TableField("tag_id")
+    private String tagId;
+
+    @TableField("member_id")
+    private String memberId;
+
     @TableField("tag_name")
     /**  鏍囩鍚嶇О*/
     private String tagName;
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/PriceChange.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/PriceChange.java
new file mode 100644
index 0000000..dc33c80
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/PriceChange.java
@@ -0,0 +1,72 @@
+package cn.lili.modules.lmk.domain.entity;
+
+import cn.lili.modules.lmk.enums.general.ChangePriceAudioStatusEnum;
+import cn.lili.mybatis.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 浠锋牸鍙樺姩琛�
+ *
+ * @author peng
+ * @since 2025-07-03
+ */
+@Data
+@TableName("lmk_price_change")
+public class PriceChange extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("store_id")
+    /** 搴楅摵id */
+    private String storeId;
+
+    @TableField("goods_id")
+    /** 鍟嗗搧id */
+    private String goodsId;
+
+    @TableField("sku_id")
+    /** 鏈�灏忛攢鍞崟鍏僫d */
+    private String skuId;
+
+    @TableField("previous_price")
+    /** 鍘熶环 */
+    private BigDecimal previousPrice;
+
+    @TableField("current_price")
+    /** 鐜颁环 */
+    private BigDecimal currentPrice;
+
+    @TableField("previous_commission")
+    /** 鍘熸娊鎴愭瘮渚� */
+    private BigDecimal previousCommission;
+
+    @TableField("current_commission")
+    /** 鐜板湪鎶芥垚姣斾緥 */
+    private BigDecimal currentCommission;
+
+    @TableField("operator_name")
+    /** 鎿嶄綔浜哄憳濮撳悕 */
+    private String operatorName;
+
+    @TableField("operator_id")
+    /** 鎿嶄綔浜哄憳id */
+    private String operatorId;
+
+    @TableField("examine_status")
+    /**
+     * 瀹℃牳鐘舵��
+     *
+     * @see  ChangePriceAudioStatusEnum
+     * */
+    private String examineStatus;
+
+    @TableField("operator_type")
+    /** 鎿嶄綔浜哄憳绫诲瀷 */
+    private String operatorType;
+
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/CommissionRecordForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/CommissionRecordForm.java
new file mode 100644
index 0000000..2ce8bbb
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/CommissionRecordForm.java
@@ -0,0 +1,104 @@
+package cn.lili.modules.lmk.domain.form;
+
+import cn.lili.base.AbsForm;
+import cn.lili.group.Add;
+import cn.lili.group.Update;
+import cn.lili.modules.lmk.domain.entity.CommissionRecord;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 鎶芥垚璁板綍琛ㄨ〃鍗�
+ *
+ * @author peng
+ * @since 2025-07-04
+ */
+@Data
+@ApiModel(value = "CommissionRecord琛ㄥ崟", description = "鎶芥垚璁板綍琛ㄨ〃鍗�")
+public class CommissionRecordForm extends AbsForm {
+
+    @NotNull(message = "搴楅摵id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("搴楅摵id")
+    private Long storeId;
+
+    @NotNull(message = "鍟嗗搧id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍟嗗搧id")
+    private Long goodsId;
+
+    @NotNull(message = "skuId涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("skuId")
+    private Long skuId;
+
+    @NotBlank(message = "鍟嗗搧鍚嶇О涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍟嗗搧鍚嶇О")
+    private String goodsName;
+
+    @NotBlank(message = "鍟嗗搧鍥剧墖鍦板潃涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍟嗗搧鍥剧墖鍦板潃")
+    private String imgUrl;
+
+    @NotNull(message = "鍟嗗搧鍗曚环涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍟嗗搧鍗曚环")
+    private BigDecimal price;
+
+    @NotNull(message = "鍟嗗搧鏁伴噺涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍟嗗搧鏁伴噺")
+    private BigDecimal num;
+
+    @NotNull(message = "鍟嗗搧鎬讳环涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍟嗗搧鎬讳环")
+    private BigDecimal sumPrice;
+
+    @NotNull(message = "褰撳墠鎶芥垚姣斾緥涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("褰撳墠鎶芥垚姣斾緥")
+    private BigDecimal commission;
+
+    @NotNull(message = "骞冲彴鎶芥垚閲戦涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("骞冲彴鎶芥垚閲戦")
+    private BigDecimal commissionPrice;
+
+    @NotNull(message = "鎵i櫎骞冲彴鎶芥垚閲戦涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鎵i櫎骞冲彴鎶芥垚閲戦")
+    private BigDecimal remainMoney;
+
+    @NotBlank(message = "缁撶畻璁㈠崟鐘舵�佷笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("缁撶畻璁㈠崟鐘舵��")
+    private String settlementStatus;
+
+    @NotNull(message = "鍙互缁撶畻鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍙互缁撶畻鏃堕棿")
+    private Date canSettlementTime;
+
+    @NotBlank(message = "浜ゆ槗鍗曞彿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("浜ゆ槗鍗曞彿")
+    private String tradeSn;
+
+    @NotBlank(message = "瀛愯鍗曞彿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("瀛愯鍗曞彿")
+    private String sn;
+
+    @NotBlank(message = "鎶芥垚绫诲瀷锛堥��娆鹃��浣i噾锛変笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鎶芥垚绫诲瀷锛堥��娆鹃��浣i噾锛�")
+    private String type;
+
+    @NotBlank(message = "鍚︾‘璁ゆ敹璐т笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍚︾‘璁ゆ敹璐�")
+    private String deliveryStatus;
+
+    public static CommissionRecord getEntityByForm(@NonNull CommissionRecordForm form, CommissionRecord entity) {
+        if(entity == null) {
+          entity = new CommissionRecord();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/CustomerTagForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/CustomerTagForm.java
deleted file mode 100644
index 9117724..0000000
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/form/CustomerTagForm.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package cn.lili.modules.lmk.domain.form;
-
-import cn.lili.base.AbsForm;
-import cn.lili.group.Add;
-import cn.lili.group.Update;
-import cn.lili.modules.lmk.domain.entity.CustomerTag;
-import cn.lili.mybatis.BaseEntity;
-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 zxl
- * @since 2025-05-14
- */
-@Data
-@ApiModel(value = "CustomerTag琛ㄥ崟", description = "琛ㄥ崟")
-public class CustomerTagForm extends AbsForm {
-
-    @NotBlank(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
-    @ApiModelProperty("鏍囩鍚�")
-    private String tagName;
-
-    @NotBlank(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
-    @ApiModelProperty("")
-    private String createType;
-
-
-    /**
-     * 瀹㈡埛id
-     * */
-    @ApiModelProperty("瀹㈡埛id")
-    private String customerId;
-
-    public static CustomerTag getEntityByForm(@NonNull CustomerTagForm form, CustomerTag entity) {
-        if(entity == null) {
-          entity = new CustomerTag();
-        }
-        BeanUtils.copyProperties(form, entity);
-        return entity;
-    }
-
-}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/FileInfoForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/FileInfoForm.java
index eebf1e0..20890a2 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/form/FileInfoForm.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/FileInfoForm.java
@@ -28,4 +28,8 @@
     @ApiModelProperty("鏂囦欢鍘熷鍚�")
     private String originalFileName;
 
+    private String url;
+
+    private String cover;
+
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/GoodsTagForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/GoodsTagForm.java
new file mode 100644
index 0000000..2dda2bd
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/GoodsTagForm.java
@@ -0,0 +1,51 @@
+package cn.lili.modules.lmk.domain.form;
+
+import cn.lili.base.AbsForm;
+import cn.lili.group.Add;
+import cn.lili.group.Update;
+import cn.lili.modules.lmk.domain.entity.GoodsTag;
+import cn.lili.modules.lmk.domain.entity.MemberTag;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+/**
+ * 琛ㄥ崟
+ *
+ * @author zxl
+ * @since 2025-05-14
+ */
+@Data
+@ApiModel(value = "GoodsTag琛ㄥ崟", description = "琛ㄥ崟")
+public class GoodsTagForm extends AbsForm {
+
+    @NotBlank(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏍囩Id")
+    private List<String> tagIds;
+
+
+    @NotBlank(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("")
+    private String createType;
+
+
+    /**
+     * 瀹㈡埛id
+     */
+    @ApiModelProperty("鍟嗗搧id")
+    private String goodsId;
+
+    public static GoodsTag getEntityByForm(@NonNull GoodsTagForm form, GoodsTag entity) {
+        if (entity == null) {
+            entity = new GoodsTag();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/MemberTagForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/MemberTagForm.java
new file mode 100644
index 0000000..da6ff44
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/MemberTagForm.java
@@ -0,0 +1,52 @@
+package cn.lili.modules.lmk.domain.form;
+
+import cn.lili.base.AbsForm;
+import cn.lili.group.Add;
+import cn.lili.group.Update;
+import cn.lili.modules.lmk.domain.entity.MemberTag;
+import org.springframework.beans.BeanUtils;
+
+import javax.validation.constraints.NotBlank;
+
+import org.springframework.lang.NonNull;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 琛ㄥ崟
+ *
+ * @author zxl
+ * @since 2025-05-14
+ */
+@Data
+@ApiModel(value = "MemberTag琛ㄥ崟", description = "琛ㄥ崟")
+public class MemberTagForm extends AbsForm {
+
+    @NotBlank(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏍囩Id")
+    private List<String> tagIds;
+
+
+    @NotBlank(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("")
+    private String createType;
+
+
+    /**
+     * 瀹㈡埛id
+     */
+    @ApiModelProperty("瀹㈡埛id")
+    private String memberId;
+
+    public static MemberTag getEntityByForm(@NonNull MemberTagForm form, MemberTag entity) {
+        if (entity == null) {
+            entity = new MemberTag();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/PriceChangeForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/PriceChangeForm.java
new file mode 100644
index 0000000..4ebb3b2
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/PriceChangeForm.java
@@ -0,0 +1,79 @@
+package cn.lili.modules.lmk.domain.form;
+
+import cn.lili.base.AbsForm;
+import cn.lili.group.Add;
+import cn.lili.group.Update;
+import cn.lili.modules.lmk.domain.entity.PriceChange;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * 浠锋牸鍙樺姩琛ㄨ〃鍗�
+ *
+ * @author peng
+ * @since 2025-07-03
+ */
+@Data
+@ApiModel(value = "PriceChange琛ㄥ崟", description = "浠锋牸鍙樺姩琛ㄨ〃鍗�")
+public class PriceChangeForm extends AbsForm {
+
+    @NotNull(message = "搴楅摵id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("搴楅摵id")
+    private Long storeId;
+
+    @NotNull(message = "鍟嗗搧id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍟嗗搧id")
+    private Long goodsId;
+
+    @NotNull(message = "鏈�灏忛攢鍞崟鍏僫d涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏈�灏忛攢鍞崟鍏僫d")
+    private Long skuId;
+
+    @NotNull(message = "鍘熶环涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍘熶环")
+    private BigDecimal previousPrice;
+
+    @NotNull(message = "鐜颁环涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鐜颁环")
+    private BigDecimal currentPrice;
+
+    @NotNull(message = "鍘熸娊鎴愭瘮渚嬩笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍘熸娊鎴愭瘮渚�")
+    private BigDecimal previousCommission;
+
+    @NotNull(message = "鐜板湪鎶芥垚姣斾緥涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鐜板湪鎶芥垚姣斾緥")
+    private BigDecimal currentCommission;
+
+    @NotBlank(message = "鎿嶄綔浜哄憳濮撳悕涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鎿嶄綔浜哄憳濮撳悕")
+    private String operatorName;
+
+    @NotNull(message = "鎿嶄綔浜哄憳id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鎿嶄綔浜哄憳id")
+    private Long operatorId;
+
+    @NotBlank(message = "瀹℃牳鐘舵�佷笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("瀹℃牳鐘舵��")
+    private String examineStatus;
+
+    @NotBlank(message = "鎿嶄綔浜哄憳绫诲瀷涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鎿嶄綔浜哄憳绫诲瀷")
+    private String operatorType;
+
+    public static PriceChange getEntityByForm(@NonNull PriceChangeForm form, PriceChange entity) {
+        if(entity == null) {
+          entity = new PriceChange();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/CommissionRecordQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/CommissionRecordQuery.java
new file mode 100644
index 0000000..3ddb581
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/CommissionRecordQuery.java
@@ -0,0 +1,17 @@
+package cn.lili.modules.lmk.domain.query;
+
+import cn.lili.base.AbsQuery;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 鎶芥垚璁板綍琛ㄦ煡璇�
+ *
+ * @author peng
+ * @since 2025-07-04
+ */
+@Data
+@ApiModel(value = "CommissionRecord鏌ヨ鍙傛暟", description = "鎶芥垚璁板綍琛ㄦ煡璇㈠弬鏁�")
+public class CommissionRecordQuery extends AbsQuery {
+}
+
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/GoodsSimilarlyQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/GoodsSimilarlyQuery.java
new file mode 100644
index 0000000..fa27d6e
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/GoodsSimilarlyQuery.java
@@ -0,0 +1,27 @@
+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;
+
+import java.util.List;
+
+/**
+ * @author锛歺p
+ * @date锛�2025/7/2 10:08
+ */
+@Data
+@ApiModel("鐩稿悓鍟嗗搧瑙嗛")
+public class GoodsSimilarlyQuery extends AbsQuery {
+
+    // TODO 鏌ヨ鎸備簡鍚屼竴鍟嗗搧鐨勮棰戜笉搴旇鍖哄垎鏄帹鑽愯棰戣繕鏄ぇ鍋ュ悍锛岃瀛楁鍙槸鍏堝啓鍦ㄨ繖锛屾殏鏃朵笉鐢�
+    @ApiModelProperty("瑙嗛绫诲瀷")
+    private String videoType;
+
+    @ApiModelProperty("鍟嗗搧id锛岃繖閲岀敤鍟嗗搧id鑰屼笉鏄痵kuId")
+    private List<String> goodsIds;
+
+    @ApiModelProperty("褰撳墠鐨勮棰慽d锛屾煡璇㈡椂鐩存帴鎺掗櫎璇ヨ棰�")
+    private String currentVideoId;
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/PriceChangeQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/PriceChangeQuery.java
new file mode 100644
index 0000000..6616853
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/PriceChangeQuery.java
@@ -0,0 +1,17 @@
+package cn.lili.modules.lmk.domain.query;
+
+import cn.lili.base.AbsQuery;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 浠锋牸鍙樺姩琛ㄦ煡璇�
+ *
+ * @author peng
+ * @since 2025-07-03
+ */
+@Data
+@ApiModel(value = "PriceChange鏌ヨ鍙傛暟", description = "浠锋牸鍙樺姩琛ㄦ煡璇㈠弬鏁�")
+public class PriceChangeQuery extends AbsQuery {
+}
+
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/TagQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/TagQuery.java
index 605e894..f2e7006 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/query/TagQuery.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/TagQuery.java
@@ -26,6 +26,8 @@
     @ApiModelProperty("鏍囩鍒嗙被")
     private String tagTypeId;
 
+    @ApiModelProperty("鏍囩绫诲埆key")
+    private String tagTypeKey;
 
 }
 
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoHistoryQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoHistoryQuery.java
new file mode 100644
index 0000000..bd940c4
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoHistoryQuery.java
@@ -0,0 +1,18 @@
+package cn.lili.modules.lmk.domain.query;
+
+import cn.lili.base.AbsQuery;
+import lombok.Data;
+
+/**
+ * 瑙嗛鏍囩鏌ヨ
+ *
+ * @author xp
+ * @since 2025-05-13
+ */
+@Data
+public class VideoHistoryQuery extends AbsQuery {
+
+    private String userId;
+
+}
+
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoQuery.java
index 3aa3b2a..23800fd 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoQuery.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoQuery.java
@@ -21,11 +21,16 @@
 @ApiModel(value = "Video鏌ヨ鍙傛暟", description = "瑙嗛鍐呭鏌ヨ鍙傛暟")
 public class VideoQuery extends AbsQuery {
 
+    /* ----------------------------- author鏌愪綔鑰呯殑瑙嗛銆乧ollect鏌愪綔鑰呮敹钘忕殑瑙嗛銆乴ike鏌愪綔鑰呯偣璧炵殑瑙嗛 ------------------------------- */
     @ApiModelProperty("浣滆�卛d")
     private String authorId;
 
-    @ApiModelProperty("瑙嗛鏉ユ簮锛歳ecommend鎺ㄨ崘銆乤uthor鏌愪綔鑰呯殑瑙嗛銆乧ollect鏌愪綔鑰呮敹钘忕殑瑙嗛銆乴ike鏌愪綔鑰呯偣璧炵殑瑙嗛")
+    @ApiModelProperty("瑙嗛鏉ユ簮锛歳ecommend鎺ㄨ崘銆乤uthor鏌愪綔鑰呯殑瑙嗛銆乧ollect鏌愪綔鑰呮敹钘忕殑瑙嗛銆乴ike鏌愪綔鑰呯偣璧炵殑瑙嗛銆乻earch鎼滅储銆乬oodsSimilarly鏌ユ寕鍚屼竴鍟嗗搧鐨勮棰�")
     private String videoFrom;
+
+
+
+
 
     /**
      * @see cn.lili.modules.lmk.enums.general.VideoTypeEnum
@@ -33,7 +38,21 @@
     @ApiModelProperty("瑙嗛绫诲瀷锛氳棰戙�佸ぇ鍋ュ悍銆佺鍘紝榛樿涓嶄紶鏌ヨ棰�")
     private String videoType = VideoTypeEnum.VIDEO.getValue();
 
+
+
+
+
+
+
+    /* ----------------------------- search鎼滅储 ------------------------------- */
     @ApiModelProperty("鎼滅储瑙嗛鐨勫叧閿瘝")
     private String keyword;
+
+    /* ----------------------------- goodsSimilarly鏌ユ寕鍚屼竴鍟嗗搧鐨勮棰� ------------------------------- */
+    @ApiModelProperty("鍟嗗搧id锛岃繖閲岀敤鍟嗗搧id鑰屼笉鏄痵kuId")
+    private List<String> goodsIds;
+
+    @ApiModelProperty("褰撳墠鐨勮棰慽d锛屾煡璇㈡椂鐩存帴鎺掗櫎璇ヨ棰�")
+    private String currentVideoId;
 }
 
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/CommissionRecordVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/CommissionRecordVO.java
new file mode 100644
index 0000000..149f1c5
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/CommissionRecordVO.java
@@ -0,0 +1,100 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import cn.lili.base.AbsVo;
+import cn.lili.modules.lmk.domain.entity.CommissionRecord;
+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.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 鎶芥垚璁板綍琛ㄥ睍绀�
+ *
+ * @author peng
+ * @since 2025-07-04
+ */
+@Data
+@ApiModel(value = "鎶芥垚璁板綍琛ㄥ搷搴旀暟鎹�", description = "鎶芥垚璁板綍琛ㄥ搷搴旀暟鎹�")
+public class CommissionRecordVO extends AbsVo {
+
+    /** 搴楅摵id */
+    @ApiModelProperty("搴楅摵id")
+    private Long storeId;
+
+    /** 鍟嗗搧id */
+    @ApiModelProperty("鍟嗗搧id")
+    private Long goodsId;
+
+    /** skuId */
+    @ApiModelProperty("skuId")
+    private Long skuId;
+
+    /** 鍟嗗搧鍚嶇О */
+    @ApiModelProperty("鍟嗗搧鍚嶇О")
+    private String goodsName;
+
+    /** 鍟嗗搧鍥剧墖鍦板潃 */
+    @ApiModelProperty("鍟嗗搧鍥剧墖鍦板潃")
+    private String imgUrl;
+
+    /** 鍟嗗搧鍗曚环 */
+    @ApiModelProperty("鍟嗗搧鍗曚环")
+    private BigDecimal price;
+
+    /** 鍟嗗搧鏁伴噺 */
+    @ApiModelProperty("鍟嗗搧鏁伴噺")
+    private BigDecimal num;
+
+    /** 鍟嗗搧鎬讳环 */
+    @ApiModelProperty("鍟嗗搧鎬讳环")
+    private BigDecimal sumPrice;
+
+    /** 褰撳墠鎶芥垚姣斾緥 */
+    @ApiModelProperty("褰撳墠鎶芥垚姣斾緥")
+    private BigDecimal commission;
+
+    /** 骞冲彴鎶芥垚閲戦 */
+    @ApiModelProperty("骞冲彴鎶芥垚閲戦")
+    private BigDecimal commissionPrice;
+
+    /** 鎵i櫎骞冲彴鎶芥垚閲戦 */
+    @ApiModelProperty("鎵i櫎骞冲彴鎶芥垚閲戦")
+    private BigDecimal remainMoney;
+
+    /** 缁撶畻璁㈠崟鐘舵�� */
+    @ApiModelProperty("缁撶畻璁㈠崟鐘舵��")
+    private String settlementStatus;
+
+    /** 鍙互缁撶畻鏃堕棿 */
+    @ApiModelProperty("鍙互缁撶畻鏃堕棿")
+    private Date canSettlementTime;
+
+    /** 浜ゆ槗鍗曞彿 */
+    @ApiModelProperty("浜ゆ槗鍗曞彿")
+    private String tradeSn;
+
+    /** 瀛愯鍗曞彿 */
+    @ApiModelProperty("瀛愯鍗曞彿")
+    private String sn;
+
+    /** 鎶芥垚绫诲瀷锛堥��娆鹃��浣i噾锛� */
+    @ApiModelProperty("鎶芥垚绫诲瀷锛堥��娆鹃��浣i噾锛�")
+    private String type;
+
+    /** 鍚︾‘璁ゆ敹璐� */
+    @ApiModelProperty("鍚︾‘璁ゆ敹璐�")
+    private String deliveryStatus;
+
+    public static CommissionRecordVO getVoByEntity(@NonNull CommissionRecord entity, CommissionRecordVO vo) {
+        if(vo == null) {
+            vo = new CommissionRecordVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/CustomerTagVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/GoodsTagVO.java
similarity index 60%
copy from framework/src/main/java/cn/lili/modules/lmk/domain/vo/CustomerTagVO.java
copy to framework/src/main/java/cn/lili/modules/lmk/domain/vo/GoodsTagVO.java
index e0a9236..336360e 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/CustomerTagVO.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/GoodsTagVO.java
@@ -1,16 +1,12 @@
 package cn.lili.modules.lmk.domain.vo;
 
 import cn.lili.base.AbsVo;
-
-import java.util.List;
-
-import cn.lili.modules.lmk.domain.entity.CustomerTag;
-import org.springframework.lang.NonNull;
-import org.springframework.beans.BeanUtils;
+import cn.lili.modules.lmk.domain.entity.MemberTag;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import java.util.Date;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
 
 /**
  * 灞曠ず
@@ -20,21 +16,30 @@
  */
 @Data
 @ApiModel(value = "鍝嶅簲鏁版嵁", description = "鍝嶅簲鏁版嵁")
-public class CustomerTagVO extends AbsVo {
+public class GoodsTagVO extends AbsVo {
 
-    /**  */
+    @ApiModelProperty("鏍囩Id")
+    private String tagId;
+
+    @ApiModelProperty("瀹㈡埛id")
+    private String goodsId;
+
+    /**
+     *
+     */
     @ApiModelProperty("鏍囩鍚嶇О")
     private String tagName;
 
-    /**  */
+    /**
+     *
+     */
     @ApiModelProperty("鍒涘缓鏂瑰紡")
     private String createType;
 
 
-
-    public static CustomerTagVO getVoByEntity(@NonNull CustomerTag entity, CustomerTagVO vo) {
-        if(vo == null) {
-            vo = new CustomerTagVO();
+    public static GoodsTagVO getVoByEntity(@NonNull MemberTag entity, GoodsTagVO vo) {
+        if (vo == null) {
+            vo = new GoodsTagVO();
         }
         BeanUtils.copyProperties(entity, vo);
         return vo;
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/CustomerTagVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/MemberTagVO.java
similarity index 60%
rename from framework/src/main/java/cn/lili/modules/lmk/domain/vo/CustomerTagVO.java
rename to framework/src/main/java/cn/lili/modules/lmk/domain/vo/MemberTagVO.java
index e0a9236..3595151 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/CustomerTagVO.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/MemberTagVO.java
@@ -2,15 +2,12 @@
 
 import cn.lili.base.AbsVo;
 
-import java.util.List;
-
-import cn.lili.modules.lmk.domain.entity.CustomerTag;
+import cn.lili.modules.lmk.domain.entity.MemberTag;
 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;
 
 /**
  * 灞曠ず
@@ -20,21 +17,30 @@
  */
 @Data
 @ApiModel(value = "鍝嶅簲鏁版嵁", description = "鍝嶅簲鏁版嵁")
-public class CustomerTagVO extends AbsVo {
+public class MemberTagVO extends AbsVo {
 
-    /**  */
+    @ApiModelProperty("鏍囩Id")
+    private String tagId;
+
+    @ApiModelProperty("瀹㈡埛id")
+    private String memberId;
+
+    /**
+     *
+     */
     @ApiModelProperty("鏍囩鍚嶇О")
     private String tagName;
 
-    /**  */
+    /**
+     *
+     */
     @ApiModelProperty("鍒涘缓鏂瑰紡")
     private String createType;
 
 
-
-    public static CustomerTagVO getVoByEntity(@NonNull CustomerTag entity, CustomerTagVO vo) {
-        if(vo == null) {
-            vo = new CustomerTagVO();
+    public static MemberTagVO getVoByEntity(@NonNull MemberTag entity, MemberTagVO vo) {
+        if (vo == null) {
+            vo = new MemberTagVO();
         }
         BeanUtils.copyProperties(entity, vo);
         return vo;
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/PriceChangeVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/PriceChangeVO.java
new file mode 100644
index 0000000..25836bc
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/PriceChangeVO.java
@@ -0,0 +1,75 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import cn.lili.base.AbsVo;
+import cn.lili.modules.lmk.domain.entity.PriceChange;
+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.math.BigDecimal;
+
+/**
+ * 浠锋牸鍙樺姩琛ㄥ睍绀�
+ *
+ * @author peng
+ * @since 2025-07-03
+ */
+@Data
+@ApiModel(value = "浠锋牸鍙樺姩琛ㄥ搷搴旀暟鎹�", description = "浠锋牸鍙樺姩琛ㄥ搷搴旀暟鎹�")
+public class PriceChangeVO extends AbsVo {
+
+    /** 搴楅摵id */
+    @ApiModelProperty("搴楅摵id")
+    private Long storeId;
+
+    /** 鍟嗗搧id */
+    @ApiModelProperty("鍟嗗搧id")
+    private Long goodsId;
+
+    /** 鏈�灏忛攢鍞崟鍏僫d */
+    @ApiModelProperty("鏈�灏忛攢鍞崟鍏僫d")
+    private Long skuId;
+
+    /** 鍘熶环 */
+    @ApiModelProperty("鍘熶环")
+    private BigDecimal previousPrice;
+
+    /** 鐜颁环 */
+    @ApiModelProperty("鐜颁环")
+    private BigDecimal currentPrice;
+
+    /** 鍘熸娊鎴愭瘮渚� */
+    @ApiModelProperty("鍘熸娊鎴愭瘮渚�")
+    private BigDecimal previousCommission;
+
+    /** 鐜板湪鎶芥垚姣斾緥 */
+    @ApiModelProperty("鐜板湪鎶芥垚姣斾緥")
+    private BigDecimal currentCommission;
+
+    /** 鎿嶄綔浜哄憳濮撳悕 */
+    @ApiModelProperty("鎿嶄綔浜哄憳濮撳悕")
+    private String operatorName;
+
+    /** 鎿嶄綔浜哄憳id */
+    @ApiModelProperty("鎿嶄綔浜哄憳id")
+    private Long operatorId;
+
+    /** 瀹℃牳鐘舵�� */
+    @ApiModelProperty("瀹℃牳鐘舵��")
+    private String examineStatus;
+
+    /** 鎿嶄綔浜哄憳绫诲瀷 */
+    @ApiModelProperty("鎿嶄綔浜哄憳绫诲瀷")
+    private String operatorType;
+
+    public static PriceChangeVO getVoByEntity(@NonNull PriceChange entity, PriceChangeVO vo) {
+        if(vo == null) {
+            vo = new PriceChangeVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoHistoryVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoHistoryVO.java
new file mode 100644
index 0000000..00f0c02
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoHistoryVO.java
@@ -0,0 +1,26 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author锛歺p
+ * @date锛�2025/7/4 17:43
+ */
+@Data
+@ApiModel("瑙嗛鎾斁璁板綍")
+public class VideoHistoryVO extends WxVideoVO {
+
+    @ApiModelProperty("鍘嗗彶璁板綍id")
+    private String historyId;
+
+    @ApiModelProperty("鎾斁鑷�")
+    private String playAt;
+
+    @ApiModelProperty("瑙傜湅鏃ユ湡")
+    private Date playTime;
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/enums/general/ChangePriceAudioStatusEnum.java b/framework/src/main/java/cn/lili/modules/lmk/enums/general/ChangePriceAudioStatusEnum.java
new file mode 100644
index 0000000..120c2ab
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/enums/general/ChangePriceAudioStatusEnum.java
@@ -0,0 +1,29 @@
+package cn.lili.modules.lmk.enums.general;
+
+/**
+ * 鍟嗗搧浠锋牸鏀瑰姩璁板綍琛ㄥ鏍哥姸鎬�
+ *
+ * @author peng
+ * @since 2025-07-03 15:00
+ */
+public enum ChangePriceAudioStatusEnum {
+
+    /**
+     * 鍟嗗搧浠锋牸鏀瑰姩璁板綍琛ㄥ鏍哥姸鎬�
+     */
+    APPLY("鐢宠涓�"),
+    PASS("宸查�氳繃"),
+    REFUSE("宸叉嫆缁�");
+
+    private final String description;
+
+    ChangePriceAudioStatusEnum(String description) {
+        this.description = description;
+    }
+
+    public String description() {
+        return description;
+    }
+
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/enums/general/ChangePriceOperationTypeEnum.java b/framework/src/main/java/cn/lili/modules/lmk/enums/general/ChangePriceOperationTypeEnum.java
new file mode 100644
index 0000000..5a83d4c
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/enums/general/ChangePriceOperationTypeEnum.java
@@ -0,0 +1,28 @@
+package cn.lili.modules.lmk.enums.general;
+
+/**
+ * 鍟嗗搧浠锋牸鏀瑰姩璁板綍琛ㄦ搷浣滀汉鍛樼被鍨�
+ *
+ * @author peng
+ * @since 2025-07-03 15:00
+ */
+public enum ChangePriceOperationTypeEnum {
+
+    /**
+     * 鍟嗗搧浠锋牸鏀瑰姩璁板綍琛ㄦ搷浣滀汉鍛樼被鍨�
+     */
+    PLATFORM("骞冲彴"),
+    STORE("鍟嗗");
+
+    private final String description;
+
+    ChangePriceOperationTypeEnum(String description) {
+        this.description = description;
+    }
+
+    public String description() {
+        return description;
+    }
+
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/CommissionRecordMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/CommissionRecordMapper.java
new file mode 100644
index 0000000..13d7f37
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/CommissionRecordMapper.java
@@ -0,0 +1,32 @@
+package cn.lili.modules.lmk.mapper;
+
+import cn.lili.modules.lmk.domain.entity.CommissionRecord;
+import cn.lili.modules.lmk.domain.query.CommissionRecordQuery;
+import cn.lili.modules.lmk.domain.vo.CommissionRecordVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鎶芥垚璁板綍琛� Mapper 鎺ュ彛
+ *
+ * @author peng
+ * @since 2025-07-04
+ */
+@Mapper
+public interface CommissionRecordMapper extends BaseMapper<CommissionRecord> {
+
+    /**
+     * id鏌ユ壘鎶芥垚璁板綍琛�
+     * @param id
+     * @return
+     */
+    CommissionRecordVO getById(String id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") CommissionRecordQuery query);
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/CustomerTagMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/CustomerTagMapper.java
deleted file mode 100644
index 908b2f6..0000000
--- a/framework/src/main/java/cn/lili/modules/lmk/mapper/CustomerTagMapper.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package cn.lili.modules.lmk.mapper;
-
-import java.util.List;
-
-import cn.lili.modules.lmk.domain.entity.CustomerTag;
-import cn.lili.modules.lmk.domain.query.CustomerTagQuery;
-import cn.lili.modules.lmk.domain.vo.CustomerTagVO;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-/**
- *  Mapper 鎺ュ彛
- *
- * @author zxl
- * @since 2025-05-14
- */
-@Mapper
-public interface CustomerTagMapper extends BaseMapper<CustomerTag> {
-
-    /**
-     * id鏌ユ壘
-     * @param id
-     * @return
-     */
-    CustomerTagVO getById(Integer id);
-
-    /**
-    *  鍒嗛〉
-    */
-    IPage getPage(IPage page, @Param("query") CustomerTagQuery query);
-
-}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/GoodsTagMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/GoodsTagMapper.java
new file mode 100644
index 0000000..1525508
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/GoodsTagMapper.java
@@ -0,0 +1,16 @@
+package cn.lili.modules.lmk.mapper;
+
+import cn.lili.modules.lmk.domain.entity.GoodsTag;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *  Mapper 鎺ュ彛
+ *
+ * @author zxl
+ * @since 2025-05-14
+ */
+@Mapper
+public interface GoodsTagMapper extends BaseMapper<GoodsTag> {
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/MemberTagMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/MemberTagMapper.java
new file mode 100644
index 0000000..bc602b5
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/MemberTagMapper.java
@@ -0,0 +1,16 @@
+package cn.lili.modules.lmk.mapper;
+
+import cn.lili.modules.lmk.domain.entity.MemberTag;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *  Mapper 鎺ュ彛
+ *
+ * @author zxl
+ * @since 2025-05-14
+ */
+@Mapper
+public interface MemberTagMapper extends BaseMapper<MemberTag> {
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/PriceChangeMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/PriceChangeMapper.java
new file mode 100644
index 0000000..6a9d6d1
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/PriceChangeMapper.java
@@ -0,0 +1,32 @@
+package cn.lili.modules.lmk.mapper;
+
+import cn.lili.modules.lmk.domain.entity.PriceChange;
+import cn.lili.modules.lmk.domain.query.PriceChangeQuery;
+import cn.lili.modules.lmk.domain.vo.PriceChangeVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 浠锋牸鍙樺姩琛� Mapper 鎺ュ彛
+ *
+ * @author peng
+ * @since 2025-07-03
+ */
+@Mapper
+public interface PriceChangeMapper extends BaseMapper<PriceChange> {
+
+    /**
+     * id鏌ユ壘浠锋牸鍙樺姩琛�
+     * @param id
+     * @return
+     */
+    PriceChangeVO getById(String id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") PriceChangeQuery query);
+
+}
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 b852d1d..e3d5481 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
@@ -41,7 +41,7 @@
     IPage managerPage(IPage page, @Param("query") ManagerVideoQuery query);
 
     /**
-     * 鏌ュ嚭5涓帹鑽愯棰�
+     * 鏌ユ帹鑽愯棰�
      *
      * @return
      */
@@ -172,4 +172,21 @@
      * @return
      */
     List<VideoIndex> getEsPage(@Param("start") int start, @Param("pageSize") int pageSize);
+
+    /**
+     * 鏌ヨ鎸備簡鍚屼竴鍟嗗搧鐨勮棰�
+     *
+     * @param page
+     * @param goodsSimilarlyQuery
+     */
+    IPage goodsSimilarlyPage(IPage page, @Param("query") GoodsSimilarlyQuery goodsSimilarlyQuery);
+
+    /**
+     * 鑾峰彇鎾斁璁板綍
+     *
+     * @param page
+     * @param query
+     * @return
+     */
+    IPage getHistoryPage(IPage page, @Param("query") VideoHistoryQuery query);
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/CommissionRecordService.java b/framework/src/main/java/cn/lili/modules/lmk/service/CommissionRecordService.java
new file mode 100644
index 0000000..c9bca07
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/CommissionRecordService.java
@@ -0,0 +1,65 @@
+package cn.lili.modules.lmk.service;
+
+import cn.lili.modules.lmk.domain.entity.CommissionRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.form.CommissionRecordForm;
+import cn.lili.modules.lmk.domain.query.CommissionRecordQuery;
+import java.util.List;
+
+/**
+ * 鎶芥垚璁板綍琛� 鏈嶅姟绫�
+ *
+ * @author peng
+ * @since 2025-07-04
+ */
+public interface CommissionRecordService extends IService<CommissionRecord> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(CommissionRecordForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(CommissionRecordForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(CommissionRecordQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(String id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/GoodsTagService.java b/framework/src/main/java/cn/lili/modules/lmk/service/GoodsTagService.java
new file mode 100644
index 0000000..e3afa30
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/GoodsTagService.java
@@ -0,0 +1,51 @@
+package cn.lili.modules.lmk.service;
+
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.entity.GoodsTag;
+import cn.lili.modules.lmk.domain.form.GoodsTagForm;
+import cn.lili.modules.lmk.domain.query.CustomerTagQuery;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author zxl
+ * @since 2025-05-14
+ */
+public interface GoodsTagService extends IService<GoodsTag> {
+
+    /**
+     * 娣诲姞
+     *
+     * @param form
+     * @return
+     */
+    Result addGoodsTag(GoodsTagForm form);
+
+
+    /**
+     * 鎵归噺鍒犻櫎
+     *
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     *
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+
+    /**
+     * 鍒楄〃
+     *
+     * @return
+     */
+    Result getByGoodsId(String goodsId);
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/CustomerTagService.java b/framework/src/main/java/cn/lili/modules/lmk/service/MemberTagService.java
similarity index 64%
rename from framework/src/main/java/cn/lili/modules/lmk/service/CustomerTagService.java
rename to framework/src/main/java/cn/lili/modules/lmk/service/MemberTagService.java
index e17f760..19c2da5 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/CustomerTagService.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/MemberTagService.java
@@ -1,37 +1,40 @@
 package cn.lili.modules.lmk.service;
 
 import cn.lili.base.Result;
-import cn.lili.modules.lmk.domain.entity.CustomerTag;
-import cn.lili.modules.lmk.domain.form.CustomerTagForm;
+import cn.lili.modules.lmk.domain.entity.MemberTag;
+import cn.lili.modules.lmk.domain.form.MemberTagForm;
 import cn.lili.modules.lmk.domain.query.CustomerTagQuery;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;
 
 /**
- *  鏈嶅姟绫�
+ * 鏈嶅姟绫�
  *
  * @author zxl
  * @since 2025-05-14
  */
-public interface CustomerTagService extends IService<CustomerTag> {
+public interface MemberTagService extends IService<MemberTag> {
 
     /**
      * 娣诲姞
+     *
      * @param form
      * @return
      */
-    Result add(CustomerTagForm form);
+    Result add(MemberTagForm form);
 
     /**
      * 淇敼
+     *
      * @param form
      * @return
      */
-    Result update(CustomerTagForm form);
+    Result update(MemberTagForm form);
 
     /**
      * 鎵归噺鍒犻櫎
+     *
      * @param ids
      * @return
      */
@@ -39,6 +42,7 @@
 
     /**
      * id鍒犻櫎
+     *
      * @param id
      * @return
      */
@@ -46,23 +50,22 @@
 
     /**
      * 鍒嗛〉鏌ヨ
+     *
      * @param query
      * @return
      */
     Result page(CustomerTagQuery query);
 
-    /**
-     * 鏍规嵁id鏌ユ壘
-     * @param id
-     * @return
-     */
-    Result detail(Integer id);
 
     /**
      * 鍒楄〃
+     *
      * @return
      */
     Result all();
 
-    Result addCustomerTag(CustomerTagForm form);
+    Result addMemberTag(MemberTagForm form);
+
+    Result getByMemberId(String memberId);
+
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/PriceChangeService.java b/framework/src/main/java/cn/lili/modules/lmk/service/PriceChangeService.java
new file mode 100644
index 0000000..22c0962
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/PriceChangeService.java
@@ -0,0 +1,65 @@
+package cn.lili.modules.lmk.service;
+
+import cn.lili.modules.lmk.domain.entity.PriceChange;
+import com.baomidou.mybatisplus.extension.service.IService;
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.form.PriceChangeForm;
+import cn.lili.modules.lmk.domain.query.PriceChangeQuery;
+import java.util.List;
+
+/**
+ * 浠锋牸鍙樺姩琛� 鏈嶅姟绫�
+ *
+ * @author peng
+ * @since 2025-07-03
+ */
+public interface PriceChangeService extends IService<PriceChange> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(PriceChangeForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(PriceChangeForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(PriceChangeQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(String id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+}
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 2592ed4..95b6784 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
@@ -297,4 +297,12 @@
      * @return
      */
     Result esSearch(VideoEsQuery query);
+
+    /**
+     * 鑾峰彇鎾斁璁板綍
+     *
+     * @param query
+     * @return
+     */
+    Result getHistoryPage(VideoHistoryQuery query);
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/CommissionRecordServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/CommissionRecordServiceImpl.java
new file mode 100644
index 0000000..ceefc10
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/CommissionRecordServiceImpl.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.CommissionRecord;
+import cn.lili.modules.lmk.mapper.CommissionRecordMapper;
+import cn.lili.modules.lmk.service.CommissionRecordService;
+import cn.lili.base.Result;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.lili.modules.lmk.domain.form.CommissionRecordForm;
+import cn.lili.modules.lmk.domain.vo.CommissionRecordVO;
+import cn.lili.modules.lmk.domain.query.CommissionRecordQuery;
+import org.springframework.stereotype.Service;
+import lombok.RequiredArgsConstructor;
+import cn.lili.utils.PageUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.Assert;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 鎶芥垚璁板綍琛� 鏈嶅姟瀹炵幇绫�
+ *
+ * @author peng
+ * @since 2025-07-04
+ */
+@Service
+@RequiredArgsConstructor
+public class CommissionRecordServiceImpl extends ServiceImpl<CommissionRecordMapper, CommissionRecord> implements CommissionRecordService {
+
+    private final CommissionRecordMapper commissionRecordMapper;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(CommissionRecordForm form) {
+        CommissionRecord entity = CommissionRecordForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(CommissionRecordForm form) {
+        CommissionRecord 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(CommissionRecordQuery query) {
+        IPage<CommissionRecordVO> page = PageUtil.getPage(query, CommissionRecordVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(String id) {
+        CommissionRecordVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<CommissionRecord> entities = baseMapper.selectList(null);
+        List<CommissionRecordVO> vos = entities.stream()
+                .map(entity -> CommissionRecordVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/CustomerTagServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/CustomerTagServiceImpl.java
deleted file mode 100644
index 59d7a94..0000000
--- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/CustomerTagServiceImpl.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package cn.lili.modules.lmk.service.impl;
-
-import cn.lili.base.Result;
-import cn.lili.modules.lmk.domain.entity.CustomerTag;
-import cn.lili.modules.lmk.domain.entity.CustomerTagRef;
-import cn.lili.modules.lmk.domain.form.CustomerTagForm;
-import cn.lili.modules.lmk.domain.query.CustomerTagQuery;
-import cn.lili.modules.lmk.domain.vo.CustomerTagVO;
-import cn.lili.modules.lmk.mapper.CustomerTagMapper;
-import cn.lili.modules.lmk.mapper.CustomerTagRefMapper;
-import cn.lili.modules.lmk.service.CustomerTagService;
-import cn.lili.utils.PageUtil;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-import lombok.RequiredArgsConstructor;
-import org.springframework.beans.BeanUtils;
-import org.springframework.util.Assert;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- *  鏈嶅姟瀹炵幇绫�
- *
- * @author zxl
- * @since 2025-05-14
- */
-@Service
-@RequiredArgsConstructor
-public class CustomerTagServiceImpl extends ServiceImpl<CustomerTagMapper, CustomerTag> implements CustomerTagService {
-
-    private final CustomerTagMapper customerTagMapper;
-
-    private final CustomerTagRefMapper customerTagRefMapper;
-    /**
-     * 娣诲姞
-     * @param form
-     * @return
-     */
-    @Override
-    public Result add(CustomerTagForm form) {
-        CustomerTag entity = CustomerTagForm.getEntityByForm(form, null);
-        baseMapper.insert(entity);
-        return Result.ok("娣诲姞鎴愬姛");
-    }
-
-    /**
-     * 淇敼
-     * @param form
-     * @return
-     */
-    @Override
-    public Result update(CustomerTagForm form) {
-        CustomerTag 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(CustomerTagQuery query) {
-        IPage<CustomerTagVO> page = PageUtil.getPage(query, CustomerTagVO.class);
-        baseMapper.getPage(page, query);
-        return Result.ok().data(page.getRecords()).total(page.getTotal());
-    }
-
-    /**
-     * 鏍规嵁id鏌ユ壘
-     * @param id
-     * @return
-     */
-    @Override
-    public Result detail(Integer id) {
-        CustomerTagVO vo = baseMapper.getById(id);
-        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
-        return Result.ok().data(vo);
-    }
-
-    /**
-     * 鍒楄〃
-     * @return
-     */
-    @Override
-    public Result all() {
-        List<CustomerTag> entities = baseMapper.selectList(null);
-        List<CustomerTagVO> vos = entities.stream()
-                .map(entity -> CustomerTagVO.getVoByEntity(entity, null))
-                .collect(Collectors.toList());
-        return Result.ok().data(vos);
-    }
-
-    @Override
-    public Result addCustomerTag(CustomerTagForm form) {
-        //鎻掑叆瀹㈡埛鏍囩
-        CustomerTag entity = CustomerTagForm.getEntityByForm(form, null);
-        baseMapper.insert(entity);
-
-        //鎻掑叆瀹㈡埛鏍囩涓棿琛�
-        CustomerTagRef ref = new CustomerTagRef();
-        ref.setCustomerTagId(entity.getId());
-        ref.setCustomerId(form.getCustomerId());
-        customerTagRefMapper.insert(ref);
-        return Result.ok("娣诲姞鎴愬姛");
-    }
-
-
-
-    public Result delCustomerTag(String id) {
-
-        return null;
-    }
-}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/GoodsTagServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/GoodsTagServiceImpl.java
new file mode 100644
index 0000000..e70fb07
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/GoodsTagServiceImpl.java
@@ -0,0 +1,92 @@
+package cn.lili.modules.lmk.service.impl;
+
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.entity.GoodsTag;
+import cn.lili.modules.lmk.domain.entity.Tag;
+import cn.lili.modules.lmk.domain.form.GoodsTagForm;
+import cn.lili.modules.lmk.domain.query.CustomerTagQuery;
+import cn.lili.modules.lmk.domain.vo.MemberTagVO;
+import cn.lili.modules.lmk.mapper.GoodsTagMapper;
+import cn.lili.modules.lmk.service.GoodsTagService;
+import cn.lili.modules.lmk.service.TagService;
+import cn.lili.utils.PageUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author zxl
+ * @since 2025-05-14
+ */
+@Service
+@RequiredArgsConstructor
+public class GoodsTagServiceImpl extends ServiceImpl<GoodsTagMapper, GoodsTag> implements GoodsTagService {
+
+    private final TagService tagService;
+
+
+    /**
+     * 鎵归噺鍒犻櫎
+     *
+     * @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("鍒犻櫎鎴愬姛");
+    }
+
+    @Override
+    public Result getByGoodsId(String goodsId) {
+        LambdaQueryWrapper<GoodsTag> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(GoodsTag::getGoodsId, goodsId);
+        return Result.ok().data(baseMapper.selectList(queryWrapper));
+    }
+
+
+    @Override
+    public Result addGoodsTag(GoodsTagForm form) {
+        LambdaQueryWrapper<Tag> query = new LambdaQueryWrapper<>();
+        query.in(Tag::getId, form.getTagIds());
+        List<Tag> tags = tagService.list(query);
+        List<GoodsTag> GoodsTags = tags.stream().map(tag -> {
+            GoodsTag GoodsTag = new GoodsTag();
+            GoodsTag.setTagId(tag.getId());
+            GoodsTag.setGoodsId(form.getGoodsId());
+            GoodsTag.setTagName(tag.getTagName());
+            GoodsTag.setCreateType(form.getCreateType());
+            return GoodsTag;
+        }).collect(Collectors.toList());
+
+        this.saveBatch(GoodsTags);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+
+    public Result delCustomerTag(String id) {
+
+        return null;
+    }
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/MemberTagServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/MemberTagServiceImpl.java
new file mode 100644
index 0000000..73a7d1a
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/MemberTagServiceImpl.java
@@ -0,0 +1,158 @@
+package cn.lili.modules.lmk.service.impl;
+
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.entity.MemberTag;
+import cn.lili.modules.lmk.domain.entity.Tag;
+import cn.lili.modules.lmk.domain.form.MemberTagForm;
+import cn.lili.modules.lmk.domain.query.CustomerTagQuery;
+import cn.lili.modules.lmk.domain.vo.MemberTagVO;
+import cn.lili.modules.lmk.mapper.MemberTagMapper;
+import cn.lili.modules.lmk.service.MemberTagService;
+import cn.lili.modules.lmk.service.TagService;
+import cn.lili.utils.PageUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.Assert;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author zxl
+ * @since 2025-05-14
+ */
+@Service
+@RequiredArgsConstructor
+public class MemberTagServiceImpl extends ServiceImpl<MemberTagMapper, MemberTag> implements MemberTagService {
+
+    private final TagService tagService;
+
+    /**
+     * 娣诲姞
+     *
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(MemberTagForm form) {
+        MemberTag entity = MemberTagForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     *
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(MemberTagForm form) {
+        MemberTag 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(CustomerTagQuery query) {
+        IPage<MemberTag> page = PageUtil.getPage(query, MemberTag.class);
+
+        LambdaQueryWrapper<MemberTag> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+
+        baseMapper.selectPage(page, lambdaQueryWrapper);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+
+    /**
+     * 鍒楄〃
+     *
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<MemberTag> entities = baseMapper.selectList(null);
+        List<MemberTagVO> vos = entities.stream()
+                .map(entity -> MemberTagVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+
+    @Override
+    public Result addMemberTag(MemberTagForm form) {
+
+        LambdaQueryWrapper<MemberTag> deleteQuery = new LambdaQueryWrapper<>();
+        deleteQuery.eq(MemberTag::getMemberId, form.getMemberId());
+        baseMapper.delete(deleteQuery);
+
+        LambdaQueryWrapper<Tag> query = new LambdaQueryWrapper<>();
+        query.in(Tag::getId, form.getTagIds());
+        List<Tag> tags = tagService.list(query);
+        List<MemberTag> memberTags = tags.stream().map(tag -> {
+            MemberTag memberTag = new MemberTag();
+            memberTag.setTagId(tag.getId());
+            memberTag.setMemberId(form.getMemberId());
+            memberTag.setTagName(tag.getTagName());
+            memberTag.setCreateType(form.getCreateType());
+            return memberTag;
+        }).collect(Collectors.toList());
+
+        this.saveBatch(memberTags);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    @Override
+    public Result getByMemberId(String memberId) {
+        LambdaQueryWrapper<MemberTag> query = new LambdaQueryWrapper<>();
+        query.eq(MemberTag::getMemberId, memberId);
+        List<MemberTag> memberTags = baseMapper.selectList(query);
+        return Result.ok().data(memberTags);
+    }
+
+
+    public Result delCustomerTag(String id) {
+
+        return null;
+    }
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/PriceChangeServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/PriceChangeServiceImpl.java
new file mode 100644
index 0000000..981ec78
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/PriceChangeServiceImpl.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.PriceChange;
+import cn.lili.modules.lmk.mapper.PriceChangeMapper;
+import cn.lili.modules.lmk.service.PriceChangeService;
+import cn.lili.base.Result;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.lili.modules.lmk.domain.form.PriceChangeForm;
+import cn.lili.modules.lmk.domain.vo.PriceChangeVO;
+import cn.lili.modules.lmk.domain.query.PriceChangeQuery;
+import org.springframework.stereotype.Service;
+import lombok.RequiredArgsConstructor;
+import cn.lili.utils.PageUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.Assert;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 浠锋牸鍙樺姩琛� 鏈嶅姟瀹炵幇绫�
+ *
+ * @author peng
+ * @since 2025-07-03
+ */
+@Service
+@RequiredArgsConstructor
+public class PriceChangeServiceImpl extends ServiceImpl<PriceChangeMapper, PriceChange> implements PriceChangeService {
+
+    private final PriceChangeMapper priceChangeMapper;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(PriceChangeForm form) {
+        PriceChange entity = PriceChangeForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(PriceChangeForm form) {
+        PriceChange 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(PriceChangeQuery query) {
+        IPage<PriceChangeVO> page = PageUtil.getPage(query, PriceChangeVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(String id) {
+        PriceChangeVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<PriceChange> entities = baseMapper.selectList(null);
+        List<PriceChangeVO> vos = entities.stream()
+                .map(entity -> PriceChangeVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+}
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 ad439e9..204b995 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
@@ -492,11 +492,22 @@
                 baseMapper.getAuthorLikeVideoPage(page, query3);
                 break;
             case "search":  // 鍔犺浇es鎼滅储瑙嗛
-                VideoEsQuery query4 = new VideoEsQuery();
-                BeanUtils.copyProperties(query, query4);
-                query4.setPageNumber((int) query.getPageNumber());
-                query4.setPageSize((int) query.getPageSize());
-                return this.esSearch(query4);
+                VideoEsQuery videoEsQuery = new VideoEsQuery();
+                BeanUtils.copyProperties(query, videoEsQuery);
+                videoEsQuery.setPageNumber((int) query.getPageNumber());
+                videoEsQuery.setPageSize((int) query.getPageSize());
+                return this.esSearch(videoEsQuery);
+            case "goodsSimilarly": // 鎮寕鐩稿悓鍟嗗搧鐨勬帹鑽愯棰�
+                GoodsSimilarlyQuery goodsSimilarlyQuery = new GoodsSimilarlyQuery();
+                BeanUtils.copyProperties(query, goodsSimilarlyQuery);
+                baseMapper.goodsSimilarlyPage(page, goodsSimilarlyQuery);
+                break;
+            case "history":
+                VideoHistoryQuery videoHistoryQuery = new VideoHistoryQuery();
+                BeanUtils.copyProperties(query, videoHistoryQuery);
+                videoHistoryQuery.setUserId(UserContext.getCurrentUserId());
+                baseMapper.getHistoryPage(page, videoHistoryQuery);
+                break;
             default:
                 break;
         }
@@ -520,6 +531,7 @@
                 v.setCommentNum(this.getCommentNum(v.getId(), v.getCommentNum()));
                 v.setCollectNum(this.getCollectNum(v.getId(), v.getCollectNum()));
                 v.setThumbsUpNum(this.getThumbsUpNum(v.getId(), v.getThumbsUpNum()));
+                v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar()));
                 if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
                     v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
                     v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
@@ -592,9 +604,10 @@
     public Result healthRecommendVideo(WxHealthVideoQuery query) {
         IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class);
         //鑾峰彇澶у仴搴疯棰戝垪琛�
-                baseMapper.recommendHealthVideo(page,query);
+        baseMapper.recommendHealthVideo(page,query);
         if (page.getTotal() > 0) {
             page.getRecords().forEach(v -> {
+                v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar()));
                 if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
                     v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
                     v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
@@ -617,6 +630,7 @@
         IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class);
          baseMapper.wxKitchenVideoQuery(page, query);
          page.getRecords().forEach(v -> {
+             v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar()));
              if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
                  v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
                  v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
@@ -667,13 +681,24 @@
 
     @Override
     public Result saveViewRecord(VideoFootPrintForm form) {
-        FootPrint footPrint = new FootPrint();
-        footPrint.setViewType(ViewTypeEnum.VIDEO.getValue());
-        footPrint.setRefId(form.getVideoId());
-        footPrint.setMemberId(UserContext.getCurrentUserId());
-        footPrint.setViewDuration(form.getViewDuration());
-        footPrint.setPlayAt(form.getPlayAt());
-        footprintService.saveFootprint(footPrint);
+        FootPrint one = new LambdaQueryChainWrapper<>(footprintService.getBaseMapper())
+                .eq(FootPrint::getRefId, form.getVideoId())
+                .eq(FootPrint::getMemberId, UserContext.getCurrentUserId())
+                .eq(FootPrint::getViewType, ViewTypeEnum.VIDEO.getValue())
+                .one();
+        if (Objects.nonNull(one)) {
+            one.setViewDuration(one.getViewDuration() + form.getViewDuration());
+            one.setPlayAt(form.getPlayAt());
+            footprintService.updateById(one);
+        } else {
+            FootPrint footPrint = new FootPrint();
+            footPrint.setViewType(ViewTypeEnum.VIDEO.getValue());
+            footPrint.setRefId(form.getVideoId());
+            footPrint.setMemberId(UserContext.getCurrentUserId());
+            footPrint.setViewDuration(form.getViewDuration());
+            footPrint.setPlayAt(form.getPlayAt());
+            footprintService.saveFootprint(footPrint);
+        }
         return Result.ok();
     }
 
@@ -715,6 +740,7 @@
                 v.setCommentNum(this.getCommentNum(v.getId(), v.getCommentNum()));
                 v.setCollectNum(this.getCollectNum(v.getId(), v.getCollectNum()));
                 v.setThumbsUpNum(this.getThumbsUpNum(v.getId(), v.getThumbsUpNum()));
+                v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar()));
                 if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
                     v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
                     v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
@@ -753,6 +779,7 @@
                 v.setCommentNum(this.getCommentNum(v.getId(), v.getCommentNum()));
                 v.setCollectNum(this.getCollectNum(v.getId(), v.getCollectNum()));
                 v.setThumbsUpNum(this.getThumbsUpNum(v.getId(), v.getThumbsUpNum()));
+                v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar()));
                 if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
                     v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
                     v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
@@ -790,6 +817,7 @@
                 v.setCommentNum(this.getCommentNum(v.getId(), v.getCommentNum()));
                 v.setCollectNum(this.getCollectNum(v.getId(), v.getCollectNum()));
                 v.setThumbsUpNum(this.getThumbsUpNum(v.getId(), v.getThumbsUpNum()));
+                v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar()));
                 if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
                     v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
                     v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
@@ -1194,6 +1222,7 @@
             // 鍒ゆ柇鏄惁鍏虫敞浣滆�呫�佹槸鍚︾偣璧炪�佹槸鍚︽敹钘�
             wxVideoVO.setCollected(CollectionUtils.isNotEmpty(collectMap.get(wxVideoVO.getId())));
             wxVideoVO.setThumbsUp(CollectionUtils.isNotEmpty(thumbsUpMap.get(wxVideoVO.getId())));
+            wxVideoVO.setAuthorAvatar(cosUtil.getPreviewUrl(wxVideoVO.getAuthorAvatar()));
             if (UserContext.getCurrentUserId().equals(wxVideoVO.getAuthorId())) {
                 wxVideoVO.setSubscribeThisAuthor(Boolean.TRUE);
             } else {
@@ -1210,4 +1239,49 @@
         }).collect(Collectors.toList());
         return Result.ok().data(vos).total(searchHits.getTotalHits());
     }
+
+    @Override
+    public Result getHistoryPage(VideoHistoryQuery query) {
+        query.setUserId(UserContext.getCurrentUserId());
+        IPage<VideoHistoryVO> page = PageUtil.getPage(query, VideoHistoryVO.class);
+        baseMapper.getHistoryPage(page, query);
+        if (CollectionUtils.isNotEmpty(page.getRecords())) {
+            if (page.getTotal() > 0) {
+                List<String> videoIds = page.getRecords().stream().map(VideoHistoryVO::getId).collect(Collectors.toList());
+                Map<String, List<SimpleVideoTagVO>> tagMap = videoTagRefService.getTagsByVideoIds(videoIds)
+                        .stream()
+                        .collect(Collectors.groupingBy(SimpleVideoTagVO::getVideoId));
+                Map<String, List<SimpleMyCollectVO>> collectMap = myCollectService.getCollectsByVideoIds(videoIds)
+                        .stream()
+                        .collect(Collectors.groupingBy(SimpleMyCollectVO::getRefId));
+                Map<String, List<SimpleMyThumbsUpVO>> thumbsUpMap = thumbsUpRecordService.getThumbssByVideoIds(videoIds)
+                        .stream()
+                        .collect(Collectors.groupingBy(SimpleMyThumbsUpVO::getRefId));
+                List<String> subscribes = mySubscribeService.getSubscribesByUserId(UserContext.getCurrentUserId());
+                // 3. 鑾峰彇瑙嗛涓存椂璁块棶鍦板潃銆佽缃棰戞爣绛俱�佹垜鏄惁鏀惰棌銆佹槸鍚︾偣璧炪�佷綔鑰呮槸鍚﹀叧娉�
+                page.getRecords().forEach(v -> {
+                    v.setTagList(tagMap.get(v.getId()));
+                    v.setCollected(CollectionUtils.isNotEmpty(collectMap.get(v.getId())));
+                    v.setThumbsUp(CollectionUtils.isNotEmpty(thumbsUpMap.get(v.getId())));
+                    v.setCommentNum(this.getCommentNum(v.getId(), v.getCommentNum()));
+                    v.setCollectNum(this.getCollectNum(v.getId(), v.getCollectNum()));
+                    v.setThumbsUpNum(this.getThumbsUpNum(v.getId(), v.getThumbsUpNum()));
+                    v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar()));
+                    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(fileKey -> cosUtil.getPreviewUrl(fileKey)).collect(Collectors.toList()));
+                    }
+                    if (CollectionUtils.isNotEmpty(v.getGoodsList())) {
+                        v.getGoodsList().stream().forEach(goods -> {
+                            goods.setThumbnail(cosUtil.getPreviewUrl(goods.getThumbnail()));
+                        });
+                    }
+                    v.setSubscribeThisAuthor(subscribes.contains(v.getAuthorId()));
+                });
+            }
+        }
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
 }
diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java b/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java
index 83bb664..c66c3e2 100644
--- a/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java
+++ b/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java
@@ -72,7 +72,7 @@
     @ApiModelProperty(value = "浼氬憳澶村儚")
     private String face;
 
-    @ApiModelProperty(value = "浼氬憳鐘舵��")
+    @ApiModelProperty(value = "浼氬憳鐘舵�侊細true 琛ㄧず娌¤绂佺敤锛� false 琚鐢�")
     private Boolean disabled;
 
     @ApiModelProperty(value = "鏄惁寮�閫氬簵閾�")
diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dto/ManagerMemberEditDTO.java b/framework/src/main/java/cn/lili/modules/member/entity/dto/ManagerMemberEditDTO.java
index 13f9c16..efbcc21 100644
--- a/framework/src/main/java/cn/lili/modules/member/entity/dto/ManagerMemberEditDTO.java
+++ b/framework/src/main/java/cn/lili/modules/member/entity/dto/ManagerMemberEditDTO.java
@@ -10,6 +10,7 @@
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 浼氬憳淇敼
@@ -54,4 +55,6 @@
 
     @ApiModelProperty(value = "浼氬憳澶村儚")
     private String face;
+
+    private List<String> tags;
 }
diff --git a/framework/src/main/java/cn/lili/modules/member/entity/vo/MemberVO.java b/framework/src/main/java/cn/lili/modules/member/entity/vo/MemberVO.java
index 5aba29d..6fa585e 100644
--- a/framework/src/main/java/cn/lili/modules/member/entity/vo/MemberVO.java
+++ b/framework/src/main/java/cn/lili/modules/member/entity/vo/MemberVO.java
@@ -4,7 +4,7 @@
 import cn.lili.common.security.sensitive.Sensitive;
 import cn.lili.common.security.sensitive.enums.SensitiveStrategy;
 import cn.lili.common.utils.BeanUtil;
-import cn.lili.modules.lmk.domain.vo.CustomerTagVO;
+import cn.lili.modules.lmk.domain.vo.MemberTagVO;
 import cn.lili.modules.member.entity.dos.Member;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
@@ -98,7 +98,7 @@
     private Date createTime;
 
     @ApiModelProperty(value = "瀹㈡埛鏍囩鍒楄〃")
-    private List<CustomerTagVO> customerTagList;
+    private List<MemberTagVO> tags;
 
     /**
      * 涓簄ull鍒欎笉鍦ㄩ粦鍚嶅崟鍐�
diff --git a/framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java b/framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java
index 32f09fa..771aa09 100644
--- a/framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java
+++ b/framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java
@@ -29,4 +29,6 @@
 
     @Select("select * from li_member ${ew.customSqlSegment}")
     IPage<MemberVO> pageByMemberVO(IPage<MemberVO> page, @Param(Constants.WRAPPER) Wrapper<Member> queryWrapper);
+
+    MemberVO getVoById(@Param("id") String id);
 }
\ No newline at end of file
diff --git a/framework/src/main/java/cn/lili/modules/member/service/FootprintService.java b/framework/src/main/java/cn/lili/modules/member/service/FootprintService.java
index 9dc441b..8dcc1f9 100644
--- a/framework/src/main/java/cn/lili/modules/member/service/FootprintService.java
+++ b/framework/src/main/java/cn/lili/modules/member/service/FootprintService.java
@@ -40,9 +40,10 @@
      * 鏍规嵁ID杩涜娓呴櫎浼氬憳鐨勫巻鍙茶冻杩�
      *
      * @param ids 鍟嗗搧ID鍒楄〃
+     * @param viewType 娴忚绫诲瀷
      * @return 澶勭悊缁撴灉
      */
-    boolean deleteByIds(List<String> ids);
+    boolean deleteByIds(List<String> ids, String viewType);
 
     /**
      * 鑾峰彇浼氬憳娴忚鍘嗗彶鍒嗛〉
@@ -74,4 +75,4 @@
      */
     long getFootprintNum();
 
-}
\ No newline at end of file
+}
diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java
index e995846..b786b99 100644
--- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java
@@ -65,9 +65,10 @@
     }
 
     @Override
-    public boolean deleteByIds(List<String> ids) {
+    public boolean deleteByIds(List<String> ids, String viewType) {
         LambdaQueryWrapper<FootPrint> lambdaQueryWrapper = Wrappers.lambdaQuery();
         lambdaQueryWrapper.eq(FootPrint::getMemberId, UserContext.getCurrentUser().getId());
+        lambdaQueryWrapper.eq(FootPrint::getViewType, viewType);
         lambdaQueryWrapper.in(FootPrint::getRefId, ids);
         return this.remove(lambdaQueryWrapper);
     }
@@ -169,6 +170,7 @@
 
 
 
+
 }
 
 
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 489d7ea..564de14 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
@@ -24,6 +24,8 @@
 import cn.lili.modules.connect.entity.dto.ConnectAuthUser;
 import cn.lili.modules.connect.service.ConnectService;
 import cn.lili.modules.lmk.domain.entity.VideoAccount;
+import cn.lili.modules.lmk.domain.form.MemberTagForm;
+import cn.lili.modules.lmk.service.MemberTagService;
 import cn.lili.modules.lmk.service.VideoAccountService;
 import cn.lili.modules.member.aop.annotation.PointLogPoint;
 import cn.lili.modules.member.entity.dos.Member;
@@ -44,6 +46,7 @@
 import cn.lili.mybatis.util.PageUtil;
 import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
 import cn.lili.rocketmq.tags.MemberTagsEnum;
+import cn.lili.utils.COSUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -111,6 +114,12 @@
 
     @Autowired
     private VideoAccountService videoAccountService;
+
+    @Autowired
+    private MemberTagService memberTagService;
+
+    @Autowired
+    private COSUtil cosUtil;
 
     @Override
     public Member findByUsername(String userName) {
@@ -250,7 +259,7 @@
             authUser.setNickname(CommonUtil.getSpecialStr("鐢ㄦ埛"));
         }
         if (CharSequenceUtil.isEmpty(authUser.getAvatar())) {
-            authUser.setAvatar("https://i.loli.net/2020/11/19/LyN6JF7zZRskdIe.png");
+            authUser.setAvatar("");
         }
         try {
 //            String username = UuidUtils.getUUID();
@@ -487,6 +496,7 @@
     }
 
     @Override
+    @Transactional
     public Member updateMember(ManagerMemberEditDTO managerMemberEditDTO) {
         //杩囨护浼氬憳鏄电О鏁忔劅璇�
         if (CharSequenceUtil.isNotBlank(managerMemberEditDTO.getNickName())) {
@@ -501,6 +511,13 @@
         //浼犻�掍慨鏀逛細鍛樹俊鎭�
         BeanUtil.copyProperties(managerMemberEditDTO, member);
         this.updateById(member);
+        if (managerMemberEditDTO.getTags() != null) {
+            MemberTagForm memberTagForm = new MemberTagForm();
+            memberTagForm.setMemberId(member.getId());
+            memberTagForm.setTagIds(managerMemberEditDTO.getTags());
+            memberTagForm.setCreateType("MANAGER");
+            memberTagService.addMemberTag(memberTagForm);
+        }
         return member;
     }
 
@@ -786,7 +803,11 @@
 
     @Override
     public MemberVO getMember(String id) {
-        return new MemberVO(this.getById(id));
+        MemberVO member = baseMapper.getVoById(id);
+        if (Objects.nonNull(member)) {
+            member.setFace(cosUtil.getPreviewUrl(member.getFace()));
+        }
+        return member;
     }
 
     @Override
diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CommissionRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CommissionRender.java
index 8d35dba..d2f95b9 100644
--- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CommissionRender.java
+++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CommissionRender.java
@@ -1,11 +1,12 @@
 package cn.lili.modules.order.cart.render.impl;
 
-import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import cn.lili.common.enums.PromotionTypeEnum;
 import cn.lili.common.utils.CurrencyUtil;
+import cn.lili.modules.goods.entity.dos.Goods;
 import cn.lili.modules.goods.service.CategoryService;
+import cn.lili.modules.goods.service.GoodsService;
 import cn.lili.modules.order.cart.entity.dto.TradeDTO;
 import cn.lili.modules.order.cart.entity.enums.CartTypeEnum;
 import cn.lili.modules.order.cart.entity.enums.RenderStepEnums;
@@ -38,6 +39,8 @@
     @Autowired
     private CategoryService categoryService;
 
+    @Autowired
+    private GoodsService goodsService;
     @Override
     public RenderStepEnums step() {
         return RenderStepEnums.PLATFORM_COMMISSION;
@@ -64,11 +67,17 @@
 
                 PriceDetailDTO priceDetailDTO = cartSkuVO.getPriceDetailDTO();
                 //骞冲彴浣i噾鏍规嵁鍒嗙被璁$畻
-                String categoryId = cartSkuVO.getGoodsSku().getCategoryPath()
-                        .substring(cartSkuVO.getGoodsSku().getCategoryPath().lastIndexOf(",") + 1);
-                if (CharSequenceUtil.isNotEmpty(categoryId)) {
-                    Double commissionRate = categoryService.getCategoryById(categoryId).getCommissionRate();
-                    priceDetailDTO.setPlatFormCommissionPoint(commissionRate);
+                //鏍规嵁鍟嗗搧鎶芥垚杩涜璁$畻浣i噾
+                String goodsId = cartSkuVO.getGoodsSku().getGoodsId();
+                Goods goods = goodsService.getById(goodsId);
+//                String categoryId = cartSkuVO.getGoodsSku().getCategoryPath()
+//                        .substring(cartSkuVO.getGoodsSku().getCategoryPath().lastIndexOf(",") + 1);
+//                if (CharSequenceUtil.isNotEmpty(categoryId)) {
+//                    Double commissionRate = categoryService.getCategoryById(categoryId).getCommissionRate();
+//                    priceDetailDTO.setPlatFormCommissionPoint(commissionRate);
+//                }
+                if (goods != null&&goods.getCommission()!=null) {
+                    priceDetailDTO.setPlatFormCommissionPoint(Double.valueOf(goods.getCommission().toString()));
                 }
 
                 //濡傛灉绉垎璁㈠崟 绉垎璁㈠崟锛屽崟鐙搷浣滆鍗曠粨绠楅噾棰濆拰鍟嗗缁撶畻瀛楁
diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java
index dd0e187..28e4ffe 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java
@@ -22,6 +22,7 @@
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.math.BigDecimal;
 import java.util.stream.Collectors;
 
 /**
@@ -129,6 +130,9 @@
     @ApiModelProperty(value = "宸插彂璐ф暟閲�")
     private Integer deliverNumber;
 
+    @ApiModelProperty(value = "鎶芥垚姣斾緥")
+    private BigDecimal commission;
+    
     public Integer getDeliverNumber() {
         if(deliverNumber == null){
             return 0;
diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/SupplierOrderSearchParams.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/SupplierOrderSearchParams.java
new file mode 100644
index 0000000..0dca2e2
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/SupplierOrderSearchParams.java
@@ -0,0 +1,227 @@
+package cn.lili.modules.order.order.entity.dto;
+
+import cn.hutool.core.text.CharSequenceUtil;
+import cn.lili.common.security.AuthUser;
+import cn.lili.common.security.context.UserContext;
+import cn.lili.common.utils.DateUtil;
+import cn.lili.common.vo.PageVO;
+import cn.lili.modules.order.order.entity.enums.*;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 璁㈠崟鏌ヨ鍙傛暟
+ *
+ * @author Chopper
+ * @since 2020/11/17 4:33 涓嬪崍
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class SupplierOrderSearchParams extends PageVO {
+
+    private static final long serialVersionUID = -6380573339089959194L;
+
+    @ApiModelProperty(value = "鍟嗗搧鍚嶇О")
+    private String goodsName;
+
+    @ApiModelProperty(value = "璁㈠崟缂栧彿")
+    private String orderSn;
+
+    @ApiModelProperty(value = "椤甸潰鏍囩",
+            example = "ALL:鍏ㄩ儴," +
+                    "WAIT_PAY:寰呬粯娆�," +
+                    "WAIT_ROG:寰呮敹璐�," +
+                    "CANCELLED:宸插彇娑�," +
+                    "COMPLETE:宸插畬鎴�")
+    private String tag;
+
+    @ApiModelProperty(value = "鍟嗗ID")
+    private String storeId;
+
+    @ApiModelProperty(value = "浼氬憳ID")
+    private String memberId;
+
+    @ApiModelProperty(value = "鏀惰揣浜�")
+    private String shipName;
+
+    @ApiModelProperty(value = "涔板鏄电О")
+    private String buyerName;
+
+    @ApiModelProperty(value = "璁㈠崟鐘舵��")
+    private String orderStatus;
+
+    @ApiModelProperty(value = "浠樻鐘舵��")
+    private String payStatus;
+
+    @ApiModelProperty(value = "鍏抽敭瀛� 鍟嗗搧鍚嶇О/涔板鍚嶇О/搴楅摵鍚嶇О")
+    private String keywords;
+
+    @ApiModelProperty(value = "浠樻鏂瑰紡")
+    private String paymentType;
+
+    /**
+     * @see OrderTypeEnum
+     * @see OrderPromotionTypeEnum
+     */
+    @ApiModelProperty(value = "璁㈠崟绫诲瀷", allowableValues = "NORMAL,VIRTUAL,GIFT,PINTUAN,POINT")
+    private String orderType;
+
+    @ApiModelProperty(value = "鏀粯鏂瑰紡")
+    private String paymentMethod;
+
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鏀粯鏃堕棿")
+    private Date paymentTime;
+
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "涓嬪崟寮�濮嬫椂闂�")
+    private Date startDate;
+
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "涓嬪崟缁撴潫鏃堕棿")
+    private Date endDate;
+
+    @ApiModelProperty(value = "璁㈠崟鏉ユ簮")
+    private String clientType;
+
+    /**
+     * @see CommentStatusEnum
+     */
+    @ApiModelProperty(value = "璇勮鐘舵��:鏈瘎璁�(UNFINISHED),寰呰拷璇�(WAIT_CHASE),璇勮瀹屾垚(FINISHED)锛�")
+    private String commentStatus;
+
+    @ApiModelProperty(value = "鏄惁涓哄叾浠栬鍗曚笅鐨勮鍗曪紝濡傛灉鏄垯涓轰緷璧栬鍗曠殑sn锛屽惁鍒欎负绌�")
+    private String parentOrderSn;
+
+    @ApiModelProperty(value = "鏄惁涓烘煇璁㈠崟绫诲瀷鐨勮鍗曪紝濡傛灉鏄垯涓鸿鍗曠被鍨嬬殑id锛屽惁鍒欎负绌�")
+    private String promotionId;
+
+    @ApiModelProperty(value = "鎬讳环鏍�,鍙互涓鸿寖鍥达紝濡�10_1000")
+    private String flowPrice;
+
+    /**
+     * @see OrderPromotionTypeEnum
+     */
+    @ApiModelProperty(value = "璁㈠崟淇冮攢绫诲瀷")
+    private String orderPromotionType;
+
+    public <T> QueryWrapper<T> queryWrapper() {
+        AuthUser currentUser = UserContext.getCurrentUser();
+        QueryWrapper<T> wrapper = new QueryWrapper<>();
+
+        //鍏抽敭瀛楁煡璇�
+        if (CharSequenceUtil.isNotEmpty(keywords)) {
+            wrapper.and(keyWrapper -> keyWrapper.like("o.sn", keywords).or().like("oi.goods_name", keywords));
+        }
+//        if (currentUser != null) {
+//            //鎸夊崠瀹舵煡璇�
+//            wrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.STORE.name()), "o.store_id", currentUser.getStoreId());
+//
+//            //搴楅摵鏌ヨ
+//            wrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.MANAGER.name())
+//                    && CharSequenceUtil.isNotEmpty(storeId), "o.store_id", storeId);
+//
+//            //鎸変拱瀹舵煡璇�
+//            wrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.MEMBER.name()) && memberId == null, "o.member_id", currentUser.getId());
+//
+//        }
+        wrapper.eq( CharSequenceUtil.isNotEmpty(storeId), "o.store_id", storeId);
+        //鎸夌収涔板鏌ヨ
+        wrapper.like(CharSequenceUtil.isNotEmpty(memberId), "o.member_id", memberId);
+
+        //鎸夎鍗曠紪鍙锋煡璇�
+        wrapper.like(CharSequenceUtil.isNotEmpty(orderSn), "o.sn", orderSn);
+
+        //鎸夋椂闂存煡璇�
+        wrapper.ge(startDate != null, "o.create_time", startDate);
+
+        wrapper.le(endDate != null, "o.create_time", DateUtil.endOfDate(endDate));
+        //鎸夎喘涔颁汉鐢ㄦ埛鍚�
+        wrapper.like(CharSequenceUtil.isNotEmpty(buyerName), "o.member_name", buyerName);
+
+        //鎸夎鍗曠被鍨�
+        wrapper.eq(CharSequenceUtil.isNotEmpty(orderType), "o.order_type", orderType);
+
+        //鐗╂祦鏌ヨ
+        wrapper.like(CharSequenceUtil.isNotEmpty(shipName), "o.consignee_name", shipName);
+
+        //鎸夊晢鍝佸悕绉版煡璇�
+        wrapper.like(CharSequenceUtil.isNotEmpty(goodsName), "oi.goods_name", goodsName);
+
+        //浠樻鏂瑰紡
+        wrapper.like(CharSequenceUtil.isNotEmpty(paymentType), "o.payment_type", paymentType);
+
+        //鎸夋敮浠樻柟寮�
+        wrapper.eq(CharSequenceUtil.isNotEmpty(paymentMethod), "o.payment_method", paymentMethod);
+
+        //璁㈠崟鐘舵��
+        wrapper.eq(CharSequenceUtil.isNotEmpty(orderStatus), "o.order_status", orderStatus);
+
+        //浠樻鐘舵��
+        wrapper.eq(CharSequenceUtil.isNotEmpty(payStatus), "o.pay_status", payStatus);
+
+        //璁㈠崟鏉ユ簮
+        wrapper.like(CharSequenceUtil.isNotEmpty(clientType), "o.client_type", clientType);
+
+        //鎸夎瘎浠风姸鎬�
+        wrapper.eq(CharSequenceUtil.isNotEmpty(commentStatus), "oi.comment_status", commentStatus);
+
+        //鎸夋爣绛炬煡璇�
+        if (CharSequenceUtil.isNotEmpty(tag)) {
+            String orderStatusColumn = "o.order_status";
+            OrderTagEnum tagEnum = OrderTagEnum.valueOf(tag);
+            switch (tagEnum) {
+                //寰呬粯娆�
+                case WAIT_PAY:
+                    wrapper.eq(orderStatusColumn, OrderStatusEnum.UNPAID.name());
+                    break;
+                //寰呭彂璐�
+                case WAIT_SHIP:
+                    wrapper.eq(orderStatusColumn, OrderStatusEnum.UNDELIVERED.name());
+                    break;
+                //寰呮敹璐�
+                case WAIT_ROG:
+                    wrapper.eq(orderStatusColumn, OrderStatusEnum.DELIVERED.name());
+                    break;
+                //宸插彇娑�
+                case CANCELLED:
+                    wrapper.eq(orderStatusColumn, OrderStatusEnum.CANCELLED.name());
+                    break;
+                //宸插畬鎴�
+                case COMPLETE:
+                    wrapper.eq(orderStatusColumn, OrderStatusEnum.COMPLETED.name());
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        // 渚濊禆璁㈠崟
+        wrapper.eq(parentOrderSn != null, "o.parent_order_sn", parentOrderSn);
+        // 淇冮攢娲诲姩id
+        wrapper.eq(CharSequenceUtil.isNotEmpty(promotionId), "o.promotion_id", promotionId);
+
+        wrapper.eq(CharSequenceUtil.isNotEmpty(orderPromotionType), "o.order_promotion_type", orderPromotionType);
+
+        if (CharSequenceUtil.isNotEmpty(flowPrice)) {
+            String[] s = flowPrice.split("_");
+            if (s.length > 1) {
+                wrapper.between("o.flow_price", s[0], s[1]);
+            } else {
+                wrapper.ge("o.flow_price", s[0]);
+            }
+        }
+        wrapper.eq("o.delete_flag", false);
+        return wrapper;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java
index 698f654..45e5d9e 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java
@@ -120,6 +120,29 @@
             ",GROUP_CONCAT(oi.refund_price) as group_refund_price " +
             " FROM li_order o LEFT JOIN li_order_item AS oi on o.sn = oi.order_sn ${ew.customSqlSegment} ")
     IPage<OrderSimpleXcxVO> queryByXcxParams(IPage<OrderSimpleVO> page, @Param(Constants.WRAPPER) Wrapper<OrderSimpleVO> queryWrapper);
+    /**
+     * 鍟嗘埛绔煡璇�
+     *
+     * @param page         鍒嗛〉
+     * @param queryWrapper 鏌ヨ鏉′欢
+     * @return 绠�鐭鍗曞垎椤�
+     */
+    @Select("select o.sn,o.flow_price,o.create_time,o.order_status,o.pay_status,o.payment_method,o.payment_time,o.member_name,o.store_name as " +
+            "store_name,o.store_id as store_id,o.client_type,o.order_type,o.deliver_status,o.order_promotion_type,o.seller_remark " +
+            ",GROUP_CONCAT(oi.goods_id) as group_goods_id," +
+            " GROUP_CONCAT(oi.sku_id) as group_sku_id," +
+            " GROUP_CONCAT(oi.num) as group_num" +
+            ",GROUP_CONCAT(oi.image) as group_images" +
+            ",GROUP_CONCAT(oi.goods_name) as group_name " +
+            ",GROUP_CONCAT(oi.after_sale_status) as group_after_sale_status" +
+            ",GROUP_CONCAT(oi.complain_status) as group_complain_status" +
+            ",GROUP_CONCAT(oi.comment_status) as group_comment_status" +
+            ",GROUP_CONCAT(oi.sn) as group_order_items_sn " +
+            ",GROUP_CONCAT(oi.goods_price) as group_goods_price " +
+            ",GROUP_CONCAT(oi.is_refund) as group_is_refund " +
+            ",GROUP_CONCAT(oi.refund_price) as group_refund_price " +
+            " FROM li_order o LEFT JOIN li_order_item AS oi on o.sn = oi.order_sn ${ew.customSqlSegment} ")
+    IPage<OrderSimpleXcxVO> querySupplierOrderParams(IPage<OrderSimpleVO> page, @Param(Constants.WRAPPER) Wrapper<OrderSimpleVO> queryWrapper);
 
     /**
      * 鏌ヨ璁㈠崟淇℃伅
diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java
index 93d229d..8978fad 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java
@@ -6,6 +6,7 @@
 import cn.lili.modules.order.order.entity.dto.OrderMessage;
 import cn.lili.modules.order.order.entity.dto.OrderSearchParams;
 import cn.lili.modules.order.order.entity.dto.PartDeliveryParamsDTO;
+import cn.lili.modules.order.order.entity.dto.SupplierOrderSearchParams;
 import cn.lili.modules.order.order.entity.vo.OrderDetailVO;
 import cn.lili.modules.order.order.entity.vo.OrderSimpleVO;
 import cn.lili.modules.order.order.entity.vo.OrderSimpleXcxVO;
@@ -61,6 +62,8 @@
      */
     IPage<OrderSimpleXcxVO> queryByXcxParams(OrderSearchParams orderSearchParams);
 
+    IPage<OrderSimpleXcxVO> querySupplierOrderParams(SupplierOrderSearchParams orderSearchParams);
+
     /**
      * 璁㈠崟淇℃伅
      *
diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
index dc4a066..74ee3e3 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
@@ -5,7 +5,6 @@
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.text.CharSequenceUtil;
-import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import cn.hutool.poi.excel.ExcelReader;
@@ -205,6 +204,12 @@
                     UserContext.getCurrentUser().getUsername(), message));
             item.getCheckedSkuList().forEach(
                     sku -> {
+//                        OrderItem e = new OrderItem(sku, item, tradeDTO);
+//                        String goodsId = e.getGoodsId();
+//                        Goods goods = goodsService.getById(goodsId);
+//                        item.getPriceDetailDTO().setPlatFormCommissionPoint(Double.valueOf(goods.getCommission().toString()));
+//                        e.setPriceDetailDTO(item.getPriceDetailDTO());
+//                        orderItems.add(e);
                         orderItems.add(new OrderItem(sku, item, tradeDTO));
                         currentOrderItems.add(new OrderItem(sku, item, tradeDTO));
                     }
@@ -237,6 +242,42 @@
         queryWrapper.groupBy("o.id");
         queryWrapper.orderByDesc("o.id");
         IPage<OrderSimpleXcxVO>  iPage = this.baseMapper.queryByXcxParams(PageUtil.initPage(orderSearchParams), queryWrapper);
+        Set<String> goodsIds = new HashSet<>();
+        for (OrderSimpleXcxVO orderSimpleVO : iPage.getRecords()) {
+            orderSimpleVO.setOrderItems(orderSimpleVO.initOrderItems());
+            String groupGoodsId = orderSimpleVO.getGroupGoodsId();
+            if (StringUtils.isNotBlank(groupGoodsId)) {
+                goodsIds.addAll(Arrays.asList(groupGoodsId.split(",")));
+            }
+        }
+        if (CollectionUtil.isNotEmpty(goodsIds)) {
+            List<Goods> list = goodsService.list(Wrappers.<Goods>lambdaQuery().in(Goods::getId, goodsIds));
+            Map<String, String> goodsVideos = list
+                    .stream().collect(Collectors.toMap(Goods::getId, g->
+                            StringUtils.isNotBlank(g.getGoodsVideo())?g.getGoodsVideo():""
+                    ));
+            iPage.getRecords().forEach(orderSimpleVO -> {
+                orderSimpleVO.getOrderItems().forEach(orderItem -> {
+                    String videoUrl = goodsVideos.get(orderItem.getGoodsId());
+                    if (StringUtils.isNotBlank(videoUrl)&&!videoUrl.contains("http")) {
+                        orderItem.setVideo(cosUtil.getPreviewUrl(videoUrl));
+                    }
+                    String image = orderItem.getImage();
+                    if (StringUtils.isNotBlank(image)&&!image.contains("http")) {
+                        orderItem.setImage(cosUtil.getPreviewUrl(image));
+                    }
+                });
+            });
+        }
+        return iPage;
+    }
+
+    @Override
+    public IPage<OrderSimpleXcxVO> querySupplierOrderParams(SupplierOrderSearchParams orderSearchParams) {
+        QueryWrapper queryWrapper = orderSearchParams.queryWrapper();
+        queryWrapper.groupBy("o.id");
+        queryWrapper.orderByDesc("o.id");
+        IPage<OrderSimpleXcxVO>  iPage = this.baseMapper.querySupplierOrderParams(PageUtil.initPage(orderSearchParams), queryWrapper);
         Set<String> goodsIds = new HashSet<>();
         for (OrderSimpleXcxVO orderSimpleVO : iPage.getRecords()) {
             orderSimpleVO.setOrderItems(orderSimpleVO.initOrderItems());
@@ -454,7 +495,25 @@
 
         //璁板綍搴楅摵璁㈠崟鏀粯娴佹按
         storeFlowService.payOrder(orderSn);
-
+        //todo 鐢熸垚璁㈠崟璁板綍琛�
+//        //鑾峰彇瀛愯鍗曟暟鎹�
+//        List<OrderItem> orderItems = orderItemService.getByOrderSn(orderSn);
+//        List<String> goodsIds = orderItems.stream().map(OrderItem::getGoodsId).distinct().collect(Collectors.toList());
+//
+//        Map<String, OrderItem> orderItem = orderItems.stream()
+//                .collect(Collectors.toMap(OrderItem::getGoodsId, Function.identity()
+//                        ,(oldValue, newValue) -> oldValue));
+//        //鏍规嵁璁㈠崟item椤瑰垱寤烘娊鎴愭祦姘磋鍗�
+//        List<CommissionRecord> commissionRecords = new ArrayList<>();
+//        CommissionRecord commissionRecord;
+//        for (OrderItem item : orderItems) {
+//            commissionRecord = new CommissionRecord();
+//            commissionRecord.setSn(item.getSn());
+//            BigDecimal commission = item.getCommission();
+//            commissionRecord.setCommission(commission);
+//            commissionRecord.setCommissionPrice();
+//
+//        }
         //鍙戦�佽鍗曞凡浠樻娑堟伅
         OrderMessage orderMessage = new OrderMessage();
         orderMessage.setOrderSn(order.getSn());
diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java
index ae91f6b..daf4a78 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java
@@ -26,7 +26,6 @@
 import cn.lili.modules.store.entity.vos.StoreFlowPayDownloadVO;
 import cn.lili.modules.store.entity.vos.StoreFlowRefundDownloadVO;
 import cn.lili.modules.store.service.BillService;
-import cn.lili.modules.system.entity.dto.payment.WechatPaymentSetting;
 import cn.lili.mybatis.util.PageUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
diff --git a/framework/src/main/java/cn/lili/modules/permission/entity/dos/AdminUser.java b/framework/src/main/java/cn/lili/modules/permission/entity/dos/AdminUser.java
index 92977e0..500f220 100644
--- a/framework/src/main/java/cn/lili/modules/permission/entity/dos/AdminUser.java
+++ b/framework/src/main/java/cn/lili/modules/permission/entity/dos/AdminUser.java
@@ -41,7 +41,7 @@
     private String email;
 
     @ApiModelProperty(value = "鐢ㄦ埛澶村儚")
-    private String avatar = "https://i.loli.net/2020/11/19/LyN6JF7zZRskdIe.png";
+    private String avatar = "";
 
     @ApiModelProperty(value = "鏄惁鏄秴绾х鐞嗗憳 瓒呯骇绠$悊鍛�/鏅�氱鐞嗗憳")
     private Boolean isSuper = false;
diff --git a/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java b/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java
index 493f594..acb53be 100644
--- a/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java
+++ b/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java
@@ -6,6 +6,8 @@
 import cn.lili.modules.goods.entity.dos.GoodsSku;
 import cn.lili.modules.goods.entity.dto.GoodsParamsDTO;
 import cn.lili.modules.promotion.tools.PromotionTools;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -15,6 +17,7 @@
 import org.springframework.data.elasticsearch.annotations.Document;
 import org.springframework.data.elasticsearch.annotations.Field;
 import org.springframework.data.elasticsearch.annotations.FieldType;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -271,6 +274,18 @@
     @Field(type = FieldType.Nested)
     private List<EsGoodsAttribute> attrList;
 
+
+    @ApiModelProperty(value = "棰勫敭缁撴潫鏃堕棿")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @Field(type = FieldType.Date)
+    private Date preSaleEndDate;
+
+    @ApiModelProperty(value = "棰勫敭寮�濮嬫椂闂�")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @Field(type = FieldType.Date)
+    private Date preSaleBeginDate;
     /**
      * 鍟嗗搧淇冮攢娲诲姩闆嗗悎
      * key 涓� 淇冮攢娲诲姩绫诲瀷
diff --git a/framework/src/main/java/cn/lili/modules/search/entity/dto/EsGoodsSearchDTO.java b/framework/src/main/java/cn/lili/modules/search/entity/dto/EsGoodsSearchDTO.java
index ba73b62..0563531 100644
--- a/framework/src/main/java/cn/lili/modules/search/entity/dto/EsGoodsSearchDTO.java
+++ b/framework/src/main/java/cn/lili/modules/search/entity/dto/EsGoodsSearchDTO.java
@@ -79,6 +79,9 @@
     @ApiModelProperty("鏄惁寮�鍚晢鍝佽繃婊�")
     private Boolean canFilter;
 
+    @ApiModelProperty("鏄惁闇�瑕佸紑鍚繃婊ら鍞晢鍝�")
+    private Boolean needFilterPre;
+
 
 
     //杩囨护鎼滅储鍏抽敭瀛�
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 0cadc1c..79d904b 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
@@ -48,6 +48,10 @@
 import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
 import org.springframework.stereotype.Service;
 
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -93,7 +97,7 @@
             cache.incrementScore(CachePrefix.HOT_WORD.getPrefix(), searchDTO.getKeyword());
         }
         NativeSearchQueryBuilder searchQueryBuilder = createSearchQueryBuilder(searchDTO, pageVo);
-        if (Objects.nonNull(searchDTO.getCanFilter())&&searchDTO.getCanFilter()){
+        if (Objects.nonNull(searchDTO.getCanFilter()) && searchDTO.getCanFilter()) {
             searchQueryBuilder.withCollapseField("goodsId.keyword");
         }
         NativeSearchQuery searchQuery = searchQueryBuilder.build();
@@ -557,6 +561,23 @@
         if (CharSequenceUtil.isNotEmpty(searchDTO.getPromotionsId()) && CharSequenceUtil.isNotEmpty(searchDTO.getPromotionType())) {
             filterBuilder.must(QueryBuilders.wildcardQuery("promotionMapJson", "*" + searchDTO.getPromotionType() + "-" + searchDTO.getPromotionsId() + "*"));
         }
+
+        if (Objects.nonNull(searchDTO.getNeedFilterPre()) && searchDTO.getNeedFilterPre()) {
+            // 杞崲涓哄綋澶� 00:00:00 鐨勬椂闂存埑锛堟绉掞級
+            long time = LocalDate.now().atStartOfDay(ZoneId.systemDefault())
+                    .toInstant()
+                    .toEpochMilli();
+            // 鏉′欢2锛氶鍞粨鏉熸椂闂� >= 褰撳墠鏃堕棿 OR 缁撴潫鏃堕棿涓虹┖
+            filterBuilder.must(QueryBuilders.boolQuery()
+                    .should(QueryBuilders.rangeQuery("preSaleEndDate").gte(time))
+                    .should(QueryBuilders.boolQuery()
+                            .mustNot(QueryBuilders.existsQuery("preSaleEndDate"))));
+            // 鏉′欢1锛氶鍞紑濮嬫椂闂� <= 褰撳墠鏃堕棿 OR 寮�濮嬫椂闂翠负绌�
+            filterBuilder.must(QueryBuilders.boolQuery()
+                    .should(QueryBuilders.rangeQuery("preSaleBeginDate").lte(time))
+                    .should(QueryBuilders.boolQuery()
+                            .mustNot(QueryBuilders.existsQuery("preSaleBeginDate"))));
+        }
         //浠锋牸鍖洪棿鍒ゅ畾
         if (CharSequenceUtil.isNotEmpty(searchDTO.getPrice())) {
             String[] prices = searchDTO.getPrice().split("_");
diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java
index 3f8b4dc..2d6693b 100644
--- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java
@@ -40,6 +40,7 @@
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.rocketmq.spring.core.RocketMQTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -97,8 +98,10 @@
     private Cache cache;
 
     @Override
-    public IPage<StoreVO> findByConditionPage(StoreSearchParams storeSearchParams, PageVO page) {
-        return this.baseMapper.getStoreList(PageUtil.initPage(page), storeSearchParams.queryWrapper());
+    public IPage<StoreVO> findByConditionPage(StoreSearchParams storeSearchParams, PageVO vo) {
+        Page<StoreVO> page = PageUtil.initPage(vo);
+        this.baseMapper.getStoreList(page, storeSearchParams.queryWrapper());
+        return page;
     }
 
     @Override
@@ -412,4 +415,4 @@
         return this.getOne(lambdaQueryWrapper, false);
     }
 
-}
\ No newline at end of file
+}
diff --git a/framework/src/main/resources/mapper/lmk/CommissionRecordMapper.xml b/framework/src/main/resources/mapper/lmk/CommissionRecordMapper.xml
new file mode 100644
index 0000000..8296ca6
--- /dev/null
+++ b/framework/src/main/resources/mapper/lmk/CommissionRecordMapper.xml
@@ -0,0 +1,86 @@
+<?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.CommissionRecordMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.CommissionRecordVO">
+        <id column="id" property="id"/>
+        <result column="store_id" property="storeId" />
+        <result column="goods_id" property="goodsId" />
+        <result column="sku_id" property="skuId" />
+        <result column="goods_name" property="goodsName" />
+        <result column="img_url" property="imgUrl" />
+        <result column="price" property="price" />
+        <result column="num" property="num" />
+        <result column="sum_price" property="sumPrice" />
+        <result column="commission" property="commission" />
+        <result column="commission_price" property="commissionPrice" />
+        <result column="remain_money" property="remainMoney" />
+        <result column="settlement_status" property="settlementStatus" />
+        <result column="can_settlement_time" property="canSettlementTime" />
+        <result column="trade_sn" property="tradeSn" />
+        <result column="sn" property="sn" />
+        <result column="type" property="type" />
+        <result column="delivery_status" property="deliveryStatus" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            LCR.store_id,
+            LCR.goods_id,
+            LCR.sku_id,
+            LCR.goods_name,
+            LCR.img_url,
+            LCR.price,
+            LCR.num,
+            LCR.sum_price,
+            LCR.commission,
+            LCR.commission_price,
+            LCR.remain_money,
+            LCR.settlement_status,
+            LCR.can_settlement_time,
+            LCR.trade_sn,
+            LCR.sn,
+            LCR.type,
+            LCR.delivery_status,
+            LCR.id
+        FROM
+            lmk_commission_record LCR
+        WHERE
+            LCR.id = #{id} AND LCR.delete_flag = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            LCR.store_id,
+            LCR.goods_id,
+            LCR.sku_id,
+            LCR.goods_name,
+            LCR.img_url,
+            LCR.price,
+            LCR.num,
+            LCR.sum_price,
+            LCR.commission,
+            LCR.commission_price,
+            LCR.remain_money,
+            LCR.settlement_status,
+            LCR.can_settlement_time,
+            LCR.trade_sn,
+            LCR.sn,
+            LCR.type,
+            LCR.delivery_status,
+            LCR.id
+        FROM
+            lmk_commission_record LCR
+        WHERE
+            LCR.delete_flag = 0
+    </select>
+
+</mapper>
diff --git a/framework/src/main/resources/mapper/lmk/CustomerMapper.xml b/framework/src/main/resources/mapper/lmk/CustomerMapper.xml
index 951ba0e..690e89f 100644
--- a/framework/src/main/resources/mapper/lmk/CustomerMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/CustomerMapper.xml
@@ -27,10 +27,10 @@
         <result property="experience" column="experience"/>
         <result property="createTime" column="create_time"/>
         <result property="blackId" column="blackId"/>
-<!--        <collection property="customerTagList"  ofType="cn.lili.modules.lmk.domain.vo.CustomerTagVO"-->
-<!--                    select="selectTagByMemberId"-->
-<!--                    column="id"-->
-<!--        />-->
+        <collection property="customerTagList"  ofType="cn.lili.modules.lmk.domain.vo.MemberTagVO"
+                    select="selectTagByMemberId"
+                    column="id"
+        />
     </resultMap>
 
     <select id="getPage" resultMap="BaseResultMap">
@@ -69,7 +69,7 @@
         ORDER BY lm.create_time DESC
     </select>
 
-    <select id="selectTagByMemberId" resultType="cn.lili.modules.lmk.domain.vo.CustomerTagVO">
+    <select id="selectTagByMemberId" resultType="cn.lili.modules.lmk.domain.vo.MemberTagVO">
         SELECT
             LCT.id,
             LCT.tag_name,
diff --git a/framework/src/main/resources/mapper/lmk/CustomerTagMapper.xml b/framework/src/main/resources/mapper/lmk/CustomerTagMapper.xml
deleted file mode 100644
index fe509b3..0000000
--- a/framework/src/main/resources/mapper/lmk/CustomerTagMapper.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?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.CustomerTagMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.CustomerTagVO">
-        <result column="tag_name" property="tagName" />
-        <result column="create_type" property="createType" />
-        <result column="create_by" property="createBy" />
-        <result column="create_time" property="createTime" />
-        <result column="update_by" property="updateBy" />
-        <result column="update_time" property="updateTime" />
-    </resultMap>
-
-
-
-
-
-
-    <select id="getById" resultMap="BaseResultMap">
-        SELECT
-            LCT.tag_name,
-            LCT.create_type,
-            LCT.create_by,
-            LCT.create_time,
-            LCT.update_by,
-            LCT.update_time,
-            LCT.id
-        FROM
-            lmk_customer_tag LCT
-        WHERE
-            LCT.id = #{id} AND LCT.delete_flag = 0
-    </select>
-
-
-    <select id="getPage" resultMap="BaseResultMap">
-        SELECT
-            LCT.tag_name,
-            LCT.create_type,
-            LCT.create_by,
-            LCT.create_time,
-            LCT.update_by,
-            LCT.update_time,
-            LCT.id
-        FROM
-            lmk_customer_tag LCT
-        WHERE
-            LCT.delete_flag = 0
-    </select>
-
-</mapper>
diff --git a/framework/src/main/resources/mapper/lmk/GoodsTagMapper.xml b/framework/src/main/resources/mapper/lmk/GoodsTagMapper.xml
new file mode 100644
index 0000000..6db5194
--- /dev/null
+++ b/framework/src/main/resources/mapper/lmk/GoodsTagMapper.xml
@@ -0,0 +1,15 @@
+<?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.GoodsTagMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.GoodsTagVO">
+        <result column="tag_id" property="tagId"/>
+        <result column="tag_name" property="tagName"/>
+        <result column="create_type" property="createType"/>
+        <result column="create_by" property="createBy"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_by" property="updateBy"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+</mapper>
diff --git a/framework/src/main/resources/mapper/lmk/MemberMapper.xml b/framework/src/main/resources/mapper/lmk/MemberMapper.xml
new file mode 100644
index 0000000..559581b
--- /dev/null
+++ b/framework/src/main/resources/mapper/lmk/MemberMapper.xml
@@ -0,0 +1,41 @@
+<?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.member.mapper.MemberMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.lili.modules.member.entity.vo.MemberVO">
+        <id column="id" property="id"/>
+        <result column="username" property="username"/>
+        <result column="nick_name" property="nickName"/>
+        <result column="sex" property="sex"/>
+        <result column="birthday" property="birthday"/>
+        <result column="region_id" property="regionId"/>
+        <result column="region" property="region"/>
+        <result column="mobile" property="mobile"/>
+        <result column="point" property="point"/>
+        <result column="total_point" property="totalPoint"/>
+        <result column="face" property="face"/>
+        <result column="disabled" property="disabled"/>
+        <result column="have_store" property="haveStore"/>
+        <result column="store_id" property="storeId"/>
+        <result column="open_id" property="openId"/>
+        <result column="client_enum" property="clientEnum"/>
+        <result column="last_login_date" property="lastLoginDate"/>
+        <result column="grade_id" property="gradeId"/>
+        <result column="experience" property="experience"/>
+        <collection property="tags" ofType="cn.lili.modules.lmk.domain.vo.MemberTagVO">
+            <id column="member_tag_id" property="id"/>
+            <result column="tag_name" property="tagName"/>
+            <result column="tag_id" property="tagId"/>
+        </collection>
+
+    </resultMap>
+    <select id="getVoById" resultMap="BaseResultMap">
+        select m.*, mt.id member_tag_id, mt.tag_name, mt.tag_id
+        from li_member m
+                 left join lmk_member_tag mt on m.id = mt.member_id and mt.delete_flag = 0
+        where m.id = #{id} and m.delete_flag = 0
+    </select>
+
+
+</mapper>
diff --git a/framework/src/main/resources/mapper/lmk/MemberTagMapper.xml b/framework/src/main/resources/mapper/lmk/MemberTagMapper.xml
new file mode 100644
index 0000000..55b6d9a
--- /dev/null
+++ b/framework/src/main/resources/mapper/lmk/MemberTagMapper.xml
@@ -0,0 +1,43 @@
+<?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.MemberTagMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.MemberTagVO">
+        <result column="tag_id" property="tagId"/>
+        <result column="tag_name" property="tagName"/>
+        <result column="create_type" property="createType"/>
+        <result column="create_by" property="createBy"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_by" property="updateBy"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT LCT.tag_name,
+               LCT.create_type,
+               LCT.create_by,
+               LCT.create_time,
+               LCT.update_by,
+               LCT.update_time,
+               LCT.id
+        FROM lmk_customer_tag LCT
+        WHERE LCT.id = #{id}
+          AND LCT.delete_flag = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT LCT.tag_name,
+               LCT.create_type,
+               LCT.create_by,
+               LCT.create_time,
+               LCT.update_by,
+               LCT.update_time,
+               LCT.id
+        FROM lmk_customer_tag LCT
+        WHERE LCT.delete_flag = 0
+    </select>
+
+</mapper>
diff --git a/framework/src/main/resources/mapper/lmk/MyCollectMapper.xml b/framework/src/main/resources/mapper/lmk/MyCollectMapper.xml
index f1ff446..71af97c 100644
--- a/framework/src/main/resources/mapper/lmk/MyCollectMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/MyCollectMapper.xml
@@ -101,10 +101,7 @@
         <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="goods_view_num" property="goodsViewNum" />
         <result column="video_duration" property="videoDuration" />
-        <result column="goods_order_num" property="goodsOrderNum" />
         <result column="recommend" property="recommend" />
         <result column="status" property="status" />
         <result column="play_num" property="playNum" />
diff --git a/framework/src/main/resources/mapper/lmk/MySubscribeMapper.xml b/framework/src/main/resources/mapper/lmk/MySubscribeMapper.xml
index 7b4b73f..09fb7ec 100644
--- a/framework/src/main/resources/mapper/lmk/MySubscribeMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/MySubscribeMapper.xml
@@ -34,8 +34,7 @@
             LMS.subscribe_user_id,
             LMS.id,
             LM.nick_name,
-            LM.face,
-            (SELECT COUNT(*) FROM lmk_my_subscribe WHERE subscribe_user_id = LMS.subscribe_user_id AND delete_flag = 0) as fans_num
+            LM.face
         FROM
             lmk_my_subscribe LMS
                 LEFT JOIN li_member LM ON LMS.subscribe_user_id = LM.id
diff --git a/framework/src/main/resources/mapper/lmk/PriceChangeMapper.xml b/framework/src/main/resources/mapper/lmk/PriceChangeMapper.xml
new file mode 100644
index 0000000..740ead2
--- /dev/null
+++ b/framework/src/main/resources/mapper/lmk/PriceChangeMapper.xml
@@ -0,0 +1,68 @@
+<?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.PriceChangeMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.PriceChangeVO">
+        <id column="id" property="id"/>
+        <result column="store_id" property="storeId" />
+        <result column="goods_id" property="goodsId" />
+        <result column="sku_id" property="skuId" />
+        <result column="previous_price" property="previousPrice" />
+        <result column="current_price" property="currentPrice" />
+        <result column="previous_commission" property="previousCommission" />
+        <result column="current_commission" property="currentCommission" />
+        <result column="operator_name" property="operatorName" />
+        <result column="operator_id" property="operatorId" />
+        <result column="examine_status" property="examineStatus" />
+        <result column="operator_type" property="operatorType" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            LPC.store_id,
+            LPC.goods_id,
+            LPC.sku_id,
+            LPC.previous_price,
+            LPC.current_price,
+            LPC.previous_commission,
+            LPC.current_commission,
+            LPC.operator_name,
+            LPC.operator_id,
+            LPC.examine_status,
+            LPC.operator_type,
+            LPC.id
+        FROM
+            lmk_price_change LPC
+        WHERE
+            LPC.id = #{id} AND LPC.delete_flag = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            LPC.store_id,
+            LPC.goods_id,
+            LPC.sku_id,
+            LPC.previous_price,
+            LPC.current_price,
+            LPC.previous_commission,
+            LPC.current_commission,
+            LPC.operator_name,
+            LPC.operator_id,
+            LPC.examine_status,
+            LPC.operator_type,
+            LPC.id
+        FROM
+            lmk_price_change LPC
+        WHERE
+            LPC.delete_flag = 0
+    </select>
+
+</mapper>
diff --git a/framework/src/main/resources/mapper/lmk/TagMapper.xml b/framework/src/main/resources/mapper/lmk/TagMapper.xml
index c8ceb7f..64261aa 100644
--- a/framework/src/main/resources/mapper/lmk/TagMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/TagMapper.xml
@@ -20,7 +20,10 @@
             and t.tag_name like concat('%',#{query.tagName},'%')
         </if>
         <if test="query.tagTypeId != null and query.tagTypeId  != ''">
-            and t.tag_type_id like concat('%',#{query.tagTypeId},'%')
+            and t.tag_type_id = #{query.tagTypeId}
+        </if>
+        <if test="query.tagTypeKey != null and query.tagTypeKey  != ''">
+            and tt.type_key = #{query.tagTypeKey}
         </if>
         order by t.sort_num
     </select>
diff --git a/framework/src/main/resources/mapper/lmk/VideoMapper.xml b/framework/src/main/resources/mapper/lmk/VideoMapper.xml
index 325a5d0..ca87dfc 100644
--- a/framework/src/main/resources/mapper/lmk/VideoMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/VideoMapper.xml
@@ -48,7 +48,7 @@
                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
+             INNER JOIN li_goods_sku LG ON LVG.goods_sku_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
@@ -102,6 +102,29 @@
         <collection property="goodsList" column="id" select="getVideoGoods" ofType="cn.lili.modules.lmk.domain.vo.VideoGoodsDetailVO"/>
     </resultMap>
 
+    <!-- 鎾斁鍘嗗彶 -->
+    <resultMap id="HistoryMap" type="cn.lili.modules.lmk.domain.vo.VideoHistoryVO">
+        <id column="id" property="id"/>
+        <result column="author_id" property="authorId" />
+        <result column="authorName" property="authorName" />
+        <result column="authorAvatar" property="authorAvatar" />
+        <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" />
+        <result column="thumbs_up_num" property="thumbsUpNum" />
+        <result column="status" property="status" />
+        <result column="video_content_type" property="videoContentType" />
+        <result column="video_type" property="videoType" />
+        <result column="video_imgs" property="videoImgs" />
+        <result column="historyId" property="historyId" />
+        <result column="play_at" property="playAt" />
+        <result column="playTime" property="playTime" />
+        <collection property="goodsList" column="id" select="getVideoGoods" ofType="cn.lili.modules.lmk.domain.vo.VideoGoodsDetailVO"/>
+    </resultMap>
 
     <select id="getById" resultMap="BaseResultMap">
         SELECT
@@ -244,6 +267,98 @@
         ORDER BY
             LV.create_time DESC
     </select>
+
+    <select id="goodsSimilarlyPage" 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.thumbs_up_num,
+            LV.weight,
+            LV.audit_pass_time,
+            LV.update_time,
+            LV.create_time,
+            LV.video_content_type,
+            LV.video_type,
+            LV.video_imgs,
+            LV.id,
+            CASE
+                WHEN LM.nick_name IS NOT NULL THEN LM.nick_name
+                WHEN LM.nick_name IS NULL THEN (SELECT nick_name FROM li_admin_user WHERE id = LV.author_id)
+                ELSE ''
+            END as authorName,
+            CASE
+                WHEN LM.face IS NOT NULL THEN LM.face
+                WHEN LM.face IS NULL THEN (SELECT avatar FROM li_admin_user WHERE id = LV.author_id)
+                ELSE ''
+            END as authorAvatar
+        FROM
+            lmk_video LV
+                INNER JOIN lmk_video_goods LVG ON LVG.video_id = LV.id AND LVG.goods_id in <foreach collection="query.goodsIds" open="(" item="goodsId" close=")" separator=",">#{goodsId}</foreach>
+                LEFT JOIN li_member LM ON LV.author_id = LM.id
+        WHERE
+            LV.delete_flag = 0 AND LV.status = '1' AND LV.id != #{query.currentVideoId}
+        ORDER BY
+            LV.create_time DESC
+    </select>
+
+    <select id="getHistoryPage" resultMap="HistoryMap">
+        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.thumbs_up_num,
+            LV.weight,
+            LV.audit_pass_time,
+            LV.update_time,
+            LV.create_time,
+            LV.video_content_type,
+            LV.video_type,
+            LV.video_imgs,
+            LV.id,
+            CASE
+                WHEN LM.nick_name IS NOT NULL THEN LM.nick_name
+                WHEN LM.nick_name IS NULL THEN (SELECT nick_name FROM li_admin_user WHERE id = LV.author_id)
+                ELSE ''
+            END as authorName,
+            CASE
+                WHEN LM.face IS NOT NULL THEN LM.face
+                WHEN LM.face IS NULL THEN (SELECT avatar FROM li_admin_user WHERE id = LV.author_id)
+                ELSE ''
+            END as authorAvatar,
+            LFP.id as historyId,
+            LFP.play_at,
+            LFP.update_time as playTime
+        FROM
+            li_foot_print LFP
+                INNER JOIN lmk_video LV ON LFP.ref_id = LV.id AND LFP.view_type = 'video' AND LFP.delete_flag = 0 AND LFP.member_id = #{query.userId}
+                LEFT JOIN li_member LM ON LV.author_id = LM.id
+        WHERE
+            LV.delete_flag = 0 AND LV.status = '1'
+        ORDER BY
+            LFP.update_time DESC
+    </select>
+
     <select id="recommendHealthVideo" resultMap="WxResultMap">
         SELECT
             LV.author_id,
diff --git a/lmk-job/src/main/java/cn/lili/handler/EveryDayExecute.java b/lmk-job/src/main/java/cn/lili/handler/EveryDayExecute.java
new file mode 100644
index 0000000..8f17e5d
--- /dev/null
+++ b/lmk-job/src/main/java/cn/lili/handler/EveryDayExecute.java
@@ -0,0 +1,18 @@
+package cn.lili.handler;
+
+/**
+ * 姣忔棩浠诲姟
+ * 姣忔棩鍑屾櫒1鐐规墽琛�
+ *
+ * @author Chopper
+ * @since 2020/12/24 11:52
+ */
+public interface EveryDayExecute {
+
+    /**
+     * 鎵ц姣忔棩浠诲姟
+     */
+    void execute();
+
+
+}
diff --git a/lmk-job/src/main/java/cn/lili/handler/EveryHourExecute.java b/lmk-job/src/main/java/cn/lili/handler/EveryHourExecute.java
new file mode 100644
index 0000000..1cc031f
--- /dev/null
+++ b/lmk-job/src/main/java/cn/lili/handler/EveryHourExecute.java
@@ -0,0 +1,17 @@
+package cn.lili.handler;
+
+/**
+ * 姣忓皬鏃朵换鍔�
+ *
+ * @author Chopper
+ * @since 2020/12/24 11:52
+ */
+public interface EveryHourExecute {
+
+    /**
+     * 鎵ц
+     */
+    void execute();
+
+
+}
diff --git a/lmk-job/src/main/java/cn/lili/handler/EveryMinuteExecute.java b/lmk-job/src/main/java/cn/lili/handler/EveryMinuteExecute.java
new file mode 100644
index 0000000..a312dd9
--- /dev/null
+++ b/lmk-job/src/main/java/cn/lili/handler/EveryMinuteExecute.java
@@ -0,0 +1,17 @@
+package cn.lili.handler;
+
+/**
+ * 姣忓垎閽熶换鍔�
+ *
+ * @author Chopper
+ * @since 2020/12/24 11:52
+ */
+public interface EveryMinuteExecute {
+
+    /**
+     * 鎵ц
+     */
+    void execute();
+
+
+}
diff --git a/lmk-job/src/main/java/cn/lili/handler/impl/broadcast/BroadcastExecute.java b/lmk-job/src/main/java/cn/lili/handler/impl/broadcast/BroadcastExecute.java
new file mode 100644
index 0000000..f2c5c1c
--- /dev/null
+++ b/lmk-job/src/main/java/cn/lili/handler/impl/broadcast/BroadcastExecute.java
@@ -0,0 +1,25 @@
+package cn.lili.handler.impl.broadcast;
+
+import cn.lili.handler.EveryHourExecute;
+import cn.lili.modules.goods.service.CommodityService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 灏忕▼搴忕洿鎾姸鎬佽幏鍙�
+ *
+ * @author Bulbasaur
+ * @since 2021/5/20 2:52 涓嬪崍
+ */
+@Component
+public class BroadcastExecute implements EveryHourExecute {
+
+    @Autowired
+    private CommodityService commodityService;
+
+    @Override
+    public void execute() {
+        //鍚屾鐩存挱鍟嗗搧鐘舵��
+        commodityService.getGoodsWareHouse();
+    }
+}
diff --git a/lmk-job/src/main/java/cn/lili/handler/impl/coupon/CouponExecute.java b/lmk-job/src/main/java/cn/lili/handler/impl/coupon/CouponExecute.java
new file mode 100644
index 0000000..60662aa
--- /dev/null
+++ b/lmk-job/src/main/java/cn/lili/handler/impl/coupon/CouponExecute.java
@@ -0,0 +1,56 @@
+package cn.lili.handler.impl.coupon;
+
+import cn.lili.handler.EveryDayExecute;
+import cn.lili.modules.promotion.entity.dos.MemberCoupon;
+import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum;
+import cn.lili.modules.promotion.service.MemberCouponService;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * 浼樻儬鍒哥姸鎬佺洃娴�
+ *
+ * @author Bulbasaur
+ * @since 2021/5/24 10:08 涓婂崍
+ */
+@Component
+public class CouponExecute implements EveryDayExecute {
+
+    /**
+     * 杩囨湡甯搁噺锛岃繃鏈熷悗鎴栬�呬娇鐢ㄥ悗涓�瀹氭椂闂村唴锛屽垹闄ゆ棤鏁堢殑浼樻儬鍒革紝鐗╃悊鍒犻櫎
+     */
+    static final int EXPIRATION_DAY = 3;
+
+    @Autowired
+    private MemberCouponService memberCouponService;
+
+    /**
+     * 妫�娴嬩紭鎯犲埜鐨勪娇鐢ㄦ椂闂达紝瓒呮湡鏈娇鐢ㄥ垯澶辨晥
+     * 姝ゆ柟娉曠敤浜庨鍙�*澶╁悗澶辨晥浼樻儬鍒镐娇鐢�
+     */
+    @Override
+    public void execute() {
+        //灏嗚繃鏈熶紭鎯犲埜鍙樻洿涓鸿繃鏈熺姸鎬�
+        LambdaUpdateWrapper<MemberCoupon> updateWrapper = new LambdaUpdateWrapper<MemberCoupon>()
+                .eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name())
+                .le(MemberCoupon::getEndTime, new Date())
+                .set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name());
+        this.memberCouponService.update(updateWrapper);
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) - EXPIRATION_DAY);
+        Date removeTime = calendar.getTime();
+        //鍒犻櫎杩囨湡/宸蹭娇鐢ㄧ殑浼樻儬鍒�
+        LambdaUpdateWrapper<MemberCoupon> deleteWrapper = new LambdaUpdateWrapper<MemberCoupon>()
+                //濡傛灉缁撴潫鏃堕棿灏忎簬 褰撳墠鏃堕棿澧炲姞鎸囧畾鍒犻櫎鏃ユ湡锛屽垯鍒犻櫎
+                .le(MemberCoupon::getEndTime, removeTime);
+        this.memberCouponService.remove(deleteWrapper);
+
+
+    }
+
+}
diff --git a/lmk-job/src/main/java/cn/lili/handler/impl/goods/GoodsExecute.java b/lmk-job/src/main/java/cn/lili/handler/impl/goods/GoodsExecute.java
new file mode 100644
index 0000000..6e57aeb
--- /dev/null
+++ b/lmk-job/src/main/java/cn/lili/handler/impl/goods/GoodsExecute.java
@@ -0,0 +1,48 @@
+package cn.lili.handler.impl.goods;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.lili.handler.EveryDayExecute;
+import cn.lili.modules.goods.service.GoodsService;
+import cn.lili.modules.member.service.MemberEvaluationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍟嗗搧瀹氭椂鍣�
+ *
+ * @author Chopper
+ * @since 2021/3/18 3:23 涓嬪崍
+ */
+@Component
+public class GoodsExecute implements EveryDayExecute {
+    /**
+     * 浼氬憳璇勪环
+     */
+    @Autowired
+    private MemberEvaluationService memberEvaluationService;
+    /**
+     * 鍟嗗搧
+     */
+    @Autowired
+    private GoodsService goodsService;
+
+    /**
+     * 鏌ヨ宸蹭笂鏋剁殑鍟嗗搧鐨勮瘎浠锋暟閲忓苟璧嬪��
+     */
+    @Override
+    public void execute() {
+
+        //鏌ヨ涓婃缁熻鍒版湰娆$殑璇勪环鏁伴噺
+        List<Map<String, Object>> list = memberEvaluationService.memberEvaluationNum(DateUtil.yesterday(), new DateTime());
+
+        for (Map<String, Object> map : list) {
+            goodsService.addGoodsCommentNum(Convert.toInt(map.get("num").toString()), map.get("goods_id").toString());
+        }
+
+    }
+}
diff --git a/lmk-job/src/main/java/cn/lili/handler/impl/hotwords/HotWordsEveryDayTaskExecute.java b/lmk-job/src/main/java/cn/lili/handler/impl/hotwords/HotWordsEveryDayTaskExecute.java
new file mode 100644
index 0000000..f299b93
--- /dev/null
+++ b/lmk-job/src/main/java/cn/lili/handler/impl/hotwords/HotWordsEveryDayTaskExecute.java
@@ -0,0 +1,86 @@
+package cn.lili.handler.impl.hotwords;
+
+import cn.hutool.json.JSONUtil;
+import cn.lili.cache.Cache;
+import cn.lili.cache.CachePrefix;
+import cn.lili.handler.EveryDayExecute;
+import cn.lili.modules.search.entity.dos.HotWordsHistory;
+import cn.lili.modules.search.service.HotWordsHistoryService;
+import cn.lili.modules.system.entity.dos.Setting;
+import cn.lili.modules.system.entity.dto.HotWordsSetting;
+import cn.lili.modules.system.entity.dto.HotWordsSettingItem;
+import cn.lili.modules.system.entity.enums.SettingEnum;
+import cn.lili.modules.system.service.SettingService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.DefaultTypedTuple;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author paulG
+ * @since 2021/3/11
+ **/
+@Slf4j
+@Component
+public class HotWordsEveryDayTaskExecute implements EveryDayExecute {
+
+    @Autowired
+    private Cache cache;
+
+    @Autowired
+    private HotWordsHistoryService hotWordsHistoryService;
+    @Autowired
+    private SettingService settingService;
+
+    /**
+     * 鎵ц姣忔棩浠诲姟
+     */
+    @Override
+    public void execute() {
+        //鑾峰彇澶т簬0鍒嗙殑鐑瘝
+        Set<DefaultTypedTuple> tuples = cache.zRangeByScore(CachePrefix.HOT_WORD.getPrefix(), 1, Integer.MAX_VALUE);
+        //濡傛灉浠诲姟涓嶄负绌�
+        if (!CollectionUtils.isEmpty(tuples)) {
+
+            //鍥犱负鏄浜屽ぉ缁熻绗竴澶╃殑鏁版嵁锛屾墍浠ヨ繖閲岃幏鍙栨槰澶╁噷鏅ㄧ殑鏃堕棿
+            Calendar calendar = Calendar.getInstance();
+            calendar.set(Calendar.HOUR_OF_DAY, 0);
+            calendar.set(Calendar.SECOND, 0);
+            calendar.set(Calendar.MILLISECOND, 0);
+            calendar.set(Calendar.MINUTE, 0);
+            calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 1);
+
+            //鎵归噺淇濆瓨鐑瘝
+            List<HotWordsHistory> hotWordsHistories = new ArrayList<>();
+            for (DefaultTypedTuple tuple : tuples) {
+                String keywords = (String) tuple.getValue();
+                Double score = tuple.getScore();
+                hotWordsHistories.add(new HotWordsHistory(keywords, score.intValue(), calendar.getTime()));
+            }
+
+            hotWordsHistoryService.saveBatch(hotWordsHistories);
+        }
+        //绉婚櫎鏄ㄦ棩鐨勭儹鎼滆瘝
+        cache.remove(CachePrefix.HOT_WORD.getPrefix());
+
+        //璁剧疆浠婃棩榛樿鐑瘝
+        Setting setting = settingService.get(SettingEnum.HOT_WORDS.name());
+        if (setting == null) {
+            return;
+        }
+        HotWordsSetting hotWordsSetting = JSONUtil.toBean(setting.getSettingValue(), HotWordsSetting.class);
+        List<HotWordsSettingItem> hotWordsSettingItems = hotWordsSetting.getHotWordsSettingItems();
+        if (hotWordsSettingItems != null && !hotWordsSettingItems.isEmpty()) {
+            for (HotWordsSettingItem hotWordsSettingItem : hotWordsSettingItems) {
+                cache.zAdd(CachePrefix.HOT_WORD.getPrefix(), hotWordsSettingItem.getScore(), hotWordsSettingItem.getKeywords());
+            }
+        }
+    }
+
+}
diff --git a/lmk-job/src/main/java/cn/lili/handler/impl/order/CancelOrderTaskExecute.java b/lmk-job/src/main/java/cn/lili/handler/impl/order/CancelOrderTaskExecute.java
new file mode 100644
index 0000000..371147f
--- /dev/null
+++ b/lmk-job/src/main/java/cn/lili/handler/impl/order/CancelOrderTaskExecute.java
@@ -0,0 +1,61 @@
+package cn.lili.handler.impl.order;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.json.JSONUtil;
+import cn.lili.handler.EveryMinuteExecute;
+import cn.lili.modules.order.order.entity.dos.Order;
+import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
+import cn.lili.modules.order.order.service.OrderService;
+import cn.lili.modules.system.entity.dos.Setting;
+import cn.lili.modules.system.entity.dto.OrderSetting;
+import cn.lili.modules.system.entity.enums.SettingEnum;
+import cn.lili.modules.system.service.SettingService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 璁㈠崟鑷姩鍙栨秷锛堟瘡鍒嗛挓鎵ц锛�
+ *
+ * @author paulG
+ * @since 2021/3/11
+ **/
+@Slf4j
+@Component
+public class CancelOrderTaskExecute implements EveryMinuteExecute {
+    /**
+     * 璁㈠崟
+     */
+    @Autowired
+    private OrderService orderService;
+    /**
+     * 璁剧疆
+     */
+    @Autowired
+    private SettingService settingService;
+
+
+    @Override
+    public void execute() {
+        Setting setting = settingService.get(SettingEnum.ORDER_SETTING.name());
+        OrderSetting orderSetting = JSONUtil.toBean(setting.getSettingValue(), OrderSetting.class);
+        if (orderSetting != null && orderSetting.getAutoCancel() != null) {
+            //璁㈠崟鑷姩鍙栨秷鏃堕棿 = 褰撳墠鏃堕棿 - 鑷姩鍙栨秷鏃堕棿鍒嗛挓鏁�
+            DateTime cancelTime = DateUtil.offsetMinute(DateUtil.date(), -orderSetting.getAutoCancel());
+            LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(Order::getOrderStatus, OrderStatusEnum.UNPAID.name());
+            //璁㈠崟鍒涘缓鏃堕棿 <= 璁㈠崟鑷姩鍙栨秷鏃堕棿
+            queryWrapper.le(Order::getCreateTime, cancelTime);
+            List<Order> list = orderService.list(queryWrapper);
+            List<String> cancelSnList = list.stream().map(Order::getSn).collect(Collectors.toList());
+            for (String sn : cancelSnList) {
+                orderService.systemCancel(sn, "瓒呮椂鏈敮浠樿嚜鍔ㄥ彇娑�",false);
+            }
+        }
+    }
+}
diff --git a/lmk-job/src/main/java/cn/lili/handler/impl/order/OrderEveryDayTaskExecute.java b/lmk-job/src/main/java/cn/lili/handler/impl/order/OrderEveryDayTaskExecute.java
new file mode 100644
index 0000000..40a1d6b
--- /dev/null
+++ b/lmk-job/src/main/java/cn/lili/handler/impl/order/OrderEveryDayTaskExecute.java
@@ -0,0 +1,287 @@
+package cn.lili.handler.impl.order;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.json.JSONUtil;
+import cn.lili.common.enums.ResultCode;
+import cn.lili.common.exception.ServiceException;
+import cn.lili.handler.EveryDayExecute;
+import cn.lili.modules.distribution.service.DistributionOrderService;
+import cn.lili.modules.member.entity.dto.MemberEvaluationDTO;
+import cn.lili.modules.member.entity.enums.EvaluationGradeEnum;
+import cn.lili.modules.member.service.MemberEvaluationService;
+import cn.lili.modules.order.order.entity.dos.Order;
+import cn.lili.modules.order.order.entity.dos.OrderItem;
+import cn.lili.modules.order.order.entity.dto.OrderItemOperationDTO;
+import cn.lili.modules.order.order.entity.enums.CommentStatusEnum;
+import cn.lili.modules.order.order.entity.enums.OrderComplaintStatusEnum;
+import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum;
+import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
+import cn.lili.modules.order.order.service.OrderItemService;
+import cn.lili.modules.order.order.service.OrderService;
+import cn.lili.modules.order.order.service.StoreFlowService;
+import cn.lili.modules.store.entity.dto.StoreSettlementDay;
+import cn.lili.modules.store.service.BillService;
+import cn.lili.modules.store.service.StoreDetailService;
+import cn.lili.modules.system.entity.dos.Setting;
+import cn.lili.modules.system.entity.dto.OrderSetting;
+import cn.lili.modules.system.entity.enums.SettingEnum;
+import cn.lili.modules.system.service.SettingService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author paulG
+ * @since 2021/3/11
+ **/
+@Slf4j
+@Component
+
+public class OrderEveryDayTaskExecute implements EveryDayExecute {
+
+    /**
+     * 璁㈠崟
+     */
+    @Autowired
+    private OrderService orderService;
+    /**
+     * 璁㈠崟璐х墿
+     */
+    @Autowired
+    private OrderItemService orderItemService;
+    /**
+     * 璁剧疆
+     */
+    @Autowired
+    private SettingService settingService;
+    /**
+     * 浼氬憳璇勪环
+     */
+    @Autowired
+    private MemberEvaluationService memberEvaluationService;
+
+    @Autowired
+    private DistributionOrderService distributionOrderService;
+
+    @Autowired
+    private StoreFlowService storeFlowService;
+
+    /**
+     * 缁撶畻鍗�
+     */
+    @Autowired
+    private BillService billService;
+    /**
+     * 搴楅摵璇︽儏
+     */
+    @Autowired
+    private StoreDetailService storeDetailService;
+
+    /**
+     * 鎵ц姣忔棩浠诲姟
+     */
+    @Override
+    public void execute() {
+
+        Setting setting = settingService.get(SettingEnum.ORDER_SETTING.name());
+        //璁㈠崟璁剧疆
+        OrderSetting orderSetting = JSONUtil.toBean(setting.getSettingValue(), OrderSetting.class);
+        if (orderSetting == null) {
+            throw new ServiceException(ResultCode.ORDER_SETTING_ERROR);
+        }
+
+        try {
+            //鑷姩纭鏀惰揣
+            completedOrder(orderSetting);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        try {
+            //鑷姩濂借瘎
+            memberEvaluation(orderSetting);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        try {
+            //鍏抽棴鍏佽鍞悗鐢宠
+            this.closeAfterSale(orderSetting);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        try {
+            //鍏抽棴鍏佽鎶曡瘔
+            closeComplaint(orderSetting);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+
+        //淇敼鍒嗚处鐘舵��
+        try {
+            storeFlowService.updateProfitSharingStatus();
+        } catch (Exception e) {
+            log.error("淇敼鍒嗚处鐘舵�佸け璐�", e);
+        }
+
+        //鐢熸垚搴楅摵缁撶畻鍗�
+        try {
+            createBill();
+        } catch (Exception e) {
+            log.error("鐢熸垚搴楅摵缁撶畻鍗�", e);
+        }
+
+
+    }
+
+    /**
+     * 鑷姩纭鏀惰幏锛岃鍗曞畬鎴�
+     *
+     * @param orderSetting 璁㈠崟璁剧疆
+     */
+    private void completedOrder(OrderSetting orderSetting) {
+
+        //璁㈠崟鑷姩鏀惰揣鏃堕棿 = 褰撳墠鏃堕棿 - 鑷姩鏀惰揣鏃堕棿澶╂暟
+        DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoReceive());
+        LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Order::getOrderStatus, OrderStatusEnum.DELIVERED.name());
+
+        //璁㈠崟鍙戣揣鏃堕棿 >= 璁㈠崟鑷姩鏀惰揣鏃堕棿
+        queryWrapper.le(Order::getLogisticsTime, receiveTime);
+        List<Order> list = orderService.list(queryWrapper);
+
+        try {
+            //鍒ゆ柇鏄惁鏈夌鍚堟潯浠剁殑璁㈠崟锛岃繘琛岃鍗曞畬鎴愬鐞�
+            if (!list.isEmpty()) {
+                List<String> receiveSnList = list.stream().map(Order::getSn).collect(Collectors.toList());
+                for (String orderSn : receiveSnList) {
+                    orderService.systemComplete(orderSn);
+                }
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+    }
+
+    /**
+     * 鑷姩濂借瘎
+     *
+     * @param orderSetting 璁㈠崟璁剧疆
+     */
+    private void memberEvaluation(OrderSetting orderSetting) {
+        //璁㈠崟鑷姩鏀惰揣鏃堕棿 = 褰撳墠鏃堕棿 - 鑷姩鏀惰揣鏃堕棿澶╂暟
+        DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoEvaluation());
+
+        //璁㈠崟瀹屾垚鏃堕棿 <= 璁㈠崟鑷姩濂借瘎鏃堕棿
+        OrderItemOperationDTO orderItemOperationDTO =
+            OrderItemOperationDTO.builder().receiveTime(receiveTime).commentStatus(CommentStatusEnum.UNFINISHED.name())
+                .build();
+        List<OrderItem> orderItems = orderItemService.waitOperationOrderItem(orderItemOperationDTO);
+
+        //鍒ゆ柇鏄惁鏈夌鍚堟潯浠剁殑璁㈠崟锛岃繘琛岃嚜鍔ㄨ瘎浠峰鐞�
+        if (!orderItems.isEmpty()) {
+            for (OrderItem orderItem : orderItems) {
+                MemberEvaluationDTO memberEvaluationDTO = new MemberEvaluationDTO();
+                memberEvaluationDTO.setOrderItemSn(orderItem.getSn());
+                memberEvaluationDTO.setContent("绯荤粺榛樿濂借瘎");
+                memberEvaluationDTO.setGoodsId(orderItem.getGoodsId());
+                memberEvaluationDTO.setSkuId(orderItem.getSkuId());
+                memberEvaluationDTO.setGrade(EvaluationGradeEnum.GOOD.name());
+                memberEvaluationDTO.setDeliveryScore(5);
+                memberEvaluationDTO.setDescriptionScore(5);
+                memberEvaluationDTO.setServiceScore(5);
+
+                try {
+                    memberEvaluationService.addMemberEvaluation(memberEvaluationDTO, false);
+                } catch (Exception e) {
+                    // 淇敼璁㈠崟璐х墿璇勪环鐘舵�佷负宸茶瘎浠烽伩鍏嶆棤闄愯皟鐢ㄨ瘎浠峰紓甯�
+                    orderItemService.updateCommentStatus(orderItem.getSn(), CommentStatusEnum.FINISHED);
+                    log.error(e.getMessage(), e);
+                }
+            }
+        }
+    }
+
+    /**
+     * 鍏抽棴鍏佽鍞悗鐢宠
+     *
+     * @param orderSetting 璁㈠崟璁剧疆
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void closeAfterSale(OrderSetting orderSetting) {
+        //璁㈠崟鍏抽棴鍞悗鐢宠鏃堕棿 = 褰撳墠鏃堕棿 - 鑷姩鍏抽棴鍞悗鐢宠澶╂暟
+        DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getCloseAfterSale());
+
+//        OrderItemOperationDTO build = OrderItemOperationDTO.builder().receiveTime(receiveTime)
+//            .afterSaleStatus(OrderItemAfterSaleStatusEnum.NOT_APPLIED.name()).build();
+//        List<OrderItem> orderItems = orderItemService.waitOperationOrderItem(build);
+        //鍏抽棴鍞悗璁㈠崟=鏈敭鍚庤鍗�+灏忎簬璁㈠崟鍏抽棴鍞悗鐢宠鏃堕棿
+        orderItemService.expiredAfterSaleStatus(receiveTime);
+
+    }
+
+    /**
+     * 鍏抽棴鍏佽浜ゆ槗鎶曡瘔
+     *
+     * @param orderSetting 璁㈠崟璁剧疆
+     */
+    private void closeComplaint(OrderSetting orderSetting) {
+
+        //涓�0鍒欎笉闄愬埗
+        if (orderSetting.getCloseComplaint() == null || orderSetting.getCloseComplaint() == 0) {
+            return;
+        }
+        //璁㈠崟鍏抽棴浜ゆ槗鎶曡瘔鐢宠鏃堕棿 = 褰撳墠鏃堕棿 - 鑷姩鍏抽棴浜ゆ槗鎶曡瘔鐢宠澶╂暟
+        DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getCloseComplaint());
+
+        //鍏抽棴鍞悗璁㈠崟=鏈敭鍚庤鍗�+灏忎簬璁㈠崟鍏抽棴鍞悗鐢宠鏃堕棿
+        OrderItemOperationDTO build = OrderItemOperationDTO.builder().receiveTime(receiveTime)
+            .complainStatus(OrderComplaintStatusEnum.NO_APPLY.name()).build();
+        List<OrderItem> orderItems = orderItemService.waitOperationOrderItem(build);
+
+        //鍒ゆ柇鏄惁鏈夌鍚堟潯浠剁殑璁㈠崟锛屽叧闂厑璁稿敭鍚庣敵璇峰鐞�
+        if (!orderItems.isEmpty()) {
+
+            //鑾峰彇璁㈠崟璐х墿ID
+            List<String> orderItemIdList = orderItems.stream().map(OrderItem::getId).collect(Collectors.toList());
+
+            //淇敼璁㈠崟鎶曡瘔鐘舵��
+            LambdaUpdateWrapper<OrderItem> lambdaUpdateWrapper =
+                new LambdaUpdateWrapper<OrderItem>().set(OrderItem::getComplainStatus,
+                    OrderItemAfterSaleStatusEnum.EXPIRED.name()).in(OrderItem::getId, orderItemIdList);
+            orderItemService.update(lambdaUpdateWrapper);
+        }
+
+    }
+
+    /**
+     * 1.鏌ヨ浠婃棩寰呯粨绠楃殑鍟嗗
+     * 2.鏌ヨ鍟嗗涓婃缁撶畻鏃ユ湡锛岀敓鎴愭湰娆$粨绠楀崟
+     * 3.璁板綍鍟嗗缁撶畻鏃�
+     */
+    private void createBill() {
+        //鑾峰彇褰撳墠澶╂暟
+        int day = DateUtil.date().dayOfMonth();
+
+        //鑾峰彇寰呯粨绠楀晢瀹跺垪琛�
+        List<StoreSettlementDay> storeList = storeDetailService.getSettlementStore(day);
+
+        //鑾峰彇褰撳墠鏃堕棿
+        DateTime endTime = DateUtil.date();
+        //鎵归噺鍟嗗缁撶畻
+        for (StoreSettlementDay storeSettlementDay : storeList) {
+
+            //鐢熸垚缁撶畻鍗�
+            billService.createBill(storeSettlementDay.getStoreId(), storeSettlementDay.getSettlementDay(), endTime);
+
+            //淇敼搴楅摵缁撶畻鏃堕棿
+            storeDetailService.updateSettlementDay(storeSettlementDay.getStoreId(), endTime);
+        }
+    }
+
+}
diff --git a/lmk-job/src/main/java/cn/lili/handler/impl/order/RechargeOrderTaskExecute.java b/lmk-job/src/main/java/cn/lili/handler/impl/order/RechargeOrderTaskExecute.java
new file mode 100644
index 0000000..7e44a39
--- /dev/null
+++ b/lmk-job/src/main/java/cn/lili/handler/impl/order/RechargeOrderTaskExecute.java
@@ -0,0 +1,61 @@
+package cn.lili.handler.impl.order;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.json.JSONUtil;
+import cn.lili.handler.EveryMinuteExecute;
+import cn.lili.modules.order.order.entity.enums.PayStatusEnum;
+import cn.lili.modules.system.entity.dos.Setting;
+import cn.lili.modules.system.entity.dto.OrderSetting;
+import cn.lili.modules.system.entity.enums.SettingEnum;
+import cn.lili.modules.system.service.SettingService;
+import cn.lili.modules.wallet.entity.dos.Recharge;
+import cn.lili.modules.wallet.service.RechargeService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 鍏呭�艰鍗曡嚜鍔ㄥ彇娑堬紙姣忓垎閽熸墽琛岋級
+ *
+ * @author zhuhai
+ * @since 2021/3/11
+ **/
+@Slf4j
+@Component
+public class RechargeOrderTaskExecute implements EveryMinuteExecute {
+    /**
+     * 鍏呭��
+     */
+    @Autowired
+    private RechargeService rechargeService;
+    /**
+     * 璁剧疆
+     */
+    @Autowired
+    private SettingService settingService;
+
+
+    @Override
+    public void execute() {
+        Setting setting = settingService.get(SettingEnum.ORDER_SETTING.name());
+        OrderSetting orderSetting = JSONUtil.toBean(setting.getSettingValue(), OrderSetting.class);
+        if (orderSetting != null && orderSetting.getAutoCancel() != null) {
+            //鍏呭�艰鍗曡嚜鍔ㄥ彇娑堟椂闂� = 褰撳墠鏃堕棿 - 鑷姩鍙栨秷鏃堕棿鍒嗛挓鏁�
+            DateTime cancelTime = DateUtil.offsetMinute(DateUtil.date(), -orderSetting.getAutoCancel());
+            LambdaQueryWrapper<Recharge> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(Recharge::getPayStatus, PayStatusEnum.UNPAID.name());
+            //鍏呭�艰鍗曞垱寤烘椂闂� <= 璁㈠崟鑷姩鍙栨秷鏃堕棿
+            queryWrapper.le(Recharge::getCreateTime, cancelTime);
+            List<Recharge> list = rechargeService.list(queryWrapper);
+            List<String> cancelSnList = list.stream().map(Recharge::getRechargeSn).collect(Collectors.toList());
+            for (String sn : cancelSnList) {
+                rechargeService.rechargeOrderCancel(sn);
+            }
+        }
+    }
+}
diff --git a/lmk-job/src/main/java/cn/lili/handler/impl/promotion/MemberCouponSignEverydayExecute.java b/lmk-job/src/main/java/cn/lili/handler/impl/promotion/MemberCouponSignEverydayExecute.java
new file mode 100644
index 0000000..1349183
--- /dev/null
+++ b/lmk-job/src/main/java/cn/lili/handler/impl/promotion/MemberCouponSignEverydayExecute.java
@@ -0,0 +1,35 @@
+package cn.lili.handler.impl.promotion;
+
+import cn.lili.handler.EveryDayExecute;
+import cn.lili.modules.promotion.service.MemberCouponSignService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 淇冮攢娲诲姩姣忔棩瀹氭椂鍣�
+ *
+ * @author Chopper
+ * @since 2021/3/18 3:23 涓嬪崍
+ */
+@Slf4j
+@Component
+public class MemberCouponSignEverydayExecute implements EveryDayExecute {
+
+    @Autowired
+    private MemberCouponSignService memberCouponSignService;
+
+    /**
+     * 灏嗗凡杩囨湡鐨勪績閿�娲诲姩缃负缁撴潫
+     */
+    @Override
+    public void execute() {
+        try {
+            memberCouponSignService.clean();
+        } catch (Exception e) {
+            log.error("娓呴櫎棰嗗彇浼樻儬鍒告爣璁板紓甯�", e);
+        }
+
+    }
+
+}
diff --git a/lmk-job/src/main/java/cn/lili/handler/impl/promotion/PromotionEverydayExecute.java b/lmk-job/src/main/java/cn/lili/handler/impl/promotion/PromotionEverydayExecute.java
new file mode 100644
index 0000000..626fe1c
--- /dev/null
+++ b/lmk-job/src/main/java/cn/lili/handler/impl/promotion/PromotionEverydayExecute.java
@@ -0,0 +1,85 @@
+package cn.lili.handler.impl.promotion;
+
+import cn.lili.common.enums.PromotionTypeEnum;
+import cn.lili.handler.EveryDayExecute;
+import cn.lili.modules.promotion.entity.dos.Seckill;
+import cn.lili.modules.promotion.service.SeckillService;
+import cn.lili.modules.promotion.tools.PromotionTools;
+import cn.lili.modules.search.service.EsGoodsIndexService;
+import cn.lili.modules.system.entity.dos.Setting;
+import cn.lili.modules.system.entity.dto.SeckillSetting;
+import cn.lili.modules.system.entity.enums.SettingEnum;
+import cn.lili.modules.system.service.SettingService;
+import com.google.gson.Gson;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 淇冮攢娲诲姩姣忔棩瀹氭椂鍣�
+ *
+ * @author Chopper
+ * @since 2021/3/18 3:23 涓嬪崍
+ */
+@Slf4j
+@Component
+public class PromotionEverydayExecute implements EveryDayExecute {
+
+    /**
+     * ES鍟嗗搧绱㈠紩
+     */
+    @Autowired
+    private EsGoodsIndexService esGoodsIndexService;
+    /**
+     * 绯荤粺璁剧疆
+     */
+    @Autowired
+    private SettingService settingService;
+    /**
+     * 绉掓潃娲诲姩
+     */
+    @Autowired
+    private SeckillService seckillService;
+
+    /**
+     * 灏嗗凡杩囨湡鐨勪績閿�娲诲姩缃负缁撴潫
+     */
+    @Override
+    public void execute() {
+        try {
+            //娓呴櫎鎵�鏈夊晢鍝佺储寮曠殑鏃犳晥淇冮攢娲诲姩
+            this.esGoodsIndexService.cleanInvalidPromotion();
+        } catch (Exception e) {
+            log.error("娓呮鍟嗗搧绱㈠紩涓棤鏁堜績閿�寮傚父", e);
+        }
+        try {
+            //瀹氭椂鍒涘缓娲诲姩
+            addSeckill();
+        } catch (Exception e) {
+            log.error("绉掓潃娲诲姩娣诲姞寮傚父", e);
+        }
+
+    }
+
+    /**
+     * 娣诲姞绉掓潃娲诲姩
+     * 浠庣郴缁熻缃腑鑾峰彇绉掓潃娲诲姩鐨勯厤缃�
+     * 娣诲姞鏄庡ぉ鍚庣殑绉掓潃娲诲姩
+     */
+    private void addSeckill() {
+        Setting setting = settingService.get(SettingEnum.SECKILL_SETTING.name());
+        SeckillSetting seckillSetting = new Gson().fromJson(setting.getSettingValue(), SeckillSetting.class);
+        log.info("鐢熸垚绉掓潃娲诲姩璁剧疆锛歿}", seckillSetting);
+        for (int i = 1; i <= SeckillService.PRE_CREATION; i++) {
+            Seckill seckill = new Seckill(i, seckillSetting.getHours(), seckillSetting.getSeckillRule());
+            seckill.setApplyEndTime(null);
+
+            //濡傛灉宸茬粡瀛樺湪淇冮攢锛屽垯涓嶅啀娆′繚瀛�
+            if (seckillService.list(
+                    PromotionTools.checkActiveTime(seckill.getStartTime(), seckill.getEndTime(), PromotionTypeEnum.SECKILL, null, seckill.getId())).isEmpty()) {
+                boolean result = seckillService.savePromotions(seckill);
+                log.info("鐢熸垚绉掓潃娲诲姩鍙傛暟锛歿},缁撴灉锛歿}", seckill, result);
+            }
+        }
+    }
+}
diff --git a/lmk-job/src/main/java/cn/lili/handler/impl/statistics/MemberStatisticsExecute.java b/lmk-job/src/main/java/cn/lili/handler/impl/statistics/MemberStatisticsExecute.java
new file mode 100644
index 0000000..07df271
--- /dev/null
+++ b/lmk-job/src/main/java/cn/lili/handler/impl/statistics/MemberStatisticsExecute.java
@@ -0,0 +1,55 @@
+package cn.lili.handler.impl.statistics;
+
+import cn.lili.handler.EveryDayExecute;
+import cn.lili.modules.statistics.entity.dos.MemberStatisticsData;
+import cn.lili.modules.statistics.service.MemberStatisticsService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * 浼氬憳鏁版嵁缁熻
+ *
+ * @author Chopper
+ * @since 2021-03-02 14:56
+ */
+@Slf4j
+@Component
+public class MemberStatisticsExecute implements EveryDayExecute {
+
+    /**
+     * 浼氬憳缁熻
+     */
+    @Autowired
+    private MemberStatisticsService memberStatisticsService;
+
+    @Override
+    public void execute() {
+
+        try {
+            //缁熻鐨勬椂闂达紙寮�濮嬨�傜粨鏉熸椂闂达級
+            Date startTime, endTime;
+            //鍒濆鍊�
+            Calendar calendar = Calendar.getInstance();
+            calendar.set(Calendar.SECOND, 0);
+            calendar.set(Calendar.MILLISECOND, 1);
+            calendar.set(Calendar.MINUTE, 0);
+            calendar.set(Calendar.HOUR_OF_DAY, 0);
+            endTime = calendar.getTime();
+            //-1澶╋紝鍗充负寮�濮嬫椂闂�
+            calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) - 1);
+            startTime = calendar.getTime();
+            MemberStatisticsData memberStatisticsData = new MemberStatisticsData();
+            memberStatisticsData.setMemberCount(memberStatisticsService.memberCount(endTime));
+            memberStatisticsData.setCreateDate(startTime);
+            memberStatisticsData.setActiveQuantity(memberStatisticsService.activeQuantity(startTime));
+            memberStatisticsData.setNewlyAdded(memberStatisticsService.newlyAdded(startTime, endTime));
+            memberStatisticsService.save(memberStatisticsData);
+        } catch (Exception e) {
+            log.error("姣忔棩浼氬憳缁熻鍔熻兘寮傚父锛�", e);
+        }
+    }
+}
\ No newline at end of file
diff --git a/lmk-job/src/main/java/cn/lili/handler/impl/statistics/OnlineMemberStatistics.java b/lmk-job/src/main/java/cn/lili/handler/impl/statistics/OnlineMemberStatistics.java
new file mode 100644
index 0000000..32d05a6
--- /dev/null
+++ b/lmk-job/src/main/java/cn/lili/handler/impl/statistics/OnlineMemberStatistics.java
@@ -0,0 +1,114 @@
+package cn.lili.handler.impl.statistics;
+
+import cn.lili.cache.Cache;
+import cn.lili.cache.CachePrefix;
+import cn.lili.common.properties.StatisticsProperties;
+import cn.lili.common.security.enums.UserEnums;
+import cn.lili.handler.EveryHourExecute;
+import cn.lili.modules.statistics.entity.vo.OnlineMemberVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
+
+/**
+ * 瀹炴椂鍦ㄧ嚎浜烘暟缁熻
+ *
+ * @author Chopper
+ * @since 2021-02-21 09:47
+ */
+@Component
+public class OnlineMemberStatistics implements EveryHourExecute {
+
+    /**
+     * 缂撳瓨
+     */
+    @Autowired
+    private Cache<List<OnlineMemberVO>> cache;
+    /**
+     * 缁熻灏忔椂
+     */
+    @Autowired
+    private StatisticsProperties statisticsProperties;
+
+
+    @Override
+    public void execute() {
+
+        Calendar calendar = Calendar.getInstance();
+
+        List<OnlineMemberVO> onlineMemberVOS = cache.get(CachePrefix.ONLINE_MEMBER.getPrefix());
+
+        if (onlineMemberVOS == null) {
+            onlineMemberVOS = new ArrayList<>();
+        }
+
+        //杩囨护 鏈夋晥缁熻鏃堕棿
+        calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - statisticsProperties.getOnlineMember());
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+
+        Calendar finalCalendar = calendar;
+
+        AtomicReference<Integer> lastNum = new AtomicReference<>(0);
+        onlineMemberVOS = onlineMemberVOS.stream()
+                .filter(onlineMemberVO -> {
+                    //濡傛灉涓鸿繃婊ゅ弬鏁帮紝鍒欒褰曚负杩囨湡鍙傛暟锛屽垯涓虹粺涓�鏃舵涓婁竴鍛ㄦ湡鐨勫湪绾夸汉鏁�
+                    if (!onlineMemberVO.getDate().after(finalCalendar.getTime())) {
+                        lastNum.set(onlineMemberVO.getNum());
+                    }
+                    return onlineMemberVO.getDate().after(finalCalendar.getTime());
+                })
+                .collect(Collectors.toList());
+
+        //璁″叆鏂版暟鎹�
+        calendar = Calendar.getInstance();
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+        onlineMemberVOS.add(new OnlineMemberVO(calendar.getTime(), cache.keys(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.MEMBER) + "*").size(),
+                lastNum.get()));
+
+        //鍐欏叆缂撳瓨
+        cache.put(CachePrefix.ONLINE_MEMBER.getPrefix(), onlineMemberVOS);
+    }
+
+
+    /**
+     * 鎵嬪姩璁剧疆鏌愪竴鏃堕棿锛屾椿璺冧汉鏁�
+     *
+     * @param time 鏃堕棿
+     * @param num  浜烘暟
+     */
+    public void execute(Date time, Integer num) {
+
+        List<OnlineMemberVO> onlineMemberVOS = cache.get(CachePrefix.ONLINE_MEMBER.getPrefix());
+
+        if (onlineMemberVOS == null) {
+            onlineMemberVOS = new ArrayList<>();
+        }
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(time);
+        //杩囨护 鏈夋晥缁熻鏃堕棿
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+        calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - 48);
+
+        onlineMemberVOS = onlineMemberVOS.stream()
+                .filter(onlineMemberVO -> onlineMemberVO.getDate().after(calendar.getTime()))
+                .collect(Collectors.toList());
+        onlineMemberVOS.add(new OnlineMemberVO(time, num, num));
+
+        //鍐欏叆缂撳瓨
+        cache.put(CachePrefix.ONLINE_MEMBER.getPrefix(), onlineMemberVOS);
+    }
+
+}
diff --git a/lmk-job/src/main/java/cn/lili/handler/impl/store/StoreExecute.java b/lmk-job/src/main/java/cn/lili/handler/impl/store/StoreExecute.java
new file mode 100644
index 0000000..f6454c5
--- /dev/null
+++ b/lmk-job/src/main/java/cn/lili/handler/impl/store/StoreExecute.java
@@ -0,0 +1,49 @@
+package cn.lili.handler.impl.store;
+
+import cn.lili.handler.EveryDayExecute;
+import cn.lili.modules.goods.service.GoodsSkuService;
+import cn.lili.modules.store.entity.dos.Store;
+import cn.lili.modules.store.entity.enums.StoreStatusEnum;
+import cn.lili.modules.store.service.StoreService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * 搴楅摵淇℃伅鏇存柊
+ *
+ * @author Chopper
+ * @since 2021/3/15 5:30 涓嬪崍
+ */
+@Component
+@Slf4j
+public class StoreExecute implements EveryDayExecute {
+    /**
+     * 搴楅摵
+     */
+    @Autowired
+    private StoreService storeService;
+
+    @Autowired
+    private GoodsSkuService goodsSkuService;
+
+    @Override
+    public void execute() {
+        //鑾峰彇鎵�鏈夊紑鍚殑搴楅摵
+        List<Store> storeList = storeService.list(new LambdaQueryWrapper<Store>().eq(Store::getStoreDisable, StoreStatusEnum.OPEN.name()));
+
+        for (Store store : storeList) {
+            try {
+                Long num = goodsSkuService.countSkuNum(store.getId());
+                storeService.updateStoreGoodsNum(store.getId(), num);
+            } catch (Exception e) {
+                log.error("搴楅摵id涓簕},鏇存柊鍟嗗搧鏁伴噺澶辫触", store.getId(), e);
+            }
+        }
+
+
+    }
+}
diff --git a/lmk-job/src/main/java/cn/lili/handler/impl/store/StoreRatingExecute.java b/lmk-job/src/main/java/cn/lili/handler/impl/store/StoreRatingExecute.java
new file mode 100644
index 0000000..67d90eb
--- /dev/null
+++ b/lmk-job/src/main/java/cn/lili/handler/impl/store/StoreRatingExecute.java
@@ -0,0 +1,60 @@
+package cn.lili.handler.impl.store;
+
+import cn.lili.common.enums.SwitchEnum;
+import cn.lili.handler.EveryDayExecute;
+import cn.lili.modules.member.entity.vo.StoreRatingVO;
+import cn.lili.modules.member.service.MemberEvaluationService;
+import cn.lili.modules.store.entity.dos.Store;
+import cn.lili.modules.store.entity.enums.StoreStatusEnum;
+import cn.lili.modules.store.service.StoreService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * 搴楅摵璇勫垎
+ *
+ * @author Chopper
+ * @since 2021/3/15 5:30 涓嬪崍
+ */
+@Component
+public class StoreRatingExecute implements EveryDayExecute {
+    /**
+     * 搴楅摵
+     */
+    @Autowired
+    private StoreService storeService;
+    /**
+     * 浼氬憳璇勪环
+     */
+    @Autowired
+    private MemberEvaluationService memberEvaluationService;
+
+
+    @Override
+    public void execute() {
+        //鑾峰彇鎵�鏈夊紑鍚殑搴楅摵
+        List<Store> storeList = storeService.list(new LambdaQueryWrapper<Store>().eq(Store::getStoreDisable, StoreStatusEnum.OPEN.name()));
+        for (Store store : storeList) {
+            //搴楅摵鎵�鏈夊紑鍚殑璇勪环
+            StoreRatingVO storeRatingVO = memberEvaluationService.getStoreRatingVO(store.getId(), SwitchEnum.OPEN.name());
+
+            if (storeRatingVO != null) {
+                //淇濆瓨璇勫垎
+                LambdaUpdateWrapper<Store> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
+                lambdaUpdateWrapper.eq(Store::getId, store.getId());
+                lambdaUpdateWrapper.set(Store::getDescriptionScore, storeRatingVO.getDescriptionScore());
+                lambdaUpdateWrapper.set(Store::getDeliveryScore, storeRatingVO.getDeliveryScore());
+                lambdaUpdateWrapper.set(Store::getServiceScore, storeRatingVO.getServiceScore());
+                storeService.update(lambdaUpdateWrapper);
+            }
+
+        }
+
+
+    }
+}
diff --git a/lmk-job/src/main/java/cn/lili/handler/impl/view/PageViewStatisticsExecute.java b/lmk-job/src/main/java/cn/lili/handler/impl/view/PageViewStatisticsExecute.java
new file mode 100644
index 0000000..8ea96ca
--- /dev/null
+++ b/lmk-job/src/main/java/cn/lili/handler/impl/view/PageViewStatisticsExecute.java
@@ -0,0 +1,195 @@
+package cn.lili.handler.impl.view;
+
+import cn.hutool.core.convert.Convert;
+import cn.lili.cache.Cache;
+import cn.lili.cache.CachePrefix;
+import cn.lili.common.utils.BeanUtil;
+import cn.lili.handler.EveryDayExecute;
+import cn.lili.modules.statistics.entity.dos.PlatformViewData;
+import cn.lili.modules.statistics.service.PlatformViewService;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 缁熻 鍏ュ簱
+ *
+ * @author Chopper
+ * @since 2021-01-15 18:20
+ */
+@Slf4j
+@Component
+public class PageViewStatisticsExecute implements EveryDayExecute {
+    /**
+     * 缂撳瓨
+     */
+    @Autowired
+    private Cache cache;
+    /**
+     * 骞冲彴PV缁熻
+     */
+    @Autowired
+    private PlatformViewService platformViewService;
+
+    @Override
+    public void execute() {
+
+        //1銆佺紦瀛榢eys 妯$硦鍖归厤
+        //2銆佽繃婊や粖鏃ョ殑鏁版嵁锛屽嵆浠婂ぉ鍙兘缁熻浠婃棩浠ュ墠鐨勬暟鎹�
+        //4瀵筴ey value 鍒嗗埆浠h〃骞冲彴PV銆佸钩鍙癠V銆佸簵閾篜V銆佸簵閾篣V
+        List<String> pvKeys = filterKeys(cache.keys(CachePrefix.PV.getPrefix() + "*"));
+        List<Integer> pvValues = cache.multiGet(pvKeys);
+
+        List<String> storePVKeys = filterKeys(cache.keys(CachePrefix.STORE_PV.getPrefix() + "*"));
+        List<Integer> storePvValues = cache.multiGet(storePVKeys);
+
+        //澶囦唤UV鏁版嵁锛岃繖閲岃祴鍊间箣鍚庯紝浼氳鍒犻櫎
+        List<String> uvKeys = new ArrayList<>();
+        List<String> storeUvKeys = new ArrayList<>();
+
+        log.debug("寮�濮嬬粺璁″钩鍙版暟鎹紝PV鍏辫銆恵}銆戞潯", pvKeys.size());
+        log.debug("寮�濮嬬粺璁″簵閾烘暟鎹紝PV鍏辫銆恵}銆戞潯", storePvValues.size());
+
+        //瀹氫箟瑕佺粺璁$殑鏁版嵁
+        List<PlatformViewData> platformViewDataList = new ArrayList<>();
+
+        //PV 缁熻
+        if (pvKeys.size() > 0) {
+            for (int i = 0; i < pvKeys.size(); i++) {
+                String key = pvKeys.get(i);
+                PageViewStatistics pageViewStatistics = new PageViewStatistics(key);
+                PlatformViewData platformPVData = new PlatformViewData();
+                BeanUtil.copyProperties(pageViewStatistics, platformPVData);
+                platformPVData.setPvNum(pvValues.get(i).longValue());
+                //鏍规嵁pvkey 鑾峰彇 uvkey
+                String uvKey = getUvKey(key);
+                uvKeys.add(uvKey);
+                platformPVData.setUvNum(cache.counter(uvKey));
+                platformPVData.setStoreId("-1");
+                platformViewDataList.add(platformPVData);
+            }
+            batchSave(pvKeys, uvKeys, platformViewDataList);
+        }
+        //搴楅摵 PV 缁熻
+        if (storePVKeys.size() > 0) {
+            platformViewDataList = new ArrayList<>();
+            for (int i = 0; i < storePVKeys.size(); i++) {
+                String key = storePVKeys.get(i);
+                PageViewStatistics pageViewStatistics = new PageViewStatistics(key);
+                PlatformViewData storePVData = new PlatformViewData();
+                BeanUtil.copyProperties(pageViewStatistics, storePVData);
+                storePVData.setPvNum(storePvValues.get(i).longValue());
+                //鏍规嵁pvkey 鑾峰彇 uvkey
+                String uvKey = getUvKey(key);
+                uvKeys.add(uvKey);
+                storePVData.setUvNum(cache.counter(uvKey));
+                platformViewDataList.add(storePVData);
+            }
+            batchSave(storePVKeys, storeUvKeys, platformViewDataList);
+        }
+    }
+
+    /**
+     * 鏍规嵁缂撳瓨鐨凱Vkey 鑾峰彇瀵瑰簲鐨刄Vkey
+     *
+     * @param key
+     * @return
+     */
+    private String getUvKey(String key) {
+        if (StringUtils.isNotEmpty(key)) {
+
+            key = key.replace(CachePrefix.PV.getPrefix(), CachePrefix.UV.getPrefix());
+            key = key.replace(CachePrefix.STORE_PV.getPrefix(), CachePrefix.STORE_UV.getPrefix());
+            return key;
+        }
+        return key;
+    }
+
+    /**
+     * 鎵归噺淇濆瓨鏁版嵁&&娓呴櫎淇濆瓨鏁版嵁鐨勭紦瀛�
+     *
+     * @param pvKeys           PV key
+     * @param uvKeys           UV key
+     * @param platformViewData DOS
+     */
+    @Transactional(rollbackFor = Exception.class)
+    void batchSave(List<String> pvKeys, List<String> uvKeys, List<PlatformViewData> platformViewData) {
+        log.debug("鎵归噺淇濆瓨娴侀噺鏁版嵁锛屽叡璁°�恵}銆戞潯", platformViewData.size());
+        platformViewService.saveBatch(platformViewData);
+        //鎵归噺鍒犻櫎缂撳瓨key
+        cache.multiDel(pvKeys);
+        cache.multiDel(uvKeys);
+        log.debug("娴侀噺鏁版嵁淇濆瓨瀹屾垚");
+    }
+
+
+    /**
+     * 杩囨护缂撳瓨key
+     *
+     * @param keys 缂撳瓨key闆嗗悎
+     */
+    private static List<String> filterKeys(List<String> keys) {
+
+        //鍙粺璁′竴澶╁墠鐨勬暟鎹�
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.HOUR_OF_DAY, -24);
+
+        List<String> result = new ArrayList<>();
+        for (String key : keys) {
+            PageViewStatistics temp = new PageViewStatistics(key);
+            //濡傛灉闇�瑕佺粺璁★紝鍒欏皢key鍐欏叆闆嗗悎
+            if (temp.getDate().before(calendar.getTime())) {
+                result.add(key);
+            }
+        }
+
+        return result;
+    }
+
+}
+
+/**
+ * 鏍规嵁缂撳瓨key 鑾峰彇鍏朵腑闇�瑕佺殑鍙傛暟锛屽勾鏈堟棩锛屼互鍙婂簵閾轰俊鎭�
+ */
+@Data
+class PageViewStatistics {
+    /**
+     * 骞� 銆� 鏈� 銆� 鏃� 銆� 搴楅摵id
+     */
+    private Date date;
+    private String storeId;
+
+    public PageViewStatistics(String str) {
+        //灏嗗瓧绗︿覆瑙f瀽鎴愰渶瑕佺殑瀵硅薄
+        str = str.substring(str.indexOf("}") + 2);
+        String[] dateStr = str.split("-");
+        Integer year = Convert.toInt(dateStr[0]);
+        Integer month = Convert.toInt(dateStr[1]);
+        Integer day;
+        //鏄惁鏈夊簵閾篿d
+        if (dateStr.length > 3) {
+            day = Convert.toInt(dateStr[2]);
+            this.storeId = dateStr[3];
+        } else {
+            day = Convert.toInt(dateStr[2]);
+        }
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.YEAR, year);
+        calendar.set(Calendar.MONTH, month - 1);
+        calendar.set(Calendar.DAY_OF_MONTH, day);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+        this.date = calendar.getTime();
+    }
+
+}
diff --git a/lmk-job/src/main/java/cn/lili/job/TimedTaskJobHandler.java b/lmk-job/src/main/java/cn/lili/job/TimedTaskJobHandler.java
new file mode 100644
index 0000000..4cc8716
--- /dev/null
+++ b/lmk-job/src/main/java/cn/lili/job/TimedTaskJobHandler.java
@@ -0,0 +1,104 @@
+package cn.lili.job;
+
+import cn.lili.handler.EveryDayExecute;
+import cn.lili.handler.EveryHourExecute;
+import cn.lili.handler.EveryMinuteExecute;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * 瀹氭椂鍣ㄤ换鍔�
+ *
+ * @author Chopper
+ * @version v1.0
+ * 2020-12-24 11:51
+ */
+@Slf4j
+@Component
+public class TimedTaskJobHandler {
+
+    @Autowired(required = false)
+    private List<EveryMinuteExecute> everyMinuteExecutes;
+
+
+    @Autowired(required = false)
+    private List<EveryHourExecute> everyHourExecutes;
+
+
+    @Autowired(required = false)
+    private List<EveryDayExecute> everyDayExecutes;
+
+    /**
+     * 姣忓垎閽熶换鍔�
+     *
+     * @throws Exception
+     */
+    @XxlJob("everyMinuteExecute")
+    public ReturnT<String> everyMinuteExecute(String param)  {
+        log.info("姣忓垎閽熶换鍔℃墽琛�");
+        if (everyMinuteExecutes == null || everyMinuteExecutes.size() == 0) {
+            return ReturnT.SUCCESS;
+        }
+
+        for (int i = 0; i < everyMinuteExecutes.size(); i++) {
+            try {
+                everyMinuteExecutes.get(i).execute();
+            } catch (Exception e) {
+                log.error("姣忓垎閽熶换鍔″紓甯�", e);
+            }
+        }
+        return ReturnT.SUCCESS;
+    }
+
+    /**
+     * 姣忓皬鏃朵换鍔�
+     *
+     * @throws Exception
+     */
+    @XxlJob("everyHourExecuteJobHandler")
+    public ReturnT<String> everyHourExecuteJobHandler(String param) {
+        log.info("姣忓皬鏃朵换鍔℃墽琛�");
+        if (everyHourExecutes == null || everyHourExecutes.size() == 0) {
+            return ReturnT.SUCCESS;
+        }
+
+        for (int i = 0; i < everyHourExecutes.size(); i++) {
+            try {
+                everyHourExecutes.get(i).execute();
+            } catch (Exception e) {
+                log.error("姣忓皬鏃朵换鍔″紓甯�", e);
+            }
+        }
+        return ReturnT.SUCCESS;
+    }
+
+    /**
+     * 姣忔棩浠诲姟
+     *
+     * @throws Exception
+     */
+    @XxlJob("everyDayExecuteJobHandler")
+    public ReturnT<String> everyDayExecuteJobHandler(String param) {
+
+        log.info("姣忔棩浠诲姟鎵ц");
+        if (everyDayExecutes == null || everyDayExecutes.size() == 0) {
+            return ReturnT.SUCCESS;
+        }
+
+        for (int i = 0; i < everyDayExecutes.size(); i++) {
+            try {
+                everyDayExecutes.get(i).execute();
+            } catch (Exception e) {
+                log.error("姣忔棩浠诲姟寮傚父", e);
+            }
+        }
+        return ReturnT.SUCCESS;
+    }
+
+
+}
diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/CustomerController.java b/manager-api/src/main/java/cn/lili/controller/lmk/CustomerController.java
index ddf4156..f253194 100644
--- a/manager-api/src/main/java/cn/lili/controller/lmk/CustomerController.java
+++ b/manager-api/src/main/java/cn/lili/controller/lmk/CustomerController.java
@@ -1,12 +1,9 @@
 package cn.lili.controller.lmk;
 
 import cn.lili.base.Result;
-import cn.lili.common.enums.ResultUtil;
-import cn.lili.common.vo.PageVO;
-import cn.lili.common.vo.ResultMessage;
 import cn.lili.group.Add;
 import cn.lili.group.Update;
-import cn.lili.modules.lmk.domain.form.CustomerTagForm;
+import cn.lili.modules.lmk.domain.form.MemberTagForm;
 import cn.lili.modules.lmk.domain.form.CustomerTagRefForm;
 import cn.lili.modules.lmk.domain.query.CustomerQuery;
 import cn.lili.modules.lmk.domain.query.CustomerTagQuery;
@@ -14,6 +11,7 @@
 import cn.lili.modules.lmk.domain.vo.VideoFootVO;
 import cn.lili.modules.lmk.service.CustomerService;
 import cn.lili.modules.lmk.service.CustomerTagRefService;
+import cn.lili.modules.lmk.service.MemberTagService;
 import cn.lili.modules.lmk.service.CustomerTagService;
 import cn.lili.modules.member.entity.dto.FootPrintQueryParams;
 import cn.lili.modules.member.entity.vo.MemberSearchVO;
@@ -34,6 +32,7 @@
 @RequestMapping("/manager/customerManager")
 public class CustomerController {
     private final CustomerService customerService;
+    private final MemberTagService memberTagService;
     private final CustomerTagService customerTagService;
     private final CustomerTagRefService customerTagRefService;
     private final FootprintService footprintService;
@@ -58,39 +57,39 @@
 
     @PostMapping("/addTag")
     @ApiOperation(value = "娣诲姞鏍囩", notes = "娣诲姞鏍囩")
-    public Result add(@RequestBody @Validated(Add.class) CustomerTagForm form) {
-        return customerTagService.add(form);
+    public Result add(@RequestBody @Validated(Add.class) MemberTagForm form) {
+        return memberTagService.add(form);
     }
 
     @PutMapping("/editTag")
     @ApiOperation(value = "淇敼鏍囩", notes = "淇敼鏍囩")
-    public Result update(@RequestBody @Validated(Update.class) CustomerTagForm form) {
-        return customerTagService.update(form);
+    public Result update(@RequestBody @Validated(Update.class) MemberTagForm form) {
+        return memberTagService.update(form);
     }
 
     @DeleteMapping("/tag/{id}")
     @ApiOperation(value = "ID鍒犻櫎鏍囩", notes = "ID鍒犻櫎")
     public Result removeById(@PathVariable("id") String id) {
-        return customerTagService.removeById(id);
+        return memberTagService.removeById(id);
     }
 
 
     @GetMapping("/tagList")
     @ApiOperation(value = "鏍囩鍒楄〃", notes = "鏍囩鍒楄〃")
     public Result list() {
-        return customerTagService.all();
+        return memberTagService.all();
     }
     @GetMapping("/pageTagList")
     @ApiOperation(value = "鍒嗛〉鏍囩鍒楄〃", notes = "鏍囩鍒楄〃")
     public Result pageList(CustomerTagQuery query) {
-        return customerTagService.page(query);
+        return memberTagService.page(query);
     }
 
 
     @PostMapping("/customerAddTag")
     @ApiOperation(value = "娣诲姞瀹㈡埛鏍囩鏍囪瘑", notes = "娣诲姞瀹㈡埛鏍囩鏍囪瘑")
-    public Result addCustomerTag(@RequestBody @Validated(Add.class) CustomerTagForm form) {
-        return customerTagService.addCustomerTag(form);
+    public Result addCustomerTag(@RequestBody @Validated(Add.class) MemberTagForm form) {
+        return memberTagService.addMemberTag(form);
     }
 
 //    @PostMapping("/customerAddTag")
@@ -98,17 +97,16 @@
 //    public Result add(@RequestBody @Validated(Add.class) CustomerTagRefForm form) {
 //        return customerTagRefService.add(form);
 //    }
-
-    @PutMapping("/customerEditTag")
-    @ApiOperation(value = "淇敼瀹㈡埛鏍囩鏍囪瘑", notes = "淇敼瀹㈡埛鏍囩鏍囪瘑")
-    public Result update(@RequestBody @Validated(Update.class) CustomerTagRefForm form) {
-        return customerTagRefService.update(form);
+    @DeleteMapping("/customerDelTag/{id}")
+    @ApiOperation(value = "鍒犻櫎瀹㈡埛鏍囩鏍囪瘑ID鍒犻櫎", notes = "鍒犻櫎瀹㈡埛鏍囩鏍囪瘑ID鍒犻櫎")
+    public Result removeCustomerTagById(@PathVariable("id") String id) {
+        return memberTagService.removeById(id);
     }
 
     @DeleteMapping("/customerDelTag/{id}")
     @ApiOperation(value = "鍒犻櫎瀹㈡埛鏍囩鏍囪瘑ID鍒犻櫎", notes = "鍒犻櫎瀹㈡埛鏍囩鏍囪瘑ID鍒犻櫎")
     public Result removeCustomerTagById(@PathVariable("id") String id) {
-        return customerTagRefService.removeById(id);
+        return memberTagService.removeById(id);
     }
 
     @GetMapping("/videoFootPage")
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 8142cdf..ef7bfb9 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
@@ -27,6 +27,7 @@
 import cn.lili.modules.store.entity.dos.StoreDetail;
 import cn.lili.modules.store.service.StoreDetailService;
 import cn.lili.utils.COSUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -148,6 +149,7 @@
     @ApiOperation(value = "鏂板鍟嗗搧")
     @PostMapping(value = "/create", consumes = "application/json", produces = "application/json")
     public ResultMessage<GoodsOperationDTO> save(@Valid @RequestBody GoodsOperationDTO goodsOperationDTO) {
+        System.err.println(JSONObject.toJSONString(goodsOperationDTO));
         goodsService.addGoods(goodsOperationDTO);
         return ResultUtil.success();
     }
@@ -155,6 +157,7 @@
     @ApiOperation(value = "淇敼鍟嗗搧")
     @PutMapping(value = "/update/{goodsId}", consumes = "application/json", produces = "application/json")
     public ResultMessage<GoodsOperationDTO> update(@Valid @RequestBody GoodsOperationDTO goodsOperationDTO, @PathVariable String goodsId) {
+        System.err.println(JSONObject.toJSONString(goodsOperationDTO));
         goodsService.editGoods(goodsOperationDTO, goodsId);
         return ResultUtil.success();
     }
diff --git a/seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java b/seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java
index 3204355..f80547c 100644
--- a/seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java
+++ b/seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java
@@ -12,7 +12,6 @@
 import cn.lili.common.vo.ResultMessage;
 import cn.lili.modules.member.entity.dto.MemberAddressDTO;
 import cn.lili.modules.member.service.StoreLogisticsService;
-import cn.lili.modules.order.order.entity.dto.OrderExportDTO;
 import cn.lili.modules.order.order.entity.dto.OrderSearchParams;
 import cn.lili.modules.order.order.entity.dto.PartDeliveryParamsDTO;
 import cn.lili.modules.order.order.entity.vo.OrderDetailVO;

--
Gitblit v1.8.0