Ver código fonte

华泰财险影像上传

wks 2 anos atrás
pai
commit
c1a71c1cb8

+ 2 - 0
src/main/java/com/ydtech/config/resttemplate/RestTemplateConfig.java

@@ -14,8 +14,10 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.http.client.ClientHttpRequestFactory;
 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
+import org.springframework.http.converter.BufferedImageHttpMessageConverter;
 import org.springframework.web.client.RestTemplate;
 
+import java.util.Arrays;
 import java.util.Collections;
 
 @Configuration

+ 206 - 0
src/main/java/com/ydtech/modules/order/components/huatai/HuiTaiUploadImageComponents.java

@@ -0,0 +1,206 @@
+package com.ydtech.modules.order.components.huatai;
+
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.order.entity.api.huatai.constants.ImageTypeCode;
+import com.ydtech.modules.order.entity.api.huatai.request.HuaTaiSaveFileIdxRequest;
+import com.ydtech.modules.order.entity.api.huatai.response.HuaTaiImageInitParamResponse;
+import com.ydtech.modules.order.entity.dto.InsUploadImagesDto;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.*;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.UUID;
+
+
+/**
+ * @description: 华泰财险 影像上传
+ * @author: wenks
+ * @date: 2023/11/9 15:53
+ **/
+
+@Component
+@RequiredArgsConstructor
+@Slf4j
+public class HuiTaiUploadImageComponents {
+
+    private final RestTemplate restTemplate;
+    private static final String INIT_PARAM = "/h5img/app/ImgManager/initParam.cmd?t=";
+    private static final String FILE_UPLOAD = "/h5img/fileupload";
+    private static final String SAVE_FILE_IDX = "/h5img/app/ImgManager/saveFileIdx.cmd";
+
+    /**
+     * 上传影像
+     *
+     * @param url                 上传url
+     * @param insUploadImagesDtos 影像信息
+     */
+    public void uploadImage(String url, List<InsUploadImagesDto> insUploadImagesDtos) {
+        URL u;
+        try {
+            u = new URL(url);
+        } catch (MalformedURLException e) {
+            throw new SystemException("华泰文件上传路劲解析失败");
+        }
+        String domain = u.getProtocol() + "://" + u.getAuthority();
+        String query = u.getQuery();
+        String[] params = query.split("&");
+        String token = null;
+        for (String param : params) {
+            String[] pair = param.split("=");
+            if (pair[0].equals("token")) {
+                token = pair[1];
+            }
+        }
+        HuaTaiImageInitParamResponse initParamResponse = initParam(domain, token);
+        List<HuaTaiImageInitParamResponse.TypeSelectVosDTO.ChildrenDTO> childrenDTO = initParamResponse.getChildrenDTO();
+        for (InsUploadImagesDto insUploadImagesDto : insUploadImagesDtos) {
+            String imageType = insUploadImagesDto.getImageType();
+            String fileName = insUploadImagesDto.getFileName();
+            String substring = fileName.substring(fileName.lastIndexOf("."));
+            String file = getUUIDUpper() + substring;
+
+            for (ImageTypeCode fileTypeEnum : ImageTypeCode.values()) {
+                boolean contains = Arrays.asList(fileTypeEnum.getImagesType()).contains(imageType);
+                if (contains) {
+                    HuaTaiImageInitParamResponse.TypeSelectVosDTO.ChildrenDTO childrenDTO1 = HuaTaiImageInitParamResponse.filteringTypeCode(childrenDTO, imageType);
+                    FileuploadResult fileupload = fileupload(domain, token, initParamResponse, insUploadImagesDto.getFilePath(), file);
+                    saveFileIdx(domain, token, initParamResponse, fileupload, fileName, childrenDTO1);
+                }
+            }
+        }
+
+    }
+
+    /**
+     * 初始化参数获取 配置信息
+     *
+     * @param domain 域名
+     * @param token  token
+     * @return
+     */
+    private HuaTaiImageInitParamResponse initParam(String domain, String token) {
+        HttpHeaders httpHeaders = new HttpHeaders();
+        // token
+        httpHeaders.set("Cookie", "token=" + token);
+        String initParamUrl = domain + INIT_PARAM + System.currentTimeMillis();
+        HttpEntity<Object> httpEntity = new HttpEntity<>(null, httpHeaders);
+        ResponseEntity<HuaTaiImageInitParamResponse> response = restTemplate.exchange(initParamUrl, HttpMethod.GET, httpEntity, HuaTaiImageInitParamResponse.class);
+        return response.getBody();
+    }
+
+    /**
+     * 文件上传返回文件路劲
+     *
+     * @return 文件路劲
+     */
+    private FileuploadResult fileupload(String domain, String token, HuaTaiImageInitParamResponse initParamResponse, String path, String fileName) {
+        File file = new File(path);
+        byte[] bytes = file2byte(file);
+        double v = (double) bytes.length / 1024;
+        HttpHeaders httpHeaders = new HttpHeaders();
+        httpHeaders.setAccept(Collections.singletonList(MediaType.MULTIPART_FORM_DATA));
+        httpHeaders.set("Bucket", initParamResponse.getStorageType());
+        httpHeaders.set("Bussmodule", initParamResponse.getBussType());
+        httpHeaders.set("Bussno", initParamResponse.getBussNo());
+
+        // token
+        httpHeaders.set("Token", token);
+        // 文件名称
+        httpHeaders.set("Filename", fileName);
+        httpHeaders.setContentType(MediaType.IMAGE_JPEG);
+        HttpEntity<byte[]> httpEntity = new HttpEntity<>(bytes, httpHeaders);
+
+        String fileuploadUrl = domain + FILE_UPLOAD;
+        ResponseEntity<String> response = restTemplate.exchange(fileuploadUrl, HttpMethod.GET, httpEntity, String.class);
+        return new FileuploadResult(response.getBody(), v);
+    }
+
+
+    /**
+     * 服务端保存
+     *
+     * @param token       token
+     * @param response    请求
+     * @param fileName    文件名称
+     * @param childrenDTO 上传的文件类型
+     */
+    private void saveFileIdx(String domain, String token, HuaTaiImageInitParamResponse response, FileuploadResult fileupload, String fileName,
+                             HuaTaiImageInitParamResponse.TypeSelectVosDTO.ChildrenDTO childrenDTO) {
+        HuaTaiSaveFileIdxRequest huaTaiSaveFileIdxRequest = new HuaTaiSaveFileIdxRequest(token, response, fileupload, fileName, childrenDTO);
+        huaTaiSaveFileIdxRequest.getFileIdxVo().setImgId(System.currentTimeMillis());
+        HttpHeaders httpHeaders = new HttpHeaders();
+        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+        httpHeaders.set("Cookie", "token=" + token);
+        HttpEntity<HuaTaiSaveFileIdxRequest> httpEntity = new HttpEntity<>(huaTaiSaveFileIdxRequest, httpHeaders);
+        String saveFileIdxUrl = domain + SAVE_FILE_IDX;
+        restTemplate.postForEntity(saveFileIdxUrl, httpEntity, String.class);
+    }
+
+
+    @AllArgsConstructor
+    @Data
+    public static class FileuploadResult {
+
+        private String filePath;
+
+        private double fileSize;
+
+    }
+
+
+    /**
+     * 获取uuid文件名
+     *
+     * @return UUID名
+     */
+    public static String getUUIDUpper() {
+        return UUID.randomUUID().toString().replace("-", "").toUpperCase();
+    }
+
+    /**
+     * 获取uuid文件名
+     *
+     * @return UUID名
+     */
+    public static String getUUIDLower() {
+        return UUID.randomUUID().toString().replace("-", "").toLowerCase();
+    }
+
+    /**
+     * 将文件转换成byte数组
+     *
+     * @param file 文件
+     * @return 字节
+     */
+    public static byte[] file2byte(File file) {
+        byte[] buffer;
+        try (FileInputStream fis = new FileInputStream(file); ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
+            byte[] b = new byte[1024];
+            int n;
+            while ((n = fis.read(b)) != -1) {
+                bos.write(b, 0, n);
+            }
+            buffer = bos.toByteArray();
+            return buffer;
+        } catch (IOException ignored) {
+            throw new SystemException("文件转换异常");
+        }
+    }
+
+}
+
+
+

