Forráskód Böngészése

修改下载接口

fengyanjie 4 éve
szülő
commit
c9da88830e

+ 0 - 5
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/ClassDefChangeRecordController.java

@@ -38,11 +38,6 @@ public class ClassDefChangeRecordController {
         return service.delete(idList);
     }
 
-    @PostMapping("/download")
-    public void download(@RequestBody List<Integer> idList, HttpServletResponse response) {
-        service.download(response, idList);
-    }
-
     @PostMapping("/addVersion")
     public MapResponse addVersion(@RequestParam String version, @RequestBody List<Integer> idList) {
         return service.addVersion(version, idList);

+ 0 - 5
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/FuncidDefChangeRecordController.java

@@ -38,11 +38,6 @@ public class FuncidDefChangeRecordController {
         return service.delete(idList);
     }
 
-    @PostMapping("/download")
-    public void download(@RequestBody List<Integer> idList, HttpServletResponse response) {
-        service.download(response, idList);
-    }
-
     @PostMapping("/addVersion")
     public MapResponse addVersion(@RequestParam String version, @RequestBody List<Integer> idList) {
         return service.addVersion(version, idList);

+ 6 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/RwdeditVersionController.java

@@ -8,6 +8,7 @@ import com.persagy.dmp.rwd.edit.service.RwdeditVersionService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 @RestController
@@ -27,4 +28,9 @@ public class RwdeditVersionController {
         return service.create(param);
     }
 
+    @PostMapping("/download")
+    public void download(@RequestParam String version, HttpServletResponse response) {
+        service.download(response, version);
+    }
+
 }

+ 71 - 152
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/ClassDefChangeRecordService.java

@@ -1,9 +1,6 @@
 package com.persagy.dmp.rwd.edit.service;
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.gson.Gson;
-import com.google.gson.JsonSyntaxException;
-import com.google.gson.reflect.TypeToken;
 import com.persagy.common.criteria.CriteriaUtils;
 import com.persagy.common.criteria.JacksonCriteria;
 import com.persagy.common.web.MapResponse;
@@ -19,9 +16,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import javax.servlet.http.HttpServletResponse;
 import javax.transaction.Transactional;
-import java.io.*;
 import java.util.*;
 
 @Slf4j
@@ -171,156 +166,80 @@ public class ClassDefChangeRecordService {
         return response;
     }
 
-    @Transactional
-    public void download(HttpServletResponse resp, List<Integer> idList) {
-//        List<ChangeRecord> data = repository.findAllById(idList);
-//        data.forEach(item -> {
-//            item.setState(3);
-//            item.setPublishUser(UserUtils.currentUserId() + "");
-//            item.setPublishTime(new Date());
-//        });
-//        repository.saveAll(data);
-//
-//        String fileName = DateUtils.format(new Date()) + ".sql";
-//        List<String> sqlList = getSqlList(idList);
-//
-//        OutputStream out = null;
-//        try {
-//            InputStream stream = getStream(sqlList);
-//            resp.reset();// 清空输出流
-//            String resultFileName = URLEncoder.encode(fileName, "UTF-8");
-//            resp.setCharacterEncoding("UTF-8");
-//            resp.setHeader("Content-disposition", "attachment; filename=" + resultFileName);// 设定输出文件头
-//            resp.setContentType("application/txt");// 定义输出类型
-//            out = resp.getOutputStream();
-//            byte[] buff = new byte[4096];
-//            int size = 0;
-//            while ((size = stream.read(buff)) != -1) {
-//                out.write(buff, 0, size);
-//            }
-//            out.flush();
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        } finally {
-//            try {
-//                if (out != null) {
-//                    out.close();
-//                }
-//            } catch (IOException e) {
-//                e.printStackTrace();
-//            }
-//        }
-    }
-
-    public InputStream getStream(List<String> list) throws IOException {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        DataOutputStream out = new DataOutputStream(baos);
-        for (String sql : list) {
-            out.writeBytes(sql + "\r\n");
-        }
-        byte[] bytes = baos.toByteArray();
-        ByteArrayInputStream tInputStringStream = new ByteArrayInputStream(bytes);
-        baos.close();
-        out.close();
-        return tInputStringStream;
-    }
-
-    private List<String> getSqlList(List<Integer> idList) {
-//        List<String> sqlList = new ArrayList<>();
-//        List<ChangeRecord> data = repository.findAllById(idList);
-//        for (ChangeRecord changeRecord : data) {
-//            StringBuilder sql = new StringBuilder();
-//            Map<String, Object> map = json2map(JacksonMapper.toSimpleJson(changeRecord.getValue()));
-//            switch (changeRecord.getOperationType()) {
-//                case create:
-//                    sql.append("insert into");
-//                    if (changeRecord.getInfoCode() == null) {
-//                        sql.append(" RWD_DEF_CLASS");
-//                    } else {
-//                        sql.append(" RWD_DEF_FUNCID");
-//                    }
-//                    sql.append(" (");//表名
-//                    map.keySet().forEach(item -> {
-//                        sql.append(humpToUnderline(item) + ",");
-//                    });
-//                    sql.deleteCharAt(sql.length() - 1);
-//                    sql.append(") values (");
-//                    map.values().forEach(item -> {
-//                        sql.append("'" + item + "',");
-//                    });
-//                    sql.deleteCharAt(sql.length() - 1);
-//                    sql.append(")");
-//                    break;
-//                case update:
-//                    sql.append("update");
-//                    if (changeRecord.getInfoCode() == null) {
-//                        sql.append(" RWD_DEF_CLASS");
-//                    } else {
-//                        sql.append(" RWD_DEF_FUNCID");
-//                    }
-//                    sql.append(" set");
-//                    for (Map.Entry<String, Object> entry : map.entrySet()) {
-//                        sql.append(" " + humpToUnderline(entry.getKey()) + " = '" + entry.getValue() + "',");
-//                    }
-//                    sql.deleteCharAt(sql.length() - 1);
-//                    break;
-//                case delete:
-//                    sql.append("delete from");
-//                    if (changeRecord.getInfoCode() == null) {
-//                        sql.append(" RWD_DEF_CLASS");
-//                    } else {
-//                        sql.append(" RWD_DEF_FUNCID");
-//                    }
-//                    break;
-//            }
-//            if (!EnumOperationType.create.equals(changeRecord.getOperationType())) {
-//                sql.append(" where 1=1");
-//                if (changeRecord.getInfoCode() == null) {
-//                    sql.append(" and code = '" + changeRecord.getCode() + "'");
-//                } else {
-//                    sql.append(" and class_code = '" + changeRecord.getCode() + "'");
-//                    sql.append(" and code = '" + changeRecord.getInfoCode() + "'");
-//                }
-//            }
-//            sql.append(";");
-//            sqlList.add(sql.toString());
-//        }
-//        return sqlList;
-        return null;
-    }
-
-    public static void main(String[] args) {
-        String uuid = UUID.randomUUID().toString().replace("-", "");
-        System.err.println(uuid);
-    }
-
-    private static Map<String, Object> json2map(String str_json) {
-        Map<String, Object> res = null;
-        try {
-            Gson gson = new Gson();
-            res = gson.fromJson(str_json, new TypeToken<Map<String, Object>>() {
-            }.getType());
-        } catch (JsonSyntaxException e) {
-        }
-        return res;
-    }
-
-    /***
-     * 驼峰命名转为下划线命名
-     */
-    private String humpToUnderline(String para) {
-        StringBuilder sb = new StringBuilder(para);
-        int temp = 0;//定位
-        if (!para.contains("_")) {
-            for (int i = 0; i < para.length(); i++) {
-                if (Character.isUpperCase(para.charAt(i))) {
-                    sb.insert(i + temp, "_");
-                    temp += 1;
+    public List<String> getSqlList(String version) {
+        List<String> sqlList = new ArrayList<>();
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        criteria.add("version", version);
+        PagedResponse<ClassDefChangeRecord> response = query(criteria);
+        List<ClassDefChangeRecord> data = response.getData();
+        for (ClassDefChangeRecord changeRecord : data) {
+            StringBuilder sql = new StringBuilder();
+            switch (changeRecord.getOperationType()) {
+                case create: {
+                    String uuid = UUID.randomUUID().toString().replace("-", "");
+                    sql.append("INSERT INTO `rwd_def_class` (`id`,`code`,`obj_type`,`name`,`type`,`group_code`,`project_id`,`alias_code`,`alias_name`,`major_code`,`system_code`,`equipment_code`,`parent_code`) VALUES (");
+                    sql.append("'" + uuid + "',");
+                    sql.append("'" + changeRecord.getCode() + "',");
+                    if (changeRecord.getObjType() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getObjType() + "',");
+                    }
+                    sql.append("'" + changeRecord.getName() + "',");
+                    if (changeRecord.getType() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getType() + "',");
+                    }
+                    sql.append("'" + changeRecord.getGroupCode() + "',");
+                    sql.append("'" + changeRecord.getProjectId() + "',");
+                    sql.append("'" + changeRecord.getAliasCode() + "',");
+                    sql.append("'" + changeRecord.getAliasName() + "',");
+                    if (changeRecord.getMajorCode() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getMajorCode() + "',");
+                    }
+                    if (changeRecord.getSystemCode() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getSystemCode() + "',");
+                    }
+                    if (changeRecord.getEquipmentCode() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getEquipmentCode() + "',");
+                    }
+                    if (changeRecord.getParentCode() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getParentCode() + "');");
+                    }
+                    break;
+                }
+                case update: {
+                    sql.append("UPDATE `rwd_def_class` SET");
+                    sql.append(" `alias_code` = '" + changeRecord.getAliasCode() + "',");
+                    sql.append(" `alias_name` = '" + changeRecord.getAliasName() + "'");
+                    sql.append(" WHERE `code` = '" + changeRecord.getCode() + "'");
+                    sql.append(" and `group_code` = '" + changeRecord.getGroupCode() + "'");
+                    sql.append(" and `project_id` = '" + changeRecord.getProjectId() + "';");
+                    break;
+                }
+                case delete: {
+                    sql.append("DELETE FROM `rwd_def_class`");
+                    sql.append(" WHERE `code` = '" + changeRecord.getCode() + "'");
+                    sql.append(" and `group_code` = '" + changeRecord.getGroupCode() + "'");
+                    sql.append(" and `project_id` = '" + changeRecord.getProjectId() + "';");
+                    break;
+                }
+                default: {
+                    break;
                 }
             }
+            sqlList.add(sql.toString());
         }
