尚医通 (二十八) --------- 医院管理相关 (引入注册中心、远程调用)

news2025/2/4 1:04:12

目录

  • 一、医院管理
    • 医院管理效果展示
  • 二、注册中心与服务调用
    • 1. Nacos 概述
    • 2. 注册服务
  • 三、医院管理实现
    • 1. 医院列表
    • 2. service-cmn 模块提供接口
    • 3. 封装 Feign 服务调用
    • 4. 医院接口远程调用数据字典
    • 5. 添加数据字典显示接口
    • 6. 医院列表前端


一、医院管理

目前我们把医院、科室和排班都上传到了平台,那么管理平台就应该把他们管理起来,在我们的管理平台能够直观的查看这些信息。

医院管理效果展示

A、列表

在这里插入图片描述

B、详情

在这里插入图片描述

二、注册中心与服务调用

目前在医院列表中需要医院的信息和等级信息,而两段信息属于不同的的模块,service-hosp 和 service-cmn,所以我们需要使用到远程调用。

1. Nacos 概述

A、什么是 Nacos

Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施

B、常见的注册中心

Eureka :原生,2.0 遇到瓶颈,停止维护

Zookeeper :支持,专业的独立产品,例如:dubbo

Consul :原生,GO语言开发

Nacos :相对于 Spring Cloud Eureka 来说,Nacos 更强大

Nacos = Spring Cloud Eureka + Spring Cloud Config

Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka,Spring Cloud Config。

  • 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。
  • 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。

C、Nacos 结构图

在这里插入图片描述

D、Nacos 下载和安装

下载地址:https://github.com/alibaba/nacos/releases

下载版本:nacos-server-1.1.4.tar.gz 或 nacos-server-1.1.4.zip,解压任意目录即可

启动 Nacos 服务

Linux/Unix/Mac

启动命令 (standalone 代表着单机模式运行,非集群模式)
启动命令 :sh startup.sh -m standalone

Windows

启动命令:cmd startup.cmd 或者双击 startup.cmd 运行文件。
访问:http://localhost:8848/nacos

用户名密码:nacos/nacos

在这里插入图片描述

2. 注册服务

A、Nacos 注册 service-hosp

第一步:在 service 模块 pom 文件引入依赖

<!-- 服务注册 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

第二步:在 service-hosp 的配置文件添加 nacos 服务地址

# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

第三步:在service-hosp的启动类添加注解

@SpringBootApplication
@ComponentScan(basePackages = "com.fancy")
@EnableDiscoveryClient
public class ServiceHospApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceHospApplication.class, args);
    }
}

启动 service-hosp 服务,在 Nacos 管理界面的服务列表中可以看到注册的服务

service-cmn 注册过程和 service-hosp 相同 (省略)

在这里插入图片描述

三、医院管理实现

1. 医院列表

A、医院列表 api 接口

添加 service 分页接口与实现:

在 HospitalService 类添加分页接口

/**
 * 分页查询
 * @param page 当前页码
 * @param limit 每页记录数
 * @param hospitalQueryVo 查询条件
 * @return
*/
Page<Hospital> selectHospPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo);

HospitalServiceImpl 类实现分页

@Override
public Page<Hospital> selectHospPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo) {
	Sort sort = Sort.by(Sort.Direction.DESC, "createTime");
	//0为第一页
	Pageable pageable = PageRequest.of(page-1, limit, sort);
	
	Hospital hospital = new Hospital();
	BeanUtils.copyProperties(hospitalQueryVo, hospital);

	//创建匹配器,即如何使用查询条件
	ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
		.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
		.withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
	
	//创建实例
	Example<Hospital> example = Example.of(hospital, matcher);
	Page<Hospital> pages = hospitalRepository.findAll(example, pageable);
	
	return pages;
}

B、添加 controller 方法

添加 com.fancy.yygh.hosp.controller.HospitalController 类

package com.fancy.yygh.hosp.controller;

@Api(tags = "医院管理接口")
@RestController
@RequestMapping("/admin/hosp/hospital")
public class HospitalController {

	@Autowired
	private HospitalService hospitalService;
	