+ 5 - 0
src/main/java/com/ydtech/modules/order/controller/HuaTaiOrderApiController.java

@@ -7,8 +7,11 @@ import com.ydtech.modules.ins.model.vo.QuoteRespVo;
 import com.ydtech.modules.ins.model.ya.CarModelDTO;
 import com.ydtech.modules.order.aop.QuoteVerification;
 import com.ydtech.modules.order.components.InsOrdersComponents;
+import com.ydtech.modules.order.components.huatai.HuiTaiUploadImageComponents;
+import com.ydtech.modules.order.dao.InsTaskImagesMapper;
 import com.ydtech.modules.order.entity.api.zhongmei.request.ApprovedRequest;
 import com.ydtech.modules.order.entity.api.zhongmei.request.CoverageRequest;
+import com.ydtech.modules.order.entity.dto.InsUploadImagesDto;
 import com.ydtech.modules.order.entity.vo.*;
 import com.ydtech.modules.order.service.HuaTaiOrderApiService;
 import com.ydtech.modules.order.service.ZhongMeiOrderApiService;
@@ -16,12 +19,14 @@ import com.ydtech.modules.order.utils.AESUtilsWithDataBase;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
+import java.net.MalformedURLException;
 import java.util.List;
 
 

+ 64 - 0
src/main/java/com/ydtech/modules/order/entity/api/huatai/constants/ImageTypeCode.java

