南昌市物联网技防平台-后台
tangzy
2021-04-06 5b6e4a9e17e2425b43e3a6957115366e84ba8ce5
1.监控台接口
2.客户管理
14 files modified
2 files added
547 ■■■■■ changed files
blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Tenant.java 6 ●●●●● patch | view | raw | blame | history
blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/TenantVO.java 43 ●●●●● patch | view | raw | blame | history
blade-service/blade-jfpts/pom.xml 16 ●●●●● patch | view | raw | blame | history
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/alarm/mapper/AlarmMapper.xml 1 ●●●● patch | view | raw | blame | history
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/controller/EquipmentController.java 30 ●●●● patch | view | raw | blame | history
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/mapper/EquipmentMapper.java 4 ●●●● patch | view | raw | blame | history
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/mapper/EquipmentMapper.xml 19 ●●●●● patch | view | raw | blame | history
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/service/IEquipmentService.java 5 ●●●●● patch | view | raw | blame | history
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/service/impl/EquipmentServiceImpl.java 20 ●●●●● patch | view | raw | blame | history
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/rvideo/controller/RecordVideoThread.java 96 ●●●●● patch | view | raw | blame | history
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/rvideo/controller/RvideoController.java 46 ●●●● patch | view | raw | blame | history
blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantController.java 94 ●●●●● patch | view | raw | blame | history
blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.java 14 ●●●●● patch | view | raw | blame | history
blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.xml 74 ●●●●● patch | view | raw | blame | history
blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java 14 ●●●●● patch | view | raw | blame | history
blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java 65 ●●●●● patch | view | raw | blame | history
blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Tenant.java
@@ -101,6 +101,12 @@
     */
    @ApiModelProperty(value = "授权码")
    private String licenseKey;
    private String type;
    private String province;
    private String city;
    private String district;
    private String jd;
    private String wd;
}
blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/TenantVO.java
New file
@@ -0,0 +1,43 @@
/*
 *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: Chill 庄骞 (smallchill@163.com)
 */
package org.springblade.system.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.tool.node.INode;
import org.springblade.system.entity.Role;
import org.springblade.system.entity.Tenant;
import java.util.ArrayList;
import java.util.List;
/**
 * 视图实体类
 *
 * @author Chill
 */
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "RoleVO对象", description = "RoleVO对象")
public class TenantVO extends Tenant {
    private String dj;
    private String nature;
}
blade-service/blade-jfpts/pom.xml
@@ -62,6 +62,22 @@
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv</artifactId>
            <version>1.4.3</version>
        </dependency>
        <dependency>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>ffmpeg-platform</artifactId>
            <version>4.0.2-1.4.3</version>
        </dependency>
        <!--这个依赖区分Linux系统和windows系统-->
        <dependency>
            <groupId>com.github.hoary.ffmpeg</groupId>
            <artifactId>FFmpeg-windows-x86_64</artifactId>
            <version>2.0.1.1</version>
        </dependency>
    </dependencies>
</project>
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/alarm/mapper/AlarmMapper.xml
@@ -253,6 +253,7 @@
    <select id="selectListSe" resultMap="alarmResultMap">
        SELECT
        a.id,
        a.alarmType,
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/controller/EquipmentController.java
@@ -43,10 +43,7 @@
import javax.validation.Valid;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
 * 控制器
