This commit is contained in:
r0n1n7an 2025-04-09 15:12:33 +08:00
commit a380c5c41e

View File

@ -22,8 +22,8 @@ type UutInfo struct {
Message string Message string
PartNO string PartNO string
Model string Model string
MfgMO string
MfgSKU string MfgSKU string
MfgMO string
MfgLine string MfgLine string
MfgStage string MfgStage string
FirstAck string FirstAck string
@ -34,8 +34,8 @@ type UutInfo struct {
type ReportInfo struct { type ReportInfo struct {
USN string USN string
PartNO string PartNO string
MfgSKU string
MfgMO string MfgMO string
SKU string
Line string Line string
Location string Location string
Item string Item string
@ -70,7 +70,7 @@ func (e *EWS) RecordIssue(cfg cnf.Cfg, logger *log.Logger, host string, addr str
stmt, err := dbo.Prepare( stmt, err := dbo.Prepare(
fmt.Sprintf(`INSERT INTO %s fmt.Sprintf(`INSERT INTO %s
(usn,mac,ipaddr,relay,partno,mo,sku,line,stage,item,status,message,first_ack,last_change,locline,loccol,locrow,locnum,loctime) (usn,mac,ipaddr,relay,partno,sku,mo,line,stage,item,status,message,first_ack,last_change,locline,loccol,locrow,locnum,loctime)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);`, VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);`,
cfg.MySQL.IssuesTable), cfg.MySQL.IssuesTable),
) )
@ -88,8 +88,8 @@ func (e *EWS) RecordIssue(cfg cnf.Cfg, logger *log.Logger, host string, addr str
addr, addr,
host, host,
params["PARTNO"], params["PARTNO"],
params["MO"],
params["SKU"], params["SKU"],
params["MO"],
params["LINE"], params["LINE"],
params["STAGE"], params["STAGE"],
params["ITEM"], params["ITEM"],
@ -173,7 +173,7 @@ func (e *EWS) SetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
//如果在uutinfo表中未查找到此USN的记录, 则新增一条此USN的记录 //如果在uutinfo表中未查找到此USN的记录, 则新增一条此USN的记录
if err == sql.ErrNoRows { if err == sql.ErrNoRows {
dmlInsert := fmt.Sprintf(`INSERT INTO uutinfo dmlInsert := fmt.Sprintf(`INSERT INTO uutinfo
(usn,mac,ipaddr,relay,item,status,message,partno,mo,sku,line,stage,first_ack,last_ack,last_change) (usn,mac,ipaddr,relay,item,status,message,partno,sku,mo,line,stage,first_ack,last_ack,last_change)
VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',%s,%s,%s);`, VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',%s,%s,%s);`,
params["USN"], params["USN"],
params["MAC"], params["MAC"],
@ -183,8 +183,8 @@ func (e *EWS) SetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
params["STATUS"], params["STATUS"],
params["MESSAGE"], params["MESSAGE"],
params["PARTNO"], params["PARTNO"],
params["MO"],
params["SKU"], params["SKU"],
params["MO"],
params["LINE"], params["LINE"],
params["STAGE"], params["STAGE"],
"NOW()", "NOW()",
@ -210,6 +210,32 @@ func (e *EWS) SetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
return rst return rst
} }
//如果测试项不为空(第一个心跳包), 当部分客户端参数为空, 则保留uutinfo表中已存在记录的值
mac := params["MAC"]
pn := params["PARTNO"]
sku := params["SKU"]
mo := params["MO"]
line := params["LINE"]
stage := params["STAGE"]
if mac == "" {
mac = ui.MAC
}
if pn == "" {
pn = ui.PartNO
}
if sku == "" {
sku = ui.MfgSKU
}
if mo == "" {
mo = ui.MfgMO
}
if line == "" {
line = ui.MfgLine
}
if stage == "" {
stage = ui.MfgStage
}
//如果此USN的记录存在于uutinfo表中, 且此USN的Relay/MAC/Item/Status/Message已变化, 则: //如果此USN的记录存在于uutinfo表中, 且此USN的Relay/MAC/Item/Status/Message已变化, 则:
//1. 备份此USN对应记录行到uutinfobkup表 //1. 备份此USN对应记录行到uutinfobkup表
//2. 删除uutinfo表中对应USN的记录行 //2. 删除uutinfo表中对应USN的记录行
@ -250,7 +276,7 @@ func (e *EWS) SetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
return rst return rst
} }
stmt, err := tx.Prepare("INSERT INTO uutinfobkup (usn,mac,ipaddr,relay,item,status,message,partno,mo,sku,line,stage,first_ack,last_ack,last_change) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);") stmt, err := tx.Prepare("INSERT INTO uutinfobkup (usn,mac,ipaddr,relay,item,status,message,partno,sku,mo,line,stage,first_ack,last_ack,last_change) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);")
if err != nil { if err != nil {
tx.Rollback() tx.Rollback()
logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, err.Error()) logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, err.Error())
@ -262,14 +288,14 @@ func (e *EWS) SetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
_, err = stmt.Exec( _, err = stmt.Exec(
ui.USN, ui.USN,
ui.MAC, ui.MAC,
addr, ui.IPAddr,
host, ui.Relay,
ui.Item, ui.Item,
ui.Status, ui.Status,
ui.Message, ui.Message,
ui.PartNO, ui.PartNO,
ui.MfgMO,
ui.MfgSKU, ui.MfgSKU,
ui.MfgMO,
ui.MfgLine, ui.MfgLine,
ui.MfgStage, ui.MfgStage,
ui.FirstAck, ui.FirstAck,
@ -302,12 +328,7 @@ func (e *EWS) SetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
return rst return rst
} }
mac := params["MAC"] stmt, err = tx.Prepare("INSERT INTO uutinfo (usn,mac,ipaddr,relay,item,status,message,partno,sku,mo,line,stage,first_ack,last_ack,last_change) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,NOW(),NOW());")
if mac == "" {
mac = ui.MAC
}
stmt, err = tx.Prepare("INSERT INTO uutinfo (usn,mac,ipaddr,relay,item,status,message,partno,mo,sku,line,stage,first_ack,last_ack,last_change) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,NOW(),NOW());")
if err != nil { if err != nil {
tx.Rollback() tx.Rollback()
logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, err.Error()) logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, err.Error())
@ -323,11 +344,11 @@ func (e *EWS) SetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
params["ITEM"], params["ITEM"],
params["STATUS"], params["STATUS"],
params["MESSAGE"], params["MESSAGE"],
params["PARTNO"], pn,
params["MO"], sku,
params["SKU"], mo,
params["LINE"], line,
params["STAGE"], stage,
ui.FirstAck, ui.FirstAck,
) )
if err != nil { if err != nil {
@ -390,7 +411,7 @@ func (e *EWS) SetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
return rst return rst
} }
stmt, err = txu.Prepare("INSERT INTO uutinfo (usn,mac,ipaddr,relay,item,status,message,partno,mo,sku,line,stage,first_ack,last_ack,last_change) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,NOW(),?);") stmt, err = txu.Prepare("INSERT INTO uutinfo (usn,mac,ipaddr,relay,item,status,message,partno,sku,mo,line,stage,first_ack,last_ack,last_change) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,NOW(),?);")
if err != nil { if err != nil {
txu.Rollback() txu.Rollback()
logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, err.Error()) logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, err.Error())
@ -400,17 +421,17 @@ func (e *EWS) SetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
} }
_, err = stmt.Exec( _, err = stmt.Exec(
ui.USN, ui.USN,
ui.MAC, mac,
addr, addr,
host, host,
ui.Item, ui.Item,
ui.Status, ui.Status,
ui.Message, ui.Message,
ui.PartNO, pn,
ui.MfgMO, sku,
ui.MfgSKU, mo,
params["LINE"], line,
params["STAGE"], stage,
ui.FirstAck, ui.FirstAck,
ui.LastChg, ui.LastChg,
) )
@ -489,8 +510,8 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
t1.message, t1.message,
t1.partno, t1.partno,
IFNULL(t2.model, '') AS model, IFNULL(t2.model, '') AS model,
t1.mo,
t1.sku, t1.sku,
t1.mo,
t1.line, t1.line,
t1.stage, t1.stage,
t1.first_ack, t1.first_ack,
@ -519,8 +540,8 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
&ul.Message, &ul.Message,
&ul.PartNO, &ul.PartNO,
&ul.Model, &ul.Model,
&ul.MfgMO,
&ul.MfgSKU, &ul.MfgSKU,
&ul.MfgMO,
&ul.MfgLine, &ul.MfgLine,
&ul.MfgStage, &ul.MfgStage,
&ul.FirstAck, &ul.FirstAck,
@ -541,7 +562,11 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
<td style="color: red; font-weight: bold;">%s</td> <td style="color: red; font-weight: bold;">%s</td>
<td style="color: red; font-weight: bold;">%s</td> <td style="color: red; font-weight: bold;">%s</td>
<td style="color: red; font-weight: bold;">%s</td> <td style="color: red; font-weight: bold;">%s</td>
</tr>%s`, ul.USN, ul.MAC, ul.IPAddr, ul.Relay, ul.Item, ul.Status, ul.Message, ul.LastChg, "\r\n") <td style="color: red; font-weight: bold;">%s</td>
<td style="color: red; font-weight: bold;">%s</td>
<td style="color: red; font-weight: bold;">%s</td>
<td style="color: red; font-weight: bold;">%s</td>
</tr>%s`, ul.USN, ul.MfgSKU, ul.MfgMO, ul.MfgLine, ul.MfgStage, ul.MAC, ul.IPAddr, ul.Relay, ul.Item, ul.Status, ul.Message, ul.LastChg, "\r\n")
} else { } else {
last = last + fmt.Sprintf(`<tr> last = last + fmt.Sprintf(`<tr>
<td style="color: blue;">%s</td> <td style="color: blue;">%s</td>
@ -552,7 +577,11 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
<td style="color: blue;">%s</td> <td style="color: blue;">%s</td>
<td style="color: blue;">%s</td> <td style="color: blue;">%s</td>
<td style="color: blue;">%s</td> <td style="color: blue;">%s</td>
</tr>%s`, ul.USN, ul.MAC, ul.IPAddr, ul.Relay, ul.Item, ul.Status, ul.Message, ul.LastChg, "\r\n") <td style="color: blue;">%s</td>
<td style="color: blue;">%s</td>
<td style="color: blue;">%s</td>
<td style="color: blue;">%s</td>
</tr>%s`, ul.USN, ul.MfgSKU, ul.MfgMO, ul.MfgLine, ul.MfgStage, ul.MAC, ul.IPAddr, ul.Relay, ul.Item, ul.Status, ul.Message, ul.LastChg, "\r\n")
} }
if ul.Model != "" { if ul.Model != "" {
@ -561,12 +590,12 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
if ul.PartNO != "" { if ul.PartNO != "" {
partNO = ul.PartNO partNO = ul.PartNO
} }
if ul.MfgMO != "" {
mfgMO = ul.MfgMO
}
if ul.MfgSKU != "" { if ul.MfgSKU != "" {
mfgSKU = ul.MfgSKU mfgSKU = ul.MfgSKU
} }
if ul.MfgMO != "" {
mfgMO = ul.MfgMO
}
if ul.FirstAck != "" { if ul.FirstAck != "" {
fstAck = ul.FirstAck fstAck = ul.FirstAck
} }
@ -589,8 +618,8 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
t1.message, t1.message,
t1.partno, t1.partno,
IFNULL(t2.model, '') AS model, IFNULL(t2.model, '') AS model,
t1.mo,
t1.sku, t1.sku,
t1.mo,
t1.line, t1.line,
t1.stage, t1.stage,
t1.first_ack, t1.first_ack,
@ -619,8 +648,8 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
&uh.Message, &uh.Message,
&uh.PartNO, &uh.PartNO,
&uh.Model, &uh.Model,
&uh.MfgMO,
&uh.MfgSKU, &uh.MfgSKU,
&uh.MfgMO,
&uh.MfgLine, &uh.MfgLine,
&uh.MfgStage, &uh.MfgStage,
&uh.FirstAck, &uh.FirstAck,
@ -640,11 +669,15 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
<td style="color: red; font-weight: bold;">%s</td> <td style="color: red; font-weight: bold;">%s</td>
<td style="color: red; font-weight: bold;">%s</td> <td style="color: red; font-weight: bold;">%s</td>
<td style="color: red; font-weight: bold;">%s</td> <td style="color: red; font-weight: bold;">%s</td>
<td style="color: red; font-weight: bold;">%s</td>
<td style="color: red; font-weight: bold;">%s</td>
<td style="color: red; font-weight: bold;">%s</td>
<td style="color: red; font-weight: bold;">%s</td>
</tr>%s`, </tr>%s`,
uh.USN, uh.MAC, uh.IPAddr, uh.Relay, uh.Item, uh.Status, uh.Message, uh.LastChg, "\r\n") uh.USN, uh.MfgSKU, uh.MfgMO, uh.MfgLine, uh.MfgStage, uh.MAC, uh.IPAddr, uh.Relay, uh.Item, uh.Status, uh.Message, uh.LastChg, "\r\n")
} else { } else {
bkup = bkup + fmt.Sprintf(`<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>%s`, bkup = bkup + fmt.Sprintf(`<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>%s`,
uh.USN, uh.MAC, uh.IPAddr, uh.Relay, uh.Item, uh.Status, uh.Message, uh.LastChg, "\r\n") uh.USN, uh.MfgSKU, uh.MfgMO, uh.MfgLine, uh.MfgStage, uh.MAC, uh.IPAddr, uh.Relay, uh.Item, uh.Status, uh.Message, uh.LastChg, "\r\n")
} }
} }
@ -679,12 +712,12 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
if partNO == "" { if partNO == "" {
partNO = uh.PartNO partNO = uh.PartNO
} }
if mfgMO == "" {
mfgMO = uh.MfgMO
}
if mfgSKU == "" { if mfgSKU == "" {
mfgSKU = uh.MfgSKU mfgSKU = uh.MfgSKU
} }
if mfgMO == "" {
mfgMO = uh.MfgMO
}
if fstAck == "" { if fstAck == "" {
fstAck = uh.FirstAck fstAck = uh.FirstAck
} }
@ -731,7 +764,7 @@ func (e *EWS) GetIssueReport(cfg cnf.Cfg, logger *log.Logger, host string, addr
ri := new(ReportInfo) ri := new(ReportInfo)
defect := "" defect := ""
rows, err := dbo.Query(fmt.Sprintf( rows, err := dbo.Query(fmt.Sprintf(
`SELECT usn,partno,mo,sku,line,location,item,status,message,first_ack,last_ack,last_change,diffmins `SELECT usn,partno,sku,mo,line,location,item,status,message,first_ack,last_ack,last_change,diffmins
FROM %s FROM %s
ORDER BY diffmins ASC;`, cfg.MySQL.IssuesView)) ORDER BY diffmins ASC;`, cfg.MySQL.IssuesView))
if err != nil { if err != nil {
@ -747,8 +780,8 @@ func (e *EWS) GetIssueReport(cfg cnf.Cfg, logger *log.Logger, host string, addr
err := rows.Scan( err := rows.Scan(
&ri.USN, &ri.USN,
&ri.PartNO, &ri.PartNO,
&ri.MfgSKU,
&ri.MfgMO, &ri.MfgMO,
&ri.SKU,
&ri.Line, &ri.Line,
&ri.Location, &ri.Location,
&ri.Item, &ri.Item,
@ -763,7 +796,7 @@ func (e *EWS) GetIssueReport(cfg cnf.Cfg, logger *log.Logger, host string, addr
break break
} }
temp := fmt.Sprintf(`<tr><td>%d</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>%s`, temp := fmt.Sprintf(`<tr><td>%d</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>%s`,
num, ri.USN, ri.PartNO, ri.MfgMO, ri.SKU, ri.Line, ri.Location, ri.Item, ri.Status, ri.Message, ri.FirstAck, ri.LastAck, ri.LastChg, ri.DiffMins, "\r\n") num, ri.USN, ri.PartNO, ri.MfgSKU, ri.MfgMO, ri.Line, ri.Location, ri.Item, ri.Status, ri.Message, ri.FirstAck, ri.LastAck, ri.LastChg, ri.DiffMins, "\r\n")
defect = defect + temp defect = defect + temp
num += 1 num += 1
} }
@ -802,7 +835,7 @@ func (e *EWS) GetOfflineReport(cfg cnf.Cfg, logger *log.Logger, host string, add
ri := new(ReportInfo) ri := new(ReportInfo)
offline := "" offline := ""
rows, err := dbo.Query(fmt.Sprintf( rows, err := dbo.Query(fmt.Sprintf(
`SELECT usn,partno,mo,sku,line,location,item,status,message,first_ack,last_ack,last_change,diffmins `SELECT usn,partno,sku,mo,line,location,item,status,message,first_ack,last_ack,last_change,diffmins
FROM %s FROM %s
ORDER BY diffmins DESC;`, cfg.MySQL.OfflineView)) ORDER BY diffmins DESC;`, cfg.MySQL.OfflineView))
if err != nil { if err != nil {
@ -818,8 +851,8 @@ func (e *EWS) GetOfflineReport(cfg cnf.Cfg, logger *log.Logger, host string, add
err := rows.Scan( err := rows.Scan(
&ri.USN, &ri.USN,
&ri.PartNO, &ri.PartNO,
&ri.MfgSKU,
&ri.MfgMO, &ri.MfgMO,
&ri.SKU,
&ri.Line, &ri.Line,
&ri.Location, &ri.Location,
&ri.Item, &ri.Item,
@ -834,7 +867,7 @@ func (e *EWS) GetOfflineReport(cfg cnf.Cfg, logger *log.Logger, host string, add
break break
} }
temp := fmt.Sprintf(`<tr><td>%d</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>%s`, temp := fmt.Sprintf(`<tr><td>%d</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>%s`,
num, ri.USN, ri.PartNO, ri.MfgMO, ri.SKU, ri.Line, ri.Location, ri.Item, ri.Status, ri.Message, ri.FirstAck, ri.LastAck, ri.LastChg, ri.DiffMins, "\r\n") num, ri.USN, ri.PartNO, ri.MfgSKU, ri.MfgMO, ri.Line, ri.Location, ri.Item, ri.Status, ri.Message, ri.FirstAck, ri.LastAck, ri.LastChg, ri.DiffMins, "\r\n")
offline = offline + temp offline = offline + temp
num += 1 num += 1
} }
@ -932,6 +965,10 @@ func (e *EWS) TemplateUutInfo(loc, locTime, misc, last, bkup string) string {
<table> <table>
<tr> <tr>
<th>USN</th> <th>USN</th>
<th>SKU</th>
<th>MO</th>
<th>Line</th>
<th>Stage</th>
<th>MAC</th> <th>MAC</th>
<th>IP Address</th> <th>IP Address</th>
<th>Server</th> <th>Server</th>
@ -994,8 +1031,8 @@ func (e *EWS) TemplateDefectInfo(src string) string {
<th>NO.</th> <th>NO.</th>
<th>USN</th> <th>USN</th>
<th>PartNO.</th> <th>PartNO.</th>
<th>MO</th>
<th>SKU</th> <th>SKU</th>
<th>MO</th>
<th>Line</th> <th>Line</th>
<th>Location</th> <th>Location</th>
<th>Item</th> <th>Item</th>