一本码簿

众里寻码千百度,那段却在github处。

准备材料清单

服务

  • ZCEY ITISPR-33_服务级别管理程序-服务目录.xls
  • ZCEY ITISPR-33_服务级别管理程序-IT服务水平协议(SLA).docx
  • ZCEY ITISPR-33_服务级别管理程序-运营级别协议OLAS.doc

项目

  • 系统开发合同/开发任务单
  • 系统需求分析
  • 系统功能设计
  • 系统测试方案
  • 系统测试报告
  • 系统验收报告或功能点验收报告
  • 用户报告

运维

  • ZCEY ITISPR-22_事件管理程序-运维事件汇总记录单.xlsx
  • ZCEY ITISPR-22_事件管理程序-重大事件处理报告单.docx

其他

  • 系统变更记录
  • 系统会议记录
  • 系统巡检记录
  • 其他ITIS文件

安全服务协议

  • 服务目录
    服务目录需根据不同的系统进行定制。
  • 服务协议
  • 运营协议
  • 服务提供方式
    如果提供技术支持,提供系统支持过程记录单。
  • 服务评价
    用户报告、用户满意度调查

开发过程控制

  • 系统合同或开发任务书
    系类型为:为甲方开发的任务、为院生产开发的任务、出售软件服务。为甲方开发的任务需要提供系统开发合同,后两者需提供开发任务书。
  • 需求分析
    分功能性需求和非功能性需求。
  • 功能设计
    功能设计需以需求为核心,一般包括概要设计和详细设计。
  • 系统测试
    包括系统测试方案,测试报告。
  • 系统验收
    系统验收报告或功能点验收报告。
  • 系统发布
    系统发布方案
  • 系统运维
    提供系统运维记录。

信息安全保证

开发环境

  • 开发环境分内网环境和外网环境,如果开发过程涉及到涉密数据,开发的调试和测试需放在内网环境。
  • 主机登录需考虑密钥和IP限制。
  • 主机需进行端口访问和IP访问策略控制,采用阿里云管理访问策略。
  • 开发主机需要安装杀毒软件或购买相应的云安全服务,如安骑士等。

代码管理

  • 使用svn 和git进行版本控制,版本控制分成果和开发分支。
  • 开发人员需提交密钥后才能提交代码,且只能提交到开发分支。
  • 项目负责人需管理分支,进行code review后将新开发的功能或者改进的代码合并到成果分支。

系统安全

  • 系统使用需进行登录,和无操作登录超时操作,用户密码需要进行加密和弱密码限制策略。
  • 系统关键参数,如坐标转换参数需进行加密,且满足一定的加密强度。

数据安全

  • 系统和系统数据库进行定时和手动备份计划。
  • 系统代码和文档需在不同主机进行备份。
  • 系统进行关键数据操作时,提供回退操作,且能回退到操作前的数据状态。

常用坐标对应的EPSG编号

cgcs2000_geo: 4490
cgcs2000_3_gk_117E: 4548
cgcs2000_3_gk_120E: 4549
cgcs2000_3_gk_123E: 4550
wgs84_geo: 4326
web_mercator_auxiliary_sphere: 3875
web_mercator(google): 3785

管理命令

数据库备份

1
2
3
alias pgbackup='thisFun(){pg_dump -U postgres -F t -ovf /var/pgbak/$1_$(date '+%Y%m%d%H%M%S').tar $1};thisFun'
alias pgbak='pg_dump -h localhost -U postgres -F t -ovf /var/pgbak/njqdb.tar njqdb'
pg_dump -h localhost -U postgres -d njqwebdb > /hdc/njqdbbak/njqweb$(date '+%Y%m%d%H%M%S').bak -v

数据库恢复

1
2
3
alias pgrecover='thisFun(){var=${1%%_*};var=${var##*/};echo $var;pg_restore -U postgres -d ${var} -cv $1};thisFun'
alias pgrec='pg_restore -h localhost -U postgres -d njqdb -cv /var/pgbak/njqdb.tar
psql -h localhost -U postgres -d databasename < C:\databasename.bak

Linux管理

  • 登录数据库 sudo psql -u postgres
  • 导出到表格