-        return sb.toString().toUpperCase();
+        return sqlList;
     }
-
 }
 

+ 124 - 150
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/FuncidDefChangeRecordService.java

@@ -1,11 +1,9 @@
 package com.persagy.dmp.rwd.edit.service;
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.gson.Gson;
-import com.google.gson.JsonSyntaxException;
-import com.google.gson.reflect.TypeToken;
 import com.persagy.common.criteria.CriteriaUtils;
 import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.date.DateUtils;
 import com.persagy.common.web.MapResponse;
 import com.persagy.common.web.PagedResponse;
 import com.persagy.dmp.rwd.edit.config.web.UserUtils;
@@ -22,6 +20,7 @@ import org.springframework.stereotype.Service;
 import javax.servlet.http.HttpServletResponse;
 import javax.transaction.Transactional;
 import java.io.*;
+import java.net.URLEncoder;
 import java.util.*;
 
 @Slf4j
@@ -196,156 +195,131 @@ public class FuncidDefChangeRecordService {
         return response;
     }
 
-    @Transactional
-    public void download(HttpServletResponse resp, List<Integer> idList) {
-//        List<ChangeRecord> data = repository.findAllById(idList);
-//        data.forEach(item -> {
-//            item.setState(3);
-//            item.setPublishUser(UserUtils.currentUserId() + "");
-//            item.setPublishTime(new Date());
-//        });
-//        repository.saveAll(data);
-//
-//        String fileName = DateUtils.format(new Date()) + ".sql";
-//        List<String> sqlList = getSqlList(idList);
-//
-//        OutputStream out = null;
-//        try {
-//            InputStream stream = getStream(sqlList);
-//            resp.reset();// 清空输出流
-//            String resultFileName = URLEncoder.encode(fileName, "UTF-8");
-//            resp.setCharacterEncoding("UTF-8");
-//            resp.setHeader("Content-disposition", "attachment; filename=" + resultFileName);// 设定输出文件头
-//            resp.setContentType("application/txt");// 定义输出类型
-//            out = resp.getOutputStream();
-//            byte[] buff = new byte[4096];
-//            int size = 0;
-//            while ((size = stream.read(buff)) != -1) {
-//                out.write(buff, 0, size);
-//            }
-//            out.flush();
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        } finally {
-//            try {
-//                if (out != null) {
-//                    out.close();
-//                }
-//            } catch (IOException e) {
-//                e.printStackTrace();
-//            }
-//        }
-    }
-
-    public InputStream getStream(List<String> list) throws IOException {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        DataOutputStream out = new DataOutputStream(baos);
-        for (String sql : list) {
-            out.writeBytes(sql + "\r\n");
-        }
-        byte[] bytes = baos.toByteArray();
-        ByteArrayInputStream tInputStringStream = new ByteArrayInputStream(bytes);
-        baos.close();
-        out.close();
-        return tInputStringStream;
-    }
-
-    private List<String> getSqlList(List<Integer> idList) {
-//        List<String> sqlList = new ArrayList<>();
-//        List<ChangeRecord> data = repository.findAllById(idList);
-//        for (ChangeRecord changeRecord : data) {
-//            StringBuilder sql = new StringBuilder();
-//            Map<String, Object> map = json2map(JacksonMapper.toSimpleJson(changeRecord.getValue()));
-//            switch (changeRecord.getOperationType()) {
-//                case create:
-//                    sql.append("insert into");
-//                    if (changeRecord.getInfoCode() == null) {
-//                        sql.append(" RWD_DEF_CLASS");
-//                    } else {
-//                        sql.append(" RWD_DEF_FUNCID");
-//                    }
-//                    sql.append(" (");//表名
-//                    map.keySet().forEach(item -> {
-//                        sql.append(humpToUnderline(item) + ",");
-//                    });
-//                    sql.deleteCharAt(sql.length() - 1);
-//                    sql.append(") values (");
-//                    map.values().forEach(item -> {
-//                        sql.append("'" + item + "',");
-//                    });
-//                    sql.deleteCharAt(sql.length() - 1);
-//                    sql.append(")");
-//                    break;
-//                case update:
-//                    sql.append("update");
-//                    if (changeRecord.getInfoCode() == null) {
-//                        sql.append(" RWD_DEF_CLASS");
-//                    } else {
-//                        sql.append(" RWD_DEF_FUNCID");
-//                    }
-//                    sql.append(" set");
-//                    for (Map.Entry<String, Object> entry : map.entrySet()) {
-//                        sql.append(" " + humpToUnderline(entry.getKey()) + " = '" + entry.getValue() + "',");
-//                    }
-//                    sql.deleteCharAt(sql.length() - 1);
-//                    break;
-//                case delete:
-//                    sql.append("delete from");
-//                    if (changeRecord.getInfoCode() == null) {
-//                        sql.append(" RWD_DEF_CLASS");
-//                    } else {
-//                        sql.append(" RWD_DEF_FUNCID");
-//                    }
-//                    break;
-//            }
-//            if (!EnumOperationType.create.equals(changeRecord.getOperationType())) {
-//                sql.append(" where 1=1");
-//                if (changeRecord.getInfoCode() == null) {
-//                    sql.append(" and code = '" + changeRecord.getCode() + "'");
-//                } else {
-//                    sql.append(" and class_code = '" + changeRecord.getCode() + "'");
-//                    sql.append(" and code = '" + changeRecord.getInfoCode() + "'");
-//                }
-//            }
-//            sql.append(";");
-//            sqlList.add(sql.toString());
-//        }
-//        return sqlList;
-        return null;
-    }
-
-    public static void main(String[] args) {
-        String uuid = UUID.randomUUID().toString().replace("-", "");
-        System.err.println(uuid);
-    }
-
-    private static Map<String, Object> json2map(String str_json) {
-        Map<String, Object> res = null;
-        try {
-            Gson gson = new Gson();
-            res = gson.fromJson(str_json, new TypeToken<Map<String, Object>>() {
-            }.getType());
-        } catch (JsonSyntaxException e) {
-        }
-        return res;
-    }
-
-    /***
-     * 驼峰命名转为下划线命名
-     */
-    private String humpToUnderline(String para) {
-        StringBuilder sb = new StringBuilder(para);
-        int temp = 0;//定位
-        if (!para.contains("_")) {
-            for (int i = 0; i < para.length(); i++) {
-                if (Character.isUpperCase(para.charAt(i))) {
-                    sb.insert(i + temp, "_");
-                    temp += 1;
+    public List<String> getSqlList(String version) {
+        List<String> sqlList = new ArrayList<>();
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        criteria.add("version", version);
+        PagedResponse<FuncidDefChangeRecord> response = query(criteria);
+        List<FuncidDefChangeRecord> data = response.getData();
+        for (FuncidDefChangeRecord changeRecord : data) {
+            StringBuilder sql = new StringBuilder();
+            switch (changeRecord.getOperationType()) {
+                case create: {
+                    String uuid = UUID.randomUUID().toString().replace("-", "");
+                    sql.append("INSERT INTO `rwd_def_funcid`(`id`,`code`,`orig_code`,`name`,`alias_code`,`alias_name`,`class_code`,`type`," +
+                            "`group_code`,`project_id`,`category`,`first_tag`,`second_tag`,`priority`,`input_mode`,`unit`,`data_type`,`orig_data_type`," +
+                            "`is_multiple`,`is_region`,`formater`,`data_source`,`note`,`sub_flag`,`weak_point`) VALUES (");
+                    sql.append("'" + uuid + "',");
+                    sql.append("'" + changeRecord.getCode() + "',");
+                    if (changeRecord.getOrigCode() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getOrigCode() + "',");
+                    }
+                    sql.append("'" + changeRecord.getName() + "',");
+                    sql.append("'" + changeRecord.getAliasCode() + "',");
+                    sql.append("'" + changeRecord.getAliasName() + "',");
+                    sql.append("'" + changeRecord.getClassCode() + "',");
+                    if (changeRecord.getType() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getType() + "',");
+                    }
+                    sql.append("'" + changeRecord.getGroupCode() + "',");
+                    sql.append("'" + changeRecord.getProjectId() + "',");
+                    if (changeRecord.getCategory() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getCategory() + "',");
+                    }
+                    if (changeRecord.getFirstTag() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getFirstTag() + "',");
+                    }
+                    if (changeRecord.getSecondTag() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getSecondTag() + "',");
+                    }
+                    if (changeRecord.getPriority() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getPriority() + "',");
+                    }
+                    if (changeRecord.getInputMode() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getInputMode() + "',");
+                    }
+                    if (changeRecord.getUnit() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getUnit() + "',");
+                    }
+                    sql.append("'" + changeRecord.getDataType() + "',");
+                    if (changeRecord.getOrigDataType() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getOrigDataType() + "',");
+                    }
+                    if (changeRecord.getIsMultiple() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getIsMultiple() + "',");
+                    }
+                    if (changeRecord.getFormater() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getFormater() + "')");
+                    }
+                    if (changeRecord.getDataSource() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getDataSource() + "')");
+                    }
+                    if (changeRecord.getNote() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getNote() + "')");
+                    }
+                    if (changeRecord.getSubFlag() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getSubFlag() + "')");
+                    }
+                    if (changeRecord.getWeakPoint() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getWeakPoint() + "');");
+                    }
+                    break;
+                }
+                case update: {
+                    sql.append("UPDATE `rwd_def_funcid` SET");
+                    sql.append(" `alias_code` = '" + changeRecord.getAliasCode() + "',");
+                    sql.append(" `alias_name` = '" + changeRecord.getAliasName() + "'");
+                    sql.append(" WHERE `code` = '" + changeRecord.getCode() + "'");
+                    sql.append(" WHERE `class_code` = '" + changeRecord.getClassCode() + "'");
+                    sql.append(" and `group_code` = '" + changeRecord.getGroupCode() + "'");
+                    sql.append(" and `project_id` = '" + changeRecord.getProjectId() + "';");
+                    break;
+                }
+                case delete: {
+                    sql.append("DELETE FROM `rwd_def_funcid`");
+                    sql.append(" WHERE `code` = '" + changeRecord.getCode() + "'");
+                    sql.append(" WHERE `class_code` = '" + changeRecord.getClassCode() + "'");
+                    sql.append(" and `group_code` = '" + changeRecord.getGroupCode() + "'");
+                    sql.append(" and `project_id` = '" + changeRecord.getProjectId() + "';");
+                    break;
+                }
+                default: {
+                    break;
                 }
             }
