123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- package com.trs.web2frame;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import com.trs.infra.util.CMyException;
- import com.trs.infra.util.CMyFile;
- import com.trs.infra.util.CMyString;
- import com.trs.infra.util.Loader;
- import junit.framework.TestCase;
- import java.util.Map;
- /**
- * create by li.jihong
- * 2019/7/3
- */
- public class SqlAutoCreateTest extends TestCase {
- /**
- * 合并视图数据
- * @throws CMyException
- */
- public void testCreateSql() throws CMyException {
- //TODO 需要项目组根据自己需要合并的表和视图填写
- //目标视图ID
- int toViewId = 12;
- //目标视图名称 **注意如果是元数据表 ID需要必填,所以新建号统一视图表后,可以通过Navicat修改表字段ID为自增。统一视图后修改回来,重启项目
- String toTabelName = "WCMMetaTableGovOpenDataGovOpenData";
- //来源表名称
- String srcTabelName = "wcmdocument";
- //需要合并到空视图的栏目IDS
- String channelIds = "1,2";
- //来源表数据过滤条件
- String where = " DOCCHANNEL in (" + channelIds + ") ";
- //TODO
- //生成批量插入sql
- String insertSql = buildInsertSql(srcTabelName, toTabelName, where);
- System.out.println("-- insert SQL");
- System.out.println(insertSql);
- //生成chnldoc SQL
- String updateChnldocSql = buildUpdateChnldocSql(toViewId, channelIds);
- System.out.println("-- update chnldoc SQL");
- System.out.println(updateChnldocSql);
- //生成wcmdocument sql
- String updateDocumentSql = buildUpdateDocumentSql(toViewId, channelIds);
- System.out.println("-- update wcmdocument SQL");
- System.out.println(updateDocumentSql.toString());
- //生成xwcmmetaviewemployer sql
- String deleteViewEmployerSql = buildDeleteViewEmployerSql(channelIds);
- System.out.println("-- delete xwcmmetaviewemployer SQL");
- System.out.println(deleteViewEmployerSql.toString());
- System.out.println("-- insert xwcmmetaviewemployer SQL");
- buildUpdateViewEmployerSql(channelIds, toViewId);
- }
- private void buildUpdateViewEmployerSql(String channelIds, int toViewId) {
- String[] channelIdArr = CMyString.split(channelIds, ",");
- for (String channelIdStr : channelIdArr){
- StringBuilder updateViewEmployerSql = new StringBuilder();
- updateViewEmployerSql.append("insert into xwcmmetaviewemployer" +
- " (" +
- " VIEWID," +
- " CHANNELID," +
- " METAVIEWEMPLOYERID," +
- " EmployerType," +
- " EmployerId" +
- " )" +
- " SELECT ")
- .append(toViewId).append(",")
- .append(channelIdStr).append(",")
- .append(" ifnull(max(METAVIEWEMPLOYERID), 0) + 1").append(",")
- .append(101).append(",")
- .append(channelIdStr)
- .append(" FROM xwcmmetaviewemployer as METAVIEWEMPLOYERID; ");
- System.out.println(updateViewEmployerSql);
- }
- }
- private String buildDeleteViewEmployerSql(String channelIds) {
- StringBuilder deleteViewEmployerSql = new StringBuilder();
- deleteViewEmployerSql.append("DELETE FROM xwcmmetaviewemployer WHERE EmployerType = 101 and EmployerId in (")
- .append(channelIds)
- .append(") ;");
- return deleteViewEmployerSql.toString();
- }
- private String buildUpdateDocumentSql(int toViewId, String channelIds) {
- StringBuilder updateDocumentSql = new StringBuilder();
- updateDocumentSql.append("UPDATE wcmdocument SET DOCKIND = ")
- .append(toViewId)
- .append(" WHERE DOCCHANNEL in (")
- .append(channelIds)
- .append(") ;");
- return updateDocumentSql.toString();
- }
- private String buildUpdateChnldocSql(int toViewId, String channelIds) {
- StringBuilder updateChnldocSql = new StringBuilder();
- updateChnldocSql.append("UPDATE wcmchnldoc SET DOCKIND = ")
- .append(toViewId)
- .append(" WHERE CHNLID in (")
- .append(channelIds)
- .append(") ;");
- return updateChnldocSql.toString();
- }
- private String buildInsertSql(String srcTabelName, String toTabelName, String where) throws CMyException {
- String filePath = Loader.getResource("template").getPath() + "/relation.json";
- String jsonTxt = CMyFile.readFile(filePath, "utf-8");
- JSONObject jsonObject = JSON.parseObject(jsonTxt);
- StringBuilder keyBuilder = new StringBuilder();
- StringBuilder valueBuilder = new StringBuilder();
- for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
- keyBuilder.append(entry.getKey()).append(",");
- valueBuilder.append(entry.getValue()).append(",");
- }
- if (!jsonObject.isEmpty()){
- keyBuilder.deleteCharAt(keyBuilder.length() - 1);
- valueBuilder.deleteCharAt(valueBuilder.length() - 1);
- }
- StringBuilder insertSql = new StringBuilder(" INSERT INTO ");
- insertSql.append(toTabelName)
- .append(" (")
- .append(toTabelName+"Id,")
- .append(keyBuilder)
- .append(") SELECT ")
- .append(" (@max_num := @max_num + 1),")
- .append(valueBuilder)
- .append(" FROM ")
- .append(srcTabelName);
- if (!CMyString.isEmpty(where)){
- insertSql.append(" WHERE ").append(where);
- }
- insertSql.append(";");
- return insertSql.toString();
- }
- }
|