Commit b7f23e92 authored by Scott Sun's avatar Scott Sun

scott

parent 2014f1f6
......@@ -304,7 +304,7 @@ try {
},
defaultlayer: ["layer1"]
});
GUI.msg(r) // {layers:['layer2'],step:null,job:'job2',layertype:'null'}
......
......@@ -7,19 +7,29 @@ function gen() {
console.log("pause");
}
}
var str = "-------\nxxxx xxxx\naslkdankdassadddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
gui.setLang("zhtw"); // zhcn, zhtw, en
var r = gui.msgBox({
title: "info",
icon: "info",
text: "are you ok?",
buttons: ["Ok", "Cancel"],
// var r = gui.msgBox({
// title: "info",
// icon: "info",
// text: str,
// buttons: ["Ok", "Cancel"],
// gen: new gen()
// });
// console.log(r);
// r = gui.confirm(str, "");
x = gui.debug({
title: " 检查",
text: str,
defaultsize: [800, 600],
size: [800, 600],
gen: new gen()
});
console.log(r);
r = gui.confirm("are you ok?", "");
/*
console.log(r);
var selected = gui.selectFromTreeview({
title: "test",
......@@ -416,12 +426,7 @@ r = gui.selectJobLayer({
console.log(r);
x = gui.debug({
title: "debug",
text: "ciao",
size: [400, 300],
gen: new gen()
});
var DB = require('topsin.database');
DB.addConnection({
......@@ -445,3 +450,5 @@ x = gui.showSendMail({
console.log(x);
*/
\ No newline at end of file
......@@ -217,9 +217,8 @@ try {
// 检查料号是否能够check out
if(GEN.checkInout({job:job,mode:"test"}) != 0 && mode == "aimdfm"){ throw "the job check" }
GEN.checkInout({job:job,mode:"out"});
script_info({ msg: "Data Analysis" ,result_severity:"info"})
script_info({ msg: "Data Analysis" ,result_severity:"info",progress: 65})
global._ERRORMAG = "Failed to Data Analysis";
script_info({ progress: 65 })
var pcs_step = par.pcs_step == "" ? "cad" : par.pcs_step;
var array_step = par.array_step == "" ? "stp" : par.array_step;
var step_list = GEN.getStepList({job:job})
......@@ -229,12 +228,13 @@ try {
if(step_list.indexOf(pcs_step)<0){
pcs_step = step_list[0]
}
script_info({ msg: "Upload matrix",result_severity:"info" })
global._ERRORMAG = "Error-Upload matrix";
script_info({ progress: 65 })
var matrix = UPLOAD_LAYER_MATRIX({job:job}) // 分析matrix 获得分析后的matrix信息
GEN.openStep({job:job, name:pcs_step})
_.values(matrix).forEach(function(v){
if(v.context == "board" && v.layer_type == "drill"){
if(v.type == "laser_drill"){
......@@ -259,6 +259,15 @@ try {
GEN.COM("cur_atr_set,attribute=.drill,option=plated")
GEN.COM("sel_change_atr,mode=add")
}
GEN.selectByFilter({include_syms:include_syms.join("\\;")})
GEN.selReverse();
if(GEN.getSelectCount() > 0){
GEN.COM("cur_atr_reset")
GEN.COM("cur_atr_set,attribute=.drill,option=via")
GEN.COM("sel_change_atr,mode=add")
}
GEN.clearLayers()
GEN.selClearFeature()
} else if(v.type == "main_drill" || v.type == "blind_drill" || v.type == "bury_drill") {
......@@ -295,11 +304,10 @@ try {
}
})
GEN.clearLayers()
script_info({ msg: "Drill Stackup analysis" })
script_info({ msg: "Drill Stackup analysis" ,progress: 70,result_severity:"info"})
global._ERRORMAG = "Error-Drill Stackup analysis";
script_info({ progress: 70 })
// * new 钻孔叠构
var cam_drill_structure = []
var stack_drills = _.values(matrix).filter(function(item){
......@@ -422,10 +430,9 @@ try {
var analysis_obj = analysis({job:job,jobId:JobId,pcs_step:pcs_step,array_step:array_step,matrix:matrix})
// 创建profile
var tmp_matrix = GEN.getMatrix({job:job})
script_info({ msg: "Profile analysis" })
script_info({ msg: "Profile analysis",progress: 70 ,result_severity:"info"})
global._ERRORMAG = "Error-Profile analysis";
script_info({ progress: 70 })
// * profile 和 拼版
var pandle_step = step_list.map(function(v){
var type = "unknow";
......@@ -470,7 +477,7 @@ try {
var repeat = GEN.getSR1({job:job,step:v,units:"mm"})
var step_repeat = {}
repeat.forEach(function(item, i){
step_repeat[String(i)] = {
step_repeat[String(i)] = {
x:item.xa,
y:item.ya,
dx: item.dx,dy: item.dy,
......@@ -486,7 +493,12 @@ try {
panel_info.step_repeat = step_repeat
save_panel_info({info:panel_info, table:"pdm_job_panelizer_step"})
GEN.closeStep()
return {name:v, type:type}})
return {name:v, type:type}
})
// glod_finger
var gold_fingers = Object.keys(tmp_matrix).filter(function(v){return /^enig_top$|^enig_bot$/ig.test(v)})
......@@ -506,7 +518,7 @@ try {
}
ALL.gold_fingers = gold_fingers
GEN.closeStep()
script_info({ msg: "PN analysis" })
script_info({ msg: "PN analysis",result_severity:"info"})
global._ERRORMAG = "Error-PN analysis";
......@@ -549,6 +561,7 @@ try {
}
console.log("===============================> 2analysis_obj")
// 分析料号info
var jobInfo = {}
......@@ -594,11 +607,11 @@ try {
})
console.log("=================================> 5 save drill info")
script_info({ msg: "Drill layer analysis" })
script_info({ msg: "Drill layer analysis",result_severity:"info",progress: 75 })
global._ERRORMAG = "Error-Drill layer analysis";
script_info({ progress: 75 })
// * 获取pcs_step 和 array_step的钻孔信息
var drill_tool_info = {};
var drillLayers = analysis_obj.matrixInfo.mDrills;
......@@ -618,14 +631,15 @@ try {
var step = item.name;
if(GEN.isStepExists({job:job, step:step})){
GEN.openStep({job:job, name:step})
drillLayers.forEach(function(layer){
var layer = layer.name;
if(!GEN.isLayerEmpty({job:job,step:step,layer:layer})){
var mv_layer = moveSlotDrls({job:job, step:step, layer:layer})
GEN.COM("tools_set,layer="+layer+",slots=by_length")
if (!global._extra) {
GEN.COM("tools_set,layer="+layer+",slots=by_length")
}
GEN.COM("tools_merge_ex,layer="+layer+",mode=merge")
var tool = GEN.getTool({job:job,step:step,layer:layer,units:"mm"}); // {"1":{"count":"01156","num":"1","type":"plated","min_tol":"0","max_tol":"0","finish_size":"100.31","drill_size":"100.31","slot_len":"0","type2":"standard","shape":"hole","bit":0}}
if(!drill_tool_info[layer]){
......@@ -736,12 +750,10 @@ try {
})
})
console.log("=============================> 6 set smd bga")
script_info({ msg: "SMD&BGA create" })
console.log("=============================> 6 set smd bga");
script_info({ msg: "SMD&BGA create" ,progress: 80,result_severity:"info" });
global._ERRORMAG = "Error-SMD&BGA create";
script_info({ progress: 80 });
step_list.forEach(function(step){
GEN.openStep({job:job,name:step})
GEN.affectedLayer({affected:'no',mode:'all'})
......@@ -809,7 +821,7 @@ try {
GEN.closeStep()
})
console.log("============= ===============> 6 analysis smd")
script_info({ msg: "SMD&BGA analysis" })
script_info({ msg: "SMD&BGA analysis",result_severity:"info" })
global._ERRORMAG = "Error-SMD&BGA analysis";
// smd
var smdInfo;
......@@ -841,9 +853,9 @@ try {
console.log("================================> 9 copper_percent signal drill")
// 分析layer info
var stepList = [pcs_step];
var oChecklistName = "mychecklist"
var signalLayers = analysis_obj.matrixInfo.mSignals.map(function(v){return v.name})
var drillLayers = analysis_obj.matrixInfo.mDrills.map(function(v){return v.name})
var oChecklistName = "mychecklist";
var signalLayers = analysis_obj.matrixInfo.mSignals.map(function(v){return v.name});
var drillLayers = analysis_obj.matrixInfo.mDrills.map(function(v){return v.name});
console.log("=============================> 13 save copperArea copper_distribution")
var copper_distribution_steplist= [pcs_step, array_step];
......@@ -892,7 +904,7 @@ try {
min_pad2pad: ["p2p", "smd2smd", "smd2pad","via2via","bga2pad"],
min_ar_laser:["laser_via_ar"],
min_ar_via:["via_ar"],
min_ar_pth:["pth_ar"],
min_ar_pth:["pth_ar","ar"],
min_ar_npth:["npth_ar"]
}
save_job_info({
......@@ -906,9 +918,8 @@ try {
// } else {
// jobpath = "/home/local_db/server_db/jobs/"+job
// }
script_info({ msg: "Signal layer analysis" })
script_info({ msg: "Signal layer analysis",result_severity:"info" ,progress: 85 })
global._ERRORMAG = "Error-Signal layer analysis";
script_info({ progress: 85 })
stepList.forEach(function(step){
GEN.openStep({ job: job, name: step })
// 曝光
......@@ -989,7 +1000,7 @@ try {
jobid: JobId,
layer: item.signalL,
layerinfohash: {
org_min_pad_size: getMinSym(syms)
org_min_pad_size: getMinSym(syms,1)
}
})
if(item.solderL) {
......@@ -1002,7 +1013,7 @@ try {
jobid: JobId,
layer: item.signalL,
layerinfohash: {
org_min_pad_sm_opening_size: getMinSym(syms2)
org_min_pad_sm_opening_size: getMinSym(syms2,1)
}
})
GEN.deleteLayer({job:job, layer:item.signalL + "_sm"})
......@@ -1053,8 +1064,12 @@ try {
GEN.affectedLayer({affected:'no',mode:'all'})
signalLayers.forEach(function(signal){
GEN.workLayer({name:signal,display_number:2,clear_before:'yes'})
GEN.COM("filter_set,filter_name=popup,update_popup=no,feat_types=line")
GEN.selRefFeat({layers:'out_rout',use:'filter',mode:'touch'})
if(GEN.getSelectCount() > 0) {GEN.selDelete()}
GEN.COM("filter_reset,filter_name=popup")
})
// 创建chklist并运行 如果chklist存在先删除
......@@ -1113,7 +1128,7 @@ try {
// signal层分析结果
script_info({ msg: "Error-get ChkRes",result_severity:"ok" })
var res = analysisChkAttr({layers:signalLayers, info:info, step:step, job:job, oChecklistName:"quotation_check",jobpath:jobpath})
exportInfo(res);
// 数据入库
Object.keys(res).forEach(function(key){
var val = res[key]
......@@ -1187,8 +1202,7 @@ try {
})
});
script_info({ progress: 95 })
script_info({ msg: "analysis done" })
script_info({ msg: "analysis done" ,result_severity:"info"})
//! means信息无法导出
if(par.export_path != "" && par.export_mode != "" && par.export_submode != "" ){
......@@ -2336,7 +2350,12 @@ function analysisChkAttr(par) {
return a
}, "N/A")
if(hash[v][key]=="N/A"){
hash[v][key] = 999
// min_ar_laser
if(/^min_ar/ig.test(key)){
hash[v][key] = 150
} else {
hash[v][key] = 999
}
}
})
})
......@@ -3057,7 +3076,7 @@ function getMinSym(sym) {
if(!info.size) {
var width = Number(info.width)
var height = Number(info.height)
info.size = width > height ? height : width;
info.size = width < height ? height : width;
}
if(info.size) {
if(!min_size){min_size = info.size}
......
......@@ -102,9 +102,8 @@ try {
if(cam_workflow_info && cam_workflow_info != ""){
throw cam_workflow_info
}
script_info({ msg: "Data formatting" ,result_severity:"info"})
script_info({ msg: "Data formatting" ,result_severity:"info",progress: 35 })
global._ERRORMAG = "Failed to data format";
script_info({ progress: 35 })
var par = PAR;
if(!par.hasOwnProperty("config_path") || par.config_path==""){
console.log("=========== ===cfg");
......@@ -261,20 +260,20 @@ try {
var format_cfg = config.data_format // 拿到数据标准化配置
// 排序和设属性
script_info({ progress: 40 })
script_info({ progress: 40,msg: "Sort layer" ,result_severity:"info" })
var ret = sortLayer({job:job, rule:format_cfg, matrix:tl_name_matrix})
if(ret.err){throw err}
var after_sort_matrix = ret.sortNames
// 改名
script_info({ msg: "Change the name" ,result_severity:"info"})
script_info({ msg: "Change the name" ,result_severity:"info", progress: 50 })
global._ERRORMAG = "Failed to change name";
script_info({ progress: 50 })
var tmp_step = GEN.getStepList({job:job})
GEN.openStep({job:job,name:tmp_step[0]})
err = reName({job:job, matrix:after_sort_matrix, cfg:format_cfg})
if(err){throw err}
// 处理 yu cca ftdrillx-x-np
var tmp_step = GEN.getStepList({job:job})
GEN.openStep({job:job,name:tmp_step[0]})
var layers = Object.keys(GEN.getMatrix({job:job}))
layers.forEach(function(layer) {
if(/^ftdrill(\d+)-(\d+)-np$/ig.test(layer)) {
......@@ -379,6 +378,37 @@ try {
GEN.closeStep()
}
// 新增规则 通孔层小于 0.15mm的孔移到每一层镭射层
var pcs_step = GEN.getStepList({job:job})[0];
GEN.openStep({job:job, name:pcs_step})
if(GEN.isLayerExists({job:job, layer:"ftdrill"})){
GEN.workLayer({name:"ftdrill",display_number:2,clear_before:'yes'})
var syms_tmp = GEN.getLayerSymsHist({job:job,step:pcs_step,layer:'ftdrill'});
var laser_sym = [];
for (var key in syms_tmp) {
var syms_info = syms_tmp[key];
if(syms_info.size && syms_info.size <= 5.906){
laser_sym.push(key)
}
}
if(laser_sym.length){
_.values(matrix).forEach(function(v){
if(v.context == "board" && v.layer_type == "drill" && v.type == "laser_drill"){
GEN.selectByFilter({include_syms:laser_sym.join("\\;")})
if(GEN.getSelectCount() > 0) {
GEN.selCopyOther({dest:'layer_name',target_layer:v.name,invert:'no',dx:0,dy:0,size:0})
}
}
});
GEN.selectByFilter({include_syms:laser_sym.join("\\;")})
if(GEN.getSelectCount() > 0) {
GEN.selDelete()
}
}
}
GEN.closeStep()
var job_attrs = db.query("",function(q){
return q.selectValue({
table:'pdm_job',
......@@ -393,17 +423,28 @@ try {
GEN.saveJob({ job: job });
GEN.checkInout({job:job,mode:"in"})
GEN.closeJob({job:job});
GEN.COM("open_job,job="+job);
GEN.COM("open_job,job="+job);
script_info({ msg: "Creating Profile" ,result_severity:"info"})
script_info({ msg: "Creating Profile" ,result_severity:"info",progress: 55})
global._ERRORMAG = "Failed to create profile";
script_info({ progress: 55 })
var all_layer = Object.keys(GEN.getMatrix({job:job}));
// 没有outline层
// 判断有没有profile
var tmp_step = GEN.getStepList({job:job})[0]
var tmp_step = GEN.getStepList({job:job})[0];
GEN.openStep({job:job, name:tmp_step})
if(!hasProfle({job:job, step:tmp_step})){ // 如果没有profile
if(/^2171$/ig.test(par.customer)){
// 看看有没有 outline 层或者rout层
......@@ -680,14 +721,20 @@ catch (e) {
}
function checkIn(){
GEN.COM("open_job,job="+Job+",open_win=no,disk_map=,job_map=")
GEN.AUX("set_group,group=99")
GEN.COM("close_job,job="+Job+"")
GEN.COM("disp_on")
GEN.COM("origin_on")
GEN.COM("disp_on")
GEN.COM("origin_on")
GEN.COM("checkin_closed_job,job="+Job);
db.query("",function(q){
return q.insertRow({
table:'pdm_aimdfm_task',
data:{
job_id:JobId,
flow_id:13,
task_title: Job + ":checkin",
status: 'waiting',
user_name: "Admin",
user_id: 1
}
})
});
}
function tlNameMatrix(props){ // 设置标准名
......@@ -717,6 +764,7 @@ function tlNameMatrix(props){ // 设置标准名
if(/^comp_\+_/.test(key)){
return _.assign(val,{tl_name:key})
}
IKM.save_layerinfo({ jobid: JobId, layer: key, layerinfohash: { layer_name_final: key }})
return val
}
for(var i=0;i<tlRule.length;i++){
......@@ -872,7 +920,7 @@ function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名
var job = props.job
var matrix = props.matrix
var cfg = props.cfg
var step = GEN.getStepList({job:job})[0]
matrix = matrix.filter(function(v){
if(v.name == v.new_name){
IKM.save_layerinfo({ jobid: JobId, layer: v.name, layerinfohash: { layer_name_final: v.new_name }})
......@@ -887,7 +935,10 @@ function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名
if(new_name && new_name!="" && new_name != v.name && layers_tmp.indexOf(new_name) < 0){
IKM.save_layerinfo({ jobid: JobId, layer: v.name, layerinfohash: { layer_name_final: new_name }})
tmp.push(v.name + " ---- " +new_name)
GEN.renameLayer({job:job,layer:v.name,new_name:new_name})
GEN.copyLayer({source_job:job,source_step:step,source_layer:v.name,dest_layer:v.name+"_bk",mode:"replace"})
GEN.renameLayer({job:job,layer:v.name,new_name:new_name});
return false
} else {
return true
......@@ -948,6 +999,9 @@ function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名
var layers_tmp = Object.keys(GEN.getMatrix({job:job}));
if(v.orig_name !== v.new_name && layers_tmp.indexOf(v.new_name) < 0){
IKM.save_layerinfo({ jobid: JobId, layer: v.orig_name, layerinfohash: { layer_name_final: v.new_name }})
GEN.copyLayer({source_job:job,source_step:step,source_layer:v.orig_name,dest_layer:v.orig_name+"_bk",mode:"replace"})
GEN.renameLayer({job:job,layer:v.orig_name,new_name:v.new_name})
}
});
......@@ -957,18 +1011,20 @@ function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名
var afterMatrix = GEN.getMatrix({job:job});
var signals = Object.keys(afterMatrix).filter(function(v){return afterMatrix[v].layer_type=="signal" && afterMatrix[v].context=="board"})
signals = signals.sort(function(a,b){return afterMatrix[a].row - afterMatrix[b].row})
var topSignal = signals[0]
var botSignal = signals[signals.length -1]
if(topSignal !== "top"){
if(!GEN.isLayerExists({job:job, layer:"top"})){
IKM.save_layerinfo({ jobid: JobId, layer: topSignal, layerinfohash: { layer_name_final: "top" }})
GEN.renameLayer({job:job,layer:topSignal,new_name:"top"})
if(signals.length > 0){
var topSignal = signals[0]
var botSignal = signals[signals.length -1]
if(topSignal !== "top"){
if(!GEN.isLayerExists({job:job, layer:"top"})){
IKM.save_layerinfo({ jobid: JobId, layer: topSignal, layerinfohash: { layer_name_final: "top" }})
GEN.renameLayer({job:job,layer:topSignal,new_name:"top"})
}
}
}
if(botSignal !== "bottom"){
if(!GEN.isLayerExists({job:job, layer:"bottom"})){
IKM.save_layerinfo({ jobid: JobId, layer: botSignal, layerinfohash: { layer_name_final: "bottom" }})
GEN.renameLayer({job:job,layer:botSignal,new_name:"bottom"})
if(botSignal !== "bottom"){
if(!GEN.isLayerExists({job:job, layer:"bottom"})){
IKM.save_layerinfo({ jobid: JobId, layer: botSignal, layerinfohash: { layer_name_final: "bottom" }})
GEN.renameLayer({job:job,layer:botSignal,new_name:"bottom"})
}
}
}
}
......@@ -1221,4 +1277,5 @@ function sendEmail(msg) {
function hasProfle(props) {
var now_profile = GEN.getProfile({job:props.job, step:props.step})
return now_profile && now_profile.match(/\n/ig) && now_profile.match(/\n/ig).length != 1
}
\ No newline at end of file
}
......@@ -190,15 +190,19 @@ try {
} else {
jobFiles = fs.listDir(jobFile[0].path)
}
// GEN.COM("config_edit,name=iol_gbr_polygon_break,value=1,mode=user")
// GEN.COM("config_edit,name=iol_fix_ill_polygon,value=yes,mode=user")
// 将jobFile下的zip解压
script_info({ msg: "unzip the file", result_severity:"info" })
global._ERRORMAG = "Failed to unzip the file";
decompression(jobFile[0].path, []);
changePath2(jobFile[0].path)
var change_files = [];
decompression(jobFile[0].path, [],change_files);
changePath2(jobFile[0].path);
var job_attrs = db.query("",function(q){
return q.selectValue({
......@@ -218,9 +222,8 @@ try {
where:{id : JobId}
})
});
jobFiles = fs.listDir(jobFile[0].path)
jobFiles = fs.listDir(jobFile[0].path);
// 分析料号文件 得到料号导入信息 导入类型
var jobInfo = analyJobFiles({jobFiles:jobFiles.filter(function(v){return v.isFile}),custCfg:custCfg,config:config,job:job })
......@@ -230,8 +233,7 @@ try {
throw "file error"}
var importOk = false; // 是否成功导入
script_info({ progress: 10 });
script_info({ result_severity: "ok" })
script_info({ progress: 10 ,result_severity:"ok", msg:""});
if(/odb/ig.test(jobInfo.type)){ // odb导入
script_info({ msg: "Import odb++", result_severity:"error" });
......@@ -379,9 +381,27 @@ try {
}
importOk = true
}
// [{
// "ori_dirname": "/home/toplinker/samba/1352/13520028_128/TLK0802/1streceived20200422/zip_custom0",
// "dirname": "/home/toplinker/samba/1352/13520028_128/TLK0802/1streceived20200422/custom1615366305861",
// "newpath": "/home/toplinker/samba/1352/13520028_128/TLK0802/1streceived20200422/custom1615366305861.zip"
// }, {
// "ori_dirname": "/home/toplinker/samba/1352/13520028_128/TLK0802/1streceived20200422/custom1615366305861/sh1scmnrlmSMD_VB",
// "dirname": "/home/toplinker/samba/1352/13520028_128/TLK0802/1streceived20200422/custom1615366305861/custom1615366305954",
// "newpath": "/home/toplinker/samba/1352/13520028_128/TLK0802/1streceived20200422/custom1615366305861/custom1615366305954.zip"
// }]
change_files.reverse().forEach(function(item){
fs.unlink(item.newpath);
if(fs.exists(item.ori_dirname)){
fs.rename(item.ori_dirname,item.ori_dirname+"_bk");
}
fs.rename(item.dirname, item.ori_dirname);
})
if(!importOk){ throw "import error"}
script_info({ progress: 20 })
script_info({ result_severity: "ok" })
script_info({ progress: 20 ,result_severity:"ok", msg:""});
global._ERRORMAG = null;
reNameStep(job)
......@@ -408,6 +428,7 @@ try {
GEN.openStep({job:job,name:steplist[0]})
// 额外操作
if (custCfg.extra) {
global._extra = true;
custCfg.extra.forEach(function(item){
var props = {
type : jobInfo.type,
......@@ -436,8 +457,7 @@ try {
import_html += "</table>"
// name type date user
resultData.push({type: "info",title:"导入资料列表",detail: [{ desc: import_html }] })
script_info({ msg: "Data Readin" })
script_info({ result_severity: "ok" })
script_info({ msg: "Data Readin" ,result_severity:"ok"})
if (mode === "aimdfm") {
$.QDfm.updateRow({
......@@ -466,7 +486,7 @@ try {
}
}
catch (e) {
script_info({ result_severity: "error" })
script_info({ result_severity: "error",msg:"" })
if(global._ERRORMAG){
script_info({ msg: global._ERRORMAG });
var job_attrs = db.query("",function(q){
......@@ -607,8 +627,8 @@ function now(){
function reNameStep(job) {
var stepList = GEN.getStepList({job:job})
if(!stepList){return}
var pcs = []
var arr = []
var pcs = [];
var arr = [];
stepList.forEach(function(v){
if(v){
if(v==="cad"){
......@@ -644,23 +664,33 @@ function script_info(props){ // result_severity progress
}
}
function decompression(path, zips) {
function decompression(path, zips, change_files) {
var files = fs.listDir(path)
var count = 0;
var zipfiles = files.filter(function(item){
if (/zip/ig.test(item.suffix) || item.suffix == "rar" || item.suffix=="7z" || item.suffix == "ZIP") {
if (/zip/ig.test(item.suffix) || item.suffix == "rar" || item.suffix=="7z") {
inputState.push(item.suffix);
console.log("--->path:" + item.path)
if(zips.indexOf(item.path) < 0){
zips.push(item.path);
if(item.name.length >= 30 && !/�|\?/.test(item.name)) {
var mvname = "custom" + count + "." + item.suffix;
count++;
fs.rename(item.path, item.dir + "/" + mvname);
item.path = item.dir + "/" + mvname
//if(item.name.length >= 30 && !/�|\?/.test(item.name)) {
if(/[^\da-zA-Z_]/.test(item.name)){
var tmp_code = new Date().getTime()
var ori_dirname = item.path.replace(/\.(zipx|zip|7z|rar)$/ig, "");
var mvname = "custom" + tmp_code + "." + item.suffix;
// fs.rename(item.path, item.dir + "/" + mvname);
fs.copyFile(item.path,item.dir + "/" + mvname,true);
item.path = item.dir + "/" + mvname;
change_files.push({
ori_dirname: ori_dirname,
dirname: item.path.replace(/\.(zipx|zip|7z|rar)$/ig, ""),
newpath: item.path // 后续删除
})
zips.push(item.path);
}
var dir_name = item.path.replace(/\.(zipx|zip|7z|rar)$/ig, "");
autoUn(item.path, dir_name);
autoUn(item.path, dir_name,item.dir);
return true
}
}
......@@ -675,13 +705,13 @@ function decompression(path, zips) {
// }
return false
})
if(zipfiles.length) {decompression(path, zips)}
if(zipfiles.length) {decompression(path, zips, change_files)}
}
function changePath(path) {
return path.replace(/[^/]+\//ig, function(v){
if(v.length >= 10 && /\s/ig.test(v)) {
v = v.replace(" ", "\\ ")
v = v.replace(" ", "\\ ");
return v.slice(0,6) + "~1/"
} else {
return v
......@@ -689,12 +719,40 @@ function changePath(path) {
})
}
function autoUn(path, dirname) {
function autoUn(path, dirname, dir) {
// 解压密码逻辑 先获取 /home/toplinker/samba/unzip_pwd.txt
var pw = "/home/toplinker/samba/unzip_pwd.txt";
var pws = fs.readFile(pw);
var strs = pws.split("\n")
var ret = {};
strs.map(function(v) {
var tmp = v.split(/\s+/);
ret[tmp[0].trim()] = tmp[1].trim()
});
var pwd;
if(ret[Job]){
pwd = ret[Job]
}
if(fs.exists(dir + "/pw.txt")){
pwd = fs.readFile(dir + "/pw.txt");
}
if(/\.rar$/.test(path)){
fs.mkdir(dirname)
process.exec('/opt/rar/unrar', ['x' , path, dirname, "-o+"])
fs.mkdir(dirname);
if(pwd){
process.exec('/opt/rar/unrar', ['x' , path, dirname, "-o+","-p"+pwd])
} else {
process.exec('/opt/rar/unrar', ['x' , path, dirname, "-o+"])
}
} else {
process.exec('/usr/local/lib/p7zip/7za', ['x' , path, "-o"+dirname, "-aoa"])
if(pwd){
process.exec('/usr/local/lib/p7zip/7za', ['x' , path, "-o"+dirname, "-aoa", "-p"+pwd])
} else {
process.exec('/usr/local/lib/p7zip/7za', ['x' , path, "-o"+dirname, "-aoa"])
}
}
}
......@@ -721,9 +779,9 @@ function changePath2(filePath){
newFileName = newFileName.replace(/\?/g,'');//去除文件名中?
var newPath = tmp[i].path.replace(/^(.*)\/[^\/]*$/,"$1");
if(tmp[i].path != (newPath+'/'+newFileName)){
fs.rmdir(newPath+'/'+newFileName)
// fs.rmdir(newPath+'/'+newFileName)
// fs.rename(newPath+'/'+newFileName, newPath+'/'+newFileName+"_bk");
fs.rename(tmp[i].path,newPath+'/'+newFileName);
}
}
}
\ No newline at end of file
......@@ -639,11 +639,12 @@
var step = props.step;
fileInfo.forEach(function(item){
var layer = item.file.name.toLowerCase().split(" ").join("-")
var path = item.file.path
var filectx = fs.readFile(path)
var tmp = filectx.match(/Holesize \d\. = [\d\.]+ Tolerance = [\S]+ [\S]+ [\S]+ Quantity = \d+\n/igm)
if(tmp && tmp.length) {
var units = "mm"
var units = "mm";
var res = tmp.map(function(v,i) {
var tmp2 = /Holesize \d\. = ([\d\.]+) Tolerance = ([\S]+) ([\S]+) ([\S]+) Quantity = \d+\n/igm.exec(v);
if(/MILS/ig.test(tmp2[4])){
......@@ -682,7 +683,7 @@
})
GEN.COM("tools_set,layer="+layer+",thickness=0,user_params=,slots=by_length")
}
})
});
GEN.saveJob({ job: job });
}
}
......
/*
NAME:
DESCRIPTION: ;
DESCRIPTION: 描述;
PARAMETER:
[
[
{
name : 'step',
title : 'step',
type : 'LineEdit',
property : {tool_tip : '目标step,默认是orig'},
property : {tool_tip : '目标step,默认是orig'}
},
{
name : 'auto_save',
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
tool_tip:'是否自动保存料号开关'
}
}
}
]
VERSION_HISTORY:
V1.00 2021-02-19 Scott Sun
1.新版本
V1.00 2021-03-08 Scott Sun
1.新版本
HELP:
<html><body bgcolor="#DDECFE">
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> 标题 </ p>
<br>
......@@ -40,22 +40,21 @@ PARAMETER:
<br>
</body></html>
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
console.log("==============================>template");
// 引入模块 包
// 引入模块 包 外部参数
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var mode = $.ikm ? "topcam" : "aimdfm";
var IKM = $.ikm;
if (IKM==undefined ) { IKM = require('topcam.ikm6')($) }
var IKM = $.ikm ? $.ikm : require('topcam.ikm6')($);
var GEN = $.gen;
var Job = $.job || $.job_name;
var JobId = $.job_id;
var db = $.db || IKM.db
var PAR = {}
if ($.par) { PAR = $.par } else if ($.hasOwnProperty('script_parameter')){ PAR = JSON.parse($.script_parameter); }
var db = $.db || IKM.db;
var gui_piug = require('topsin.gengui');
var GUI = gui_piug.newGui(gui_piug.__dirname);
var PAR = {};
if ($.par) { PAR = $.par } else if ($.hasOwnProperty('script_parameter')) { PAR = JSON.parse($.script_parameter); }
if (mode === "aimdfm") {
var database = require("topsin.database");
database.addConnection($.conf.database_conf, "DFM");
......@@ -67,37 +66,141 @@ if (mode === "aimdfm") {
}
var Status = 'ok';
var resultData = [];
var par = PAR;
var default_par = {
step: "orig",
var par = PAR; // 接收参数
var default_par = { // 设置默认参数
step: "orig",
auto_save: "No",
units:"mm"
units: "mm"
}
for (var key in default_par) {
if (!par.hasOwnProperty(key) || par[key] == "") {
par[key] = default_par[key]
}
}
for(var key in default_par){ if (!par.hasOwnProperty(key) || par[key] == ""){ par[key] = default_par[key] }}
// 定义变量
var job = Job;
try {
if(_.isEmpty(job)){throw "参数job不存在"} else { job = job.toLowerCase() }
if(!GEN.isJobExists({job:job})){throw "料号"+job+"不存在"}
if(!GEN.isJobOpen({job:job})){ GEN.openJob({job:job}) }
if(mode == "aimdfm"){ if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" } else { GEN.checkInout({job:job,mode:"out"}) } }
// 常规验证 准备工作
if (!GEN.isJobExists({ job: job })) { throw "料号" + job + "不存在" }
if (!GEN.isJobOpen({ job: job })) { GEN.openJob({ job: job }) }
if (mode == "aimdfm") {
if (GEN.checkInout({job: job,mode: "test"}) != 0) {
throw "the job check"
}
GEN.checkInout({job: job,mode: "out"});
}
// 主体
var stepList = GEN.getStepList({job:job}) // 工作step列表
stepList = stepList.filter(function(step){
var reg = new RegExp(par.step,"ig");
return reg.test(step);
})
var verification = function(size) {
return size <= 500
}
var drills = getLayer({layer_type:"drill",name:"drl"})
stepList.forEach(function(step) {
GEN.openStep({ job: job, name: step });
GEN.clearLayers(); //清除层显示
GEN.affectedLayer({ mode: 'all', affected: 'no' }); //设置影响层全部不影响
GEN.COM("sel_options,clear_mode=clear_after,display_mode=all_layers,area_inout=inside,area_select=select,select_mode=standard,area_touching_mode=exclude");
GEN.units({ type: par.units }); //单位初始化
GEN.zoomHome(); //窗口显示回到原始位置
GEN.selClearFeature()
drills.forEach(function(drl) {
GEN.workLayer({name:drl,display_number:2,clear_before:'yes'})
var sys = GEN.getLayerSymsHist({job:Job,step:'net',layer:drl,units:'mm'})
var includesys = [];
// r700":{"symbol":"r700","line":"0","pad":"400","arc":"0","size":"700"},
Object.keys(sys).forEach(function(key){
var symbolinfo = sys[key];
if(!symbolinfo.size && symbolinfo.width){
symbolinfo.size = symbolinfo.width > symbolinfo.height ? symbolinfo.width : symbolinfo.height;
}
if(symbolinfo.size){
symbolinfo.size = symbolinfo.size - 0;
if(verification(symbolinfo.size)){
includesys.push(symbolinfo.symbol)
}
}
})
if(includesys.length){
GEN.selectByFilter({include_syms:includesys.join(";")})
if(GEN.getSelectCount()>0){
GEN.COM("cur_atr_set,attribute=.drill,option=via")
GEN.COM("sel_change_atr,mode=add")
}
}
})
})
console.log("=================test==============");
// 保存
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"})}
// 保存料号
if (/yes/ig.test(par.auto_save)) {
GEN.checkInout({ job: job, mode: "out" });
GEN.saveJob({ job: job });
}
GEN.checkInout({ job: job, mode: "in" });
// 结尾返回 固定写法
var Return = "Done"
if (mode === "aimdfm") {
$.QDfm.updateRow({table: "pdm_aimdfm_task",data: {progress: 100},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}; }
}else { return "Done" }
$.QDfm.updateRow({ table: "pdm_aimdfm_task", data: { progress: 100 }, where: { id: $.task_id } });
var tmperr = { type: "info", title: "操作完成, 请注意检查!" }
if (GEN.hasError()) {
Status = 'error';
tmperr = { type: "error", title: "GEN错误!", detail: [{ desc: GEN.STATUS.join("\n") }] }
}
resultData.push(tmperr);
Return = { status: Status, result_data: resultData };
}
return Return
} catch (e) {
if(GEN.STATUS.length > 0) {
IKM.msg(GEN.STATUS.join("\n"));
}
IKM.msg(e);
Status = 'error';
resultData.push({ type: "error", title: "脚本执行出错!", detail: [{ desc: _.toString(e) }] });
return (mode === "aimdfm") ? { status: Status, result_data: resultData } : "Error";
}
GEN.COM("disp_on")
GEN.COM("origin_on")
GEN.COM("checkin_closed_job,job="+job);
IKM.msg(_.join(GEN.STATUS, "\n"));IKM.msg(e);Status = 'error';
resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
return (mode === "aimdfm") ? {status: Status, result_data: resultData} : "Error";
}
function getLayer(props){ // 获取层
if (!props) {
return
}
if (!props.context) {
props.context = "board"
}
var matrix = GEN.getMatrix({job:job})
return Object.keys(matrix).reduce(function(a,b){
var info = matrix[b];
var ret = true;
for (var key in props) {
if (!Array.isArray(props[key])) {
props[key] = [props[key]]
}
if (info[key] && props[key].indexOf(info[key]) < 0) {
ret = false
}
}
if (ret) {
a.push(props.res == "info" ? info : b)
}
return a
},[])
}
\ No newline at end of file
......@@ -31,6 +31,7 @@ try {
if(!GEN.isChklistExists({job:JOB,step:step,chklist:config.check})){
GEN.COM("chklist_from_lib,chklist=" + config.check); // 不存在要从lib copy一个
}
GEN.chklistShow({chklist:config.check})
_.forEach(config.nacts,function(nact){
GEN.chklistRun({chklist:config.check,nact:nact}) // 运行checklist
......
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