375 lines
13 KiB
Go
375 lines
13 KiB
Go
package report_reader
|
||
|
||
import (
|
||
"errors"
|
||
"github.com/xuri/excelize/v2"
|
||
"gorm.io/gorm"
|
||
"strings"
|
||
"testData/global"
|
||
"testData/model"
|
||
)
|
||
|
||
func CPSMCReportReader(filePath string) {
|
||
f, _ := excelize.OpenFile(filePath)
|
||
sheetName := f.GetSheetName(0)
|
||
rows, _ := f.GetRows(sheetName)
|
||
titleMap := make(map[string]int)
|
||
var pmc *model.PmcFile
|
||
global.Oracle.Where("pmc03 LIKE ?", "%赛美科%").Find(&pmc)
|
||
var finalReportExcel *model.FinalReportExcel
|
||
global.PostGreSQL.Where("factory = ? AND step = ?", pmc.Pmc03, "CP").Find(&finalReportExcel)
|
||
var product, lot, testProgram string
|
||
for rowIndex, row := range rows {
|
||
if rowIndex < 6 {
|
||
if rowIndex == 2 {
|
||
row[0] = strings.ReplaceAll(row[0], " ", "")
|
||
row[0] = strings.ReplaceAll(row[0], ":", ":")
|
||
productStart := strings.Index(row[0], "型号:")
|
||
productEnd := strings.Index(row[0], "出货型号:")
|
||
product = row[0][productStart:productEnd]
|
||
lotStart := strings.Index(row[0], "型号:")
|
||
lotEnd := strings.Index(row[0], "出货型号:")
|
||
lot = row[0][lotStart:lotEnd]
|
||
testProgramStart := strings.Index(row[0], "型号:")
|
||
testProgramEnd := strings.Index(row[0], "出货型号:")
|
||
testProgram = row[0][testProgramStart:testProgramEnd]
|
||
}
|
||
if rowIndex == 4 {
|
||
for i := 0; i < len(row); i++ {
|
||
titleMap[row[i]] = i
|
||
}
|
||
}
|
||
continue
|
||
} else {
|
||
if row[0] == "Total" {
|
||
break
|
||
}
|
||
var report *model.FinalReport
|
||
|
||
info := make(map[string]string)
|
||
info = CPEmptyInfoHandler(titleMap, finalReportExcel, info, row)
|
||
|
||
if errors.Is(global.PostGreSQL.Where("step = ? AND product = ? AND lot = ? AND wafer_id = ?",
|
||
"CP", product, lot,
|
||
row[titleMap[finalReportExcel.WaferID]]).First(&report).Error, gorm.ErrRecordNotFound) {
|
||
global.PostGreSQL.Create(&model.FinalReport{
|
||
Step: "FT",
|
||
Product: product,
|
||
Lot: lot,
|
||
Factory: testProgram,
|
||
TestProgram: info["test_program"],
|
||
PBI: info["pbi"],
|
||
WaferID: info["wafer_id"],
|
||
ReportTestQuantity: info["report_test_quantity"],
|
||
ReportPassQuantity: info["report_pass_quantity"],
|
||
ReportPassProbability: info["report_pass_probability"],
|
||
Bin2: info["bin2"],
|
||
Bin3: info["bin3"],
|
||
Bin4: info["bin4"],
|
||
Bin5: info["bin5"],
|
||
Bin6: info["bin6"],
|
||
Bin7: info["bin7"],
|
||
Bin8: info["bin8"],
|
||
Bin9: info["bin9"],
|
||
Bin10: info["bin10"],
|
||
OutlookFail: info["outlook_fail"],
|
||
Other: info["other"],
|
||
BentStitch: info["bent_stitch"],
|
||
Scrapped: info["scrapped"],
|
||
})
|
||
} else {
|
||
global.PostGreSQL.Model(&report).Updates(map[string]interface{}{
|
||
"pbi": info["pbi"],
|
||
"wafer_id": info["wafer_id"],
|
||
"report_test_quantity": info["report_test_quantity"],
|
||
"report_pass_quantity": info["report_pass_quantity"],
|
||
"report_pass_probability": info["report_pass_probability"],
|
||
"bin2": info["bin2"],
|
||
"bin3": info["bin3"],
|
||
"bin4": info["bin4"],
|
||
"bin5": info["bin5"],
|
||
"bin6": info["bin6"],
|
||
"bin7": info["bin7"],
|
||
"bin8": info["bin8"],
|
||
"bin9": info["bin9"],
|
||
"bin10": info["bin10"],
|
||
"outlook_fail": info["outlook_fail"],
|
||
"other": info["other"],
|
||
"bent_stitch": info["bent_stitch"],
|
||
"scrapped": info["scrapped"],
|
||
})
|
||
}
|
||
}
|
||
}
|
||
f.Close()
|
||
}
|
||
|
||
func CPYuanFangReportReader(filePath string) {
|
||
f, _ := excelize.OpenFile(filePath)
|
||
sheetName := f.GetSheetName(0)
|
||
rows, _ := f.GetRows(sheetName)
|
||
titleMap := make(map[string]int)
|
||
var pmc *model.PmcFile
|
||
global.Oracle.Where("pmc03 LIKE ?", "%圆方%").Find(&pmc)
|
||
var finalReportExcel *model.FinalReportExcel
|
||
global.PostGreSQL.Where("factory = ? AND step = ?", pmc.Pmc03, "CP").Find(&finalReportExcel)
|
||
var product, lot string
|
||
product, _ = f.GetCellValue(sheetName, "J2")
|
||
lot, _ = f.GetCellValue(sheetName, "C3")
|
||
for rowIndex, row := range rows {
|
||
if rowIndex < 6 {
|
||
if rowIndex == 3 {
|
||
for i := 0; i < len(row); i++ {
|
||
titleMap[row[i]] = i
|
||
}
|
||
}
|
||
continue
|
||
} else {
|
||
if strings.Contains(row[0], "Total") {
|
||
break
|
||
}
|
||
var report *model.FinalReport
|
||
|
||
info := make(map[string]string)
|
||
info = CPEmptyInfoHandler(titleMap, finalReportExcel, info, row)
|
||
|
||
if errors.Is(global.PostGreSQL.Where("step = ? AND product = ? AND lot = ? AND wafer_id = ?",
|
||
"CP", product, lot,
|
||
row[titleMap[finalReportExcel.WaferID]]).First(&report).Error, gorm.ErrRecordNotFound) {
|
||
global.PostGreSQL.Create(&model.FinalReport{
|
||
Step: "FT",
|
||
Product: product,
|
||
Lot: lot,
|
||
Factory: pmc.Pmc03,
|
||
TestProgram: info["test_program"],
|
||
PBI: info["pbi"],
|
||
WaferID: info["wafer_id"],
|
||
ReportTestQuantity: info["report_test_quantity"],
|
||
ReportPassQuantity: info["report_pass_quantity"],
|
||
ReportPassProbability: info["report_pass_probability"],
|
||
Bin2: info["bin2"],
|
||
Bin3: info["bin3"],
|
||
Bin4: info["bin4"],
|
||
Bin5: info["bin5"],
|
||
Bin6: info["bin6"],
|
||
Bin7: info["bin7"],
|
||
Bin8: info["bin8"],
|
||
Bin9: info["bin9"],
|
||
Bin10: info["bin10"],
|
||
OutlookFail: info["outlook_fail"],
|
||
Other: info["other"],
|
||
BentStitch: info["bent_stitch"],
|
||
Scrapped: info["scrapped"],
|
||
})
|
||
} else {
|
||
global.PostGreSQL.Model(&report).Updates(map[string]interface{}{
|
||
"pbi": info["pbi"],
|
||
"wafer_id": info["wafer_id"],
|
||
"report_test_quantity": info["report_test_quantity"],
|
||
"report_pass_quantity": info["report_pass_quantity"],
|
||
"report_pass_probability": info["report_pass_probability"],
|
||
"bin2": info["bin2"],
|
||
"bin3": info["bin3"],
|
||
"bin4": info["bin4"],
|
||
"bin5": info["bin5"],
|
||
"bin6": info["bin6"],
|
||
"bin7": info["bin7"],
|
||
"bin8": info["bin8"],
|
||
"bin9": info["bin9"],
|
||
"bin10": info["bin10"],
|
||
"outlook_fail": info["outlook_fail"],
|
||
"other": info["other"],
|
||
"bent_stitch": info["bent_stitch"],
|
||
"scrapped": info["scrapped"],
|
||
})
|
||
}
|
||
}
|
||
}
|
||
f.Close()
|
||
}
|
||
|
||
func CPYuChengReportReader(filePath string) {
|
||
f, _ := excelize.OpenFile(filePath)
|
||
sheetName := f.GetSheetName(0)
|
||
rows, _ := f.GetRows(sheetName)
|
||
titleMap := make(map[string]int)
|
||
var pmc *model.PmcFile
|
||
global.Oracle.Where("pmc03 LIKE ?", "%育成%").Find(&pmc)
|
||
var finalReportExcel *model.FinalReportExcel
|
||
global.PostGreSQL.Where("factory = ? AND step = ?", pmc.Pmc03, "CP").Find(&finalReportExcel)
|
||
var product, lot, testProgram string
|
||
product, _ = f.GetCellValue(sheetName, "A4")
|
||
lot, _ = f.GetCellValue(sheetName, "B4")
|
||
testProgram, _ = f.GetCellValue(sheetName, "D2")
|
||
for rowIndex, row := range rows {
|
||
if rowIndex < 6 {
|
||
if rowIndex == 3 {
|
||
for i := 0; i < len(row); i++ {
|
||
titleMap[row[i]] = i
|
||
}
|
||
}
|
||
continue
|
||
} else {
|
||
if row[0] == "" {
|
||
break
|
||
}
|
||
var report *model.FinalReport
|
||
|
||
info := make(map[string]string)
|
||
info = CPEmptyInfoHandler(titleMap, finalReportExcel, info, row)
|
||
|
||
if errors.Is(global.PostGreSQL.Where("step = ? AND product = ? AND lot = ? AND wafer_id = ?",
|
||
"CP", product, lot,
|
||
row[titleMap[finalReportExcel.WaferID]]).First(&report).Error, gorm.ErrRecordNotFound) {
|
||
global.PostGreSQL.Create(&model.FinalReport{
|
||
Step: "FT",
|
||
Product: product,
|
||
Lot: lot,
|
||
Factory: pmc.Pmc03,
|
||
TestProgram: testProgram,
|
||
PBI: info["pbi"],
|
||
WaferID: info["wafer_id"],
|
||
ReportTestQuantity: info["report_test_quantity"],
|
||
ReportPassQuantity: info["report_pass_quantity"],
|
||
ReportPassProbability: info["report_pass_probability"],
|
||
Bin2: info["bin2"],
|
||
Bin3: info["bin3"],
|
||
Bin4: info["bin4"],
|
||
Bin5: info["bin5"],
|
||
Bin6: info["bin6"],
|
||
Bin7: info["bin7"],
|
||
Bin8: info["bin8"],
|
||
Bin9: info["bin9"],
|
||
Bin10: info["bin10"],
|
||
OutlookFail: info["outlook_fail"],
|
||
Other: info["other"],
|
||
BentStitch: info["bent_stitch"],
|
||
Scrapped: info["scrapped"],
|
||
})
|
||
} else {
|
||
global.PostGreSQL.Model(&report).Updates(map[string]interface{}{
|
||
"pbi": info["pbi"],
|
||
"wafer_id": info["wafer_id"],
|
||
"report_test_quantity": info["report_test_quantity"],
|
||
"report_pass_quantity": info["report_pass_quantity"],
|
||
"report_pass_probability": info["report_pass_probability"],
|
||
"bin2": info["bin2"],
|
||
"bin3": info["bin3"],
|
||
"bin4": info["bin4"],
|
||
"bin5": info["bin5"],
|
||
"bin6": info["bin6"],
|
||
"bin7": info["bin7"],
|
||
"bin8": info["bin8"],
|
||
"bin9": info["bin9"],
|
||
"bin10": info["bin10"],
|
||
"outlook_fail": info["outlook_fail"],
|
||
"other": info["other"],
|
||
"bent_stitch": info["bent_stitch"],
|
||
"scrapped": info["scrapped"],
|
||
})
|
||
}
|
||
}
|
||
}
|
||
f.Close()
|
||
}
|
||
|
||
func CPEmptyInfoHandler(titleMap map[string]int, finalReportExcel *model.FinalReportExcel,
|
||
info map[string]string, row []string) map[string]string {
|
||
if _, ok := titleMap[finalReportExcel.PBI]; !ok {
|
||
info["pbi"] = ""
|
||
} else {
|
||
info["pbi"] = row[titleMap[finalReportExcel.PBI]]
|
||
}
|
||
if _, ok := titleMap[finalReportExcel.WaferID]; !ok {
|
||
info["wafer_id"] = ""
|
||
} else {
|
||
info["wafer_id"] = row[titleMap[finalReportExcel.WaferID]]
|
||
}
|
||
if _, ok := titleMap[finalReportExcel.FinalTestQuantity]; !ok {
|
||
info["report_test_quantity"] = ""
|
||
} else {
|
||
info["report_test_quantity"] = row[titleMap[finalReportExcel.FinalTestQuantity]]
|
||
}
|
||
if _, ok := titleMap[finalReportExcel.FinalPassQuantity]; !ok {
|
||
info["report_pass_quantity"] = ""
|
||
} else {
|
||
info["report_pass_quantity"] = row[titleMap[finalReportExcel.FinalPassQuantity]]
|
||
}
|
||
if _, ok := titleMap[finalReportExcel.FinalTestQuantity]; !ok {
|
||
info["report_test_quantity"] = ""
|
||
} else {
|
||
info["report_test_quantity"] = row[titleMap[finalReportExcel.FinalTestQuantity]]
|
||
}
|
||
if _, ok := titleMap[finalReportExcel.FinalPassProbability]; !ok {
|
||
info["report_pass_probability"] = ""
|
||
} else {
|
||
info["report_pass_probability"] = row[titleMap[finalReportExcel.FinalPassProbability]]
|
||
}
|
||
if _, ok := titleMap[finalReportExcel.Bin2]; !ok {
|
||
info["bin2"] = ""
|
||
} else {
|
||
info["bin2"] = row[titleMap[finalReportExcel.Bin2]]
|
||
}
|
||
if _, ok := titleMap[finalReportExcel.Bin3]; !ok {
|
||
info["bin3"] = ""
|
||
} else {
|
||
info["bin3"] = row[titleMap[finalReportExcel.Bin3]]
|
||
}
|
||
if _, ok := titleMap[finalReportExcel.Bin4]; !ok {
|
||
info["bin4"] = ""
|
||
} else {
|
||
info["bin4"] = row[titleMap[finalReportExcel.Bin4]]
|
||
}
|
||
if _, ok := titleMap[finalReportExcel.Bin5]; !ok {
|
||
info["bin5"] = ""
|
||
} else {
|
||
info["bin5"] = row[titleMap[finalReportExcel.Bin5]]
|
||
}
|
||
if _, ok := titleMap[finalReportExcel.Bin6]; !ok {
|
||
info["bin6"] = ""
|
||
} else {
|
||
info["bin6"] = row[titleMap[finalReportExcel.Bin6]]
|
||
}
|
||
if _, ok := titleMap[finalReportExcel.Bin7]; !ok {
|
||
info["bin7"] = ""
|
||
} else {
|
||
info["bin7"] = row[titleMap[finalReportExcel.Bin7]]
|
||
}
|
||
if _, ok := titleMap[finalReportExcel.Bin8]; !ok {
|
||
info["bin8"] = ""
|
||
} else {
|
||
info["bin8"] = row[titleMap[finalReportExcel.Bin8]]
|
||
}
|
||
if _, ok := titleMap[finalReportExcel.Bin9]; !ok {
|
||
info["bin9"] = ""
|
||
} else {
|
||
info["bin9"] = row[titleMap[finalReportExcel.Bin9]]
|
||
}
|
||
if _, ok := titleMap[finalReportExcel.Bin10]; !ok {
|
||
info["bin10"] = ""
|
||
} else {
|
||
info["bin10"] = row[titleMap[finalReportExcel.Bin10]]
|
||
}
|
||
if _, ok := titleMap[finalReportExcel.OutlookFail]; !ok {
|
||
info["outlook_fail"] = ""
|
||
} else {
|
||
info["outlook_fail"] = row[titleMap[finalReportExcel.OutlookFail]]
|
||
}
|
||
if _, ok := titleMap[finalReportExcel.Other]; !ok {
|
||
info["other"] = ""
|
||
} else {
|
||
info["other"] = row[titleMap[finalReportExcel.Other]]
|
||
}
|
||
if _, ok := titleMap[finalReportExcel.BentStitch]; !ok {
|
||
info["bent_stitch"] = ""
|
||
} else {
|
||
info["bent_stitch"] = row[titleMap[finalReportExcel.BentStitch]]
|
||
}
|
||
if _, ok := titleMap[finalReportExcel.Scrapped]; !ok {
|
||
info["scrapped"] = ""
|
||
} else {
|
||
info["scrapped"] = row[titleMap[finalReportExcel.Scrapped]]
|
||
}
|
||
return info
|
||
}
|