restore-jebz-model-fields.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. /**
  2. * 紧急修复 / 校验:sjnmtybt_jebz (1966) 字段元数据。
  3. * 注意:若物理列已存在,勿再走 addfieldList(会 ALTER 失败 500);只写 fieldList。
  4. */
  5. const http = require("http");
  6. const qs = require("querystring");
  7. const fs = require("fs");
  8. const path = require("path");
  9. const HOST = "121.43.55.7";
  10. const PORT = 2101;
  11. const MODEL_ID = 1966;
  12. function post(urlPath, fields, token) {
  13. return new Promise((resolve, reject) => {
  14. const body = qs.stringify(fields || {});
  15. const headers = {
  16. "Content-Type": "application/x-www-form-urlencoded",
  17. "Content-Length": Buffer.byteLength(body),
  18. };
  19. if (token) {
  20. headers.Token = token;
  21. headers.token = token;
  22. }
  23. const req = http.request(
  24. { hostname: HOST, port: PORT, path: urlPath, method: "POST", headers },
  25. (res) => {
  26. let data = "";
  27. res.on("data", (c) => (data += c));
  28. res.on("end", () => {
  29. try {
  30. resolve(JSON.parse(data));
  31. } catch (e) {
  32. resolve({ raw: data, status: res.statusCode });
  33. }
  34. });
  35. }
  36. );
  37. req.on("error", reject);
  38. req.write(body);
  39. req.end();
  40. });
  41. }
  42. function text(shortName, alias, must, seq) {
  43. return {
  44. alias,
  45. customType: "",
  46. describe: "格式为富文本",
  47. frontType: "content",
  48. id: 2,
  49. must: !!must,
  50. name: "c_" + shortName,
  51. searchType: "2",
  52. sequence: seq || 1,
  53. showParam: "name,alias,desc,type,front_type,must,default_value",
  54. type: "text",
  55. };
  56. }
  57. function num(shortName, alias, must, seq) {
  58. return {
  59. alias,
  60. customType: "",
  61. describe: "number",
  62. frontType: "float_num",
  63. id: 6,
  64. must: !!must,
  65. name: "c_" + shortName,
  66. searchType: "1,3",
  67. sequence: seq || 5,
  68. showParam: "name,alias,desc,type,front_type,must,default_value",
  69. sortType: "1,2",
  70. type: "double",
  71. };
  72. }
  73. function ts(shortName, alias, must, seq) {
  74. return {
  75. alias,
  76. customType: "",
  77. describe: "时间戳",
  78. frontType: "date_time",
  79. id: 3,
  80. must: !!must,
  81. name: "c_" + shortName,
  82. searchType: "3",
  83. sequence: seq || 2,
  84. showParam: "name,alias,describe,type,front_type,must,date_type,date_picker",
  85. sortType: "1,2",
  86. type: "timestamp",
  87. };
  88. }
  89. function normalizeFieldList(raw) {
  90. let fl = raw;
  91. if (typeof fl === "string") fl = JSON.parse(fl);
  92. const out = {};
  93. Object.keys(fl || {}).forEach((k) => {
  94. let v = fl[k];
  95. if (typeof v === "string") v = JSON.parse(v);
  96. out[k] = v;
  97. });
  98. return out;
  99. }
  100. (async () => {
  101. const login = await post("/proxy_oauth/user/login", {
  102. userName: "user_liu",
  103. password: "WE176852439@lmx",
  104. clientId: "1",
  105. });
  106. if (login.code != 200) throw new Error("login fail " + JSON.stringify(login));
  107. const token = login.message;
  108. const desired = {
  109. c_amount: num("amount", "金额", true, 5),
  110. c_date_time: ts("date_time", "生效时间", true, 6),
  111. c_remarks: text("remarks", "备注", false, 7),
  112. c_town_id: text("town_id", "街镇ID", true, 9),
  113. c_standard_type: text("standard_type", "标准类型", true, 10),
  114. c_expire_time: ts("expire_time", "失效时间", false, 11),
  115. c_current_flag: text("current_flag", "是否当前有效", true, 12),
  116. c_adjust_reason: text("adjust_reason", "调整原因", false, 13),
  117. c_funeral_amount: num("funeral_amount", "丧葬金额", false, 14),
  118. };
  119. const res = await post(
  120. "/proxy_dms/model/updateFieldList",
  121. {
  122. modelId: String(MODEL_ID),
  123. fieldList: JSON.stringify(desired),
  124. addfieldList: JSON.stringify({}),
  125. delfieldList: JSON.stringify({}),
  126. updatefieldList: JSON.stringify({}),
  127. },
  128. token
  129. );
  130. const verify = await post("/proxy_dms/model/getModelById", { modelId: String(MODEL_ID) }, token);
  131. const fields = Object.keys(normalizeFieldList(verify.content.fieldList)).sort();
  132. const out = {
  133. update: { code: res.code, message: res.message || res.content },
  134. fields,
  135. ok:
  136. fields.includes("c_amount") &&
  137. fields.includes("c_town_id") &&
  138. fields.includes("c_funeral_amount") &&
  139. fields.includes("c_standard_type"),
  140. };
  141. fs.writeFileSync(path.join(__dirname, "restore-jebz-model-fields-result.json"), JSON.stringify(out, null, 2));
  142. console.log(JSON.stringify(out, null, 2));
  143. if (!out.ok) process.exit(1);
  144. })().catch((e) => {
  145. console.error(e);
  146. process.exit(1);
  147. });