Commit 21ea8dd5 authored by Scott Sun's avatar Scott Sun

s

parent c7a97443
......@@ -44,6 +44,38 @@
],
tool_tip:'是否自动保存料号开关'
}
},
{
name : 'export_path',
title : '导出路径',
type : 'LineEdit',
property : {tool_tip : '导出路径'}
},
{
name : 'export_mode',
title : '导出模式',
type : 'RadioBox',
property : {
item_list:[
{name:'tar_gzip',text:'tar_gzip'},
{name:'tar',text:'tar'},
{name:'xml',text:'xml'},
{name:'directory',text:'directory'},
],
tool_tip:'导出模式'
}
},
{
name : 'export_submode',
title : '导出方式',
type : 'RadioBox',
property : {
item_list:[
{name:'full',text:'full'},
{name:'partial',text:'partial'},
],
tool_tip:'导出方式'
}
}
]
......@@ -576,7 +608,7 @@ try {
GEN.openStep({job:job,name:step})
GEN.affectedLayer({affected:'no',mode:'all'})
GEN.clearLayers()
if(par.cam_type == "genesis"){
if(GEN.GEN_TYPE == "genesis"){
GEN.COM("chklist_single,action=valor_cleanup_set_smd,show=yes")
GEN.COM("chklist_cupd,chklist=valor_cleanup_set_smd,nact=1,params=((pp_layer=.type=signal|mixed&side=top|bottom)(pp_drill=No)(pp_rotate=No)(pp_ignore_covered=Yes)(pp_sm=No)(pp_types=Square\;Rect\;Oval)(pp_other=)(pp_delete=No)),mode=regular")
GEN.COM("chklist_run,chklist=valor_cleanup_set_smd,nact=1,area=profile")
......@@ -660,7 +692,6 @@ try {
}
})
console.log("================================> 9 copper_percent signal drill")
// 分析layer info
var stepList = [pcs_step];
var oChecklistName = "mychecklist"
......@@ -714,6 +745,13 @@ try {
jobid: JobId,
jobinfohash: {ATS_surface_area_base_on:"Card"}
})
var jobpath
if(GEN.GEN_TYPE == "genesis"){
jobpath = GEN.getJobPath({job:job})
} else {
jobpath = "/home/local_db/server_db/jobs/"+job
}
mkPath(jobpath,["user","opcam","steps"])
stepList.forEach(function(step){
GEN.openStep({ job: job, name: step })
// GEN.units({type:'mm'})
......@@ -832,7 +870,7 @@ try {
items: [tmpitem]
})
// signal层分析结果
var res = analysisChkAttr({layers:signalLayers, info:info, step:step, job:job, oChecklistName:oChecklistName})
var res = analysisChkAttr({layers:signalLayers, info:info, step:step, job:job, oChecklistName:oChecklistName,jobpath:jobpath})
// 数据入库
Object.keys(res).forEach(function(key){
......@@ -850,9 +888,9 @@ try {
layerinfohash: val
})
})
GEN.closeStep()
})
// 保存
if(/yes/ig.test(par.auto_save)){
......@@ -864,6 +902,17 @@ try {
GEN.checkInout({job:job,mode:"in"})
}
// 导出
if(par.export_path != "" && par.export_mode != "" && par.export_submode != "" ){
if(fs.exists(par.export_path)){
GEN.COM("export_job",{job:job,path:par.export_path,mode:par.export_mode,submode:par.export_submode,overwrite:"yes",format:"genesis",output_name:job})
GEN.COM("disp_on")
GEN.COM("origin_on")
} else {
resultData.push({ type: "error", title: "导出路径不存在!", detail: [{ desc: par.export_path }] });
}
}
QDfm.updateRow({
table: "pdm_aimdfm_task",
......@@ -968,8 +1017,8 @@ function ANALYSIS_STACKUP(props){
layer.drl_to_num = layer_count;
layer.type = 'main_drill';
}
else if (/^ftdrill(\d+)-(\d+)l$/.test(layer.odb_name)){ // /^d(\d+)\-(\d+)$/
var tmp = /^ftdrill(\d+)-(\d+)l$/.exec(layer.odb_name)
else if (/^ftdrill(\d+)-(\d+)/.test(layer.odb_name)){ // /^d(\d+)\-(\d+)$/
var tmp = /^ftdrill(\d+)-(\d+)/.exec(layer.odb_name)
var drl_star = tmp[1];
var drl_end = tmp[2];
layer.drl_start_num = drl_star;
......@@ -1740,6 +1789,7 @@ function analysisChkAttr(par) {
var job = par.job;
var oChecklistName = par.oChecklistName
layers.forEach(function (v) {
saveMeans({job:job,step:par.step,chklist:oChecklistName,nact:1,layer:v,jobpath:par.jobpath})
hash[v] = {}
Object.keys(info).forEach(function (key) {
var val = info[key]
......@@ -2243,4 +2293,26 @@ function unSelect(){
GEN.selectByFilter({attribute:[{attribute:'.drill',option:'non_plated'}],profile:'all',operation:"unselect"})
}
function mkPath(path,list) {
console.log("--path:" + path);
if(list.length){
var newPath = path + '/' + list.shift()
if(!fs.dirExists(newPath)){
fs.mkdir(newPath)
console.log("--mkdir:" + newPath);
}
return mkPath(newPath,list)
} else {return path}
}
function saveMeans(props){
var job = props.job
var step = props.step
var chklist = props.chklist
var nact = props.nact
var layer = props.layer
// 获取meas
var meas = GEN.getCheckMeas({job:job,step:step,chklist:chklist,nact:nact,layer:layer})
var basepath = props.jobpath+"/user/opcam/steps"
var respath = mkPath(basepath,[step,"chk",chklist+"_"+nact,layer])
fs.writeFile(respath+"/meas",meas.join("\n"))
}
\ No newline at end of file
This diff is collapsed.
......@@ -70,6 +70,7 @@ var JobId = $.job_id;
var db = $.db;
var Status = 'ok';
var resultData = [];
var import_info = []
var PAR = {};
if ($.hasOwnProperty('script_parameter')){
PAR = JSON.parse($.script_parameter);
......@@ -156,10 +157,9 @@ try {
if(jobInfo.data.length == 0){throw "file error"}
var importOk = false; // 是否成功导入
if(/odb/ig.test(jobInfo.type)){ // odb导入
fs.writeFile("./tmp.js",_.toString(jobInfo.data))
if(jobInfo.data.length == 1){ // 只分析到一个tgz文件 直接导入
resultData.push( {type: "info", title: "读取"+jobInfo.data[0].file.name,
detail: [{desc: _.toString({format:"odb++",date:now(),user:$.user_name})}]})
import_info.push({name:jobInfo.data[0].file.name, type:"odb++", date:now(),user:$.user_name})
var err = importJob({name:job,db:custCfg.db,path:jobInfo.data[0].file.path},config.delSameJob)
if(err){throw err}
} else { // 多个tgz文件 说明需要合并
......@@ -168,8 +168,7 @@ try {
var path = item.file.path
var tmp_job_name = job + "_tmp_" + i
var err = importJob({name:tmp_job_name,db:custCfg.db,path:path},config.delSameJob)
resultData.push( {type: "info", title: "读取"+item.file.name,
detail: [{desc: _.toString({format:"odb++",date:now(),user:$.user_name})}]})
import_info.push({name:item.file.name, type:"odb++", date:now(),user:$.user_name})
if(err){throw err}
return {
name:tmp_job_name,
......@@ -233,7 +232,7 @@ try {
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.layer = file.name.toLowerCase().split(" ").join("-")
gerberCfg.path = file.path
gerberCfg.format = item.type
gerberCfg.job = job
......@@ -242,8 +241,8 @@ try {
})
GEN.COM("input_manual_reset")
gerberInfo.forEach(function(v){
resultData.push( {type: "info", title: "读取"+v.layer,
detail: [{desc: _.toString({format:v.format,date:now(),user:$.user_name})}]})
import_info.push({name:v.layer, type:"gerber274x", date:now(),user:$.user_name})
GEN.COM("input_manual_set",v)
})
GEN.COM("input_manual")
......@@ -278,6 +277,16 @@ try {
},
where: { id: $.task_id }
});
// name type date user
resultData.push({type: "info",title:"导入资料列表",detail: [{ desc:
import_info.map(function(item){
var name = item.name
var type = item.type
var date = item.date
var user = item.user
return "导入资料:"+name+", 类型:"+type+", 导入时间:"+date+", 操作用户:"+user
}).join("\n")
}] })
if (GEN.hasError()) {
Status = 'error';
resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
......
......@@ -245,26 +245,6 @@
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
},
"IPC356A_1":{
"nf1": 2,
"nf2": 4,
"units": "inch",
"zeroes": "none",
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "*",
"threshold": 200,
"drill_only": "no",
"multiplier": 1,
"resolution": 3,
"tool_units": "inch",
"coordinates": "absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
}
},
"customer": {
......@@ -680,10 +660,10 @@
{
"valid": function(props){
var file = props.file;
return /.+\.btd$|.+\.rou$/ig.test(file.name)
return /.+\.btd$/ig.test(file.name)
},
"type": "IPC356A",
"format": "IPC356A_1"
"type": "IPC356",
"format": "IPC356_1"
},
{
"valid": function(props){
......@@ -761,7 +741,7 @@
{
"valid": function(props){
var file = props.file;
return /.+\.drl$/ig.test(file.name)
return /.+\.drl$|\.rou$/ig.test(file.name)
},
"type": "Excellon2",
"format": "Excellon2_4",
......@@ -809,10 +789,10 @@
{"orig_name" : ["^smt\\.art$","\\.sma$","SoldMask1Top\\.ger","sm_top"], "tl_name" : "sm_top" },
{"orig_name" : ["^smb\\.art$","\\.smb$","SoldMask1Bot\\.ger","sm_bot"], "tl_name" : "sm_botm" },
{"orig_name" : ["^top$","^top.art$"], "tl_name" : "top" },
{"orig_name" : ["^g(\\d+)\\.art$","^s(\\d+)\\.art$","\\.l(\\d+)$","Copper(\\d+)\\.ger$","^layer_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^v(\\d+)\\.art$","^g(\\d+)\\.art$","^s(\\d+)\\.art$","\\.l(\\d+)$","Copper(\\d+)\\.ger$","^layer_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^bot\\.art$","^bottom$","^bottom.art$"], "tl_name" : "bottom" },
{"orig_name" : ["\\.d(\\d+)$"], "tl_name" : "d_($1)-($1+1)"},
{"orig_name" : ["ThruHolePlated_(\\d+)_(\\d+)\\.ncd$","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"},
{"orig_name" : ["thruHolePlated_(\\d+)_(\\d+)\\.ncd","^drill(\\d+)-(\\d+)$","^d_(\\d+)-(\\d+)$"], "tl_name" : "d_($1)-($2)"},
{"orig_name" : ["ThruHoleNonPlated\\.ncd$","^drill$"], "tl_name" : "drill" },
{"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
{"orig_name" : "fab.art", "tl_name" : "fab.art" },
......@@ -820,7 +800,15 @@
{"orig_name" : ["\\.bol$","PnlContourNonPlated\\.ger","^outline"], "tl_name" : "outline" },
{"orig_name" : ["top-enig","enig_top"], "tl_name" : "enig_top" },
{"orig_name" : ["bot-enig","enig_bot"], "tl_name" : "enig_bot" },
]
],
"mergerule" : {
drill: ["(\\d+)-(\\d+)\\.drl$"],
profile:["^drill.\\art$"],
laser : {
tl_name: "drill($1)-($2)",
regs: ["(\\d+)-(\\d+)\\.drl$"]
}
}
},
"Vivo":{
"step": "cad",
......@@ -844,7 +832,7 @@
{
"valid": function(props){
var file = props.file;
return /\.gdo$/ig.test(file.name)
return /\.gdo$|\.pho$/ig.test(file.name)
},
"type": "Gerber274x",
"format": "Gerber274x_4"
......@@ -852,32 +840,110 @@
{
"valid": function(props){
var file = props.file;
return /.+\.ncd$/ig.test(file.name) || /.+\.d\d+$/ig.test(file.name)
return /.+\.ncd$|\.drl/ig.test(file.name) || /.+\.d\d+$/ig.test(file.name)
},
"type": "Excellon2",
"format": "Excellon2_5"
}
],
"tl_name": [
{"orig_name" : ["solderpastetop","past_top"], "tl_name" : "past_top" },
{"orig_name" : ["solderpastebottom","past_botm"], "tl_name" : "past_botm" },
{"orig_name" : ["OSP-Top\\.pho","solderpastetop","past_top"], "tl_name" : "past_top" },
{"orig_name" : ["OSP-Bottom\\.pho","solderpastebottom","past_botm"], "tl_name" : "past_botm" },
{"orig_name" : ["pleg\\.art","^ss_top","silk_top"], "tl_name" : "silk_top" },
{"orig_name" : ["sleg\\.art","^ss_bot","silk_bot"], "tl_name" : "silk_bot" },
{"orig_name" : ["soldermasktop","sm_top"], "tl_name" : "sm_top" },
{"orig_name" : ["soldermaskbottom","sm_bot"], "tl_name" : "sm_botm" },
{"orig_name" : ["^top$","layertop"], "tl_name" : "top" },
{"orig_name" : ["layer(\\d+)\\.gdo","layer_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^bottom$","layerbottom"], "tl_name" : "bottom" },
{"orig_name" : ["-(\\d+)-(\\d+)\\.drl$","(\\d+)-(\\d+)-laser\\.drl$","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"},
{"orig_name" : ["Top solder mask\\.pho","soldermasktop","sm_top"], "tl_name" : "sm_top" },
{"orig_name" : ["Bottom solder mask\\.pho","soldermaskbottom","sm_bot"], "tl_name" : "sm_botm" },
{"orig_name" : ["Top\\.pho","^top$","layertop"], "tl_name" : "top" },
{"orig_name" : ["^lay_(\\d+)","layer(\\d+)\\.gdo","layer_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^Bottom\\.pho$","^bottom$","layerbottom"], "tl_name" : "bottom" },
{"orig_name" : ["(\\d)-(\\d)\\.drl$","drill(\\d+)-(\\d+)","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"},
{"orig_name" : ["^drill$"], "tl_name" : "drill" },
{"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
{"orig_name" : "fab.art", "tl_name" : "fab.art" },
{"orig_name" : ["pcb-set","^array$"], "tl_name" : "array" },
{"orig_name" : ["PCB-SET\\.pho","^pcb-set$","^array$"], "tl_name" : "array" },
{"orig_name" : ["^outline"], "tl_name" : "outline" },
{"orig_name" : ["au_mask_bottom\\.gdo","enig_top"], "tl_name" : "enig_top" },
{"orig_name" : ["au_mask_top\\.gdo","enig_bot"], "tl_name" : "enig_bot" },
{"orig_name" : ["au_mask-bottom\\.gdo","au_mask_bottom\\.gdo","enig_top"], "tl_name" : "enig_top" },
{"orig_name" : ["au_mask-top\\.gdo","au_mask_top\\.gdo","enig_bot"], "tl_name" : "enig_bot" },
{"orig_name" : ["cavitytop","cavity_top"], "tl_name" : "cavity_top" },
{"orig_name" : ["cavitybottom","cavity_bot"], "tl_name" : "cavity_bot" },
]
],
"mergerule" : {
drill: [
{orig_rule:["contournonplated"],drill_type:"non_plated",shape:"slot"},
{orig_rule:["contourplated"],drill_type:"plated",shape:"slot"},
{orig_rule:["thruholenonplated"],drill_type:"non_plated",shape:"hole"},
{orig_rule:["thruholeplated"],drill_type:"plated",shape:"hole"},
],
profile:["enig_bot"],
laser : {
tl_name: "drill($1)-($2)",
regs: ["(\\d+)-(\\d+)plated\\.ncd$"]
}
}
},
"1352":{
"step": "cad",
"rules": [
{
"valid": function(props){
var file = props.file;
return /.+\.tgz$/ig.test(file.name)
},
"type": "ODB",
"format": "ODB"
},
{
"valid": function(props){
var file = props.file;
return /.+\.ipc$/ig.test(file.name)
},
"type": "IPC356",
"format": "IPC356_1"
},
{
"valid": function(props){
var file = props.file;
return /.+\.art$/ig.test(file.name)
},
"type": "Gerber274x",
"format": "Gerber274x_3"
},
{
"valid": function(props){
var file = props.file;
return /.+\.drl$/ig.test(file.name)
},
"type": "Excellon2",
"format": "Excellon2_4"
}
],
"tl_name": [
{"orig_name" : ["pasttop.art","past_top"], "tl_name" : "past_top" },
{"orig_name" : ["pastbotm.art","past_botm"], "tl_name" : "past_botm" },
{"orig_name" : ["^sst\\.art$","\\.ssa$","SilkScrnTop\\.ger","silk_top"], "tl_name" : "silk_top" },
{"orig_name" : ["^ssb\\.art$","\\.ssb$","SilkScrnBot\\.ger","silk_bot"], "tl_name" : "silk_bot" },
{"orig_name" : ["soldtop.art","sm_top"], "tl_name" : "sm_top" },
{"orig_name" : ["soldbotm\\.art","sm_bot"], "tl_name" : "sm_botm" },
{"orig_name" : ["^top$","^top.art$"], "tl_name" : "top" },
{"orig_name" : ["^art(\\d+)\\.art$","^l_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^bot\\.art$","^bottom$","^bottom.art$"], "tl_name" : "bottom" },
{"orig_name" : ["\\.d(\\d+)$"], "tl_name" : "d_($1)-($1+1)"},
{"orig_name" : ["^drill(\\d+)-(\\d+)$","^d_(\\d+)-(\\d+)$"], "tl_name" : "d_($1)-($2)"},
{"orig_name" : ["^drill$"], "tl_name" : "drill" },
{"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
{"orig_name" : "fab.art", "tl_name" : "fab.art" },
{"orig_name" : ["multipack.art","^array$"], "tl_name" : "array" },
{"orig_name" : ["\\.bol$","PnlContourNonPlated\\.ger","^outline"], "tl_name" : "outline" },
{"orig_name" : ["top-enig","enig_top"], "tl_name" : "enig_top" },
{"orig_name" : ["bot-enig","enig_bot"], "tl_name" : "enig_bot" },
],
"mergerule" : {
drill:["(\\d+)-(\\d+)\\.drl$"],
laser : {
tl_name: "drill($1)-($2)",
regs: ["(\\d+)-(\\d+)\\.drl$"]
}
}
}
},
"data_format": [
......
......@@ -46,6 +46,7 @@ var GEN = $.gen;
var Job = $.job_name;
var db = $.db;
var JobId = $.job_id;
var process = require('process');
var Status = 'ok';
var resultData = [];
var PAR = {};
......@@ -54,6 +55,19 @@ if ($.hasOwnProperty('script_parameter')){
}
try {
var job = Job.toLowerCase()
console.log("job---------:"+job);
console.log("GENESIS_DIR---------:"+GEN.GENESIS_DIR);
console.log("GEN_TYPE---------:"+GEN.GEN_TYPE);
var jobpath = GEN.getJobPath({job:job})
console.log("_____jobpath______:"+_.toString(jobpath));
console.log("______path:"+GEN.dbutil('path jobs ' + jobname));
// mkPath( jobpath,["user","opcam","steps"])
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
......@@ -81,3 +95,17 @@ catch (e) {
resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
return {status: Status, result_data: resultData};
}
function mkPath(path,list) {
console.log("--path:" + path);
if(list.length){
var newPath = path + '/' + list.shift()
if(!fs.dirExists(newPath)){
fs.mkdir(newPath)
console.log("--mkdir:" + newPath);
}
return mkPath(newPath,list)
} else {return path}
}
\ No newline at end of file
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