| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- /**
- * 人员底数新增「退养资格类型」字段,并从备注回填。
- * 字段:c_retire_qualify_type
- * 取值:WITH_LAND(有土地退养)/ WITHOUT_LAND(无土地有资格)
- *
- * 用法:node scripts/migrate-retire-qualify-type.js
- */
- const http = require("http");
- const qs = require("querystring");
- const HOST = "121.43.55.7";
- const PORT = 2101;
- const MODEL_ID = 1970;
- const COLUMN_ID = 1847;
- function post(urlPath, fields, token) {
- return new Promise((resolve, reject) => {
- const body = qs.stringify(fields || {});
- const headers = {
- "Content-Type": "application/x-www-form-urlencoded",
- "Content-Length": Buffer.byteLength(body),
- };
- if (token) {
- headers.Token = token;
- headers.token = token;
- }
- const req = http.request(
- { hostname: HOST, port: PORT, path: urlPath, method: "POST", headers },
- (res) => {
- let data = "";
- res.on("data", (c) => (data += c));
- res.on("end", () => {
- try {
- resolve(JSON.parse(data));
- } catch (e) {
- resolve({ raw: data, status: res.statusCode });
- }
- });
- }
- );
- req.on("error", reject);
- req.write(body);
- req.end();
- });
- }
- function text(shortName, alias, must, seq) {
- return {
- alias,
- customType: "",
- describe: "WITH_LAND/WITHOUT_LAND",
- frontType: "content",
- id: 2,
- must: !!must,
- name: "c_" + shortName,
- searchType: "2",
- sequence: seq || 1,
- showParam: "name,alias,desc,type,front_type,must,default_value",
- type: "text",
- };
- }
- function normalizeFieldList(raw) {
- let fl = raw;
- if (typeof fl === "string") fl = JSON.parse(fl);
- const out = {};
- Object.keys(fl || {}).forEach((k) => {
- let v = fl[k];
- if (typeof v === "string") v = JSON.parse(v);
- out[k] = v;
- });
- return out;
- }
- function inferQualify(remarks) {
- const r = String(remarks || "");
- if (/无土地|无承包地|WITHOUT_LAND/.test(r)) return "WITHOUT_LAND";
- if (/有土地退养|有土地|资格已核验|WITH_LAND/.test(r)) return "WITH_LAND";
- return "";
- }
- (async () => {
- const login = await post("/proxy_oauth/user/login", {
- userName: "user_liu",
- password: "WE176852439@lmx",
- clientId: "1",
- });
- if (login.code != 200) throw new Error("login fail " + JSON.stringify(login));
- const token = login.message;
- const modelRes = await post("/proxy_dms/model/getModelById", { modelId: String(MODEL_ID) }, token);
- if (modelRes.code != 200) throw new Error("getModel fail");
- const fieldList = normalizeFieldList(modelRes.content.fieldList);
- const shortName = "retire_qualify_type";
- const full = "c_" + shortName;
- if (!fieldList[full]) {
- const p = text(shortName, "退养资格类型", false, 55);
- fieldList[full] = p;
- const addfieldList = {
- [shortName]: {
- alias: p.alias,
- type: p.type,
- frontType: p.frontType,
- must: p.must,
- name: shortName,
- describe: p.describe,
- searchType: p.searchType,
- sortType: p.sortType,
- sequence: p.sequence,
- showParam: p.showParam,
- customType: "",
- id: p.id,
- },
- };
- const upd = await post(
- "/proxy_dms/model/updateFieldList",
- {
- modelId: String(MODEL_ID),
- fieldList: JSON.stringify(fieldList),
- addfieldList: JSON.stringify(addfieldList),
- delfieldList: JSON.stringify({}),
- updatefieldList: JSON.stringify({}),
- },
- token
- );
- console.log("add field", upd.code, upd.message || "");
- } else {
- console.log("field exists", full);
- }
- let scanned = 0;
- let filled = 0;
- let skipped = 0;
- let defaulted = 0;
- for (let page = 0; page < 80; page++) {
- const list = await post(
- "/proxy_dms/content/selectContentList",
- {
- columnId: String(COLUMN_ID),
- modelId: String(MODEL_ID),
- page: String(page),
- pageSize: "100",
- states: "0",
- },
- token
- );
- const rows = (list.content && list.content.data) || [];
- for (const row of rows) {
- scanned++;
- if (row.c_retire_qualify_type) {
- skipped++;
- continue;
- }
- let q = inferQualify(row.c_remarks);
- // 已进入业务库、备注无痕迹的:默认有土地退养(联调/历史补齐)
- const st = String(row.c_biz_status || "");
- if (
- !q &&
- (st === "NORMAL" ||
- st === "PAUSED" ||
- st === "STOPPED" ||
- st === "FUNERAL" ||
- st === "ABNORMAL")
- ) {
- q = "WITH_LAND";
- defaulted++;
- }
- if (!q) continue;
- const tip =
- q === "WITHOUT_LAND"
- ? "无承包地,按政策认定具备退养补助资格;资格已核验"
- : "有土地退养;资格已核验";
- const old = String(row.c_remarks || "");
- const remarks =
- old.includes("资格已核验") || old.includes("有土地") || old.includes("无承包地")
- ? old
- : old
- ? old + ";" + tip
- : tip;
- const res = await post(
- "/proxy_dms/content/updateContent",
- {
- columnId: String(COLUMN_ID),
- modelId: String(MODEL_ID),
- content: JSON.stringify({
- id: row.id,
- c_retire_qualify_type: q,
- c_remarks: remarks,
- }),
- },
- token
- );
- if (res.code == 200) filled++;
- }
- if (rows.length < 100) break;
- }
- console.log(
- "DONE scanned=" +
- scanned +
- " filled=" +
- filled +
- " already=" +
- skipped +
- " defaultedWithLand=" +
- defaulted
- );
- })().catch((e) => {
- console.error(e);
- process.exit(1);
- });
|