package report_reader import ( "errors" "github.com/xuri/excelize/v2" "gorm.io/gorm" "testData/global" "testData/model" ) func FTSMCReportReader(filePath string) { f, _ := excelize.OpenFile(filePath) //sheetName := f.GetSheetName(0) sheetName := "FT0801 test Yield(2024.03)" 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, "FT").Find(&finalReportExcel) for rowIndex, row := range rows { if rowIndex == 0 { continue } else if rowIndex == 1 { for i := 0; i < len(row); i++ { titleMap[row[i]] = i } } else { var report *model.FinalReport info := make(map[string]string) FTEmptyInfoHandler(titleMap, finalReportExcel, info, row) if errors.Is(global.PostGreSQL.Where("step = ? AND product = ? AND lot = ? AND sub_batch = ?", "FT", row[titleMap[finalReportExcel.Product]], row[titleMap[finalReportExcel.Lot]], row[titleMap[finalReportExcel.SubBatch]]).First(&report).Error, gorm.ErrRecordNotFound) { global.PostGreSQL.Create(&model.FinalReport{ Step: "FT", Product: info["product"], Lot: info["lot"], Factory: pmc.Pmc03, TestProgram: info["test_program"], PBI: info["pbi"], SubBatch: info["sub_batch"], 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"], "sub_batch": info["sub_batch"], "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"], }) } } } } func FTSuYinChangDianReportReader(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, "FT").Find(&finalReportExcel) for rowIndex, row := range rows { if rowIndex == 0 { for i := 0; i < len(row); i++ { titleMap[row[i]] = i } } else { var report *model.Report info := make(map[string]string) FTEmptyInfoHandler(titleMap, finalReportExcel, info, row) if errors.Is(global.PostGreSQL.Where("step = ? AND product = ? AND lot = ? AND sub_batch = ?", "FT", row[titleMap[finalReportExcel.Product]], row[titleMap[finalReportExcel.Lot]], row[titleMap[finalReportExcel.SubBatch]]).First(&report).Error, gorm.ErrRecordNotFound) { global.PostGreSQL.Create(&model.FinalReport{ Step: "FT", Product: info["product"], Lot: info["lot"], Factory: pmc.Pmc03, TestProgram: info["test_program"], PBI: info["pbi"], SubBatch: info["sub_batch"], 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"], "sub_batch": info["sub_batch"], "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 FTQiPaiReportReader(filePath string) { f, _ := excelize.OpenFile(filePath) sheetName := f.GetSheetName(0) rows, _ := f.GetRows(sheetName) titleMap := make(map[string]int) var finalReportExcel *model.FinalReportExcel var pmc *model.PmcFile global.Oracle.Where("pmc03 LIKE ?", "%气派%").Find(&pmc) global.PostGreSQL.Where("factory = ? AND step = ?", pmc.Pmc03, "FT").Find(&finalReportExcel) for rowIndex, row := range rows { if rowIndex == 0 { for i := 0; i < len(row); i++ { titleMap[row[i]] = i } } else { var report *model.FinalReport info := make(map[string]string) FTEmptyInfoHandler(titleMap, finalReportExcel, info, row) if errors.Is(global.PostGreSQL.Where("step = ? AND product = ? AND lot = ? AND sub_batch = ?", "FT", row[titleMap[finalReportExcel.Product]], row[titleMap[finalReportExcel.Lot]], row[titleMap[finalReportExcel.SubBatch]]).First(&report).Error, gorm.ErrRecordNotFound) { global.PostGreSQL.Create(&model.FinalReport{ Step: "FT", Product: row[titleMap[finalReportExcel.Product]], Lot: row[titleMap[finalReportExcel.Lot]], Factory: pmc.Pmc03, TestProgram: row[titleMap[finalReportExcel.TestProgram]], PBI: row[titleMap[finalReportExcel.PBI]], SubBatch: row[titleMap[finalReportExcel.SubBatch]], ReportTestQuantity: row[titleMap[finalReportExcel.FinalTestQuantity]], ReportPassQuantity: row[titleMap[finalReportExcel.FinalPassQuantity]], ReportPassProbability: row[titleMap[finalReportExcel.FinalPassProbability]], Bin2: row[titleMap[finalReportExcel.Bin2]], Bin3: row[titleMap[finalReportExcel.Bin3]], Bin4: row[titleMap[finalReportExcel.Bin4]], Bin5: row[titleMap[finalReportExcel.Bin5]], Bin6: row[titleMap[finalReportExcel.Bin6]], Bin7: row[titleMap[finalReportExcel.Bin7]], Bin8: row[titleMap[finalReportExcel.Bin8]], Bin9: row[titleMap[finalReportExcel.Bin9]], Bin10: row[titleMap[finalReportExcel.Bin10]], OutlookFail: row[titleMap[finalReportExcel.OutlookFail]], Other: row[titleMap[finalReportExcel.Other]], BentStitch: row[titleMap[finalReportExcel.BentStitch]], Scrapped: row[titleMap[finalReportExcel.Scrapped]], }) } else { global.PostGreSQL.Model(&report).Updates(map[string]interface{}{ "pbi": row[titleMap[finalReportExcel.PBI]], "sub_batch": row[titleMap[finalReportExcel.SubBatch]], "report_test_quantity": row[titleMap[finalReportExcel.FinalTestQuantity]], "report_pass_quantity": row[titleMap[finalReportExcel.FinalPassQuantity]], "report_pass_probability": row[titleMap[finalReportExcel.FinalPassProbability]], "bin2": row[titleMap[finalReportExcel.Bin2]], "bin3": row[titleMap[finalReportExcel.Bin3]], "bin4": row[titleMap[finalReportExcel.Bin4]], "bin5": row[titleMap[finalReportExcel.Bin5]], "bin6": row[titleMap[finalReportExcel.Bin6]], "bin7": row[titleMap[finalReportExcel.Bin7]], "bin8": row[titleMap[finalReportExcel.Bin8]], "bin9": row[titleMap[finalReportExcel.Bin9]], "bin10": row[titleMap[finalReportExcel.Bin10]], "outlook_fail": row[titleMap[finalReportExcel.OutlookFail]], "other": row[titleMap[finalReportExcel.Other]], "bent_stitch": row[titleMap[finalReportExcel.BentStitch]], "scrapped": row[titleMap[finalReportExcel.Scrapped]], }) } } } f.Close() } func FTRuiSiReportReader(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, "FT").Find(&finalReportExcel) for rowIndex, row := range rows { if rowIndex == 0 { for i := 0; i < len(row); i++ { titleMap[row[i]] = i } } else { if row[0] == "" { break } var report *model.FinalReport info := make(map[string]string) FTEmptyInfoHandler(titleMap, finalReportExcel, info, row) if errors.Is(global.PostGreSQL.Where("step = ? AND product = ? AND lot = ? AND sub_batch = ?", "FT", row[titleMap[finalReportExcel.Product]], row[titleMap[finalReportExcel.Lot]], row[titleMap[finalReportExcel.SubBatch]]).First(&report).Error, gorm.ErrRecordNotFound) { global.PostGreSQL.Create(&model.FinalReport{ Step: "FT", Product: info["product"], Lot: info["lot"], Factory: pmc.Pmc03, TestProgram: info["test_program"], PBI: info["pbi"], SubBatch: info["sub_batch"], 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"], "sub_batch": info["sub_batch"], "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 FTXinDeReportReader(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, "FT").Find(&finalReportExcel) for rowIndex, row := range rows { if rowIndex == 0 { for i := 0; i < len(row); i++ { titleMap[row[i]] = i } } else { var report *model.FinalReport info := make(map[string]string) FTEmptyInfoHandler(titleMap, finalReportExcel, info, row) if errors.Is(global.PostGreSQL.Where("step = ? AND product = ? AND lot = ? AND sub_batch = ?", "FT", row[titleMap[finalReportExcel.Product]], row[titleMap[finalReportExcel.Lot]], row[titleMap[finalReportExcel.SubBatch]]).First(&report).Error, gorm.ErrRecordNotFound) { global.PostGreSQL.Create(&model.FinalReport{ Step: "FT", Product: info["product"], Lot: info["lot"], Factory: pmc.Pmc03, TestProgram: info["test_program"], PBI: info["pbi"], SubBatch: info["sub_batch"], 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"], "sub_batch": info["sub_batch"], "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 FTEmptyInfoHandler(titleMap map[string]int, finalReportExcel *model.FinalReportExcel, info map[string]string, row []string) map[string]string { if _, ok := titleMap[finalReportExcel.Product]; !ok { info["product"] = "" } else { info["product"] = row[titleMap[finalReportExcel.Product]] } if _, ok := titleMap[finalReportExcel.Lot]; !ok { info["lot"] = "" } else { info["lot"] = row[titleMap[finalReportExcel.Lot]] } if _, ok := titleMap[finalReportExcel.TestProgram]; !ok { info["test_program"] = "" } else { info["test_program"] = row[titleMap[finalReportExcel.TestProgram]] } if _, ok := titleMap[finalReportExcel.PBI]; !ok { info["pbi"] = "" } else { info["pbi"] = row[titleMap[finalReportExcel.PBI]] } if _, ok := titleMap[finalReportExcel.SubBatch]; !ok { info["sub_batch"] = "" } else { info["sub_batch"] = row[titleMap[finalReportExcel.SubBatch]] } 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 }