Commit 8a7ed7b0 authored by Scott Sun's avatar Scott Sun

scott

parent 1218d449
/*
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> checkin </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>
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
// 引入模块 包
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var process = require('process');
var mode = $.ikm ? "topcam" : "aimdfm";
var IKM = $.ikm;
if (IKM==undefined ) { IKM = require('topcam.ikm6')($) }
var GEN = $.gen;
var GUI = $.gui || {};
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);
}
if (mode === "aimdfm") {
var database = require("topsin.database");
database.addConnection($.conf.database_conf, "DFM");
var QDfm = database.query("DFM");
$.QDfm = QDfm;
if ($.conf.product_type == "aimdfm") {
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
current_process_title: $.process_title,
progress: 0
},
where: { id: $.task_id }
});
}
}
var Status = 'ok';
var resultData = [];
try {
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);
}
catch (e) {
Status = 'error';
resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
return (mode === "aimdfm") ? {status: Status, result_data: resultData} : "Error";
}
This diff is collapsed.
......@@ -26,7 +26,7 @@ PARAMETER:
]
VERSION_HISTORY:
V1.00 2020-04-20 Scott Sun
V1.01 2020-04-20 Scott Sun
1.新版本
HELP:
......@@ -53,6 +53,7 @@ var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var zip = require('topsin.zip');
var process = require('process');
var mode = $.ikm ? "topcam" : "aimdfm";
var IKM = $.ikm;
if (IKM==undefined ) { IKM = require('topcam.ikm6')($) }
......@@ -88,8 +89,12 @@ var Status = 'ok';
var resultData = [];
var import_info = [];
var inputState = [];
var cam_workflow_info = IKM.get_jobinfo({jobid:JobId, jobinfo:"cam_workflow_info"});
if(cam_workflow_info){
IKM.save_job_info({jobid:JobId, jobinfohash:{cam_workflow_info:""}})
}
try {
script_info({ msg: "import start" })
script_info({ msg: "import start", result_severity:"info" })
var par = PAR;
// var db_path = db.query("",function(q){
// return q.selectValue({
......@@ -101,7 +106,7 @@ try {
// if(_.isEmpty(db_path)){throw "quote-data-upload error"}
if(!par.path || par.path == "") {throw "path error"}
if(!par.hasOwnProperty("config_path") || par.config_path==""){
console.log("========================cfg");
console.log("===================cfg");
par.config_path = "cam/input_data"
};
if(!par.hasOwnProperty("db") || par.db==""){
......@@ -155,7 +160,6 @@ try {
// if(vc_position && vc_position != "" && !(/null/ig.test(vc_position))){
// job_file_baseName = job_file_baseName + "_" + vc_position
// }
console.log("========= ====>pathInfo:"+ _.toString(pathInfo) + " job: " + job_file_baseName)
var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job_file_baseName})
if(jobFile.length == 0){throw "job file is not exist"}
var jobFiles = [] // 记录要分析的文件
......@@ -169,7 +173,6 @@ try {
// 将jobFile下的zip解压
decompression(jobFile[0].path, [])
var job_attrs = db.query("",function(q){
return q.selectValue({
table:'pdm_job',
......@@ -179,11 +182,7 @@ try {
})
});
if (!job_attrs ) { job_attrs = {}}
if (inputState.indexOf("rar") >=0 || inputState.indexOf("7z") >=0) {
job_attrs.readin_result = "解压失败-格式无法识别"
} else {
job_attrs.readin_result = "已读入"
}
job_attrs.readin_result = "Readin"
db.query("",function(q){
return q.updateRow({
table:'pdm_job',
......@@ -198,19 +197,15 @@ try {
// 分析料号文件 得到料号导入信息 导入类型
var jobInfo = analyJobFiles({jobFiles:jobFiles.filter(function(v){return v.isFile}),custCfg:custCfg,config:config,job:job })
if(jobInfo.data.length == 0){
script_info({ msg: "file error" })
script_info({ msg: "file error", result_severity:"error" })
throw "file error"}
var importOk = false; // 是否成功导入
script_info({ progress: 10 })
if(/odb/ig.test(jobInfo.type)){ // odb导入
if(jobInfo.data.length == 1){ // 只分析到一个tgz文件 直接导入
IKM.msg("只分析到一个tgz文件 直接导入")
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)
......@@ -301,20 +296,20 @@ try {
GEN.COM("input_manual")
importOk = true
}
if(!importOk){ script_info({ msg: "import error" }); throw "import error"}
if(!importOk){ script_info({ msg: "import error",result_severity:"error" }); throw "import error"}
script_info({ progress: 20 })
reNameStep(job)
if(/2171/.test(par.customer)){
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()
}
// 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()
// }
} else if ((/yucca/ig.test(par.customer))) {
var matrix = GEN.getMatrix({job:job,type:"array"})
matrix.layer_type.forEach(function(v, i){
......@@ -384,6 +379,10 @@ try {
}
}
catch (e) {
script_info({ result_severity: "error" })
IKM.save_job_info({jobid:JobId, jobinfohash:{cam_workflow_info:_.toString(e)}})
IKM.msg(_.join(GEN.STATUS, "\n"))
IKM.msg(e)
Status = 'error';
......@@ -471,7 +470,6 @@ function importJob(props,delSameJob){
}
}
props.path = changePath(props.path)
IKM.msg(props)
GEN.importJob(props);
}
......@@ -534,7 +532,6 @@ function script_info(props){ // result_severity progress
}
}
function decompression(path, zips) {
var files = fs.listDir(path)
var count = 0;
......@@ -542,15 +539,16 @@ function decompression(path, zips) {
if (item.suffix == "zip" || item.suffix == "rar" || item.suffix == "7z") {
inputState.push(item.suffix)
}
if(item.suffix === "zip" && zips.indexOf(item.path) < 0){
if(/zip|rar|7z/.test(item.suffix) && zips.indexOf(item.path) < 0){
if(item.name.length >= 20) {
var mvname = "zip_custom" + count + ".zip";
var mvname = "custom" + count + "." + item.suffix;
count++
fs.rename(item.path, item.dir + "/" + mvname)
item.path = item.dir + "/" + mvname
}
zips.push(item.path)
zip.unzip(item.path);
var dir_name = item.path.replace(/\.(zip|7z|rar)$/, "");
autoUn(item.path, dir_name);
return true
}
return false
......@@ -567,4 +565,15 @@ function changePath(path) {
return v
}
})
}
function autoUn(path, dirname) {
console.log("=====path: " + path);
console.log("=====dirname: " + dirname);
if(/\.rar$/.test(path)){
fs.mkdir(dirname)
process.exec('unrar', ['x' , path, dirname, "-o+"])
} else {
process.exec('7za', ['x' , path, "-o"+dirname, "-aoa"])
}
}
\ No newline at end of file
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'path',
title : '资料路径',
type : 'LineEdit',
property : {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 zip = require('topsin.zip');
var mode = $.ikm ? "topcam" : "aimdfm";
var IKM = $.ikm;
if (IKM==undefined ) { IKM = require('topcam.ikm6')($) }
var GEN = $.gen;
var GUI = $.gui || {};
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);
}
if (mode === "aimdfm") {
var database = require("topsin.database");
database.addConnection($.conf.database_conf, "DFM");
var QDfm = database.query("DFM");
$.QDfm = QDfm;
if ($.conf.product_type == "aimdfm") {
QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
current_process_title: $.process_title,
progress: 0
},
where: { id: $.task_id }
});
}
}
var Status = 'ok';
var resultData = [];
try {
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)
if (mode === "aimdfm") {
$.QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
progress: 30
},
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"
}
}
catch (e) {
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";
}
This diff is collapsed.
......@@ -19,3 +19,6 @@ i6 01_topccp_ms... 02ccp_ms... ... 06_botccp_ms... as_topccp_ms... dimensionsc
vivo:
topenig
vpn: 5sMm2U71
\ No newline at end of file
......@@ -486,12 +486,6 @@ try {
GEN.affectedLayer( {mode:'all',affected:'no'} );
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"})}
if (mode === "aimdfm") {
......@@ -684,8 +678,8 @@ function save_drill_info(props){
drill_size_lower_tol : toolInfo.min_tol,
drill_size_upper_tol : toolInfo.max_tol
};
orgDrills.push(orgDrill);
miDrills.push(miDrill);
orgDrills.push(orgDrillInfo);
miDrills.push(miDrillInfo);
})
}
})
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
=head
NAME: ZWZ_Merge_Layer
DESCRIPTION: 复合层铜皮整理
PARAMETER:
[
{
name : 'step_filter',
type : 'LineEdit',
title : 'step过滤',
pack : {row:0,column:1},
property:{tool_tip:'选择step时候的过滤器'},
},
{
name : 'bak_layer_suf',
type : 'LineEdit',
title : '备份层后缀',
pack : {row:0,column:1},
property:{tool_tip:'去铜丝参数'},
}
]
VERSION_HISTORY:
V1.00 2020-10-30 Super
1.新版本
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> DFM优化 </p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<font color="#008000"><p> ● 无</p></font>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> ● 无 </p>
<br>
</body></html>
=cut
use strict;
use utf8;
use Data::Dump 'dump';
my ($Job,$Step)=($JOB,undef);
my $Report = 'done';
my @work_layers;
$PAR->{bak_layer_suf} = $PAR->{bak_layer_suf} ? $PAR->{bak_layer_suf} : '++--merge+layer++';
try {
###检查Genesis料号是否存在并打开
show_loading("检查${Job}是否存在..",0,position=>'n');
if (! $GEN->isJobExists(job=>$Job) ){
$GUI->msgbox(-icon=>'error',-text=>"料号 $Job 在Genesis中不存在, 请检查!");
return 'Error';
}
update_loading("正在打开料号 ${Job} ...",0,position=>'n');
$GEN->openJob(job=>$Job) unless ($GEN->isJobOpen(job=>$Job));
my @steps = $GEN->getStepList(job=>$Job);
if ( @steps == 0 ) {
$GUI->msgbox(-icon=>'error',-text=>'在料号中没有Step存在,你将退出!');
return 'Error';
}
elsif (@steps != 1){
my $srep_filter = $PAR->{step_filter} ? $PAR->{step_filter} : '.*';
my @tmp_steps = grep(/$srep_filter/,@steps);
if ( @tmp_steps == 0 ) {
$GUI->msgbox(-icon=>'error',-text=>'在料号中没有过滤器中的step存在,你将退出!');
return 'Error';
}
elsif ( @tmp_steps == 1 ) {
$Step = $tmp_steps[0];
}
else {
$Step = $GUI->select_step(-title=>'请选择工作Step',
-steplist=>\@tmp_steps,
-selectmode=>'single');
return 'Cancel' unless ($Step);
}
}
else {
$Step = $steps[0];
}
##
update_loading("过滤层别...",0,position=>'n');
@work_layers = get_work_layer();
return 'Cancel' if grep /^Cancel$/,@work_layers;
###打开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=>'inch');
$GEN->zoomHome();
$GEN->COM("disp_off");
foreach my $layer (@work_layers){
update_loading("$layer 复合层整理中...",0,position=>'n');
next if ($GEN->isLayerEmpty(job=>$Job,step=>$Step,layer=>$layer));
my $bak_layer = $layer.$PAR->{bak_layer_suf};
my $dest_suffix = '__tl__';
$GEN->createLayer(job=>$Job,layer=>$bak_layer,context=>'misc',type=>'document',delete_exists=>'yes');
$GEN->affectedLayer(affected=>'yes',layer=>$layer,clear_before=>'yes');
#1.分解复合层
$GEN->COM('unmerge_layer',layer=>$layer,dest_suffix=>$dest_suffix,dest_max_layers=>1000);
$GEN->selMoveOther(target_layer=>$bak_layer,invert=>'no');
#2.获取复合层名
my %matrix = $GEN->getMatrix(job=>$Job,type=>'hash');
my $exp = $layer.$dest_suffix;
my @merge_layer = grep(/($exp)/,sort {$matrix{$a}{row} <=> $matrix{$b}{row}} keys %matrix);
if(@merge_layer){
foreach my $tmp_layer (@merge_layer){
$GEN->affectedLayer(affected=>'yes',layer=>$tmp_layer,clear_before=>'yes');
my $check = substr($tmp_layer,-1);
if($check =~ /^p$/){
$GEN->selMoveOther(target_layer=>$layer,invert=>'no');
$GEN->affectedLayer(affected=>'yes',layer=>$layer,clear_before=>'yes');
$GEN->selectByFilter(polarity=>'negative',profile=>'all');
next unless ($GEN->getSelectCount());
$GEN->selClearFeature();
$GEN->selectByFilter(feat_types=>'surface',polarity=>'positive',profile=>'all');
next unless ($GEN->getSelectCount());
$GEN->selectByFilter(polarity=>'negative',profile=>'all');
$GEN->selContourize() if ( $GEN->getSelectCount() > 0 );
}else{
$GEN->selMoveOther(target_layer=>$layer,invert=>'yes');
$GEN->affectedLayer(affected=>'yes',layer=>$layer,clear_before=>'yes');
$GEN->selectByFilter(feat_types=>'surface',polarity=>'positive',profile=>'all');
next unless ($GEN->getSelectCount());
$GEN->selectByFilter(polarity=>'negative',profile=>'all');
$GEN->selContourize() if ( $GEN->getSelectCount() > 0 );
}
}
$GEN->deleteLayer(job=>$Job,layer=>[@merge_layer]);
}else{
next;
}
}
$GUI->msgbox(-icon=>'info',-text=>'脚本运行完成请仔细检查!');
###output and return status, if genesis error, it will output genesis error command
unless ($GEN->{STATUS}){
return $Report;
}
else{
$GUI->msgbox(-icon=>'error',-text=>join("\n",@{$GEN->{STATUS}}));
addFlowNotes(-notes=>" Genesis Error:\n ".join("\n ",@{$GEN->{STATUS}}));
return 'Error';
}
}
catch Error::Simple with {
my $error = shift;
$GUI->msgbox(-icon=>'error',-text=>$error);
return 'Error';
}
finally{
$GEN->clearLayers();
$GEN->affectedLayer( mode=>'all',affected=>'no' );
$GEN->COM("disp_on");
};
=head
选择线路层
=cut
sub get_work_layer{
# 获取工作层
my %matrix = $GEN->getMatrix(job=>$Job,type=>'hash');
foreach my $layer (sort {$matrix{$a}{row} <=> $matrix{$b}{row}} keys %matrix) {
if(defined($matrix{$layer}{context}) and $matrix{$layer}{context} eq 'board' ){
if(defined($matrix{$layer}{tl_type}) and ($matrix{$layer}{tl_type} eq 'outer' or $matrix{$layer}{tl_type} eq 'inner')){
push @work_layers,$layer;
}
}
}
my %tmp_matrix;
foreach my $layer (@work_layers) {
$tmp_matrix{$layer} = $matrix{$layer};
}
if (@work_layers > 1) {
@work_layers = $GUI->select_layer(
-title=>'请选择工作层别',
-layermatrix=>\%tmp_matrix,
-selectmode => 'multiple');#single
return 'Cancel' unless(@work_layers);
}
else {
@work_layers = @work_layers;
}
return @work_layers;
}
This diff is collapsed.
This diff is collapsed.
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