Ver código fonte

合并视图SQL生成程序

lijihong 6 anos atrás
pai
commit
61b67b61c2

+ 7 - 0
TRS.WCM.Developer/myconfig/template/relation.json

@@ -0,0 +1,7 @@
+{
+  "MetaDataId":"DOCID",
+  "ChannelId":"DOCCHANNEL",
+  "DOCTITLE":"DOCTITLE",
+  "UEDITOR":"DOCHTMLCON",
+  "DocType":"DOCTYPE"
+}

+ 148 - 0
TRS.WCM.Developer/test/com/trs/web2frame/SqlAutoCreateTest.java

@@ -0,0 +1,148 @@
+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\n" +
+                    "              (\n" +
+                    "                VIEWID,\n" +
+                    "                CHANNELID,\n" +
+                    "                METAVIEWEMPLOYERID,\n" +
+                    "                EmployerType,\n" +
+                    "                EmployerId\n" +
+                    "              )\n" +
+                    "              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(keyBuilder)
+                .append(") SELECT ")
+                .append(valueBuilder)
+                .append(" FROM ")
+                .append(srcTabelName);
+        if (!CMyString.isEmpty(where)){
+            insertSql.append(" WHERE ").append(where);
+        }
+        insertSql.append(";");
+        return insertSql.toString();
+    }
+
+}