|
@@ -8,6 +8,7 @@ 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.json.JacksonMapper;
|
|
|
import com.persagy.common.web.MapResponse;
|
|
|
import com.persagy.common.web.PagedResponse;
|
|
@@ -23,7 +24,10 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
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
|
|
@@ -105,6 +109,7 @@ public class ChangeRecordService {
|
|
|
JacksonCriteria criteria = JacksonCriteria.newInstance();
|
|
|
HttpUtils.HttpResult result;
|
|
|
if (infoCode != null) {
|
|
|
+ criteria.add("type", "common");
|
|
|
criteria.add("classCode", code);
|
|
|
criteria.add("code", infoCode);
|
|
|
StringBuilder url = new StringBuilder(dmpServer);
|
|
@@ -173,11 +178,49 @@ public class ChangeRecordService {
|
|
|
return response;
|
|
|
}
|
|
|
|
|
|
- public MapResponse download(List<Integer> idList) {
|
|
|
- MapResponse response = new MapResponse();
|
|
|
+ public void download(HttpServletResponse resp, List<Integer> idList) {
|
|
|
+ String fileName = DateUtils.format(new Date()) + ".sql";
|
|
|
List<String> sqlList = getSqlList(idList);
|
|
|
- response.add("data", sqlList);
|
|
|
- return response;
|
|
|
+
|
|
|
+ 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) {
|
|
@@ -185,24 +228,47 @@ public class ChangeRecordService {
|
|
|
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");
|
|
|
- sql.append(" ");//表名
|
|
|
+ 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");
|
|
|
- sql.append(" ");//表名
|
|
|
+ if (changeRecord.getInfoCode() == null) {
|
|
|
+ sql.append(" RWD_DEF_CLASS");
|
|
|
+ } else {
|
|
|
+ sql.append(" RWD_DEF_FUNCID");
|
|
|
+ }
|
|
|
sql.append(" set");
|
|
|
- Map<String, Object> map = json2map(JacksonMapper.toSimpleJson(changeRecord.getValue()));
|
|
|
for (Map.Entry<String, Object> entry : map.entrySet()) {
|
|
|
- sql.append(" " + entry.getKey() + " = '" + entry.getValue() + "',");
|
|
|
+ sql.append(" " + humpToUnderline(entry.getKey()) + " = '" + entry.getValue() + "',");
|
|
|
}
|
|
|
sql.deleteCharAt(sql.length() - 1);
|
|
|
break;
|
|
|
case delete:
|
|
|
sql.append("delete from");
|
|
|
- sql.append(" ");//表名
|
|
|
+ if (changeRecord.getInfoCode() == null) {
|
|
|
+ sql.append(" RWD_DEF_CLASS");
|
|
|
+ } else {
|
|
|
+ sql.append(" RWD_DEF_FUNCID");
|
|
|
+ }
|
|
|
break;
|
|
|
}
|
|
|
sql.append(" where 1=1");
|
|
@@ -211,14 +277,14 @@ public class ChangeRecordService {
|
|
|
} else {
|
|
|
sql.append(" and class_code = '" + changeRecord.getCode() + "'");
|
|
|
sql.append(" and code = '" + changeRecord.getInfoCode() + "'");
|
|
|
- sql.append(";");
|
|
|
}
|
|
|
+ sql.append(";");
|
|
|
sqlList.add(sql.toString());
|
|
|
}
|
|
|
return sqlList;
|
|
|
}
|
|
|
|
|
|
- public static Map<String, Object> json2map(String str_json) {
|
|
|
+ private static Map<String, Object> json2map(String str_json) {
|
|
|
Map<String, Object> res = null;
|
|
|
try {
|
|
|
Gson gson = new Gson();
|
|
@@ -229,5 +295,22 @@ public class ChangeRecordService {
|
|
|
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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return sb.toString().toUpperCase();
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|