AIMDFM_check_drc.js 4.16 KB
Newer Older
Scott Sun's avatar
Scott Sun committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
/*
NAME: 
DESCRIPTION: ;
PARAMETER:
    [
		{
			name : 'step_filter',
			title : '工作step',
			type : 'LineEdit',
			property : {tool_tip : '未设定,则手动选择',},
		},
		{
			name : 'units',
			title : '单位',
			type : 'RadioBox',
			property : {
				size_policy:'Expanding,Fixed',
				item_list:[
					{name:'inch',text:'Inch'},
					{name:'mm',text:'MM'},
				],
				tool_tip:'未设定,默认为Inch'
			},
			pack : {row:1,column:1},
		}
	]
	
 VERSION_HISTORY:
	V1.00 2020-01-22 Shyer Wang
	    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>	
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////

var $ = require('topcam.scriptfunc').argv();
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 JOB = $.job_name;
var GEN = $.gen;
var PAR = {};
if ($.hasOwnProperty('script_parameter')){
	PAR = JSON.parse($.script_parameter);
}
if (!$.hasOwnProperty(PAR["save_job"])) {
	PAR["save_job"] = 'No';
}

var step_filter = _.toString(PAR["step_filter"]) == '' ? 'net|array|edit' : PAR["step_filter"];
var Status = 'ok';
var resultData = [];
var Units = _.toString(PAR["units"]) == '' ? 'inch' : PAR["units"] ;

try {
    if(_.isEmpty(JOB)) throw "没有传入料号名!";
    if(!GEN.isJobExists({job: JOB})) throw "料号:" + JOB + "在Genensis中不存在!";
    if(!GEN.isJobOpen({job: JOB})) GEN.openJob({job: JOB});
	GEN.checkInout({ "job": JOB, "mode": 'out' });
	var steps = GEN.getStepList({ job: JOB });
	var work_steps = [];
	//将匹配到的step放入work_steps
	steps.filter(function (value, index, array) {
		var pattern = new RegExp(step_filter);
		if (pattern.test(value)) {
			work_steps.push(value)
		}
	});
	//循环work_steps
		//检查是否存在 T2_ori_analysis 的checklist,存在则删除重新创建
		//T2_ori_analysis的checklist中存在如下分析Drill Checks:
			/**
			  	T2_ori_analysis_drill
				Board - Drill Checks: T2_ori_HDI_dill_analysis
				Signal Layer Checks: T2_ori_analysis_signal
				Solder Mask Checks: T2_ori_analysis_sm
			*/
		//运行T2_ori_analysis的checklist

	//保存料号

	var chklist = 't2_ori_analysis';
	var run_nactnum = [1,2,4,7];
	work_steps.filter(function (step) {
		GEN.openStep({ job: JOB, step: 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: Units });
		GEN.zoomHome();
		//
		// var nactNum = 1;
		if (!GEN.isChklistExists({ "job": JOB, "step": step, "chklist": chklist })) GEN.COM("chklist_from_lib,chklist=" + chklist);
		GEN.chklistShow({ chklist: chklist});
		run_nactnum.forEach(function (nact_num) { 
			GEN.chklistRun({ chklist: chklist, nact: nact_num });
		})

		GEN.clearLayers();
		GEN.affectedLayer({ mode: 'all', affected: 'no' });
	});

	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};
}