苏州轨道客流分析辅助系统——项目总结

这个项目启动于2020年7月13号,是给苏州轨道公司做的一套系统。这套系统包括前端Vue,后端SSM,机器学习算法,以及内外网的项目部署和数据的实时对接。近完工,所以想做个总结,将做的过程中遇到的问题包括见到的博客资源记录一下。如有错误之处,还请大佬指点。

一.配置nginx

https://blog.csdn.net/MyMBS/article/details/90719902?depth_1-utm_source=distribute.pc_relevant_right.none-task-blog-BlogCommendFromBaidu-11&utm_source=distribute.pc_relevant_right.none-task-blog-BlogCommendFromBaidu-11

启动nginx

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

查看nginx是否启动 ps -ef|grep nginx

/usr/local/nginx/sbin/nginx -s reload 重启nginx

二.配置tomcat

https://blog.csdn.net/wangleiqqaaaaa/article/details/103528224

1.创建文件夹tomcat

mkdir tomcat

2.将压缩包apache-tomcat-8.5.50.tar解压到tomcat中

tar -zxvf apache-tomcat-8.5.50.tar

进入apache-tomcat-8.5.50目录

启动tomcat ./startup.sh

停止tomcat ./shutdown.sh

查看tomcat是否启动 ps -ef|grep tomcat -

查看tomcat启动过程 ./catalina.sh run

三.配置redis

https://blog.csdn.net/weixin_34128501/article/details/92400407

启动redis

进入目录 /usr/local/redis/bin ./redis-server redis.conf

四.mysql

1.分区

查看分区信息

SELECT table_name,partition_name,partition_description,table_rows FROM

information_schema.PARTITIONS WHERE table_name = ‘djt_jtts_kq_road_jc_status_copy1’;

删除分区

alter table djt_jtod_ksl_zdflow drop partition djt_jtod_zoneod_bike_20200323;

添加年月日分区

ALTER TABLE djt_jtts_kq_road_jc_status_copy1 ADD PARTITION (PARTITION djt_jtts_kq_road_jc_status_20200323 VALUES IN (‘2020-03-23’));

添加年月分区

ALTER TABLE djt_jtts_dmgd_pj_link ADD PARTITION (PARTITION djt_jtts_dmgd_pj_link_202001 VALUES IN ((2020,‘01’)));

2.ISNULL

判断某字段不为空

SELECT a.oId,a.dId,a.cnt from

(SELECT

o_gjfx_id AS oId,

d_gjfx_id AS dId,

ISNULL(o_gjfx_id) as oFlag,

ISNULL(d_gjfx_id) as dFlag,

cnt_user AS cnt FROM

djt_jtod_gjod_gjfx ) as a where a.oFlag=0 AND a.dFlag=0 ORDER BY a.cnt DESC LIMIT 10

3.concat

更新小时,将8改为08

UPDATE djt_jtts_mainroad_jc_link set statistic_hour = CONCAT(‘0’,statistic_hour) where statistic_hour in (‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’)

截断小时:将8:00:00改为08:00:00

UPDATE gd_short_pred_line set statistic_hour = CONCAT(‘0’,statistic_hour) where substring_index(statistic_hour,":",1) in (‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’)

substring_index(“aaa_bbb_ccc”,"_",1) ,返回为 aaa;

substring_index(“aaa_bbb_ccc”,"_",2) ,返回为 aaa_bbb;

substring_index(substring_index(“aaa_bbb_ccc”,"",-2),"",1) ,返回为 bbb;

4.大于小于

图片

在xml中如果用到<=或者>=时

<= <=

= >=

5.format

截断

format(jc.ydzs,0)

0 保留0位小数

6.随机数

返回一个不大于f的最大整数

floor(f)

返回一个随机浮点值 v ,范围在 0 到1 之间 (即, 其范围为 0 ≤ v ≤ 1.0)。若已指定一个整数参数 N ,则它被用作种子值,用来产生重复序列。

rand(),rand(n)

若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1))。例如, 若要在7到 12 的范围(包括7和12)内得到一个随机整数, 可使用以下语句:

SELECT FLOOR(7 + (RAND() * 6));

7.cast

like concat(‘%’,#{字段},‘%’);

CAST(SUBSTRING_INDEX(rx_pct,"%",1) AS DOUBLE)/100 %号转Double

8.trim

select code,name,`desc`,speed,cnt,krx,kcf, 
substring_index(wkt," ",1) as lon, 
substring_index(wkt," ",-1) as lat from 
(select id as code,name,`desc`,speed,cnt,krx,kcf, TRIM(BOTH ')' FROM (TRIM(BOTH 'Point (' FROM wkt_pt))) as wkt from djt_detour_sections) as a 

五.防火墙

https://blog.csdn.net/qq_27870421/article/details/93165382

看一下public区域下所有已打开的端口

firewall-cmd --zone=public --list-ports

添加端口号

firewall-cmd --zone=public --add-port=8080/tcp --permanent

重启防火墙

firewall-cmd --reload

查看8080端口号是否可用

firewall-cmd --zone=public --query-port=8080/tcp

查看防火墙状态,如果是dead状态,即防火墙未开启

systemctl status firewalld.service

开启或重启、关闭防火墙

systemctl start firewalld.service

systemctl restart firewalld.service

systemctl stop firewalld.service

六.java

1.BigDecimal

Double f4 = 1 - (value1 + value2 + value3); 
BigDecimal b4 = new BigDecimal(f4); 
double value4 = b4.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); 

java 如何将列表拼接成字符串

https://www.cnblogs.com/hgnulb/p/9940306.html

StringUtils.join(list.toArray(), separator); 
separator设置分隔符 

2.集合

Java Stream流之求和

