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 }