	@GetMapping("list/{page}/{limit}")
    public Result listHosp(@PathVariable Integer page,
                           @PathVariable Integer limit,
                           HospitalQueryVo hospitalQueryVo) {
        Page<Hospital> pageModel = hospitalService.selectHospPage(page,limit,hospitalQueryVo);
        List<Hospital> content = pageModel.getContent();
        long totalElements = pageModel.getTotalElements();

        return Result.ok(pageModel);
    }

}

2. service-cmn 模块提供接口

由于我们的医院等级、省市区地址都是取的数据字典 value值,因此我们在列表显示医院等级与医院地址时要根据数据字典 value 值获取数据字典名称。

通过学习数据字典我们知道,根据上级编码与 value 值可以获取对应的数据字典名称,如果 value 值能够保持唯一 (不一定唯一),我们也可以直接通过 value 值获取数据字典名称,目前省市区三级数据我们使用的是国家统计局的数据,数据编码我们就是数据字典的 id 与 value,所以 value 能够唯一确定一条数据字典,如图:

在这里插入图片描述

A、添加 service 接口与实现

在 DictService 类添加接口

/**
 * 根据上级编码与值获取数据字典名称
 * @param parentDictCode
* @param value
* @return
*/
String getNameByParentDictCodeAndValue(String parentDictCode, String value);

DictServiceImpl 类实现

@Cacheable(value = "dict",keyGenerator = "keyGenerator")
@Override
public String getNameByParentDictCodeAndValue(String parentDictCode, String value) {
	//如果value能唯一定位数据字典,parentDictCode可以传空,例如:省市区的value值能够唯一确定
	if(StringUtils.isEmpty(parentDictCode)) {
		Dict dict = dictMapper.selectOne(new QueryWrapper<Dict>().eq("value", value));
		if(null != dict) {
			return dict.getName();
		}
	} else {
		Dict parentDict = this.getDictByDictCode(parentDictCode);
		if(null == parentDict) return "";
		Dict dict = dictMapper.selectOne(new QueryWrapper<Dict>().eq("parent_id", parentDict.getId()).eq("value", value));
		if(null != dict) {
			return dict.getName();
		}
	}
	return "";
}

private Dict getDictByDictCode(String dictCode) {
	QueryWrapper<Dict> wrapper = new QueryWrapper<>();
	wrapper.eq("dict_code",dictCode);
	Dict codeDict = baseMapper.selectOne(wrapper);
	return codeDict;
}

B、添加 controller 方法

DictController 类添加方法

@ApiOperation(value = "获取数据字典名称")
@GetMapping(value = "/getName/{parentDictCode}/{value}")
public String getName(
	@ApiParam(name = "parentDictCode", value = "上级编码", required = true)
	@PathVariable("parentDictCode") 
	String parentDictCode,
	@ApiParam(name = "value", value = "值", required = true)
	@PathVariable("value") 
	String value) {
	return dictService.getNameByParentDictCodeAndValue(parentDictCode, value);
}

@ApiOperation(value = "获取数据字典名称")
@ApiImplicitParam(name = "value", value = "值", required = true, dataType = "Long", paramType = "path")
@GetMapping(value = "/getName/{value}")
public String getName(
	@ApiParam(name = "value", value = "值", required = true)
	@PathVariable("value") 
	String value) {
	return dictService.getNameByParentDictCodeAndValue("", value);
}

说明:提供两个 api 接口,如省市区不需要上级编码,医院等级需要上级编码

3. 封装 Feign 服务调用

A、搭建 service-client 父模块

搭建过程如 service父模块

修改 pom.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>com.fancy.yygh</groupId>
		<artifactId>yygh-parent</artifactId>
		<version>1.0</version>
	</parent>

	<artifactId>service-client</artifactId>
	<packaging>pom</packaging>
	<version>1.0</version>

	<dependencies>
		<dependency>
			<groupId>com.fancy.yygh</groupId>
			<artifactId>common-util</artifactId>
			<version>1.0</version>
			<scope>provided </scope>
		</dependency>

		<dependency>
			<groupId>com.fancy.yygh</groupId>
			<artifactId>model</artifactId>
			<version>1.0</version>
			<scope>provided</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<scope>provided </scope>
		</dependency>

		<!-- 服务调用feign -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
			<scope>provided</scope>
		</dependency>
	</dependencies>

</project>

B、搭建 service-cmn-client 模块