double max = list.stream().mapToDouble(User::getHeight).sum();

根据code排序

Collections.sort(stationVOS,Comparator.comparing((AdStationVO s)->s.getCode()));

根据name分组

            List<AdStationVO>  stationVOS = new ArrayList<>(); 
            List<StationLinesDTO> result = trackService.findStations(change); 
            Map<String, List<StationLinesDTO>> map = result.stream().collect(Collectors.groupingBy(StationLinesDTO::getLineName)); 
            for(Map.Entry<String, List<StationLinesDTO>> entry : map.entrySet()) { 
                AdStationVO adStationVO = new AdStationVO(); 
//                char key = entry.getKey().charAt(0); 
                adStationVO.setName(entry.getKey()); 
                adStationVO.setCode(entry.getValue().get(0).getLineCode()); 
                adStationVO.setStations(entry.getValue()); 
                stationVOS.add(adStationVO); 
            } 
            Collections.sort(stationVOS,Comparator.comparing((AdStationVO s)->s.getCode())); 

3.geojson

(1)点

PointFeatureUtils 
        try { 
            PointFeatureUtils geoUtils = new PointFeatureUtils("mag:Integer,nid:String,kind:Integer,max:Integer"); 
            List<SimpleFeature> features = new ArrayList<>(); 
            for (LonLatCntDTO item : mapList) { 
                SimpleFeature feature = geoUtils.createPointFeature(item.getLat(), item.getLon(), null, new Object[]{item.getCnt(), null, Math.ceil(maxLevel / max * item.getCnt()), maxLevel.intValue()}); 
                features.add(feature); 
            } 
            return GeoUtils.packageFeatureCollection(features); 
        } catch (org.locationtech.jts.io.ParseException | IOException e) { 
            throw new BizException(e.getMessage()); 
        } 

(2)线

LineFeatureUtils 
try { 
    LineFeatureUtils geoUtils = new LineFeatureUtils("code:Integer,name:String"); 
    List<SimpleFeature> features = new ArrayList<>(); 
    for (DetourMapValue item : valueList) { 
         String wkt = "MULTILINESTRING(("+item.getLonlat1()+","+item.getLonlat2()+"))"; 
        SimpleFeature feature = geoUtils.createLineFeature(wkt,null,new Object[]{item.getCode(),item.getName()}); 
        features.add(feature); 
    } 
    return GeoUtils.packageFeatureCollection(features); 
} catch (IOException | ParseException e) { 
    throw new BizException(e.getMessage()); 
} 

(3) 面

MultiPolygon 
ComplexGeoUtils complexGeoUtils = new ComplexGeoUtils(); 
List<SimpleFeature> features = new ArrayList<>(); 
features.add(complexGeoUtils.createVehMultiPolygon() ; 

七.Git

1 进入git bash

在cmd中输入git,进入项目根目录下

图片

查看当前分支的log,wq退出

图片

2 合并代码

在idea中提交代码(或者在git bash下提交)

1.commit

2.pull 主分支

3.push 自己的分支(lf)

查看是否有未commit的代码

git diff

图片

在lf分支下,切换分支到develop

1.git checkout develop

2.git pull origin develop

3.git merge lf

4.git push origin develop

其他分支便可以拉取develop上的合并的新代码

图片

八.部署maven war包

注意: 
服务器上不可以使用log4jdbc 
使用一般的mysql驱动 
type: com.alibaba.druid.pool.DruidDataSource 
driverClassName: com.mysql.jdbc.Driver 
url: jdbc:mysql://x.x.x.x:xxxx/xx?useUnicode=true&characterEncoding=utf8&useCompression=true 
username: xx 
password: xx 

1.打包

进入idea,在maven窗口下,Lifecycle

(1)clean

(2)install

(3)package

图片

在target目录下会出现war包

图片

2.将war包上传

使用Xftp将war包上传至服务器上的tomcat/apache-xxx/webapps下

Xftp公测版: https://www.netsarang.com/zh/version-7-open-beta/

图片

3.target无法删除

前提:Xftp进入target目录下

通过maven 打包时在clean 时提示 target 文件被占用

原因是Xftp进入target上传war包时,占用了进程,在clean过程中无法结束进程

解决办法:

在开始搜索框中,输入“资源监视器”,打开资源监视器,如下图所示:

图片

在该窗口中,切换到cpu 页签,然后在 关联的句柄中,输入 文件名(target),按下回车键,即可查找到被占用的进程

图片

右键结束进程即可

4.启动tomcat

使用xshell连接服务器

(1)先确认是否可以访问到tomcat

查看tomcat是否启动

ps -ef|grep tomcat -

查看防火墙状态,如果是dead状态,即防火墙未开启

systemctl status firewalld.service

启动防火墙

systemctl start firewalld.service

看一下public区域下所有已打开的端口

firewall-cmd --zone=public --list-ports

如果无8080端口号,需要增加8080端口号

firewall-cmd --zone=public --add-port=8080/tcp --permanent

查看8080端口号是否可用

firewall-cmd --zone=public --query-port=8080/tcp

重启防火墙

firewall-cmd --reload

进入bin目录下,启动tomcat

./startup.sh

查看tomcat是否可以访问

http://101.37.35.182:8080/

出现如下界面即可

图片

ps:可用通过命令显示pid来杀掉tomcat进程

ps -ef|grep tomcat -

kill -3 id

(2)查看tomcat日志

./catalina.sh

(3)访问接口

http://ip:端口号/war包名/路径

http://101.37.35.182:8080/djts-service-1.0/v1/track/accessible/select_route?begin_station=141&end_station=149&hours=22:36:30

图片

猜你喜欢

转载自blog.csdn.net/weixin_44204361/article/details/107762821
今日推荐