package report_reader import ( "errors" "github.com/xuri/excelize/v2" "gorm.io/gorm" "path" "strings" "testData/global" "testData/model" "testData/utils" ) func FTSMCReportReader(filePath string) { f, _ := excelize.OpenFile(filePath) sheetName := f.GetSheetName(1) //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++ { row[i] = strings.ReplaceAll(row[i], " ", "") row[i] = strings.ReplaceAll(row[i], "\n", "") 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 FTSuQianChangDianReportReader(filePath string) { if path.Ext(filePath) == ".xls" { utils.ToXlsx("xls", filePath) filePath += ".xlsx" } 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++ { row[i] = strings.ReplaceAll(row[i], " ", "") row[i] = strings.ReplaceAll(row[i], "\n", "") 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++ { row[i] = strings.ReplaceAll(row[i], " ", "") row[i] = strings.ReplaceAll(row[i], "\n", "") 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++ { row[i] = strings.ReplaceAll(row[i], " ", "") row[i] = strings.ReplaceAll(row[i], "\n", "") 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++ { row[i] = strings.ReplaceAll(row[i], " ", "") row[i] = strings.ReplaceAll(row[i], "\n", "") 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 { finalReportExcel.Product = strings.ReplaceAll(finalReportExcel.Product, " ", "") if _, ok := titleMap[finalReportExcel.Product]; !ok { info["product"] = "" } else if finalReportExcel.Product != "" { info["product"] = row[titleMap[finalReportExcel.Product]][:strings.Index(row[titleMap[finalReportExcel.Product]], "(")] } finalReportExcel.Lot = strings.ReplaceAll(finalReportExcel.Lot, " ", "") if _, ok := titleMap[finalReportExcel.Lot]; !ok { info["lot"] = "" } else if finalReportExcel.Lot != "" { if strings.Contains(row[titleMap[finalReportExcel.Lot]], "-") { row[titleMap[finalReportExcel.Lot]] = strings.Split(row[titleMap[finalReportExcel.Lot]], "-")[0] } info["lot"] = row[titleMap[finalReportExcel.Lot]] } finalReportExcel.TestProgram = strings.ReplaceAll(finalReportExcel.TestProgram, " ", "") if _, ok := titleMap[finalReportExcel.TestProgram]; !ok { info["test_program"] = "" } else if finalReportExcel.TestProgram != "" { info["test_program"] = row[titleMap[finalReportExcel.TestProgram]] } finalReportExcel.PBI = strings.ReplaceAll(finalReportExcel.PBI, " ", "") if _, ok := titleMap[finalReportExcel.PBI]; !ok { info["pbi"] = "" } else if finalReportExcel.PBI != "" { info["pbi"] = row[titleMap[finalReportExcel.PBI]] } finalReportExcel.SubBatch = strings.ReplaceAll(finalReportExcel.SubBatch, " ", "") if _, ok := titleMap[finalReportExcel.SubBatch]; !ok { info["sub_batch"] = "" } else if finalReportExcel.SubBatch != "" { info["sub_batch"] = row[titleMap[finalReportExcel.SubBatch]] } finalReportExcel.FinalTestQuantity = strings.ReplaceAll(finalReportExcel.FinalTestQuantity, " ", "") if _, ok := titleMap[finalReportExcel.FinalTestQuantity]; !ok { info["report_test_quantity"] = "" } else if finalReportExcel.FinalTestQuantity != "" { info["report_test_quantity"] = row[titleMap[finalReportExcel.FinalTestQuantity]] } finalReportExcel.FinalPassQuantity = strings.ReplaceAll(finalReportExcel.FinalPassQuantity, " ", "") if _, ok := titleMap[finalReportExcel.FinalPassQuantity]; !ok { info["report_pass_quantity"] = "" } else if finalReportExcel.FinalPassQuantity != "" { info["report_pass_quantity"] = row[titleMap[finalReportExcel.FinalPassQuantity]] } finalReportExcel.FinalPassProbability = strings.ReplaceAll(finalReportExcel.FinalPassProbability, " ", "") if _, ok := titleMap[finalReportExcel.FinalPassProbability]; !ok { info["report_pass_probability"] = "" } else if finalReportExcel.FinalPassProbability != "" { info["report_pass_probability"] = row[titleMap[finalReportExcel.FinalPassProbability]] } finalReportExcel.Bin1 = strings.ReplaceAll(finalReportExcel.Bin1, " ", "") if _, ok := titleMap[finalReportExcel.Bin1]; !ok { info["bin1"] = "" } else if finalReportExcel.Bin1 != "" { info["bin1"] = row[titleMap[finalReportExcel.Bin1]] } finalReportExcel.Bin2 = strings.ReplaceAll(finalReportExcel.Bin2, " ", "") if _, ok := titleMap[finalReportExcel.Bin2]; !ok { info["bin2"] = "" } else if finalReportExcel.Bin2 != "" { info["bin2"] = row[titleMap[finalReportExcel.Bin2]] } finalReportExcel.Bin3 = strings.ReplaceAll(finalReportExcel.Bin3, " ", "") if _, ok := titleMap[finalReportExcel.Bin3]; !ok { info["bin3"] = "" } else if finalReportExcel.Bin3 != "" { info["bin3"] = row[titleMap[finalReportExcel.Bin3]] } finalReportExcel.Bin4 = strings.ReplaceAll(finalReportExcel.Bin4, " ", "") if _, ok := titleMap[finalReportExcel.Bin4]; !ok { info["bin4"] = "" } else if finalReportExcel.Bin4 != "" { info["bin4"] = row[titleMap[finalReportExcel.Bin4]] } finalReportExcel.Bin5 = strings.ReplaceAll(finalReportExcel.Bin5, " ", "") if _, ok := titleMap[finalReportExcel.Bin5]; !ok { info["bin5"] = "" } else if finalReportExcel.Bin5 != "" { info["bin5"] = row[titleMap[finalReportExcel.Bin5]] } finalReportExcel.Bin6 = strings.ReplaceAll(finalReportExcel.Bin6, " ", "") if _, ok := titleMap[finalReportExcel.Bin6]; !ok { info["bin6"] = "" } else if finalReportExcel.Bin6 != "" { info["bin6"] = row[titleMap[finalReportExcel.Bin6]] } finalReportExcel.Bin7 = strings.ReplaceAll(finalReportExcel.Bin7, " ", "") if _, ok := titleMap[finalReportExcel.Bin7]; !ok { info["bin7"] = "" } else if finalReportExcel.Bin7 != "" { info["bin7"] = row[titleMap[finalReportExcel.Bin7]] } finalReportExcel.Bin8 = strings.ReplaceAll(finalReportExcel.Bin8, " ", "") if _, ok := titleMap[finalReportExcel.Bin8]; !ok { info["bin8"] = "" } else if finalReportExcel.Bin8 != "" { info["bin8"] = row[titleMap[finalReportExcel.Bin8]] } finalReportExcel.Bin9 = strings.ReplaceAll(finalReportExcel.Bin9, " ", "") if _, ok := titleMap[finalReportExcel.Bin9]; !ok { info["bin9"] = "" } else if finalReportExcel.Bin9 != "" { info["bin9"] = row[titleMap[finalReportExcel.Bin9]] } finalReportExcel.Bin10 = strings.ReplaceAll(finalReportExcel.Bin10, " ", "") if _, ok := titleMap[finalReportExcel.Bin10]; !ok { info["bin10"] = "" } else if finalReportExcel.Bin10 != "" { info["bin10"] = row[titleMap[finalReportExcel.Bin10]] } finalReportExcel.OutlookFail = strings.ReplaceAll(finalReportExcel.OutlookFail, " ", "") if _, ok := titleMap[finalReportExcel.OutlookFail]; !ok { info["outlook_fail"] = "" } else if finalReportExcel.OutlookFail != "" { info["outlook_fail"] = row[titleMap[finalReportExcel.OutlookFail]] } finalReportExcel.Other = strings.ReplaceAll(finalReportExcel.Other, " ", "") if _, ok := titleMap[finalReportExcel.Other]; !ok { info["other"] = "" } else if finalReportExcel.Other != "" { info["other"] = row[titleMap[finalReportExcel.Other]] } finalReportExcel.BentStitch = strings.ReplaceAll(finalReportExcel.BentStitch, " ", "") if _, ok := titleMap[finalReportExcel.BentStitch]; !ok { info["bent_stitch"] = "" } else if finalReportExcel.BentStitch != "" { info["bent_stitch"] = row[titleMap[finalReportExcel.BentStitch]] } finalReportExcel.Scrapped = strings.ReplaceAll(finalReportExcel.Scrapped, " ", "") if _, ok := titleMap[finalReportExcel.Scrapped]; !ok { info["scrapped"] = "" } else if finalReportExcel.Scrapped != "" { info["scrapped"] = row[titleMap[finalReportExcel.Scrapped]] } return info }