From 1730a7fc4bb96f258d9dc8dec2e629cadbfdefc0 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期三, 18 六月 2025 13:47:42 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/2.0' into 2.0

---
 ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml                                                     |    2 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtOneClinkSyncPageVO.java                                |   26 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/goods/GoodsService.java                                       |   10 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/UpdateGoodsPriceDTO.java                                   |   19 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsController.java                         |   10 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/task/ShopFileMapper.java                                         |    5 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/ShopFileServiceImpl.java                              |    5 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventService.java                             |   43 +
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtOneClinkSyncingPageDTO.java                           |   22 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtLotteryEventQuestionVO.java                              |   30 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtLotteryEventController.java                  |  106 +++
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtOneClinkSyncingEditDto.java                           |   45 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtUserAnswersPageDTO.java                                 |   15 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java                                  |   22 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java                                  |   26 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtOneClinkSyncingShopPageVo.java                     |   49 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventJoinUserPageDTO.java                        |   11 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Pop.java                                         |    5 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventPrizeDTO.java                               |   20 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/ShopFileService.java                                       |    6 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventMapper.java                            |    1 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java                                  |   81 ++
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventQuestionsAnswersMapper.java            |    6 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtLotteryEventPageVo.java                                  |   40 +
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java                      |   55 +
 ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEvent.java                                          |    2 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtLotteryEventJoinUserPageVO.java                          |   24 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventPageDto.java                                |   31 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/management/MgtShopController.java                            |   12 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventMapper.java                                |    4 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/OneClinkSyncingService.java                          |   46 +
 ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/ShopFileMapper.xml                                                    |    6 
 ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/UserLotteryEventQuestionsAnswersMapper.xml                        |   35 +
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/config/OneClinkSyncingMapper.java                            |   29 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/config/OneClinkSyncing.java                         |  123 +++
 ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml                                                        |   48 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtUserAnswersPageVO.java                                   |   26 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java                              |   37 +
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java                                           |   23 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MGtOneClinkSyncingShopPageDTO.java                   |   16 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/IUserLotteryEventQuestionsAnswersService.java         |    5 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/PageShopMgtGoodsVO.java                                     |    3 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopMapper.java                                             |   25 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventQuestionDTO.java                            |   24 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/UserLotteryEventQuestionsAnswersServiceImpl.java |   13 
 ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/OneClinkSyncingMapper.xml                                         |   21 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java                          |   17 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventServiceImpl.java                     |  254 +++++++
 ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/LotteryEventMapper.xml                                            |   68 ++
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventEditDTO.java                                |  129 +++
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtLotteryEventDetailVO.java                                |   65 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventQuestionAnswersDTO.java                     |   19 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtOneClinkSyncingVO.java                                 |   38 +
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/OneClinkSyncingServiceImpl.java                 |  134 ++++
 54 files changed, 1,891 insertions(+), 46 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEvent.java b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEvent.java
index 25f8c49..39127c6 100644
--- a/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEvent.java
+++ b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEvent.java
@@ -115,7 +115,7 @@
 	 * 创建用户id
 	 */
 	@TableField("create_user_id")
