From 890c290afef9faca8ddaf0fea6197c3daa472141 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期二, 03 六月 2025 19:18:56 +0800
Subject: [PATCH] 开发商户端预约列表相关接口

---
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/business/MerShopController.java |  167 +++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 142 insertions(+), 25 deletions(-)

diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/business/MerShopController.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/business/MerShopController.java
index 5bda83c..9b5aaf7 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/business/MerShopController.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/business/MerShopController.java
@@ -1,27 +1,37 @@
 package com.ruoyi.shop.controller.business;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.shop.domain.dto.*;
 import com.ruoyi.shop.domain.pojo.shop.ShopRelUser;
-import com.ruoyi.shop.domain.vo.MerAgencyPageVo;
-import com.ruoyi.shop.domain.vo.MerShopCertificateListVo;
-import com.ruoyi.shop.domain.vo.MerShopSuggestVo;
-import com.ruoyi.shop.domain.vo.MerchantBasicdataSettlementVo;
+import com.ruoyi.shop.domain.vo.*;
 import com.ruoyi.shop.service.shop.*;
-import com.ruoyi.system.api.domain.dto.*;
+import com.ruoyi.system.api.domain.dto.MerBaseDto;
+import com.ruoyi.system.api.domain.dto.MerBaseGetDto;
+import com.ruoyi.system.api.domain.dto.MerEditUserDto;
+import com.ruoyi.system.api.domain.dto.MerPageDto;
 import com.ruoyi.system.api.domain.poji.shop.Shop;
+import com.ruoyi.system.api.domain.poji.shop.ShopAppointableTime;
+import com.ruoyi.system.api.domain.poji.shop.ShopNonAppointableTime;
 import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo;
 import com.ruoyi.system.api.domain.vo.MerStaffInfoVo;
 import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.time.format.DateTimeFormatter;
+import java.util.Comparator;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author jqs34
@@ -41,23 +51,31 @@
 
     @Resource
     private ShopCertificateService shopCertificateService;
-
+    
     @Resource
     private ShopStaffService shopStaffService;
-
+    
     @Resource
     private ShopRelUserService shopRelUserService;
-
+    
     @Resource
     private ShopSuggestService shopSuggestService;
-
+    
+    @Resource
+    private ShopNonAppointableTimeService shopNonAppointableTimeService;
+    
+    @Resource
+    private ShopAppointableTimeService shopAppointableTimeService;
+    
+    
     /**
      * 未完成实际统计
+     *
      * @param merBaseDto
      * @return
      */
     @RequestMapping(value = "/getMerHomeTotal", method = RequestMethod.POST)
-    @ApiOperation(value = "获取商户端商业统计")
+    @ApiOperation(value = "获取商户端商业统计【2.0】")
     public R<MerHomeShopTotalVo> getMerHomeTotal(@RequestBody MerBaseDto merBaseDto) {
         Long userId = SecurityUtils.getUserId();
         merBaseDto.setUserId(userId);
@@ -100,14 +118,16 @@
         shopCertificateService.deleteShopCertificate(Long.valueOf(merBaseGetDto.getId()));
         return R.ok();
     }
-
+    
     @RequestMapping(value = "/getShopStaffInfo", method = RequestMethod.POST)
-    @ApiOperation(value = "获取员工信息")
-    public R<MerStaffInfoVo> getShopStaffInfo() {
+    @ApiOperation(value = "获取员工信息【2.0】")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "当前商户id", name = "shopId", required = true, dataType = "Long", paramType = "query")
+    })
+    public R<MerStaffInfoVo> getShopStaffInfo(@RequestParam("shopId") Long shopId) {
         Long userId = SecurityUtils.getUserId();
-        ShopRelUser shopRelUser = shopRelUserService.getByUserId(userId);
-        Shop shop = shopService.getByShopId(shopRelUser.getShopId());
-        MerStaffInfoVo merStaffInfoVo = shopStaffService.getShopStaffInfo(userId,shop);
+        Shop shop = shopService.getByShopId(shopId);
+        MerStaffInfoVo merStaffInfoVo = shopStaffService.getShopStaffInfo(userId, shop);
         return R.ok(merStaffInfoVo);
     }
 
@@ -151,22 +171,119 @@
         shopSuggestService.suggest(merShopSuggestDto);
         return R.ok();
     }
-
-
-
+    
+    
     @RequestMapping(value = "/listShopByShop", method = RequestMethod.POST)
     @ApiOperation(value = "获取商户下属代理商")