搭建过程如 service-hosp 模块

修改 pom.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.fancy.yygh</groupId>
        <artifactId>service-client</artifactId>
        <version>1.0</version>
    </parent>
    <version>1.0</version>
    <artifactId>service-cmn-client</artifactId>
    <packaging>jar</packaging>
    <name>service-cmn-client</name>
    <description>service-cmn-client</description>

</project>

添加 Feign 接口类

package com.fancy.yygh.cmn.client;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient("service-cmn")
public interface DictFeignClient {

    /**
     * 获取数据字典名称
     * @param parentDictCode
     * @param value
     * @return
     */
    @GetMapping(value = "/admin/cmn/dict/getName/{parentDictCode}/{value}")
    String getName(@PathVariable("parentDictCode") String parentDictCode, @PathVariable("value") String value);

    /**
     * 获取数据字典名称
     * @param value
     * @return
     */
    @GetMapping(value = "/admin/cmn/dict/getName/{value}")
    String getName(@PathVariable("value") String value);
}

4. 医院接口远程调用数据字典

A、service 模块引入依赖

在 pom.xml 添加依赖

<!-- 服务调用feign -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

B、操作 service-hosp 模块

在 service-hosp 添加依赖

<dependency>
    <groupId>com.fancy.yygh</groupId>
    <artifactId>service-cmn-client</artifactId>
    <version>1.0</version>
</dependency>

启动类开启服务调用

@SpringBootApplication
@ComponentScan(basePackages = "com.fancy")
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.fancy")
public class ServiceHospApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceHospApplication.class, args);
    }
}

调整 service 方法

修改 HospitalServiceImpl 类实现分页

@Autowired
private DictFeignClient dictFeignClient;

@GetMapping("list/{page}/{limit}")
public Page<Hospital> listHosp(@PathVariable Integer page,
                       @PathVariable Integer limit,
                       HospitalQueryVo hospitalQueryVo) {
    Sort sort = Sort.by(Sort.Direction.DESC, "createTime");
    //0为第一页
    Pageable pageable = PageRequest.of(page-1, limit, 	sort);

    Hospital hospital = new Hospital();
    BeanUtils.copyProperties(hospitalQueryVo, hospital);

    //创建匹配器,即如何使用查询条件
    ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
            .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
            .withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写

    //创建实例
    Example<Hospital> example = Example.of(hospital, matcher);
    Page<Hospital> pages = hospitalRepository.findAll(example, pageable);

    pages.getContent().stream().forEach(item -> {
        this.packHospital(item);
    });
    return pages;
}

/**
 * 封装数据
 * @param hospital
 * @return
 */
private Hospital packHospital(Hospital hospital) {
    String hostypeString = dictFeignClient.getName(DictEnum.HOSTYPE.getDictCode(),hospital.getHostype());
    String provinceString = dictFeignClient.getName(hospital.getProvinceCode());
    String cityString = dictFeignClient.getName(hospital.getCityCode());
    String districtString = dictFeignClient.getName(hospital.getDistrictCode());

    hospital.getParam().put("hostypeString", hostypeString);
    hospital.getParam().put("fullAddress", provinceString + cityString + districtString + hospital.getAddress());
    return hospital;
}

5. 添加数据字典显示接口

A、编写 controller

根据 dictCode 查询下层节点

@ApiOperation(value = "根据dictCode获取下级节点")
@GetMapping(value = "/findByDictCode/{dictCode}")
public Result<List<Dict>> findByDictCode(
        @ApiParam(name = "dictCode", value = "节点编码", required = true)
        @PathVariable 
        String dictCode) {
    List<Dict> list = dictService.findByDictCode(dictCode);
    return Result.ok(list);
}

B、编写 service

根据 dictCode 查询下层节点

@Override
public List<Dict> findByDictCode(String dictCode) {
    Dict codeDict = this.getDictByDictCode(dictCode);
    if(null == codeDict) return null;
    return this.findChlidData(codeDict.getId());
}

6. 医院列表前端

A、添加路由

在 src/router/index.js 文件添加路由

{
    path: '/hosp',
    component: Layout,
    redirect: '/hosp/list',
    name: '医院管理',
    alwaysShow: true,
    meta: { title: '医院管理', icon: 'example' },
    children: [
      {
        path: 'hospital/list',
        name: '医院列表',
        component: () => import('@/views/hosp/list'),
        meta: { title: '医院列表', icon: 'table' }
      },
    ]
  },

