/* NAME: DESCRIPTION: ; PARAMETER: [ { name : 'config_path', title : '配置地址', type : 'LineEdit', property : {tool_tip : '配置的路径'}, } ] VERSION_HISTORY: V1.00 2020-04-17 Scott Sun 1.新版本 HELP:

功能简介

数据标准化


参数配置

客户配置


注意事项


*/ ////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////// // 引入模块 包 console.log("==============================================>data_format") 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 JobId = $.job_id; var Status = 'ok'; var resultData = []; var PAR = {}; if ($.hasOwnProperty('script_parameter')){ PAR = JSON.parse($.script_parameter); } try { var mode = "use" // develop var par = PAR; if(!par.hasOwnProperty("config_path") || par.config_path==""){ console.log("==============cfg"); par.config_path = "cam/input_data" }; var db_customer = db.query("",function(q){ return q.selectValue({ table:'pdm_job', field:'customer_code', where:{id : JobId} }) }); if(_.isEmpty(db_customer)){throw "customer error"} if(db_customer && !(/^done$/ig.test(db_customer)) && db_customer != "" ){ par.customer = db_customer } 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) var job = Job; if(_.isEmpty(job)) throw "没有传入料号名!"; job = job.toLowerCase() var custCfg = config.customer[par.customer] // 获取客户配置 if(!custCfg){throw "config error"} // 料号验证 if(!GEN.isJobExists({job:job})){ throw "job "+ job+ " is not exist" } if(!GEN.isJobOpen({job:job})){GEN.openJob({job:job})} if(GEN.checkInout({job:job,mode:"test"}) != 0 && mode != "develop"){ throw "the job check" } console.log("Checkout====== ========================>") GEN.checkInout({job:job,mode:"out"}); console.log("Checkout success==============================>") // if(config.hasOwnProperty("merge_drill")){ // todo // mergeDrill({job:job}) // } // start martix_tl_name console.log("get matrix ====== ======== job:" + job); var matrix = GEN.getMatrix({job:job}); console.log("=========matrix:" + _.toString(matrix)); console.log("matrix add tl_name :"); var tl_name_matrix = tlNameMatrix({matrix:matrix,tl_name:custCfg.tl_name}) // 给matrix信息添加tl_name console.log("tl_name add end:"); var format_cfg = config.data_format // 拿到数据标准化配置 // 排序和设属性 var ret = sortLayer({job:job, rule:format_cfg, matrix:tl_name_matrix}) if(ret.err){throw err} var after_sort_matrix = ret.sortNames // 设置钻孔 err = setDrill({job:job, matrix:after_sort_matrix}) if(err){throw err} // 改名 err = reName({job:job, matrix:after_sort_matrix, cfg:format_cfg}) if(err){throw err} // end 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}; } function tlNameMatrix(props){ // 设置标准名 var matrix = props.matrix var tlname_rules = [] props.tl_name.forEach(function(item){ if(typeof item.orig_name == "string"){ tlname_rules.push(item) } else { item.orig_name.forEach(function(name2){ tlname_rules.push({ orig_name: name2, tl_name: item.tl_name }) }) } }) var res = Object.keys(matrix).map(function(key){ // 将matrix信息添加tl_name 如果没有tl_name 就返回原信息 var val = matrix[key] if(val.hasOwnProperty("tl_name")){delete val.tl_name} var tlRule = tlname_rules.filter(function(rule){ if(rule.orig_name === key){return true} var reg = new RegExp(rule.orig_name,"ig") return reg.test(key) }) if(tlRule.length == 0){return val} for(var i=0;isetdrill:drillLayer:" + _.toString(drillLayer)); console.log("=================>setdrill:signalLayer:" + _.toString(signalLayer)); var layerCount = GEN.getLayerCount({job:job}) // findSignal 根据传入的数字找到对应的signal层 如 1 => top ; 2 => layer_2 function findSignal(num){ console.log(num) return signalLayer[Number(num-1)].name } function doDrill(drills){ // 分析钻孔层 return drills.map(function(v){ if(v.name == "drill" || v.name=="rout" || v.name=="outline"){ return {start:findSignal(1), end:findSignal(layerCount), layer:v.name} } else { var tmp = /(\d+)-(\d+)/ig.exec(v.tl_name); if(tmp){ var start = findSignal(tmp[1]); var end = findSignal(tmp[2]); return {start:start, end:end, layer:v.name} } else { return 0; } } }) } var drillSetList = doDrill(drillLayer); // 分析得到钻孔设置结果 drillSetList = drillSetList.filter(function(v){return v!==0}) drillSetList.forEach(function(v){ GEN.matrixLayerDrill({job:job,layer:v.layer,start:v.start ,end:v.end}) }) } function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名的规则} var job = props.job var matrix = props.matrix var cfg = props.cfg matrix = matrix.filter(function(v){return v.name != v.new_name}) var rename_list = matrix.map(function(item){ var new_name; var tl_name = item.tl_name var rule = item.rule if(rule === tl_name){ new_name = item.new_name } else { var reg = new RegExp(rule,"ig") var tmp = reg.exec(tl_name) if(!tmp){return undefined} var replaceArr = tmp.slice(1) new_name = item.new_name var params = {} for(var i = 0; i maxDrill.value? {name:str,value:Number(num[2])} : maxDrill; } tmp.push("L"+i+"-"+(i+1)); } return tmp; } var matrix = GEN.getMatrix({job:job}); GEN.openStep({job : job,name:step}); for(var key in matrix){ var val = matrix[key]; if(val.layer_type == "drill" && /(\d+)-(\d+)\.drl/ig.test(val.name)){ var mergeTo = getDrl(val.name) // 要合并到的地方 mergeTo.forEach(function(layerName){ if(GEN.isLayerExists({job : job ,layer:layerName.toLowerCase()}) && newdrills.indexOf(layerName.toLowerCase()) < 0){ GEN.deleteLayer({job:job, layer:layerName.toLowerCase()}) } if(!GEN.isLayerExists({job : job ,layer:layerName.toLowerCase()})){ GEN.createLayer({job:job,layer:layerName.toLowerCase(),conext:'board',type:val.layer_type}); newdrills.push(layerName.toLowerCase()) } GEN.workLayer({name:layerName.toLowerCase(),display_number:1,clear_before:'yes'}); 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.clearLayers(); GEN.closeStep(); }