1
COPY (SELECT a.corp_name,a.area_code,a.entity_code,b.addr_type,b.addr_content,b.symbol_code,b.geo_addr FROM geo_entity_info as a left join geo_space_info as b on a.corp_id=b.corp_id) TO '/mnt/d/a.csv' WITH csv HEADER;

开启模块扩展

  • 创建数据库

    1
    2
    create database geoTemplate;
    \c geoTemplate;
  • 启用空间数据库模块

    1
    2
    3
    4
    5
    6
    7
    CREATE EXTENSION postgis;
    CREATE EXTENSION pgrouting;
    CREATE EXTENSION postgis_topology;
    CREATE EXTENSION fuzzystrmatch;
    CREATE EXTENSION postgis_tiger_geocoder;
    CREATE EXTENSION address_standardizer;
    CREATE EXTENSION "uuid-ossp";

管理SQL

创建空间索引

  • CREATE INDEX name ON table USING gist(column);
  • CREATE INDEX name ON table USING gin(column);

查询所有数据库大小

1
select pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size from pg_database ORDER BY size DESC

查看全部表大小

1
select relname, pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_tables where schemaname='public' order by pg_relation_size(relid) desc

查看全部表索引大小

1
select indexrelname, pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_indexes where schemaname='public' order by pg_relation_size(relid) desc

查看数据库连接情况

1
select * from pg_stat_activity

结束数据库连接

1
SELECT pg_terminate_backend(pid)  FROM pg_stat_activity WHERE datname='njqwebdb' AND pid<>pg_backend_pid()

查询数据库中的表

1
select * from pg_tables WHERE schemaname='public'

语句耗时统计

1
select * FROM pg_stat_statements ORDER BY total_time DESC

索引缓存命中率

1
2
3
4
5
6
SELECT
sum(idx_blks_read) as idx_read,
sum(idx_blks_hit) as idx_hit,
(sum(idx_blks_hit) - sum(idx_blks_read)) / sum(idx_blks_hit) as ratio
FROM
pg_statio_user_indexes;

查看数据库物理大小

1
select pg_size_pretty(pg_database_size('postgres'));

清空带外键约束的表格

TRUNCATE njq_user_basic CASCADE

导入函数创建脚本

1
select proname,  pg_get_functiondef(proname::regproc) from pg_proc where proname LIKE 'njq_%';

日常应用

导入数据库

1
shp2pgsql -a -D -s 4326 -W utf-8 point.shp geo_point > result.sql

-s 代表指定数据的SRID为3857
-c 代表数据将新建一个表
-d 删除旧的表,重新建表并插入数据
-a 向现有表中追加数据
-p 仅创建表结构,不添加数据,这四个参数是互斥的
-W Shape文件中属性的字符集,通常Postgresql的字符集是UTF-8,有时候可能Shape数据中的字符集是其他,就可能报“Unable to convert data value to UTF-8 (iconv reports “无效或不完整的多字节字符或宽字符”). Current encoding is “UTF-8”. Try “LATIN1” (Western European)”错误,这时候指定正确的字符集即可解决方问题。

常用查询

跨表查询统计

1
2
3
4
5
6
SELECT xcz_item.code,xcz_region."name","type","count"(xcz_item.code) AS count
FROM xcz_item
LEFT JOIN xcz_region
ON xcz_item.code LIKE '330604%' AND xcz_item.code=xcz_region.code
GROUP BY xcz_item.code,"type",xcz_region."name"
ORDER BY xcz_item.code ,"type"

跨表条件统计

1
2
3
4
5
6
7
8
9
10
SELECT DISTINCT a.code,a.name,
COALESCE(count(b.*),0) AS total,
sum(CASE WHEN b.state = 4 THEN 1 ELSE 0 END) AS finished,
sum(CASE WHEN b.state <>4 OR b.state IS NULL THEN 1 ELSE 0 END) AS unfinished,
st_astext(st_centroid(a.geom)) AS position
FROM xcz_region a left join xcz_item b
ON a.code=b.code
WHERE a.need=1 AND b.type='1001'
GROUP BY a.code,a.name,a.geom
ORDER BY a.code

