=head NAME: DESCRIPTION: 共有函数,给到所有程序可以调用 PARAMETER:{} VERSION_HISTORY: V1.00 2018-1-17 Cody Yu 1.新版本 V1.01 2020-12-2 Super 1.修正料号获取 HELP:
=cut use utf8; use Data::Dump 'dump'; use strict; #my ($GEN,$JOB_ID,$DB,$DB2,$JOB,$GUI,$USER_NAME); #(job=>genesis料号名,jobcategory=>'work|org'); sub ANALYSIS_STACKUP { my %par = @_; my $Job = $par{job}; $par{jobcategory} = 'work' unless $par{jobcategory}; my $layer_count = $GEN->getLayerCount(job=>$Job); my %matrix=$GEN->getMatrix(job=>$Job,type=>'hash'); foreach my $layer (sort {$a->{row} <=> $b->{row}} values %matrix) { $layer->{odb_name} = $layer->{name}; $layer->{name} = $layer->{tl_name}; $layer->{type} = $layer->{tl_type}; if ($layer->{context} eq 'board' and $layer->{layer_type} eq 'drill'){ if ($layer->{odb_name} eq 'drl'){ $layer->{name} = 'drill'; $layer->{drl_start_num} = 1; $layer->{drl_end_num} = $layer_count; $layer->{drl_from_num} = 1; $layer->{drl_to_num} = $layer_count; $layer->{type} = 'main_drill'; } elsif ($layer->{odb_name} =~/^drl(\d+)\-(\d+)$/){ my $drl_star = $1; my $drl_end = $2; $layer->{name} = 'drill'.$drl_star.'-'.$drl_end; $layer->{drl_start_num} = $drl_star; $layer->{drl_end_num} = $drl_end; $layer->{drl_from_num} = $drl_star; $layer->{drl_to_num} = $drl_end; if( $drl_star == 1 and $drl_end == $layer_count ){ $layer->{type} = 'main_drill'; }else{ if( $drl_star == 1 or $drl_end == $layer_count ){ $layer->{type} = 'blind_drill'; } else{ $layer->{type} = 'bury_drill'; } } } elsif ($layer->{odb_name} =~/^ls(\d+)\-(\d+)$/){ my $drl_star = $1; my $drl_end = $2; $layer->{name} = 'ls'.$drl_star.'-'.$drl_end; $layer->{drl_start_num} = $drl_star; $layer->{drl_end_num} = $drl_end; $layer->{drl_from_num} = $drl_star; $layer->{drl_to_num} = $drl_end; $layer->{type} = 'laser_drill'; } } else{ $layer->{name} = '__'.$layer->{odb_name}.'__' unless $layer->{name}; $layer->{type} = 'other' unless $layer->{type}; } ##更新部分key $layer->{odb_context} = $layer->{context}; $layer->{odb_type} = $layer->{layer_type}; $layer->{odb_polarity} = $layer->{polarity}; $layer->{odb_side} = $layer->{side}; $layer->{odb_row_num} = $layer->{row}; $layer->{row_num} = $layer->{tl_num}; ## } return \%matrix; } sub GET_GEN_JOB{ my %par = @_; my @joblist = @{$par{joblist}}; my @jobs = grep({$_ =~ /$par{job}/}@joblist); ## my $return_job; if( scalar(@jobs) == 1 ){ $return_job = $jobs[0]; } elsif( scalar(@jobs) == 2 ){ if( grep({$_ eq $par{job}.'-new'}@joblist) ){ $return_job = $par{job}.'-new'; } } else{ my %info; foreach my $job(@jobs){ my ($time) = $job =~ /\-new(\d+)$/; next unless $time; $info{$job}{name} = $job; $info{$job}{time} = $time; } if( keys %info ){ my @sort_jobs = keys %info; @sort_jobs = sort{$info{$b}{time}<=>$info{$a}{time}}@sort_jobs; $return_job = $sort_jobs[0]; } else{ if( grep({$_ eq $par{job}.'-new'}@joblist) ){ $return_job = $par{job}.'-new'; } else{ $return_job = $jobs[0]; } } } $return_job = $par{job} unless $return_job; return $return_job; } #上传层结构 # doScript("XJX_Public"); # UPLOAD_LAYER_MATRIX(job=>$Job,jobcategory=>'org'); # UPLOAD_LAYER_MATRIX(job=>$Job,jobcategory=>'work'); #(job=>genesis料号名,jobcategory=>'work'|'org',releasestatus=>{l1=>'Release',l2=>'Block'})#如果上传成功返回undef,失败则返回错误代码 sub UPLOAD_LAYER_MATRIX{ my %par = @_; my $Job = $par{job}; my $matrix = ANALYSIS_STACKUP(job=>$Job); my $func = 'function(ARGV) { var jobId = ARGV["job_id"]; var tableName = "pdm_job_" + ARGV["jobcategory"] + "_layer"; //GUI.msgbox({text: TDataParse.variant2JsonStr(tableName)}); var db = new TSqlQueryV2(T_SQLCNT_POOL.getSqlDatabase()); db.begin(); try{ var oLayers = db.selectMapMap({table:tableName, field:["odb_name","release_status"], where:{job_id:jobId}, uniquefield:"odb_name"}); if (db.lastError().isValid()) throw db.lastError(); //GUI.msgbox({text: TDataParse.variant2JsonStr(oLayers)}); db.deleteRow({table:tableName, where:{job_id:jobId}}); if (db.lastError().isValid()) throw db.lastError(); var fieldLst = ["name", "odb_context", "odb_type", "odb_polarity", "odb_side", "drl_start", "drl_end", "row_num", "type", "drl_start_num", "drl_end_num", "drl_from_num", "drl_to_num", "drl_connect_to", "odb_name", "side", "stackup_num", "customer_field", "input_file_name", "odb_row_num"]; for (var i=0;i