node 服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

207 lines
6.3 KiB

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
};