@@ -0,0 +1,64 @@
+package com.ydtech.modules.order.entity.api.huatai.constants;
+
+import com.ydtech.constants.InsuranceImageEnum;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+
+/**
+ * @description: 华泰财险图片类型
+ * @author: wenks
+ * @date: 2023/11/9 12:01
+ **/
+
+@Getter
+@AllArgsConstructor
+public enum ImageTypeCode {
+
+    I_5001("5001", "验车照片", new String[]{}),
+    I_5002("5002", "验车单", new String[]{}),
+    I_5999("5999", "其它", new String[]{}),
+    I_5003("5003", "自助验车照片", new String[]{}),
+    I_4001("4001", "投保单", new String[]{}),
+    I_4002("4002", "上年保险凭证", new String[]{}),
+    I_4003("4003", "完税/免税/减税凭证", new String[]{}),
+    I_4004("4004", "费率浮动告知书", new String[]{}),
+    I_4005("4005", "异地车在本地使用证明", new String[]{}),
+    I_4444("4444", "双录资料", new String[]{}),
+    I_4999("4999", "其它", new String[]{}),
+    I_2001("2001", "身份证", new String[]{}),
+    I_2007("2007", "投保人身份证", new String[]{
+            InsuranceImageEnum.C03.getCode(),
+            InsuranceImageEnum.D03.getCode(),
+    }),
+    I_2008("2008", "被保险人身份证", new String[]{
+            InsuranceImageEnum.C04.getCode(),
+            InsuranceImageEnum.D04.getCode(),
+    }),
+    I_2009("2009", "车主身份证", new String[]{
+            InsuranceImageEnum.C02.getCode(),
+            InsuranceImageEnum.D02.getCode(),
+    }),
+    I_1001("1001", "组织机构代码证", new String[]{}),
+    I_1999("1999", "其他", new String[]{}),
+    I_3001("3001", "行驶证", new String[]{
+            InsuranceImageEnum.C01.getCode(),
+            InsuranceImageEnum.D01.getCode(),
+    }),
+    I_3002("3002", "购车发票/二手车交易发票", new String[]{
+            InsuranceImageEnum.GC00.getCode(),
+    }),
+    I_3003("3003", "出厂合格证", new String[]{}),
+    I_3004("3004", "机动车辆登记证书", new String[]{}),
+    I_3005("3005", "道路运输许可证", new String[]{}),
+    I_3999("3999", "其它", new String[]{}),
+    I_3006("3006", "新能源充电桩", new String[]{});
+
+    private final String code;
+
+    private final String name;
+
+    private final String[] imagesType;
+
+
+}

+ 204 - 0
src/main/java/com/ydtech/modules/order/entity/api/huatai/request/HuaTaiSaveFileIdxRequest.java