-	private Integer createUserId;
+	private Long createUserId;
 	/**
 	 * 创建时间
 	 */
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MGtOneClinkSyncingShopPageDTO.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MGtOneClinkSyncingShopPageDTO.java
new file mode 100644
index 0000000..f2cd212
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MGtOneClinkSyncingShopPageDTO.java
@@ -0,0 +1,16 @@
+package com.ruoyi.system.api.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MGtOneClinkSyncingShopPageDTO extends MgtPageDto {
+    @ApiModelProperty("一键同步id")
+    private Integer syncingId;
+
+    @ApiModelProperty(value = "选择门店ids",hidden = true)
+    private List<Long> shopIds;
+
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/config/OneClinkSyncing.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/config/OneClinkSyncing.java
new file mode 100644
index 0000000..efe74ef
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/config/OneClinkSyncing.java
@@ -0,0 +1,123 @@
+package com.ruoyi.system.api.domain.poji.config;
+
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 一键同步表
+ * </p>
+ *
+ * @author hlg
+ * @since 2025/6/16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("t_one_clink_syncing")
+public class OneClinkSyncing extends Model<OneClinkSyncing> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * syncing id
+     */
+    @TableId(value = "syncing_id", type = IdType.AUTO)
+    private Integer syncingId;
+
+    /**
+     * 删除标记
+     */
+    @TableField("del_flag")
+    private Integer delFlag;
+
+    /**
+     * 同步名称(标题)
+     */
+    @TableField("syncing_name")
+    private String syncingName;
+
+    /**
+     * 封面图片
+     */
+    @TableField("cover_url")
+    private String coverUrl;
+
+    /**
+     * 详情图,多个逗号分隔
+     */
+    @TableField("details_picture")
+    private String detailsPicture;
+
+    /**
+     * 领券1开2关
+     */
+    @TableField("platform_coupon_flag")
+    private Integer platformCouponFlag;
+
+    /**
+     * 生日卡1开2关
+     */
+    @TableField("platform_birthday_flag")
+    private Integer platformBirthdayFlag;
+
+    /**
+     * 店铺详情
+     */
+    @TableField("shop_detail")
+    private String shopDetail;
+
+    /**
+     * 同步门店数
+     */
+    @TableField("shop_num")
+    private Integer shopNum = 0;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("create_user_id")
+    private Long createUserId;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+    @TableField("update_user_id")
+    private Long updateUserId;
+
+    /**
+     * 最近一次同步时间
+     */
+    @TableField("syncing_time")
+    private Date syncingTime;
+
+    /**
+     * 最近一次同步操作人
+     */
+    @TableField("syncing_user_id")
+    private Long syncingUserId;
+
+    /**
+     * 选择的门店ids,多个以逗号隔开
+     */
+    @TableField("shop_ids")
+    private String shopIds;
+
+    private List<Long> shopIdList;
+    private Long userId;
+
+    @Override
+    protected Serializable pkVal() {
+        return this.syncingId;
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtOneClinkSyncingShopPageVo.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtOneClinkSyncingShopPageVo.java
new file mode 100644
index 0000000..a4c4446
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtOneClinkSyncingShopPageVo.java
@@ -0,0 +1,49 @@
+package com.ruoyi.system.api.domain.vo;
+
+import com.ruoyi.common.core.annotation.Excel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author jqs34
+ * @ClassName MgtShopPageVo
+ * @description: TODO
+ * @date 2023年04月21日
+ * @version: 1.0
+ */
+@Data
+public class MgtOneClinkSyncingShopPageVo {
+
+    @ApiModelProperty(value = "商户id")
+    private Long shopId;
+    @ApiModelProperty(value="商户编号")
+    private String shopNumber;
+    @ApiModelProperty(value="店铺名称")
+    private String shopName;
+    @ApiModelProperty(value="店铺标签")
+    private String shopTags;
+    @ApiModelProperty(value="来源渠道")
+    private String shopSource;
+
+    @ApiModelProperty(value="所属经销商")
+    private String belongShopName;
+    @ApiModelProperty(value="签约区域")
+    private String signAreaName;
+    @ApiModelProperty(value="合作期限")
+    private String cooperationTime;
+    @ApiModelProperty(value="店铺地址")
+    private String shopAddress;
+    @ApiModelProperty(value="店长")
+    private String shopownerName;
+    @ApiModelProperty(value="店长联系方式")
+    private String shopownerPhone;
+    @ApiModelProperty(value="店铺状态")
+    private String shopCustomStatus;
+    @ApiModelProperty(value="店铺活动次数")
+    private Integer shopActivityCount;
+    @ApiModelProperty(value="冻结状态0解冻1冻结")
+    private Integer frozenFlag;
+
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java
index 3696a02..0d487e8 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java
@@ -1,7 +1,9 @@
 package com.ruoyi.system.api.factory;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.system.api.domain.dto.*;
+import com.ruoyi.system.api.domain.poji.config.OneClinkSyncing;
 import com.ruoyi.system.api.domain.vo.ShopProportionVo;
 import com.ruoyi.system.api.domain.vo.*;
 import com.ruoyi.system.api.model.QwH5LoginVo;
@@ -162,6 +164,21 @@
             public List<Shop> getFranchiseeIdsBYDealerId(Long shopId) {
                 return Collections.emptyList();
             }
+
+            @Override
+            public Page<MgtOneClinkSyncingShopPageVo> getMgtShopPageVoByShopIds(MGtOneClinkSyncingShopPageDTO dto) {
+                return null;
+            }
+
+            @Override
+            public List<Shop> getShopListByShopName(String content) {
+                return null;
+            }
+
+            @Override
+            public R updateShopByOneClinkSyncing(OneClinkSyncing oneClinkSyncing) {
+                return R.fail("一键同步商户信息失败:"+throwable.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java
index 53fa050..eba3ccf 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java
@@ -1,8 +1,10 @@
 package com.ruoyi.system.api.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.constant.ServiceNameConstants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.system.api.domain.dto.*;
+import com.ruoyi.system.api.domain.poji.config.OneClinkSyncing;
 import com.ruoyi.system.api.domain.poji.shop.Shop;
 import com.ruoyi.system.api.domain.vo.ShopProportionVo;
 import com.ruoyi.system.api.domain.vo.*;
@@ -216,4 +218,28 @@
      */
     @PostMapping("/shop/getFranchiseeIdsBYDealerId")
     List<Shop> getFranchiseeIdsBYDealerId(@RequestBody Long shopId);
+
+    /**
+     * 根据shopIds分页查看
+     * @param dto
+     * @return
+     */
+    @PostMapping("/shop/getMgtShopPageVoByShopIds")
+    Page<MgtOneClinkSyncingShopPageVo> getMgtShopPageVoByShopIds(@RequestBody MGtOneClinkSyncingShopPageDTO dto);
+
+    /**
+     * 根据shopName模糊查询门店集合
+     * @param content
+     * @return
+     */
+    @PostMapping("/shop/getShopListByShopName")
+    List<Shop> getShopListByShopName(@RequestBody String content);
+
+    /**
+     * 一键同步
+     * @param oneClinkSyncing
+     * @return
+     */
+    @PostMapping("/shop/updateShopByOneClinkSyncing")
+    R updateShopByOneClinkSyncing(@RequestBody OneClinkSyncing oneClinkSyncing);
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsController.java
index e08b353..eabdc44 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsController.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsController.java
@@ -134,7 +134,7 @@
     }
 
     @RequestMapping(value = "/pageShopMgtGoods", method = RequestMethod.POST)
-    @ApiOperation(value = "分页获取门店内商品信息",tags = "管理台商户相关接口")
+    @ApiOperation(value = "商品信息-分页获取门店内商品信息【2.0】",tags = "管理台商户相关接口")
     public R<Page<PageShopMgtGoodsVO>> pageShopMgtGoods(@RequestBody PageShopMgtGoodsDTO pageShopMgtGoodsDTO) {
         Page<PageShopMgtGoodsVO> page = new Page<>();
         page.setSize(pageShopMgtGoodsDTO.getPageSize());
@@ -144,5 +144,11 @@
         return R.ok(page.setRecords(pageShopMgtGoods));
     }
 
-    //修改价格 转为经销商
+
+    @RequestMapping(value = "/updateGoodsPrice", method = RequestMethod.POST)
+    @ApiOperation(value = "商品信息-修改价格【2.0】",tags = "管理台商户相关接口")
+    public R<Void> updateGoodsPrice(@RequestBody UpdateGoodsPriceDTO updateGoodsPriceDTO) {
+        return goodsService.updateGoodsPrice(updateGoodsPriceDTO);
+    }
+
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtLotteryEventController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtLotteryEventController.java
new file mode 100644
index 0000000..97c8a19
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtLotteryEventController.java
@@ -0,0 +1,106 @@
+package com.ruoyi.goods.controller.management;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.goods.api.domain.LotteryEvent;
+import com.ruoyi.goods.domain.dto.*;
+import com.ruoyi.goods.domain.vo.*;
+import com.ruoyi.goods.service.lottery.ILotteryEventService;
+import com.ruoyi.goods.service.lottery.IUserLotteryEventQuestionsAnswersService;
+import com.ruoyi.goods.service.lottery.IUserLotteryEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author hlg
+ * @Date 2025/6/16
+ */
+@RestController
+@Api(value = "管理后台抽奖相关接口", tags = "管理后台抽奖相关接口", description = "管理后台抽奖相关接口")
+@RequestMapping("/mgt/lotteryEvent")
+public class MgtLotteryEventController {
+    @Resource
+    private ILotteryEventService lotteryEventService;
+    @Resource
+    private IUserLotteryEventService userLotteryEventService;
+    @Resource
+    private IUserLotteryEventQuestionsAnswersService userLotteryEventQuestionsAnswersService;
+
+    @RequestMapping(value = "/editLotteryEvent", method = RequestMethod.POST)
+    @Log(title = "抽奖管理", businessType = BusinessType.UPDATE,operContent = "编辑抽奖活动")
+    @ApiOperation(value = "平台添加/修改抽奖活动【2.0】")
+    public R<ShopLotteryDrawVo> editLotteryEvent(@Valid  @RequestBody MgtLotteryEventEditDTO dto) {
+        return  lotteryEventService.editLotteryEvent(dto);
+    }
+    @RequestMapping(value = "/pageMgtLotteryEvent", method = RequestMethod.POST)
+    @ApiOperation(value = "分页获取抽奖列表【2.0】")
+    public R<Page<MgtLotteryEventPageVo>> pageMgtLotteryEvent(@RequestBody MgtLotteryEventPageDto dto) {
+        Page<MgtLotteryEventPageVo> page = new Page<>();
+        page.setSize(dto.getPageSize());
+        page.setCurrent(dto.getPageNum());
+        page.setOptimizeCountSql(false);
+        List<MgtLotteryEventPageVo> mgtGoodsPageVoList = lotteryEventService.pageMgtLotteryEvent(page,dto);
+        return R.ok(page.setRecords(mgtGoodsPageVoList));
+    }
+
+    @RequestMapping(value = "/getLotteryEventDetailById/{id}", method = RequestMethod.POST)
+    @ApiOperation(value = "查看抽奖活动详情【2.0】")
+    public R<MgtLotteryEventDetailVO> getLotteryEventDetailById(@PathVariable("id") String id) {
+        return  lotteryEventService.getLotteryEventDetailById(id);
+    }
+
+    //查看-参与人信息
+    @RequestMapping(value = "/getLotteryEventJoinUserPageById/{id}", method = RequestMethod.POST)
+    @ApiOperation(value = "查看抽奖活动-参与人信息【2.0】")
+    public R<Page<ShopWinningRecordVo>> getLotteryEventJoinUserPageById(@RequestBody MgtLotteryEventJoinUserPageDTO dto) {
+        Page<ShopWinningRecordVo> page = new Page<>();
+        page.setSize(dto.getPageSize());
+        page.setCurrent(dto.getPageNum());
+        List<ShopWinningRecordVo> shopWinningRecordVoList = userLotteryEventService.getShopWinningRecord(page, dto.getId());
+        return R.ok(page.setRecords(shopWinningRecordVoList));
+    }
+    //查看-答题情况
+    @RequestMapping(value = "/getUserAnswersPage", method = RequestMethod.POST)
+    @ApiOperation(value = "查看抽奖活动-答题情况【2.0】")
+    public R<Page<MgtUserAnswersPageVO>> getUserAnswersPage(@RequestBody MgtUserAnswersPageDTO dto) {
+        //检查是否答题类型
+        LotteryEvent lotteryEvent = lotteryEventService.getById(dto.getLotteryEventId());
+        if (null == lotteryEvent || lotteryEvent.getDelFlag()!=0 ){
+            return R.fail("该抽奖活动不存在");
+        }
+        if ( lotteryEvent.getActivityType()!=5){
+            return R.fail("请选择答题抽奖类型的活动");
+        }
+        Page<MgtUserAnswersPageVO> page = new Page<>();
+        page.setSize(dto.getPageSize());
+        page.setCurrent(dto.getPageNum());
+        List<MgtUserAnswersPageVO> shopWinningRecordVoList = userLotteryEventQuestionsAnswersService.getUserAnswersPage(page, dto.getLotteryEventId(),dto.getUserId());
+        return R.ok(page.setRecords(shopWinningRecordVoList));
+    }
+
+    //删除
+    @RequestMapping(value = "/deleteMgtLotteryEvent/{id}", method = RequestMethod.POST)
+    @Log(title = "抽奖管理", businessType = BusinessType.DELETE,operContent = "删除抽奖活动")
+    @ApiOperation(value = "删除抽奖活动【2.0】")
+    public R deleteMgtLotteryEvent(@PathVariable("id") String id) {
+        return lotteryEventService.deleteMgtLotteryEvent(id);
+    }
+
+    //立即结束
+    @RequestMapping(value = "/endImmediatelyLotteryEvent/{id}", method = RequestMethod.POST)
+    @Log(title = "抽奖管理", businessType = BusinessType.UPDATE,operContent = "立即结束")
+    @ApiOperation(value = "立即结束【2.0】")
+    public R endImmediatelyLotteryEvent(@PathVariable("id") String id) {
+        return lotteryEventService.endImmediatelyLotteryEvent(id);
+    }
+
+
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventEditDTO.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventEditDTO.java
new file mode 100644
index 0000000..202c91b
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventEditDTO.java
@@ -0,0 +1,129 @@
+package com.ruoyi.goods.domain.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.system.api.domain.dto.MgtBaseDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+public class MgtLotteryEventEditDTO extends MgtBaseDto {
+
+    @ApiModelProperty("活动id,不传为新增")
+    private String id;
+
+    @ApiModelProperty("抽奖名称")
+    @NotEmpty(message = "抽奖名称不能为空")
+    private String name;
+
+    @ApiModelProperty("活动简介名称")
+    @NotEmpty(message = "活动简介不能为空")
+    private String activityProfile;
+
+    @ApiModelProperty("开启方式(1=新注册用户,2=下单,3=分享小程序,4=普通抽奖,5=答题抽奖)")
+    @Min(value = 1,message = "开启方式选值错误")
+    @Max(value = 5,message = "开启方式选值错误")
+    @NotNull(message = "开启方式不能为空")
+    private Integer activityType;
+
+    @ApiModelProperty("可抽奖次数")
+    @NotNull(message = "可抽奖次数不能为空")
+    private Integer times;
+
+    @ApiModelProperty("活动开始时间")
+    @NotEmpty(message = "活动开始时间不能为空")
+    private LocalDateTime startTime;
+
+    @ApiModelProperty("活动结束时间")
+    @NotEmpty(message = "活动结束时间不能为空")
+    private LocalDateTime endTime;
+
+
+    /**
+     * 下单类型所需
+     */
+    @ApiModelProperty("下单支付金额")
+    private BigDecimal payMoney;
+
+    /**
+     * 分享类型所需
+     */
+    @ApiModelProperty("分享抽奖间隔天数")
+    private Integer intervalTime;
+
+    /**
+     * 答题类型所需
+     */
+    @ApiModelProperty("答题时间限制(分钟)")
+    private Integer answeringTime;
+    @ApiModelProperty("答题抽奖正确率%")
+    private BigDecimal accuracy;
+    @ApiModelProperty("抽奖题目设置")
+    private List<MgtLotteryEventQuestionDTO> mgtLotteryQuestionDTOList;
+
+    @ApiModelProperty("封面图")
+    @NotEmpty(message = "封面图不能为空")
+    private String coverImage;
+
+    @ApiModelProperty("详情介绍")
+    @NotEmpty(message = "详情介绍不能为空")
+    private String activityContent;
+
+    @ApiModelProperty("抽奖奖品设置")
+    @NotEmpty(message = "抽奖奖品不能为空")
+    @Valid
+    private List<MgtLotteryEventPrizeDTO> mgtLotteryEventPrizeDTOList;
+
+    /**
+     * 即线下抽奖方式不能新增
+     */
+    @AssertTrue(message = "当开启方式为线下抽奖时,活动id不能为空")
+    public boolean isIdValid() {
+        return activityType != 6 || id != null;
+    }
+
+    /**
+     * activityType=2时 payMoney不能为空
+     */
+    @AssertTrue(message = "当开启方式为下单时,下单支付金额不能为空")
+    public boolean isPayMoneyValid() {
+        return activityType != 2 || payMoney != null;
+    }
+
+    /**
+     * activityType=3时 intervalTime不能为空
+     */
+    @AssertTrue(message = "当开启方式为下单时,分享抽奖间隔天数不能为空")
+    public boolean isIntervalTimeValid() {
+        return  activityType != 3 || intervalTime != null;
+    }
+
+    /**
+     * activityType=5时 answeringTime不能为空
+     */
+    @AssertTrue(message = "当活动类型为答题抽奖时,答题时间限制不能为空")
+    public boolean isAnsweringTimeValid() {
+        return  activityType != 5 || answeringTime != null;
+    }
+
+    /**
+     * activityType=5时 accuracy不能为空
+     */
+    @AssertTrue(message = "当活动类型为答题抽奖时,抽奖要求的正确率不能为空")
+    public boolean isAccuracyValid() {
+        return  activityType != 5 || accuracy != null;
+    }
+
+    /**
+     * activityType=5时 mgtLotteryQuestionDTOList不能为空
+     */
+    @AssertTrue(message = "当活动类型为答题抽奖时,问题列表不能为空")
+    public boolean isQuestionListValid() {
+        return  activityType != 5 || (mgtLotteryQuestionDTOList != null && !mgtLotteryQuestionDTOList.isEmpty());
+    }
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventJoinUserPageDTO.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventJoinUserPageDTO.java
new file mode 100644
index 0000000..acf0f79
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventJoinUserPageDTO.java
@@ -0,0 +1,11 @@
+package com.ruoyi.goods.domain.dto;
+
+import com.ruoyi.system.api.domain.dto.MgtPageDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class MgtLotteryEventJoinUserPageDTO extends MgtPageDto {
+    @ApiModelProperty("活动id")
+    private String id;
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventPageDto.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventPageDto.java
new file mode 100644
index 0000000..95efdde
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventPageDto.java
@@ -0,0 +1,31 @@
+package com.ruoyi.goods.domain.dto;
+
+import com.ruoyi.system.api.domain.dto.MgtPageDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+
+@Data
+public class MgtLotteryEventPageDto extends MgtPageDto {
+    @ApiModelProperty("抽奖名称")
+    private String name;
+
+    @ApiModelProperty("抽奖方式(0-全部 1=新注册用户,2=下单,3=分享小程序,4=普通抽奖,5=答题抽奖,6=线下抽奖)")
+    private Integer activityType;
+
+    @ApiModelProperty("抽奖状态:0-全部 1-未开始,2-进行中,已结束")
+    private Integer status;
+
+    @ApiModelProperty("创建对象")
+    private String createObject;
+
+    @ApiModelProperty(value = "门店ids",hidden = true)
+    private List<Long> shopIds;
+
+    @ApiModelProperty(value = "平台创建标志 0-未包含平台创建 1-包含",hidden = true)
+    private Integer flag=1;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventPrizeDTO.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventPrizeDTO.java
new file mode 100644
index 0000000..636240f
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventPrizeDTO.java
@@ -0,0 +1,20 @@
+package com.ruoyi.goods.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class MgtLotteryEventPrizeDTO {
+    @ApiModelProperty("奖品类型(1=优惠券,2=平台商品,3=线下商品,4=积分)")
+    private Integer prizeType;
+    @ApiModelProperty("奖品id")
+    private String objectId;
+    @ApiModelProperty("奖品名称")
+    private String objectName;
+    @ApiModelProperty("奖品数量")
+    private Integer number;
+    @ApiModelProperty("中奖率%")
+    private BigDecimal winRate;
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventQuestionAnswersDTO.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventQuestionAnswersDTO.java
new file mode 100644
index 0000000..852db90
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventQuestionAnswersDTO.java
@@ -0,0 +1,19 @@
+package com.ruoyi.goods.domain.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class MgtLotteryEventQuestionAnswersDTO {
+    /**
+     * 选项
+     */
+    @ApiModelProperty("选项")
+    private String answer;
+    /**
+     * 是否是正确答案(0=否,1=是)
+     */
+    @TableField(value = "is_right")
+    private Integer isRight;
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventQuestionDTO.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventQuestionDTO.java
new file mode 100644
index 0000000..d3fa759
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtLotteryEventQuestionDTO.java
@@ -0,0 +1,24 @@
+package com.ruoyi.goods.domain.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MgtLotteryEventQuestionDTO {
+    /**
+     * 题干名称
+     */
+    @ApiModelProperty("题干名称")
+    private String name;
+    /**
+     * 排序
+     */
+    @ApiModelProperty("排序")
+    private Integer sort;
+
+    @ApiModelProperty("题干选项集合")
+    private List<MgtLotteryEventQuestionAnswersDTO> answersDTOList;
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtUserAnswersPageDTO.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtUserAnswersPageDTO.java
new file mode 100644
index 0000000..e4e83eb
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtUserAnswersPageDTO.java
@@ -0,0 +1,15 @@
+package com.ruoyi.goods.domain.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.system.api.domain.dto.MgtPageDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class MgtUserAnswersPageDTO extends MgtPageDto {
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    @ApiModelProperty(value = "抽奖活动id")
+    private String lotteryEventId;
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/UpdateGoodsPriceDTO.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/UpdateGoodsPriceDTO.java
new file mode 100644
index 0000000..c5e901a
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/UpdateGoodsPriceDTO.java
@@ -0,0 +1,19 @@
+package com.ruoyi.goods.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class UpdateGoodsPriceDTO {
+    @ApiModelProperty(value = "当前门店id")
+    private Long shopId;
+
+    @ApiModelProperty(value = "商品id")
+    private Long goodsId;
+    @ApiModelProperty(value = "商品绑定门店id")
+    private Long bindShopId;
+    @ApiModelProperty("修改价格")
+    private BigDecimal goodsPrice;
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtLotteryEventDetailVO.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtLotteryEventDetailVO.java
new file mode 100644
index 0000000..cde70df
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtLotteryEventDetailVO.java
@@ -0,0 +1,65 @@
+package com.ruoyi.goods.domain.vo;
+
+import com.ruoyi.goods.api.domain.LotteryEventPrize;
+import com.ruoyi.goods.domain.dto.MgtLotteryEventPrizeDTO;
+import com.ruoyi.goods.domain.dto.MgtLotteryEventQuestionDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+public class MgtLotteryEventDetailVO {
+    @ApiModelProperty("活动id")
+    private String id;
+    @ApiModelProperty("门店id")
+    private Integer shopId;
+    @ApiModelProperty("门店id")
+    private String shopName;
+    @ApiModelProperty("抽奖名称")
+    private String name;
+    @ApiModelProperty("活动简介名称")
+    private String activityProfile;
+    @ApiModelProperty("开启方式(1=新注册用户,2=下单,3=分享小程序,4=普通抽奖,5=答题抽奖,6=线下抽奖)")
+    private Integer activityType;
+    @ApiModelProperty("可抽奖次数")
+    private Integer times;
+    @ApiModelProperty("活动开始时间")
+    private LocalDateTime startTime;
+    @ApiModelProperty("活动结束时间")
+    private LocalDateTime endTime;
+
+    /**
+     * 下单类型所需
+     */
+    @ApiModelProperty("下单支付金额")
+    private BigDecimal payMoney;
+
+    /**
+     * 分享类型所需
+     */
+    @ApiModelProperty("分享抽奖间隔天数")
+    private Integer intervalTime;
+
+    /**
+     * 答题类型所需
+     */
+    @ApiModelProperty("答题时间限制(分钟)")
+    private Integer answeringTime;
+    @ApiModelProperty("答题抽奖正确率%")
+    private BigDecimal accuracy;
+    @ApiModelProperty("抽奖题目设置")
+    private List<MgtLotteryEventQuestionVO> mgtLotteryQuestionVOList;
+
+    @ApiModelProperty("封面图")
+    private String coverImage;
+
+    @ApiModelProperty("详情介绍")
+    private String activityContent;
+
+    @ApiModelProperty("抽奖奖品设置")
+    private List<LotteryEventPrize> lotteryEventPrizeList;
+
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtLotteryEventJoinUserPageVO.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtLotteryEventJoinUserPageVO.java
new file mode 100644
index 0000000..37fe304
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtLotteryEventJoinUserPageVO.java
@@ -0,0 +1,24 @@
+package com.ruoyi.goods.domain.vo;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class MgtLotteryEventJoinUserPageVO {
+
+
+    @ApiModelProperty(value = "用户昵称")
+    private String nickName;
+    @ApiModelProperty(value = "手机号")
+    private String mobile;
+
+    @ApiModelProperty(value = "参与时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "奖品名称,多个以,隔开")
+    private String objectName;
+
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtLotteryEventPageVo.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtLotteryEventPageVo.java
new file mode 100644
index 0000000..ff73d16
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtLotteryEventPageVo.java
@@ -0,0 +1,40 @@
+package com.ruoyi.goods.domain.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class MgtLotteryEventPageVo {
+
+    @ApiModelProperty("活动id")
+    private String id;
+
+    @ApiModelProperty(value = "门店id",hidden = true)
+    private Integer shopId;
+
+    @ApiModelProperty("抽奖名称")
+    private String name;
+
+    @ApiModelProperty("抽奖方式(1=新注册用户,2=下单,3=分享小程序,4=普通抽奖,5=答题抽奖,6=线下抽奖)")
+    private Integer activityType;
+
+    @ApiModelProperty("抽奖时间")
+    private String activityTime;
+
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("创建对象")
+    private String createObject;
+
+    @ApiModelProperty("抽奖状态:1-未开始,2-进行中,已结束")
+    private Integer status;
+
+    @ApiModelProperty("立即结束标志位:0-无,1-有")
+    private Integer flag;
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtLotteryEventQuestionVO.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtLotteryEventQuestionVO.java
new file mode 100644
index 0000000..7fd7fb9
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtLotteryEventQuestionVO.java
@@ -0,0 +1,30 @@
+package com.ruoyi.goods.domain.vo;
+
+import com.ruoyi.goods.api.domain.LotteryEventQuestionsAnswers;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MgtLotteryEventQuestionVO {
+    @ApiModelProperty("题干id")
+    private String id;
+
+    @ApiModelProperty(value = "抽奖活动id")
+    private String lotteryEventId;
+    /**
+     * 题干名称
+     */
+    @ApiModelProperty("题干名称")
+    private String name;
+    /**
+     * 排序
+     */
+    @ApiModelProperty("排序")
+    private Integer sort;
+
+    @ApiModelProperty("题干选项集合")
+    private List<LotteryEventQuestionsAnswers> answersVOList;
+
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtUserAnswersPageVO.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtUserAnswersPageVO.java
new file mode 100644
index 0000000..f2b2124
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtUserAnswersPageVO.java
@@ -0,0 +1,26 @@
+package com.ruoyi.goods.domain.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class MgtUserAnswersPageVO {
+    @ApiModelProperty("排序")
+    private Integer sort;
+
+    @ApiModelProperty(value = "题干名称")
+    private String name;
+
+    @ApiModelProperty("选项")
+    private String answer;//会有多个选项,用分号隔开
+
+    @ApiModelProperty(value = "正确答案选项")
+    private String rightAnswer;
+
+    @ApiModelProperty(value = "用户选择答案")
+    private String userAnswer;
+
+    @ApiModelProperty(value = "是否正确(0-否,1-是)")
+    private Integer isCorrect;
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/PageShopMgtGoodsVO.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/PageShopMgtGoodsVO.java
index 0a3c749..cac25d1 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/PageShopMgtGoodsVO.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/PageShopMgtGoodsVO.java
@@ -24,6 +24,9 @@
     @ApiModelProperty(value = "商品id")
     private String goodsId;
 
+    @ApiModelProperty(value = "商品绑定门店id")
+    private String bindShopId;
+
     @Excel(name = "商品名称", width = 30, sort = 3)
     @ApiModelProperty(value = "商品名称")
     private String goodsName;
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventMapper.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventMapper.java
index 1e85866..8d3e87a 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventMapper.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventMapper.java
@@ -3,7 +3,9 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.goods.api.domain.LotteryEvent;
+import com.ruoyi.goods.domain.dto.MgtLotteryEventPageDto;
 import com.ruoyi.goods.domain.vo.AppLotteryEventPageVo;
+import com.ruoyi.goods.domain.vo.MgtLotteryEventPageVo;
 import com.ruoyi.goods.domain.vo.ShopLotteryDrawListVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -34,4 +36,6 @@
 	 * @return
 	 */
 	List<ShopLotteryDrawListVo> getShopLotteryDrawList(Page<ShopLotteryDrawListVo> page, @Param("shopId") Long shopId);
+
+	List<MgtLotteryEventPageVo> pageMgtLotteryEvent(Page<MgtLotteryEventPageVo> page, @Param("dto") MgtLotteryEventPageDto dto);
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventMapper.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventMapper.java
index a61e79d..3e28c25 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventMapper.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventMapper.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.goods.api.domain.UserLotteryEvent;
+import com.ruoyi.goods.domain.vo.MgtLotteryEventJoinUserPageVO;
 import com.ruoyi.goods.domain.vo.ShopWinningRecordVo;
 import org.apache.ibatis.annotations.Param;
 
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventQuestionsAnswersMapper.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventQuestionsAnswersMapper.java
index b7c238e..7cb0177 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventQuestionsAnswersMapper.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventQuestionsAnswersMapper.java
@@ -1,11 +1,17 @@
 package com.ruoyi.goods.mapper.lottery;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.goods.api.domain.UserLotteryEventQuestionsAnswers;
+import com.ruoyi.goods.domain.vo.MgtUserAnswersPageVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @author zhibing.pu
  * @Date 2025/5/19 16:06
  */
 public interface UserLotteryEventQuestionsAnswersMapper extends BaseMapper<UserLotteryEventQuestionsAnswers> {
+    List<MgtUserAnswersPageVO> getUserAnswersPage(Page<MgtUserAnswersPageVO> page, @Param("lotteryEventId") String lotteryEventId, @Param("userId") Long userId);
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/goods/GoodsService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/goods/GoodsService.java
index ed637b1..61d54e2 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/goods/GoodsService.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/goods/GoodsService.java
@@ -1,6 +1,7 @@
 package com.ruoyi.goods.service.goods;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.goods.domain.dto.*;
 import com.ruoyi.goods.domain.vo.*;
 import com.ruoyi.system.api.domain.dto.AppActivityGoodsPageDto;
@@ -220,4 +221,13 @@
      * @return List<PageShopMgtGoodsVO>
      */
     List<PageShopMgtGoodsVO> pageShopMgtGoods(Page<PageShopMgtGoodsVO> page, PageShopMgtGoodsDTO pageShopMgtGoodsDTO);
+
+    /**
+     * @description  修改商品价格
+     * @author huliguo
+     * @date 2025/6/13
+     * @param updateGoodsPriceDTO
+     * @return
+     */
+    R<Void> updateGoodsPrice(UpdateGoodsPriceDTO updateGoodsPriceDTO);
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java
index 63f5f10..9596137 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java
@@ -9,6 +9,7 @@
 import com.ruoyi.common.core.utils.bean.BeanUtils;
 import com.ruoyi.common.core.utils.uuid.IdUtils;
 import com.ruoyi.common.security.utils.CodeFactoryUtil;
+import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.goods.domain.dto.*;
 import com.ruoyi.goods.domain.pojo.goods.GoodsTotal;
 import com.ruoyi.goods.domain.vo.*;
@@ -32,6 +33,7 @@
 import com.ruoyi.system.api.domain.poji.goods.GoodsFile;
 import com.ruoyi.system.api.domain.poji.goods.ShopGoods;
 import com.ruoyi.system.api.domain.poji.shop.Shop;
+import com.ruoyi.system.api.domain.poji.sys.SysUser;
 import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo;
 import com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo;
 import com.ruoyi.system.api.domain.vo.ShopRelUserVo;
@@ -42,6 +44,7 @@
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.nio.charset.StandardCharsets;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -706,7 +709,7 @@
     public List<PageShopMgtGoodsVO> pageShopMgtGoods(Page<PageShopMgtGoodsVO> page,PageShopMgtGoodsDTO pageShopMgtGoodsDTO) {
         //1.查找门店
         Shop shop = remoteShopService.getShop(pageShopMgtGoodsDTO.getShopId()).getData();
-        if (null == shop || shop.getDelFlag() != 0) {
+        if (null == shop || shop.getDelFlag() != 0 || shop.getShopStatus() == -1) {
             return Collections.emptyList();
         }
         List<Shop> shops = new ArrayList<>();
@@ -749,7 +752,7 @@
             //5.门店信息
             list.forEach(mgtGoodsPageVo -> {
                 // 获取门店信息
-                Shop shopInfo = shopMap.get(Long.valueOf(mgtGoodsPageVo.getShopId()));
+                Shop shopInfo = shopMap.get(Long.valueOf(mgtGoodsPageVo.getBindShopId()));
                 // 如果门店信息不为空,则设置门店信息
                 if (shopInfo != null) {
                     mgtGoodsPageVo.setShopName(shopInfo.getShopName());
@@ -763,4 +766,34 @@
 
         return list;
     }
+
+    @Override
+    public R<Void> updateGoodsPrice(UpdateGoodsPriceDTO updateGoodsPriceDTO) {
+        //判断当前登录人员类型
+        SysUser sysUser = SecurityUtils.getSysUser();
+        if ("01".equals(sysUser.getUserType())){
+            //B端
+            Shop shop = remoteShopService.getShop(updateGoodsPriceDTO.getShopId()).getData();
+            if (null == shop || shop.getDelFlag() != 0 || shop.getShopStatus() == -1) {
+                return R.fail("该门店不存在");
+            }
+            //判断是否经销商  是否开启价格修改权限
+            int modifyPricePermission = shop.getModifyPricePermission()==null?0:shop.getModifyPricePermission();
+            if (1 != shop.getShopType() || 1 != modifyPricePermission){
+                return R.fail("权限不足");
+            }
+        }else if (!"00".equals(sysUser.getUserType())){
+            //也不是平台
+             return R.fail("用户类型错误");
+        }
+        //修改门店内商品价格
+        ShopGoods shopGoods = shopGoodsService.getByShopIdAndGoodsId(updateGoodsPriceDTO.getBindShopId(), String.valueOf(updateGoodsPriceDTO.getGoodsId()));
+        if (null == shopGoods || shopGoods.getDelFlag() != 0){
+            return R.fail("该门店不存在该商品");
+        }
+        shopGoods.setUpdateUserId(sysUser.getUserId());
+        shopGoods.setSalesPrice(updateGoodsPriceDTO.getGoodsPrice());
+        shopGoodsService.updateById(shopGoods);
+        return R.ok();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventServiceImpl.java
index c180e93..01fc373 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventServiceImpl.java
@@ -1,25 +1,19 @@
 package com.ruoyi.goods.service.impl.lottery;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.bean.BeanUtils;
 import com.ruoyi.common.core.utils.uuid.IdUtils;
 import com.ruoyi.common.security.utils.SecurityUtils;
-import com.ruoyi.goods.api.domain.LotteryEvent;
-import com.ruoyi.goods.api.domain.LotteryEventPrize;
-import com.ruoyi.goods.api.domain.UserLotteryEvent;
-import com.ruoyi.goods.api.domain.UserLotteryEventQuestions;
-import com.ruoyi.goods.domain.vo.AppLotteryEventPageVo;
-import com.ruoyi.goods.domain.vo.LotteryEventVo;
-import com.ruoyi.goods.domain.vo.ShopLotteryDrawListVo;
-import com.ruoyi.goods.domain.vo.UserLotteryEventVo;
+import com.ruoyi.goods.api.domain.*;
+import com.ruoyi.goods.domain.dto.*;
+import com.ruoyi.goods.domain.vo.*;
 import com.ruoyi.goods.mapper.lottery.LotteryEventMapper;
-import com.ruoyi.goods.service.lottery.ILotteryEventPrizeService;
-import com.ruoyi.goods.service.lottery.ILotteryEventService;
-import com.ruoyi.goods.service.lottery.IUserLotteryEventQuestionsService;
-import com.ruoyi.goods.service.lottery.IUserLotteryEventService;
+import com.ruoyi.goods.service.lottery.*;
 import com.ruoyi.system.api.domain.poji.member.Member;
 import com.ruoyi.system.api.domain.poji.member.MemberGiftRecord;
 import com.ruoyi.system.api.domain.poji.shop.Shop;
@@ -29,8 +23,10 @@
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import javax.annotation.Resources;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.util.*;
@@ -64,7 +60,12 @@
 	
 	@Resource
 	private RemoteShopService remoteShopService;
-	
+
+	@Resource
+	private ILotteryEventQuestionsAnswersService lotteryEventQuestionsAnswersService;
+
+	@Resource
+	private ILotteryEventQuestionsService lotteryEventQuestionsService;
 	
 	/**
 	 * 根据id查询抽奖活动信息
@@ -251,4 +252,231 @@
 	public List<ShopLotteryDrawListVo> getShopLotteryDrawList(Page<ShopLotteryDrawListVo> page, Long shopId) {
 		return this.baseMapper.getShopLotteryDrawList(page, shopId);
 	}
+
+	@Override
+	@Transactional
+	public R<ShopLotteryDrawVo> editLotteryEvent(MgtLotteryEventEditDTO dto) {
+		//先检查开始-结束时间范围内,系统中是否有该活动
+		List<LotteryEvent> lotteryEvents = this.baseMapper.selectList(new LambdaQueryWrapper<LotteryEvent>()
+				.eq(LotteryEvent::getDelFlag, 0)//未删除的
+				.eq(LotteryEvent::getActivityType, dto.getActivityType())//类型相同的
+				.between(LotteryEvent::getStartTime, dto.getStartTime(), dto.getEndTime())//开始时间在这个活动的(开始-结束)范围内的
+				.or()
+				.between(LotteryEvent::getEndTime, dto.getStartTime(), dto.getEndTime())//结束时间在这个活动的(开始-结束)范围内的
+		);
+		if (null != lotteryEvents && !lotteryEvents.isEmpty()) {
+			// 新增记录时直接返回错误
+			if (dto.getId() == null) {
+				return R.fail("新增抽奖活动与现有抽奖活动时间范围冲突");
+			}
+			// 更新记录时,检查是否与其他记录(非自身)冲突
+			boolean hasConflict = lotteryEvents.stream()
+					.anyMatch(event -> !event.getId().equals(dto.getId()));
+			if (hasConflict) {
+				return R.fail("编辑抽奖活动与现有其他活动时间范围冲突");
+			}
+		}
+		LotteryEvent lotteryEvent = new LotteryEvent();
+		if (null != dto.getId()) {
+			//编辑
+			lotteryEvent=this.baseMapper.selectById(dto.getId());
+			if (null == lotteryEvent||lotteryEvent.getDelFlag() != 0) {
+				return R.fail("该抽奖活动已被删除");
+			}
+			if (!lotteryEvent.getActivityType().equals(dto.getActivityType())) {
+				return R.fail("编辑抽奖活动不能修改开启方式");
+			}
+			if(!lotteryEvent.getName().equals(dto.getName())) {
+				return R.fail("编辑抽奖活动不能修改抽奖名称");
+			}
+			//答题类型
+			if (lotteryEvent.getActivityType().equals(5)){
+				 //将之前的题干数据、答案选项数据删除
+				//先删除答案选项数据
+				lotteryEventQuestionsAnswersService.remove(new LambdaQueryWrapper<LotteryEventQuestionsAnswers>()
+						.eq(LotteryEventQuestionsAnswers::getLotteryEventId,lotteryEvent.getId()));
+				//再删除题干数据
+				lotteryEventQuestionsService.remove(new LambdaQueryWrapper<LotteryEventQuestions>()
+						.eq(LotteryEventQuestions::getLotteryEventId,lotteryEvent.getId()));
+			}
+			//奖品数据删除
+			lotteryEventPrizeService.remove(new LambdaQueryWrapper<LotteryEventPrize>()
+					.eq(LotteryEventPrize::getLotteryEventId,lotteryEvent.getId()));
+		}
+		//新增
+		BeanUtils.copyProperties(dto, lotteryEvent);
+		if (dto.getId() == null) {
+			lotteryEvent.setCreateTime(LocalDateTime.now());
+			lotteryEvent.setCreateUserId(dto.getUserId());
+		}else {
+			lotteryEvent.setUpdateTime(LocalDateTime.now());
+			lotteryEvent.setUpdateUserId(dto.getUserId());
+		}
+		//保存抽奖活动
+		this.saveOrUpdate(lotteryEvent);
+		// 保存奖品数据
+		LotteryEvent finalLotteryEvent = lotteryEvent;//jdk8及之后 变量在初始化后确实没有被重新赋值,可直接引用,无需显式声明为 final
+		List<LotteryEventPrize> prizeList = dto.getMgtLotteryEventPrizeDTOList().stream()
+				.map(prizeDTO -> {
+					LotteryEventPrize prize = new LotteryEventPrize();
+					prize.setLotteryEventId(finalLotteryEvent.getId());
+					prize.setPrizeType(prizeDTO.getPrizeType());
+					if (null != prizeDTO.getObjectId()){
+						prize.setObjectId(prizeDTO.getObjectId());
+					}
+					prize.setObjectName(prizeDTO.getObjectName());
+					prize.setNumber(prizeDTO.getNumber());
+					prize.setWinRate(prizeDTO.getWinRate());
+					return prize;
+				})
+				.collect(Collectors.toList());
+		lotteryEventPrizeService.saveBatch(prizeList);
+		if (dto.getActivityType().equals(5)) {
+			//保存题干数据
+			for (MgtLotteryEventQuestionDTO questionDTO : dto.getMgtLotteryQuestionDTOList()) {
+				LotteryEventQuestions question = new LotteryEventQuestions();
+				question.setLotteryEventId(finalLotteryEvent.getId());
+				question.setName(questionDTO.getName());
+				question.setSort(questionDTO.getSort());
+				lotteryEventQuestionsService.save(question);
+				//保存答案选项数据
+				List<LotteryEventQuestionsAnswers> answersList = questionDTO.getAnswersDTOList().stream()
+						.map(answersDTO -> {
+							LotteryEventQuestionsAnswers answer = new LotteryEventQuestionsAnswers();
+							answer.setLotteryEventId(finalLotteryEvent.getId());
+							answer.setLotteryEventQuestionsId(question.getId());
+							answer.setAnswer(answersDTO.getAnswer());
+							answer.setIsRight(answersDTO.getIsRight());
+							return answer;
+						}).collect(Collectors.toList());
+				lotteryEventQuestionsAnswersService.saveBatch(answersList);
+			}
+		}
+		return R.ok();
+	}
+
+	@Override
+	public List<MgtLotteryEventPageVo> pageMgtLotteryEvent(Page<MgtLotteryEventPageVo> page, MgtLotteryEventPageDto dto) {
+		Map<Long,Shop> map;
+		if (dto.getCreateObject()!=null){
+			//根据 条件-创建对象 模糊查找门店集合
+			List<Shop> shopList=remoteShopService.getShopListByShopName(dto.getCreateObject());
+			if (null != shopList && !shopList.isEmpty()) {
+				List<Long> shopIds = shopList.stream().map(Shop::getShopId).collect(Collectors.toList());
+				dto.setShopIds(shopIds);
+				//转为map 方便后续取商户名称
+				map = shopList.stream().collect(Collectors.toMap(Shop::getShopId, shop -> shop));
+			} else {
+                map = new HashMap<>();
+            }
+            //判断“平台创建”是否包含了 条件-创建对象
+			if (!"平台创建".contains(dto.getCreateObject())){
+				dto.setFlag(0);//未包含,只查找门店ids
+			}
+		} else {
+            map = new HashMap<>();
+        }
+        //获取分页信息
+		List<MgtLotteryEventPageVo> voList = this.baseMapper.pageMgtLotteryEvent(page, dto);
+		//填充创建对象
+		voList.forEach(x->{
+			if (x.getActivityType()!=6){
+				x.setCreateObject("平台创建");
+			}else {
+				//线下抽奖,获取门店名称
+				x.setCreateObject(map.get(Long.valueOf(x.getShopId())).getShopName());
+			}
+
+		});
+		return voList;
+	}
+
+	@Override
+	public R<MgtLotteryEventDetailVO> getLotteryEventDetailById(String id) {
+		LotteryEvent lotteryEvent = this.getById(id);
+		if (null  == lotteryEvent) {
+			return R.fail("该抽奖活动不存在");
+		}
+		MgtLotteryEventDetailVO vo = new MgtLotteryEventDetailVO();
+		BeanUtils.copyProperties(lotteryEvent, vo);
+		if (lotteryEvent.getActivityType()==6){
+			//线下抽奖 取商户名称
+			Shop data = remoteShopService.getShop(Long.valueOf(lotteryEvent.getShopId())).getData();
+			if (null != data){
+				vo.setShopName(data.getShopName());
+			}
+			//题干数据
+			List<LotteryEventQuestions> questionsList = lotteryEventQuestionsService.getBaseMapper().selectList(new LambdaQueryWrapper<LotteryEventQuestions>().eq(LotteryEventQuestions::getLotteryEventId, lotteryEvent.getId()));
+
+			List<MgtLotteryEventQuestionVO> questionsVOList = questionsList.stream().map(question -> {
+				MgtLotteryEventQuestionVO questionVO = new MgtLotteryEventQuestionVO();
+				BeanUtils.copyProperties(question, questionVO);
+				//答案选项数据
+				List<LotteryEventQuestionsAnswers> answersList = lotteryEventQuestionsAnswersService.getBaseMapper().selectList(new LambdaQueryWrapper<LotteryEventQuestionsAnswers>()
+						.eq(LotteryEventQuestionsAnswers::getLotteryEventId, lotteryEvent.getId())
+						.eq(LotteryEventQuestionsAnswers::getLotteryEventQuestionsId, questionVO.getLotteryEventId()));
+				questionVO.setAnswersVOList(answersList);
+				return questionVO;
+			}).collect(Collectors.toList());
+			//题干数据排序
+			// 自定义 Comparator 实现
+			Comparator<LotteryEventQuestions> sortComparator = new Comparator<LotteryEventQuestions>() {
+				@Override
+				public int compare(LotteryEventQuestions q1, LotteryEventQuestions q2) {
+					return Integer.compare(q1.getSort(), q2.getSort());
+				}
+			};
+			// 应用排序
+			Collections.sort(questionsList, sortComparator);
+			vo.setMgtLotteryQuestionVOList(questionsVOList);
+		}
+		//奖项信息
+		List<LotteryEventPrize> prizeList = lotteryEventPrizeService.getBaseMapper().selectList(new LambdaQueryWrapper<LotteryEventPrize>()
+				.eq(LotteryEventPrize::getLotteryEventId, lotteryEvent.getId()));
+		vo.setLotteryEventPrizeList(prizeList);
+
+		return R.ok(vo);
+	}
+
+	@Override
+	public R deleteMgtLotteryEvent(String id) {
+		LotteryEvent lotteryEvent = this.getById(id);
+		if (null == lotteryEvent || lotteryEvent.getDelFlag()!=0) {
+			return R.ok();
+		}
+
+		//1.奖品数据删除
+		lotteryEventPrizeService.remove(new LambdaQueryWrapper<LotteryEventPrize>()
+				.eq(LotteryEventPrize::getLotteryEventId,lotteryEvent.getId()));
+		//2.答题类型
+		if (lotteryEvent.getActivityType().equals(5)){
+			//先删除答案选项数据
+			lotteryEventQuestionsAnswersService.remove(new LambdaQueryWrapper<LotteryEventQuestionsAnswers>()
+					.eq(LotteryEventQuestionsAnswers::getLotteryEventId,lotteryEvent.getId()));
+			//再删除题干数据
+			lotteryEventQuestionsService.remove(new LambdaQueryWrapper<LotteryEventQuestions>()
+					.eq(LotteryEventQuestions::getLotteryEventId,lotteryEvent.getId()));
+		}
+		//3.抽奖活动删除
+		lotteryEvent.setDelFlag(1);
+		this.updateById(lotteryEvent);
+		return R.ok();
+	}
+
+	@Override
+	public R endImmediatelyLotteryEvent(String id) {
+		LotteryEvent lotteryEvent = this.getById(id);
+		if (null == lotteryEvent || lotteryEvent.getDelFlag()!=0) {
+			return R.fail("该抽奖活动不存在");
+		}
+		LocalDateTime now = LocalDateTime.now();
+		if (!now.isBefore(lotteryEvent.getStartTime()) && !now.isAfter(lotteryEvent.getEndTime())) {
+			return R.fail("该抽奖活动不在活动时间范围内");
+		}
+		lotteryEvent.setEndTime(now);//将结束时间设置为当前时间
+		lotteryEvent.setUpdateUserId(SecurityUtils.getUserId());
+		lotteryEvent.setUpdateTime(now);
+		this.updateById(lotteryEvent);
+		return R.ok();
+	}
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/UserLotteryEventQuestionsAnswersServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/UserLotteryEventQuestionsAnswersServiceImpl.java
index 3e7ac76..820a85d 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/UserLotteryEventQuestionsAnswersServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/UserLotteryEventQuestionsAnswersServiceImpl.java
@@ -1,17 +1,22 @@
 package com.ruoyi.goods.service.impl.lottery;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.goods.api.domain.LotteryEvent;
 import com.ruoyi.goods.api.domain.LotteryEventQuestionsAnswers;
 import com.ruoyi.goods.api.domain.UserLotteryEventQuestionsAnswers;
+import com.ruoyi.goods.domain.vo.MgtUserAnswersPageVO;
 import com.ruoyi.goods.mapper.lottery.UserLotteryEventQuestionsAnswersMapper;
 import com.ruoyi.goods.service.lottery.ILotteryEventQuestionsAnswersService;
+import com.ruoyi.goods.service.lottery.ILotteryEventService;
 import com.ruoyi.goods.service.lottery.IUserLotteryEventQuestionsAnswersService;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-
+import java.util.Collections;
+import java.util.List;
 
 
 /**
@@ -44,5 +49,11 @@
 		return BigDecimal.ZERO;
 	}
 
+	@Override
+	public List<MgtUserAnswersPageVO> getUserAnswersPage(Page<MgtUserAnswersPageVO> page, String lotteryEventId, Long userId) {
+		//获取分页信息
+		return  this.getBaseMapper().getUserAnswersPage(page,lotteryEventId,userId);
+	}
+
 
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventService.java
index 29a1855..f599d73 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventService.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventService.java
@@ -4,9 +4,10 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.goods.api.domain.LotteryEvent;
-import com.ruoyi.goods.domain.vo.AppLotteryEventPageVo;
-import com.ruoyi.goods.domain.vo.LotteryEventVo;
-import com.ruoyi.goods.domain.vo.ShopLotteryDrawListVo;
+import com.ruoyi.goods.domain.dto.MgtLotteryEventEditDTO;
+import com.ruoyi.goods.domain.dto.MgtLotteryEventJoinUserPageDTO;
+import com.ruoyi.goods.domain.dto.MgtLotteryEventPageDto;
+import com.ruoyi.goods.domain.vo.*;
 
 import java.util.List;
 
@@ -52,4 +53,40 @@
 	 * @return
 	 */
 	List<ShopLotteryDrawListVo> getShopLotteryDrawList(Page<ShopLotteryDrawListVo> page, Long shopId);
+
+	/**
+	 * 平台添加抽奖活动
+	 * @param dto
+	 * @return
+	 */
+    R<ShopLotteryDrawVo> editLotteryEvent(MgtLotteryEventEditDTO dto);
+
+	/**
+	 * 分页查询抽奖活动
+	 * @param page
+	 * @param dto
+	 * @return
+	 */
+	List<MgtLotteryEventPageVo> pageMgtLotteryEvent(Page<MgtLotteryEventPageVo> page, MgtLotteryEventPageDto dto);
+
+	/**
+	 * 查看抽奖活动详情
+	 * @param id
+	 * @return
+	 */
+	R<MgtLotteryEventDetailVO> getLotteryEventDetailById(String id);
+
+	/**
+	 * 删除抽奖活动
+	 * @param id
+	 * @return
+	 */
+	R deleteMgtLotteryEvent(String id);
+
+	/**
+	 * 立即结束抽奖活动
+	 * @param id
+	 * @return
+	 */
+	R endImmediatelyLotteryEvent(String id);
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/IUserLotteryEventQuestionsAnswersService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/IUserLotteryEventQuestionsAnswersService.java
index afb3e15..b1fed74 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/IUserLotteryEventQuestionsAnswersService.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/IUserLotteryEventQuestionsAnswersService.java
@@ -1,9 +1,12 @@
 package com.ruoyi.goods.service.lottery;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.goods.api.domain.UserLotteryEventQuestionsAnswers;
+import com.ruoyi.goods.domain.vo.MgtUserAnswersPageVO;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * @author zhibing.pu
@@ -19,4 +22,6 @@
 	 * @return
 	 */
 	BigDecimal getCorrectAnswerRate(Long userId, String lotteryEventId);
+
+    List<MgtUserAnswersPageVO> getUserAnswersPage(Page<MgtUserAnswersPageVO> page, String lotteryEventId, Long userId);
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml
index 42a9767..85671ec 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml
+++ b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml
@@ -540,7 +540,7 @@
                 ELSE "下架中"
                 END goodsStatus,
             tg.create_time,
-            tsg.shop_id,
+            tsg.shop_id bindShopId,
             tsg.sales_price shopPrice
         from t_goods tg
         LEFT JOIN t_goods_file tgf ON tg.goods_id = tgf.goods_id AND tgf.del_flag = 0 AND tgf.file_type = 1
diff --git a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/LotteryEventMapper.xml b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/LotteryEventMapper.xml
index 0419a27..769c513 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/LotteryEventMapper.xml
+++ b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/LotteryEventMapper.xml
@@ -40,4 +40,72 @@
 		where shop_id = #{shopId}
 		order by create_time desc
 	</select>
+    <select id="pageMgtLotteryEvent" resultType="com.ruoyi.goods.domain.vo.MgtLotteryEventPageVo">
+		SELECT
+		    id,
+		shop_id,
+		name,
+		activity_type,
+		CONCAT(start_time,'-',end_time) activityTime,
+		create_time,
+		CASE
+			WHEN NOW() &lt; start_time THEN 1        -- 未开始
+			WHEN NOW() BETWEEN start_time AND end_time THEN 2  -- 进行中
+			ELSE 3                                -- 已结束
+			END AS `status`,
+		CASE
+			WHEN NOW() BETWEEN start_time AND end_time THEN 1
+			ELSE 0
+			END AS flag
+		FROM
+		t_lottery_event
+		where
+			del_flag =0
+		<choose>
+			<when test="dto.status != null and dto.status == 0">
+				-- 0-全部状态,不添加额外条件
+			</when>
+			<when test="dto.status != null and dto.status == 1">
+				AND start_time &gt; NOW()  -- 1-未开始
+			</when>
+			<when test="dto.status != null and dto.status == 2">
+				AND start_time &lt;= NOW() AND end_time &gt;= NOW()  -- 2-进行中
+			</when>
+			<when test="dto.status != null and dto.status == 3">
+				AND end_time &lt; NOW()  -- 3-已结束
+			</when>
+		</choose>
+		<if test="null != dto.name and ''!= dto.name ">
+			`name` like concat('%',#{dto.name},'%')
+		</if>
+		<if test="null != dto.activityType and  dto.activityType!=0 ">
+			activity_type = #{dto.activityType}
+		</if>
+
+		<choose>
+			<when test="dto.shopIds != null and dto.shopIds.size() > 0">
+				<choose>
+					<when test="dto.flag != null and dto.flag == 1">
+						-- flag=1: 需要查询shop_id为null的记录 即平台创建的
+						AND (shop_id IN
+						<foreach collection="dto.shopIds" item="shopId" open="(" separator="," close=")">
+							#{shopId}
+						</foreach>
+						OR shop_id IS NULL)
+					</when>
+					<otherwise>
+						-- flag不为1: 只查询shopIds的值
+						AND shop_id IN
+						<foreach collection="dto.shopIds" item="shopId" open="(" separator="," close=")">
+							#{shopId}
+						</foreach>
+					</otherwise>
+				</choose>
+			</when>
+			<when test="dto.nameflag != null and dto.nameflag == 1">
+				-- shopIds为空但flag=1: 即查询平台创建,其他店铺没有类似的名称
+				AND shop_id IS NULL
+			</when>
+		</choose>
+	</select>
 </mapper>
diff --git a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/UserLotteryEventQuestionsAnswersMapper.xml b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/UserLotteryEventQuestionsAnswersMapper.xml
new file mode 100644
index 0000000..c981660
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/UserLotteryEventQuestionsAnswersMapper.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.goods.mapper.lottery.UserLotteryEventQuestionsAnswersMapper">
+
+    <select id="getUserAnswersPage" resultType="com.ruoyi.goods.domain.vo.MgtUserAnswersPageVO">
+        SELECT
+            q.sort AS sort,
+            q.name AS name,
+            GROUP_CONCAT(a.answers ORDER BY a.id SEPARATOR ';') AS answer,
+            r.answers AS rightAnswer,
+            ua_answer.answers AS userAnswer,  -- 使用关联表获取用户选择的答案文本
+            ua.is_correct AS isCorrect
+        FROM
+            t_user_lottery_event_questions_answers ua
+                LEFT JOIN
+            t_lottery_event_questions q
+            ON ua.lottery_event_question_id = q.id
+                LEFT JOIN
+            t_lottery_event_questions_answers a
+            ON q.id = a.lottery_event_questions_id
+                LEFT JOIN
+            t_lottery_event_questions_answers r
+            ON q.id = r.lottery_event_questions_id AND r.is_right = 1
+                LEFT JOIN
+            t_lottery_event_questions_answers ua_answer
+            ON ua.lottery_event_questions_answers_id = ua_answer.id
+        WHERE
+            ua.user_id = #{userId}
+          AND ua.lottery_event_id = #{lotteryEventId}
+        GROUP BY
+            ua.lottery_event_question_id, q.sort, q.name, r.answers, ua.is_correct, ua_answer.answers
+        ORDER BY
+            q.sort ASC
+    </select>
+</mapper>
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java
index a1502ea..0c2d32d 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java
@@ -1,6 +1,7 @@
 package com.ruoyi.shop.controller.console;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.constant.CacheConstants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.ServiceException;
@@ -14,6 +15,7 @@
 import com.ruoyi.shop.service.task.ShopTaskService;
 import com.ruoyi.system.api.constant.AppErrorConstant;
 import com.ruoyi.system.api.domain.dto.*;
+import com.ruoyi.system.api.domain.poji.config.OneClinkSyncing;
 import com.ruoyi.system.api.domain.poji.shop.Shop;
 import com.ruoyi.system.api.domain.poji.sys.SysUser;
 import com.ruoyi.system.api.domain.vo.*;
@@ -451,8 +453,26 @@
      * @param shopId
      * @return
      */
-    @PostMapping("/shop/getFranchiseeIdsBYDealerId")
+    @PostMapping("/getFranchiseeIdsBYDealerId")
     List<Shop> getFranchiseeIdsBYDealerId(@RequestBody Long shopId){
         return shopService.getFranchiseeIdsBYDealerId(shopId);
     }
+
+    /**
+     * 根据shopIds分页查看
+     * @param dto
+     * @return
+     */
+    @PostMapping("/getMgtShopPageVoByShopIds")
+    Page<MgtOneClinkSyncingShopPageVo> getMgtShopPageVoByShopIds(@RequestBody MGtOneClinkSyncingShopPageDTO dto){
+        return  shopService.getMgtShopPageVoByShopIds(dto);
+    }
+
+    /**
+     * 一键同步商户信息
+     */
+    @PostMapping("/updateShopByOneClinkSyncing")
+    R updateShopByOneClinkSyncing(@RequestBody OneClinkSyncing oneClinkSyncing){
+        return shopService.updateShopByOneClinkSyncing(oneClinkSyncing);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/management/MgtShopController.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/management/MgtShopController.java
index b657b71..35d06f0 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/management/MgtShopController.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/management/MgtShopController.java
@@ -22,10 +22,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
@@ -633,4 +630,11 @@
         List<Map<String, String>> bankBranchCode = bankBranchCodeService.getBankBranchCode(dto.getBankNumber());
         return R.ok(bankBranchCode);
     }
+
+    @RequestMapping(value = "/changeShopType", method = RequestMethod.GET)
+    @ApiOperation(value = "修改商户类型(转为经销商,转为加盟商)【2.0】")
+    public R<Void> changeShopType(@RequestParam Long shopId){
+        return shopService.changeShopType(shopId);
+    }
+
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopMapper.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopMapper.java
index 54001ca..4f6f949 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopMapper.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopMapper.java
@@ -4,13 +4,12 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.shop.domain.dto.*;
 import com.ruoyi.shop.domain.vo.*;
+import com.ruoyi.system.api.domain.dto.MGtOneClinkSyncingShopPageDTO;
 import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto;
 import com.ruoyi.system.api.domain.dto.MgtShopIdByCodeDto;
+import com.ruoyi.system.api.domain.poji.config.OneClinkSyncing;
 import com.ruoyi.system.api.domain.poji.shop.Shop;
-import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
-import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
-import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo;
-import com.ruoyi.system.api.domain.vo.MgtUserTaskMsgVo;
+import com.ruoyi.system.api.domain.vo.*;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -295,4 +294,22 @@
     List<Shop> listShopByCityCode(@Param("cityCodes")List<String> cityCodes);
 
     List<Shop> getFranchiseeIdsBYDealerId(@Param("shopId")Long shopId);
+
+
+    /**
+     * 设置加盟商的归属经销商为null
+     * @param shopId
+     */
+    void setBelongShopIdNull(@Param("shopId")Long shopId);
+
+    /**
+     * 根据shopIds获取一键同步的店铺信息
+     * @param page
+     * @param scope
+     * @return
+     */
+    List<MgtOneClinkSyncingShopPageVo> getMgtShopPageVoByShopIds(Page page, @Param("list") List<Long> scope);
+
+    void updateShopByOneClinkSyncing(@Param("param") OneClinkSyncing oneClinkSyncing);
+
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/task/ShopFileMapper.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/task/ShopFileMapper.java
index c900108..3b11451 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/task/ShopFileMapper.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/task/ShopFileMapper.java
@@ -2,6 +2,9 @@
 
 import com.ruoyi.shop.domain.pojo.task.ShopFile;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -17,4 +20,6 @@
      * @param shopId
      */
     void deleteByShopId(Long shopId);
+
+    void deleteBatchByShopIds(@Param("shopIds") List<Long> shopIds);
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
index 3d1b4c7..a1ef893 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -26,6 +26,7 @@
 import com.ruoyi.shop.domain.pojo.task.ShopFile;
 import com.ruoyi.shop.domain.pojo.task.ShopTask;
 import com.ruoyi.shop.domain.vo.*;
+import com.ruoyi.shop.domain.vo.MgtShopPageVo;
 import com.ruoyi.shop.enums.WxApplyMentStateEnum;
 import com.ruoyi.shop.mapper.shop.ShopMapper;
 import com.ruoyi.shop.service.shop.*;
@@ -40,6 +41,7 @@
 import com.ruoyi.system.api.constant.AppErrorConstant;
 import com.ruoyi.system.api.constant.SecurityConstant;
 import com.ruoyi.system.api.domain.dto.*;
+import com.ruoyi.system.api.domain.poji.config.OneClinkSyncing;
 import com.ruoyi.system.api.domain.poji.config.SysTag;
 import com.ruoyi.system.api.domain.poji.member.Member;
 import com.ruoyi.system.api.domain.poji.shop.Shop;
@@ -50,6 +52,7 @@
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -1957,4 +1960,82 @@
     public List<Shop> getFranchiseeIdsBYDealerId(Long shopId) {
         return shopMapper.getFranchiseeIdsBYDealerId(shopId);
     }
+
+    /**
+     * 修改商户类型
+     * @param shopId
+     * @return
+     */
+    @Override
+    public R<Void> changeShopType(Long shopId) {
+        Shop shop = shopMapper.selectById(shopId);
+        if(null == shop|| shop.getDelFlag() != 0){
+            return R.fail("商户不存在");
+        }
+        //商户修改类型 1-经销商  2-加盟商
+        shop.setShopType(shop.getShopType()==1?2:1);
+        if (shop.getShopType()==2){
+            //经销商转加盟商:  先解绑该经销商下所有加盟商
+            shopMapper.setBelongShopIdNull(shopId);
+        }
+        shop.setUpdateUserId(SecurityUtils.getUserId());
+        shopMapper.updateById(shop);
+
+        return R.ok();
+    }
+
+    @Override
+    public Page<MgtOneClinkSyncingShopPageVo> getMgtShopPageVoByShopIds(MGtOneClinkSyncingShopPageDTO dto) {
+        Page<MgtOneClinkSyncingShopPageVo> page = new Page<>();
+        page.setSize(dto.getPageSize());
+        page.setCurrent(dto.getPageNum());
+        List<MgtOneClinkSyncingShopPageVo> mgtShopPageVoList = shopMapper.getMgtShopPageVoByShopIds(page,dto.getShopIds());
+        return page.setRecords(mgtShopPageVoList);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R updateShopByOneClinkSyncing(OneClinkSyncing oneClinkSyncing) {
+        if (StringUtils.isBlank(oneClinkSyncing.getShopIds())) {
+            return R.fail("请选择要更新的门店");
+        }
+        // 1. 转换门店ID列表
+        List<Long> shopIdList = Arrays.stream(oneClinkSyncing.getShopIds().split(","))
+                .map(String::trim)
+                .filter(StringUtils::isNotBlank)
+                .map(Long::parseLong)
+                .collect(Collectors.toList());
+        // 批量删除封面和Banner图
+        shopFileService.deleteBatchByShopIds(shopIdList);
+        //批量添加封面图
+        List<ShopFile> coverUrlList = shopIdList.stream()
+                .map(shopId -> new ShopFile()
+                        .setShopId(shopId)
+                        .setFileType(1)
+                        .setFileUrl(oneClinkSyncing.getCoverUrl())
+                        .setDelFlag(0))
+                .collect(Collectors.toList());
+        shopFileService.saveBatch(coverUrlList);
+        //批量添加banner图
+        List<String> bannerUrlList = Arrays.stream(oneClinkSyncing.getDetailsPicture().split(","))
+                .map(String::trim)
+                .filter(StringUtils::isNotBlank)
+                .collect(Collectors.toList());
+        List<ShopFile> bannerList = new ArrayList<>();
+        for (Long shopId : shopIdList) {
+            for (String bannerUrl : bannerUrlList) {
+                bannerList.add(new ShopFile()
+                        .setShopId(shopId)
+                        .setFileType(2) // Banner图
+                        .setFileUrl(bannerUrl)
+                        .setDelFlag(0));
+            }
+        }
+        shopFileService.saveBatch(coverUrlList);
+
+        //批量修改门店信息
+        oneClinkSyncing.setShopIdList(shopIdList);
+        shopMapper.updateShopByOneClinkSyncing(oneClinkSyncing);
+        return R.ok();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/ShopFileServiceImpl.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/ShopFileServiceImpl.java
index 606d193..238d8ee 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/ShopFileServiceImpl.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/ShopFileServiceImpl.java
@@ -45,4 +45,9 @@
         shopFileMapper.deleteByShopId(shopId);
     }
 
+    @Override
+    public void deleteBatchByShopIds(List<Long> shopIdList) {
+        shopFileMapper.deleteBatchByShopIds(shopIdList);
+    }
+
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java
index 8f218df..e0883a5 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java
@@ -8,9 +8,12 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.shop.domain.dto.*;
 import com.ruoyi.shop.domain.vo.*;
+import com.ruoyi.shop.domain.vo.MgtShopPageVo;
+import com.ruoyi.system.api.domain.dto.MGtOneClinkSyncingShopPageDTO;
 import com.ruoyi.system.api.domain.dto.MerBaseDto;
 import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto;
 import com.ruoyi.system.api.domain.dto.MgtShopIdByCodeDto;
+import com.ruoyi.system.api.domain.poji.config.OneClinkSyncing;
 import com.ruoyi.system.api.domain.poji.member.Member;
 import com.ruoyi.system.api.domain.poji.shop.Shop;
 import com.ruoyi.system.api.domain.vo.*;
@@ -71,7 +74,7 @@
      * @param mgtShopPageDto
      * @return
      */
-    List<MgtShopPageVo> pageMgtShop(Page page, MgtShopPageDto mgtShopPageDto,List<Long> scope);
+    List<MgtShopPageVo> pageMgtShop(Page page, MgtShopPageDto mgtShopPageDto, List<Long> scope);
 
     /**
      * 获取商户详情
@@ -468,4 +471,22 @@
      * @return
      */
     List<Shop> getFranchiseeIdsBYDealerId(Long shopId);
+    /**
+     * 修改商户类型
+     * @param shopId
+     * @return
+     */
+    R<Void> changeShopType(Long shopId);
+
+    /**
+     * 根据ids分页获取一键同步的商户信息
+     * @param dto
+     * @return
+     */
+    Page<MgtOneClinkSyncingShopPageVo> getMgtShopPageVoByShopIds(MGtOneClinkSyncingShopPageDTO dto);
+
+    /**
+     * 一键同步商户信息
+     */
+    R updateShopByOneClinkSyncing(OneClinkSyncing oneClinkSyncing);
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/ShopFileService.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/ShopFileService.java
index 7f9a676..0b477df 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/ShopFileService.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/ShopFileService.java
@@ -27,4 +27,10 @@
      * @param shopId
      */
     void deleteByShopId(Long shopId);
+
+    /**
+     * 通过商户ids批量删除关联
+     * @param shopIdList
+     */
+    void deleteBatchByShopIds(List<Long> shopIdList);
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml b/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
index 56019ea..743f260 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
+++ b/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
@@ -1040,6 +1040,26 @@
         WHERE shop_id = #{shopId}
     </update>
 
+    <update id="setBelongShopIdNull">
+        UPDATE t_shop
+        SET belong_shop_id = NULL
+        WHERE belong_shop_id = #{shopId} and del_flag = 0  and shopstatus!=-1 and shop_type = 2
+    </update>
+    <update id="updateShopByOneClinkSyncing">
+        UPDATE t_shop
+        SET
+            shop_detail = #{param.shopDetail},
+            platform_coupon_flag = #{param.platformCouponFlag},
+            platform_birthday_flag = #{param.platformBirthdayFlag},
+            update_user_id = #{param.userId},
+            update_time = NOW()
+        WHERE
+            shop_id IN
+        <foreach item="id" collection="param.shopIdList" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
     <select id="listShopIdByCityCode" resultType="java.lang.Long">
         SELECT shop_id
         FROM t_shop
@@ -1089,5 +1109,33 @@
           and
             belong_shop_id = #{shopId}
     </select>
+    <select id="getMgtShopPageVoByShopIds" resultType="com.ruoyi.system.api.domain.vo.MgtOneClinkSyncingShopPageVo">
+        SELECT
+            ts.shop_id shopId,
+            ts.shop_number shopNumber,
+            ts.shop_name shopName,
+            ts.shop_tags shopTags,
+            ts.shop_source shopSource,
+            belong.shop_name belongShopName,
+            ts.sign_area_name signAreaName,
+            CONCAT(ts.cooperation_start_time,'-',ts.cooperation_end_time) cooperationTime,
+            CONCAT(ts.shop_area_name,ts.shop_address) shopAddress,
+            ts.shopowner_name shopownerName,
+            ts.shopowner_phone shopownerPhone,
+            tsm.shop_marketing_total shopActivityCount,
+            ts.shop_custom_status shopCustomStatus,
+            ts.frozen_flag frozenFlag
+        FROM t_shop ts
+                 LEFT JOIN t_shop_marketing tsm ON tsm.shop_id = ts.shop_id
+                left join t_shop belong on ts.belong_shop_id = belong.shop_id
+        WHERE ts.del_flag = 0
+        <if test="list !=null and list.size()>0" >
+            AND ts.shop_id IN
+            <foreach collection="list" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+
+    </select>
 
 </mapper>
diff --git a/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/ShopFileMapper.xml b/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/ShopFileMapper.xml
index d72bdb3..37e52c7 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/ShopFileMapper.xml
+++ b/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/ShopFileMapper.xml
@@ -70,4 +70,10 @@
         UPDATE t_shop_file SET del_flag = 1 WHERE shop_id = #{shopId}
     </update>
 
+    <update id="deleteBatchByShopIds">
+        update t_shop_file set del_flag =1 where shop_id in
+        <foreach collection="shopIds" item="shopId" open="(" separator="," close=")">
+            #{shopId}
+        </foreach>
+    </update>
 </mapper>
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java
index 17efee6..10b3457 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java
@@ -1,5 +1,6 @@
 package com.ruoyi.system.controller.management;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.utils.poi.ExcelUtil;
@@ -7,6 +8,7 @@
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.system.api.domain.dto.MGtOneClinkSyncingShopPageDTO;
 import com.ruoyi.system.api.domain.dto.MgtBaseGetDto;
 import com.ruoyi.system.api.domain.dto.MgtClassNumDto;
 import com.ruoyi.system.api.domain.dto.MgtPageDto;
@@ -81,6 +83,9 @@
 
     @Resource
     private BottomNavService bottomNavService;
+
+    @Resource
+    private OneClinkSyncingService oneClinkSyncingService;
 
 
     @RequestMapping(value = "/getCustomConfig", method = RequestMethod.POST)
@@ -159,7 +164,7 @@
 
     @RequestMapping(value = "/editBanner", method = RequestMethod.POST)
     @Log(title = "banner管理", businessType = BusinessType.UPDATE,operContent = "修改banner")
-    @ApiOperation(value = "修改banner")
+    @ApiOperation(value = "修改banner【2.0】")
     public R editBanner(@RequestBody MgtBannerEditDto mgtBannerEditDto) {
         Long userId = SecurityUtils.getUserId();
         mgtBannerEditDto.setUserId(userId);
@@ -180,7 +185,7 @@
     }
 
     @RequestMapping(value = "/getBanner", method = RequestMethod.POST)
-    @ApiOperation(value = "获取banner编辑信息")
+    @ApiOperation(value = "获取banner编辑信息【2.0】")
     public R<MgtBannerGetVo> getBanner(@RequestBody MgtBaseGetDto mgtBaseGetDto) {
         Long userId = SecurityUtils.getUserId();
         mgtBaseGetDto.setUserId(userId);
@@ -212,7 +217,7 @@
 
     @RequestMapping(value = "/editPop", method = RequestMethod.POST)
     @Log(title = "弹窗管理", businessType = BusinessType.UPDATE,operContent = "修改弹窗广告")
-    @ApiOperation(value = "修改弹窗广告")
+    @ApiOperation(value = "修改弹窗广告【2.0】")
     public R editPop(@RequestBody MgtPopEditDto mgtPopEditDto) {
         Long userId = SecurityUtils.getUserId();
         mgtPopEditDto.setUserId(userId);
@@ -221,7 +226,7 @@
     }
 
     @RequestMapping(value = "/getPop", method = RequestMethod.POST)
-    @ApiOperation(value = "获取弹窗编辑信息")
+    @ApiOperation(value = "获取弹窗编辑信息【2.0】")
     public R<MgtPopGetVo> getPop(@RequestBody MgtBaseGetDto mgtBaseGetDto) {
         Long userId = SecurityUtils.getUserId();
         mgtBaseGetDto.setUserId(userId);
@@ -240,13 +245,13 @@
     }
 
     @RequestMapping(value = "/getBottomNav", method = RequestMethod.GET)
-    @ApiOperation(value = "获取底部导航栏配置数据")
+    @ApiOperation(value = "获取底部导航栏配置数据【2.0】")
     public R<List<BottomNav>> getBottomNav() {
         List<BottomNav> list = bottomNavService.getAllBottomNav();
         return R.ok(list);
     }
     @RequestMapping(value = "/editBottomNav", method = RequestMethod.PUT)
-    @ApiOperation(value = "获取底部导航栏配置数据")
+    @ApiOperation(value = "获取底部导航栏配置数据【2.0】")
     public R<Void> editBottomNav(@RequestBody BottomNavDto bottomNavDto) {
         return bottomNavService.editBottomNav(bottomNavDto);
     }
@@ -265,7 +270,7 @@
 
     @RequestMapping(value = "/editQuickEntry", method = RequestMethod.POST)
     @Log(title = "快速入口管理", businessType = BusinessType.UPDATE,operContent = "修改快速入口")
-    @ApiOperation(value = "修改快速入口")
+    @ApiOperation(value = "修改快速入口【2.0】")
     public R editQuickEntry(@RequestBody MgtQuickEntryEditDto mgtQuickEntryEditDto) {
         Long userId = SecurityUtils.getUserId();
         mgtQuickEntryEditDto.setUserId(userId);
@@ -274,7 +279,7 @@
     }
 
     @RequestMapping(value = "/getQuickEntry", method = RequestMethod.POST)
-    @ApiOperation(value = "获取快速入口编辑信息")
+    @ApiOperation(value = "获取快速入口编辑信息【2.0】")
     public R<MgtQuickEntryGetVo> getQuickEntry(@RequestBody MgtBaseGetDto mgtBaseGetDto) {
         Long userId = SecurityUtils.getUserId();
         mgtBaseGetDto.setUserId(userId);
@@ -630,5 +635,39 @@
         return R.ok(bulletinBoard);
     }
 
+    @RequestMapping(value = "/pageOneClinkSyncing", method = RequestMethod.POST)
+    @ApiOperation(value = "分页获取一键同步【2.0】")
+    public R<IPage<MgtOneClinkSyncPageVO>> pageOneClinkSyncing(@RequestBody MgtOneClinkSyncingPageDTO mgtPageDto) {
+        return R.ok(oneClinkSyncingService.pageOneClinkSyncing(mgtPageDto));
+    }
+
+    @RequestMapping(value = "/editOneClinkSyncing", method = RequestMethod.POST)
+    @Log(title = "一键同步管理", businessType = BusinessType.UPDATE,operContent = "修改一键同步")
+    @ApiOperation(value = "修改一键同步【2.0】")
+    public R editOneClinkSyncing(@RequestBody MgtOneClinkSyncingEditDto dto) {
+        Long userId = SecurityUtils.getUserId();
+        dto.setUserId(userId);
+        return oneClinkSyncingService.editOneClinkSyncing(dto);
+    }
+
+    @RequestMapping(value = "/getOneClinkSyncing", method = RequestMethod.POST)
+    @ApiOperation(value = "获取一键同步信息(查看详情)【2.0】")
+    public R<MgtOneClinkSyncingVO> getOneClinkSyncing(@RequestBody MGtOneClinkSyncingShopPageDTO dto ) {
+        return  oneClinkSyncingService.getOneClinkSyncing(dto);
+    }
+
+    @RequestMapping(value = "/deleteOneClinkSyncing", method = RequestMethod.GET)
+    @Log(title = "一键同步管理", businessType = BusinessType.DELETE,operContent = "删除一键同步")
+    @ApiOperation(value = "删除一键同步【2.0】")
+    public R deleteOneClinkSyncing(@RequestParam("syncingId") Integer syncingId ) {
+        return oneClinkSyncingService.deleteOneClinkSyncing(syncingId);
+    }
+
+    @RequestMapping(value = "/executeOneClinkSyncing", method = RequestMethod.GET)
+    @Log(title = "一键同步管理", businessType = BusinessType.UPDATE,operContent = "执行一键同步")
+    @ApiOperation(value = "执行一键同步【2.0】")
+    public R executeOneClinkSyncing(@RequestParam("syncingId") Integer syncingId ) {
+        return oneClinkSyncingService.executeOneClinkSyncing(syncingId);
+    }
 
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtOneClinkSyncingEditDto.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtOneClinkSyncingEditDto.java
new file mode 100644
index 0000000..3452bbb
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtOneClinkSyncingEditDto.java
@@ -0,0 +1,45 @@
+package com.ruoyi.system.domain.dto;
+
+import com.ruoyi.system.api.domain.dto.AppBaseDto;
+import com.ruoyi.system.api.domain.dto.MgtBaseDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author hlg
+ * @ClassName MgtOneClinkSyncingDto
+ * @date 2025/6/16
+ */
+@Data
+public class MgtOneClinkSyncingEditDto extends MgtBaseDto {
+
+
+    @ApiModelProperty(value = "syncingId 新增不传")
+    private Integer syncingId;
+
+    @ApiModelProperty(value = "标题")
+    private String syncingName;
+
+    @ApiModelProperty(value = "封面图url")
+    private String coverUrl;
+
+    @ApiModelProperty(value = "详情图,多个逗号分隔")
+    private String detailsPicture;
+
+    @ApiModelProperty(value = "领券1开2关")
+    private Integer platformCouponFlag;
+
+    @ApiModelProperty(value = "生日卡1开2关")
+    private Integer platformBirthdayFlag;
+
+    @ApiModelProperty(value = "选择门店数")
+    private Integer shopNum;
+
+    @ApiModelProperty(value = "选择的门店ids,多个以逗号隔开")
+    private String shopIds;
+
+    @ApiModelProperty(value = "店铺详情")
+    private String shopDetail;
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtOneClinkSyncingPageDTO.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtOneClinkSyncingPageDTO.java
new file mode 100644
index 0000000..1c6de66
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtOneClinkSyncingPageDTO.java
@@ -0,0 +1,22 @@
+package com.ruoyi.system.domain.dto;
+
+import com.ruoyi.system.api.domain.dto.MgtPageDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class MgtOneClinkSyncingPageDTO  {
+    @ApiModelProperty("页码")
+    private Integer pageNum=0;
+
+    @ApiModelProperty("分页大小")
+    private Integer pageSize=10;
+    @ApiModelProperty(value = "同步标题")
+    private String syncingName;
+
+    @ApiModelProperty(value = "操作同步时间范围-开始时间")
+    private String syncingStartTime;
+
+    @ApiModelProperty(value = "操作同步时间范围-结束时间")
+    private String syncingEndTime;
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Pop.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Pop.java
index ca2f7b0..2318efb 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Pop.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Pop.java
@@ -91,11 +91,6 @@
     @TableField("jump_type")
     private Integer jumpType;
 
-    /**
-     * 小程序APPID
-     */
-    @TableField("appid")
-    private String appid;
 
     @Override
     protected Serializable pkVal() {
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtOneClinkSyncPageVO.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtOneClinkSyncPageVO.java
new file mode 100644
index 0000000..10f4f3f
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtOneClinkSyncPageVO.java
@@ -0,0 +1,26 @@
+package com.ruoyi.system.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class MgtOneClinkSyncPageVO {
+    @ApiModelProperty(value = "同步id")
+    private Integer syncingId;
+    @ApiModelProperty(value = "标题")
+    private String syncingName;
+    @ApiModelProperty(value = "封面图url")
+    private String coverUrl;
+    @ApiModelProperty(value = "详情图,多个逗号分隔")
+    private String detailsPicture;
+    @ApiModelProperty(value = "领券1开2关")
+    private Integer platformCouponFlag;
+    @ApiModelProperty(value = "生日卡1开2关")
+    private Integer platformBirthdayFlag;
+    @ApiModelProperty(value = "同步门店数")
+    private Integer shopNum;
+    @ApiModelProperty(value = "最近一次同步时间")
+    private Date syncingTime;
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtOneClinkSyncingVO.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtOneClinkSyncingVO.java
new file mode 100644
index 0000000..f50f852
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtOneClinkSyncingVO.java
@@ -0,0 +1,38 @@
+package com.ruoyi.system.domain.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.system.api.domain.vo.MgtOneClinkSyncingShopPageVo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MgtOneClinkSyncingVO {
+    @ApiModelProperty("syncing id")
+    private Integer syncingId;
+
+    @ApiModelProperty("同步名称(标题)")
+    private String syncingName;
+
+    @ApiModelProperty("封面图片")
+    private String coverUrl;
+
+    @ApiModelProperty("详情图,多个逗号分隔")
+    private String detailsPicture;
+
+    @ApiModelProperty("领券1开2关")
+    private String platformCouponFlag;
+
+
+    @ApiModelProperty("生日卡1开2关")
+    private String platformBirthdayFlag;
+
+    @ApiModelProperty("店铺详情")
+    private String shopDetail;
+
+    @ApiModelProperty("商户列表")
+    private Page<MgtOneClinkSyncingShopPageVo> page;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/config/OneClinkSyncingMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/config/OneClinkSyncingMapper.java
new file mode 100644
index 0000000..528c84d
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/config/OneClinkSyncingMapper.java
@@ -0,0 +1,29 @@
+package com.ruoyi.system.mapper.config;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.system.domain.dto.MgtOneClinkSyncingPageDTO;
+import com.ruoyi.system.api.domain.poji.config.OneClinkSyncing;
+import com.ruoyi.system.domain.vo.MgtOneClinkSyncPageVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 一键同步 Mapper 接口
+ * </p>
+ *
+ * @author hlg
+ * @since 2025-06-16
+ */
+@Mapper
+public interface OneClinkSyncingMapper extends BaseMapper<OneClinkSyncing> {
+    /**
+     * 分页查询一键同步
+     * @param page
+     * @param mgtPageDto
+     * @return
+     */
+    IPage<MgtOneClinkSyncPageVO> pageOneClinkSyncing(@Param("page") IPage<MgtOneClinkSyncPageVO> page, @Param("dto") MgtOneClinkSyncingPageDTO mgtPageDto);
+
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/OneClinkSyncingService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/OneClinkSyncingService.java
new file mode 100644
index 0000000..abd37b8
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/OneClinkSyncingService.java
@@ -0,0 +1,46 @@
+package com.ruoyi.system.service.config;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.api.domain.dto.MGtOneClinkSyncingShopPageDTO;
+import com.ruoyi.system.domain.dto.MgtOneClinkSyncingEditDto;
+import com.ruoyi.system.domain.dto.MgtOneClinkSyncingPageDTO;
+import com.ruoyi.system.api.domain.poji.config.OneClinkSyncing;
+import com.ruoyi.system.domain.vo.MgtOneClinkSyncPageVO;
+import com.ruoyi.system.domain.vo.MgtOneClinkSyncingVO;
+
+/**
+ * <p>
+ * 一键同步 服务类
+ * </p>
+ *
+ * @author jqs
+ * @since 2023-04-25
+ */
+public interface OneClinkSyncingService extends IService<OneClinkSyncing> {
+    /**
+     * @description  获取一键同步分页
+     * @author  hlg
+     * @date    2025/6/16 10:35
+     * @param mgtPageDto
+     * @return  MgtOneClinkSyncPageVO
+     */
+    IPage<MgtOneClinkSyncPageVO> pageOneClinkSyncing(MgtOneClinkSyncingPageDTO mgtPageDto);
+
+    /**
+     * 修改一键同步
+     * @param dto
+     */
+    R editOneClinkSyncing(MgtOneClinkSyncingEditDto dto);
+
+    /**
+     * 获取详情
+     * @param dto
+     */
+    R<MgtOneClinkSyncingVO> getOneClinkSyncing(MGtOneClinkSyncingShopPageDTO dto);
+
+    R deleteOneClinkSyncing(Integer syncingId);
+
+    R executeOneClinkSyncing(Integer syncingId);
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/OneClinkSyncingServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/OneClinkSyncingServiceImpl.java
new file mode 100644
index 0000000..c419c1c
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/OneClinkSyncingServiceImpl.java
@@ -0,0 +1,134 @@
+package com.ruoyi.system.service.impl.config;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.bean.BeanUtils;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.system.api.domain.dto.MGtOneClinkSyncingShopPageDTO;
+import com.ruoyi.system.api.domain.vo.MgtOneClinkSyncingShopPageVo;
+import com.ruoyi.system.api.service.RemoteShopService;
+import com.ruoyi.system.domain.dto.MgtOneClinkSyncingEditDto;
+import com.ruoyi.system.domain.dto.MgtOneClinkSyncingPageDTO;
+import com.ruoyi.system.api.domain.poji.config.OneClinkSyncing;
+import com.ruoyi.system.domain.vo.MgtOneClinkSyncPageVO;
+import com.ruoyi.system.domain.vo.MgtOneClinkSyncingVO;
+import com.ruoyi.system.mapper.config.OneClinkSyncingMapper;
+import com.ruoyi.system.service.config.OneClinkSyncingService;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 广告 服务实现类
+ * </p>
+ *
+ * @author jqs
+ * @since 2023-04-25
+ */
+@Service
+public class OneClinkSyncingServiceImpl extends ServiceImpl<OneClinkSyncingMapper, OneClinkSyncing> implements OneClinkSyncingService {
+
+    private final RemoteShopService remoteShopService;
+
+    public OneClinkSyncingServiceImpl(RemoteShopService remoteShopService) {
+        this.remoteShopService = remoteShopService;
+    }
+
+    @Override
+    public IPage<MgtOneClinkSyncPageVO> pageOneClinkSyncing(MgtOneClinkSyncingPageDTO mgtPageDto) {
+        //分页查询
+        IPage<MgtOneClinkSyncPageVO> page = new Page<>(mgtPageDto.getPageNum(),mgtPageDto.getPageSize());
+        return this.baseMapper.pageOneClinkSyncing(page,mgtPageDto);
+    }
+
+    @Override
+    public R editOneClinkSyncing(MgtOneClinkSyncingEditDto dto) {
+        OneClinkSyncing oneClinkSyncing = new OneClinkSyncing();
+        if (null != dto.getSyncingId()){
+            oneClinkSyncing = this.getById(dto.getSyncingId());
+            if(oneClinkSyncing.getDelFlag() != 0 ){
+                return R.fail("该一键同步不存在");
+            }
+            oneClinkSyncing.setUpdateTime(new Date());
+            oneClinkSyncing.setUpdateUserId(dto.getUserId());
+        }else {
+            oneClinkSyncing.setCreateUserId(dto.getUserId());
+            oneClinkSyncing.setCreateTime(new Date());
+        }
+        oneClinkSyncing.setSyncingName(dto.getSyncingName());
+        oneClinkSyncing.setCoverUrl(dto.getCoverUrl());
+        oneClinkSyncing.setDetailsPicture(dto.getDetailsPicture());
+        oneClinkSyncing.setPlatformBirthdayFlag(dto.getPlatformBirthdayFlag());
+        oneClinkSyncing.setPlatformCouponFlag(dto.getPlatformCouponFlag());
+        oneClinkSyncing.setShopNum(dto.getShopNum());
+        oneClinkSyncing.setShopIds(dto.getShopIds());
+        oneClinkSyncing.setShopDetail(dto.getShopDetail());
+
+        this.saveOrUpdate(oneClinkSyncing);
+        return R.ok();
+    }
+
+    @Override
+    public R<MgtOneClinkSyncingVO> getOneClinkSyncing(MGtOneClinkSyncingShopPageDTO dto) {
+        MgtOneClinkSyncingVO vo = new MgtOneClinkSyncingVO();
+        OneClinkSyncing oneClinkSyncing = this.getById(dto.getSyncingId());
+        if (null == oneClinkSyncing|| oneClinkSyncing.getDelFlag() != 0){
+            return R.fail("该一键同步不存在");
+        }
+
+        BeanUtils.copyProperties(oneClinkSyncing, vo);
+
+        if (oneClinkSyncing.getShopIds() == null || oneClinkSyncing.getShopIds().trim().isEmpty()) {
+            return R.ok(vo); // 返回空列表
+        }
+        List<Long> shopIds = Arrays.stream(oneClinkSyncing.getShopIds().split(","))
+                .map(String::trim)           // 去除空格
+                .filter(s -> !s.isEmpty())   // 过滤空字符串
+                .map(Long::parseLong)        // 转换为Long
+                .collect(Collectors.toList());
+        dto.setShopIds(shopIds);
+        //查找这几家店铺信息
+        Page<MgtOneClinkSyncingShopPageVo> mgtShopPageVoByShopIds = remoteShopService.getMgtShopPageVoByShopIds(dto);
+        vo.setPage(mgtShopPageVoByShopIds);
+        return R.ok(vo);
+    }
+
+    @Override
+    public R deleteOneClinkSyncing(Integer syncingId) {
+        //删除
+        OneClinkSyncing oneClinkSyncing = this.getById(syncingId);
+        if (null == oneClinkSyncing || oneClinkSyncing.getDelFlag()==0){
+            return R.ok();
+        }
+        oneClinkSyncing.setDelFlag(1);
+        oneClinkSyncing.setUpdateTime(new Date());
+        oneClinkSyncing.setUpdateUserId(SecurityUtils.getUserId());
+        this.updateById(oneClinkSyncing);
+        return R.ok();
+    }
+
+    @Override
+    public R executeOneClinkSyncing(Integer syncingId) {
+        //根据oneClinkSyncing,修改门店信息
+        OneClinkSyncing oneClinkSyncing = this.getById(syncingId);
+        if (null == oneClinkSyncing || oneClinkSyncing.getDelFlag()==0){
+            return R.fail("该一键同步不存在");
+        }
+        if (oneClinkSyncing.getShopIds() == null || oneClinkSyncing.getShopIds().trim().isEmpty()) {
+            return R.fail("请先选择门户");
+        }
+
+        R r = remoteShopService.updateShopByOneClinkSyncing(oneClinkSyncing);
+
+        oneClinkSyncing.setSyncingTime(new Date());
+        oneClinkSyncing.setSyncingUserId(SecurityUtils.getUserId());
+        this.updateById(oneClinkSyncing);
+        return R.ok();
+    }
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/OneClinkSyncingMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/OneClinkSyncingMapper.xml
new file mode 100644
index 0000000..c781269
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/OneClinkSyncingMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.config.OneClinkSyncingMapper">
+
+
+    <select id="pageOneClinkSyncing" resultType="com.ruoyi.system.domain.vo.MgtOneClinkSyncPageVO">
+        select
+            syncing_id,
+            syncing_name,
+            cover_url,
+            details_picture,
+            platform_coupon_flag,
+            platform_birthday_flag,
+            shop_num,
+            syncing_time
+        from
+            t_one_clink_syncing
+        where
+            del_flag=0
+    </select>
+</mapper>

--
Gitblit v1.7.1