+            sqlList.add(sql.toString());
         }
-        return sb.toString().toUpperCase();
+        return sqlList;
     }
-
 }
 

+ 63 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/RwdeditVersionService.java

@@ -3,6 +3,7 @@ package com.persagy.dmp.rwd.edit.service;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.common.criteria.CriteriaUtils;
 import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.date.DateUtils;
 import com.persagy.common.web.MapResponse;
 import com.persagy.common.web.PagedResponse;
 import com.persagy.dmp.rwd.edit.config.web.UserUtils;
@@ -13,7 +14,11 @@ import com.querydsl.core.types.dsl.BooleanExpression;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.http.HttpServletResponse;
 import javax.transaction.Transactional;
+import java.io.*;
+import java.net.URLEncoder;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -26,6 +31,12 @@ public class RwdeditVersionService {
     @Autowired
     private RwdeditVersionRepository repository;
 
+    @Autowired
+    private ClassDefChangeRecordService classDefChangeRecordService;
+
+    @Autowired
+    private FuncidDefChangeRecordService funcidDefChangeRecordService;
+
     private List<BooleanExpression> parse(ObjectNode criteria) {
         // TODO
         return null;
@@ -58,5 +69,57 @@ public class RwdeditVersionService {
         response.add("id", entity.getVersion());
         return response;
     }
+
+    @Transactional
+    public void download(HttpServletResponse resp, String version) {
+        String fileName = DateUtils.format(new Date()) + ".sql";
+        List<String> sqlList = new ArrayList<>();
+        sqlList.add("-- 类型变更");
+        classDefChangeRecordService.getSqlList(version);
+        sqlList.add("-- 信息点变更");
+        funcidDefChangeRecordService.getSqlList(version);
+
+        OutputStream out = null;
+        try {
+            InputStream stream = getStream(sqlList);
+            resp.reset();// 清空输出流
+            String resultFileName = URLEncoder.encode(fileName, "UTF-8");
+            resp.setCharacterEncoding("UTF-8");
+            // 设定输出文件头
+            resp.setHeader("Content-disposition", "attachment; filename=" + resultFileName);
+            // 定义输出类型
+            resp.setContentType("application/txt");
+            out = resp.getOutputStream();
+            byte[] buff = new byte[4096];
+            int size = 0;
+            while ((size = stream.read(buff)) != -1) {
+                out.write(buff, 0, size);
+            }
+            out.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (out != null) {
+                    out.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    public InputStream getStream(List<String> list) throws IOException {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        DataOutputStream out = new DataOutputStream(baos);
+        for (String sql : list) {
+            out.writeBytes(sql + "\r\n");
+        }
+        byte[] bytes = baos.toByteArray();
+        ByteArrayInputStream tInputStringStream = new ByteArrayInputStream(bytes);
+        baos.close();
+        out.close();
+        return tInputStringStream;
+    }
 }