@@ -401,4 +398,29 @@
        return R.success("修改成功");
    }
    /**
     * 监控台统计
     * @return
     */
    @PostMapping("/SeleC")
    public R SeleC() {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
        String time = df.format(new Date());// new Date()为获取当前系统时间
        //设备在线数量
        Integer integerz = equipmentService.selectEqCz();
        //设备掉线数量
        Integer integerd = equipmentService.selectEqCd();
        //设备预警数量
        List<Map<String, Object>> list = equipmentService.selectEqCy(time);
        //设备故障数量
        Integer integerg = equipmentService.selectEqCg();
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("zx",integerz);
        map.put("dx",integerd);
        map.put("yj",list.size());
        map.put("gz",integerg);
        return R.data(map);
    }
}
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/mapper/EquipmentMapper.java
@@ -70,4 +70,8 @@
    void updateChannel(String heartbeat, String deviceNumber);
    void updateexpireTime(String expireTime, String deviceNumber);
    void updateExstate(String state,String reason, String deviceNumber);
    Integer selectEqCz();
    Integer selectEqCd();
    List<Map<String, Object>> selectEqCy(String time);
    Integer selectEqCg();
}
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/mapper/EquipmentMapper.xml
@@ -326,4 +326,23 @@
        update sys_equipment SET state=#{state},reason=#{reason}  where deviceNumber=#{deviceNumber}
    </update>
    <!--查询设备在线数量-->
    <select id="selectEqCz" resultType="Integer">
        select COUNT(*) from sys_equipment where heartbeat >= DATE_SUB(NOW(),INTERVAL 1 DAY)
    </select>
    <!--查询设备掉线数量-->
    <select id="selectEqCd" resultType="Integer">
        select COUNT(*) from sys_equipment where heartbeat &lt; DATE_SUB(NOW(),INTERVAL 1 DAY)
    </select>
    <!--查询预警设备数量-->
    <select id="selectEqCy" resultType="java.util.HashMap">
        SELECT COUNT(deviceNumber) as cou,deviceNumber FROM `sys_alarm` WHERE alarmTime like concat(concat('%', #{time}), '%') and waringType NOT IN("系统测试","主机重新上电") group by deviceNumber
    </select>
    <!--查询设故障数量-->
    <select id="selectEqCg" resultType="Integer">
        select COUNT(*) from sys_equipment where heartbeat >= DATE_SUB(NOW(),INTERVAL 1 DAY) and state!=null
    </select>
</mapper>
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/service/IEquipmentService.java
@@ -86,4 +86,9 @@
    Integer selectEquipmentCount(Integer status);
    void updateexpireTime(String expireTime, String deviceNumber);
    void updateExstate(String state,String reason, String deviceNumber);
    Integer selectEqCz();
    Integer selectEqCd();
    List<Map<String, Object>> selectEqCy(String time);
    Integer selectEqCg();
}
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/equipment/service/impl/EquipmentServiceImpl.java
@@ -180,4 +180,24 @@
    public void updateExstate(String state, String reason, String deviceNumber) {
        baseMapper.updateExstate(state, reason, deviceNumber);
    }
    @Override
    public Integer selectEqCz() {
        return baseMapper.selectEqCz();
    }
    @Override
    public Integer selectEqCd() {
        return baseMapper.selectEqCd();
    }
    @Override
    public List<Map<String, Object>> selectEqCy(String time) {
        return baseMapper.selectEqCy(time);
    }
    @Override
    public Integer selectEqCg() {
        return baseMapper.selectEqCg();
    }
}
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/rvideo/controller/RecordVideoThread.java
New file
@@ -0,0 +1,96 @@
package org.springblade.jfpt.rvideo.controller;
import org.bytedeco.javacpp.avcodec;
import org.bytedeco.javacv.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
public class RecordVideoThread implements Runnable {
    public String streamURL;// 流地址(测试可以用obs推流)
    public String filePath;// 文件路径
    public Long timesSec = 100L;// 停止录制时长 0为不限制时长
    public String fileFormat = "mp4";//录制的文件格式
    public boolean isAudio = false;//是否录制声音
    public void setStreamURL(String streamURL) {
        this.streamURL = streamURL;
    }
    public void setFilePath(String filePath) {
        this.filePath = filePath;
    }
    @Override
    public void run() {
        System.out.println(streamURL);
        // 获取视频源
        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(streamURL);
        FFmpegFrameRecorder recorder = null;
        try {
            grabber.start();
            Frame frame = grabber.grabFrame();
            createFile();
            //"rtmp://192.168.1.225:1935/live/home"
            // 流媒体输出地址,分辨率(长,高),是否录制音频(0:不录制/1:录制)
            recorder = new FFmpegFrameRecorder(filePath, 1280, 720, isAudio ? 1 : 0);
            recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);// 直播流格式
            recorder.setFormat(fileFormat);// 录制的视频格式
            recorder.setFrameRate(25);// 帧数
            //百度翻译的比特率,默认400000,但是我400000贼模糊,调成800000比较合适
            recorder.setVideoBitrate(800000);
            recorder.start();
            System.out.println("推流开始");
//            new Thread(new Runnable() {
//                @Override
//                public void run() {
//                    RecordVideoThread thread = new RecordVideoThread();
//                    thread.pushVideoAsRTSP(1, null);
//                }
//            }).start();
            // 计算结束时间
            //long endTime = System.currentTimeMillis() + timesSec * 1000;
            // 如果没有到录制结束时间并且获取到了下一帧则继续录制
            while (frame != null) {
                System.out.println("开始");
                recorder.record(frame);//录制
                frame = grabber.grabFrame();//获取下一帧
                System.out.println("结束");
            }
            recorder.record(frame);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //停止录制
            if (null != grabber) {
                try {
                    grabber.stop();
                } catch (FrameGrabber.Exception e) {
                    e.printStackTrace();
                }
            }
            if (recorder != null) {
                try {
                    recorder.stop();
                } catch (FrameRecorder.Exception e) {
                    e.printStackTrace();
                }
            }
            System.out.println("录制完成,录制时长:" + timesSec + "秒");
        }
    }
    private void createFile() {
        File outFile = new File(filePath);
        if (filePath.isEmpty() || !outFile.exists() || outFile.isFile()) {
            try {
                outFile.createNewFile();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/rvideo/controller/RvideoController.java
@@ -41,14 +41,12 @@
import org.springblade.jfpt.rvideo.vo.RvideoVO;
import org.springblade.jfpt.rvideo.service.IRvideoService;
import org.springblade.core.boot.ctrl.BladeController;
import java.io.File;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
import org.bytedeco.javacpp.avcodec;
import org.bytedeco.javacv.*;
import java.io.IOException;
/**
 * 控制器
@@ -66,8 +64,9 @@
    private final IAlarmService alarmService;
    private final IXlfeedbackService xlfeedbackService;
    private static String PRE_URL = "D:\\software\\minio\\data\\jfpt\\void\\";
    private static String PRF_MINIO_URL = "minio/jfpt/void/";
    private static  Thread thread;
    private static  String UUIDs;
    /**
     * 详情
@@ -197,4 +196,35 @@
        }
        return vaddress;
    }
        /**
     * Javacv录制视频
     */
    @PostMapping("/rVoids")
    public void rVoids() {
        String UUID = DateUtil.time();
        UUIDs=UUID;
        RecordVideoThread recordVideoThread = new RecordVideoThread();
        recordVideoThread.filePath = "D:\\software\\minio\\data\\jfpt\\void\\"+UUID + ".mp4";
        recordVideoThread.timesSec = 0L;
        recordVideoThread.streamURL = "https://web.byisf.com:18000/live?port=1935&app=live&stream=0012415A75C6-1";// 最好设置结束时长 如直接停止程序会造成输出文件的损坏无法正常播放
        recordVideoThread.isAudio = true;
        thread = new Thread(recordVideoThread);
        thread.start();
    }
    @PostMapping("/stop")
    public void stop(String jid) throws FrameGrabber.Exception {
        //返回前端路径
        String vaddress = null;
        thread.stop();
        //返回路径
        vaddress = "https://web.byisf.com/" + PRF_MINIO_URL + UUIDs + ".mp4";
        //把路径通过警情id添加到警情信息
        alarmService.updateVaddress(vaddress,jid);
    }
}
blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantController.java
@@ -36,6 +36,7 @@
import org.springblade.core.tool.utils.Func;
import org.springblade.system.entity.Tenant;
import org.springblade.system.service.ITenantService;
import org.springblade.system.vo.RoleVO;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
@@ -198,6 +199,99 @@
        return R.data(kv);
    }
    /**
     * 医院信息添加
     */
    @PostMapping("/instery")
    public R instery(String dj, String had, String ht, String ctime,String content,String hn) {
        tenantService.inserts(dj,had,ht,ctime,content,hn);
        return R.success("新增成功");
    }
    /**
     * 医院信息修改
     */
    @PostMapping("/updateInfoy")
    public R updateInfoy(String dj, String had, String ht, String ctime,String content,String hn) {
        tenantService.updateInfoy(dj,had,ht,ctime,content,hn);
        return R.success("修改成功");
    }
    /**
     * 医院信息详情
     */
    @PostMapping("/selectTy")
    public R<List> selectTy(String hn) {
        List<Map<String, Object>> maps = tenantService.selectTy(hn);
        return R.data(maps);
    }
    /**
     * 学校信息添加
     */
    @PostMapping("/insertss")
    public R insertss(String nature, String had, String motto, String ctime,String content,String hn) {
        tenantService.insertss(nature,had,motto,ctime,content,hn);
        return R.success("新增成功");
    }
    /**
     * 学校信息修改
     */
    @PostMapping("/updateInfos")
    public R updateInfos(String nature, String had, String motto, String ctime,String content,String hn) {
        tenantService.updateInfos(nature,had,motto,ctime,content,hn);
        return R.success("修改成功");
    }
    /**
     * 学校信息详情
     */
    @PostMapping("/selectTs")
    public R<List> selectTs(String hn) {
        List<Map<String, Object>> maps = tenantService.selectTs(hn);
        return R.data(maps);
    }
    /**
     * 小区信息添加
     */
    @PostMapping("/insertsr")
    public R insertsr(String category,String attributes,String developers,String had,String housetype,String content,String hn) {
        tenantService.insertsr(category, attributes, developers, had, housetype, content, hn);
        return R.success("新增成功");
    }
    /**
     * 小区信息修改
     */
    @PostMapping("/updateInfor")
    public R updateInfor(String category,String attributes,String developers,String had,String housetype,String content,String hn) {
        tenantService.updateInfor(category, attributes, developers, had, housetype, content, hn);
        return R.success("修改成功");
    }
    /**
     * 小区信息详情
     */
    @PostMapping("/selectTr")
    public R<List> selectTr(String hn) {
        List<Map<String, Object>> maps = tenantService.selectTr(hn);
        return R.data(maps);
    }
    @PostMapping("/deletey")
    public R deletey(String hn) {
        tenantService.deletey(hn);
        return R.success("删除成功");
    }
    @PostMapping("/deletes")
    public R deletes(String hn) {
        tenantService.deletes(hn);
        return R.success("删除成功");
    }
    @PostMapping("/deleter")
    public R deleter(String hn) {
        tenantService.deleter(hn);
        return R.success("删除成功");
    }
}
blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.java
@@ -21,6 +21,7 @@
import org.springblade.system.entity.Tenant;
import java.util.List;
import java.util.Map;
/**
 *  Mapper 接口
@@ -37,5 +38,16 @@
     * @return
     */
    List<Tenant> selectTenantPage(IPage page, Tenant tenant);
    int inserts(String dj, String had, String ht, String ctime,String content,String hn);
    void updateInfoy(String dj, String had, String ht, String ctime,String content,String hn);
    List<Map<String, Object>> selectTy(String hn);
    List<Map<String, Object>> selectTs(String hn);
    int insertss(String nature, String had, String motto, String ctime,String content,String hn);
    void updateInfos(String nature, String had, String motto, String ctime,String content,String hn);
    int insertsr(String category,String attributes,String developers,String had,String housetype,String content,String hn);
    void updateInfor(String category,String attributes,String developers,String had,String housetype,String content,String hn);
    List<Map<String, Object>> selectTr(String hn);
    void deletey(String hn);
    void deletes(String hn);
    void deleter(String hn);
}
blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.xml
@@ -21,11 +21,83 @@
        <result column="account_number" property="accountNumber"/>
        <result column="expire_time" property="expireTime"/>
        <result column="license_key" property="licenseKey"/>
        <result column="type" property="type"/>
        <result column="province" property="province"/>
        <result column="city" property="city"/>
        <result column="district" property="district"/>
        <result column="jd" property="jd"/>
        <result column="wd" property="wd"/>
    </resultMap>
    <select id="selectTenantPage" resultMap="tenantResultMap">
        select * from blade_tenant where is_deleted = 0
        select * from blade_tenant where is_deleted = 0 and tenant_id!=000000
        <if test="tenant.tenantName!=null and tenant.tenantName!=''">
            and tenant_name=#{tenant.tenantName}
        </if>
        <if test="tenant.linkman!=null and tenant.linkman!=''">
            and tenant.linkman=#{tenant.linkman}
        </if>
        <if test="tenant.province!=null and tenant.province!=''">
            and tenant.province=#{tenant.province}
        </if>
        <if test="tenant.city!=null and tenant.city!=''">
            and tenant.city=#{tenant.city}
        </if>
        <if test="tenant.district!=null and tenant.district!=''">
            and tenant.district=#{tenant.district}
        </if>
    </select>
    <!--医院信息新增-->
    <insert id="inserts">
        insert into jfpt.sys_hospital(dj,had,ht,ctime,content,hn) values(#{dj},#{had},#{ht},#{ctime},#{content},#{hn})
    </insert>
    <!--医院信息修改-->
    <update id="updateInfoy" >
        UPDATE  jfpt.sys_hospital SET dj=#{dj},had=#{had},ctime=#{ctime},content=#{content},ht=#{ht} WHERE hn=#{hn}
    </update>
    <select id="selectTy" resultType="java.util.HashMap">
        select * from jfpt.sys_hospital where hn=#{hn}
    </select>
    <!--学校信息新增-->
    <insert id="insertss">
        insert into jfpt.sys_school(nature,had,motto,ctime,content,hn) values(#{dj},#{had},#{motto},#{ctime},#{content},#{hn})
    </insert>
    <!--学校信息修改-->
    <update id="updateInfos" >
        UPDATE  jfpt.sys_school SET nature=#{nature},had=#{had},ctime=#{ctime},content=#{content},motto=#{motto} WHERE hn=#{hn}
    </update>
    <select id="selectTs" resultType="java.util.HashMap">
        select * from jfpt.sys_school where hn=#{hn}
    </select>
    <!--小区信息新增-->
    <insert id="insertsr">
        insert into jfpt.sys_residential(category,attributes,developers,had,housetype,content,hn) values(#{category},#{attributes},#{developers},#{had},#{housetype},#{content},#{hn})
    </insert>
    <!--小区信息修改-->
    <update id="updateInfor" >
        UPDATE  jfpt.sys_residential SET category=#{category},attributes=#{attributes},developers=#{developers},had=#{had},housetype=#{housetype},content=#{content} WHERE hn=#{hn}
    </update>
    <select id="selectTr" resultType="java.util.HashMap">
        select * from jfpt.sys_residential where hn=#{hn}
    </select>
    <delete id="deletey">
        delete from jfpt.sys_hospital where hn = #{hn}
    </delete>
    <delete id="deletes">
        delete from jfpt.sys_school where hn = #{hn}
    </delete>
    <delete id="deleter">
        delete from jfpt.sys_residential where hn = #{hn}
    </delete>
</mapper>
blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java
@@ -22,6 +22,7 @@
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * 服务类
@@ -72,5 +73,16 @@
     * @return
     */
    boolean setting(Integer accountNumber, Date expireTime, String ids);
    int inserts(String dj,String had,String ht,String ctime,String content,String hn);
    void updateInfoy(String dj, String had, String ht, String ctime,String content,String hn);
    List<Map<String, Object>> selectTy(String hn);
    List<Map<String, Object>> selectTs(String hn);
    int insertss(String nature, String had, String motto, String ctime,String content,String hn);
    void updateInfos(String nature, String had, String motto, String ctime,String content,String hn);
    int insertsr(String category,String attributes,String developers,String had,String housetype,String content,String hn);
    void updateInfor(String category,String attributes,String developers,String had,String housetype,String content,String hn);
    List<Map<String, Object>> selectTr(String hn);
    void deletey(String hn);
    void deletes(String hn);
    void deleter(String hn);
}
blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java
@@ -41,10 +41,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
import static org.springblade.common.constant.TenantConstant.*;
@@ -196,6 +193,66 @@
        return true;
    }
    @Override
    public int inserts(String dj, String had, String ht, String ctime, String content,String hn) {
        return baseMapper.inserts(dj, had, ht, ctime, content,hn);
    }
    @Override
    public void updateInfoy(String dj, String had, String ht, String ctime, String content, String hn) {
        baseMapper.updateInfoy(dj, had, ht, ctime, content, hn);
    }
    @Override
    public List<Map<String, Object>> selectTy(String hn) {
        return baseMapper.selectTy(hn);
    }
    @Override
    public List<Map<String, Object>> selectTs(String hn) {
        return baseMapper.selectTs(hn);
    }
    @Override
    public int insertss(String nature, String had, String motto, String ctime, String content, String hn) {
        return baseMapper.insertss(nature, had, motto, ctime, content, hn);
    }
    @Override
    public void updateInfos(String nature, String had, String motto, String ctime, String content, String hn) {
              baseMapper.updateInfos(nature, had, motto, ctime, content, hn);
    }
    @Override
    public int insertsr(String category, String attributes, String developers, String had, String housetype, String content, String hn) {
        return baseMapper.insertsr(category, attributes, developers, had, housetype, content, hn);
    }
    @Override
    public void updateInfor(String category, String attributes, String developers, String had, String housetype, String content, String hn) {
        baseMapper.updateInfor(category, attributes, developers, had, housetype, content, hn);
    }
    @Override
    public List<Map<String, Object>> selectTr(String hn) {
        return baseMapper.selectTr(hn);
    }
    @Override
    public void deletey(String hn) {
        baseMapper.deletey(hn);
    }
    @Override
    public void deletes(String hn) {
baseMapper.deletes(hn);
    }
    @Override
    public void deleter(String hn) {
 baseMapper.deleter(hn);
    }
    private String getTenantId(List<String> codes) {
        String code = tenantId.generate();
        if (codes.contains(code)) {