B、封装 api 请求

创建 /api/hosp.js

import request from '@/utils/request'

export default {
	//医院列表
	getPageList(current,limit,searchObj) {
		return request ({
			url: `/admin/hosp/hospital/list/${current}/${limit}`,
			method: 'get',
			params: searchObj  
		})
	},
	//查询dictCode查询下级数据字典
	findByDictCode(dictCode) {
		return request({
			url: `/admin/cmn/dict/findByDictCode/${dictCode}`,
			method: 'get'
		})
	},
	
	//根据id查询下级数据字典
	findByParentId(dictCode) {
		return request({
			url: `/admin/cmn/dict/findChildData/${dictCode}`,
			method: 'get'
		})
	}
}

C、添加组件

创建 /views/hosp/hospital/list.vue 组件

<template>
<div class="app-container">
    <el-form :inline="true" class="demo-form-inline">
	    <el-form-item>
	        <el-select
	            v-model="searchObj.provinceCode"
	            placeholder="请选择省"
	            @change="provinceChanged">
	            <el-option
	                v-for="item in provinceList"
	                    :key="item.id"
	                    :label="item.name"
	                    :value="item.id"/>
	        </el-select>
	    </el-form-item>
	
	    <el-form-item>
	        <el-select
		        v-model="searchObj.cityCode"
		        placeholder="请选择市"
		        @change="cityChanged">
	            <el-option
		            v-for="item in cityList"
		            :key="item.id"
		            :label="item.name"
		            :value="item.id"/>
	        </el-select>
	    </el-form-item>
	
	    <el-form-item>
	        <el-input v-model="searchObj.hosname" placeholder="医院名称"/>
	    </el-form-item>
	
	    <el-button type="primary" icon="el-icon-search" @click="fetchData()">查询</el-button>
	    <el-button type="default" @click="resetData()">清空</el-button>
    </el-form>

	<!-- banner列表 -->
	<el-table v-loading="listLoading" :data="list"
		border
		fit
		highlight-current-row>

    <el-table-column
	    label="序号"
	    width="60"
	    align="center">
        <template slot-scope="scope">
             {{(page - 1) * limit + scope.$index + 1 }}
        </template>
    </el-table-column>
	    <el-table-column label="医院logo">
	        <template slot-scope="scope">
	        <img :src="'data:image/jpeg;base64,'+scope.row.logoData" width="80">
	        </template>
	    </el-table-column>
	
	    <el-table-column prop="hosname" label="医院名称"/>
	    <el-table-column prop="param.hostypeString" label="等级" width="90"/>
	    <el-table-column prop="param.fullAddress" label="详情地址"/>
	    <el-table-column label="状态" width="80">
	        <template slot-scope="scope">
	            {{ scope.row.status === 0 ? '未上线' : '已上线' }}
	        </template>
	    </el-table-column>
	    <el-table-column prop="createTime" label="创建时间"/>
	
	    <el-table-column label="操作" width="230" align="center">
	    </el-table-column>
	</el-table>

    <!-- 分页组件 -->
    <el-pagination
        :current-page="page"
        :total="total"
        :page-size="limit"
        :page-sizes="[5, 10, 20, 30, 40, 50, 100]"
        style="padding: 30px 0; text-align: center;"
        layout="sizes, prev, pager, next, jumper, ->, total, slot"
        @current-change="fetchData"
        @size-change="changeSize"
    />
</div>
</template>

