Commit b9d75c41 authored by Scott Sun's avatar Scott Sun

s

parent 33a8d68a
......@@ -56,6 +56,7 @@ var fs = require('fs');
var _ = require('lodash');
var JobId = $.job_id;
var database = require("topsin.database");
var Omatrix = {};
database.addConnection($.conf.database_conf, "DFM");
var QDfm = database.query("DFM");
if ($.conf.product_type == "aimdfm") {
......@@ -176,7 +177,6 @@ try {
// todo 设置钻孔层孔属性,镭射孔via,无铜孔npth,其余孔pth
// todo 上传钻孔信息
// 获取pcs_step 和 array_step的钻孔信息
var drill_info = {};
var drillLayers = analysis_obj.matrixInfo.mDrills;
......@@ -246,7 +246,7 @@ try {
// smd
var smdInfo;
try {
if(!analysis_obj.matrixInfo.mOuters.solderL){throw "no mask"}
if(!analysis_obj.matrixInfo.mOuters[0].solderL){throw "no mask"}
smdInfo = smdAnalysis({job:job,steplist:[pcs_step],layers:analysis_obj.matrixInfo.mOuters,attr:".smd"})
} catch (msg) {
console.log("smdInfo:error:"+msg)
......@@ -257,7 +257,7 @@ try {
console.log("===================================> 7 bga info")
var bgaInfo;
try {
if(!analysis_obj.matrixInfo.mOuters.solderL){throw "no mask"}
if(!analysis_obj.matrixInfo.mOuters[0].solderL){throw "no mask"}
bgaInfo = bgaAnalysis({job:job,steplist:[pcs_step],layers:analysis_obj.matrixInfo.mOuters,attr:".bga"})
} catch (msg) {
console.log("bgaInfo:error:"+msg)
......@@ -283,6 +283,7 @@ try {
})
console.log("===================================> 9 copper_percent signal drill")
// 分析layer info
var stepList = [pcs_step];
var oChecklistName = "mychecklist"
......@@ -297,7 +298,22 @@ try {
}
stepList.forEach(function(step){
GEN.openStep({ job: job, name: step })
// 曝光
analysis_obj.matrixInfo.mOuters.forEach(function(item){
if(item.solderL){
var tmp_info = GEN.exposedArea({layer1:item.signalL,mask1:item.solderL})
// {"area":"0.73817","percent":"8.986"}
var tmp_area = tmp_info.area
var tmp_percent = tmp_info.percent + "%"
// save_layerinfo({
// jobid: JobId,
// layer: item.signalL,
// layerinfohash: {
// }
// })
}
})
GEN.clearLayers()
GEN.affectedLayer({ affected: 'no', mode: 'all' })
// 创建chklist并运行 如果chklist存在先删除
......@@ -446,57 +462,45 @@ function UPLOAD_LAYER_MATRIX(props){
var job = props.job
props.jobcategory = props.jobcategory || "work"
var matrix = ANALYSIS_STACKUP({job:job, jobcategory:props.jobcategory});
var 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<ARGV["layers"].length;i++)\
{\
layerName = ARGV["layers"][i];\
var layerInfo = ARGV["matrix"][layerName];\
var tmpData = {"job_id":jobId, "name": layerInfo["name"]};\
if (ARGV["releasestatus"] != undefined && ARGV["releasestatus"] != null && ARGV["releasestatus"].length>0\
&& ARGV["releasestatus"][layerInfo["odb_name"]] != undefined && ARGV["releasestatus"][layerInfo["odb_name"]] != null )\
{\
tmpData["release_status"] = ARGV["releasestatus"];\
}\
else\
{\
tmpData["release_status"] = oLayers.hasOwnProperty(layerInfo["odb_name"]) ? oLayers[layerInfo["odb_name"]]["release_status"] : null;\
}\
for (n = 0; n < fieldLst.length; n++)\
{\
tmpData[fieldLst[n]] = layerInfo[fieldLst[n]];\
}\
//GUI.msgbox({text: TDataParse.variant2JsonStr(tmpData)});\
db.insertRow({table:tableName, data:tmpData});\
if (db.lastError().isValid()) throw db.lastError();\
}\
db.commit();\
return new TDataResponse();\
}\
catch (err)\
{\
print(err.text());\
db.rollback();\
return new TDataResponse(err, "");\
}\
}';
var layers = Object.keys(matrix).sort(function(a,b){return matrix[a]["row"] - matrix[b]["row"]})
var tableName = "pdm_job_" + props.jobcategory + "_layer";
console.log("===========>matrix upload");
var oLayers = db.query("",function(q){
return q.selectMapMap({
table:tableName,
field: ["odb_name", "release_status"],
where:{job_id:JobId},
uniquefield: "odb_name"
})
});
db.query("",function(q){
return q.deleteRow({
table:tableName,
where:{job_id:JobId},
})
});
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"
];
layers.forEach(function(layer){
var layerInfo = matrix[layer];
var tmpData = {
"job_id": JobId,
"name": layerInfo["name"]
};
tmpData["release_status"] = (oLayers&&oLayers.hasOwnProperty(layerInfo["odb_name"])) ? oLayers[layerInfo["odb_name"]]["release_status"] : null;
for (n = 0; n < fieldLst.length; n++) {
tmpData[fieldLst[n]] = layerInfo[fieldLst[n]];
}
db.query("",function(q){
return q.insertRow({
table:tableName,
data: tmpData
})
});
})
console.log("===========>matrix upload end");
return matrix
}
......@@ -585,6 +589,7 @@ function ANALYSIS_STACKUP(props){
function getMatrixInfo(props){ // 获取matrix各种信息
var job = props.job
var matrix = GEN.getMatrix({job:job})
Omatrix = matrix;
var res = {
matrix: matrix, // matrix
matrixVal: [], // matrix 的 value数组
......@@ -680,6 +685,9 @@ function save_job_info(props){ // todo 保存料号信息
function save_layerinfo(props){ // todo 保存层信息
var jobid = props.jobid;
var layer = props.layer;
if(Omatrix[layer] && Omatrix[layer].tl_name){
layer = Omatrix[layer].tl_name
}
var layerinfohash = props.layerinfohash;
Object.keys(layerinfohash).forEach(function(key){
var val = layerinfohash[key];
......@@ -953,6 +961,7 @@ function smdAnalysis(props){
GEN.openStep({job:job,step:step})
layers.forEach(function(layer){
// 计算开窗 数量
if(layer.solderL){
GEN.workLayer({name:layer.solderL,display_number:2,clear_before:'yes'})
if (!res.hasOwnProperty(layer.solderL)){
res[layer.solderL] = {}
......@@ -961,6 +970,7 @@ function smdAnalysis(props){
GEN.selAllFeat()
res[layer.solderL].sm_opening_count = GEN.getSelectCount()
GEN.selClearFeature()
}
// 分析最小smd宽高
GEN.workLayer({name:layer.signalL,display_number:2,clear_before:'yes'})
GEN.selClearFeature()
......@@ -982,6 +992,7 @@ function smdAnalysis(props){
var min_smd_pitch = smdPitch({job:job,step:step,layer:tmp_layer})
res[layer.signalL]["min_smd_pitch"] = min_smd_pitch
// 分析开窗宽高
if(layer.solderL){
GEN.workLayer({name:layer.solderL,display_number:2,clear_before:'yes'})
GEN.selClearFeature()
GEN.selRefFeat({layers:tmp_layer,use:'filter',mode:'include'})
......@@ -995,6 +1006,7 @@ function smdAnalysis(props){
res[layer.signalL].min_smd_opening_width = symbolInfo_solder["min_width"]
res[layer.signalL].min_smd_opening_length = symbolInfo_solder["min_length"]
GEN.deleteLayer({job:job,layer:solderL_tmp})
}
GEN.deleteLayer({job:job,layer:tmp_layer})
}
})
......@@ -1266,6 +1278,7 @@ function min_symbols_anal(props){ // 分析最小symbols
// 尺寸
res.min_bga_size = symbols.size
// 开窗大小
if(layer.solderL){
GEN.workLayer({name:layer.solderL,display_number:2,clear_before:'yes'})
GEN.selClearFeature()
GEN.selRefFeat({layers:tmp_layer,use:'filter',mode:'include'})
......@@ -1281,10 +1294,10 @@ function min_symbols_anal(props){ // 分析最小symbols
}
return a
},[]).sort(function(a,b){return a.size-b.size})[0].size
GEN.deleteLayer({job:job,layer:solderL_tmp})
}
// 间距
res.min_bga_pitch = bgaPitch({job:job,step:step,layer:tmp_layer})
GEN.deleteLayer({job:job,layer:solderL_tmp})
GEN.deleteLayer({job:job,layer:tmp_layer})
return res
}
......@@ -1371,7 +1384,7 @@ function all_bga_min_pitch_anal(props){ // 分析所有bga中间距最小的
var min_pad_symbols = GEN.getLayerSymsHist({job:job,layer:min_pad_layer,step:step})
var min_pad_symbol = _.values(min_pad_symbols).sort(function(a,b){return Number(a.size)-Number(b.size)})[0]
res.bga_min_pitch_pad_size = min_pad_symbol.size
if(solder_layer){
// 最小pitch开窗大小
GEN.workLayer({name:solder_layer,display_number:1,clear_before:'yes'});
GEN.selClearFeature()
......@@ -1386,6 +1399,8 @@ function all_bga_min_pitch_anal(props){ // 分析所有bga中间距最小的
res.bga_min_pitch_openging_size = symbols_solder_list.sort(function(a,b){return Number(a.size)-Number(b.size)})[0].size
}
GEN.deleteLayer({job:job,layer:solder_layer_tmp})
}
GEN.deleteLayer({job:job,layer:min_pad_layer})
GEN.deleteLayer({job:job,layer:min_pitch_layer})
GEN.deleteLayer({job:job,layer:tmp_layer})
......
......@@ -122,7 +122,7 @@ try {
// 如果genesis已经存在这个料号
err = delSameJob({job:job,delSame:config.delSameJob}); if(err){throw err};
var custCfg = config.customer[par.customer]
if(!custCfg){throw "config error"}
if(!custCfg){throw "customer config error:"+par.customer}
custCfg.db = par.db || custCfg.db
var step = custCfg.step.toLowerCase()
// 获取路径下文件信息
......
......@@ -369,6 +369,18 @@ function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名
GEN.renameLayer({job:job,layer:v.orig_name,new_name:v.new_name})
}
});
// 最后 如果第一个 最后一个不是top bottom 就手动修改
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"){
GEN.renameLayer({job:job,layer:topSignal,new_name:"top"})
}
if(botSignal !== "bottom"){
GEN.renameLayer({job:job,layer:botSignal,new_name:"bottom"})
}
}
function mergeDrill(props){ // 合并钻孔
......
......@@ -205,7 +205,7 @@
{"orig_name" : ["_isl(\\d+)_bottom"], "tl_name" : "d_($1)-($1+1)"}
]
},
"yucca": {
"Yucca": {
"step": "cad",
"rules": [
{
......
......@@ -11,8 +11,16 @@ var JobId = $.job_id;
try {
IKM.msg(1)
var job = "4"
var tmp = [{signalL:"top",solderL:"sm_top"}, {signalL:"top",solderL:null}]
// exposed
tmp.forEach(function(item){
if(item.solderL){
IKM.msg(GEN.exposedArea({layer1:item.signalL,mask1:item.solderL}))
// {"area":"0.73817","percent":"8.986"}
}
})
return "Done"
} catch (e) {
IKM.msg(e)
......
var 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)});
try {
var query = new TSqlQueryV2(T_SQLCNT_POOL.getSqlDatabase());
var selector = new TSqlSelectorV2;
selector.setTable("pdm_job_work_layer");
selector.setField(["name"]);
selector.setWhere("job_id", this.jobId);
selector.addWhere('type', 'outer');
selector.setOrder("row_num", 1);
var layerList = query.selectArrayValue(selector);
if (query.lastError().isValid()) {
throw query.lastError();
}
db.deleteRow({
table: tableName,
where: {
job_id: jobId
selector.clear();
selector.setTable("pdm_job_layerattr");
selector.setField(["attr_name", "layer", "value"]);
selector.setWhere("job_id", this.jobId);
selector.addWhere('layer', layerList);
var attrList = query.selectArrayMap(selector);
if (query.lastError().isValid()) {
throw query.lastError();
}
});
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 < ARGV["layers"].length; i++) {
layerName = ARGV["layers"][i];
var layerInfo = ARGV["matrix"][layerName];
var tmpData = {
"job_id": jobId,
"name": layerInfo["name"]
};
if (ARGV["releasestatus"] != undefined && ARGV["releasestatus"] != null && ARGV["releasestatus"].length > 0 &&
ARGV["releasestatus"][layerInfo["odb_name"]] != undefined && ARGV["releasestatus"][layerInfo["odb_name"]] != null) {
tmpData["release_status"] = ARGV["releasestatus"];
} else {
tmpData["release_status"] = oLayers.hasOwnProperty(layerInfo["odb_name"]) ? oLayers[layerInfo["odb_name"]]["release_status"] : null;
selector.clear();
selector.setTable("pdm_job_work_layer");
selector.setField(["odb_name", "side"]);
selector.setWhere("job_id", this.jobId);
selector.addWhere('odb_context', 'board');
selector.setOrder("type", "solder_mask");
var nameList = query.selectArrayMap(selector);
if (query.lastError().isValid()) {
throw query.lastError();
}
for (n = 0; n < fieldLst.length; n++) {
tmpData[fieldLst[n]] = layerInfo[fieldLst[n]];
var goldMap = {};
var refLayerMap = {};
_.each(nameList, function (item) {
if (item["odb_name"] == "gold") {
goldMap[item["side"]] = item["odb_name"];
} else if (item["odb_name"] == "ref_layer") {
refLayerMap[item["side"]] = item["odb_name"];
}
//GUI.msgbox({text: TDataParse.variant2JsonStr(tmpData)});
db.insertRow({
table: tableName,
data: tmpData
});
if (db.lastError().isValid()) throw db.lastError();
})
var dataMap = {};
_.each(attrList, function (valueMap) {
var tempList = [];
if (!_.isEmpty(dataMap[valueMap["layer"]])) {
tempList = dataMap[valueMap["layer"]];
}
db.commit();
return new TDataResponse();
} catch (err) {
print(err.text());
db.rollback();
return new TDataResponse(err, "");
tempList.push(valueMap);
dataMap[valueMap["layer"]] = tempList;
})
var retMap = {};
for (var key in dataMap) {
var tempMap = {};
_.each(dataMap[key], function (itemMap) {
tempMap[itemMap["attr_name"]] = itemMap["value"];
})
retMap[key] = tempMap;
}
var itemList = ["top", "bottom"];
var retList = [];
_.each(itemList, function (item) {
var tempMap = retMap[item];
tempMap["gold"] = goldMap[item];
tempMap["ref_layer"] = refLayerMap[item];
retList.push(tempMap);
})
return JSON.stringify(retList);
} catch (e) {
print(e);
GUI.msgbox({
title: 'Error',
detail: e
});
}
\ No newline at end of file
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