图形操作

  • 空间查询
1
2
SELECT count(*) FROM njq_dk WHERE st_intersects(geom,st_geomfromtext('MULTIPOLYGON(((120.92 29.37,120.93 29.37,120.93 29.38,120.92 29.37,120.92 29.37)))',4326))
SELECT count(*) FROM njq_dk WHERE st_intersects(geom,st_geomfromtext('POLYGON((120.92 29.37,120.93 29.37,120.93 29.38,120.92 29.37,120.92 29.37))',4326))
  • 创建空间索引
1
2
3
4
5
create extension pg_trgm;
update pg_opclass set opcdefault = true where opcname='gin_trgm_ops';
CREATE index on njq_dk USING gist (geom);
CREATE index on njq_dk USING gin (geom gin_trgm_ops);

  • 外包多边形
1
select ST_AsText(ST_ConvexHull(ST_Collect(geom))) FROM xcz_region
  • 外包矩形
1
select ST_AsText(st_Envelope(ST_Collect(geom))) FROM xcz_region
  • 中心点(面质心)
1
select st_astext(st_centroid(geom)) FROM xcz_region
  • 面上点(和面lable位置一致)
1
select st_astext(st_PointOnSurface(geom)) FROM xcz_region

系统环境

1.安装node.js

2.安装cnpm

1
npm i -g cnpm --registry=https://registry.npm.taobao.org

3.安装vue-cli

1
cnpm i vue-cli

4.下载代码并进入代码目录下进行模块安装

1
cnpm i

IDEA配置

  1. File->settings->plugins 安装 node 插件和 vue.js 插件,重启IDEA
  2. 配置启动项如下图:
    启动项配置

相关知识点

  1. ES6
  2. vue.js
  3. vue-router
  4. vuex
  5. element-ui

结构图

结构图

获取文件夹指定类型的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private File[] getFilterFiles(String path, String[] suffix) {

File baseFolder = new File(path);
if(!baseFolder.isDirectory())return null;

FileFilter imageFilter = pathname -> {
String fileName = pathname.getName().toLowerCase();
for (String s : suffix) {
if (fileName.endsWith(s.toLowerCase())) return true;
}
return false;
};

return baseFolder.listFiles(imageFilter);
}

二维表转树Json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class itemType;
class itemTypeTree extetends itemType{
List<itemTypeTree> children;
}

private List<ItemTypeTree> recursionNode(List<ItemType> list, ItemType itemTree) {

if(list==null)return null;
if(itemTree==null)itemTree=new ItemTypeTree();
return getChildNode(list,itemTree).stream()
.map(item -> {
if(getChildNode(list,item).size()>0){
item.setChildren(recursionNode(list,item));
}
return item;
})
.collect(Collectors.toList());
}
private List<ItemTypeTree> getChildNode(List<ItemType> list,ItemType itemTree){
return list.stream()
.filter(item -> {
if(StringUtils.isBlank(itemTree.getTypecode())){
return StringUtils.isBlank(item.getParentcode());
}else {
return item.getParentcode().equals(itemTree.getTypecode());
}
})
.map(itemType -> {
ItemTypeTree itemTypeTree=new ItemTypeTree();
BeanUtils.copyProperties(itemType,itemTypeTree);
return itemTypeTree;
})
.collect(Collectors.toList());
}

生成密钥

ssh-keygen -t rsa -C “username@email.com

添加本地仓库到github

  1. git init
  2. git remote add origin git@github.com:bxxfighting/NowToDo.git
  3. git branch -u origin/master
  4. git pull

忽略已提交文件

  1. 先用如下命令: git rm -r --cached filename
  2. 再更新.gitignore文件忽略相关文件

创建git使用步骤

  1. 生成ssh key:git bash下运行 ssh-keygen -t rsa -C”username”,然后三个
    回车,密码为空,上传用户文件夹下的公钥 id_rsa.pub 到服务器
  2. 配置全局用户名 git config –global user.name “hai”、email git config
    –global user.email “username@email.com
  3. 配置cr、crlf转换 git config –global core.autocrlf input
  4. 配置safecrlf转换 git config –global core.safecrlf true
  5. 下载代码 git clone git@l.zjchey.com:code/NjqWeb.git
  6. 创建并切换分支 git checkout -b dev
  7. 建立当前本地分支dev和远程dev分支track git branch -u origin/dev
  8. 获取代码 git pull(相当向下箭头),提交代码 git add. git commit -m
    “message” git push
    (相当在vcs右键 commit changes)

git分支

  1. 创建分支 git branch ,切换分支 git checkout
    ,创建并切换分支 git checkout -b
  2. 显示本地分支 git branch,显示远程分支 git branch -r,显示本地和远程
    分支 git branch -a
  3. 获取远程分支 git pull origin 或者 git pull
  4. 推送到远程分支,git push origin :
    若本地分支和远程分支tracked,可简写为 git push,若
    为空,则删除远程分支
  5. 获取远程新分支 git checkout -b origin/
  6. 删除本地分支 git branch -d ,删除远程分支 git branch -d
    -r origin/
  7. 合并分支 git merge
  8. 建立当前本地分支dev和远程dev分支track git branch -u origin/dev,新建
    和远程dev分支tracked的本地分支 git branch –track dev origin/dev
  9. 查看本地分支和远程分支是否tracked git branch -vv
  10. 分支重命名 git branch -m oldbranch newbranch

git撤销

  1. 撤销add git checkout – filefullname
  2. 撤销commit git reset HEAD filefullname
  • git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种
    方式,它回退到某个版本,只保留源码,回退commit和index信息
  • git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到
    index file一级。如果还要提交,直接commit即可
  • git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本
    的内容

git区图解

git区

git其他命令

  1. 创建裸库: git init –bare NjqWeb.git
  2. 查看本地设置 git config –list
  3. work和index的比较 git diff,index和repository比较 git diff –staged
    work和repository比较 git diff HEAD
  4. git status中文被转义 git config –global core.quotePATH false
  5. master分支仅发布不干活,dev分支仅干活不发布

git多远程仓库

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
[remote "origin"]
    url = git@l.zjchey.com:haies.github.io
    url = git@git.oschina.net:haies/blog.git
    url = git@git.coding.net:haies/blog.git
    url = git@code.aliyun.com:haies/blog.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master

insert返回主键

1
2
3
<insert id="insertSelective" parameterType="com.web.quickwork.entity.UserProject"
useGeneratedKeys="true" keyProperty="id">
</insert>
1
2
3
4
5
<insert id="insertSelective" parameterType="com.zjchey.xxfy.geoCity.entity.Report">
<selectKey keyProperty="uid" order="BEFORE" resultType="java.lang.Object">
SELECT uuid_generate_v4()
</selectKey>
</insert>
1
2
3
4
5
<insert id="insertSelective" parameterType="com.web.quickwork.entity.UserProject" >
<selectKey resultType="long" order="AFTER" keyProperty="id">
SELECT MAX (ID) FROM USERPROJECT
</selectKey>
</insert>

跳转

>跳转到第一行:**gg**
跳转到最后一行:**GG**
跳转到第N行:**Ngg**

搜索

>向后搜索:**: /**
向前搜索:**:?**
下一个:**n**
上一个:**N**

常用插件

npm install gulp-autoprefixer gulp-minify-css gulp-jshint gulp-concat gulp-uglify gulp-imagemin gulp-notify gulp-rename gulp-connect gulp-cache del –save-dev

常用命令

  1. gulp.task(name[, deps], fn) 定义任务 name:任务名称 deps:依赖任务名称 fn:回调函数
  2. gulp.run(tasks…):尽可能多的并行运行多个task
  3. gulp.watch(glob, fn):当glob内容发生改变时,执行fn
  4. gulp.src(glob):置需要处理的文件的路径,可以是多个文件以数组的形式,也可以是正则
  5. gulp.dest(path[, options]):设置生成文件的路径

跳转

  1. 查找对象方法实现类:Ctrl+ Shift+ H
  2. 查看类继承关系:Ctrl + H

设置

  1. Settings–>Editor–>Code Style–>Line Seperator(Unix)
  2. Settings–>Editor–>File Encoding–>Properties Files(UTF-8)
0%