@@ -0,0 +1,204 @@
+package com.ydtech.modules.order.entity.api.huatai.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.components.huatai.HuiTaiUploadImageComponents;
+import com.ydtech.modules.order.entity.api.huatai.response.HuaTaiImageInitParamResponse;
+import lombok.Data;
+
+@Data
+public class HuaTaiSaveFileIdxRequest {
+
+    @JsonProperty("token")
+    private String token;
+
+    @JsonProperty("fileIdxVo")
+    private FileIdxVoDTO fileIdxVo;
+
+    public HuaTaiSaveFileIdxRequest(String token, HuaTaiImageInitParamResponse response, HuiTaiUploadImageComponents.FileuploadResult fileupload, String fileName,
+                                    HuaTaiImageInitParamResponse.TypeSelectVosDTO.ChildrenDTO childrenDTO) {
+        this.token = token;
+        this.fileIdxVo = new FileIdxVoDTO(response, fileupload, fileName, childrenDTO);
+    }
+
+    @Data
+    public static class FileIdxVoDTO {
+
+        @JsonProperty("rotate")
+        private Integer rotate;
+
+        @JsonProperty("rotateStart")
+        private Integer rotateStart;
+
+        @JsonProperty("optionFlag")
+        private Integer optionFlag;
+
+        @JsonProperty("imgId")
+        private Long imgId;
+
+        @JsonProperty("createTime")
+        private Long createTime;
+
+        @JsonProperty("createUser")
+        private String createUser;
+
+        @JsonProperty("createUserName")
+        private String createUserName;
+
+        @JsonProperty("appSource")
+        private String appSource;
+
+        @JsonProperty("docId")
+        private Integer docId;
+
+        @JsonProperty("bussNo")
+        private String bussNo;
+
+        @JsonProperty("bussType")
+        private String bussType;
+
+        @JsonProperty("bussTypeName")
+        private String bussTypeName;
+
+        @JsonProperty("riskCode")
+        private String riskCode;
+
+        @JsonProperty("riskCodeName")
+        private String riskCodeName;
+
+        @JsonProperty("comCode")
+        private String comCode;
+
+        @JsonProperty("comName")
+        private String comName;
+
+        @JsonProperty("bussDate")
+        private String bussDate;
+
+        @JsonProperty("validFlag")
+        private Integer validFlag;
+
+        @JsonProperty("uploadNode")
+        private String uploadNode;
+
+        @JsonProperty("appendPath")
+        private String appendPath;
+
+        @JsonProperty("editable")
+        private Boolean editable;
+
+        @JsonProperty("deletable")
+        private Boolean deletable;
+
+        @JsonProperty("voType")
+        private String voType;
+
+        @JsonProperty("archType")
+        private String archType;
+
+        @JsonProperty("picFileFlag")
+        private Integer picFileFlag;
+
+        @JsonProperty("fileSize")
+        private Double fileSize;
+
+        @JsonProperty("fileSizeFormat")
+        private String fileSizeFormat;
+
+        @JsonProperty("fileOrgName")
+        private String fileOrgName;
+
+        @JsonProperty("fileTitle")
+        private String fileTitle;
+
+        @JsonProperty("fileName")
+        private String fileName;
+
+        @JsonProperty("typePath")
+        private String typePath;
+
+        @JsonProperty("typePathName")
+        private String typePathName;
+
+        @JsonProperty("typeName")
+        private String typeName;
+
+        @JsonProperty("picMaxSize")
+        private Integer picMaxSize;
+
+        @JsonProperty("picQuality")
+        private Integer picQuality;
+
+        @JsonProperty("error")
+        private Integer error;
+
+        @JsonProperty("checked")
+        private Boolean checked;
+
+        @JsonProperty("uploadStatus")
+        private Integer uploadStatus;
+
+        @JsonProperty("showIdx")
+        private Integer showIdx;
+
+        @JsonProperty("uploadTime")
+        private Integer uploadTime;
+
+        @JsonProperty("storageType")
+        private String storageType;
+
+        public FileIdxVoDTO(HuaTaiImageInitParamResponse response, HuiTaiUploadImageComponents.FileuploadResult fileupload, String fileName,
+                            HuaTaiImageInitParamResponse.TypeSelectVosDTO.ChildrenDTO childrenDTO) {
+            this.rotate = 0;
+            this.rotateStart = 0;
+            this.optionFlag = 2;
+            this.createTime = System.currentTimeMillis();
+
+            // 初始化的时候获取参数
+            this.createUser = response.getOptUserId();
+            this.createUserName = response.getOptUserName();
+            this.appSource = response.getAppSource();
+            this.docId = response.getDocId();
+            this.bussNo = response.getBussNo();
+            this.bussType = response.getBussType();
+            this.bussTypeName = response.getBussTypeName();
+            this.riskCode = response.getRiskCode();
+            this.riskCodeName = response.getRiskCodeName();
+            this.comCode = response.getComCode();
+            this.comName = response.getComName();
+            this.bussDate = response.getBussDate();
+            this.validFlag = 1;
+            this.uploadNode = response.getUploadNode();
+            this.appendPath = fileupload.getFilePath();
+            this.editable = true;
+            this.deletable = true;
+            this.voType = "C";
+            this.archType = response.getArchType();
+
+            this.picFileFlag = 1;
+            this.fileSize = fileupload.getFileSize();
+            this.fileSizeFormat = String.format("%.2f", fileupload.getFileSize()) + "KB";
+
+            String uuidLower = HuiTaiUploadImageComponents.getUUIDLower();
+            String substring = fileName.substring(fileName.lastIndexOf("."));
+
+            this.fileOrgName = uuidLower;
+            this.fileTitle = uuidLower + substring;
+
+            this.fileName = fileName;
+
+            this.typePath = childrenDTO.getTypePath();
+            this.typePathName = childrenDTO.getTypePathName();
+            this.typeName = childrenDTO.getLabel();
+            this.picMaxSize = childrenDTO.getPicMaxSize();
+            this.picQuality = childrenDTO.getPicQuality();
+
+            this.error = 0;
+            this.uploadStatus = 3;
+            this.showIdx = 30;
+            this.uploadTime = 154;
+            this.storageType = response.getStorageType();
+        }
+
+    }
+
+}

