#' tqi and notify in JAVA WEB
#'
#' return caution table for Showing in JAVA WEB
#' @param None
#' @return caution Tb(show spots to fix and working priorty)
devtools::use_package("magrittr")
devtools::use_package("dplyr")
devtools::use_package("csvread")
devtools::use_package("stringr")
devtools::use_package("rJava")
devtools::use_package("DBI")
devtools::use_package("RJDBC")
#' @importFrom csvread map.coltypes
#' @importFrom csvread csvread
#' @importFrom compiler cmpfun
#' @importFrom stringr str_detect
#' @importFrom stringr str_replace
#' @importFrom stringr str_replace_all
#' @importFrom stringr str_extract
#' @importFrom stringr str_extract_all
#' @importFrom stringr str_sub
#' @importFrom stringr str_c
#' @importFrom dplyr select
#' @importFrom dplyr filter
#' @importFrom dplyr arrange
#' @importFrom dplyr summarise
#' @importFrom dplyr mutate
#' @importFrom dplyr group_by
#' @importFrom dplyr left_join
#' @importFrom RJDBC JDBC
#' @importFrom DBI dbConnect
#' @importFrom DBI dbSendQuery
#' @importFrom DBI dbExecute
#' @importFrom DBI dbFetch
#' @importFrom DBI dbHasCompleted
#' @importFrom DBI dbWriteTable
#' @importFrom DBI dbDisconnect
#' @importFrom magrittr %>%
#' @export
JAVAnotify_db=function(startD,lastD,kind,equipOrNot,criteria_distance){
A=cmpfun(
function(){
######################
#1. 데이터베이스 연결#
######################
drv=JDBC("oracle.jdbc.driver.OracleDriver","/home/jsh/Downloads/ojdbc6.jar")
conn=dbConnect(drv,"jdbc:oracle:thin:@localhost:1521:xe","korail150773","0818")
print(c("PRR","PRL","ALL","ALR","GAGE","TWIST","SUP"))
# kind=readline(prompt="kind: ")
##################
#2. @Param(kind) #
##################
kind<<-kind
################
#3. DB extract #
################
if(kind=="PRL"){
rs=dbSendQuery(conn,"select * from PRL")
temp=dbFetch(rs)
}else if(kind=="PRR"){
rs=dbSendQuery(conn,"select * from PRR")
temp=dbFetch(rs)
}else if(kind=="ALL"){
rs=dbSendQuery(conn,"select * from ALL")
temp=dbFetch(rs)
}else if(kind=="ALR"){
rs=dbSendQuery(conn,"select * from ALR")
temp=dbFetch(rs)
}else if(kind=="GAGE"){
rs=dbSendQuery(conn,"select * from GAGE")
temp=dbFetch(rs)
}else if(kind=="TWIST"){
rs=dbSendQuery(conn,"select * from TWIST")
temp=dbFetch(rs)
}else if(kind=="SUP"){
rs=dbSendQuery(conn,"select * from SUP")
temp=dbFetch(rs)
}
names(temp)[1]="distance"
i=1;for(i in 1:length(temp)){
temp[,i]=str_replace_all(temp[,i],"(\")","")
temp[,i]=as.numeric(temp[,i])
}
# print("1. m단위 입력")
# print("2. 범위를 200m로 구분되게 설정 ex)19000~19400")
#
# startD=readline(prompt="start: ")
# startD=as.numeric(startD)
# startD <<- startD
# lastD=readline(prompt="last: ")
# lastD=as.numeric(lastD)
# lastD<<-lastD
############################################
#4. 계산을 위한 시작점/종료점 지정(50/100) #
############################################
startD_50=startD-25
startD_50=as.numeric(startD_50)
startD_50<<-startD_50
lastD_50=lastD+24.75
lastD_50=as.numeric(lastD_50)
lastD_50<<-lastD_50
startD_100=startD-100
startD_100=as.numeric(startD_100)
startD_100<<-startD_100
lastD_100=lastD+99.75
lastD_100=as.numeric(lastD_100)
lastD_100<<-lastD_100
############################################
#5. range_no(25cm) / range_TQI(200m) #
############################################
range_no=(startD-1000)+0.25*(c(1:(4*lastD-4*startD+8001))-1)
range_no<<-range_no
range_TQI=(startD)+200*(c(1:((lastD-startD+200)/200))-1)
range_TQI<<-range_TQI
#####################################################################
#6. distance_temp : UniqueKey값 : range_no(merge 할 때 없는 값들 NA)#
#####################################################################
distance_temp=data.frame("distance"=range_no)
# i=1
# coltypes=map.coltypes(fileList[i],header=T)
# temp=csvread(fileList[i],coltypes=coltypes, header=T)
####################
#7. 이동평균선 지정#
####################
if(kind=="PRL"|kind=="PRR"|kind=="TWIST"|kind=="SUP"){
longLevel=200
}else if(kind=="ALL"|kind=="ALR"){
longLevel=50
}else{
longLevel=0
}
longLevel<<-longLevel
####################################
#8. distance_temp에 distance 끼우기#
####################################
#temporary_should be revised
quater=length(temp)
temp=left_join(distance_temp, temp[,c(1,quater)][!duplicated(temp[,c(1,quater)][,1]),],"distance")
############################
#9. (궤도틀림값-이동평균선)#
############################
if(longLevel==50){
temp=temp %>% filter(distance>=startD_50,distance<=lastD_50)
if(is.na(sum(temp[,2]))) temp[is.na(temp[,2]),2]=0
movingInclude=rep(0,100)
i=101;for(i in 101:(length(temp[,1])-100)){
movingInclude[i]=temp[i,2]-mean(temp[c((i-100):(i-1),i,(i+1):(i+100)),2])
print(paste0(i,"/",length(temp[,1])-100))
}#for(i)
movingInclude=c(movingInclude,rep(0,100))
temp=mutate(temp,movingInclude=movingInclude)
}else if(longLevel==200){
temp=temp %>% filter(distance>=startD_100,distance<=lastD_100)
if(is.na(sum(temp[,2]))) temp[is.na(temp[,2]),2]=0
movingInclude=rep(0,400)
i=401;for(i in 401:(length(temp[,1])-400)){
movingInclude[i]=temp[i,2]-mean(temp[c((i-400):(i-1),i,(i+1):(i+400)),2])
print(paste0(i,"/",length(temp[,1])-400))
}#for(i)
movingInclude=c(movingInclude,rep(0,400))
temp=mutate(temp,movingInclude=movingInclude)
}else if(longLevel==0){
temp=mutate(temp,movingInclude=temp[,2])
}#if
################
#10. TQI 구하기#
################
TQI=integer(0)
i=1;for(i in 1:(length(range_TQI)-1)){
TQI[i]= sd((temp %>% select(1,3) %>% filter(distance>=range_TQI[i],distance<range_TQI[i+1]))[,2])
print(paste0(i,"/",(length(range_TQI)-1)))
}
original_TQI=mean(TQI)
original_TQI <<- original_TQI
########################
#11. TQI(200m -> 0.25m)#
########################
temp=temp %>% mutate(rawTQI=rep(0,length(temp[,1])))
table_TQI=data.frame(start=range_TQI[-length(range_TQI)],TQI=TQI)
i=1;for(i in 1:length(table_TQI[,1])){
TrueOrNot=((temp[,1]-table_TQI[i,1])>0)&((temp[,1]-table_TQI[i,1])<200)
temp[TrueOrNot,4]=table_TQI[i,2]
print(paste0(i,"/",length(table_TQI[,1])))
}
temp<<-temp
print("input TQI_file to directory of input")
# directoryCheck=readline(prompt="directory: /home/jsh/Rwork/input right?(1.yes, 2.no)")
directoryCheck=1
directoryCheck=as.integer(directoryCheck)
if(directoryCheck==1){
setwd("/home/jsh/Rwork/input")
}else if(directoryCheck==2){
directory=readline(prompt="write your Directory:(without double quotation)")
directory=as.character(directory)
setwd(directory)
}
fileCheck=2
# fileCheck=readline(prompt=paste0("1. I have seperated TQI file,though","\n","2. I've already executed tqi() function"))
fileCheck=as.numeric(fileCheck)
if(fileCheck==1){
file_tqi=list.files()
print(list.files())
fileNo=readline(prompt="What number is your fileNo?")
fileNo=as.integer(fileNo)
coltypes=map.coltypes(file_tqi[fileNo],header=T)
temp=csvread(file_tqi[fileNo],coltypes=coltypes,header=T)
print("3.GAGE 4.PRR 6.ALL 8.TWIST 9.SUP")
kind=readline(prompt="kind: ")
kind=as.integer(kind)
kind<<-kind
}
# equipOrNot=readline(prompt="1.equip 2.manual : ")
# equipOrNot=as.integer(equipOrNot)
##################################################################
#12. 장비/인력별 / 틀림별 목표기준,주의기준,보수기준,속도제한기준#
##################################################################
if(equipOrNot==1){
if(kind==3){
criteria=0
criteria_caution=0
criteria_limit=0
}else if(kind==4|kind==5){
criteria=8
criteria_caution=4
criteria_limit=20
}else if(kind==6|kind==7){
criteria=7
criteria_caution=4
criteria_limit=17
}else if(kind==8){
criteria=8
criteria_caution=3
criteria_limit=21
}else{
criteria=10
criteria_caution=3
criteria_limit=30
}
}else{
if(kind==3){
criteria=0
criteria_caution=0
criteria_limit=0
}else if(kind==4|kind==5){
criteria=13
criteria_caution=4
criteria_limit=20
}else if(kind==6|kind==7){
criteria=9
criteria_caution=4
criteria_limit=17
}else if(kind==8){
criteria=10
criteria_caution=3
criteria_limit=21
}else{
criteria=20
criteria_caution=3
criteria_limit=30
}
}
criteria=as.integer(criteria)
criteria_caution=as.numeric(criteria_caution)
criteria<<-criteria
criteria_caution<<-criteria_caution
# criteria_distance=readline(prompt="criteria of distance(m) : ")
###################################
#13. 지적개소 및 속도제한개소 산출#
###################################
alert=temp %>% mutate(speedLimit=ifelse(abs(temp$movingInclude)>=criteria_limit,1,0))
alert=alert %>% select(1,3,5) %>% filter(abs(movingInclude)>=criteria) %>% arrange(distance)
alert1=alert %>% select(1,3,5) %>% filter(abs(movingInclude)>=criteria_caution) %>% arrange(distance)
alert1=alert1 %>% mutate(
A=ifelse(alert1[,2]-c(alert1[1,2],alert1[,2][-length(alert1[,2])])<0,-1,1),
B=ifelse(A*c(1,A[-length(A)])!=1,1,0),
c=ifelse(alert1[,2]<0,-1,1)
)
startA=c(1,which(alert1[,5]==1))
lastA=c(which(alert1[,5]==1)-1,length(alert[,5]))
View(data.frame(startA=c(1,which(alert1[,5]==1)),lastA=c(which(alert1[,5]==1)-1,length(alert[,5]))))
###################
#14. 지적개소 군집#
###################
if(length(alert[,1])!=0){
alert_range=alert %>% mutate(range=ifelse((floor(alert[,1])-c(0,alert[1:(length(alert[,1])-1),1]))<=criteria_distance,1,0))
start=which(alert_range$range==0)
last=c((which(alert_range$range==0)[-1]-1),length(alert[,1]))
##########################################
#15. 군집내 지적개소 갯수 및 속도제한갯수#
##########################################
i=1;column=integer(0);for(i in 1:length(start)){
column[start[i]:last[i]]=i
}
alert=bind_cols(alert,data.frame("column"=column))
alert<<-alert
caution=data.frame(start=alert_range[start,1],
last=alert_range[last,1],
count=
(as.data.frame(unique((alert %>% group_by(column) %>% mutate(NROW(column)))[,c(4,5)])))[,2],
speedLimit=(as.data.frame((alert %>% group_by(column) %>% summarise(sum(speedLimit)))[2]))[,1]
)
########################
#16. 군집별 틀림값 변경#
########################
z=1;for(z in 1:length(caution[,1])){
if(z==1) {
adjustTQI=integer(0);improveTQI=integer(0);indexTQI=integer(0);indexRaw=integer(0)
backup=temp[,2]
}
rownumber=(alert %>% filter(column==z))[,1]
rownames=(temp %>% mutate(rownames=seq(temp[,1])) %>% select(1,rownames) %>% filter(distance %in% rownumber ) )[,2]
temp[rownames,2]=ifelse(temp[rownames,2]>0,criteria_caution,criteria_caution*(-1))
#criteria_duplicate : asdf
if(longLevel==50){
criteria_duplicate=100
}else if(longLevel==200){
criteria_duplicate=400
}else if(longLevel==0){
}
criteria_duplicate<<-criteria_duplicate
#############################
#17. 군집별 이동평균선 변경#
#############################
# 이동평균선 보정
#
# 궤도틀림값 변경 -> 이동평균선 변경 -> TQI변경
# <값 자체> <궤도틀림 기준 앞뒤 고려>
#
# 한 개 틀림값 보정이면 이동평균선도 바뀌기 때문에
# 그 값 이전 100/200 이후 100/200 이동평균선을 바꿔줘야 한다.
# dup -> 100인 이유는 50/200 이동평균선 최소값이 100이어서 그렇다.
dup=1;for(dup in 1:100){
if(dup!=1) duplicate_backup=D
A=ifelse((rownames+dup)>criteria_duplicate&(rownames+dup)<length(temp[,1])-(criteria_duplicate-1),rownames+dup,0)
B=ifelse((rownames-dup)>criteria_duplicate&(rownames-dup)<length(temp[,1])-(criteria_duplicate-1),rownames-dup,0)
AB=c(A,B)
if(dup==1)D=AB
if(dup!=1) D=c(duplicate_backup,AB)
print(paste0(dup,"/",100))
}
D=sort(unique(D))[-1]
########################################
#18. 이동평균선 부분 변경 및 TQI 재산출#
########################################
if(longLevel==50){
temp=temp %>% filter(distance>=startD_50,distance<=lastD_50)
movingInclude_revise=temp[,3]
if(is.na(sum(temp[,2]))) temp[is.na(temp[,2]),2]=0
i=1;for(i in 1:length(D)){
movingInclude_revise[D[i]]=temp[D[i],2]-mean(temp[c((D[i]-100):(D[i]-1),D[i],(D[i]+1):(D[i]+100)),2])
print(paste0("z=",z," ",i,"/",length(D)))
}
}else if(longLevel==200){
temp=temp %>% filter(distance>=startD_100,distance<=lastD_100)
movingInclude_revise=temp[,3]
if(is.na(sum(temp[,2]))) temp[is.na(temp[,2]),2]=0
i=1;for(i in 1:length(D)){
movingInclude_revise[D[i]]=temp[D[i],2]-mean(temp[c((D[i]-400):(D[i]-1),D[i],(D[i]+1):(D[i]+400)),2])
print(paste0("z=",z," ",i,"/",length(D)))
}
}else if(longLevel==0){
movingInclude_revise=temp[,2]
}
TQI_fix=integer(0)
i=1;for(i in 1:(length(range_TQI)-1)){
TQI_fix[i]= sd((temp %>% mutate(adjust=movingInclude_revise) %>% select(1,adjust) %>% filter(distance>=range_TQI[i],distance<range_TQI[i+1]))[,2])
print(paste0(i,"/",(length(range_TQI)-1)))
}
#################################
#19. TQI 개선율 및 우선순위 산출#
#################################
adjustTQI[z]=mean(TQI_fix)
improveTQI[z]=original_TQI-mean(TQI_fix)
indexRaw[z]=(improveTQI[z]/original_TQI)*100
indexTQI[z]=paste0( format( round((improveTQI[z]/original_TQI)*100,2),nsmall=2) , "%")
if(z==length(caution[,1])) {
caution=caution[,c(1:4)]
caution=bind_cols(caution,adjustTQI=adjustTQI,original_TQI=rep(original_TQI,length(caution[,1])),improveTQI=improveTQI,indexTQI=indexTQI)
if(length( (caution %>% filter(speedLimit!=0))[,1] )!=0){
caution_speed<-caution %>% filter(speedLimit!=0)
caution_speed<-caution_speed %>% mutate(priority=rank(desc(caution_speed$indexRaw)))
caution_normal<-caution %>% filter(speedLimit==0)
caution_normal<-caution_normal %>% mutate(priority=length(caution_speed[,1])+rank(desc(caution_normal$indexRaw)))
caution=bind_rows(caution_speed,caution_normal)
}else{
caution<-caution %>% filter(speedLimit==0) %>% mutate(priority=rank(desc(indexRaw)))
}
caution=arrange(caution, priority)
}#fi(z)
temp[,2]=backup
temp<<-temp
}#for(z)
caution_priority<<-caution
caution<<-caution
rownumber<<-rownumber
backup=temp[,2]
backup<<-backup
########################################
#20. ORACLE DB TEMPORARY TABLE RENEWAL #
########################################
try(rs<-dbExecute(conn,"drop table temporary"),
silent=T)
dbHasCompleted(rs)
execCaution=caution
names(execCaution)=NULL
dbWriteTable(conn,"temporary",execCaution[,c(1,2,3,4,8,9)],c("startD","lastD","count","speedlimit","indexTQI","priority"))
dbDisconnect(conn)
}else{
caution=data.frame(start=c(0),last=c(0),count=c(0),speedLimit=c(0),adjustTQI=c(0),original_TQI=c(0),improveTQI=c(0),indexTQI=c(0),priority=c(0))
try(rs<-dbExecute(conn,"drop table temporary"),
silent=T)
dbHasCompleted(rs)
execCaution=caution
names(execCaution)=NULL
dbWriteTable(conn,"temporary",execCaution[,c(1,2,3,4,8,9)],c("startD","lastD","count","speedlimit","indexTQI","priority"))
dbDisconnect(conn)
}
return(caution)
}#function
)#cmpfun
A()
}#function
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.