김윤지

Merge branch 'master' into 'master'

db통합, 배경적용



See merge request !7

71.6 KB

module.exports = {
host: 'localhost',
user: 'root',
password: 'abcd',
database: 'db_option'
password: 'Serrmica0!',
database: 'db_option_total'
}
\ No newline at end of file
......
module.exports = {
host: 'localhost',
user: 'root',
password: 'abcd',
database: 'db_option_traffic'
}
\ No newline at end of file
const mysql = require('mysql');
const DB_option = require('../keys/db_option');
const DB_option = require('../keys/db_option_total');
module.exports = mysql.createConnection(DB_option);
......
const mysql = require('mysql');
const DB_option_traffic = require('../keys/db_option_traffic');
module.exports = mysql.createConnection(DB_option_traffic);
const db = require('./db.js');
const db_traffic = require('./db_traffic.js');
const db_total = require('./db_total.js'); //DB 합침
const secret_key = require('../keys/api_option').key;
const secret_key_traffic = require('../keys/api_option_traffic').key;
......@@ -26,20 +25,13 @@ module.exports = (server, app) => {
let sending_to_client_info = {};
let client_send = {};
let client_name = "";
let client_birth ;
let client_birth;
let Destiny;
let sql;
let info = {} //;?
let Current_TrafficAcc = {};
let sql_traffic;
//let DeathNum_index = {}; //사상자
//let M_HurtNum_index = {}; //중상자
//let L_HurtNum_index = {}; //경상자
//let LocalName_index = {}; //지역 이름
//let OccurNum_index = {}; //발생 건수
//afos_fid: 다발지역 FID, bjd_cd: 법정동 코드, spot_cd:지점코드
let Current_TrafficAcc = {};
//API 호출_Weather
const req_API = (when, what) => {
//async await 사용하기 위하여 promise 사용
......@@ -62,6 +54,8 @@ module.exports = (server, app) => {
});
})
}
//API 호출_Traffic
const req_API_traffic = (cate1, cate2) => {
//async await 사용하기 위하여 promise 사용
......@@ -100,12 +94,7 @@ module.exports = (server, app) => {
Discomport_index = await req_API("index", "th"); //불쾌지수
Ultra_Violet_index = await req_API("index", "uv"); //자외선지수
Current_TrafficAcc = await req_API_traffic("frequentzoneLg", "getRestFrequentzoneLg"); //cate1, cate2
/*DeathNum_index = await req_API_traffic("frequentzoneLg", "getRestFrequentzoneLg");
M_HurtNum_index = await req_API_traffic("frequentzoneLg", "getRestFrequentzoneLg");
L_HurtNum_index = await req_API_traffic("frequentzoneLg", "getRestFrequentzoneLg");
LocalName_index = await req_API_traffic("frequentzoneLg", "getRestFrequentzoneLg");
OccurNum_index = await req_API_traffic("frequentzoneLg", "getRestFrequentzoneLg");*/
Current_TrafficAcc = await req_API_traffic("frequentzoneLg", "getRestFrequentzoneLg"); //cate1, cate2
info = {
heat: Heat_index.weather.wIndex.heatIndex[0].current.index, //열지수
......@@ -121,7 +110,7 @@ module.exports = (server, app) => {
typhoon: Current_Weather.common.stormYn, //현재 태풍
time: Current_Weather.weather.minutely[0].timeObservation, // 불러온 시각
death_prob: 0, //확률
death_number: Current_TrafficAcc.items.item[0].caslt_cnt, //사상자 수
death_number: Current_TrafficAcc.items.item[0].dth_dnv_cnt, //사망자 수
midhurt_number: Current_TrafficAcc.items.item[0].se_dnv_cnt, //중상자 수
lighthurt_number: Current_TrafficAcc.items.item[0].sl_dnv_cnt, //경상자 수
occur_number: Current_TrafficAcc.items.item[0].occrrnc_cnt //발생건수
......@@ -143,7 +132,8 @@ module.exports = (server, app) => {
//죽을 확률 계산(내맘대로 커스텀)
info.death_prob = (
(info.heat / 50) + (Math.abs(info.sensible_temperature - 15) / 10) + (info.discomport / 10) + (info.UV / 10)
+ info.windspd*1 + (info.rain / 10) + (Math.abs(info.current_temperature - 15) / 10)
+ info.windspd * 1 + (info.rain / 10) + (Math.abs(info.current_temperature - 15) / 10)
+ (info.death_number / 60) + (info.midhurt_number / 80) + (info.lighthurt_number / 90) + (info.occur_number / 90)
);
//이벤트 기반으로 일정 시간 간격으로 클라이언트에게 보낼 정보, 홈페이지 그래프에 나타날 정보
......@@ -160,19 +150,19 @@ module.exports = (server, app) => {
};
function getRandom_add_prob(min, max) {
return Math.random() * (max - min) + min;
}
}
// 심장이 크게 뛰며 확률이 증가하거나 감소 할 수 있음
Math.random() * 2 >= 1 ? client_send.death += getRandom_add_prob(0, 5) : client_send.death -= getRandom_add_prob(0, 5);
// 심장이 크게 뛰며 확률이 증가하거나 감소 할 수 있음
Math.random() * 2 >= 1 ? client_send.death += getRandom_add_prob(0,5) : client_send.death -= getRandom_add_prob(0,5) ;
//운명의 장난으로 죽을 확률이 증가하거나 감소함
const rand = Math.floor(Math.random() * 6) //생년월일 중 한자리 뽑음
Destiny=client_birth.charAt(rand)/3; //명시적 형 변환
if(Destiny==0)Destiny=1; //사용자 잘못 입력했을때 예외처리
Math.random() * 2 >= 1 ? client_send.death += Destiny : client_send.death -= Destiny ;
//운명의 장난으로 죽을 확률이 증가하거나 감소함
const rand = Math.floor(Math.random() * 6) //생년월일 중 한자리 뽑음
Destiny = client_birth.charAt(rand) / 3; //명시적 형 변환
if (Destiny == 0) Destiny = 1; //사용자 잘못 입력했을때 예외처리
Math.random() * 2 >= 1 ? client_send.death += Destiny : client_send.death -= Destiny;
//만약 날이 너무 안좋아서 확률이 100을 넘긴다면 100으로 예외처리
......@@ -180,21 +170,17 @@ module.exports = (server, app) => {
client_send.death = 100;
}
console.log("client send data \n",client_send)
console.log("client send data \n", client_send)
app.get("socket").emit("weather_and_traffic_Info_minutely_send_to_client", client_send); // 클라이언트에게 정보 담아서 이벤트 발산
console.log("emit");
//db에 저장
sql = "INSERT INTO weatherInfo (time,wind,temperature,rain,prob) VALUES (?,?,?,?,?)";
db.query(sql, [client_send.time, client_send.wind, client_send.temperature, client_send.rain, client_send.death], (err, result) => {
if (err) console.log(err);
})
sql_traffic = "INSERT INTO trafficInfo (tdeath,mhurt,lhurt,occurence,prob) VALUES (?,?,?,?,?)";
db_traffic.query(sql_traffic, [client_send.trafficdeath, client_send.mhurt, client_send.lhurt, client_send.occurence, client_send.death], (err, result) => {
sql = "INSERT INTO apisInfo (time,wind,temperature,rain,prob,tdeath,mhurt,lhurt,occurence) VALUES (?,?,?,?,?,?,?,?,?)";
db_total.query(sql, [client_send.time, client_send.wind, client_send.temperature, client_send.rain, client_send.death, client_send.trafficdeath, client_send.mhurt, client_send.lhurt, client_send.occurence], (err, result) => {
if (err) console.log(err);
})
} catch (err) { //promise err or try err catch
console.log("================Error Occured !!================\n", err);
}
......@@ -205,7 +191,7 @@ module.exports = (server, app) => {
const Start_Interval = (second, CALL) => {
CALL(); //처음 불러올때 한번 호출하고
call_interval = setInterval(CALL, second * 1000); //그 후에 1분마다 호출
}
}
io.on('connection', (socket) => { //프론트와 소켓 연결시 이벤트 루프 동작
......
var express = require('express');
var router = express.Router();
var db = require('../lib/db');
var db = require('../lib/db_total');
/* GET home page. */
router.post('/starting' , (req,res) => {
res.redirect(`/name/${req.body.name}/birth/${req.body.birth}`);
res.redirect(`/name/${req.body.name}/birth/${req.body.birth}`);
})
router.get('/name/:name/birth/:birth', (req,res) => {
// 렌더링 변수
var time = new Array(); // 타임스탬프
var ptArr = new Array(); // 현재 온도
var wsArr = new Array(); // 풍속
var rainArr = new Array(); // 강우량
var probArr = new Array(); // 사망 확률
var dataLen = 0; // 데이터 개수
var empty = 0; // 초기값 유뮤, 0 : 자료 있음, 1 : 자료 없음
var sql = ""; // 쿼리
var count = 0;
const name = req.params.name;
const birth = req.params.birth;
router.get('/name/:name/birth/:birth', (req, res) => {
// 이전 10분간 데이터 찾기
sql = "SELECT * FROM weatherInfo WHERE time >= DATE_FORMAT(DATE_ADD(now(), INTERVAL -20 MINUTE), '%Y-%m-%d %H:%i:%s')";
db.query(sql, function(err, rows, fields){
if(err)
{
console.log(err);
}
else
{
if (rows.length == 0)
{
empty = 1;
}
else
{
for(var i = rows.length - 1; i >= 0; i--)
{
probArr.unshift(rows[i].prob);
time.unshift(rows[i].time);
ptArr.unshift(rows[i].temperature);
wsArr.unshift(rows[i].wind);
rainArr.unshift(rows[i].rain);
count = count + 1;
// 렌더링 변수
var time = new Array(); // 타임스탬프
var ptArr = new Array(); // 현재 온도
var wsArr = new Array(); // 풍속
var rainArr = new Array(); // 강우량
var probArr = new Array(); // 사망 확률
var dataLen = 0; // 데이터 개수
var empty = 0; // 초기값 유뮤, 0 : 자료 있음, 1 : 자료 없음
var sql = ""; // 쿼리
var count = 0;
const name = req.params.name;
const birth = req.params.birth;
//const address = req.params.address;
////////////////////////////////////////
var deathArr = new Array();
var mhurtArr = new Array();
var lhurtArr = new Array();
var occurArr = new Array();
////////////////////////////////////////
if (count == 10){
break;
}
// 이전 10분간 데이터 찾기
sql = "SELECT * FROM apisInfo WHERE time >= DATE_FORMAT(DATE_ADD(now(), INTERVAL -20 MINUTE), '%Y-%m-%d %H:%i:%s')";
db.query(sql, function (err, rows, fields) {
if (err) {
console.log(err);
}
}
else {
if (rows.length == 0) {
empty = 1;
}
else {
for (var i = rows.length - 1; i >= 0; i--) {
probArr.unshift(rows[i].prob);
time.unshift(rows[i].time);
ptArr.unshift(rows[i].temperature);
wsArr.unshift(rows[i].wind);
rainArr.unshift(rows[i].rain);
////
deathArr.unshift(rows[i].tdeath);
mhurtArr.unshift(rows[i].mhurt);
lhurtArr.unshift(rows[i].lhurt);
occurArr.unshift(rows[i].occurence);
count = count + 1;
if (count == 10) {
break;
}
}
}
dataLen = probArr.length;
res.render('index', {
empty,
time,
ptArr,
wsArr,
rainArr,
probArr,
dataLen,
name,
birth
});
}
});
} )
router.get('/', function(req, res, next) {
res.render( 'main' );
dataLen = probArr.length;
res.render('index', {
empty,
time,
ptArr,
wsArr,
rainArr,
probArr,
dataLen,
name,
birth,
deathArr,
mhurtArr,
lhurtArr,
occurArr
});
}
});
})
router.get('/', function (req, res, next) {
res.render('main');
});
module.exports = router;
......
This diff is collapsed. Click to expand it.
<!-- <!DOCTYPE html>
<html>
<head>
<!-- font -->
<link href="https://fonts.googleapis.com/css?family=Nanum+Brush+Script&amp;subset=korean" rel="stylesheet" />
......@@ -39,7 +38,7 @@
<script src="modules/exporting.js"></script>
<script src="modules/export-data.js"></script>
<img src="images/background.jpg" alt="" style="z-index:-1; min-width: 100%; min-height: 100%">
<img src="images/newbackground.png" alt="" style="z-index:-1; min-width: 100%; min-height: 100%">
<div id="banner">
<div id="container1" style="width:1260px; height: 400px; margin: 0 auto;"></div>
......
......@@ -24,48 +24,48 @@
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
<style type="text/css">
html,
{
margin: 0;
padding: 0;
}
body {
margin: 0;
padding: 0;
/* background-image: url('background.jpg');
background-repeat: no-repeat;
background-size: cover; */
/* background: linear-gradient( to bottom, #fbc2eb, #a6c1ee ); */
}
h1 {
color: white;
font-family: 'Nanum Brush Script', cursive;
}
label {
color: white;
font-size: 20px;
font-family: 'Yeon Sung', cursive;
}
#banner {
position: absolute;
top: 0;
width: 100%;
}
#footer {
position: absolute;
bottom: 0;
width: 100%;
height: 50px;
text-align: center;
font-family: 'Yeon Sung', cursive;
color: white;
}
html,
{
margin: 0;
padding: 0;
}
body {
margin: 0;
padding: 0;
/* background-image: url('newbackground.png');
background-repeat: no-repeat;
background-size: cover; */
/* background: linear-gradient( to bottom, #fbc2eb, #a6c1ee ); */
}
h1 {
color: white;
font-family: 'Nanum Brush Script', cursive;
}
label {
color: white;
font-size: 20px;
font-family: 'Yeon Sung', cursive;
}
#banner {
position: absolute;
top: 0;
width: 100%;
}
#footer {
position: absolute;
bottom: 0;
width: 100%;
height: 50px;
text-align: center;
font-family: 'Yeon Sung', cursive;
color: white;
}
</style>
</head>
......
......@@ -21,7 +21,7 @@
/* background: linear-gradient( to bottom, #65799B, rgb(38, 14, 41) ); */
/* background-color:#65799B; */
/* background-image: url("2.jpg");
/* background-image: url("newbackground.png");
background-repeat: no-repeat;
background-size: cover; */
}
......@@ -38,7 +38,7 @@
<script src="highcharts.js"></script>
<script src="modules/exporting.js"></script>
<script src="modules/export-data.js"></script>
<img src="images/background.jpg" alt="" style="z-index:-1; min-width: 100%; min-height: 100%">
<img src="images/newbackground.png" alt="" style="z-index:-1; min-width: 100%; min-height: 100%">
<div id="banner">
<div id="container1" style="width:1260px; height: 400px; margin: 0 auto"></div>
......