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

s

parent c7a97443
...@@ -44,6 +44,38 @@ ...@@ -44,6 +44,38 @@
], ],
tool_tip:'是否自动保存料号开关' 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 { ...@@ -576,7 +608,7 @@ try {
GEN.openStep({job:job,name:step}) GEN.openStep({job:job,name:step})
GEN.affectedLayer({affected:'no',mode:'all'}) GEN.affectedLayer({affected:'no',mode:'all'})
GEN.clearLayers() 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_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_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") GEN.COM("chklist_run,chklist=valor_cleanup_set_smd,nact=1,area=profile")
...@@ -660,7 +692,6 @@ try { ...@@ -660,7 +692,6 @@ try {
} }
}) })
console.log("================================> 9 copper_percent signal drill") console.log("================================> 9 copper_percent signal drill")
// 分析layer info // 分析layer info
var stepList = [pcs_step]; var stepList = [pcs_step];
var oChecklistName = "mychecklist" var oChecklistName = "mychecklist"
...@@ -714,6 +745,13 @@ try { ...@@ -714,6 +745,13 @@ try {
jobid: JobId, jobid: JobId,
jobinfohash: {ATS_surface_area_base_on:"Card"} 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){ stepList.forEach(function(step){
GEN.openStep({ job: job, name: step }) GEN.openStep({ job: job, name: step })
// GEN.units({type:'mm'}) // GEN.units({type:'mm'})
...@@ -832,7 +870,7 @@ try { ...@@ -832,7 +870,7 @@ try {
items: [tmpitem] items: [tmpitem]
}) })
// signal层分析结果 // 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){ Object.keys(res).forEach(function(key){
...@@ -850,9 +888,9 @@ try { ...@@ -850,9 +888,9 @@ try {
layerinfohash: val layerinfohash: val
}) })
}) })
GEN.closeStep() GEN.closeStep()
}) })
// 保存 // 保存
if(/yes/ig.test(par.auto_save)){ if(/yes/ig.test(par.auto_save)){
...@@ -864,6 +902,17 @@ try { ...@@ -864,6 +902,17 @@ try {
GEN.checkInout({job:job,mode:"in"}) 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({ QDfm.updateRow({
table: "pdm_aimdfm_task", table: "pdm_aimdfm_task",
...@@ -968,8 +1017,8 @@ function ANALYSIS_STACKUP(props){ ...@@ -968,8 +1017,8 @@ function ANALYSIS_STACKUP(props){
layer.drl_to_num = layer_count; layer.drl_to_num = layer_count;
layer.type = 'main_drill'; layer.type = 'main_drill';
} }
else if (/^ftdrill(\d+)-(\d+)l$/.test(layer.odb_name)){ // /^d(\d+)\-(\d+)$/ else if (/^ftdrill(\d+)-(\d+)/.test(layer.odb_name)){ // /^d(\d+)\-(\d+)$/
var tmp = /^ftdrill(\d+)-(\d+)l$/.exec(layer.odb_name) var tmp = /^ftdrill(\d+)-(\d+)/.exec(layer.odb_name)
var drl_star = tmp[1]; var drl_star = tmp[1];
var drl_end = tmp[2]; var drl_end = tmp[2];
layer.drl_start_num = drl_star; layer.drl_start_num = drl_star;
...@@ -1740,6 +1789,7 @@ function analysisChkAttr(par) { ...@@ -1740,6 +1789,7 @@ function analysisChkAttr(par) {
var job = par.job; var job = par.job;
var oChecklistName = par.oChecklistName var oChecklistName = par.oChecklistName
layers.forEach(function (v) { layers.forEach(function (v) {
saveMeans({job:job,step:par.step,chklist:oChecklistName,nact:1,layer:v,jobpath:par.jobpath})
hash[v] = {} hash[v] = {}
Object.keys(info).forEach(function (key) { Object.keys(info).forEach(function (key) {
var val = info[key] var val = info[key]
...@@ -2243,4 +2293,26 @@ function unSelect(){ ...@@ -2243,4 +2293,26 @@ function unSelect(){
GEN.selectByFilter({attribute:[{attribute:'.drill',option:'non_plated'}],profile:'all',operation:"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
...@@ -99,9 +99,75 @@ try { ...@@ -99,9 +99,75 @@ try {
console.log("Checkout====== ========================>") console.log("Checkout====== ========================>")
GEN.checkInout({job:job,mode:"out"}); GEN.checkInout({job:job,mode:"out"});
console.log("Checkout success==============================>") console.log("Checkout success==============================>")
// if(config.hasOwnProperty("merge_drill")){ // todo var profileRule
// mergeDrill({job:job}) if(custCfg.hasOwnProperty("mergerule")){
// } var mergeRule = custCfg.mergerule
if(mergeRule.drill){
if(/string/ig.test(typeof(mergeRule.drill[0]))){ // drill层 计算
var drill_layers = []
var matrix = GEN.getMatrix({job:job})
// 计算最大值
var layers = Object.keys(matrix)
var maxnum = []
layers.forEach(function(v){
var hasrule
mergeRule.drill.forEach(function(rule){
var reg = new RegExp(rule,"ig")
if(reg.test(v)){hasrule = rule}
})
if(hasrule){
var reg = new RegExp(hasrule,"ig")
var tmp = reg.exec(v)
var num1 = Number(tmp[1])
var num2 = Number(tmp[2])
if(num1==1){
drill_layers.push({num1:num1,num2:num2,layer:v})
}
maxnum.push(num1)
maxnum.push(num2)
}
})
var max = maxnum.sort(function(a,b){return b-a})[0]
var drill_layer = drill_layers.filter(function(v){return v.num2 == max})
if(drill_layer.length){
drill_layer = drill_layer[0].layer
GEN.COM("matrix_rename_layer",{job:job,matrix:"matrix",layer:drill_layer,new_name:"drill"})
}
}else if(/object/ig.test(typeof(mergeRule.drill[0]))){
// 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"},
// ],
var matrix = GEN.getMatrix({job:job})
// 计算最大值
var layers = Object.keys(matrix)
var tmp_step = GEN.getStepList({job:job})
GEN.openStep({job:job,name:tmp_step[0]})
layers.forEach(function(layer){
var tmp = mergeRule.drill.filter(function(item){
var reg = new RegExp(item.orig_rule,"ig")
return reg.test(layer)
})
if(tmp.length){
tmp = tmp[0]
GEN.workLayer({name:layer,display_number:2,clear_before:'yes'})
GEN.COM("cur_atr_set,attribute=.drill,option="+tmp.drill_type)
GEN.COM("sel_change_atr,mode=add")
GEN.selCopyOther({dest:'layer_name',target_layer:'drill',invert:'no',dx:0,dy:0,size:0})
}
})
GEN.closeStep()
}
}
if(mergeRule.laser){
mergeLaser({job:job, mergeRule:mergeRule.laser})
}
if(mergeRule.profile){
profileRule = mergeRule.profile
}
}
// start martix_tl_name // start martix_tl_name
console.log("get matrix ====== ======== job:" + job); console.log("get matrix ====== ======== job:" + job);
var matrix = GEN.getMatrix({job:job}); var matrix = GEN.getMatrix({job:job});
...@@ -124,6 +190,56 @@ try { ...@@ -124,6 +190,56 @@ try {
err = reName({job:job, matrix:after_sort_matrix, cfg:format_cfg}) err = reName({job:job, matrix:after_sort_matrix, cfg:format_cfg})
if(err){throw err} if(err){throw err}
var tmp_matrix = GEN.getMatrix({job:job})
// 钻孔名称再次更改
var ftdrill_layer = Object.keys(tmp_matrix).filter(function(v){
return tmp_matrix[v].layer_type=="drill" && tmp_matrix[v].context=="board"
})
var hasMainDrill = Boolean(ftdrill_layer.indexOf("ftdrill") >= 0)
var layer_count = GEN.getLayerCount({job:job})
ftdrill_layer.forEach(function(v){
if(/(\d+)-(\d+)/.test(v)){
var tmp = /(\d+)-(\d+)/.exec(v)
var num1 = Number(tmp[1])
var num2 = Number(tmp[2])
var chabie = num2 - num1
if(num1 == 1 && num2 == layer_count && !hasMainDrill){
GEN.renameLayer({job:job,layer:v,new_name:"ftdrill"})
if (ftdrill_layer[ftdrill_layer.length-1]!= v){
GEN.matrixMoveRow({ job:job,layer:"ftdrill",after:ftdrill_layer[ftdrill_layer.length-1] })
}
} else if(chabie>1 && chabie < layer_count - 1){
// 改名
GEN.renameLayer({job:job,layer:v,new_name:v.substr(0,v.length-1)})
}
}
})
var all_layer = Object.keys(tmp_matrix)
// 没有outline层
if(profileRule && all_layer.indexOf("outline") < 0){
// 判断有没有profile
var board_layer = all_layer.filter(function(v){
return tmp_matrix[v].context == "board"
})
var tmp_step = GEN.getStepList({job:job})[0]
GEN.openStep({job:job, name:tmp_step})
var now_profile = GEN.getProfile({job:job, step:tmp_step})
if(now_profile.match(/\n/ig).length == 1){ // 如果没有profile
createOutline({job:job, step:tmp_step, matrix: tmp_matrix, profileRule:profileRule})
var hasProfile = GEN.getProfile({job:job, step:tmp_step})
if(hasProfile.match(/\n/ig).length == 1){
throw "创建profile失败"
}
} else {
GEN.affectedLayer({affected:'yes',layer: board_layer, clear_before:"yes"})
GEN.selectByFilter({profile:"out"})
if(GEN.getSelectCount() > 0){
GEN.selDelete()
}
}
}
// end // end
GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号 GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号
...@@ -268,8 +384,8 @@ function sortLayer(props){ // 排序方法 {job:要排序的料号, rule: {要 ...@@ -268,8 +384,8 @@ function sortLayer(props){ // 排序方法 {job:要排序的料号, rule: {要
} }
sortNames.forEach(function(v,i,arr){ sortNames.forEach(function(v,i,arr){
if(i !== 0){ if(i !== 0){
GEN.matrixMoveRow({ job:job,layer:v.name,after:arr[i-1].name }) GEN.matrixMoveRow({ job:job,layer:v.name,after:arr[i-1].name })
} }
GEN.matrixLayerAttr(_.assign({job:job,layer:v.name},v.attr)); GEN.matrixLayerAttr(_.assign({job:job,layer:v.name},v.attr));
}) })
} }
...@@ -389,29 +505,43 @@ function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名 ...@@ -389,29 +505,43 @@ function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名
} }
} }
function mergeDrill(props){ // 合并钻孔 function mergeLaser(props){ // 合并钻孔
var newdrills = [] if(!props.mergeRule){return}
var mergeRuleRegs = props.mergeRule.regs
var mergeTlname = props.mergeRule.tl_name
var newdrills = []
var merge_info = {}
var regs = mergeRuleRegs
var job = props.job; var job = props.job;
var step = GEN.getStepList({job:job})[0]; var step = GEN.getStepList({job:job})[0];
var maxDrill = {name:"",value:0}; var maxDrill = {name:"",value:0};
function getDrl(str){ function getDrl(str, r){
var num = /(\d+)-(\d+)\.drl/ig.exec(str); // 匹配出 num-num var reg = new RegExp(r,"ig")
var num = reg.exec(str); // 匹配出 num-num
var tmp = []; var tmp = [];
for(var i = Number(num[1]);i<num[2];i++){ for(var i = Number(num[1]);i<num[2];i++){
if(i == 1){ if(i == 1){
maxDrill = Number(num[2]) > maxDrill.value? {name:str,value:Number(num[2])} : maxDrill; maxDrill = Number(num[2]) > maxDrill.value? {name:str,value:Number(num[2])} : maxDrill;
} }
tmp.push("L"+i+"-"+(i+1)); var layername = mergeTlname.replace("($1)", i)
layername = layername.replace("($2)", i+1)
tmp.push(layername);
} }
return tmp; return tmp;
} }
var matrix = GEN.getMatrix({job:job}); var matrix = GEN.getMatrix({job:job});
GEN.openStep({job : job,name:step}); GEN.openStep({job : job,name:step});
for(var key in matrix){ for(var key in matrix){
var val = matrix[key]; var val = matrix[key];
if(val.layer_type == "drill" && /(\d+)-(\d+)\.drl/ig.test(val.name)){ var tmpregs = regs.filter(function(v){
var mergeTo = getDrl(val.name) // 要合并到的地方 var reg = new RegExp(v,"ig")
mergeTo.forEach(function(layerName){ return reg.test(val.name)
})
if(tmpregs.length > 0){
var reg = tmpregs[0]
var mergeTo = getDrl(val.name, reg) // 要合并到的地方
merge_info[val.name] = mergeTo
mergeTo.forEach(function(layerName){
if(GEN.isLayerExists({job : job ,layer:layerName.toLowerCase()}) && newdrills.indexOf(layerName.toLowerCase()) < 0){ if(GEN.isLayerExists({job : job ,layer:layerName.toLowerCase()}) && newdrills.indexOf(layerName.toLowerCase()) < 0){
GEN.deleteLayer({job:job, layer:layerName.toLowerCase()}) GEN.deleteLayer({job:job, layer:layerName.toLowerCase()})
} }
...@@ -423,12 +553,91 @@ function mergeDrill(props){ // 合并钻孔 ...@@ -423,12 +553,91 @@ function mergeDrill(props){ // 合并钻孔
GEN.copyLayer({source_job:job ,mode:'append',source_step:step,source_layer:val.name,dest_layer:layerName.toLowerCase()}); GEN.copyLayer({source_job:job ,mode:'append',source_step:step,source_layer:val.name,dest_layer:layerName.toLowerCase()});
}) })
} }
} }
GEN.createLayer({job:job,layer:"b1-"+maxDrill.value,conext:'board',type:'drill'});
GEN.workLayer({name:"b1-"+maxDrill.value,display_number:1,clear_before:'yes'});
GEN.copyLayer({source_job:job ,mode:'append',source_step:step,source_layer:maxDrill.name,dest_layer:"b1-"+maxDrill.value});
GEN.affectedLayer({affected:"no",mode:"all"}); GEN.affectedLayer({affected:"no",mode:"all"});
GEN.clearLayers(); GEN.clearLayers();
GEN.closeStep(); GEN.closeStep();
} }
function createOutline(props){
var profileRule = props.profileRule
var job = props.job
var step = props.step
var matrix = props.matrix
var outlines = Object.keys(matrix).filter(function(v){
var flag = false
profileRule.forEach(function(rule){
var reg = new RegExp(rule,"ig")
if(reg.test(v)){
flag = true
}
})
return flag
})
var drill_layer = Object.keys(matrix).filter(function(v){return matrix[v].layer_type=="drill" && matrix[v].context == "board"})
var tmp_outline
if(outlines.length){
if( outlines.length){
for(var i =0;i<outlines.length;i++){
tmp_outline = outlines[i]
if(cl(tmp_outline)) {
return true
}else{
continue
}
}
} else {
return cl(outlines[0])
}
}else{return false}
function cl(l){
GEN.openStep({job:job, name:step})
GEN.affectedLayer({affected:'no',mode:'all'})
GEN.workLayer({name:l,display_number:2,clear_before:"yes"})
var bk = l + "_bk"
selCopyLayer({job:job,layer:bk})
GEN.workLayer({name:bk,display_number:2,clear_before:"yes"})
l = bk
GEN.selectByFilter({feat_types:"line\;arc"})
GEN.selReverse()
if(GEN.getSelectCount()>0){GEN.selDelete()}
GEN.selClearFeature()
GEN.COM("sel_cut_data,det_tol=1,con_tol=1,rad_tol=0.1,filter_overlaps=no,delete_doubles=no,use_order=yes,ignore_width=yes,ignore_holes=none,start_positive=yes,polarity_of_touching=same")
GEN.selectByFilter({feat_types:"surface"})
GEN.selReverse()
if(GEN.getSelectCount()>0){GEN.selDelete()}
var tmp_layer = l+"+++"
GEN.selRefFeat({layers:drill_layer[0],use:'filter',mode:'touch'})
if(GEN.getSelectCount() > 0){
var tmp_outline2 = l + "_tmp"
selCopyLayer({job:job,layer:tmp_outline2})
GEN.workLayer({name:l,display_number:2,clear_before:"yes"})
GEN.selAllFeat()
GEN.selDelete()
GEN.workLayer({name:tmp_outline2,display_number:2,clear_before:"yes"})
GEN.COM("sel_surf2outline,width=1")
GEN.selAllFeat()
selCopyLayer({job:job,layer:l})
GEN.workLayer({name:l,display_number:2,clear_before:"yes"})
GEN.selClearFeature()
GEN.selCreateProfile()
GEN.selectByFilter({profile:"in"})
if(GEN.getSelectCount()> 0){GEN.selDelete()}
GEN.deleteLayer({job:job, layer:tmp_layer})
GEN.deleteLayer({job:job, layer:tmp_outline2})
GEN.renameLayer({job:job, layer:l,new_name:'outline'})
return true
}
GEN.deleteLayer({job:job, layer:tmp_layer})
return false
}
}
function selCopyLayer(props){ // 拷贝选择的到辅助层
var layer = props.layer
var job = props.job
if(GEN.isLayerExists({job:job,layer:layer})){
GEN.deleteLayer({job:job,layer:layer})
}
GEN.selCopyOther({dest:'layer_name',target_layer:layer})
}
\ No newline at end of file
...@@ -70,6 +70,7 @@ var JobId = $.job_id; ...@@ -70,6 +70,7 @@ var JobId = $.job_id;
var db = $.db; var db = $.db;
var Status = 'ok'; var Status = 'ok';
var resultData = []; var resultData = [];
var import_info = []
var PAR = {}; var PAR = {};
if ($.hasOwnProperty('script_parameter')){ if ($.hasOwnProperty('script_parameter')){
PAR = JSON.parse($.script_parameter); PAR = JSON.parse($.script_parameter);
...@@ -156,10 +157,9 @@ try { ...@@ -156,10 +157,9 @@ try {
if(jobInfo.data.length == 0){throw "file error"} if(jobInfo.data.length == 0){throw "file error"}
var importOk = false; // 是否成功导入 var importOk = false; // 是否成功导入
if(/odb/ig.test(jobInfo.type)){ // odb导入 if(/odb/ig.test(jobInfo.type)){ // odb导入
fs.writeFile("./tmp.js",_.toString(jobInfo.data))
if(jobInfo.data.length == 1){ // 只分析到一个tgz文件 直接导入 if(jobInfo.data.length == 1){ // 只分析到一个tgz文件 直接导入
resultData.push( {type: "info", title: "读取"+jobInfo.data[0].file.name, import_info.push({name:jobInfo.data[0].file.name, type:"odb++", date:now(),user:$.user_name})
detail: [{desc: _.toString({format:"odb++",date:now(),user:$.user_name})}]})
var err = importJob({name:job,db:custCfg.db,path:jobInfo.data[0].file.path},config.delSameJob) var err = importJob({name:job,db:custCfg.db,path:jobInfo.data[0].file.path},config.delSameJob)
if(err){throw err} if(err){throw err}
} else { // 多个tgz文件 说明需要合并 } else { // 多个tgz文件 说明需要合并
...@@ -168,8 +168,7 @@ try { ...@@ -168,8 +168,7 @@ try {
var path = item.file.path var path = item.file.path
var tmp_job_name = job + "_tmp_" + i var tmp_job_name = job + "_tmp_" + i
var err = importJob({name:tmp_job_name,db:custCfg.db,path:path},config.delSameJob) var err = importJob({name:tmp_job_name,db:custCfg.db,path:path},config.delSameJob)
resultData.push( {type: "info", title: "读取"+item.file.name, import_info.push({name:item.file.name, type:"odb++", date:now(),user:$.user_name})
detail: [{desc: _.toString({format:"odb++",date:now(),user:$.user_name})}]})
if(err){throw err} if(err){throw err}
return { return {
name:tmp_job_name, name:tmp_job_name,
...@@ -233,7 +232,7 @@ try { ...@@ -233,7 +232,7 @@ try {
var gerberInfo = jobInfo.data.map(function(item){ var gerberInfo = jobInfo.data.map(function(item){
var gerberCfg = JSON.parse(JSON.stringify(item.format)); var gerberCfg = JSON.parse(JSON.stringify(item.format));
var file = item.file var file = item.file
gerberCfg.layer = file.name.toLowerCase() gerberCfg.layer = file.name.toLowerCase().split(" ").join("-")
gerberCfg.path = file.path gerberCfg.path = file.path
gerberCfg.format = item.type gerberCfg.format = item.type
gerberCfg.job = job gerberCfg.job = job
...@@ -242,8 +241,8 @@ try { ...@@ -242,8 +241,8 @@ try {
}) })
GEN.COM("input_manual_reset") GEN.COM("input_manual_reset")
gerberInfo.forEach(function(v){ gerberInfo.forEach(function(v){
resultData.push( {type: "info", title: "读取"+v.layer, import_info.push({name:v.layer, type:"gerber274x", date:now(),user:$.user_name})
detail: [{desc: _.toString({format:v.format,date:now(),user:$.user_name})}]})
GEN.COM("input_manual_set",v) GEN.COM("input_manual_set",v)
}) })
GEN.COM("input_manual") GEN.COM("input_manual")
...@@ -278,6 +277,16 @@ try { ...@@ -278,6 +277,16 @@ try {
}, },
where: { id: $.task_id } 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()) { if (GEN.hasError()) {
Status = 'error'; Status = 'error';
resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] }); resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
......
...@@ -245,26 +245,6 @@ ...@@ -245,26 +245,6 @@
"merge_by_rule": "no", "merge_by_rule": "no",
"signed_coords": "no", "signed_coords": "no",
"text_line_width": 0.0024 "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": { "customer": {
...@@ -680,10 +660,10 @@ ...@@ -680,10 +660,10 @@
{ {
"valid": function(props){ "valid": function(props){
var file = props.file; var file = props.file;
return /.+\.btd$|.+\.rou$/ig.test(file.name) return /.+\.btd$/ig.test(file.name)
}, },
"type": "IPC356A", "type": "IPC356",
"format": "IPC356A_1" "format": "IPC356_1"
}, },
{ {
"valid": function(props){ "valid": function(props){
...@@ -761,7 +741,7 @@ ...@@ -761,7 +741,7 @@
{ {
"valid": function(props){ "valid": function(props){
var file = props.file; var file = props.file;
return /.+\.drl$/ig.test(file.name) return /.+\.drl$|\.rou$/ig.test(file.name)
}, },
"type": "Excellon2", "type": "Excellon2",
"format": "Excellon2_4", "format": "Excellon2_4",
...@@ -809,10 +789,10 @@ ...@@ -809,10 +789,10 @@
{"orig_name" : ["^smt\\.art$","\\.sma$","SoldMask1Top\\.ger","sm_top"], "tl_name" : "sm_top" }, {"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" : ["^smb\\.art$","\\.smb$","SoldMask1Bot\\.ger","sm_bot"], "tl_name" : "sm_botm" },
{"orig_name" : ["^top$","^top.art$"], "tl_name" : "top" }, {"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" : ["^bot\\.art$","^bottom$","^bottom.art$"], "tl_name" : "bottom" },
{"orig_name" : ["\\.d(\\d+)$"], "tl_name" : "d_($1)-($1+1)"}, {"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" : ["ThruHoleNonPlated\\.ncd$","^drill$"], "tl_name" : "drill" },
{"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" }, {"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
{"orig_name" : "fab.art", "tl_name" : "fab.art" }, {"orig_name" : "fab.art", "tl_name" : "fab.art" },
...@@ -820,7 +800,15 @@ ...@@ -820,7 +800,15 @@
{"orig_name" : ["\\.bol$","PnlContourNonPlated\\.ger","^outline"], "tl_name" : "outline" }, {"orig_name" : ["\\.bol$","PnlContourNonPlated\\.ger","^outline"], "tl_name" : "outline" },
{"orig_name" : ["top-enig","enig_top"], "tl_name" : "enig_top" }, {"orig_name" : ["top-enig","enig_top"], "tl_name" : "enig_top" },
{"orig_name" : ["bot-enig","enig_bot"], "tl_name" : "enig_bot" }, {"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":{ "Vivo":{
"step": "cad", "step": "cad",
...@@ -844,7 +832,7 @@ ...@@ -844,7 +832,7 @@
{ {
"valid": function(props){ "valid": function(props){
var file = props.file; var file = props.file;
return /\.gdo$/ig.test(file.name) return /\.gdo$|\.pho$/ig.test(file.name)
}, },
"type": "Gerber274x", "type": "Gerber274x",
"format": "Gerber274x_4" "format": "Gerber274x_4"
...@@ -852,32 +840,110 @@ ...@@ -852,32 +840,110 @@
{ {
"valid": function(props){ "valid": function(props){
var file = props.file; 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", "type": "Excellon2",
"format": "Excellon2_5" "format": "Excellon2_5"
} }
], ],
"tl_name": [ "tl_name": [
{"orig_name" : ["solderpastetop","past_top"], "tl_name" : "past_top" }, {"orig_name" : ["OSP-Top\\.pho","solderpastetop","past_top"], "tl_name" : "past_top" },
{"orig_name" : ["solderpastebottom","past_botm"], "tl_name" : "past_botm" }, {"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" : ["pleg\\.art","^ss_top","silk_top"], "tl_name" : "silk_top" },
{"orig_name" : ["sleg\\.art","^ss_bot","silk_bot"], "tl_name" : "silk_bot" }, {"orig_name" : ["sleg\\.art","^ss_bot","silk_bot"], "tl_name" : "silk_bot" },
{"orig_name" : ["soldermasktop","sm_top"], "tl_name" : "sm_top" }, {"orig_name" : ["Top solder mask\\.pho","soldermasktop","sm_top"], "tl_name" : "sm_top" },
{"orig_name" : ["soldermaskbottom","sm_bot"], "tl_name" : "sm_botm" }, {"orig_name" : ["Bottom solder mask\\.pho","soldermaskbottom","sm_bot"], "tl_name" : "sm_botm" },
{"orig_name" : ["^top$","layertop"], "tl_name" : "top" }, {"orig_name" : ["Top\\.pho","^top$","layertop"], "tl_name" : "top" },
{"orig_name" : ["layer(\\d+)\\.gdo","layer_(\\d+)"], "tl_name" : "l_($1)"}, {"orig_name" : ["^lay_(\\d+)","layer(\\d+)\\.gdo","layer_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^bottom$","layerbottom"], "tl_name" : "bottom" }, {"orig_name" : ["^Bottom\\.pho$","^bottom$","layerbottom"], "tl_name" : "bottom" },
{"orig_name" : ["-(\\d+)-(\\d+)\\.drl$","(\\d+)-(\\d+)-laser\\.drl$","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"}, {"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" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
{"orig_name" : "fab.art", "tl_name" : "fab.art" }, {"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" : ["^outline"], "tl_name" : "outline" },
{"orig_name" : ["au_mask_bottom\\.gdo","enig_top"], "tl_name" : "enig_top" }, {"orig_name" : ["au_mask-bottom\\.gdo","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-top\\.gdo","au_mask_top\\.gdo","enig_bot"], "tl_name" : "enig_bot" },
{"orig_name" : ["cavitytop","cavity_top"], "tl_name" : "cavity_top" }, {"orig_name" : ["cavitytop","cavity_top"], "tl_name" : "cavity_top" },
{"orig_name" : ["cavitybottom","cavity_bot"], "tl_name" : "cavity_bot" }, {"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": [ "data_format": [
......
...@@ -46,6 +46,7 @@ var GEN = $.gen; ...@@ -46,6 +46,7 @@ var GEN = $.gen;
var Job = $.job_name; var Job = $.job_name;
var db = $.db; var db = $.db;
var JobId = $.job_id; var JobId = $.job_id;
var process = require('process');
var Status = 'ok'; var Status = 'ok';
var resultData = []; var resultData = [];
var PAR = {}; var PAR = {};
...@@ -54,6 +55,19 @@ if ($.hasOwnProperty('script_parameter')){ ...@@ -54,6 +55,19 @@ if ($.hasOwnProperty('script_parameter')){
} }
try { 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({ QDfm.updateRow({
table: "pdm_aimdfm_task", table: "pdm_aimdfm_task",
data: { data: {
...@@ -81,3 +95,17 @@ catch (e) { ...@@ -81,3 +95,17 @@ catch (e) {
resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]}); resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
return {status: Status, result_data: resultData}; 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