<script>
import hospitalApi from '@/api/hosp/hosp'
export default {
    data() {
        return {
            listLoading: true, // 数据是否正在加载
            list: null, // banner列表
            total: 0, // 数据库中的总记录数
            page: 1, // 默认页码
            limit: 10, // 每页记录数
            searchObj: {}, // 查询表单对象
            provinceList: [],
            cityList: [],
            districtList: []
        }
    },

    // 生命周期函数:内存准备完毕,页面尚未渲染
    created() {
        console.log('list created......')
        this.fetchData()

        hospitalApi.findByDictCode('Province').then(response => {
            this.provinceList = response.data
        })
    },

    methods: {
        // 加载banner列表数据
        fetchData(page = 1) {
            console.log('翻页。。。' + page)
            // 异步获取远程数据(ajax)
            this.page = page
            hospitalApi.getPageList(this.page, this.limit, this.searchObj).then(
                response => {
                    this.list = response.data.content
                    this.total = response.data.totalElements

                    // 数据加载并绑定成功
                    this.listLoading = false
                }
            )
        },

        // 当页码发生改变的时候
        changeSize(size) {
            console.log(size)
            this.limit = size
            this.fetchData(1)
        },

        // 重置查询表单
        resetData() {
            console.log('重置查询表单')
            this.searchObj = {}
            this.fetchData()
        },
        provinceChanged() {
            this.cityList = []
            this.searchObj.cityCode = null
            this.districtList = []
            this.searchObj.districtCode = null
            hospitalApi.findByParentId(this.searchObj.provinceCode).then(response => {
                this.cityList = response.data
            })
        }
    }
}
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/23192.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

函数栈帧的创建和销毁

“总有人间一两风&#xff0c; 填我十万八千梦” &#x1f351;作者&#xff1a;小赛毛 &#x1f495;文章初次日期&#xff1a;2022/11/21 目录 函数栈帧解决了什么问题&#xff1f; 什么是栈&#xff1f; 什么是寄存器&#xff1f; 函数栈帧的创建和销毁 预热知识准备&a…

Flink DataStream API 介绍

Flink DataStream API 介绍 StreamExecutionEnvironment #mermaid-svg-JKeWa22W2vWA4zBS {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-JKeWa22W2vWA4zBS .error-icon{fill:#552222;}#mermaid-svg-JKeWa22W2vWA4z…

使用element-ui实现树形穿梭框

<template><div class"transferTreeBox"><!-- 左侧待选内容 --><div class"SelectBox"><div class"boxTitle" click"clickAllSelect">全选 ></div><div class"boxCenter"><…

【Hack The Box】Linux练习-- Frolic

HTB 学习笔记 【Hack The Box】Linux练习-- Frolic &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年9月7日&#x1f334; &#x1f36d…

dumi 2,它来了它来了它来了

dumi 1.0 在 2020 年 3 月 2 日正式发布&#xff0c;到今天一共有 80 位 Contributor、提交 1100 Commit、为近 4000 个开源项目提供了组件库/站点的文档方案&#xff1b;dumi 作为一个 GitHub 数亿开源项目中的渺小一粒&#xff0c;能有这么多人共同参与、能为这么多项目提供价…

【JAVA程序设计】(C00097) 基于SSM的果树溯源可视化管理系统

基于SSM的果树溯源可视化管理系统项目简介项目获取开发环境项目技术运行截图项目简介 基于ssm框架的果树溯源可视化管理系统&#xff0c;本系统分为二种用户&#xff1a;管理员、农户 管理员角色包含以下功能&#xff1a; 登录、农户管理、商家管理、果树管理、地块管理、农资…

马上2023年了,终于发现一款颜值爆表的记账软件

不知道大家平时有没有记账的习惯&#xff0c;我是在疫情之后&#xff0c;才开始记账的。 记账之后&#xff0c;的确发现了很多问题。尤其是自己花钱大手大脚没有规划的毛病。 后来&#xff0c;在每个月第1周&#xff0c;我都会分析一下上一个月的账目&#xff0c;看看自己的收…

同花顺_代码解析_交易系统_J09_18

本文通过对同花顺中现成代码进行解析&#xff0c;用以了解同花顺相关策略设计的思想 目录 J_09 抛物线转向系统 J_10 均线系统 J_11 随机指标专家 J_12 顺势指标 J_15 动量线 J_16 心理线 J_17 变动速率 J_18 相对强弱指标 J_09 抛物线转向系统 指标标识由绿变红时为买…

LeetCode287之寻找重复数(相关话题:二分查找,快慢指针)

题目描述 给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 [1, n] 范围内&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 &#xff0c;返回 这个重复的数 。 你设计的解决方案必须 不修改 数组 …

【SIFT】超详详详解 - 实现细节记录