+ 366 - 0
src/main/java/com/ydtech/modules/order/entity/api/huatai/response/HuaTaiImageInitParamResponse.java

@@ -0,0 +1,366 @@
+package com.ydtech.modules.order.entity.api.huatai.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@NoArgsConstructor
+@Data
+public class HuaTaiImageInitParamResponse {
+
+
+    @JsonProperty("accessKeyVo")
+    private AccessKeyVoDTO accessKeyVo;
+
+    @JsonProperty("appSource")
+    private String appSource;
+
+    @JsonProperty("archType")
+    private String archType;
+
+    @JsonProperty("arriveNotify")
+    private Integer arriveNotify;
+
+    @JsonProperty("bucket")
+    private String bucket;
+
+    @JsonProperty("bussDate")
+    private String bussDate;
+
+    @JsonProperty("bussNo")
+    private String bussNo;
+
+    @JsonProperty("bussType")
+    private String bussType;
+
+    @JsonProperty("bussTypeName")
+    private String bussTypeName;
+
+    @JsonProperty("comCode")
+    private String comCode;
+
+    @JsonProperty("comName")
+    private String comName;
+
+    @JsonProperty("docId")
+    private Integer docId;
+
+    @JsonProperty("documentFile")
+    private String documentFile;
+
+    @JsonProperty("dstKey")
+    private String dstKey;
+
+    @JsonProperty("extendInfo")
+    private Object extendInfo;
+
+    @JsonProperty("imgVersion")
+    private String imgVersion;
+
+    @JsonProperty("initTime")
+    private Long initTime;
+
+    @JsonProperty("maxFileSize")
+    private Integer maxFileSize;
+
+    @JsonProperty("maxShowIdx")
+    private Double maxShowIdx;
+
+    @JsonProperty("maxUnUploadNum")
+    private Integer maxUnUploadNum;
+
+    @JsonProperty("mediaFile")
+    private String mediaFile;
+
+    @JsonProperty("netType")
+    private String netType;
+
+    @JsonProperty("optUserId")
+    private String optUserId;
+
+    @JsonProperty("optUserName")
+    private String optUserName;
+
+    @JsonProperty("pictureFile")
+    private String pictureFile;
+
+    @JsonProperty("riskCode")
+    private String riskCode;
+
+    @JsonProperty("riskCodeName")
+    private String riskCodeName;
+
+    @JsonProperty("showDelete")
+    private Integer showDelete;
+
+    @JsonProperty("showImgType")
+    private Object showImgType;
+
+    @JsonProperty("storageType")
+    private String storageType;
+
+    @JsonProperty("supportFileTypes")
+    private String supportFileTypes;
+
+    @JsonProperty("token")
+    private String token;
+
+    @JsonProperty("typeSelectVos")
+    private List<TypeSelectVosDTO> typeSelectVos;
+
+    @JsonProperty("typeTreeNodeVo")
+    private TypeTreeNodeVoDTO typeTreeNodeVo;
+
+    @JsonProperty("typeTreeNodeVos")
+    private Object typeTreeNodeVos;
+
+    @JsonProperty("uploadNode")
+    private String uploadNode;
+
+    @JsonProperty("uploadedFileList")
+    private List<String> uploadedFileList;
+
+    @JsonProperty("viewShowType")
+    private String viewShowType;
+
+    @JsonProperty("viewType")
+    private String viewType;
+
+    public List<TypeSelectVosDTO.ChildrenDTO> getChildrenDTO() {
+        return this.getTypeSelectVos().stream().map(TypeSelectVosDTO::getChildren).flatMap(List::stream).collect(Collectors.toList());
+    }
+
+    public static TypeSelectVosDTO.ChildrenDTO filteringTypeCode(List<TypeSelectVosDTO.ChildrenDTO> list, String typeCode){
+        return list.stream().filter(x -> x.getTypeCode().equals(typeCode)).collect(Collectors.toList()).get(0);
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class AccessKeyVoDTO {
+        @JsonProperty("accessKeyId")
+        private String accessKeyId;
+        @JsonProperty("accessKeySecret")
+        private String accessKeySecret;
+        @JsonProperty("endpoint")
+        private Object endpoint;
+        @JsonProperty("ossRegion")
+        private String ossRegion;
+        @JsonProperty("token")
+        private String token;
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class TypeTreeNodeVoDTO {
+        @JsonProperty("acceptDragDrop")
+        private Integer acceptDragDrop;
+        @JsonProperty("archType")
+        private String archType;
+        @JsonProperty("bussNo")
+        private String bussNo;
+        @JsonProperty("bussType")
+        private String bussType;
+        @JsonProperty("bussTypeName")
+        private String bussTypeName;
+        @JsonProperty("children")
+        private List<ChildrenDTO> children;
+        @JsonProperty("count")
+        private Integer count;
+        @JsonProperty("docId")
+        private Integer docId;
+        @JsonProperty("docMaxSize")
+        private Integer docMaxSize;
+        @JsonProperty("label")
+        private String label;
+        @JsonProperty("limitSumCount")
+        private Integer limitSumCount;
+        @JsonProperty("lockFlag")
+        private Integer lockFlag;
+        @JsonProperty("medMaxSize")
+        private Integer medMaxSize;
+        @JsonProperty("nodeType")
+        private String nodeType;
+        @JsonProperty("parentTypeCode")
+        private Object parentTypeCode;
+        @JsonProperty("picMaxSize")
+        private Integer picMaxSize;
+        @JsonProperty("picQuality")
+        private Integer picQuality;
+        @JsonProperty("readable")
+        private Integer readable;
+        @JsonProperty("riskCode")
+        private String riskCode;
+        @JsonProperty("riskCodeName")
+        private String riskCodeName;
+        @JsonProperty("typeCode")
+        private String typeCode;
+        @JsonProperty("typePath")
+        private Object typePath;
+        @JsonProperty("typePathName")
+        private Object typePathName;
+        @JsonProperty("writable")
+        private Integer writable;
+
+        @NoArgsConstructor
+        @Data
+        public static class ChildrenDTO {
+            @JsonProperty("acceptDragDrop")
+            private Integer acceptDragDrop;
+            @JsonProperty("archType")
+            private Object archType;
+            @JsonProperty("bussNo")
+            private Object bussNo;
+            @JsonProperty("bussType")
+            private Object bussType;
+            @JsonProperty("bussTypeName")
+            private Object bussTypeName;
+            @JsonProperty("children")
+            private Object children;
+            @JsonProperty("count")
+            private Integer count;
+            @JsonProperty("docId")
+            private Object docId;
+            @JsonProperty("docMaxSize")
+            private Integer docMaxSize;
+            @JsonProperty("label")
+            private String label;
+            @JsonProperty("limitSumCount")
+            private Integer limitSumCount;
+            @JsonProperty("lockFlag")
+            private Integer lockFlag;
+            @JsonProperty("medMaxSize")
+            private Integer medMaxSize;
+            @JsonProperty("nodeType")
+            private String nodeType;
+            @JsonProperty("parentTypeCode")
+            private String parentTypeCode;
+            @JsonProperty("picMaxSize")
+            private Integer picMaxSize;
+            @JsonProperty("picQuality")
+            private Integer picQuality;
+            @JsonProperty("readable")
+            private Integer readable;
+            @JsonProperty("riskCode")
+            private Object riskCode;
+            @JsonProperty("riskCodeName")
+            private Object riskCodeName;
+            @JsonProperty("typeCode")
+            private String typeCode;
+            @JsonProperty("typePath")
+            private Object typePath;
+            @JsonProperty("typePathName")
+            private Object typePathName;
+            @JsonProperty("writable")
+            private Integer writable;
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class TypeSelectVosDTO {
+        @JsonProperty("acceptDragDrop")
+        private Integer acceptDragDrop;
+        @JsonProperty("archType")
+        private String archType;
+        @JsonProperty("bussNo")
+        private String bussNo;
+        @JsonProperty("bussType")
+        private String bussType;
+        @JsonProperty("bussTypeName")
+        private String bussTypeName;
+        @JsonProperty("children")
+        private List<ChildrenDTO> children;
+        @JsonProperty("count")
+        private Integer count;
+        @JsonProperty("docId")
+        private Integer docId;
+        @JsonProperty("docMaxSize")
+        private Integer docMaxSize;
+        @JsonProperty("label")
+        private String label;
+        @JsonProperty("limitSumCount")
+        private Integer limitSumCount;
+        @JsonProperty("lockFlag")
+        private Integer lockFlag;
+        @JsonProperty("medMaxSize")
+        private Integer medMaxSize;
+        @JsonProperty("nodeType")
+        private String nodeType;
+        @JsonProperty("parentTypeCode")
+        private String parentTypeCode;
+        @JsonProperty("picMaxSize")
+        private Integer picMaxSize;
+        @JsonProperty("picQuality")
+        private Integer picQuality;
+        @JsonProperty("readable")
+        private Integer readable;
+        @JsonProperty("riskCode")
+        private String riskCode;
+        @JsonProperty("riskCodeName")
+        private String riskCodeName;
+        @JsonProperty("typeCode")
+        private String typeCode;
+        @JsonProperty("typePath")
+        private String typePath;
+        @JsonProperty("typePathName")
+        private String typePathName;
+        @JsonProperty("writable")
+        private Integer writable;
+
+        @NoArgsConstructor
+        @Data
+        public static class ChildrenDTO {
+            @JsonProperty("acceptDragDrop")
+            private Integer acceptDragDrop;
+            @JsonProperty("archType")
+            private String archType;
+            @JsonProperty("bussNo")
+            private String bussNo;
+            @JsonProperty("bussType")
+            private String bussType;
+            @JsonProperty("bussTypeName")
+            private String bussTypeName;
+            @JsonProperty("children")
+            private Object children;
+            @JsonProperty("count")
+            private Integer count;
+            @JsonProperty("docId")
+            private Integer docId;
+            @JsonProperty("docMaxSize")
+            private Integer docMaxSize;
+            @JsonProperty("label")
+            private String label;
+            @JsonProperty("limitSumCount")
+            private Integer limitSumCount;
+            @JsonProperty("lockFlag")
+            private Integer lockFlag;
+            @JsonProperty("medMaxSize")
+            private Integer medMaxSize;
+            @JsonProperty("nodeType")
+            private String nodeType;
+            @JsonProperty("parentTypeCode")
+            private String parentTypeCode;
+            @JsonProperty("picMaxSize")
+            private Integer picMaxSize;
+            @JsonProperty("picQuality")
+            private Integer picQuality;
+            @JsonProperty("readable")
+            private Integer readable;
+            @JsonProperty("riskCode")
+            private String riskCode;
+            @JsonProperty("riskCodeName")
+            private String riskCodeName;
+            @JsonProperty("typeCode")
+            private String typeCode;
+            @JsonProperty("typePath")
+            private String typePath;
+            @JsonProperty("typePathName")
+            private String typePathName;
+            @JsonProperty("writable")
+            private Integer writable;
+        }
+    }
+}