Commit 79cbbdc2 authored by Scott Sun's avatar Scott Sun

s

parent ba8d156b
......@@ -5,21 +5,6 @@ NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'path',
title : '资料路径',
type : 'LineEdit',
property : {tool_tip : '存放所有料号的文件夹路径,不需要进入到料号文件夹内'},
},
{
name : 'customer',
title : '客户配置',
type : 'ComboBox',
property : {
item_list:['customer_1','customer_2','new_data'],
tool_tip:'客户代码'
}
},
{
name : 'db',
title : '料号db',
......@@ -86,8 +71,15 @@ if ($.hasOwnProperty('script_parameter')){
try {
var par = PAR;
if(!par.hasOwnProperty("customer") || par.customer == ""){throw "未填写配置"};
if(!par.hasOwnProperty("path") || par.path == ""){throw "未填写路径"};
var db_path = db.query("",function(q){
return q.selectValue({
table:'pub_conf',
field:'text_data',
where:{path : "quote-data-upload"}
})
});
if(_.isEmpty(db_path)){throw "quote-data-upload error"}
par.path = db_path;
if(!par.hasOwnProperty("config_path") || par.config_path==""){
console.log("========================cfg");
par.config_path = "cam/input_data"
......@@ -103,6 +95,7 @@ try {
where:{id : JobId}
})
});
if(_.isEmpty(db_customer)){throw "customer error"}
if(db_customer && !(/^done$/ig.test(db_customer)) && db_customer != "" ){
par.customer = db_customer
}
......@@ -127,7 +120,9 @@ try {
custCfg.db = par.db || custCfg.db
var step = custCfg.step.toLowerCase()
// 获取路径下文件信息
var path = par.path || custCfg.path
var path = JSON.parse(par.path).path
console.log("=============>path:"+ path)
if(!fs.exists(path)){throw "path error"}
var pathInfo = fs.listDir(path, 1)
// 判断存不存在料号文件
var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job})
......
......@@ -3,15 +3,6 @@ NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'customer',
title : '客户配置',
type : 'ComboBox',
property : {
item_list:['customer_1','customer_2','new_data'],
tool_tip:'客户代码'
}
},
{
name : 'config_path',
title : '配置地址',
......@@ -70,7 +61,6 @@ if ($.hasOwnProperty('script_parameter')){
try {
var mode = "use" // develop
var par = PAR;
if(!par.hasOwnProperty("customer") || par.customer == ""){throw "未填写配置"};
if(!par.hasOwnProperty("config_path") || par.config_path==""){
console.log("========================cfg");
par.config_path = "cam/input_data"
......@@ -82,6 +72,7 @@ try {
where:{id : JobId}
})
});
if(_.isEmpty(db_customer)){throw "customer error"}
if(db_customer && !(/^done$/ig.test(db_customer)) && db_customer != "" ){
par.customer = db_customer
}
......@@ -130,21 +121,6 @@ try {
if(err){throw err}
// 创建profile
var new_martix = GEN.getMatrix({job:job})
var profileLayer = Object.keys(new_martix).filter(function(v){
return new_martix[v].layer_type=="rout"
})
if(profileLayer.length){
var tmp = profileLayer[0]
if(profileLayer.indexOf("outline")>=0){tmp = "outline"}
var step = GEN.getStepList({job:job})[0];
GEN.openStep({job:job,name:step})
GEN.workLayer({name:tmp,display_number:2,clear_before:'yes'})
GEN.selCreateProfile()
GEN.closeStep()
}
// end
GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号
GEN.saveJob({ job: job });
......@@ -310,6 +286,8 @@ function setDrill(props){ // 设置钻孔
var signalLayer =matrix.filter(function(v){
return v.attr.type == "signal" && v.attr.context == "board"
})
console.log("=================>setdrill:drillLayer:" + _.toString(drillLayer));
var layerCount = GEN.getLayerCount({job:job})
// findSignal 根据传入的数字找到对应的signal层 如 1 => top ; 2 => layer_2
function findSignal(num){
......@@ -317,7 +295,7 @@ function setDrill(props){ // 设置钻孔
}
function doDrill(drills){ // 分析钻孔层
return drills.map(function(v){
if(v.name == "drill" || v.name=="rout"){
if(v.name == "drill" || v.name=="rout" || v.name=="outline"){
return {start:findSignal(1), end:findSignal(layerCount), layer:v.name}
} else {
var tmp = /(\d+)-(\d+)/ig.exec(v.tl_name);
......
......@@ -148,8 +148,7 @@
}
},
"customer": {
"Customer_1": {
"path": "/opt/resource/customer_1",
"2171": {
"step": "cad",
"rules": [
{
......@@ -206,8 +205,7 @@
{"orig_name" : ["_isl(\\d+)_bottom"], "tl_name" : "d_($1)-($1+1)"}
]
},
"Customer_2": {
"path": "/opt/resource/customer_2",
"yucca": {
"step": "cad",
"rules": [
{
......@@ -346,7 +344,6 @@
]
},
"New_data": {
"path": "/opt/resource/new_data",
"step": "cad",
"rules": [
{
......@@ -450,14 +447,15 @@
],
"tl_name": [
{"orig_name" : ["pasttop.art","^past_top$","top_solderpaste"], "tl_name" : "past_top" },
{"orig_name" : ["pleg.art","^silk_top$","top_silkscreen"], "tl_name" : "silk_top" },
{"orig_name" : ["soldtop.art","^sm_top$","top_soldermask"], "tl_name" : "sm_top" },
{"orig_name" : ["top.art","^top$"], "tl_name" : "top" },
{"orig_name" : ["inner_(\\d+)\\.art","layer_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["bottom.art","^bottom$"], "tl_name" : "bottom" },
{"orig_name" : ["soldbotm.art","^sm_botm$","bot_soldermask"], "tl_name" : "sm_botm" },
{"orig_name" : ["sleg.art","^silk_bot$","bot_silkscreen"], "tl_name" : "silk_bot" },
{"orig_name" : ["^silk_top\\.art$","pleg.art","^silk_top$","top_silkscreen"], "tl_name" : "silk_top" },
{"orig_name" : ["_r1\\.phd$","_r1\\.fph$","^smt\\.art$","soldtop.art","^sm_top$","top_soldermask"], "tl_name" : "sm_top" },
{"orig_name" : ["^top.art$","^top$"], "tl_name" : "top" },
{"orig_name" : ["_l(\\d+)\\.phd$","_l(\\d+)\\.fph$","^in_(\\d+)\\.art$","^l(\\d+)\\.art$","inner_(\\d+)\\.art","layer_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^bot.art$","^bottom.art","^bottom$"], "tl_name" : "bottom" },
{"orig_name" : ["_r\\d\\.phd$","_r\\d\\.fph$","^smb\\.art$","soldbotm.art","^sm_botm$","bot_soldermask"], "tl_name" : "sm_botm" },
{"orig_name" : ["^silk_bottom\\.art$","sleg.art","^silk_bot$","bot_silkscreen"], "tl_name" : "silk_bot" },
{"orig_name" : ["pastbotm.art","^past_botm$","bot_solderpaste"], "tl_name" : "past_botm" },
{"orig_name" : ["^nc_drill$","^drill$"], "tl_name" : "drill" },
{"orig_name" : "multipack.art", "tl_name" : "array" },
{"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
{"orig_name" : ["outline.art","^outline$"], "tl_name" : "outline" },
......@@ -465,7 +463,7 @@
{"orig_name" : "top-enig", "tl_name" : "top-enig" },
{"orig_name" : "bot-enig", "tl_name" : "bot-enig" },
{"orig_name" : "fab_page2", "tl_name" : "fab_page2" },
{"orig_name" : ["(\\d+)-(\\d+)-laser\\.drl","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"}
{"orig_name" : ["_d(\\d)(\\d+)\\.drd","_d(\\d)(\\d+)\\.fdr","^d(\\d)(\\d+)\\.art$","(\\d+)-(\\d+)-laser\\.drl","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"}
]
}
},
......@@ -486,5 +484,5 @@
{"tl_name":"array","new_name":"array" ,"attr":{"context":"misc"}},
{"tl_name":"fab.art","new_name":"fab.art" ,"attr":{"context":"misc"}}
],
"delSameJob": "no"
"delSameJob": "yes"
}})()
\ No newline at end of file
......@@ -58,7 +58,7 @@ try {
job_name: "1",
path: "C:/Users/Alan/Desktop/Customer_1"
}
var parParams = ["customer", "job_name", "path"]; // par应该有的属性
var isParExist = parParams.reduce(function (a, b) {
if (!par.hasOwnProperty(b)) {
......
......@@ -8,242 +8,13 @@ var GEN = $.gen;
var GUI = $.gui;
var Job = $.job;
var JobId = $.job_id;
var drill_toll_manage = {}
try {
var job = "sj";
if(GEN.isJobExists({job:job})){
GEN.closeJob({job:job})
GEN.deleteJob({job:job})
}
var config = {
format: {
"Gerber274x_1": {
"nf1": 5,
"nf2": 5,
"units": "inch",
"zeroes": "leading",
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "*",
"threshold": 200,
"drill_only": "no",
"multiplier": 1,
"resolution": 3,
"tool_units": "inch",
"coordinates": "absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
},
"Excellon2_1": {
"nf1": 2,
"nf2": 3,
"units": "inch",
"zeroes": "none",
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "nl",
"threshold": 200,
"drill_only": "no",
"multiplier": 1,
"resolution": 3,
"tool_units": "inch",
"coordinates": "absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
}
},
odb: [{
vaild: function(item){
return /\.tgz$/ig.test(item.name) // 以.tgz结尾的
}
}],
gerber: [
{
vaild: function(item){
return /\.art$/ig.test(item.name) // 以.art结尾的
},
type: "Gerber274x",
format: "Gerber274x_1"
},
{
vaild: function(item){
return /\.drl$/ig.test(item.name) // 以.drl结尾的
},
type: "Excellon2",
format: "Excellon2_1"
}
]
}
var path = "C:/Users/Administrator/Desktop/sj(1)"
IKM.msg(1)
var inputInfo = getJobInfo({path:path, job:job,config:config})
if(/gerber/ig.test(inputInfo.type)){
inputInfo.data.forEach(function(file){
if(/\.drl$/ig.test(file.name)){
var backUpName = file.name+".backup"
// 备份
fs.copyFile(file.path,file.dir+"/"+backUpName)
// 读取
var data = fs.readFile(file.path)
data = data.split("\n")
var head = getHead(data)
var body = data
// 解析head
var headData = head.filter(function(v){
return /Holesize.+Tolerance.+PLATED/ig.test(v)
})
headData.map(function(v){
var res = {
holesize: {},
tolerance: {},
attr: "",
unit: "",
quantity: 0
}
var holesize_tmp = /(Holesize.+)Tolerance/.exec(v)[1];
holesize_tmp = holesize_tmp.split("=")
res.holesize.key = holesize_tmp[0].trim()
res.holesize.value = holesize_tmp[1].trim()
var Tolerance_tmp = /(Tolerance.{23})/.exec(v)[1];
Tolerance_tmp = Tolerance_tmp.split("=")[1].split("/")
res.tolerance.top = Tolerance_tmp[0].trim()
res.tolerance.bot = Tolerance_tmp[1].trim()
res.attr = /NON_PLATED/ig.test(v) ? "non_plated" : "plated"
res.unit = /MILS/ig.test(v) ? "inch" : "mm"
res.quantity = parseInt(v.split("=").pop())
if(!drill_toll_manage.hasOwnProperty(file.name)){
drill_toll_manage[file.name] = {}
}
drill_toll_manage[file.name][/(\d+)/ig.exec(res.holesize.key)[1]] = res
})
// 给body添加刀
var count = 0;
body = body.filter(function(v){
return !(/T\d+/ig.test(v))
})
body.forEach(function(v, i){
if(/^%$|^M00/ig.test(v)){
var k = "T" + getK(++count)
body[i] = v + "\n" + k
}
})
// 写入文件
var resStr = head.join("\n") + "\n" + body.join("\n")
fs.writeFile(file.path,resStr)
}
})
importGerber({job:job,step:"pcs",db:"genesis",data:inputInfo.data})
// 导入后 修改 tool manager
var stepList = GEN.getStepList({job:job})
var matrix = GEN.getMatrix({job:job})
var drill_layers = Object.keys(matrix).filter(function(v){return matrix[v].layer_type=="drill"})
stepList.forEach(function(step){
GEN.openStep({job:job,name:step})
drill_layers.forEach(function(layer){
var drill_tool_manage_info = drill_toll_manage[layer]
var drill_tool_keys = Object.keys(drill_tool_manage_info).sort(function(a,b){return a-b})
GEN.COM("tools_tab_reset")
drill_tool_keys.forEach(function(key){
var val = drill_tool_manage_info[key]
GEN.COM("tools_tab_add", {
num: key,
type: /plated/ig.test(val.attr) ? "plate" : "nplate",
min_tol: Number(val.tolerance.top),
max_tol: Number(val.tolerance.bot),
finish_size: Number(val.holesize.value),
drill_size: Number(val.holesize.value)
})
})
GEN.COM("tools_set",{layer:layer,thickness:0,user_params:1,slots:"by_length"})
})
GEN.closeStep()
})
}
return "Done"
} catch (e) {
IKM.msg(e)
return "Error"
}
function getJobInfo(props){
var path = props.path
var config = props.config
var job = props.job
var files = fs.listDir(path)
files = files.filter(function(v){return v.isFile}) // 过滤出文件
// 先判断是不是odb
var odbFiles = files.filter(function(file){ // 拿到odb文件
return config.odb.reduce(function(a,b){
if(b.vaild(file)){
a = true
}
return a
}, false)
})
if(odbFiles.length){
return {
type: "odb",
data: odbFiles[0]
}
}
var gerberFiles = files.filter(function(file){ // 拿到odb文件
return config.gerber.reduce(function(a,b){
if(b.vaild(file)){
file.gerber = config.format[b.format];
file.type = b.type;
a = true
}
return a
}, false)
})
if(gerberFiles.length){
return {
type: "gerber",
data: gerberFiles
}
}
return "none"
}
function importGerber(props){ // job db step
var job = props.job
var step = props.step
var files = props.data
GEN.createJob({name:job,db:props.db})
GEN.createStep({job:job,name:props.step})
var gerberInfo = files.map(function(item){
var gerberCfg = JSON.parse(JSON.stringify(item.gerber));
gerberCfg.layer = item.name.toLowerCase()
gerberCfg.path = item.path
gerberCfg.format = item.type
gerberCfg.job = job
gerberCfg.step = step
return gerberCfg
})
GEN.COM("input_manual_reset")
gerberInfo.forEach(function(v){
GEN.COM("input_manual_set",v)
})
GEN.COM("input_manual")
}
function getHead(arr,head){
head = head || [];
if(arr[0] != "%"){
head.push(arr.shift())
return getHead(arr,head)
} else {
return head
}
}
function getK(count){
return count < 10 ? "0" + String(count) : String(count)
}
\ No newline at end of file
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 str = "-0.0001"
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"
];
console.log(Number(str));
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, "");
}
}
\ 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