Commit 1dbd449a authored by Scott Sun's avatar Scott Sun

v20200422-rc1

parent e4ff3359
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'path',
title : '资料路径',
type : 'LineEdit',
property : {tool_tip : '存放所有料号的文件夹路径,不需要进入到料号文件夹内'},
},
{
name : 'customer',
title : '客户配置',
type : 'ComboBox',
property : {
item_list:['customer_1','customer_2','new_data'],
tool_tip:'客户代码'
}
},
{
name : 'db',
title : '料号db',
type : 'LineEdit',
property : {tool_tip : '料号db,默认是genesis'},
},
{
name : 'config_path',
title : '配置地址',
type : 'LineEdit',
property : {tool_tip : '配置的路径'},
}
]
VERSION_HISTORY:
V1.00 2020-04-20 Scott Sun
1.新版本
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> 客户数据导入 </p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<p> 料号 和 客户配置 </p>
<br>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
<br>
</body></html>
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
// 引入模块 包
console.log("=============================================>input_start");
console.log("=============================================>input_start");
console.log("=============================================>input_start");
console.log("=============================================>input_start");
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var database = require("topsin.database");
database.addConnection($.conf.database_conf, "DFM");
var QDfm = database.query("DFM");
if ($.conf.product_type == "aimdfm") {
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
current_process_title: $.process_title
},
where: { id: $.task_id }
});
}
var GEN = $.gen;
var Job = $.job_name;
var db = $.db;
var Status = 'ok';
var resultData = [];
var PAR = {};
if ($.hasOwnProperty('script_parameter')){
PAR = JSON.parse($.script_parameter);
}
try {
var par = PAR;
if(!par.hasOwnProperty("customer") || par.customer == ""){throw "未填写配置"};
if(!par.hasOwnProperty("path") || par.path == ""){throw "未填写路径"};
if(!par.hasOwnProperty("config_path") || par.config_path==""){
console.log("========================cfg");
par.config_path = "cam/input_data"
};
if(!par.hasOwnProperty("db") || par.db==""){
console.log("========================db");
par.db = "genesis"
};
par.customer = par.customer[0].toUpperCase()+par.customer.slice(1).toLowerCase()
var cfg = db.query("",function(q){
return q.selectValue({
table:'pub_conf',
field:'text_data',
where:{path : par.config_path}
})
});
if (!cfg || cfg == ""){throw "cfg can not find"}
var config = eval(cfg);
if(!config.hasOwnProperty("customer")){throw "config error"}
var job = Job;
if(_.isEmpty(job)) throw "没有传入料号名!";
job = job.toLowerCase()
// 如果genesis已经存在这个料号
err = delSameJob({job:job,delSame:config.delSameJob}); if(err){throw err};
var custCfg = config.customer[par.customer]
if(!custCfg){throw "config error"}
custCfg.db = par.db || custCfg.db
var step = custCfg.step.toLowerCase()
// 获取路径下文件信息
var path = par.path || custCfg.path
var pathInfo = fs.listDir(path, 1)
// 判断存不存在料号文件
var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job})
if(jobFile.length == 0){throw "job file is not exist"}
var jobFiles = [] // 记录要分析的文件
if (!jobFile[0].isDir) {
jobFiles.push(jobFile[0])
} else {
jobFiles = fs.listDir(jobFile[0].path)
}
// 分析料号文件 得到料号导入信息 导入类型
var jobInfo = analyJobFiles({jobFiles:jobFiles.filter(function(v){return v.isFile}),custCfg:custCfg,config:config,job:job })
if(jobInfo.data.length == 0){throw "file error"}
var importOk = false; // 是否成功导入
if(/odb/ig.test(jobInfo.type)){ // odb导入
if(jobInfo.data.length == 1){ // 只分析到一个tgz文件 直接导入
var err = importJob({name:job,db:custCfg.db,path:jobInfo.data[0].file.path},config.delSameJob)
if(err){throw err}
} else { // 多个tgz文件 说明需要合并
var mergeFiles = jobInfo.data.filter(function(item){
var err = importJob({name:item.file.baseName,db:custCfg.db,path:item.file.path},config.delSameJob)
if(err){throw err}
return /yes/ig.test(item.format.isMerge)
})
var arr_job = mergeFiles[0]
var arr_step;
var steplist = GEN.getStepList({job:arr_job.file.baseName})
if(steplist.indexOf(arr_job.format.arrStep) < 0){
arr_step = steplist[0]
}else{arr_step = arr_job.format.arrStep}
GEN.openJob({job:job});
GEN.openJob({job:arr_job.file.baseName});
GEN.copyStep({ // 合并
source_job:arr_job.file.baseName,
source_name:arr_step,
dest_job:job,
dest_name:arr_step,
});
GEN.closeJob({ job: arr_job.file.baseName });
GEN.deleteJob({ job: arr_job.file.baseName }); // 合并后 删除array的料号
}
importOk = true
}
if(/gerber/ig.test(jobInfo.type)){ // gerber导入
GEN.createJob({name:job,db:custCfg.db})
GEN.createStep({job:job,name:step})
var gerberInfo = jobInfo.data.map(function(item){
var gerberCfg = JSON.parse(JSON.stringify(item.format));
var file = item.file
gerberCfg.layer = file.name.toLowerCase()
gerberCfg.path = file.path
gerberCfg.format = item.type
gerberCfg.job = job
gerberCfg.step = step
return gerberCfg
})
GEN.COM("input_manual_reset")
gerberInfo.forEach(function(v){
GEN.COM("input_manual_set",v)
})
GEN.COM("input_manual")
importOk = true
}
if(!importOk){throw "import error"}
// 导入结束
var matrix = GEN.getMatrix({job:job});
comp = Object.keys(matrix).filter(function(v){ // 如果有comp层 删除
return /^comp_\+_/ig.test(v)
})
if (comp.length > 0){
var tmp = GEN.getStepList({job:job})
GEN.openStep({job:job,name:tmp[0]})
GEN.COM("delete_comp")
GEN.closeStep()
}
GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号
GEN.saveJob({ job: job });
GEN.checkInout({job:job,mode:"in"})
GEN.closeJob({job:job})
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
progress: 33.33
},
where: { id: $.task_id }
});
if (GEN.hasError()) {
Status = 'error';
resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
return {
status: Status,
result_data: resultData
};
} else {
resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
return {
status: Status,
result_data: resultData
};
}
}
catch (e) {
Status = 'error';
console.log("====================================>error");
console.log(_.toString(e));
resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
return {status: Status, result_data: resultData};
}
function delSameJob(props){
var job = props.job
var delSame = props.delSame
console.log("======================>delsame:"+ delSame);
if(GEN.isJobExists({job:job})){
if(/^yes$/ig.test(delSame)){
if(GEN.isJobOpen({job:job})){ GEN.closeJob({job:job}) }
GEN.deleteJob({job:job})
} else {
return "job "+ job+ " exist"
}
}
}
function analyJobFiles(props){
var files = props.jobFiles;
var config = props.config;
var job = props.job;
var custCfg = props.custCfg;
var rules = custCfg.rules;
var paramsFile = files.filter(function(file){return /param/ig.test(file.baseName)})
var tmp_hash = {}
paramsFile.forEach(function(file){
tmp_hash[file.baseName] = (function(){
var tmparr = fs.readFile(file.path).split("\n")
var tmp = {}
tmparr.map(function(v){
var arr = v.split(/\b\s+\b/)
tmp[arr[0].replace(/-/ig,"_")] = arr[1]
})
return tmp
})()
})
var fileInfo = files.reduce(function(a,file){
try {
rules.forEach(function(item){
if(item.valid({file:file, job:job})){
var format = config.formats[item.format]
var format1;
if(item.format_params){
format1 = item.format_params({params:tmp_hash})
}
if(format1){
throw {file:file,type:item.type,format:format1}
}else{
throw {file:file,type:item.type,format:format}
}
}
})
} catch (info) {
a.push(info)
}
return a
},[])
var odbfiles = fileInfo.filter(function(item){return /odb/ig.test(item.type)})
if(odbfiles.length == 0){
return {
type: "Gerber",
data: fileInfo
}
} else {
return {
type: "ODB",
data: odbfiles
}
}
}
function importJob(props,delSameJob){
var name = props.name
if (GEN.isJobExists({ job: name })) {
if (/^yes$/ig.test(delSameJob)) {
if(GEN.isJobOpen({ job: name })){ GEN.closeJob({ job: name }); }
GEN.deleteJob({ job: name });
}
else {
return "job "+name+" exist";
}
}
GEN.importJob(props);
}
...@@ -12,11 +12,18 @@ PARAMETER: ...@@ -12,11 +12,18 @@ PARAMETER:
property : {tool_tip : '存放所有料号的文件夹路径,不需要进入到料号文件夹内'}, property : {tool_tip : '存放所有料号的文件夹路径,不需要进入到料号文件夹内'},
}, },
{ {
name : 'customer', name : 'customer',
title : '客户配置', title : '客户配置',
type : 'LineEdit', type : 'RadioBox',
property : {tool_tip : '客户配置'}, property : {
}, item_list:[
{name:'customer_1',text:'customer_1'},
{name:'customer_2',text:'customer_2'},
{name:'new_data',text:'new_data'},
],
tool_tip:'客户代码'
}
},
{ {
name : 'config_path', name : 'config_path',
title : '配置地址', title : '配置地址',
...@@ -47,8 +54,6 @@ PARAMETER: ...@@ -47,8 +54,6 @@ PARAMETER:
// 引入模块 包 // 引入模块 包
console.log("=============================================>input_start"); console.log("=============================================>input_start");
console.log("=============================================>input_start"); console.log("=============================================>input_start");
console.log("=============================================>input_start");
console.log("=============================================>input_start");
var $ = require('topcam.scriptfunc').argv(); var $ = require('topcam.scriptfunc').argv();
var fs = require('fs'); var fs = require('fs');
var _ = require('lodash'); var _ = require('lodash');
...@@ -73,15 +78,12 @@ var PAR = {}; ...@@ -73,15 +78,12 @@ var PAR = {};
if ($.hasOwnProperty('script_parameter')){ if ($.hasOwnProperty('script_parameter')){
PAR = JSON.parse($.script_parameter); PAR = JSON.parse($.script_parameter);
} }
if (!$.hasOwnProperty('config_path')){
PAR.config_path = "cam/input_data"
}
try { try {
var par = PAR; var par = PAR;
console.log(par);
if(!par.hasOwnProperty("customer")){throw "未填写配置"}; if(!par.hasOwnProperty("customer")){throw "未填写配置"};
if(!par.hasOwnProperty("config_path")){par.config_path = "cam/input_data"};
par.customer = par.customer[0].toUpperCase()+par.customer.slice(1).toLowerCase() par.customer = par.customer[0].toUpperCase()+par.customer.slice(1).toLowerCase()
var cfg = db.query("",function(q){ var cfg = db.query("",function(q){
return q.selectValue({ return q.selectValue({
......
This diff is collapsed.
...@@ -150,7 +150,7 @@ ...@@ -150,7 +150,7 @@
"customer": { "customer": {
"Customer_1": { "Customer_1": {
"path": "/opt/resource/customer_1", "path": "/opt/resource/customer_1",
"db": "server_db", "db": "genesis",
"step": "cad", "step": "cad",
"rules": [ "rules": [
{ {
...@@ -208,7 +208,7 @@ ...@@ -208,7 +208,7 @@
}, },
"Customer_2": { "Customer_2": {
"path": "/opt/resource/customer_2", "path": "/opt/resource/customer_2",
"db": "server_db", "db": "genesis",
"step": "cad", "step": "cad",
"rules": [ "rules": [
{ {
...@@ -348,7 +348,7 @@ ...@@ -348,7 +348,7 @@
}, },
"New_data": { "New_data": {
"path": "/opt/resource/new_data", "path": "/opt/resource/new_data",
"db": "server_db", "db": "genesis",
"step": "cad", "step": "cad",
"rules": [ "rules": [
{ {
...@@ -455,18 +455,18 @@ ...@@ -455,18 +455,18 @@
{"orig_name" : "pleg.art", "tl_name" : "silk_top" }, {"orig_name" : "pleg.art", "tl_name" : "silk_top" },
{"orig_name" : "soldtop.art", "tl_name" : "sm_top" }, {"orig_name" : "soldtop.art", "tl_name" : "sm_top" },
{"orig_name" : ["top.art","^top$"], "tl_name" : "top" }, {"orig_name" : ["top.art","^top$"], "tl_name" : "top" },
{"orig_name" : ["art(\\d+)\\.art","layer_(\\d+)"], "tl_name" : "l_($1)"}, {"orig_name" : ["inner_(\\d+)\\.art","layer_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["bottom.art","^bottom$"], "tl_name" : "bottom" }, {"orig_name" : ["bottom.art","^bottom$"], "tl_name" : "bottom" },
{"orig_name" : "soldbotm.art", "tl_name" : "sm_botm" }, {"orig_name" : "soldbotm.art", "tl_name" : "sm_botm" },
{"orig_name" : "sleg.art", "tl_name" : "silk_bot" }, {"orig_name" : "sleg.art", "tl_name" : "silk_bot" },
{"orig_name" : "pastbotm.art", "tl_name" : "past_botm" }, {"orig_name" : "pastbotm.art", "tl_name" : "past_botm" },
{"orig_name" : "multipack.art", "tl_name" : "array" }, {"orig_name" : "multipack.art", "tl_name" : "array" },
{"orig_name" : "outline.art", "tl_name" : "outline" }, {"orig_name" : ["outline.art","outline"], "tl_name" : "outline" },
{"orig_name" : "fab.art", "tl_name" : "fab" }, {"orig_name" : ["fab.art","fab"], "tl_name" : "fab" },
{"orig_name" : "top-enig", "tl_name" : "top-enig" }, {"orig_name" : "top-enig", "tl_name" : "top-enig" },
{"orig_name" : "bot-enig", "tl_name" : "bot-enig" }, {"orig_name" : "bot-enig", "tl_name" : "bot-enig" },
{"orig_name" : "fab_page2", "tl_name" : "fab_page2" }, {"orig_name" : "fab_page2", "tl_name" : "fab_page2" },
{"orig_name" : ["(\\d+)-(\\d+)$","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"} {"orig_name" : ["(\\d+)-(\\d+)-laser\\.drl","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"}
] ]
} }
}, },
......
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'max_via_size',
title : '最大via孔径',
type : 'LineEdit',
property : {tool_tip : '最大via孔径,默认是0.9mm'},
},
{
name : 'min_via_num',
title : '最少via孔数',
type : 'LineEdit',
property : {tool_tip : '最少via孔数,默认是100'},
},
{
name : 'equidistant_tolerance',
title : '等间距公差',
type : 'LineEdit',
property : {tool_tip : '等间距公差,默认是0.005mm'},
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
tool_tip:'是否自动保存料号开关'
}
}
]
VERSION_HISTORY:
V1.00 2020-04-20 Scott Sun
1.新版本
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> 设置孔属性 </p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<p> </p>
<br>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
<br>
</body></html>
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
console.log("==============================>set drill");
// 引入模块 包
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var database = require("topsin.database");
database.addConnection($.conf.database_conf, "DFM");
var QDfm = database.query("DFM");
if ($.conf.product_type == "aimdfm") {
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
current_process_title: $.process_title
},
where: { id: $.task_id }
});
}
var GEN = $.gen;
var Job = $.job_name;
var db = $.db
var Status = 'ok';
var resultData = [];
var PAR = {};
if ($.hasOwnProperty('script_parameter')){
PAR = JSON.parse($.script_parameter);
}
try {
var par = PAR;
var default_par = {
max_via_size: "0.9mm",
min_via_num: "100",
equidistant_tolerance: "0.005mm",
auto_save: "No"
}
for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key]
}
}
var max_via_size = parseFloat(par.max_via_size);
var equidistant_tolerance = parseFloat(par.equidistant_tolerance);
if(_.isEmpty(Job)){throw "参数Job不存在"}
var job = Job.toLowerCase()
// 检查料号是否存在
if(!GEN.isJobExists({job:job})){throw "料号已经:"+job+"不存在"}
// 检查料号是否被打开
if(!GEN.isJobOpen({job:job})){ GEN.openJob({job:job}) }
// 检查料号是否能够check out
if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" }
GEN.checkInout({job:job,mode:"out"});
// 通过matrix获取board属性的钻孔层
var matrix = GEN.getMatrix({job:job})
var dirll_layer = Object.keys(matrix).reduce(function(a,b){
if(matrix[b].context == "board" && matrix[b].layer_type == "drill"){
a.push(b)
}
return a
},[])
var stepList = GEN.getStepList({job:job})
stepList.forEach(function(step){
GEN.openStep({job:job,name:step})
dirll_layer.forEach(function(layer){
// 逐层设置钻孔工作层
GEN.workLayer({name:layer,display_number:2,clear_before:'yes'})
// 分析via孔:排除超过max_via_size的孔径的孔,排除数量少于min_via_num数量的钻孔,排除存在等间距equidistant_tolerance的钻孔
// 排除超过max_via_size的孔径的孔
var layerSymsHist = GEN.getLayerSymsHist({job:job,step:step,layer:layer});
var via_symbol = Object.keys(layerSymsHist).map(function(v){return layerSymsHist[v]})
via_symbol = via_symbol.filter(function(item){
return Number(item.size) <= max_via_size
})
// 排除少于min_via_num数量的钻孔
via_symbol = via_symbol.filter(function(item){
return item.pad >= Number(par.min_via_num)
})
if(via_symbol.length){
// 如果via_symbol存在
GEN.selClearFeature()
GEN.selectByFilter({
feat_types:"pad",
include_syms: via_symbol.map(function(v){return v.symbol}).join(",")
})
// 将选中的复制到辅助层
var layer_tmp = layer + "_tmp"
if(GEN.isLayerExists({job:job,layer:layer_tmp})){GEN.deleteLayer({job:job,step:step,layer:layer_tmp})}
GEN.selCopyOther({dest:"layer_name",target_layer:layer_tmp,invert:'no'})
GEN.selClearFeature();
GEN.workLayer({name:layer_tmp,display_number:2,clear_before:'yes'})
var ck = "tmp_chk"
if(GEN.isChklistExists({job:job,step:step,chklist:ck})){
GEN.COM("chklist_delete", { chklist: ck })
}
// 创建并运行
GEN.createChklist({ // 创建checklist
chklist: ck,
items: [{
name: "viaPitch",
nact: 1,
action: "valor_analysis_signal",
erf: "S2_conductor_Check",
params: {
pp_layer: ".affected",
pp_spacing: 20,
pp_selected: "All",
pp_r2c: 10,
pp_d2c: 15,
pp_sliver: 8,
pp_min_pad_overlap: 5,
pp_check_missing_pads_for_drills: "Yes",
pp_use_compensated_rout: "Skeleton",
pp_sm_spacing: "Yes",
pp_tests: "Spacing",
pp_check_missing_pads_for_drills:"Yes"
}
}]
})
GEN.chklistShow({ chklist: ck })
GEN.affectedLayer({ affected: "yes", layer: layer, clear_before: "yes" })
GEN.chklistRun({
chklist: ck,
nact: 1,
area: "profile"
})
var tmp_layer1 = "mk_1_"+layer_tmp+"_pitch"
var tmp_layer2 = "ms_1_"+layer_tmp+"_pitch"
if(GEN.isLayerExists({job:job,layer:tmp_layer1})){
GEN.deleteLayer({job:job,layer:tmp_layer1})
}
if(GEN.isLayerExists({job:job,layer:tmp_layer2})){
GEN.deleteLayer({job:job,layer:tmp_layer2})
}
GEN.COM("chklist_create_lyrs,chklist="+ck+",severity=3,suffix=pitch");
GEN.workLayer({name:tmp_layer2,display_number:1,clear_before:'yes'});
GEN.selectByFilter({attribute:[{attribute:".string",text:"via_pitch"}]})
var tmp_layer2_tmp = tmp_layer2 + "_tmp"
if(GEN.isLayerExists({job:job,layer:tmp_layer2})){
GEN.deleteLayer({job:job,layer:tmp_layer2_tmp})
}
GEN.selCopyOther({dest:"layer_name",target_layer:tmp_layer2_tmp,invert:'no'})
GEN.selClearFeature();
GEN.workLayer({name:tmp_layer2_tmp,display_number:1,clear_before:'yes'});
var symbols_tmp = GEN.getLayerSymsHist({job:job,layer:tmp_layer2_tmp,step:step})
// 找出间距 equidistant_tolerance 的
var equidistant_tolerance_symbol = _.values(symbols_tmp).filter(function(item){
return Math.abs(Number(item.size) - equidistant_tolerance) < 0.000001
})
// 如果有 根据上面找到的 参考选择 删掉 layer_tmp 层里的钻孔
if(equidistant_tolerance_symbol.length){
GEN.selectByFilter({
exclude_syms:equidistant_tolerance_symbol.map(function(v){return v.symbol}).join(",")
})
GEN.selDelete()
GEN.workLayer({name:layer_tmp,display_number:2,clear_before:'yes'})
GEN.selRefFeat({layers:tmp_layer2_tmp,use:'filter',mode:'touch'})
GEN.selDelete()
}
// 根据layer_tmp层的钻孔参考选择出 层里面的镭射层
GEN.selClearFeature()
GEN.workLayer({name:layer,display_number:2,clear_before:'yes'})
GEN.selRefFeat({layers:layer_tmp,use:'filter',mode:'touch'})
// 设置选中的via孔属性
GEN.selAddAttr({attribute:'.drill',option:'via'})
GEN.selClearFeature()
// 删除辅助层
var deleLayers = [tmp_layer1, tmp_layer2, tmp_layer2_tmp, layer_tmp]
deleLayers.forEach(function(v){
GEN.deleteLayer({job:job,layer:v})
})
}
})
GEN.closeStep()
})
// 保存
if(/yes/ig.test(par.auto_save)){
GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号
GEN.saveJob({ job: job });
GEN.checkInout({job:job,mode:"in"})
GEN.closeJob({job:job})
} else {
GEN.checkInout({job:job,mode:"in"})
}
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
progress: 33.33
},
where: { id: $.task_id }
});
if (GEN.hasError()) {
Status = 'error';
resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
return {
status: Status,
result_data: resultData
};
} else {
resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
return {
status: Status,
result_data: resultData
};
}
} catch (e) {
Status = 'error';
resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
return {status: Status, result_data: resultData};
}
\ No newline at end of file
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'prefix',
title : '前缀名',
type : 'LineEdit',
property : {tool_tip : '前缀名,默认是org-'},
},
{
name : 'suffix',
title : '后缀名',
type : 'LineEdit',
property : {tool_tip : '后缀名,默认没有'},
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
tool_tip:'是否自动保存料号开关'
}
}
]
VERSION_HISTORY:
V1.00 2020-04-20 Scott Sun
1.新版本
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> 备份层 </p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<p> 前缀后缀 </p>
<br>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
<br>
</body></html>
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
console.log("==============================>备份层");
// 引入模块 包
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var database = require("topsin.database");
database.addConnection($.conf.database_conf, "DFM");
var QDfm = database.query("DFM");
if ($.conf.product_type == "aimdfm") {
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
current_process_title: $.process_title
},
where: { id: $.task_id }
});
}
var GEN = $.gen;
var Job = $.job_name;
var db = $.db
var Status = 'ok';
var resultData = [];
var PAR = {};
if ($.hasOwnProperty('script_parameter')){
PAR = JSON.parse($.script_parameter);
}
try {
var par = PAR;
var default_par = {
prefix: "org-",
suffix: "",
auto_save: "No",
}
for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key]
}
}
if(_.isEmpty(Job)){throw "参数Job不存在"}
var job = Job.toLowerCase()
// 检查料号是否存在
if(!GEN.isJobExists({job:job})){throw "料号已经:"+job+"不存在"}
// 检查料号是否被打开
if(!GEN.isJobOpen({job:job})){ GEN.openJob({job:job}) }
// 检查料号是否能够check out
if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" }
GEN.checkInout({job:job,mode:"out"});
// 通过matrix获取board层
var matrix = GEN.getMatrix({job:job})
var board_layers = Object.keys(matrix).reduce(function(a,b){
if(matrix[b].context == "board"){
a.push(b)
}
return a
},[])
board_layers.forEach(function(layer){
var new_layer = par.prefix + layer + par.suffix
if(GEN.isLayerExists({job:job,layer:new_layer})){
GEN.deleteLayer({job:job,layer:new_layer})
}
GEN.matrixAddLayer({job:job,layer:new_layer,context:'misc',type:matrix[layer].layer_type})
})
var stepList = GEN.getStepList({job:job})
stepList.forEach(function(step){
GEN.openStep({job:job,name:step})
// 逐层备份原稿层,备份名为prefix + 层名 + suffix
board_layers.forEach(function(layer){
var new_layer = par.prefix + layer + par.suffix
GEN.affectedLayer({affected:'no',mode:'all'})
GEN.workLayer({name:layer,display_number:2,clear_before:'yes'})
GEN.selClearFeature()
GEN.selAllFeat()
GEN.selCopyOther({dest:"layer_name",target_layer:new_layer})
GEN.selClearFeature()
GEN.clearLayers()
})
GEN.closeStep()
})
// 保存
if(/yes/ig.test(par.auto_save)){
GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号
GEN.saveJob({ job: job });
GEN.checkInout({job:job,mode:"in"})
GEN.closeJob({job:job})
} else {
GEN.checkInout({job:job,mode:"in"})
}
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
progress: 33.33
},
where: { id: $.task_id }
});
if (GEN.hasError()) {
Status = 'error';
resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
return {
status: Status,
result_data: resultData
};
} else {
resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
return {
status: Status,
result_data: resultData
};
}
} catch (e) {
Status = 'error';
resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
return {status: Status, result_data: resultData};
}
\ No newline at end of file
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'ref_outline',
title : '参考层',
type : 'LineEdit',
property : {tool_tip : '参考层,默认是gm1'},
},
{
name : 'outline',
title : '外形层',
type : 'LineEdit',
property : {tool_tip : '外形层,默认是gko'},
},
{
name : 'outline_width',
title : '外形线宽',
type : 'LineEdit',
property : {tool_tip : '外形线宽,默认是0.2mm'},
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
tool_tip:'是否自动保存料号开关'
}
}
]
VERSION_HISTORY:
V1.00 2020-04-20 Scott Sun
1.新版本
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> 创建GKO </p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<p> 客户配置 </p>
<br>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
<br>
</body></html>
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
console.log("==============================>create_outline");
// 引入模块 包
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var database = require("topsin.database");
database.addConnection($.conf.database_conf, "DFM");
var QDfm = database.query("DFM");
if ($.conf.product_type == "aimdfm") {
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
current_process_title: $.process_title
},
where: { id: $.task_id }
});
}
var GEN = $.gen;
var Job = $.job_name;
var db = $.db
var Status = 'ok';
var resultData = [];
var PAR = {};
if ($.hasOwnProperty('script_parameter')){
PAR = JSON.parse($.script_parameter);
}
try {
var par = PAR;
var default_par = {
ref_outline: "gm1",
outline: "gko",
outline_width: "0.2mm",
auto_save: "No",
}
for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key]
}
}
var outline_symbol;
if(par.outline == "" || par.outline == undefined || par.outline == null || par.outline == "null"){
outline_symbol = "null";
} else {
if(!/^(([^0][0-9]+|0)\.([0-9]{1,2})$)|^([^0][0-9]+|0)$/ig.test(par.outline_width)){
throw "outline_width failed"
}
par.outline_width = parseFloat(par.outline_width)
outline_symbol = "r" + String(par.outline_width * 1000);
}
var ref_outline = par.ref_outline;
var outline = par.outline;
if(_.isEmpty(Job)){throw "参数Job不存在"}
var job = Job.toLowerCase()
// 检查料号是否存在
if(!GEN.isJobExists({job:job})){throw "料号已经:"+job+"不存在"}
// 检查料号是否被打开
if(!GEN.isJobOpen({job:job})){ GEN.openJob({job:job}) }
// 检查料号是否能够check out
if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" }
GEN.checkInout({job:job,mode:"out"});
// 判断参考层(ref_outline)是否存在并不为空
if(!GEN.isLayerExists({job:job,layer:ref_outline})){throw "ref_outline不存在"}
var steplist = GEN.getStepList({job:job})
steplist.forEach(function(step){
if(!GEN.isLayerEmpty({job:job,step:step,layer:ref_outline})){
// 创建新的外形层(outline)
GEN.openStep({job:job,name:step})
if(GEN.isLayerExists({job:job,layer:outline})){
GEN.workLayer({name:outline,display_number:2,clear_before:'yes'})
GEN.selDelete()
}else {
GEN.createLayer({job:job,layer:outline,conext:"misc",type:"document"})
}
// 将参考层copy到外形层中
GEN.selClearFeature()
GEN.workLayer({name:ref_outline,display_number:2,clear_before:'yes'})
GEN.selAllFeat()
GEN.selCopyOther({dest:"layer_name", target_layer:outline})
GEN.selClearFeature()
GEN.workLayer({name:outline,display_number:2,clear_before:'yes'})
if(outline_symbol != "null"){
GEN.selChangeSym({symbol: outline_symbol})
GEN.selClearFeature()
}
GEN.clearLayers()
GEN.closeStep()
}
})
// 保存
if(/yes/ig.test(par.auto_save)){
GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号
GEN.saveJob({ job: job });
GEN.checkInout({job:job,mode:"in"})
GEN.closeJob({job:job})
} else {
GEN.checkInout({job:job,mode:"in"})
}
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
progress: 33.33
},
where: { id: $.task_id }
});
if (GEN.hasError()) {
Status = 'error';
resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
return {
status: Status,
result_data: resultData
};
} else {
resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
return {
status: Status,
result_data: resultData
};
}
} catch (e) {
Status = 'error';
resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
return {status: Status, result_data: resultData};
}
\ No newline at end of file
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'cutting_marign',
title : '切除profile外数值',
type : 'LineEdit',
property : {tool_tip : '切除profile外数值,默认是0.2mm'},
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
tool_tip:'是否自动保存料号开关'
}
}
]
VERSION_HISTORY:
V1.00 2020-04-20 Scott Sun
1.新版本
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> 删除板外 </p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<p> 切除值 </p>
<br>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
<br>
</body></html>
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
console.log("==============================>删除板外");
// 引入模块 包
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var database = require("topsin.database");
database.addConnection($.conf.database_conf, "DFM");
var QDfm = database.query("DFM");
if ($.conf.product_type == "aimdfm") {
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
current_process_title: $.process_title
},
where: { id: $.task_id }
});
}
var GEN = $.gen;
var Job = $.job_name;
var db = $.db
var Status = 'ok';
var resultData = [];
var PAR = {};
if ($.hasOwnProperty('script_parameter')){
PAR = JSON.parse($.script_parameter);
}
try {
var par = PAR;
var default_par = {
cutting_marign: "0.2mm",
auto_save: "No",
}
for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key]
}
}
par.cutting_marign = parseFloat(par.cutting_marign)
if(!/^(([^0][0-9]+|0)\.([0-9]{1,2})$)|^([^0][0-9]+|0)$/ig.test(par.cutting_marign)){throw "cutting_marign failed"}
var cutting_marign_symbol = "r" + String(par.cutting_marign * 1000)
if(_.isEmpty(Job)){throw "参数Job不存在"}
var job = Job.toLowerCase()
// 检查料号是否存在
if(!GEN.isJobExists({job:job})){throw "料号已经:"+job+"不存在"}
// 检查料号是否被打开
if(!GEN.isJobOpen({job:job})){ GEN.openJob({job:job}) }
// 检查料号是否能够check out
if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" }
GEN.checkInout({job:job,mode:"out"});
// 通过matrix获取board层
var matrix = GEN.getMatrix({job:job})
var board_layers = Object.keys(matrix).reduce(function(a,b){
if(matrix[b].context == "board"){
a.push(b)
}
return a
},[])
// 影响board层
var steplist = GEN.getStepList({job:job})
steplist.forEach(function(step){
GEN.openStep({job:job,name:step})
GEN.clearLayers()
GEN.affectedLayer({affected:"no", mode: "all"})
GEN.affectedLayer({affected:"yes",layer:board_layers})
// 切除profile以外0.2mm(cutting_marign)物件
GEN.selectByFilter({
include_syms:cutting_marign_symbol,
profile: "out"
})
GEN.selDelete() // ?
GEN.closeStep()
})
// 保存
if(/yes/ig.test(par.auto_save)){
GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号
GEN.saveJob({ job: job });
GEN.checkInout({job:job,mode:"in"})
GEN.closeJob({job:job})
} else {
GEN.checkInout({job:job,mode:"in"})
}
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
progress: 33.33
},
where: { id: $.task_id }
});
if (GEN.hasError()) {
Status = 'error';
resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
return {
status: Status,
result_data: resultData
};
} else {
resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
return {
status: Status,
result_data: resultData
};
}
} catch (e) {
Status = 'error';
resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
return {status: Status, result_data: resultData};
}
\ No newline at end of file
This diff is collapsed.
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'outline',
title : '外形层',
type : 'LineEdit',
property : {tool_tip : '外形层,默认是gko'},
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
tool_tip:'是否自动保存料号开关'
}
}
]
VERSION_HISTORY:
V1.00 2020-04-20 Scott Sun
1.新版本
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> 设置零点 </p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<p> 外形层 </p>
<br>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
<br>
</body></html>
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
console.log("==============================>设置零点");
// 引入模块 包
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var database = require("topsin.database");
database.addConnection($.conf.database_conf, "DFM");
var QDfm = database.query("DFM");
if ($.conf.product_type == "aimdfm") {
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
current_process_title: $.process_title
},
where: { id: $.task_id }
});
}
var GEN = $.gen;
var Job = $.job_name;
var db = $.db
var Status = 'ok';
var resultData = [];
var PAR = {};
if ($.hasOwnProperty('script_parameter')){
PAR = JSON.parse($.script_parameter);
}
try {
var par = PAR;
var default_par = {
outline: "gko",
auto_save: "No",
}
for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key]
}
}
if(_.isEmpty(Job))
var job = Job.toLowerCase()
var outline = par.outline
// 检查料号是否存在
if(!GEN.isJobExists({job:job})){throw "料号已经:"+job+"不存在"}
// 检查料号是否被打开
if(!GEN.isJobOpen({job:job})){ GEN.openJob({job:job}) }
// 检查料号是否能够check out
if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" }
GEN.checkInout({job:job,mode:"out"});
// 判断参考层(outline)是否存在并不为空
if(!GEN.isLayerExists({job:job,layer:outline})){throw "outline不存在"}
var steplist = GEN.getStepList({job:job})
steplist.forEach(function(step){
if(GEN.isLayerEmpty({job:job,step:step,layer:outline})){
GEN.openStep({job:job,name:step})
// 将所有物件依据外形移动到零点
GEN.workLayer({name:outline,display_number:2,clear_before:'yes'})
var outline_symbol = GEN.getSymbolLimits({job:job,symbol:outline})
GEN.affectedLayer({affected:"yes",mode:"all"})
GEN.selMove({dx:-outline_symbol.xmin,dy:-outline_symbol.ymin})
// 创建为profile
GEN.affectedLayer({affected:"no",mode:"all"})
GEN.workLayer({name:outline,display_number:2,clear_before:'yes'})
GEN.selAllFeat()
GEN.selCreateProfile()
GEN.clearLayers()
GEN.selClearFeature()
GEN.closeJob()
}
})
// 保存
if(/yes/ig.test(par.auto_save)){
GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号
GEN.saveJob({ job: job });
GEN.checkInout({job:job,mode:"in"})
GEN.closeJob({job:job})
} else {
GEN.checkInout({job:job,mode:"in"})
}
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
progress: 33.33
},
where: { id: $.task_id }
});
if (GEN.hasError()) {
Status = 'error';
resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
return {
status: Status,
result_data: resultData
};
} else {
resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
return {
status: Status,
result_data: resultData
};
}
} catch (e) {
Status = 'error';
resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
return {status: Status, result_data: resultData};
}
\ No newline at end of file
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
]
VERSION_HISTORY:
V1.00 2020-04-20 Scott Sun
1.新版本
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> 保存料号 </p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<p> </p>
<br>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
<br>
</body></html>
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
console.log("==============================>保存料号");
// 引入模块 包
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var database = require("topsin.database");
database.addConnection($.conf.database_conf, "DFM");
var QDfm = database.query("DFM");
if ($.conf.product_type == "aimdfm") {
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
current_process_title: $.process_title
},
where: { id: $.task_id }
});
}
var GEN = $.gen;
var Job = $.job_name;
var db = $.db
var Status = 'ok';
var resultData = [];
try {
if(_.isEmpty(Job)){throw "参数Job不存在"}
var job = Job.toLowerCase()
// 检查料号是否存在
if(!GEN.isJobExists({job:job})){throw "料号已经:"+job+"不存在"}
// 检查料号是否被打开
if(!GEN.isJobOpen({job:job})){ throw "料号没有打开" } // ?
// 检查料号是否能够check out
if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" }
GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号
GEN.saveJob({ job: job });
GEN.checkInout({job:job,mode:"in"})
GEN.closeJob({job:job})
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
progress: 33.33
},
where: { id: $.task_id }
});
if (GEN.hasError()) {
Status = 'error';
resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
return {
status: Status,
result_data: resultData
};
} else {
resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
return {
status: Status,
result_data: resultData
};
}
} catch (e) {
Status = 'error';
resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
return {status: Status, result_data: resultData};
}
\ No newline at end of file
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'source_step',
title : '来源step',
type : 'LineEdit',
property : {tool_tip : '来源step,默认是orig'},
},
{
name : 'dest_step',
title : '目标step',
type : 'LineEdit',
property : {tool_tip : '目标step,默认是net'},
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
tool_tip:'是否自动保存料号开关'
}
}
]
VERSION_HISTORY:
V1.00 2020-04-20 Scott Sun
1.新版本
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> 复制net </p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<p> step信息 </p>
<br>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
<br>
</body></html>
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
console.log("==============================>复制net");
// 引入模块 包
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var database = require("topsin.database");
database.addConnection($.conf.database_conf, "DFM");
var QDfm = database.query("DFM");
if ($.conf.product_type == "aimdfm") {
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
current_process_title: $.process_title
},
where: { id: $.task_id }
});
}
var GEN = $.gen;
var Job = $.job_name;
var db = $.db
var Status = 'ok';
var resultData = [];
var PAR = {};
if ($.hasOwnProperty('script_parameter')){
PAR = JSON.parse($.script_parameter);
}
try {
var par = PAR;
var default_par = {
source_step: "orig",
dest_step: "net",
auto_save: "No",
}
for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key]
}
}
if(_.isEmpty(Job)){throw "参数Job不存在"}
var job = Job.toLowerCase()
// 检查料号是否存在
if(!GEN.isJobExists({job:job})){throw "料号已经:"+job+"不存在"}
// 检查料号是否被打开
if(!GEN.isJobOpen({job:job})){ GEN.openJob({job:job}) }
// 检查料号是否能够check out
if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" }
GEN.checkInout({job:job,mode:"out"});
// 将source_step 拷贝到成dest_step
if(GEN.isStepExists({job:job,step:par.dest_step})){
GEN.deleteStep({job:job,step:par.dest_step})
}
GEN.copyStep({source_job:job,source_name:par.source_step,dest_job:job,dest_name:par.dest_step})
// 保存
if(/yes/ig.test(par.auto_save)){
GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号
GEN.saveJob({ job: job });
GEN.checkInout({job:job,mode:"in"})
GEN.closeJob({job:job})
} else {
GEN.checkInout({job:job,mode:"in"})
}
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
progress: 33.33
},
where: { id: $.task_id }
});
if (GEN.hasError()) {
Status = 'error';
resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
return {
status: Status,
result_data: resultData
};
} else {
resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
return {
status: Status,
result_data: resultData
};
}
} catch (e) {
Status = 'error';
resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
return {status: Status, result_data: resultData};
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment