test_data/repository/report_reader/cp_reader.go
2024-08-30 16:27:39 +08:00

375 lines
13 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}