feat: 외부연계-CCTV고정형/이동형 parsing 반영
parent
f63f22e68d
commit
f58fb508e5
@ -0,0 +1,45 @@
|
|||||||
|
package kr.xit.fims.biz.ec.mapper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.ibatis.session.RowBounds;
|
||||||
|
|
||||||
|
import egovframework.rte.psl.dataaccess.mapper.Mapper;
|
||||||
|
import kr.xit.fims.biz.ec.model.CctvCrackdownDTO;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface IEcCctvCrackdownMapper {
|
||||||
|
List<CctvCrackdownDTO.ExtrlRegltCntc> selectEcExtrlRegltCntcs(final Map<String, Object> paraMap, final RowBounds rowBounds);
|
||||||
|
CctvCrackdownDTO.ExtrlRegltCntc selectEcExtrlRegltCntc(final String extrlRegltCntcId);
|
||||||
|
// List<CtznStmtDTO.CtznStmtDtl> selectEcCtznSttemntDetails(final CtznStmtDTO.Request dto);
|
||||||
|
// CtznStmtDTO.CtznStmtDtl selectEcCtznSttemntDetail(final CtznStmtDTO.Request dto);
|
||||||
|
//
|
||||||
|
int insertEcExtrlRegltCntc(final CctvCrackdownDTO.ExtrlRegltCntc dto);
|
||||||
|
//
|
||||||
|
// int insertEcCtznSttemntDetail(final CtznStmtDTO.CtznStmtDtl dtl);
|
||||||
|
// int updateEcCtznSttemntDetail(final CtznStmtDTO.CtznStmtDtl dtl);
|
||||||
|
// int deleteEcCtznSttemntDetail(final CtznStmtDTO.CtznStmtDtl dtl);
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// List<CtznStmtDTO> selectCtznSttemnts(final Map<String, Object> paraMap, final RowBounds rowBounds);
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// //-----------------------------------------------------
|
||||||
|
// // 단속자료 생성 - 단속 처리
|
||||||
|
// //-----------------------------------------------------
|
||||||
|
// void insertRtRegltFromCtznStmt(final CtznStmtDTO.Request dto);
|
||||||
|
// //-----------------------------------------------------
|
||||||
|
// // 단속자료 생성 - 서손 처리
|
||||||
|
// //-----------------------------------------------------
|
||||||
|
// void insertRtErppFromCtznStmt(final CtznStmtDTO.Request dto);
|
||||||
|
//
|
||||||
|
// void updateStatusAndRegltIdOfEcCtznSttemntDetail(final CtznStmtDTO.Request dto);
|
||||||
|
//
|
||||||
|
// int dragAndDropSaveImg(CmmFileDTO.FileDtl vo);
|
||||||
|
//
|
||||||
|
// int dragAndDropDeleteImg(CmmFileDTO.FileDtl vo);
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// List<CmmFileDTO> dragAndDropIsExists(CmmFileDTO.FileDtl vo);
|
||||||
|
}
|
@ -0,0 +1,490 @@
|
|||||||
|
package kr.xit.fims.biz.ec.model;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.RandomAccessFile;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
|
||||||
|
import kr.xit.framework.support.util.CommUtils;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
public class CctvCrackdownDTO {
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Builder
|
||||||
|
public static class BusOnly {
|
||||||
|
|
||||||
|
// 텍스트size : 1 ~ 7(7)
|
||||||
|
private String textSize;
|
||||||
|
|
||||||
|
// 단속장비 : 8 ~ 12(5)
|
||||||
|
private String regltEquip;
|
||||||
|
|
||||||
|
// 차량속도 : 13 ~ 15(3)
|
||||||
|
private String carSpeed;
|
||||||
|
|
||||||
|
// 차종 : 16 ~ 16(1) - 미사용
|
||||||
|
private String carModel;
|
||||||
|
|
||||||
|
// 도로코드 : 17 ~ 17(1) - 미사용
|
||||||
|
private String roadCode;
|
||||||
|
|
||||||
|
// 단속일자 : 18 ~ 25(8)
|
||||||
|
private String regltDe;
|
||||||
|
|
||||||
|
// 단속시간 : 26 ~ 31(6)
|
||||||
|
private String regltTime;
|
||||||
|
|
||||||
|
// 차량번호 : 32 ~ 43(12)
|
||||||
|
private String vhcleNo;
|
||||||
|
|
||||||
|
// 번호판 X 좌표 : 44 ~ 47(4)
|
||||||
|
private String carNumXPos;
|
||||||
|
|
||||||
|
// 번호판 Y 좌표 : 48 ~ 51(4)
|
||||||
|
private String carNumYPos;
|
||||||
|
|
||||||
|
// 번호판 Width : 52 ~ 55(4)
|
||||||
|
private String carNumWidth;
|
||||||
|
|
||||||
|
// 번호판 Height : 56 ~ 59(4)
|
||||||
|
private String carNumHeight;
|
||||||
|
|
||||||
|
// (미사용) : 60 ~ 60(1)
|
||||||
|
private String skipFld;
|
||||||
|
|
||||||
|
// 위반구분(미사용) : 61 ~ 61(1)
|
||||||
|
private String violtDiv;
|
||||||
|
|
||||||
|
// 위반종류(미사용) : 62 ~ 62(1)
|
||||||
|
private String violtKind;
|
||||||
|
|
||||||
|
// GPS X 좌표 : 62 ~ 84(23)
|
||||||
|
private String gpsX;
|
||||||
|
|
||||||
|
// GPS Y 좌표 : 85 ~ 107(23)
|
||||||
|
private String gpsY;
|
||||||
|
|
||||||
|
// 사진매수(미사용) : 108 ~ 109(2)
|
||||||
|
private String imgCnt;
|
||||||
|
|
||||||
|
// tlcType(미사용) : 110 ~ 110(1)
|
||||||
|
private String tlcType;
|
||||||
|
|
||||||
|
// movingType(미사용) : 111 ~ 111(1)
|
||||||
|
private String movingType;
|
||||||
|
|
||||||
|
// tlcColor(미사용) : 112 ~ 112(1)
|
||||||
|
private String tlcColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Builder
|
||||||
|
public static class ExtrlRegltCntc implements Serializable {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
// 외부 단속 연계 id
|
||||||
|
private String extrlRegltCntcId;
|
||||||
|
private String regltId;
|
||||||
|
private String insttCode;
|
||||||
|
private String sysCode;
|
||||||
|
private String regltSeCode;
|
||||||
|
private String inputSeCode;
|
||||||
|
private String vhcleNo;
|
||||||
|
private String regltDe;
|
||||||
|
private String regltBeginTime;
|
||||||
|
private String regltEndTime;
|
||||||
|
private String regltDongNm;
|
||||||
|
private String regltPlace;
|
||||||
|
private String regltSpeclZoneNm;
|
||||||
|
private String regltEntrpsCode;
|
||||||
|
private String regltEqpmnManageNo;
|
||||||
|
private String violtDtlsNm;
|
||||||
|
private String gpsX;
|
||||||
|
private String gpsY;
|
||||||
|
private String extrlRegltCntcProcessSttus;
|
||||||
|
private String cntcFileNm;
|
||||||
|
private String cntcPhotoFileNm1;
|
||||||
|
private String cntcPhotoFileNm2;
|
||||||
|
private String cntcPhotoFileNm3;
|
||||||
|
private String cntcPhotoFileNm4;
|
||||||
|
private String registDt;
|
||||||
|
private String register;
|
||||||
|
private String updtDt;
|
||||||
|
private String updusr;
|
||||||
|
private String deleteAt;
|
||||||
|
private String deleteResn;
|
||||||
|
private String deleteDt;
|
||||||
|
private String dltr;
|
||||||
|
|
||||||
|
private String pkPrefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Builder
|
||||||
|
public static class Request {
|
||||||
|
private String fileMastrId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 파일업무분류구분코드(ex. Board)
|
||||||
|
*/
|
||||||
|
private String jobSeCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 파일업무ID(example = "BOARD001")
|
||||||
|
* DB pk값 - 파일분류구분코드 + 파일업무ID로 식별 가능
|
||||||
|
*/
|
||||||
|
private String fileJobId;
|
||||||
|
|
||||||
|
private String register;
|
||||||
|
private String extrlRegltCntcId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 업로드 파일 객체
|
||||||
|
*/
|
||||||
|
@JsonIgnore
|
||||||
|
private List<MultipartFile> files;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
|
||||||
|
//String path = "D:\\project_data\\fims\\01. 연계\\02. CCTV\\CCTV 샘플자료\\버스전용차로\\2017072013474126.F0001";
|
||||||
|
String path = "D:\\project_data\\fims\\01. 연계\\02. CCTV\\CCTV 샘플자료\\버스전용차로\\2017072013465031.F0002";
|
||||||
|
|
||||||
|
RandomAccessFile raf = new RandomAccessFile(path,"r");
|
||||||
|
long fileSize = raf.length();
|
||||||
|
System.out.println("fileSize="+fileSize);
|
||||||
|
long pos = 0; //뒤로 부터
|
||||||
|
// while(true) {
|
||||||
|
// raf.seek(pos); //파일 포인터 이동
|
||||||
|
// if(raf.readByte()=='\n') { //해당 위치의 바이트를 읽어 \n 문자와 같은지 검사
|
||||||
|
// break; //같으면 멈춤
|
||||||
|
// }
|
||||||
|
// pos--; //포인터 위치값 감소 (앞으로)
|
||||||
|
// }
|
||||||
|
raf.seek(pos); //\n 문자를 찾은 다음으로 파일 포인터 이동
|
||||||
|
//String line = raf.readLine();
|
||||||
|
|
||||||
|
byte[] buff = new byte[7];
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 7;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[5];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 5;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[3];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 3;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[1];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff, "euc-kr"));
|
||||||
|
pos += 1;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[1];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 1;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[8];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 8;
|
||||||
|
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[6];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 6;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[12];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff, "euc-kr"));
|
||||||
|
pos += 12;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[4];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 4;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[4];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 4;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[4];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 4;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[4];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 4;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[1];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 1;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[1];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 1;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[1];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 1;
|
||||||
|
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[23];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 23;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[23];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 23;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[2];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 2;
|
||||||
|
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[1];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 1;
|
||||||
|
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[1];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 1;
|
||||||
|
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[1];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
System.out.println(new String(buff));
|
||||||
|
pos += 1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// carImageSize
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[7];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
int carImageSize = Integer.parseInt(new String(buff));
|
||||||
|
System.out.println("carImageSize="+carImageSize);
|
||||||
|
pos += 7;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[carImageSize];
|
||||||
|
raf.read(buff);
|
||||||
|
CommUtils.createMutipartFileFromBytes("car.jpg", "d:/data/fims/upload/bus", buff, false);
|
||||||
|
pos += carImageSize;
|
||||||
|
|
||||||
|
// plateImageSize
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[7];
|
||||||
|
|
||||||
|
raf.read(buff);
|
||||||
|
int plateImageSize = Integer.parseInt(new String(buff));
|
||||||
|
System.out.println("plateImageSize="+plateImageSize);
|
||||||
|
pos += 7;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[plateImageSize];
|
||||||
|
raf.read(buff);
|
||||||
|
CommUtils.createMutipartFileFromBytes("carNo.jpg", "d:/data/fims/upload/bus", buff, false);
|
||||||
|
pos += plateImageSize;
|
||||||
|
|
||||||
|
|
||||||
|
// movingImageSize
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[7];
|
||||||
|
//
|
||||||
|
raf.read(buff);
|
||||||
|
int movingImageSize = Integer.parseInt(new String(buff));
|
||||||
|
System.out.println("movingImageSize="+movingImageSize);
|
||||||
|
pos += 7;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[movingImageSize];
|
||||||
|
raf.read(buff);
|
||||||
|
CommUtils.createMutipartFileFromBytes("moving1.jpg", "d:/data/fims/upload/bus", buff, false);
|
||||||
|
pos += movingImageSize;
|
||||||
|
if(fileSize <= pos) return;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[7];
|
||||||
|
//
|
||||||
|
raf.read(buff);
|
||||||
|
movingImageSize = Integer.parseInt(new String(buff));
|
||||||
|
System.out.println("movingImageSize="+movingImageSize);
|
||||||
|
pos += 7;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[movingImageSize];
|
||||||
|
raf.read(buff);
|
||||||
|
CommUtils.createMutipartFileFromBytes("moving2.jpg", "d:/data/fims/upload/bus", buff, false);
|
||||||
|
pos += movingImageSize;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[7];
|
||||||
|
//
|
||||||
|
raf.read(buff);
|
||||||
|
movingImageSize = Integer.parseInt(new String(buff));
|
||||||
|
System.out.println("movingImageSize="+movingImageSize);
|
||||||
|
pos += 7;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[movingImageSize];
|
||||||
|
raf.read(buff);
|
||||||
|
CommUtils.createMutipartFileFromBytes("moving3.jpg", "d:/data/fims/upload/bus", buff, false);
|
||||||
|
pos += movingImageSize;
|
||||||
|
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[7];
|
||||||
|
//
|
||||||
|
raf.read(buff);
|
||||||
|
movingImageSize = Integer.parseInt(new String(buff));
|
||||||
|
System.out.println("movingImageSize="+movingImageSize);
|
||||||
|
pos += 7;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[movingImageSize];
|
||||||
|
raf.read(buff);
|
||||||
|
CommUtils.createMutipartFileFromBytes("moving4.jpg", "d:/data/fims/upload/bus", buff, false);
|
||||||
|
pos += movingImageSize;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[7];
|
||||||
|
//
|
||||||
|
raf.read(buff);
|
||||||
|
movingImageSize = Integer.parseInt(new String(buff));
|
||||||
|
System.out.println("movingImageSize="+movingImageSize);
|
||||||
|
pos += 7;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[movingImageSize];
|
||||||
|
raf.read(buff);
|
||||||
|
CommUtils.createMutipartFileFromBytes("moving5.jpg", "d:/data/fims/upload/bus", buff, false);
|
||||||
|
pos += movingImageSize;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[7];
|
||||||
|
//
|
||||||
|
raf.read(buff);
|
||||||
|
movingImageSize = Integer.parseInt(new String(buff));
|
||||||
|
System.out.println("movingImageSize="+movingImageSize);
|
||||||
|
pos += 7;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[movingImageSize];
|
||||||
|
raf.read(buff);
|
||||||
|
CommUtils.createMutipartFileFromBytes("moving6.jpg", "d:/data/fims/upload/bus", buff, false);
|
||||||
|
pos += movingImageSize;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[7];
|
||||||
|
//
|
||||||
|
raf.read(buff);
|
||||||
|
movingImageSize = Integer.parseInt(new String(buff));
|
||||||
|
System.out.println("movingImageSize="+movingImageSize);
|
||||||
|
pos += 7;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[movingImageSize];
|
||||||
|
raf.read(buff);
|
||||||
|
CommUtils.createMutipartFileFromBytes("moving7.jpg", "d:/data/fims/upload/bus", buff, false);
|
||||||
|
pos += movingImageSize;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[7];
|
||||||
|
//
|
||||||
|
raf.read(buff);
|
||||||
|
movingImageSize = Integer.parseInt(new String(buff));
|
||||||
|
System.out.println("movingImageSize="+movingImageSize);
|
||||||
|
pos += 7;
|
||||||
|
|
||||||
|
raf.seek(pos);
|
||||||
|
buff = new byte[movingImageSize];
|
||||||
|
raf.read(buff);
|
||||||
|
CommUtils.createMutipartFileFromBytes("moving8.jpg", "d:/data/fims/upload/bus", buff, false);
|
||||||
|
pos += movingImageSize;
|
||||||
|
|
||||||
|
System.out.println("pos="+pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,223 +0,0 @@
|
|||||||
package kr.xit.fims.biz.ec.model;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.RandomAccessFile;
|
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.Setter;
|
|
||||||
|
|
||||||
public class CctvDTO {
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Builder
|
|
||||||
public static class BusOnly {
|
|
||||||
|
|
||||||
// 텍스트size : 1 ~ 7(7)
|
|
||||||
private String textSize;
|
|
||||||
|
|
||||||
// 단속장비 : 8 ~ 12(5)
|
|
||||||
private String regltEquip;
|
|
||||||
|
|
||||||
// 차량속도 : 13 ~ 15(3)
|
|
||||||
private String carSpeed;
|
|
||||||
|
|
||||||
// 차종 : 16 ~ 16(1) - 미사용
|
|
||||||
private String carModel;
|
|
||||||
|
|
||||||
// 도로코드 : 17 ~ 17(1) - 미사용
|
|
||||||
private String roadCode;
|
|
||||||
|
|
||||||
// 단속일자 : 18 ~ 25(8)
|
|
||||||
private String regltDeDate;
|
|
||||||
|
|
||||||
// 단속시간 : 26 ~ 31(6)
|
|
||||||
private String regltDeTime;
|
|
||||||
|
|
||||||
// 차량번호 : 32 ~ 43(12)
|
|
||||||
private String carNum;
|
|
||||||
|
|
||||||
// 번호판 X 좌표 : 44 ~ 47(4)
|
|
||||||
private String carNumXPos;
|
|
||||||
|
|
||||||
// 번호판 Y 좌표 : 48 ~ 51(4)
|
|
||||||
private String carNumYPos;
|
|
||||||
|
|
||||||
// 번호판 Width : 52 ~ 55(4)
|
|
||||||
private String carNumWidth;
|
|
||||||
|
|
||||||
// 번호판 Height : 56 ~ 59(4)
|
|
||||||
private String carNumHeight;
|
|
||||||
|
|
||||||
// (미사용) : 60 ~ 60(1)
|
|
||||||
private String skipFld;
|
|
||||||
|
|
||||||
// 위반구분(미사용) : 61 ~ 61(1)
|
|
||||||
private String violtDiv;
|
|
||||||
|
|
||||||
// 위반종류(미사용) : 62 ~ 62(1)
|
|
||||||
private String violtKind;
|
|
||||||
|
|
||||||
// GPS X 좌표 : 62 ~ 84(23)
|
|
||||||
private String gpsX;
|
|
||||||
|
|
||||||
// GPS Y 좌표 : 85 ~ 107(23)
|
|
||||||
private String gpsY;
|
|
||||||
|
|
||||||
// 사진매수(미사용) : 108 ~ 109(2)
|
|
||||||
private String imgCnt;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) throws IOException {
|
|
||||||
|
|
||||||
String path = "D:\\project_data\\fims\\01. 연계\\02. CCTV\\CCTV 샘플자료\\버스전용차로\\2017072013474126.F0001";
|
|
||||||
|
|
||||||
RandomAccessFile file = new RandomAccessFile(path,"r");
|
|
||||||
long fileSize = file.length();
|
|
||||||
long pos = 0; //뒤로 부터
|
|
||||||
// while(true) {
|
|
||||||
// file.seek(pos); //파일 포인터 이동
|
|
||||||
// if(file.readByte()=='\n') { //해당 위치의 바이트를 읽어 \n 문자와 같은지 검사
|
|
||||||
// break; //같으면 멈춤
|
|
||||||
// }
|
|
||||||
// pos--; //포인터 위치값 감소 (앞으로)
|
|
||||||
// }
|
|
||||||
file.seek(pos); //\n 문자를 찾은 다음으로 파일 포인터 이동
|
|
||||||
//String line = file.readLine();
|
|
||||||
|
|
||||||
byte[] buff = new byte[7];
|
|
||||||
file.read(buff);
|
|
||||||
System.out.println(new String(buff));
|
|
||||||
|
|
||||||
file.seek(7);
|
|
||||||
buff = new byte[5];
|
|
||||||
|
|
||||||
file.read(buff);
|
|
||||||
System.out.println(new String(buff));
|
|
||||||
|
|
||||||
file.seek(12);
|
|
||||||
buff = new byte[3];
|
|
||||||
|
|
||||||
file.read(buff);
|
|
||||||
System.out.println(new String(buff));
|
|
||||||
|
|
||||||
file.seek(15);
|
|
||||||
buff = new byte[1];
|
|
||||||
|
|
||||||
file.read(buff);
|
|
||||||
System.out.println(new String(buff, "euc-kr"));
|
|
||||||
|
|
||||||
file.seek(16);
|
|
||||||
buff = new byte[1];
|
|
||||||
|
|
||||||
file.read(buff);
|
|
||||||
System.out.println(new String(buff));
|
|
||||||
|
|
||||||
file.seek(17);
|
|
||||||
buff = new byte[8];
|
|
||||||
|
|
||||||
file.read(buff);
|
|
||||||
System.out.println(new String(buff));
|
|
||||||
|
|
||||||
|
|
||||||
file.seek(25);
|
|
||||||
buff = new byte[6];
|
|
||||||
|
|
||||||
file.read(buff);
|
|
||||||
System.out.println(new String(buff));
|
|
||||||
|
|
||||||
file.seek(31);
|
|
||||||
buff = new byte[12];
|
|
||||||
|
|
||||||
file.read(buff);
|
|
||||||
System.out.println(new String(buff, "euc-kr"));
|
|
||||||
|
|
||||||
file.seek(43);
|
|
||||||
buff = new byte[4];
|
|
||||||
|
|
||||||
file.read(buff);
|
|
||||||
System.out.println(new String(buff));
|
|
||||||
|
|
||||||
file.seek(47);
|
|
||||||
buff = new byte[4];
|
|
||||||
|
|
||||||
file.read(buff);
|
|
||||||
System.out.println(new String(buff));
|
|
||||||
|
|
||||||
file.seek(51);
|
|
||||||
buff = new byte[4];
|
|
||||||
|
|
||||||
file.read(buff);
|
|
||||||
System.out.println(new String(buff));
|
|
||||||
|
|
||||||
file.seek(55);
|
|
||||||
buff = new byte[4];
|
|
||||||
|
|
||||||
file.read(buff);
|
|
||||||
System.out.println(new String(buff));
|
|
||||||
|
|
||||||
file.seek(59);
|
|
||||||
buff = new byte[1];
|
|
||||||
|
|
||||||
file.read(buff);
|
|
||||||
System.out.println(new String(buff));
|
|
||||||
|
|
||||||
file.seek(60);
|
|
||||||
buff = new byte[1];
|
|
||||||
|
|
||||||
file.read(buff);
|
|
||||||
System.out.println(new String(buff));
|
|
||||||
|
|
||||||
file.seek(61);
|
|
||||||
buff = new byte[1];
|
|
||||||
|
|
||||||
file.read(buff);
|
|
||||||
System.out.println(new String(buff));
|
|
||||||
|
|
||||||
|
|
||||||
file.seek(62);
|
|
||||||
buff = new byte[23];
|
|
||||||
|
|
||||||
file.read(buff);
|
|
||||||
System.out.println(new String(buff));
|
|
||||||
|
|
||||||
file.seek(85);
|
|
||||||
buff = new byte[23];
|
|
||||||
|
|
||||||
file.read(buff);
|
|
||||||
System.out.println(new String(buff));
|
|
||||||
|
|
||||||
file.seek(108);
|
|
||||||
buff = new byte[2];
|
|
||||||
|
|
||||||
file.read(buff);
|
|
||||||
System.out.println(new String(buff));
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// BufferedImage image = null;
|
|
||||||
// FileInputStream fis = null;
|
|
||||||
// BufferedInputStream bis = null;
|
|
||||||
//
|
|
||||||
// try {
|
|
||||||
// fis = new FileInputStream(new File(path));
|
|
||||||
// bis = new BufferedInputStream(fis);
|
|
||||||
// image = ImageIO.read(bis);
|
|
||||||
// }catch(Exception e) {
|
|
||||||
// e.printStackTrace();
|
|
||||||
// }finally {
|
|
||||||
// if(bis != null) bis.close();
|
|
||||||
// if(fis != null) fis.close();
|
|
||||||
// }
|
|
||||||
// System.out.println(image);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,195 @@
|
|||||||
|
package kr.xit.fims.biz.ec.service;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import org.apache.commons.collections4.ListUtils;
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
|
import org.apache.ibatis.session.RowBounds;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import kr.xit.fims.biz.FimsConst;
|
||||||
|
import kr.xit.fims.biz.ec.mapper.IEcCctvCrackdownMapper;
|
||||||
|
import kr.xit.fims.biz.ec.mapper.IEcCtznSttemntMapper;
|
||||||
|
import kr.xit.fims.biz.ec.model.CctvCrackdownDTO;
|
||||||
|
import kr.xit.framework.biz.cmm.model.CmmFileDTO;
|
||||||
|
import kr.xit.framework.biz.cmm.service.ICmmFileService;
|
||||||
|
import kr.xit.framework.support.exception.BizRuntimeException;
|
||||||
|
import kr.xit.framework.support.util.constants.MessageKey;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Service
|
||||||
|
public class EcCctvCrackdownService implements IEcCctvCrackdownService {
|
||||||
|
|
||||||
|
@Value("#{prop['file.upload.root']}")
|
||||||
|
private String uploadRoot;
|
||||||
|
|
||||||
|
@Value("#{prop['file.upload.cctv-fix.path']}")
|
||||||
|
private String uploadCctvFixPath;
|
||||||
|
|
||||||
|
@Value("#{prop['file.upload.cctv-drv.path']}")
|
||||||
|
private String uploadCctvDrvPath;
|
||||||
|
|
||||||
|
// @Value("#{prop['file.rcv.root']}")
|
||||||
|
// private String rcvRoot;
|
||||||
|
//
|
||||||
|
// @Value("#{prop['file.rcv.natl-newspaper.path']}")
|
||||||
|
// private String rcvNewsPaperPath;
|
||||||
|
|
||||||
|
private final IEcCctvCrackdownMapper mapper;
|
||||||
|
private final IEcCtznSttemntMapper ctznSttemntMapper;
|
||||||
|
|
||||||
|
private final ICmmFileService cmmFileService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(readOnly = true)
|
||||||
|
public List<CctvCrackdownDTO.ExtrlRegltCntc> findExtrlRegltCntcs(final Map<String, Object> paraMap, final RowBounds rowBounds) {
|
||||||
|
return mapper.selectEcExtrlRegltCntcs(paraMap, rowBounds);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(readOnly = true)
|
||||||
|
public CctvCrackdownDTO.ExtrlRegltCntc findExtrlRegltCntc(final String extrlRegltCntcId) {
|
||||||
|
return mapper.selectEcExtrlRegltCntc(extrlRegltCntcId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 시민신고 xml 데이타 업무테이블 insert
|
||||||
|
* 1) ec_esb_interface 테이블 insert
|
||||||
|
* 2) tb_ec_ctzn_sttemnt insert
|
||||||
|
* tb_ex_ctzn_sttemnt_detail insert
|
||||||
|
* 3) tb_cmm_file_mastr insert
|
||||||
|
* tb_cmm_file_detail insert
|
||||||
|
* @param dto
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("ConstantConditions")
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public void saveCctvCrackdownDatas(final CctvCrackdownDTO.Request dto) {
|
||||||
|
// 단속정보메타 1 + 이미지파일 4 = 5개로 구성
|
||||||
|
if(dto.getFiles().size() % 5 != 0){
|
||||||
|
throw BizRuntimeException.create(MessageKey.CUSTOM_MSG, "단속정보[파일]가 부정확 합니다\n다시 확인해 주세요.");
|
||||||
|
}
|
||||||
|
final Comparator<MultipartFile> comp = (mf1, mf2) -> String.CASE_INSENSITIVE_ORDER.compare(mf1.getOriginalFilename(), mf2.getOriginalFilename());
|
||||||
|
List<MultipartFile> sortedFileList = dto.getFiles().stream()
|
||||||
|
.sorted(comp)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
//Arrays.copyOfRange(sortedFileList.toArray(), 0, 4);
|
||||||
|
|
||||||
|
List<List<MultipartFile>> listByMd = ListUtils.partition(sortedFileList, 5);
|
||||||
|
|
||||||
|
for(int idx = 0; idx < listByMd.size(); idx++){
|
||||||
|
List<MultipartFile> mfList = listByMd.get(idx);
|
||||||
|
|
||||||
|
MultipartFile mf = mfList.get(0);
|
||||||
|
String[] txtNames = mf.getOriginalFilename().split("[.]");
|
||||||
|
if(txtNames.length != 2 || !Objects.equals("txt", txtNames[1].toLowerCase()))
|
||||||
|
throw BizRuntimeException.create(MessageKey.CUSTOM_MSG, String.format("[%s]%s", txtNames[0], "의 단속정보[파일]가 없습니다."));
|
||||||
|
|
||||||
|
String[] mdInfos = txtNames[0].split("_");
|
||||||
|
|
||||||
|
|
||||||
|
List<String> records = new ArrayList<>();
|
||||||
|
try(InputStream inputStream = mf.getInputStream();){
|
||||||
|
IOUtils.readLines(inputStream, "euc-kr")
|
||||||
|
.forEach(s -> records.add(s));
|
||||||
|
} catch (IOException e) {
|
||||||
|
// handle exception
|
||||||
|
}
|
||||||
|
CctvCrackdownDTO.ExtrlRegltCntc extrRegltDTO = getExtrlRegltCntcDTO(txtNames[0], records);
|
||||||
|
if(records.size() >= 3){
|
||||||
|
extrRegltDTO.setPkPrefix(FimsConst.PkPrefix.CDV.getCode());
|
||||||
|
}else{
|
||||||
|
extrRegltDTO.setPkPrefix(FimsConst.PkPrefix.CFV.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
mapper.insertEcExtrlRegltCntc(extrRegltDTO);
|
||||||
|
|
||||||
|
|
||||||
|
List<MultipartFile> cpListMf = new ArrayList<>(mfList);
|
||||||
|
//List<MultipartFile> cpListMf = new ArrayList<>(mfList.size());
|
||||||
|
//Collections.copy(cpListMf, mfList);
|
||||||
|
cpListMf.remove(0);
|
||||||
|
|
||||||
|
cmmFileService.saveFiles(getFileMst(extrRegltDTO.getPkPrefix(), extrRegltDTO.getExtrlRegltCntcId()), cpListMf);
|
||||||
|
|
||||||
|
|
||||||
|
// CmmFileDTO.FileDtl fileDtl = CmmFileDTO.FileDtl.builder()
|
||||||
|
// .fileMastrId(CommUtils.getStringFromUUID())
|
||||||
|
// .fileCours("/cctv/2022/1227")
|
||||||
|
// .build();
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// cmmFileService.saveAddFileDtl(fileDtl, cpListMf, false);
|
||||||
|
//mfList = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// metaFileName : 20101224121055000_014_001_0
|
||||||
|
// yyyyMMddHHmmssTTT_업체코드_장비코드
|
||||||
|
//
|
||||||
|
// 주행형 : 서울11가1111,역삼동,국민은행앞,주정차위반,어린이보호구역,121010,122400
|
||||||
|
// 127.482432
|
||||||
|
// 37.362931
|
||||||
|
// 고정형 : 서울11가1111,역삼동,국민은행앞,주정차위반,어린이보호구역,121010,122400
|
||||||
|
//
|
||||||
|
// 차량번호,단속동명,단속장소명,법규,어린이보호구역,단속시작시간,단속종료시간
|
||||||
|
// gpsX
|
||||||
|
// gpsY
|
||||||
|
private CctvCrackdownDTO.ExtrlRegltCntc getExtrlRegltCntcDTO(String metaFileName, List<String> metaFileInfos){
|
||||||
|
String[] metaFileNames = metaFileName.split("_");
|
||||||
|
String[] mdInfos = metaFileInfos.get(0).split(",");
|
||||||
|
|
||||||
|
return CctvCrackdownDTO.ExtrlRegltCntc.builder()
|
||||||
|
.vhcleNo(mdInfos[0])
|
||||||
|
.regltDongNm(mdInfos[1])
|
||||||
|
.regltPlace(mdInfos[2])
|
||||||
|
//.법규
|
||||||
|
//.어린이보호구역
|
||||||
|
.regltBeginTime(mdInfos[5])
|
||||||
|
.regltEndTime(mdInfos[6])
|
||||||
|
.gpsX(metaFileInfos.size() >= 3? metaFileInfos.get(1).trim() : null)
|
||||||
|
.gpsY(metaFileInfos.size() >= 3? metaFileInfos.get(2).trim() : null)
|
||||||
|
|
||||||
|
.regltDe(metaFileNames[0].substring(0,8))
|
||||||
|
.regltEntrpsCode(metaFileNames[1])
|
||||||
|
.regltEqpmnManageNo(metaFileNames[2])
|
||||||
|
.register(getUserUniqId())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
private CmmFileDTO.FileMst getFileMst(String pkPrefix, String fileJobId) {
|
||||||
|
return CmmFileDTO.FileMst.builder()
|
||||||
|
.jobSeCode(
|
||||||
|
Objects.equals(pkPrefix, FimsConst.PkPrefix.CDV.getCode())?
|
||||||
|
FimsConst.FileJobSeCode.CCTV_DRV.getCode()
|
||||||
|
: FimsConst.FileJobSeCode.CCTV_FIX.getCode())
|
||||||
|
.fileJobId(fileJobId)
|
||||||
|
.uploadeJobPath(Objects.equals(pkPrefix, FimsConst.PkPrefix.CDV.getCode())?
|
||||||
|
uploadCctvDrvPath
|
||||||
|
: uploadCctvFixPath)
|
||||||
|
.fileDirPath(FimsConst.FileDirDepth.DAY.getCode())
|
||||||
|
.cmmFileDtls(new ArrayList<>())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package kr.xit.fims.biz.ec.service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.ibatis.session.RowBounds;
|
||||||
|
|
||||||
|
import kr.xit.fims.biz.ec.model.CctvCrackdownDTO;
|
||||||
|
import kr.xit.framework.core.utils.XitCmmnUtil;
|
||||||
|
|
||||||
|
public interface IEcCctvCrackdownService {
|
||||||
|
|
||||||
|
List<CctvCrackdownDTO.ExtrlRegltCntc> findExtrlRegltCntcs(final Map<String, Object> paraMap, final RowBounds rowBounds);
|
||||||
|
CctvCrackdownDTO.ExtrlRegltCntc findExtrlRegltCntc(final String extrlRegltCntcId);
|
||||||
|
|
||||||
|
void saveCctvCrackdownDatas(final CctvCrackdownDTO.Request dto);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
default String getUserUniqId(){
|
||||||
|
return XitCmmnUtil.getUserUniqId();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,122 @@
|
|||||||
|
package kr.xit.fims.biz.ec.web;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
|
||||||
|
import kr.xit.fims.biz.FimsConst;
|
||||||
|
import kr.xit.fims.biz.ec.model.CctvCrackdownDTO;
|
||||||
|
import kr.xit.fims.biz.ec.service.IEcCctvCrackdownService;
|
||||||
|
import kr.xit.framework.biz.cmm.model.CmmFileDTO;
|
||||||
|
import kr.xit.framework.biz.cmm.service.ICmmFileService;
|
||||||
|
import kr.xit.framework.core.constants.FrameworkConstants;
|
||||||
|
import kr.xit.framework.core.model.ResultResponse;
|
||||||
|
import kr.xit.framework.core.utils.fileExplorer.XitFileExplorerUtil;
|
||||||
|
import kr.xit.framework.core.utils.fileExplorer.function.DirectorySearch;
|
||||||
|
import kr.xit.framework.support.exception.BizRuntimeException;
|
||||||
|
import kr.xit.framework.support.mybatis.MybatisUtils;
|
||||||
|
import kr.xit.framework.support.util.AjaxMessageMapRenderer;
|
||||||
|
import kr.xit.framework.support.util.constants.MessageKey;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Controller
|
||||||
|
@RequestMapping(value = "/fims/biz/ec")
|
||||||
|
public class EcCctvCrackdownController {
|
||||||
|
@Value("#{prop['file.rcv.root']}")
|
||||||
|
private String fileRcvRoot;
|
||||||
|
|
||||||
|
@Value("#{prop['file.rcv.busonly-cctv.path']}")
|
||||||
|
private String rcvBusonlyCctvPath;
|
||||||
|
|
||||||
|
private final IEcCctvCrackdownService service;
|
||||||
|
private final ICmmFileService fileService;
|
||||||
|
|
||||||
|
|
||||||
|
@RequestMapping(value = "/ecCctvCrackdownMgtForm")
|
||||||
|
public void ecCctvCrackdownMgtForm(){
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/ecCctvCrackdownFileSelPopup")
|
||||||
|
public ModelAndView ecCctvCrackdownFileSelPopup(){
|
||||||
|
ModelAndView mav = new ModelAndView(FimsConst.FIMS_JSP_BASE_PATH +"ec/ecCctvCrackdownFileSelPopup.popup");
|
||||||
|
//mav.addObject("dirPath", fileRcvRoot + rcvBusonlyCctvPath);
|
||||||
|
return mav;
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/ecCctvCrackdownPopup")
|
||||||
|
public ModelAndView ecCctvCrackdownPopup(final String extrlRegltCntcId, final String regltSeCode){
|
||||||
|
ModelAndView mav = new ModelAndView(FimsConst.FIMS_JSP_BASE_PATH +"ec/ecCctvCrackdownPopup.popup");
|
||||||
|
|
||||||
|
String fileJobSeCode = getFileJobSeCode(regltSeCode);
|
||||||
|
mav.addObject("extrlRegltCntcDTO", service
|
||||||
|
.findExtrlRegltCntc(extrlRegltCntcId));
|
||||||
|
mav.addObject("attchFiles", fileService.findFilesByJobSeCodeAndJobId(
|
||||||
|
CmmFileDTO.FileMst.builder()
|
||||||
|
.jobSeCode(fileJobSeCode)
|
||||||
|
.fileJobId(extrlRegltCntcId)
|
||||||
|
.build()));
|
||||||
|
return mav;
|
||||||
|
}
|
||||||
|
@RequestMapping(value = "/findCctvCrackdownFiles")
|
||||||
|
public ModelAndView findCctvCrackdownFiles(final String dirPath){
|
||||||
|
|
||||||
|
XitFileExplorerUtil explorer = new XitFileExplorerUtil(new DirectorySearch(dirPath));
|
||||||
|
return ResultResponse.of(
|
||||||
|
explorer.getList().stream()
|
||||||
|
.filter(m->"Y".equals(m.get("isFile")))
|
||||||
|
.collect(Collectors.toList())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = "/saveCctvCrackdownDatas")
|
||||||
|
public ModelAndView saveCctvCrackdownDatas(final CctvCrackdownDTO.Request dto) {
|
||||||
|
ModelAndView mav = new ModelAndView(FrameworkConstants.JSON_VIEW);
|
||||||
|
service.saveCctvCrackdownDatas(dto);
|
||||||
|
|
||||||
|
AjaxMessageMapRenderer.success(mav, MessageKey.CMM_SUCCESS);
|
||||||
|
return mav;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping(value = "/findExtrlRegltCntcs")
|
||||||
|
public ModelAndView findExtrlRegltCntcs(@RequestParam final Map<String,Object> paraMap) {
|
||||||
|
return ResultResponse.of(service.findExtrlRegltCntcs(paraMap, MybatisUtils.getPagingInfo(paraMap)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping("/findExtrlRegltCntcAttchFiles")
|
||||||
|
public ModelAndView findExtrlRegltCntcAttchFiles(final String extrlRegltCntcId, final String regltSeCode) {
|
||||||
|
return ResultResponse.of(
|
||||||
|
fileService.findFilesByJobSeCodeAndJobId(
|
||||||
|
CmmFileDTO.FileMst.builder()
|
||||||
|
.jobSeCode(getFileJobSeCode(regltSeCode))
|
||||||
|
.fileJobId(extrlRegltCntcId)
|
||||||
|
.build()).stream()
|
||||||
|
.filter(dtl -> !Objects.equals("png", dtl.getFileExtsn()))
|
||||||
|
.collect(Collectors.toList())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getFileJobSeCode(String regltSeCode) {
|
||||||
|
// 01 - 고정형CCTV
|
||||||
|
if(Objects.equals(regltSeCode, "01"))//FimsConst.FileJobSeCode.CCTV_FIX))
|
||||||
|
return FimsConst.FileJobSeCode.CCTV_FIX.getCode();
|
||||||
|
// 02 - 주행형CCTV
|
||||||
|
if(Objects.equals(regltSeCode, "02"))//FimsConst.FileJobSeCode.CCTV_DRV))
|
||||||
|
return FimsConst.FileJobSeCode.CCTV_DRV.getCode();
|
||||||
|
// 03 - 버스장착형CCTV
|
||||||
|
if(Objects.equals(regltSeCode, "03"))//FimsConst.FileJobSeCode.BUS_ONLY))
|
||||||
|
return FimsConst.FileJobSeCode.BUS_ONLY.getCode();
|
||||||
|
|
||||||
|
throw BizRuntimeException.create(MessageKey.CUSTOM_MSG, "데이타 오류[파일정보를 확인해 주세요");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,111 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
|
||||||
|
<mapper namespace="kr.xit.fims.biz.ec.mapper.IEcCctvCrackdownMapper">
|
||||||
|
|
||||||
|
<!-- *************************************************************************************************************
|
||||||
|
* tb_ec_extrl_reglt_cntc : 외부단속연계
|
||||||
|
************************************************************************************************************** -->
|
||||||
|
<sql id="sqlEcExtrlRegltCntc">
|
||||||
|
SELECT extrl_reglt_cntc_id
|
||||||
|
, reglt_id
|
||||||
|
, instt_code
|
||||||
|
, sys_code
|
||||||
|
, reglt_se_code
|
||||||
|
, input_se_code
|
||||||
|
, vhcle_no
|
||||||
|
, reglt_de
|
||||||
|
, reglt_begin_time
|
||||||
|
, reglt_end_time
|
||||||
|
, reglt_dong_nm
|
||||||
|
, reglt_place
|
||||||
|
, reglt_specl_zone_nm
|
||||||
|
, reglt_entrps_code
|
||||||
|
, reglt_eqpmn_manage_no
|
||||||
|
, violt_dtls_nm
|
||||||
|
, gps_x
|
||||||
|
, gps_y
|
||||||
|
, extrl_reglt_cntc_process_sttus
|
||||||
|
, cntc_file_nm
|
||||||
|
, cntc_photo_file_nm_1
|
||||||
|
, cntc_photo_file_nm_2
|
||||||
|
, cntc_photo_file_nm_3
|
||||||
|
, cntc_photo_file_nm_4
|
||||||
|
, delete_at
|
||||||
|
, delete_resn
|
||||||
|
, delete_dt
|
||||||
|
, dltr
|
||||||
|
, regist_dt
|
||||||
|
, register
|
||||||
|
, updt_dt
|
||||||
|
, updusr
|
||||||
|
FROM tb_ec_extrl_reglt_cntc
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
<select id="selectEcExtrlRegltCntcs" resultType="kr.xit.fims.biz.ec.model.CctvCrackdownDTO$ExtrlRegltCntc">
|
||||||
|
/* ec-extrl-reglt-cntc-mysql-mapper|selectEcExtrlRegltCntcs-외부연계 목록 조회|julim */
|
||||||
|
<include refid="sqlEcExtrlRegltCntc"/>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectEcExtrlRegltCntc" resultType="kr.xit.fims.biz.ec.model.CctvCrackdownDTO$ExtrlRegltCntc">
|
||||||
|
/* ec-extrl-reglt-cntc-mysql-mapper|selectEcExtrlRegltCntc-외부연계 정보 조회|julim */
|
||||||
|
<include refid="sqlEcExtrlRegltCntc"/>
|
||||||
|
WHERE extrl_reglt_cntc_id = #{extrlRegltCntcId}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<insert id="insertEcExtrlRegltCntc">
|
||||||
|
/* ec-extrl-reglt-cntc-mysql-mapper|insertEcExtrlRegltCntc-외부연계 정보 등록|julim */
|
||||||
|
<selectKey resultType="string" keyProperty="extrlRegltCntcId" order="BEFORE">
|
||||||
|
SELECT fn_get_key_seq(#{pkPrefix}, 9)
|
||||||
|
</selectKey>
|
||||||
|
INSERT
|
||||||
|
INTO tb_ec_extrl_reglt_cntc (
|
||||||
|
extrl_reglt_cntc_id
|
||||||
|
, reglt_id
|
||||||
|
, instt_code
|
||||||
|
, sys_code
|
||||||
|
, reglt_se_code
|
||||||
|
, input_se_code
|
||||||
|
, vhcle_no
|
||||||
|
, reglt_de
|
||||||
|
, reglt_begin_time
|
||||||
|
, reglt_end_time
|
||||||
|
, reglt_dong_nm
|
||||||
|
, reglt_place
|
||||||
|
, reglt_specl_zone_nm
|
||||||
|
, reglt_entrps_code
|
||||||
|
, reglt_eqpmn_manage_no
|
||||||
|
, violt_dtls_nm
|
||||||
|
, gps_x
|
||||||
|
, gps_y
|
||||||
|
, extrl_reglt_cntc_process_sttus
|
||||||
|
, delete_at
|
||||||
|
, regist_dt
|
||||||
|
, register
|
||||||
|
) VALUES (
|
||||||
|
#{extrlRegltCntcId}
|
||||||
|
, #{regltId}
|
||||||
|
, #{insttCode}
|
||||||
|
, #{sysCode}
|
||||||
|
, (SELECT code FROM xit_cmmn_detail_code WHERE code_id = 'FIM002' AND etc_1 = #{pkPrefix})
|
||||||
|
, #{inputSeCode}
|
||||||
|
, #{vhcleNo}
|
||||||
|
, #{regltDe}
|
||||||
|
, #{regltBeginTime}
|
||||||
|
, #{regltEndTime}
|
||||||
|
, #{regltDongNm}
|
||||||
|
, #{regltPlace}
|
||||||
|
, #{regltSpeclZoneNm}
|
||||||
|
, #{regltEntrpsCode}
|
||||||
|
, #{regltEqpmnManageNo}
|
||||||
|
, #{violtDtlsNm}
|
||||||
|
, #{gpsX}
|
||||||
|
, #{gpsY}
|
||||||
|
, #{extrlRegltCntcProcessSttus}
|
||||||
|
, 'N'
|
||||||
|
, DATE_FORMAT(NOW(), '%Y%m%d%H%i%s')
|
||||||
|
, #{register}
|
||||||
|
)
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
</mapper>
|
@ -0,0 +1,239 @@
|
|||||||
|
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||||
|
<%@ include file="/WEB-INF/jsp/framework/taglibs.jsp" %>
|
||||||
|
|
||||||
|
<div class="popup" style="min-width: 100%;">
|
||||||
|
<div class="popup_inner" style="max-width: 800px;">
|
||||||
|
<p class="pop_title">CCTV 단속 자료 선택</p>
|
||||||
|
<form name="frmSearch" id="frmSearch">
|
||||||
|
<div class="search r2">
|
||||||
|
<table>
|
||||||
|
<caption>검색조건</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 600px;"/>
|
||||||
|
<col>
|
||||||
|
<col/>
|
||||||
|
<col/>
|
||||||
|
<col/>
|
||||||
|
<col/>
|
||||||
|
<col/>
|
||||||
|
</colgroup>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label for="folder">파일 경로 선택</label>
|
||||||
|
<%-- <input id="dirPath" name="dirPath" type="text" size="200" value="<c:out value='${dirPath}'/>" title="검색" class="w_fix04"/>--%>
|
||||||
|
|
||||||
|
<input id="folder" type="file" webkitdirectory directory multiple="false" style="display:none" />
|
||||||
|
<h2>Selected Files</h2>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
<%-- <td colspan="6">--%>
|
||||||
|
<%-- <input type="button" id="btnSearch" class="btn_search" title="검색" value="검색" />--%>
|
||||||
|
<%-- </td>--%>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<div class="popup_btn">
|
||||||
|
<span class="fll">
|
||||||
|
<div class="list clearfix" id="totCnt">전체 ㅣ <span>0</span></div>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div id="grid"></div>
|
||||||
|
<div class="popup_btn">
|
||||||
|
<span class="flr p_flr">
|
||||||
|
<a href="#" class="btn blue" id="btnRegist">파일 처리</a>
|
||||||
|
<a href="#" class="btn lightgray" id="btnClose" onclick="window.close(); return false;">닫기</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<!-- //등록버튼 -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- //popup -->
|
||||||
|
|
||||||
|
<script type="text/javaScript">
|
||||||
|
/**************************************************************************
|
||||||
|
* Global Variable
|
||||||
|
**************************************************************************/
|
||||||
|
let GRID = null;
|
||||||
|
let arrFiles = [];
|
||||||
|
|
||||||
|
/* *******************************
|
||||||
|
* Biz function
|
||||||
|
******************************* */
|
||||||
|
const fnBiz = {
|
||||||
|
fileSelect: (e) => {
|
||||||
|
const output = document.querySelector("ul");
|
||||||
|
const files = e.target.files;
|
||||||
|
const arrFile = [];
|
||||||
|
|
||||||
|
for (let i=0; i<files.length; i++) {
|
||||||
|
const item = document.createElement("li");
|
||||||
|
item.innerHTML = files[i].webkitRelativePath;
|
||||||
|
output.appendChild(item);
|
||||||
|
arrFile.push({
|
||||||
|
filePath: '',
|
||||||
|
fileNm: files[i].name,
|
||||||
|
fileType: files[i].type,
|
||||||
|
fileSize: files[i].size,
|
||||||
|
//lastModified: files[i].lastModified
|
||||||
|
lastModified: files[i].lastModifiedDate
|
||||||
|
})
|
||||||
|
arrFiles.push(files[i]);
|
||||||
|
}
|
||||||
|
GRID.resetData(arrFile);
|
||||||
|
}
|
||||||
|
,search: () => {
|
||||||
|
GRID.reloadData();
|
||||||
|
//FIXME : onGridUpdated
|
||||||
|
GRID.on('onGridUpdated', (ev) => {
|
||||||
|
console.log('%%%%%%%%%%%%%>>>>>>>',ev)
|
||||||
|
}) // 그리드 레이아웃 새로고침 (로드가 다 되지 않는 경우 그리드가 흰색 화면으로 출력될 때가 있다.))
|
||||||
|
}
|
||||||
|
,add: () => {
|
||||||
|
const arrChecks = GRID.getCheckedRows();
|
||||||
|
|
||||||
|
if(arrChecks.length===0) {
|
||||||
|
alert("등록[변경]할 목록을 선택하세요.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = {
|
||||||
|
filePath: $('#dirPath').val()
|
||||||
|
,xmlFileInfoList: arrChecks.map((row) => {
|
||||||
|
return {fileNm: row.fileNm, fileType: row.fileType, fileSize: row.fileSize}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const formData = new FormData();
|
||||||
|
arrFiles.forEach((f)=> {
|
||||||
|
formData.append("files", f)
|
||||||
|
})
|
||||||
|
//formData.append("files", arrFiles)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(confirm("등록 하시겠습니까?")) {
|
||||||
|
$.ajax({
|
||||||
|
type: 'post'
|
||||||
|
,enctype: "multipart/form-data"
|
||||||
|
,url: '<c:url value="/fims/biz/ec/saveCctvCrackdownDatas.do"/>'
|
||||||
|
,data: formData
|
||||||
|
,processData: false
|
||||||
|
,contentType: false
|
||||||
|
,success: (res) => {
|
||||||
|
if(res){
|
||||||
|
alert(res.message);
|
||||||
|
fnBiz.search();
|
||||||
|
}
|
||||||
|
//fnBiz.search();
|
||||||
|
}
|
||||||
|
,error: (xhr, status, err) => {
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* event
|
||||||
|
**************************************************************************/
|
||||||
|
$(() => {
|
||||||
|
$('#folder').on('change', function(e) {
|
||||||
|
fnBiz.fileSelect(e)
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#btnSearch').on('click', () => fnBiz.search());
|
||||||
|
|
||||||
|
$('#btnRegist').on('click', () => {
|
||||||
|
fnBiz.add();
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
/* *******************************
|
||||||
|
* Grid
|
||||||
|
******************************* */
|
||||||
|
const initGrid = () => {
|
||||||
|
const gridColumns = [
|
||||||
|
{
|
||||||
|
header: '경로',
|
||||||
|
name: 'filePath',
|
||||||
|
hidden: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
header: '이름',
|
||||||
|
name: 'fileNm',
|
||||||
|
width: 420,
|
||||||
|
//minWidth: 250,
|
||||||
|
sortingType: 'desc',
|
||||||
|
sortable: true,
|
||||||
|
filter: 'select' //fiter 옵션(select/text/number/date/.. 등이 있으며 설정방법은 상이하므로 사이트 참조)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
header: '타입',
|
||||||
|
name: 'fileType',
|
||||||
|
width: 30,
|
||||||
|
align: 'center',
|
||||||
|
sortable: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
header: '크기',
|
||||||
|
name: 'fileSize',
|
||||||
|
width: 80,
|
||||||
|
sortable: true,
|
||||||
|
align: 'right',
|
||||||
|
formatter({value}){
|
||||||
|
return new Intl.NumberFormat('ko').format(value);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
header: '생성일시',
|
||||||
|
name: 'lastModified',
|
||||||
|
width: 120,
|
||||||
|
sortable: true,
|
||||||
|
align: 'center',
|
||||||
|
formatter({value}){
|
||||||
|
//return setDateTimeFmt(value);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
const gridOptions = {
|
||||||
|
el: 'grid',
|
||||||
|
rowHeaders: ['rowNum', 'checkbox'],
|
||||||
|
columns: gridColumns,
|
||||||
|
//FIXME : 페이징 미사용시
|
||||||
|
//페이지처리 hide
|
||||||
|
pagination: false,
|
||||||
|
pageOptions: null,
|
||||||
|
// pageOptions: {
|
||||||
|
// useClient: true,
|
||||||
|
// perPage: 100
|
||||||
|
// },
|
||||||
|
columnOptions: {
|
||||||
|
frozenCount: 1
|
||||||
|
},
|
||||||
|
bodyHeight: 400
|
||||||
|
};
|
||||||
|
|
||||||
|
const gridDatasource = { //DataSource
|
||||||
|
initialRequest: false
|
||||||
|
};
|
||||||
|
|
||||||
|
GRID = TuiGrid.of(gridOptions, gridDatasource, (ev) => {
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* initialize
|
||||||
|
**************************************************************************/
|
||||||
|
$(document).ready(function(){
|
||||||
|
initGrid();
|
||||||
|
});
|
||||||
|
</script>
|
@ -0,0 +1,204 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||||
|
<%@ include file="/WEB-INF/jsp/framework/taglibs.jsp" %>
|
||||||
|
|
||||||
|
<form id="frmSearch" name="frmSearch">
|
||||||
|
<div class="search r2">
|
||||||
|
<table>
|
||||||
|
<caption>검색조건</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 400px;"/>
|
||||||
|
<col/>
|
||||||
|
<col/>
|
||||||
|
<col/>
|
||||||
|
<col/>
|
||||||
|
<col/>
|
||||||
|
<col/>
|
||||||
|
</colgroup>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5">
|
||||||
|
<label for="sysCode">시스템 구분</label>
|
||||||
|
<code:select codeId="FIM001" defaultSelect="PVS" id="sysCode" name="sysCode" title="시스템구분" cls="selectBox" alt="selectBox tag" disabled="true"/>
|
||||||
|
</td>
|
||||||
|
<td colspan="6">
|
||||||
|
<input type="button" id="btnSearch" class="btn_search" title="검색" value="검색"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<!-- //검색 -->
|
||||||
|
|
||||||
|
<div class="page_btn">
|
||||||
|
<span class="fll">
|
||||||
|
<div class="list clearfix" id="totCnt">전체 ㅣ <span></span></div>
|
||||||
|
</span>
|
||||||
|
<span class="flr">
|
||||||
|
<a href="#" class="btn darkgray" id="btnRegist" title="템플릿 등록">등록</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<!-- //버튼 및 페이지정보 -->
|
||||||
|
|
||||||
|
<!-- 데이터 출력 -->
|
||||||
|
<div id="grid"></div>
|
||||||
|
|
||||||
|
<script type="text/javaScript">
|
||||||
|
/**************************************************************************
|
||||||
|
* Global Variable
|
||||||
|
**************************************************************************/
|
||||||
|
let GRID = null;
|
||||||
|
var callbackSearch = () => fnBiz.search();
|
||||||
|
|
||||||
|
|
||||||
|
/* *******************************
|
||||||
|
* Biz function
|
||||||
|
******************************* */
|
||||||
|
const fnBiz = {
|
||||||
|
search: () => {
|
||||||
|
GRID.reloadData();
|
||||||
|
}
|
||||||
|
,pagePopup: function(flag, params){
|
||||||
|
let url;
|
||||||
|
let popTitle;
|
||||||
|
let popOption;
|
||||||
|
switch (flag) {
|
||||||
|
case "detail":
|
||||||
|
url = '<c:url value="/fims/biz/ec/ecCctvCrackdownPopup.do"/>';
|
||||||
|
popOption = {width: 1000, height:900};
|
||||||
|
popTitle = "외부연계 데이타 상세";
|
||||||
|
break;
|
||||||
|
case "file":
|
||||||
|
url = '<c:url value="/fims/biz/ec/ecCctvCrackdownFileSelPopup.do"/>';
|
||||||
|
popOption = {width: 900, height:750};
|
||||||
|
popTitle = "외부연계 데이타 선택";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CmmPopup.open(url, params, popOption, popTitle);
|
||||||
|
}
|
||||||
|
,onClickGrid: function(props){
|
||||||
|
const rowData = props.grid.getRow(props.rowKey);
|
||||||
|
fnBiz.pagePopup('detail', {extrlRegltCntcId: rowData.extrlRegltCntcId, regltSeCode: rowData.regltSeCode});
|
||||||
|
}
|
||||||
|
// ,onSearchChange: () => {
|
||||||
|
// if($('#searchCondition').val() === 'tmplatSeCode'){
|
||||||
|
// $('select[name="searchKeyword"]')
|
||||||
|
// .css('display', 'inline-block')
|
||||||
|
// .attr('disabled', false);
|
||||||
|
// $('input[name="searchKeyword"]')
|
||||||
|
// .css('display', 'none')
|
||||||
|
// .attr('disabled', true);
|
||||||
|
// }else{
|
||||||
|
// $('select[name="searchKeyword"]')
|
||||||
|
// .css('display', 'none')
|
||||||
|
// .attr('disabled', true);
|
||||||
|
// $('input[name="searchKeyword"]')
|
||||||
|
// .css('display', 'inline-block')
|
||||||
|
// .attr('disabled', false);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* event
|
||||||
|
**************************************************************************/
|
||||||
|
$(() => {
|
||||||
|
$('#btnSearch').on('click', () => fnBiz.search());
|
||||||
|
|
||||||
|
$('#btnRegist').on('click', () => {
|
||||||
|
fnBiz.pagePopup('file');
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
/* *******************************
|
||||||
|
* Grid
|
||||||
|
******************************* */
|
||||||
|
const initGrid = () => {
|
||||||
|
const gridColumns = [
|
||||||
|
{
|
||||||
|
header: '단속구분코드',
|
||||||
|
name: 'regltSeCode',
|
||||||
|
minWidth: 80,
|
||||||
|
sortable: false,
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
header: '외부연계키',
|
||||||
|
name: 'extrlRegltCntcId',
|
||||||
|
minWidth: 100,
|
||||||
|
sortable: true,
|
||||||
|
sortingType: 'desc',
|
||||||
|
align: 'center',
|
||||||
|
renderer: {
|
||||||
|
type: CustomButtonRenderer,
|
||||||
|
options: {
|
||||||
|
formatter: (props)=>{
|
||||||
|
return {
|
||||||
|
formatter: props.grid.getRow(props.rowKey).extrlRegltCntcId
|
||||||
|
,element: "text"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
,eventFunction: fnBiz.onClickGrid
|
||||||
|
,eventType: "click"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
header: '차량번호',
|
||||||
|
name: 'vhcleNo',
|
||||||
|
minWidth: 200,
|
||||||
|
sortable: false,
|
||||||
|
//align: 'left'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
header: '단속일자',
|
||||||
|
name: 'regltDe',
|
||||||
|
width: 80,
|
||||||
|
sortable: false,
|
||||||
|
align: 'center',
|
||||||
|
formatter({value}){
|
||||||
|
return setDateFmt(value);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
header: '등록일자',
|
||||||
|
name: 'registDt',
|
||||||
|
width: 160,
|
||||||
|
sortable: false,
|
||||||
|
align: 'center',
|
||||||
|
formatter({value}){
|
||||||
|
return setDateTimeFmt(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
const gridOptions = {
|
||||||
|
el: 'grid',
|
||||||
|
rowHeaders: ['rowNum'],
|
||||||
|
columns: gridColumns
|
||||||
|
};
|
||||||
|
|
||||||
|
const gridDatasource = {
|
||||||
|
initialRequest: true, // 화면 load시 조회 안함 - default
|
||||||
|
api: {
|
||||||
|
readData: {
|
||||||
|
url: '<c:url value="/fims/biz/ec/findExtrlRegltCntcs.do"/>'
|
||||||
|
,serializer: (params) => fnAddPageInfo(document.frmSearch, params)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
GRID = TuiGrid.of(gridOptions, gridDatasource, (res) => {
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* initialize
|
||||||
|
**************************************************************************/
|
||||||
|
$(document).ready(function(){
|
||||||
|
initGrid();
|
||||||
|
});
|
||||||
|
</script>
|
@ -0,0 +1,277 @@
|
|||||||
|
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||||
|
<%@ include file="/WEB-INF/jsp/framework/taglibs.jsp" %>
|
||||||
|
|
||||||
|
<%--rcvXmlDTO--%>
|
||||||
|
<c:set var="files" value="${attchFiles}"/>
|
||||||
|
<c:set var="bizName" value="외부연계 데이타"/>
|
||||||
|
|
||||||
|
<div class="popup" style="min-width: 100px;">
|
||||||
|
<div class="popup_inner" style="max-width: 1000px;">
|
||||||
|
<p class="pop_title">
|
||||||
|
<c:out value="${bizName}"/>(<c:out value="${extrlRegltCntcDTO.extrlRegltCntcId}"/>) 상세
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<%--@elvariable id="boardMaster" type="validator"--%>
|
||||||
|
<form>
|
||||||
|
<table class="tbl03">
|
||||||
|
<caption><c:out value="${bizName}"/> 상세</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 13%;"/>
|
||||||
|
<col style="width: 20%;"/>
|
||||||
|
<col style="width: 13%;"/>
|
||||||
|
<col style="width: 20%;"/>
|
||||||
|
<col style="width: 13%;"/>
|
||||||
|
<col style="width: 20%;"/>
|
||||||
|
</colgroup>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>시스템구분</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="sysGubunC" value="<c:out value="${extrlRegltCntcId.sysGubunC}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>송신기관</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="ancCodeV" value="<c:out value="${extrlRegltCntcId.ancCodeV}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>민원구분</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="petiGubunC" value="<c:out value="${extrlRegltCntcId.petiGubunC}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>민원기관</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="petiAncCodeV" value="<c:out value="${extrlRegltCntcId.petiAncCodeV}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>민원신청번호</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="petiNoC" value="<c:out value="${rcvXmlDTO.petiNoC}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>민원접수번호</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="civilNoC" value="<c:out value="${rcvXmlDTO.civilNoC}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>민원신청인</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="peterNameV" value="<c:out value="${rcvXmlDTO.peterNameV}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>신청인우편번호</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="zipCodeC" value="<c:out value="${rcvXmlDTO.zipCodeC}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>신청인주소</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="addressV" value="<c:out value="${rcvXmlDTO.addressV}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>신청인메일</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="emailV" value="<c:out value="${rcvXmlDTO.emailV}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>신청인핸드폰</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="celNoV" value="<c:out value="${rcvXmlDTO.celNoV}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>신청인전화</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="telNoV" value="<c:out value="${rcvXmlDTO.telNoV}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>민원신청제목</th>
|
||||||
|
<td colspan="5">
|
||||||
|
<input type="text" name="petiTitleV" value="<c:out value="${rcvXmlDTO.petiTitleV}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>민원신청내용</th>
|
||||||
|
<td colspan="5">
|
||||||
|
<textarea name="petiReasonL" rows="10" readonly><c:out value="${rcvXmlDTO.petiReasonL}" /></textarea>
|
||||||
|
<%-- <textarea name="petiReasonL" rows="10" readonly><c:out value="${rcvXmlDTO.petiReasonL}" escapeXml="true"/></textarea>--%>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>공개여부</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="openYnC" value="<c:out value="${rcvXmlDTO.openYnC}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>민원신청일시</th>
|
||||||
|
<td>
|
||||||
|
<fmt:parseDate value="${rcvXmlDTO.petiRegD}" var="petiRegD" pattern="yyyyMMddHHmmss"/>
|
||||||
|
<input type="text" name="petiRegD" value="<fmt:formatDate value="${petiRegD}" pattern="yyyy-MM-dd HH:mm:ss"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>파일첨부여부</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="petiReasonAttachYnC" value="<c:out value="${rcvXmlDTO.petiReasonAttachYnC}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<%--
|
||||||
|
<tr>
|
||||||
|
<th>첨부파일크기</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="petiFileSizeN" value='<fmt:formatNumber value="${rcvXmlDTO.petiFileSizeN}" pattern="#,###"/>' readonly>
|
||||||
|
</td>
|
||||||
|
<th>첨부파일명1</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="petiFilePath1V" value="<c:out value="${rcvXmlDTO.petiFilePath1V}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>첨부파일명2</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="petiFilePath2V" value="<c:out value="${rcvXmlDTO.petiFilePath2V}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>첨부파일명3</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="petiFilePath3V" value="<c:out value="${rcvXmlDTO.petiFilePath3V}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>첨부파일명4</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="petiFilePath4V" value="<c:out value="${rcvXmlDTO.petiFilePath4V}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>첨부파일명5</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="petiFilePath5V" value="<c:out value="${rcvXmlDTO.petiFilePath5V}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
--%>
|
||||||
|
<tr>
|
||||||
|
<th>등록일시</th>
|
||||||
|
<td>
|
||||||
|
<fmt:parseDate value="${rcvXmlDTO.regD}" var="regD" pattern="yyyyMMddHHmmss"/>
|
||||||
|
<input type="text" name="petiRegD" value="<fmt:formatDate value="${regD}" pattern="yyyy-MM-dd HH:mm:ss"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>송신여부</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="sendYnC" value="<c:out value="${rcvXmlDTO.sendYnC}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>송신일시</th>
|
||||||
|
<td>
|
||||||
|
<fmt:parseDate value="${rcvXmlDTO.sendD}" var="sendD" pattern="yyyyMMddHHmmss"/>
|
||||||
|
<input type="text" name="petiRegD" value="<fmt:formatDate value="${sendD}" pattern="yyyy-MM-dd HH:mm:ss"/>" readonly>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>적용일시</th>
|
||||||
|
<td>
|
||||||
|
<fmt:parseDate value="${rcvXmlDTO.applyD}" var="applyD" pattern="yyyyMMddHHmmss"/>
|
||||||
|
<input type="text" name="applyD" value="<fmt:formatDate value="${applyD}" pattern="yyyy-MM-dd HH:mm:ss"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>완료구분</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="applyGubunC" value="<c:out value="${rcvXmlDTO.applyGubunC}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>처리구분1</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="pcdGubunV" value="<c:out value="${rcvXmlDTO.pcdGubunV}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<%--
|
||||||
|
<tr>
|
||||||
|
<th>처리구분2</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="pcdGubun2V" value="<c:out value="${rcvXmlDTO.pcdGubun2V}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>처리구분3</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="pcdGubun3V" value="<c:out value="${rcvXmlDTO.pcdGubun3V}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>인터페이스ID</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="ifid" value="<c:out value="${rcvXmlDTO.ifid}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>소스기관코드</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="srcorgcd" value="<c:out value="${rcvXmlDTO.srcorgcd}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>타겟기관코드</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="tgtorgcd" value="<c:out value="${rcvXmlDTO.tgtorgcd}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
<th>인터페이스ID</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="ifid" value="<c:out value="${rcvXmlDTO.ifid}"/>" readonly>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
--%>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
<div class="draggable" id="imgList" style="display: flex; flex-direction: column; align-items: center"></div>
|
||||||
|
<div class="popup_btn">
|
||||||
|
<span class="flr p_flr">
|
||||||
|
<a href="#" class="btn lightgray" onclick="window.close()">닫기</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<!-- //등록버튼 -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- //popup -->
|
||||||
|
|
||||||
|
<script type="text/javascript" src="${pageContext.request.contextPath}/resources/framework/js/cmm/cmmDownloadImg.js" defer></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/**************************************************************************
|
||||||
|
* Global Variable
|
||||||
|
**************************************************************************/
|
||||||
|
// let orgData;
|
||||||
|
|
||||||
|
|
||||||
|
/* *******************************
|
||||||
|
* Biz function
|
||||||
|
******************************* */
|
||||||
|
const fnBiz = {
|
||||||
|
downloadImg: () => {
|
||||||
|
|
||||||
|
cmmAjax({
|
||||||
|
showSuccessMsg: false
|
||||||
|
,url: '<c:url value="/fims/biz/ec/findExtrlRegltCntcAttchFiles.do"/>'
|
||||||
|
,data: {extrlRegltCntcId: '${extrlRegltCntcDTO.extrlRegltCntcId}', regltSeCode: '${extrlRegltCntcDTO.regltSeCode}'}
|
||||||
|
,success: (res) => {
|
||||||
|
sttemntImgDownload(res.data?.contents, '#ctznImg');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
,pagePopup: function(flag, params) {
|
||||||
|
let url;
|
||||||
|
let popTitle;
|
||||||
|
let popOption;
|
||||||
|
switch (flag) {
|
||||||
|
case "imageView":
|
||||||
|
url = '<c:url value="/framework/biz/cmm/file/cmmImageViewPopup.do"/>';
|
||||||
|
popOption = {width: 1000, height: 800, resizable:false,scrollbars:'no'};
|
||||||
|
popTitle = "이미지 보기";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
window.opener.popup = CmmPopup.open(url, params, popOption, popTitle);
|
||||||
|
//var w = window.open("/imageEditor.do", "", "width=800,height=650,top=0px,left=200px,status=,resizable=false,scrollbars=no");
|
||||||
|
},
|
||||||
|
viewImg: () => {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* event
|
||||||
|
**************************************************************************/
|
||||||
|
$(() => {
|
||||||
|
$('img').on('click', () => {
|
||||||
|
fnBiz.viewImg()
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* initialize
|
||||||
|
**************************************************************************/
|
||||||
|
$(document).ready(function () {
|
||||||
|
// orgData = $('form').serialize();
|
||||||
|
fnBiz.downloadImg();
|
||||||
|
});
|
||||||
|
</script>
|
Loading…
Reference in New Issue