目录前言一、尺度空间的生成&#xff1a;高斯金字塔 Gaussian pyrmid1、图像的尺度空间 - 高斯金字塔 Gaussian pyramid2、高斯金字塔的组 与 组数 Octave1&#xff09;组2&#xff09;组数3&#xff09;升采样获得 base image3、高斯金字塔的层与层数 interval31&#xff09;层…

2022年轨道交通行业研究报告

第一章 行业概况 轨道交通是指运营车辆需要在特定轨道上行驶的一类交通工具或运输系统。最典型的轨道交通就是由传统火车和标准铁路所组成的铁路系统。随着火车和铁路技术的多元化发展&#xff0c;轨道交通呈现出越来越多的类型&#xff0c;不仅遍布于长距离的陆地运输&#x…

k8s基础命令及Linux上用Kubectl(k8s)部署Nginx

k8s基础命令及Linux上用Kubectl(k8s)部署Nginx 不懂K8s搭建的可以看我这篇文章 Linux上部署Kubectl(k8s) 1.k8s简介 1.1 Kubernetes 概念 在 k8s 上进行部署前&#xff0c;首先需要了解一个基本概念 Deployment Deployment 译名为 部署。在k8s中&#xff0c;通过发布 Depl…

积分商城小程序的作用_分享积分商城小程序开发的效果

积分商城系统带来的6点作用分别是&#xff1a;对商家的依赖性、提升转化和复购、运营模式多元化、提升收益、进行积分营销、进行口碑传播&#xff0c;下面我们就来详细的了解一下。 积分商城系统带来的作用一&#xff1a;对商家的依赖性 积分商城系统是进行积分兑换的&#xf…

渗透测试CTF-图片隐写的详细教程2(干货)

上篇文章我们介绍了这7个工具&#xff0c;这里简单的介绍一下。 Binwalk 用来检测图片中是否有隐藏的文件。 Foremost 将图片中的隐藏文件拆分出来。 010Editor ①修改图片的参数来查看隐藏信息。 ②查看压缩包是否是伪加密。 Stegsolve.jar 图片隐写查看神器。 OurSecret 1个图…

公众号免费查题功能搭建

公众号免费查题功能搭建 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&#xf…

Word处理控件Aspose.Words功能演示:在 Java 中将文本转换为 PNG、JPEG 或 GIF 图像

在各种情况下&#xff0c;通常需要进行文本到图像的转换&#xff0c;例如&#xff0c;使文本成为只读。在上一篇文章中&#xff0c;我们写过如何将TXT文件中的文本转换为 Java 中的 PDF。在本文中&#xff0c;您将学习如何在 Java 中以编程方式将文本转换为PNG、JPEG或GIF图像。…

B. Catching Cheaters(最长公共子序列变形)

Problem - 1446B - Codeforces 给你两个字符串A和B&#xff0c;代表两个涉嫌作弊的学生的论文。对于任何两个字符串C&#xff0c;D&#xff0c;我们将其相似性分数S(C,D)定义为4⋅LCS(C,D)-|C|-|D|&#xff0c;其中LCS(C,D)表示字符串C和D的最长公共子序列。 你认为只有部分文…

三次握手与四次挥的问题,怎么回答?

在面试中&#xff0c;三次握手和四次挥手可以说是问的最频繁的一个知识点了&#xff0c;我相信大家也都看过很多关于三次握手与四次挥手的文章&#xff0c;今天的这篇文章&#xff0c;重点是围绕着面试&#xff0c;我们应该掌握哪些比较重要的点&#xff0c;哪些是比较被面试官…

大一学生网页课程作业 南京介绍网页设计 学生家乡网页设计作品静态 HTML网页模板源码 html我的家乡网页作业

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法&#xff0c;如盒子的嵌套、浮动、margin、border、background等属性的使用&#xff0c;外部大盒子设定居中&#xff0c;内部左中右布局&#xff0c;下方横向浮动排列&#xff0c;大学学习的前端知识点和布局方式都有…

uniapp自动识别并切换到pad端、pc端【不断更新】【伸手党福利】

目录uniapp自动切换到pad、pc端&#xff08;框架方法&#xff09;1. 新建文件&#xff1a;index为主页面&#xff08;代理页面&#xff09;detail为主页面的引用页面&#xff08;业务页面&#xff09;leftwindow为左边栏【名字随便起】topwindow为顶部栏【名字随便起】2. pages…