刘帅
2026-09-08 572df690f72ed4a077d934823f261dec39b3cc7d
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java
@@ -1,16 +1,12 @@
package com.dsh.guns.modular.system.controller.code;
import java.math.BigDecimal;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONObject;
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.dsh.course.feignClient.account.CityClient;
import com.dsh.course.feignClient.account.CityManagerClient;
import com.dsh.course.feignClient.account.StoreStaffClient;
import com.dsh.course.feignClient.account.model.CityListQuery;
import com.dsh.course.feignClient.account.model.CityManager;
import com.dsh.course.feignClient.account.model.TCityManager;
import com.dsh.course.feignClient.competition.CompetitionClient;
import com.dsh.course.feignClient.other.SiteClient;
import com.dsh.course.feignClient.other.SiteLockClient;
@@ -22,28 +18,47 @@
import com.dsh.course.mapper.UserMapper;
import com.dsh.guns.config.UserExt;
import com.dsh.guns.core.base.controller.BaseController;
import com.dsh.guns.core.base.tips.SuccessTip;
import com.dsh.guns.core.common.constant.factory.PageFactory;
import com.dsh.guns.core.util.ToolUtil;
import com.dsh.guns.modular.system.model.*;
import com.dsh.guns.modular.system.service.*;
import com.dsh.guns.modular.system.model.ExpireSiteSearchVO;
import com.dsh.guns.modular.system.model.Region;
import com.dsh.guns.modular.system.model.SiteSearchVO;
import com.dsh.guns.modular.system.model.Store;
import com.dsh.guns.modular.system.model.TCity;
import com.dsh.guns.modular.system.model.TOperator;
import com.dsh.guns.modular.system.model.TOperatorCity;
import com.dsh.guns.modular.system.model.TSite;
import com.dsh.guns.modular.system.model.TSitePrice;
import com.dsh.guns.modular.system.model.TSiteType;
import com.dsh.guns.modular.system.model.TStore;
import com.dsh.guns.modular.system.service.ICityService;
import com.dsh.guns.modular.system.service.IRegionService;
import com.dsh.guns.modular.system.service.IStoreService;
import com.dsh.guns.modular.system.service.ITSitePriceService;
import com.dsh.guns.modular.system.service.ITSiteService;
import com.dsh.guns.modular.system.service.ITSiteTypeService;
import com.dsh.guns.modular.system.service.StoreConfigService;
import com.dsh.guns.modular.system.service.TOperatorCityService;
import com.dsh.guns.modular.system.service.TOperatorService;
import com.dsh.guns.modular.system.util.HttpRequestUtil;
import com.dsh.guns.modular.system.util.ResultUtil;
import com.sun.org.apache.regexp.internal.RE;
import groovyjarjarpicocli.CommandLine;
import net.bytebuddy.asm.Advice;
import org.aspectj.weaver.ast.Var;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -90,6 +105,8 @@
    private IRegionService regionService;
    @Autowired
    private SiteLockClient siteLockClient;
    @Autowired
    private ITSitePriceService sitePriceService;
    /**
@@ -111,27 +128,19 @@
        Integer objectType = UserExt.getUser().getObjectType();
        Integer objectId = UserExt.getUser().getObjectId();
        model.addAttribute("userType",objectType);
        List<CityManager> province = cityManagerClient.listAll();
        // 已有城市管理的省
        ArrayList<String> list1 = new ArrayList<>();
        // 已有城市管理的市
        ArrayList<String> list2 = new ArrayList<>();
        for (CityManager cityManager : province) {
            list1.add(cityManager.getProvince());
            list2.add(cityManager.getCity());
        }
        HashSet<String> set = new HashSet<String>(list1);
        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
        QueryWrapper<TSiteType> wrapper = new QueryWrapper<>();
        wrapper.eq("state",1);
        List<TSiteType> siteType = siteTypeService.list(wrapper);
        model.addAttribute("list",set);
        List<TCity> list3 = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
        model.addAttribute("list",list3);
        model.addAttribute("siteType",siteType);
        String roleid = UserExt.getUser().getRoleid();
        model.addAttribute("role",roleid);
        model.addAttribute("objectType",objectType);
        model.addAttribute("objectId",objectId);
        model.addAttribute("type",1);
        List<TOperator> list5 = tOperatorService.list();
        model.addAttribute("list5",list5);
        return PREFIX + "TSite.html";
    }
    /**
@@ -185,13 +194,15 @@
    @RequestMapping("/addSiteLock")
    @ResponseBody
    public Object addSiteLock(@RequestBody TSiteLockDTO dto){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        try {
            dto.setStartTime(simpleDateFormat.parse(dto.getSsTime()));
            dto.setEndTime(simpleDateFormat.parse(dto.getEeTime()));
        } catch (ParseException e) {
            e.printStackTrace();
        }
//        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
//        try {
//            dto.setStartTime(simpleDateFormat.parse(dto.getSsTime()));
//            dto.setEndTime(simpleDateFormat.parse(dto.getEeTime()));
//        } catch (ParseException e) {
//            e.printStackTrace();
//        }
        System.out.println(dto);
        Object o = siteLockClient.addSiteLock(dto);
        return ResultUtil.success(o);
    }
@@ -253,13 +264,52 @@
            strings.add(cityManager.getCity());
        }
        HashSet<String> set1 = new HashSet<String>(strings);
        List<Store> stores = new ArrayList<>();
        if (objectType ==2 ){
            stores= storeClient.getStoreByCityManagerId(objectId);
        }else if(objectType == 3){
            stores= storeClient.getStoreByStoreStaffId(objectId);;
        List<TStore> stores = new ArrayList<>();
//        // 先判断
//        if (objectType ==2 ){
//            stores= storeClient.getStoreByCityManagerId(objectId);
//        }else if(objectType == 3){
//            stores= storeClient.getStoreByStoreStaffId(objectId);;
//        }else{
//            stores = storeClient.getStore(site.getCity());
//        }
        // 根据门店id 确定是平台还是运营商的
        TStore byId = storeService.getById(site.getStoreId());
        if (byId.getType()==1){
            // 查询平台的门店
            if (objectType ==2 ){
                stores = storeService.list(new QueryWrapper<TStore>()
                        .eq("state", 1)
                        .eq("type", 1)
                .eq("operatorId",objectId));
            }else if (objectType ==2 ){
                stores = storeService.list(new QueryWrapper<TStore>()
                        .eq("state", 1)
                        .eq("id",objectId));
            }else{
                stores = storeService.list(new QueryWrapper<TStore>()
                        .eq("state", 1)
                        .eq("type", 1)
                );
            }
        }else{
            stores = storeClient.getStore(site.getCity());
            // 查询平台的门店
            if(objectType == 2){
                stores = storeService.list(new QueryWrapper<TStore>()
                        .eq("state", 1)
                        .eq("type", 2)
                .eq("operatorId",objectId));
            }else if (objectType == 3){
                stores = storeService.list(new QueryWrapper<TStore>()
                        .eq("state", 1)
                        .eq("id",objectId));
            }else{
                stores = storeService.list(new QueryWrapper<TStore>()
                        .eq("state", 1)
                        .eq("type", 2)
                        );
            }
        }
        List<CityManager> accounts = cityManagerClient.getAccount(site.getCity());
        model.addAttribute("list",site);
@@ -272,29 +322,44 @@
        model.addAttribute("type",1);
        model.addAttribute("objectType",objectType);
        model.addAttribute("objectId",objectId);
        model.addAttribute("stores",stores);
        // 显式传递运营商ID和是否可预约字段,确保回显正确
        model.addAttribute("operatorId", site.getOperatorId());
        model.addAttribute("reservation", site.getReservation());
        String nextName = site.getNextName();
        ArrayList<String> strings1 = new ArrayList<>();
        for (String s : nextName.split(",")) {
            strings1.add(s);
        }
        model.addAttribute("nextNames",strings1);
        if (!strings1.get(0).equals("")){
            System.out.println("=========执行nextNames====");
        model.addAttribute("nextNames",strings1);}
        ArrayList<String> strings3 = new ArrayList<>();
        strings3.add("普通场地");
        strings3.add("智慧场地");
        model.addAttribute("typeNames",strings3);
        String halfNames = site.getHalfName();
        ArrayList<String> strings2 = new ArrayList<>();
        String[] split = halfNames.split(",");
        String halfName=null;
        for (int i = 0; i < split.length; i++) {
            if(i==0){
               halfName = split[0];
            }else {
                strings2.add(split[i]);
            }
        if (StringUtils.isNotBlank(halfNames) && site.getIshalf().equals(1)) {
            List<String> strings2 = Arrays.asList(halfNames.split(","));
            model.addAttribute("halfNames",strings2);
            model.addAttribute("halfName",strings2.get(0));
        }else {
            model.addAttribute("halfNames", Collections.emptyList());
            model.addAttribute("halfName", "");
        }
        model.addAttribute("halfNames",strings2);
        model.addAttribute("halfName",halfName);
        // 显式传递运营商ID和是否可预约字段,确保回显正确
        model.addAttribute("operatorId", site.getOperatorId());
        model.addAttribute("reservation", site.getReservation());
        // 添加价格配置相关字段
        TSite fullSite = siteService.getById(id);
        model.addAttribute("targetAudience", fullSite.getTargetAudience());
        model.addAttribute("walkinCapacity", fullSite.getWalkinCapacity());
        return PREFIX + "TSite_edit.html";
    }
@@ -304,7 +369,7 @@
     */
    @RequestMapping("/lockSite/{id}")
    public String lockSite(Model model,@PathVariable("id") Integer id) {
        DateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
        DateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        List<TSiteLockDTO> listById = siteLockClient.getListById(id);
        for (TSiteLockDTO tSiteLockDTO : listById) {
            tSiteLockDTO.setSsTime(dateformat.format(tSiteLockDTO.getStartTime()));
@@ -355,6 +420,37 @@
        }else{
            stores = storeClient.getStore(site.getCity());
        }
        ArrayList<String> strings3 = new ArrayList<>();
        strings3.add("普通场地");
        strings3.add("智慧场地");
        model.addAttribute("typeNames",strings3);
        String nextName = site.getNextName();
        ArrayList<String> strings1 = new ArrayList<>();
        for (String s : nextName.split(",")) {
            strings1.add(s);
        }
        System.out.println("========="+strings1);
        System.out.println("====000====="+strings1.get(0));
        if (CollectionUtil.isNotEmpty(strings1)) {
            System.out.println("====执行===");
            model.addAttribute("nextNames", strings1);
        }
        String halfNames = site.getHalfName();
        if (StringUtils.isNotBlank(halfNames) && site.getIshalf().equals(1)) {
            List<String> strings2 = Arrays.asList(halfNames.split(","));
            model.addAttribute("halfNames",strings2);
            model.addAttribute("halfName",strings2.get(0));
        }else {
            model.addAttribute("halfNames", Collections.emptyList());
            model.addAttribute("halfName", "");
        }
        List<CityManager> accounts = cityManagerClient.getAccount(site.getCity());
        model.addAttribute("list",site);
        Date insuranceEndTime = site.getInsuranceEndTime();
@@ -367,6 +463,11 @@
        model.addAttribute("objectType",objectType);
        model.addAttribute("objectId",objectId);
        model.addAttribute("stores",stores);
        // 显式传递运营商ID和是否可预约字段,确保回显正确
        model.addAttribute("operatorId", site.getOperatorId());
        model.addAttribute("reservation", site.getReservation());
        model.addAttribute("targetAudience", site.getTargetAudience());
        model.addAttribute("walkinCapacity", site.getWalkinCapacity());
        return PREFIX + "TSite_edit.html";
    }
    /**
@@ -376,6 +477,32 @@
    @GetMapping("/getTime/{oneId}")
    public Store getTime(@PathVariable("oneId") String oneId) {
        return storeClient.getTime(oneId);
    }
    /**
     * 根据场地ID获取价格配置
     */
    @ResponseBody
    @GetMapping("/getSitePrices/{siteId}")
    public ResultUtil getSitePrices(@PathVariable("siteId") Integer siteId) {
        List<TSitePrice> prices = sitePriceService.list(
            new QueryWrapper<TSitePrice>().eq("siteId", siteId)
        );
        return ResultUtil.success(prices);
    }
    /**
     * 管理后台 - 获取场地预约时间段数据(供预约新增页面使用)
     */
    @ResponseBody
    @RequestMapping("/querySiteTimes")
    public ResultUtil querySiteTimes(Integer id, String day, String halfName, String siteName, Integer targetAudience) {
        try {
            return ResultUtil.success(siteService.querySiteTimes(id, day, halfName, siteName, targetAudience));
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.error("获取时间段失败");
        }
    }
    /**
@@ -407,8 +534,72 @@
        site.setCityManagerId(cityManagerId);
        site.setInsertTime(new Date());
        site.setState(1);
        siteClient.addSite(site);
        site.setOperatorId(store.getOperatorId());
//        site.setOperatorId(UserExt.getUser().getObjectId());
        // 添加场地
        HashMap<String, String> map = new HashMap<>();
        map.put("sign","0DB011836143EEE2C2E072967C9F4E4B");
        map.put("name",site.getName());
        map.put("space_id",store.getId().toString());
        String s = HttpRequestUtil.postRequest
                ("https://port.daowepark.com/v7/user_api/general/addSpaceArea", map);
//                ("https://try.daowepark.com/v7/user_api/general/addSpaceArea", map);
        JSONObject jsonObject = JSONObject.parseObject(s);
        JSONObject data = jsonObject.getJSONObject("data");
        String area_id = data.getString("area_id");
        Integer integer = Integer.valueOf(area_id);
        site.setId(integer);
        if (site.getIshalf()==2){
            site.setHalfName("");
        }
        Integer integer1 = siteClient.addSite1(site);
//        Integer integer = Integer.valueOf(spaceId);
        // 保存价格数据
        if (site.getPriceDTOS() != null && !site.getPriceDTOS().isEmpty()) {
            saveSitePriceDetails(site.getId(), site.getPriceDTOS());
            List<Site.PriceDTO> priceDTOS = site.getPriceDTOS();
            site.setAppointmentStartTime(priceDTOS.get(0).getStartTime());
            site.setAppointmentEndTime(priceDTOS.get(priceDTOS.size()-1).getEndTime());
            siteClient.addSite(site);
        }
        return ResultUtil.success("添加成功");
    }
    /**
     * 保存场地价格详情到 t_site_price 表
     * @param siteId 场地ID
     * @param priceDTOS 价格详情列表
     */
    private void saveSitePriceDetails(Integer siteId, List<Site.PriceDTO> priceDTOS) {
        Date now = new Date();
        // 批量保存价格数据
        List<TSitePrice> sitePrices = new ArrayList<>();
        for (Site.PriceDTO detail : priceDTOS) {
            TSitePrice sitePrice = new TSitePrice();
            sitePrice.setSiteId(siteId);
            sitePrice.setStartTime(detail.getStartTime());
            sitePrice.setEndTime(detail.getEndTime());
            sitePrice.setDayOfWeek(detail.getDayOfWeek());
            sitePrice.setTargetAudience(detail.getTargetAudience());
            sitePrice.setFieldType(detail.getFieldType());
            sitePrice.setCashPrice(detail.getCashPrice() != null ? BigDecimal.valueOf(detail.getCashPrice()) : BigDecimal.ZERO);
            sitePrice.setCoinPrice(detail.getCoinPrice() != null ? detail.getCoinPrice() : 0);
            sitePrice.setInsertTime(now);
            sitePrice.setUpdateTime(now);
            sitePrices.add(sitePrice);
        }
        // 批量插入
        if (!sitePrices.isEmpty()) {
            sitePriceService.saveBatch(sitePrices);
        }
    }
    /**
     *  编辑场地管理
@@ -416,26 +607,39 @@
    @ResponseBody
    @RequestMapping(value = "/updateSite")
    public ResultUtil updateSite(@RequestBody Site site) {
        if(site.getInsuranceImg().equals("")){
        System.out.println(JSONObject.toJSONString(site));
        // 防止空指针异常:如果 insuranceImg 为 null 或空字符串,设置为 null
        if(site.getInsuranceImg() == null || site.getInsuranceImg().equals("")){
            site.setInsuranceImg(null);
        }
        Store store = storeClient.getStoreById(site.getStoreId());
        String province = store.getProvince();
        String provinceCode = store.getProvinceCode();
        String city = store.getCity();
        String cityCode = store.getCityCode();
        Integer cityManagerId = store.getCityManagerId();
        site.setOperatorId(store.getOperatorId());
        site.setProvince(province);
        site.setProvinceCode(provinceCode);
        site.setCity(city);
        site.setCityCode(cityCode);
        site.setCityManagerId(cityManagerId);
        site.setCityManagerId(store.getOperatorId());
        site.setInsertTime(new Date());
        site.setState(1);
        if (site.getIshalf()==2){
            site.setHalfName("");
        }
        siteClient.addSite(site);
        // 保存价格数据
        if (site.getPriceDTOS() != null && !site.getPriceDTOS().isEmpty()) {
            // 先删除原有价格数据
            sitePriceService.remove(new QueryWrapper<TSitePrice>().eq("siteId", site.getId()));
            saveSitePriceDetails(site.getId(), site.getPriceDTOS());
            List<Site.PriceDTO> priceDTOS = site.getPriceDTOS();
            site.setAppointmentStartTime(priceDTOS.get(0).getStartTime());
            site.setAppointmentEndTime(priceDTOS.get(priceDTOS.size()-1).getEndTime());
            siteClient.addSite(site);
        }
        return ResultUtil.success();
    }
    /**
@@ -472,7 +676,7 @@
     */
    @RequestMapping(value= "/listExipre")
    @ResponseBody
    public List<TSiteDTO> listExipre(String province,String city,String storeName,Integer siteTypeId,String name) {
    public List<TSiteDTO> listExipre(String province,String city,String storeName,Integer siteTypeId,String name,Integer opId) {
        // 对象类型
        Integer type = UserExt.getUser().getObjectType();
        // 对象类型Id
@@ -485,50 +689,72 @@
        vo.setName(name);
        vo.setObjectType(type);
        vo.setObjectId(objectId);
        return siteClient.listExipre(vo);
        vo.setOpId(opId);
        List<TSiteDTO> tSiteDTOS = siteClient.listExipre(vo);
        for (TSiteDTO tSiteDTO : tSiteDTOS) {
            Integer storeId = tSiteDTO.getStoreId();
            TStore byId = storeService.getById(storeId);
            if (byId!=null){
                if (byId.getOperatorId()==null || byId.getOperatorId()==0){
                    tSiteDTO.setOperator("平台");
                }
            }
        }
        return tSiteDTOS;
    }
    @Autowired
    private TOperatorService tOperatorService;
    @Autowired
    private TOperatorCityService operatorCityService;
    /**
     * 跳转到添加场地管理
     */
    @RequestMapping("/add")
    public String tCompetitionAdd(Model model) {
        List<CityManager> province = cityManagerClient.listAll();
        // 已有城市管理的省
        ArrayList<String> list1 = new ArrayList<>();
        // 已有城市管理的市
        ArrayList<String> list2 = new ArrayList<>();
        for (CityManager cityManager : province) {
            list1.add(cityManager.getProvince());
            list2.add(cityManager.getCity());
        if (UserExt.getUser().getObjectType()==2){
            // 查询这个运营商管理的省
            TOperator id = tOperatorService.getOne(new QueryWrapper<TOperator>().eq("id", UserExt.getUser().getObjectId()));
            if (id.getType()==1){
                // 全国
                List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
                model.addAttribute("list",list);
            }else{
                // 找到他管理的省
                List<TOperatorCity> list = operatorCityService.list(new QueryWrapper<TOperatorCity>().eq("operatorId", UserExt.getUser().getObjectId()).eq("pid", 0));
                model.addAttribute("list",list);
            }
        }else{
            List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
            model.addAttribute("list",list);
        }
        Integer objectType = UserExt.getUser().getObjectType();
        Integer objectId = UserExt.getUser().getObjectId();
        List<Store> stores = new ArrayList<>();
        if (objectType ==2 ){
             stores= storeClient.getStoreByCityManagerId(objectId);
            List<TStore> operatorId = storeService.list(new QueryWrapper<TStore>().eq("operatorId", objectId));
            model.addAttribute("stores",operatorId);
        }else if(objectType == 3){
             stores= storeClient.getStoreByStoreStaffId(objectId);;
            List<TStore> list = storeService.list(new LambdaQueryWrapper<TStore>().eq(TStore::getId, objectId));
            model.addAttribute("stores",list);
        }else {
            model.addAttribute("stores",storeService.list(new QueryWrapper<TStore>().eq("operatorId", 0)));
        }
        List<TOperator> list = tOperatorService.list();
        model.addAttribute("yysList",list);
        model.addAttribute("userType",objectType);
        HashSet<String> set = new HashSet<String>(list1);
        QueryWrapper<TSiteType> wrapper = new QueryWrapper<>();
        wrapper.eq("state",1);
        List<TSiteType> siteType = siteTypeService.list(wrapper);
        model.addAttribute("siteType",siteType);
        model.addAttribute("province",set);
        model.addAttribute("city",list2);
        model.addAttribute("province",list);
        String roleid = UserExt.getUser().getRoleid();
        model.addAttribute("role",roleid);
        model.addAttribute("objectType",objectType);
        model.addAttribute("objectId",objectId);
        model.addAttribute("stores",stores);
        return PREFIX + "tSite_add.html";
        return PREFIX + "TSite_add.html";
    }
//    /**
@@ -586,7 +812,9 @@
    @ResponseBody
    public Object getChangeOne(Integer oneId) {
        try {
            return storeService.list(new LambdaQueryWrapper<TStore>().eq(TStore::getOperatorId,oneId).eq(TStore::getState,1));
            return storeService.list(new QueryWrapper<TStore>()
                    .eq("operatorId",oneId)
                    .eq("state",1));
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;