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