const ut = require("../sdk/ts/sdk-unittest-node.js"); const comd = require("../sdk/ts/common-data-node.js"); const fs = require("fs"); const path = require("path"); // 读取json文件 function readJsonFile(pathStr) { let detail = fs.readFileSync(pathStr, "utf8"); detail = JSON.parse(detail); return detail; } /** 读取物料详情 */ function readMatDetail(reqR, id, inParam) { const relatDetail = readJsonFile(path.join(reqR.detailDir, id + ".json")); inParam.setMatDetail(id, relatDetail); } /** 读取素材详情 */ function readDetail(reqR, id, inParam) { const relatDetail = readJsonFile(path.join(reqR.detailDir, id + ".json")); inParam.setDetail(id, relatDetail); if (!inParam.hasBin(relatDetail.materialType)) { inParam.makeContent(relatDetail); return; } const relatPth = path.join(reqR.binDir, id + ".bin"); const relatBin = fs.readFileSync(relatPth); const r = inParam.setBin(relatBin, relatDetail); for (const mid of r) { readDetail(reqR, mid, inParam); } } function saveFile(doa, reqR) { // 修改详情信息 const newDetail = doa.detail; newDetail.binFileUrl = reqR.newReceiveMaterialId + ".bin"; newDetail.materialId = reqR.newReceiveMaterialId; const newDetailStr = JSON.stringify(newDetail, "", "\t"); const newReceiveFullPath = path.join(reqR.detailDir, reqR.newReceiveMaterialId + ".json"); fs.writeFileSync(newReceiveFullPath, newDetailStr); // 新生成的bin const newReceiveBinFullPath = path.join(reqR.binDir, reqR.newReceiveMaterialId + ".bin"); fs.writeFileSync(newReceiveBinFullPath, doa.bin); } function readAttr(dir, inParam, isAttr) { const attrD = readJsonFile(dir); for (const iterator of attrD) { inParam.tvoM.createFTVByData(iterator, isAttr); } } function readExtends(reqR, inParam) { const attrD = readJsonFile(reqR.extendDir); inParam.extendsRuleM.initAttrMap(attrD); } function readParam(reqR, inParam) { const fns = fs.readdirSync(reqR.paramDir); fns.forEach(fileName => { const filedir = path.join(reqR.paramDir, fileName); const stats = fs.statSync(filedir); if (stats.isFile()) { const fn = path.parse(filedir).name; const paramDetail = readJsonFile(filedir); inParam.setParamDetail(fn, paramDetail); } }); } /** 初始化参数 */ function initParam(reqR) { const inParam = new ut.model_unittest.DSdkInArgv(); inParam.reveiveId = reqR.receiveMaterialId; inParam.req = reqR; readParam(reqR, inParam); readDetail(reqR, inParam.reveiveId, inParam); readAttr(reqR.attrDir, inParam, true); readAttr(reqR.categoryDir, inParam, false); readExtends(reqR, inParam); return inParam; } // 推送素材 function pushMaterial(reqR) { const inParam = initParam(reqR); inParam.pushId = reqR.pushMaterialId; inParam.pushIds = reqR.pushMaterialIdList; for (const pid of inParam.pushIds) { readDetail(reqR, pid, inParam); } if (reqR.materialRelationParamVOList != null) { for (const rpvo of reqR.materialRelationParamVOList) { if (inParam.checkIsMat(rpvo.paramType)) { readMatDetail(reqR, rpvo.paramDefaultValue, inParam); } else if (inParam.checkIsStyle(rpvo.paramType)) { readDetail(reqR, rpvo.paramDefaultValue, inParam); } } } if (reqR.relationMaterialIdList != null) { for (let index = 0; index < reqR.relationMaterialIdList.length; index++) { const element = reqR.relationMaterialIdList[index]; readDetail(reqR, element, inParam) } } const etd = new ut.model_unittest.UpdateAuto(inParam.decoder); let doa = etd.startPushMaterial(inParam); if (doa == null) { doa = createDefDoa(inParam); } saveFile(doa, reqR); } function createDefDoa(inParam) { const bin = inParam.getBin(inParam.reveiveId); const detail = inParam.getDetail(inParam.reveiveId); return { detail, bin } } function handleDir(reqR, workDir) { if (workDir != null) { reqR.binDir = workDir + reqR.binDir; reqR.detailDir = workDir + reqR.detailDir; reqR.paramDir = workDir + reqR.paramDir; reqR.reqFileUrl = workDir + reqR.reqFileUrl; reqR.resFileUrl = workDir + reqR.resFileUrl; reqR.attrDir = workDir + reqR.attrDir; reqR.categoryDir = workDir + reqR.categoryDir; reqR.extendDir = workDir + reqR.extendDir; } } function doPush(reqR, workDir = "") { console.time("doPush") comd.model_d.UClassTree.rootModule = comd.model_d.UClassTree.getNodeJsRootModule(module); // setTimeout(()=>{ handleDir(reqR, workDir); if (reqR.materialRelationParamVOList != null) { for (const o of reqR.materialRelationParamVOList) { o.paramDefaultValue = o.paramDefaultValueVersion; } } pushMaterial(reqR); console.timeEnd("doPush") // },1000) } function tryReadReq(reqR, workDir = "") { let isSuccess = true; let code = 200; let msg = "来自node的回复"; try { doPush(reqR, workDir); } catch (error) { isSuccess = false; msg = error; code = -1 } writeRes(reqR.resFileUrl, code, msg, isSuccess); } function writeRes(pathStr, code, msg, isSuccess) { const resD = { "code": code, "data": {}, "msg": msg.stack, "success": isSuccess } const resDStr = JSON.stringify(resD, "", "\t") fs.writeFileSync(pathStr, resDStr) } function readArgv(reqPath) { // const reqPath = process.argv[2]; const reqR = readJsonFile(reqPath); tryReadReq(reqR); } function localRun(reqPath) { // 项目工程地址 console.log('当前文件根目录:', __dirname) console.log('当前文件根目录:', path.join(`${__dirname}/data/material_auto/upload/20240513143213139802/req/0297505113_62.json`)) const p = path.join(`${__dirname}/data/material_auto/upload/20240513143213139802/req/0297505113_62.json`); // // const reqR = readJsonFile(resolve('./sdk/data/material_auto/upload/20240513143213139802/req/0297505113_62.json')); const reqR = readJsonFile(p); // tryReadReq(reqR, __dirname); doPush(reqR, __dirname); } // readArgv() // localRun() const autoUpdate = module.exports = { localRun: localRun, readArgvs: readArgv };