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
PartNO string
Model string
MfgMO string
MfgSKU string
MfgMO string
MfgLine string
MfgStage string
FirstAck string
@ -34,8 +34,8 @@ type UutInfo struct {
type ReportInfo struct {
USN string
PartNO string
MfgSKU string
MfgMO string
SKU string
Line string
Location 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(
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 (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);`,
cfg.MySQL.IssuesTable),
)
@ -88,8 +88,8 @@ func (e *EWS) RecordIssue(cfg cnf.Cfg, logger *log.Logger, host string, addr str
addr,
host,
params["PARTNO"],
params["MO"],
params["SKU"],
params["MO"],
params["LINE"],
params["STAGE"],
params["ITEM"],
@ -173,7 +173,7 @@ func (e *EWS) SetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
//如果在uutinfo表中未查找到此USN的记录, 则新增一条此USN的记录
if err == sql.ErrNoRows {
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);`,
params["USN"],
params["MAC"],
@ -183,8 +183,8 @@ func (e *EWS) SetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
params["STATUS"],
params["MESSAGE"],
params["PARTNO"],
params["MO"],
params["SKU"],
params["MO"],
params["LINE"],
params["STAGE"],
"NOW()",
@ -210,6 +210,32 @@ func (e *EWS) SetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
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已变化, 则:
//1. 备份此USN对应记录行到uutinfobkup表
//2. 删除uutinfo表中对应USN的记录行
@ -250,7 +276,7 @@ func (e *EWS) SetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
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 {
tx.Rollback()
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(
ui.USN,
ui.MAC,
addr,
host,
ui.IPAddr,
ui.Relay,
ui.Item,
ui.Status,
ui.Message,
ui.PartNO,
ui.MfgMO,
ui.MfgSKU,
ui.MfgMO,
ui.MfgLine,
ui.MfgStage,
ui.FirstAck,
@ -302,12 +328,7 @@ func (e *EWS) SetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
return rst
}
mac := params["MAC"]
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());")
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 err != nil {
tx.Rollback()
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["STATUS"],
params["MESSAGE"],
params["PARTNO"],
params["MO"],
params["SKU"],
params["LINE"],
params["STAGE"],
pn,
sku,
mo,
line,
stage,
ui.FirstAck,
)
if err != nil {
@ -390,7 +411,7 @@ func (e *EWS) SetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
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 {
txu.Rollback()
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(
ui.USN,
ui.MAC,
mac,
addr,
host,
ui.Item,
ui.Status,
ui.Message,
ui.PartNO,
ui.MfgMO,
ui.MfgSKU,
params["LINE"],
params["STAGE"],
pn,
sku,
mo,
line,
stage,
ui.FirstAck,
ui.LastChg,
)
@ -489,8 +510,8 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
t1.message,
t1.partno,
IFNULL(t2.model, '') AS model,
t1.mo,
t1.sku,
t1.mo,
t1.line,
t1.stage,
t1.first_ack,
@ -519,8 +540,8 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
&ul.Message,
&ul.PartNO,
&ul.Model,
&ul.MfgMO,
&ul.MfgSKU,
&ul.MfgMO,
&ul.MfgLine,
&ul.MfgStage,
&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>
</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 {
last = last + fmt.Sprintf(`<tr>
<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>
</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 != "" {
@ -561,12 +590,12 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
if ul.PartNO != "" {
partNO = ul.PartNO
}
if ul.MfgMO != "" {
mfgMO = ul.MfgMO
}
if ul.MfgSKU != "" {
mfgSKU = ul.MfgSKU
}
if ul.MfgMO != "" {
mfgMO = ul.MfgMO
}
if 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.partno,
IFNULL(t2.model, '') AS model,
t1.mo,
t1.sku,
t1.mo,
t1.line,
t1.stage,
t1.first_ack,
@ -619,8 +648,8 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
&uh.Message,
&uh.PartNO,
&uh.Model,
&uh.MfgMO,
&uh.MfgSKU,
&uh.MfgMO,
&uh.MfgLine,
&uh.MfgStage,
&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>
</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 {
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`,
uh.USN, uh.MAC, uh.IPAddr, uh.Relay, uh.Item, uh.Status, uh.Message, uh.LastChg, "\r\n")
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.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 == "" {
partNO = uh.PartNO
}
if mfgMO == "" {
mfgMO = uh.MfgMO
}
if mfgSKU == "" {
mfgSKU = uh.MfgSKU
}
if mfgMO == "" {
mfgMO = uh.MfgMO
}
if fstAck == "" {
fstAck = uh.FirstAck
}
@ -731,7 +764,7 @@ func (e *EWS) GetIssueReport(cfg cnf.Cfg, logger *log.Logger, host string, addr
ri := new(ReportInfo)
defect := ""
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
ORDER BY diffmins ASC;`, cfg.MySQL.IssuesView))
if err != nil {
@ -747,8 +780,8 @@ func (e *EWS) GetIssueReport(cfg cnf.Cfg, logger *log.Logger, host string, addr
err := rows.Scan(
&ri.USN,
&ri.PartNO,
&ri.MfgSKU,
&ri.MfgMO,
&ri.SKU,
&ri.Line,
&ri.Location,
&ri.Item,
@ -763,7 +796,7 @@ func (e *EWS) GetIssueReport(cfg cnf.Cfg, logger *log.Logger, host string, addr
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`,
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
num += 1
}
@ -802,7 +835,7 @@ func (e *EWS) GetOfflineReport(cfg cnf.Cfg, logger *log.Logger, host string, add
ri := new(ReportInfo)
offline := ""
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
ORDER BY diffmins DESC;`, cfg.MySQL.OfflineView))
if err != nil {
@ -818,8 +851,8 @@ func (e *EWS) GetOfflineReport(cfg cnf.Cfg, logger *log.Logger, host string, add
err := rows.Scan(
&ri.USN,
&ri.PartNO,
&ri.MfgSKU,
&ri.MfgMO,
&ri.SKU,
&ri.Line,
&ri.Location,
&ri.Item,
@ -834,7 +867,7 @@ func (e *EWS) GetOfflineReport(cfg cnf.Cfg, logger *log.Logger, host string, add
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`,
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
num += 1
}
@ -932,6 +965,10 @@ func (e *EWS) TemplateUutInfo(loc, locTime, misc, last, bkup string) string {
<table>
<tr>
<th>USN</th>
<th>SKU</th>
<th>MO</th>
<th>Line</th>
<th>Stage</th>
<th>MAC</th>
<th>IP Address</th>
<th>Server</th>
@ -994,8 +1031,8 @@ func (e *EWS) TemplateDefectInfo(src string) string {
<th>NO.</th>
<th>USN</th>
<th>PartNO.</th>
<th>MO</th>
<th>SKU</th>
<th>MO</th>
<th>Line</th>
<th>Location</th>
<th>Item</th>