-    public R<List<MgtSimpleShopVo>> listShopByShop(@RequestBody MerBaseDto merBaseDto)
-    {
+    public R<List<MgtSimpleShopVo>> listShopByShop(@RequestBody MerBaseDto merBaseDto) {
         List<MgtSimpleShopVo> mgtShopListSimpleVos = shopService.listShopByShop(merBaseDto.getShopId());
         return R.ok(mgtShopListSimpleVos);
     }
-
-
-
+    
+    
     @RequestMapping(value = "/getShopMerchantBasicDataSettlement", method = RequestMethod.POST)
     @ApiOperation(value = "获取提现记录(汇付天下)")
-    public R<List<MerchantBasicdataSettlementVo>> getMerchantBasicDataSettlement(@Validated @RequestBody MerchantBasicdataSettlementDto mgtShopShareRatioSetDto){
+    public R<List<MerchantBasicdataSettlementVo>> getMerchantBasicDataSettlement(@Validated @RequestBody MerchantBasicdataSettlementDto mgtShopShareRatioSetDto) {
         return shopService.getMerchantBasicDataSettlement(mgtShopShareRatioSetDto);
     }
+    
+    @RequestMapping(value = "/getUserShopList", method = RequestMethod.POST)
+    @ApiOperation(value = "获取切换门店列表【2.0】")
+    public R<List<Shop>> getUserShopList() {
+        List<ShopRelUser> shopRelUsers = shopRelUserService.getByUserId(SecurityUtils.getUserId());
+        shopRelUsers.sort(Comparator.comparing(ShopRelUser::getIsDefault));
+        List<Shop> collect = shopRelUsers.stream().map(shopRelUser -> {
+            Shop shop = shopService.getById(shopRelUser.getShopId());
+            return shop;
+        }).collect(Collectors.toList());
+        return R.ok(collect);
+    }
+    
+    
+    @RequestMapping(value = "/getShopReservationConfig/{shopId}", method = RequestMethod.POST)
+    @ApiOperation(value = "获取门店预约管理配置【2.0】")
+    public R<ShopReservationConfigVo> getShopReservationConfig(@PathVariable("shopId") Long shopId) {
+        Shop shop = shopService.getById(shopId);
+        Integer subscribe = shop.getSubscribe();
+        ShopReservationConfigVo vo = new ShopReservationConfigVo();
+        vo.setSubscribe(subscribe);
+        List<ShopNonAppointableTime> list = shopNonAppointableTimeService.list(new LambdaQueryWrapper<ShopNonAppointableTime>().eq(ShopNonAppointableTime::getShopId, shopId)
+                .orderByAsc(ShopNonAppointableTime::getNonAppointableStartTime));
+        vo.setUnsubscribeTime(list.stream().map(shopNonAppointableTime -> {
+            Map<String, String> map = new HashMap<>();
+            String time = shopNonAppointableTime.getNonAppointableStartTime().format(DateTimeFormatter.ofPattern("MM月dd日 HH:mm")) + "-" + shopNonAppointableTime.getNonAppointableEndTime().format(DateTimeFormatter.ofPattern("HH:mm"));
+            map.put("time", time);
+            map.put("id", shopNonAppointableTime.getId());
+            return map;
+        }).collect(Collectors.toList()));
+        return R.ok(vo);
+    }
+    
+    @RequestMapping(value = "/addShopNonAppointableTime", method = RequestMethod.POST)
+    @ApiOperation(value = "门店添加不可预约时间段【2.0】")
+    public R addShopNonAppointableTime(@RequestBody ShopNonAppointableTimeDto dto) {
+        ShopNonAppointableTime shopNonAppointableTime = new ShopNonAppointableTime();
+        shopNonAppointableTime.setShopId(dto.getShopId());
+        shopNonAppointableTime.setNonAppointableStartTime(dto.getNonAppointableStartTime());
+        shopNonAppointableTime.setNonAppointableEndTime(dto.getNonAppointableEndTime());
+        shopNonAppointableTimeService.save(shopNonAppointableTime);
+        return R.ok();
+    }
+    
+    
+    @RequestMapping(value = "/switchAppointment/{shopId}/{subscribe}", method = RequestMethod.POST)
+    @ApiOperation(value = "开关门店预约配置【2.0】")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "门店id", name = "shopId", required = true, dataType = "Long", paramType = "path"),
+            @ApiImplicitParam(value = "预约开关(0=关,1=开)", name = "subscribe", required = true, dataType = "Integer", paramType = "path")
+    })
+    public R switchAppointment(@PathVariable("shopId") Long shopId, @PathVariable("subscribe") Integer subscribe) {
+        Shop shop = shopService.getById(shopId);
+        shop.setSubscribe(subscribe);
+        shopService.updateById(shop);
+        return R.ok();
+    }
+    
+    @RequestMapping(value = "/getShopAppointableTimeList", method = RequestMethod.POST)
+    @ApiOperation(value = "商户获取预约列表【2.0】")
+    public R<Page<ShopAppointableTimeListVo>> getShopAppointableTimeList(@RequestBody ShopAppointableTimeListDto dto) {
+        Page<ShopAppointableTimeListVo> page = new Page<>();
+        page.setSize(dto.getPageSize());
+        page.setCurrent(dto.getPageNum());
+        List<ShopAppointableTimeListVo> shopAppointableTimeList = shopAppointableTimeService.getShopAppointableTimeList(page, dto);
+        return R.ok(page.setRecords(shopAppointableTimeList));
+    }
+    
+    
+    @RequestMapping(value = "/confirmReservation/{id}", method = RequestMethod.POST)
+    @ApiOperation(value = "商户确认预约【2.0】")
+    public R confirmReservation(@PathVariable("id") String id) {
+        ShopAppointableTime shopAppointableTime = shopAppointableTimeService.getById(id);
+        if (null == shopAppointableTime) {
+            return R.fail("预约不存在");
+        }
+        if (1 != shopAppointableTime.getStatus()) {
+            return R.fail("确认预约失败");
+        }
+        shopAppointableTime.setStatus(2);
+        shopAppointableTimeService.updateById(shopAppointableTime);
+        return R.ok();
+    }
+    
+    
+    @RequestMapping(value = "/cancelReservation", method = RequestMethod.POST)
+    @ApiOperation(value = "商户取消预约【2.0】")
+    public R cancelReservation(@RequestBody CancelReservationDto dto) {
+        ShopAppointableTime shopAppointableTime = shopAppointableTimeService.getById(dto.getId());
+        if (null == shopAppointableTime) {
+            return R.fail("预约不存在");
+        }
+        if (0 == shopAppointableTime.getStatus()) {
+            return R.fail("不能重复操作");
+        }
+        shopAppointableTime.setStatus(0);
+        shopAppointableTime.setReason(dto.getReason());
+        shopAppointableTimeService.updateById(shopAppointableTime);
+        return R.ok();
+    }
 }

--
Gitblit v1.7.1