test_data/repository/test.data/report.list.cron.go
2024-09-25 11:36:03 +08:00

1275 lines
45 KiB
Go

package test_data
import (
"errors"
"gitee.com/golang-module/carbon/v2"
"github.com/shopspring/decimal"
"gorm.io/gorm"
"strings"
"testData/global"
"testData/model"
)
func CronWaferList() {
//var waferLists []*model.WaferList
var pbis []string
global.PostGreSQL.Model(&model.WaferList{}).Where("status != ?", "结案").Select("pbi").Order("pbi").Find(&pbis) //.Find(&waferLists)
//for i := 0; i < 10; i++ {
// var a []string
// if i != 9 {
// a = pbis[i*100 : (i+1)*100]
// } else {
// a = pbis[i*100:]
// }
var oldPmms []*model.PmmFile
global.Oracle.Where("pmm01 IN ? AND pmm02 = ?", pbis, "WB0").
Preload("PmnFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("ImaFile")
}).Preload("PmcFile").Preload("RvbFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("ImaFile").Preload("IddFile").Order("rvb12 desc")
}).Order("pmm01 desc").Find(&oldPmms)
for _, pmm := range oldPmms {
var status string
if pmm.Pmm25 == "6" {
status = "结案"
} else {
status = "未结案"
}
for _, pmn := range pmm.PmnFile {
var returnQuantity, dieQuantity float64
for _, rvb := range pmm.RvbFile {
if rvb.Rvb03 == pmn.Pmn02 {
returnQuantity += rvb.Rvb82
dieQuantity += rvb.Rvb85
}
}
var waferList *model.WaferList
global.PostGreSQL.Where("pbi = ? AND product = ? AND wafer_size = ?",
pmm.Pmm01, pmn.ImaFile.Ima02, pmn.ImaFile.Ima021).Preload("WaferStock").Find(&waferList)
global.PostGreSQL.Model(&waferList).Updates(map[string]interface{}{
"status": status,
"online_quantity": pmn.Pmn20 - returnQuantity,
"return_quantity": returnQuantity,
"die_quantity": dieQuantity,
})
var waferStocks []*model.WaferStock
rvbMap := make(map[string][]interface{})
for _, rvb := range pmm.RvbFile {
name := rvb.Rvb38 + "~" + rvb.Rvb12.Format("2006-01-02")
if rvb.Rvb03 == pmn.Pmn02 {
if _, ok := rvbMap[name]; !ok {
var waferID string
for _, idd := range rvb.IddFile {
if rvb.Rvb38 == idd.Idd04 {
if !strings.Contains(waferID, "#"+idd.Idd05) {
waferID += "#" + idd.Idd05
}
}
}
rvbMap[name] = []interface{}{rvb.Rvb82, rvb.Rvb85, waferID, rvb.ImaFile.Ima02, rvb.ImaFile.Ima021}
} else {
waferID := rvbMap[name][2].(string)
for _, idd := range rvb.IddFile {
if rvb.Rvb38 == idd.Idd04 {
if !strings.Contains(waferID, "#"+idd.Idd05) {
waferID += "#" + idd.Idd05
}
}
}
rvbMap[name][0] = rvbMap[name][0].(float64) + rvb.Rvb82
rvbMap[name][1] = rvbMap[name][1].(float64) + rvb.Rvb85
}
}
}
for k, v := range rvbMap {
lot := strings.Split(k, "~")[0]
returnDate := strings.Split(k, "~")[1]
var isExist bool
for _, waferStock := range waferList.WaferStock {
if waferStock.Lot == lot && waferStock.WaferID == v[2].(string) && waferStock.ReturnDate == returnDate {
isExist = true
break
}
}
if !isExist {
waferStocks = append(waferStocks, &model.WaferStock{
WaferListID: waferList.ID,
PBI: waferList.PBI,
Product: v[3].(string),
Specification: v[4].(string),
ReturnDate: returnDate,
Lot: lot,
WaferID: v[2].(string),
ReturnQuantity: v[0].(float64),
DieQuantity: v[1].(float64),
})
}
}
global.PostGreSQL.Create(&waferStocks)
}
}
//}
var newPmms []*model.PmmFile
global.Oracle.Where("pmm02 = ? AND pmm25 != ?", "WB0", "6").Order("pmm01").
Preload("PmnFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("ImaFile")
}).Preload("PmcFile").Preload("RvbFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("ImaFile").Preload("IddFile").Order("rvb12 desc")
}).Find(&newPmms)
for _, pmm := range newPmms {
var status string
if pmm.Pmm25 == "6" {
status = "结案"
} else {
status = "未结案"
}
for _, pmn := range pmm.PmnFile {
var returnQuantity, dieQuantity float64
for _, rvb := range pmm.RvbFile {
if rvb.Rvb03 == pmn.Pmn02 {
returnQuantity += rvb.Rvb82
dieQuantity += rvb.Rvb85
}
}
var waferList *model.WaferList
if errors.Is(global.PostGreSQL.Where("pbi = ? AND product = ? AND wafer_size = ?",
pmm.Pmm01, pmn.ImaFile.Ima02, pmn.ImaFile.Ima021).First(&waferList).Error, gorm.ErrRecordNotFound) {
global.PostGreSQL.Create(&model.WaferList{
Status: status,
OrderDate: pmm.Pmm04.Format("2006-01-02"),
PBI: pmm.Pmm01,
Product: pmn.ImaFile.Ima02,
Factory: pmm.PmcFile.Pmc03,
WaferSize: pmn.ImaFile.Ima021,
Quantity: pmn.Pmn20,
OnlineQuantity: pmn.Pmn20 - returnQuantity,
ReturnQuantity: returnQuantity,
DieQuantity: dieQuantity,
})
} else {
global.PostGreSQL.Model(&waferList).Updates(map[string]interface{}{
"status": status,
"online_quantity": pmn.Pmn20 - returnQuantity,
"return_quantity": returnQuantity,
"die_quantity": dieQuantity,
})
}
global.PostGreSQL.Where("pbi = ? AND product = ? AND wafer_size = ?",
pmm.Pmm01, pmn.ImaFile.Ima02, pmn.ImaFile.Ima021).Preload("WaferStock").Find(&waferList)
var waferStocks []*model.WaferStock
rvbMap := make(map[string][]interface{})
for _, rvb := range pmm.RvbFile {
name := rvb.Rvb38 + "~" + rvb.Rvb12.Format("2006-01-02")
if rvb.Rvb03 == pmn.Pmn02 {
if _, ok := rvbMap[name]; !ok {
var waferID string
for _, idd := range rvb.IddFile {
if rvb.Rvb38 == idd.Idd04 {
if !strings.Contains(waferID, "#"+idd.Idd05) {
waferID += "#" + idd.Idd05
}
}
}
rvbMap[name] = []interface{}{rvb.Rvb82, rvb.Rvb85, waferID, rvb.ImaFile.Ima02, rvb.ImaFile.Ima021}
} else {
waferID := rvbMap[name][2].(string)
for _, idd := range rvb.IddFile {
if rvb.Rvb38 == idd.Idd04 {
if !strings.Contains(waferID, "#"+idd.Idd05) {
waferID += "#" + idd.Idd05
}
}
}
rvbMap[name][0] = rvbMap[name][0].(float64) + rvb.Rvb82
rvbMap[name][1] = rvbMap[name][1].(float64) + rvb.Rvb85
}
}
}
for k, v := range rvbMap {
lot := strings.Split(k, "~")[0]
returnDate := strings.Split(k, "~")[1]
var isExist bool
for _, waferStock := range waferList.WaferStock {
if waferStock.Lot == lot && waferStock.WaferID == v[2].(string) && waferStock.ReturnDate == returnDate {
isExist = true
break
}
}
if !isExist {
waferStocks = append(waferStocks, &model.WaferStock{
WaferListID: waferList.ID,
PBI: waferList.PBI,
Product: v[3].(string),
Specification: v[4].(string),
ReturnDate: returnDate,
Lot: lot,
WaferID: v[2].(string),
ReturnQuantity: v[0].(float64),
DieQuantity: v[1].(float64),
})
}
}
global.PostGreSQL.Create(&waferStocks)
}
}
}
func CronABList() {
var oldTcSfcFile []*model.TcSfcFile
var abListIDs []string
global.PostGreSQL.Model(&model.ABList{}).Where("status = ?", "未结案").
Select("pbi").Group("pbi").Find(&abListIDs)
_ = global.Oracle.Transaction(func(tx *gorm.DB) error {
page := len(abListIDs)/200 + 1
for i := 0; i < page; i++ {
var pageTcSfcFile []*model.TcSfcFile
var s []string
if i == page-1 {
s = abListIDs[i*200:]
} else {
s = abListIDs[i*200 : (i+1)*200]
}
tx.Where("tc_sfc01 IN ? AND tc_sfc08 LIKE ?", s, "%AB%").
Preload("TcSfdFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("SfbFile").Preload("ImaFile").Preload("RvbFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("IddFile").Preload("RvaFile")
})
}).Preload("TcSfeFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("ImaFile")
}).
Preload("PmcFile").Find(&pageTcSfcFile)
oldTcSfcFile = append(oldTcSfcFile, pageTcSfcFile...)
}
return nil
})
for _, tcSfc := range oldTcSfcFile {
for _, tcSfd := range tcSfc.TcSfdFile {
status := "未结案"
if tcSfd.SfbFile.Sfb04 == "8" {
status = "结案"
} else if tcSfd.SfbFile.Sfb04 == "0" {
continue
}
var quantity float64 //, stockOutQuantity
for _, tcSfe := range tcSfc.TcSfeFile {
if tcSfe.TcSfe01 == tcSfc.TcSfc01 && tcSfe.TcSfe02 == tcSfd.TcSfd02 {
quantity += tcSfe.TcSfe12
//stockOutQuantity += tcSfe.TcSfe14
}
}
var returnQuantity, failQuantity, passQuantity float64
orderDateStockMap := make(map[string][]float64)
for _, rvb := range tcSfd.RvbFile {
if _, ok := orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")]; !ok {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")] = []float64{0, 0}
}
for _, idd := range rvb.IddFile {
if idd.Idd11 == rvb.Rvb02 {
returnQuantity += idd.Idd13
if idd.Idd06 == "BIN99" {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][1] += idd.Idd13
failQuantity += idd.Idd13
} else {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][0] += idd.Idd13
passQuantity += idd.Idd13
}
}
}
}
quantity, _ = decimal.NewFromFloat(quantity).Round(6).Float64()
var passProbability string
if strings.Contains(tcSfc.TcSfc01, "M596") {
var reports []*model.Report
global.PostGreSQL.Where("pbi = ? AND product = ? AND lot = ?", tcSfc.TcSfc01, tcSfd.ImaFile.Ima02,
tcSfd.TcSfd06).Find(&reports)
for _, report := range reports {
testQuantityDecimal, _ := decimal.NewFromString(report.TestQuantity)
testQuantityFloat, _ := testQuantityDecimal.Float64()
passQuantity += testQuantityFloat
}
}
//if stockOutQuantity != 0 {
// passProbability = decimal.NewFromFloat(passQuantity).Div(decimal.NewFromFloat(stockOutQuantity)).
// Round(4).Mul(decimal.NewFromFloat(100)).String()
//}
passProbability = decimal.NewFromFloat(passQuantity).Div(decimal.NewFromFloat(tcSfd.TcSfd05)).
Round(4).Mul(decimal.NewFromFloat(100)).String()
global.PostGreSQL.Transaction(func(tx *gorm.DB) error {
var abList *model.ABList
global.PostGreSQL.Where("pbi = ? AND outsourcing_pbi = ?",
tcSfc.TcSfc01, tcSfd.TcSfd13).Find(&abList)
global.PostGreSQL.Model(&abList).Where("pbi = ? AND outsourcing_pbi = ?",
tcSfc.TcSfc01, tcSfd.TcSfd13).Updates(map[string]interface{}{
"status": status,
"quantity": quantity,
//"stock_out_quantity": stockOutQuantity,
"stock_out_quantity": tcSfd.TcSfd05,
"stock_in_quantity": returnQuantity,
"pass_quantity": passQuantity,
"fail_quantity": failQuantity,
"online_quantity": tcSfd.TcSfd05 - returnQuantity,
"pass_probability": passProbability + "%",
})
for k, v := range orderDateStockMap {
var abListStock *model.ABListStock
if errors.Is(global.PostGreSQL.Where("ab_list_id = ? AND return_date = ?", abList.ID, k).
First(&abListStock).Error, gorm.ErrRecordNotFound) {
global.PostGreSQL.Create(&model.ABListStock{
ABListID: abList.ID,
ReturnDate: k,
PassQuantity: v[0],
FailQuantity: v[1],
})
} else {
global.PostGreSQL.Model(&abListStock).Where("ab_list_id = ? AND return_date = ?", abList.ID, k).
Updates(map[string]interface{}{
"pass_quantity": v[0],
"fail_quantity": v[1],
})
}
}
return nil
})
}
}
var newTcSfcFile []*model.TcSfcFile
global.PostGreSQL.Model(&model.ABList{}).Where("order_date BETWEEN ? AND ?",
carbon.Now().SubMonths(2).Format("Y-m-d"), carbon.Now().Format("Y-m-d")).
Select("pbi").Group("pbi").Find(&abListIDs)
_ = global.Oracle.Transaction(func(tx *gorm.DB) error {
var tcSfcFilePBIs []string
if len(abListIDs) == 0 {
tx.Model(&model.TcSfcFile{}).Where("tc_sfc08 LIKE ? AND tc_sfc10 = ? AND "+
"tc_sfc02 BETWEEN TO_DATE(?,'yyyy-mm-dd') AND TO_DATE(?,'yyyy-mm-dd')", "%AB%",
carbon.Now().SubMonths(2).Format("Y-m-d"), carbon.Now().Format("Y-m-d")).
Order("tc_sfc01").Select("tc_sfc01").Find(&tcSfcFilePBIs)
} else {
tx.Model(&model.TcSfcFile{}).Where("tc_sfc01 NOT IN ? AND tc_sfc08 LIKE ? AND tc_sfc10 = ? AND "+
"tc_sfc02 BETWEEN TO_DATE(?,'yyyy-mm-dd') AND TO_DATE(?,'yyyy-mm-dd')", abListIDs, "%AB%",
carbon.Now().SubMonths(2).Format("Y-m-d"), carbon.Now().Format("Y-m-d")).
Order("tc_sfc01").Select("tc_sfc01").Find(&tcSfcFilePBIs)
}
//tx.Model(&model.TcSfcFile{}).Where("tc_sfc08 LIKE ?", "%AB%").
// Order("tc_sfc01").Select("tc_sfc01").Find(&tcSfcFilePBIs)
page := len(tcSfcFilePBIs)/200 + 1
for i := 0; i < page; i++ {
var pageTcSfcFile []*model.TcSfcFile
var s []string
if i == page-1 {
s = tcSfcFilePBIs[i*200:]
} else {
s = tcSfcFilePBIs[i*200 : (i+1)*200]
}
tx.Where("tc_sfc01 IN ? AND tc_sfc08 LIKE ?", s, "%AB%"). // AND tc_sfc10 = ?, "N"
Preload("TcSfdFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("SfbFile").Preload("ImaFile").Preload("RvbFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("IddFile").Preload("RvaFile")
})
}).Preload("TcSfeFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("ImaFile")
}).Preload("PmcFile").Find(&pageTcSfcFile)
newTcSfcFile = append(newTcSfcFile, pageTcSfcFile...)
}
return nil
})
for _, tcSfc := range newTcSfcFile {
for _, tcSfd := range tcSfc.TcSfdFile {
status := "未结案"
if tcSfd.SfbFile.Sfb04 == "8" {
status = "结案"
} else if tcSfd.SfbFile.Sfb04 == "0" {
continue
}
var waferProduct, waferID string
var quantity float64 //, stockOutQuantity
for _, tcSfe := range tcSfc.TcSfeFile {
if tcSfe.TcSfe01 == tcSfc.TcSfc01 && tcSfe.TcSfe02 == tcSfd.TcSfd02 {
quantity += tcSfe.TcSfe12
//stockOutQuantity += tcSfe.TcSfe14
if tcSfe.TcSfe17 == "Y" {
waferProduct = tcSfe.ImaFile.Ima02
waferID = tcSfe.TcSfe15
}
}
}
if waferProduct == "" && len(tcSfc.TcSfeFile) > 0 {
waferProduct = tcSfc.TcSfeFile[0].ImaFile.Ima02
}
var returnQuantity, failQuantity, passQuantity float64
orderDateStockMap := make(map[string][]float64)
for _, rvb := range tcSfd.RvbFile {
if _, ok := orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")]; !ok {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")] = []float64{0, 0}
}
for _, idd := range rvb.IddFile {
if idd.Idd11 == rvb.Rvb02 {
returnQuantity += idd.Idd13
if idd.Idd06 == "BIN99" {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][1] += idd.Idd13
failQuantity += idd.Idd13
} else {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][0] += idd.Idd13
passQuantity += idd.Idd13
}
}
}
}
quantity, _ = decimal.NewFromFloat(quantity).Round(6).Float64()
var passProbability string
if strings.Contains(tcSfc.TcSfc01, "M596") {
var reports []*model.Report
global.PostGreSQL.Where("pbi = ? AND product = ? AND lot = ?", tcSfc.TcSfc01, tcSfd.ImaFile.Ima02,
tcSfd.TcSfd06).Find(&reports)
for _, report := range reports {
testQuantityDecimal, _ := decimal.NewFromString(report.TestQuantity)
testQuantityFloat, _ := testQuantityDecimal.Float64()
passQuantity += testQuantityFloat
}
}
//if stockOutQuantity != 0 {
// passProbability = decimal.NewFromFloat(passQuantity).Div(decimal.NewFromFloat(stockOutQuantity)).
// Round(4).Mul(decimal.NewFromFloat(100)).String()
//}
passProbability = decimal.NewFromFloat(passQuantity).Div(decimal.NewFromFloat(tcSfd.TcSfd05)).
Round(4).Mul(decimal.NewFromFloat(100)).String()
global.PostGreSQL.Create(&model.ABList{
Status: status,
OrderDate: tcSfc.TcSfc02.Format("2006-01-02"),
PBI: tcSfc.TcSfc01,
OutsourcingPBI: tcSfd.TcSfd13,
Product: strings.ReplaceAll(strings.ReplaceAll(tcSfd.ImaFile.Ima02, "管装", ""), "白板", ""),
WaferProduct: waferProduct,
Package: tcSfd.ImaFile.Ima021,
Factory: tcSfc.PmcFile.Pmc03,
Lot: tcSfd.TcSfd06,
Seal: tcSfd.TcSfdUd02,
WaferID: waferID,
Quantity: quantity,
//StockOutQuantity: stockOutQuantity,
StockOutQuantity: tcSfd.TcSfd05,
StockInQuantity: returnQuantity,
PassQuantity: passQuantity,
FailQuantity: failQuantity,
OnlineQuantity: tcSfd.TcSfd05 - returnQuantity,
PassProbability: passProbability + "%",
})
var abList *model.ABList
global.PostGreSQL.Where("pbi = ? AND outsourcing_pbi = ?", tcSfc.TcSfc01, tcSfd.TcSfd13).Find(&abList)
var abListStock []*model.ABListStock
for k, v := range orderDateStockMap {
abListStock = append(abListStock, &model.ABListStock{
ABListID: abList.ID,
ReturnDate: k,
PassQuantity: v[0],
FailQuantity: v[1],
})
}
global.PostGreSQL.Create(&abListStock)
}
}
}
func CronBPList() {
var oldTcSfcFile []*model.TcSfcFile
var bpListIDs []string
global.PostGreSQL.Model(&model.BPList{}).Where("status = ?", "未结案").
Select("pbi").Group("pbi").Find(&bpListIDs)
_ = global.Oracle.Transaction(func(tx *gorm.DB) error {
page := len(bpListIDs)/200 + 1
for i := 0; i < page; i++ {
var pageTcSfcFile []*model.TcSfcFile
var s []string
if i == page-1 {
s = bpListIDs[i*200:]
} else {
s = bpListIDs[i*200 : (i+1)*200]
}
tx.Where("tc_sfc01 IN ? AND tc_sfc08 LIKE ?", s, "%MH%").
Preload("TcSfdFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("SfbFile").Preload("ImaFile").Preload("RvbFile",
func(db *gorm.DB) *gorm.DB {
return db.Preload("IddFile").Preload("RvaFile")
})
}).Preload("TcSfeFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("ImaFile")
}).
Preload("PmcFile").Find(&pageTcSfcFile)
oldTcSfcFile = append(oldTcSfcFile, pageTcSfcFile...)
}
return nil
})
for _, tcSfc := range oldTcSfcFile {
for _, tcSfd := range tcSfc.TcSfdFile {
if tcSfd.TcSfd13 == "" {
continue
}
status := "未结案"
if tcSfd.SfbFile.Sfb04 == "8" {
status = "结案"
} else if tcSfd.SfbFile.Sfb04 == "0" {
continue
}
var returnQuantity, dieQuantity float64
orderDateStockMap := make(map[string][]float64)
for _, rvb := range tcSfd.RvbFile {
if _, ok := orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")]; !ok {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")] = []float64{0, 0}
}
returnQuantity += rvb.Rvb30
dieQuantity += rvb.Rvb85
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][0] += rvb.Rvb30
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][1] += rvb.Rvb85
}
var bpList *model.BPList
global.PostGreSQL.Where("pbi = ? AND outsourcing_pbi = ?",
tcSfc.TcSfc01, tcSfd.TcSfd13).Find(&bpList)
global.PostGreSQL.Transaction(func(tx *gorm.DB) error {
global.PostGreSQL.Model(&bpList).Where("pbi = ? AND outsourcing_pbi = ?",
tcSfc.TcSfc01, tcSfd.TcSfd13).Updates(map[string]interface{}{
"status": status,
"online_quantity": tcSfd.TcSfd05 - returnQuantity,
"return_quantity": returnQuantity,
"die_quantity": dieQuantity,
})
for k, v := range orderDateStockMap {
var bpListStock *model.BPListStock
if errors.Is(global.PostGreSQL.Where("bp_list_id = ? AND return_date = ?", bpList.ID, k).
First(&bpListStock).Error, gorm.ErrRecordNotFound) {
global.PostGreSQL.Create(&model.BPListStock{
BPListID: bpList.ID,
ReturnDate: k,
Quantity: v[0],
DieQuantity: v[1],
})
} else {
global.PostGreSQL.Model(&bpListStock).Where("bp_list_id = ? AND return_date = ?", bpList.ID, k).
Updates(map[string]interface{}{
"quantity": v[0],
"die_quantity": v[1],
})
}
}
return nil
})
}
}
var newTcSfcFile []*model.TcSfcFile
global.PostGreSQL.Model(&model.BPList{}).Where("order_date BETWEEN ? AND ?",
carbon.Now().SubMonths(2).Format("Y-m-d"), carbon.Now().Format("Y-m-d")).
Select("pbi").Group("pbi").Find(&bpListIDs)
_ = global.Oracle.Transaction(func(tx *gorm.DB) error {
var tcSfcFilePBIs []string
if len(bpListIDs) == 0 {
tx.Model(&model.TcSfcFile{}).Where("tc_sfc08 LIKE ? AND "+
"tc_sfc02 BETWEEN TO_DATE(?,'yyyy-mm-dd') AND TO_DATE(?,'yyyy-mm-dd')", "%MH%",
carbon.Now().SubMonths(2).Format("Y-m-d"), carbon.Now().Format("Y-m-d")).
Order("tc_sfc01").Select("tc_sfc01").Find(&tcSfcFilePBIs)
} else {
tx.Model(&model.TcSfcFile{}).Where("tc_sfc01 NOT IN ? AND tc_sfc08 LIKE ? AND "+
"tc_sfc02 BETWEEN TO_DATE(?,'yyyy-mm-dd') AND TO_DATE(?,'yyyy-mm-dd')", bpListIDs, "%MH%",
carbon.Now().SubMonths(2).Format("Y-m-d"), carbon.Now().Format("Y-m-d")).
Order("tc_sfc01").Select("tc_sfc01").Find(&tcSfcFilePBIs)
}
//tx.Model(&model.TcSfcFile{}).Where("tc_sfc08 LIKE ?", "%MH%").
// Order("tc_sfc01").Select("tc_sfc01").Find(&tcSfcFilePBIs)
page := len(tcSfcFilePBIs)/200 + 1
for i := 0; i < page; i++ {
var pageTcSfcFile []*model.TcSfcFile
var s []string
if i == page-1 {
s = tcSfcFilePBIs[i*200:]
} else {
s = tcSfcFilePBIs[i*200 : (i+1)*200]
}
tx.Where("tc_sfc01 IN ? AND tc_sfc08 LIKE ?", s, "%MH%"). // AND tc_sfc10 = ?, "N"
Preload("TcSfdFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("SfbFile").Preload("ImaFile").Preload("RvbFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("IddFile").Preload("RvaFile")
})
}).Preload("TcSfeFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("ImaFile")
}).Preload("PmcFile").Find(&pageTcSfcFile)
newTcSfcFile = append(newTcSfcFile, pageTcSfcFile...)
}
return nil
})
for _, tcSfc := range newTcSfcFile {
for _, tcSfd := range tcSfc.TcSfdFile {
if tcSfd.TcSfd13 == "" {
continue
}
status := "未结案"
if tcSfd.SfbFile.Sfb04 == "8" {
status = "结案"
} else if tcSfd.SfbFile.Sfb04 == "0" {
continue
}
var waferID string
for _, tcSfe := range tcSfc.TcSfeFile {
if tcSfe.TcSfe01 == tcSfc.TcSfc01 && tcSfe.TcSfe02 == tcSfd.TcSfd02 {
waferID = tcSfe.TcSfe15
}
}
var returnQuantity, dieQuantity float64
orderDateStockMap := make(map[string][]float64)
for _, rvb := range tcSfd.RvbFile {
if _, ok := orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")]; !ok {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")] = []float64{0, 0}
}
returnQuantity += rvb.Rvb30
dieQuantity += rvb.Rvb85
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][0] += rvb.Rvb30
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][1] += rvb.Rvb85
}
global.PostGreSQL.Create(&model.BPList{
Status: status,
OrderDate: tcSfc.TcSfc02.Format("2006-01-02"),
PBI: tcSfc.TcSfc01,
OutsourcingPBI: tcSfd.TcSfd13,
Product: tcSfd.ImaFile.Ima02,
Package: tcSfd.ImaFile.Ima021,
Factory: tcSfc.PmcFile.Pmc03,
Lot: tcSfd.TcSfd06,
WaferID: waferID,
Quantity: tcSfd.TcSfd05,
OnlineQuantity: tcSfd.TcSfd05 - returnQuantity,
ReturnQuantity: returnQuantity,
DieQuantity: dieQuantity,
})
var bpList *model.BPList
global.PostGreSQL.Where("pbi = ? AND outsourcing_pbi = ?", tcSfc.TcSfc01, tcSfd.TcSfd13).Find(&bpList)
var bpListStock []*model.BPListStock
for k, v := range orderDateStockMap {
bpListStock = append(bpListStock, &model.BPListStock{
BPListID: bpList.ID,
ReturnDate: k,
Quantity: v[0],
DieQuantity: v[1],
})
}
global.PostGreSQL.Create(&bpListStock)
}
}
}
func CronCPList() {
var oldTcSfcFile []*model.TcSfcFile
var cpListIDs []string
global.PostGreSQL.Model(&model.CPList{}).Where("status = ?", "未结案").
Select("pbi").Group("pbi").Find(&cpListIDs)
_ = global.Oracle.Transaction(func(tx *gorm.DB) error {
page := len(cpListIDs)/200 + 1
for i := 0; i < page; i++ {
var pageTcSfcFile []*model.TcSfcFile
var s []string
if i == page-1 {
s = cpListIDs[i*200:]
} else {
s = cpListIDs[i*200 : (i+1)*200]
}
tx.Where("tc_sfc01 IN ? AND tc_sfc08 = ?", s, "CP").
Preload("TcSfdFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("SfbFile").Preload("ImaFile").Preload("TcImbFile").Preload("RvbFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("IddFile").Preload("RvaFile")
})
}).Preload("TcSfeFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("ImaFile")
}).
Preload("PmcFile").Find(&pageTcSfcFile)
oldTcSfcFile = append(oldTcSfcFile, pageTcSfcFile...)
}
return nil
})
for _, tcSfc := range oldTcSfcFile {
for _, tcSfd := range tcSfc.TcSfdFile {
if tcSfd.TcSfd13 == "" {
continue
}
status := "未结案"
if tcSfd.SfbFile.Sfb04 == "8" {
status = "结案"
} else if tcSfd.SfbFile.Sfb04 == "0" {
continue
}
var returnQuantity, dieQuantity float64
orderDateStockMap := make(map[string][]float64)
for _, rvb := range tcSfd.RvbFile {
if _, ok := orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")]; !ok {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")] = []float64{0, 0}
}
returnQuantity += rvb.Rvb30
dieQuantity += rvb.Rvb85
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][0] += rvb.Rvb30
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][1] += rvb.Rvb85
}
var cpList *model.CPList
global.PostGreSQL.Where("pbi = ? AND outsourcing_pbi = ?",
tcSfc.TcSfc01, tcSfd.TcSfd13).Find(&cpList)
global.PostGreSQL.Transaction(func(tx *gorm.DB) error {
global.PostGreSQL.Model(&cpList).Where("pbi = ? AND outsourcing_pbi = ?",
tcSfc.TcSfc01, tcSfd.TcSfd13).Updates(map[string]interface{}{
"status": status,
"online_quantity": tcSfd.TcSfd05 - returnQuantity,
"return_quantity": returnQuantity,
"die_quantity": dieQuantity,
})
for k, v := range orderDateStockMap {
var cpListStock *model.CPListStock
if errors.Is(global.PostGreSQL.Where("cp_list_id = ? AND return_date = ?", cpList.ID, k).
First(&cpListStock).Error, gorm.ErrRecordNotFound) {
global.PostGreSQL.Create(&model.CPListStock{
CPListID: cpList.ID,
ReturnDate: k,
Quantity: v[0],
DieQuantity: v[1],
})
} else {
global.PostGreSQL.Model(&cpListStock).Where("cp_list_id = ? AND return_date = ?", cpList.ID, k).
Updates(map[string]interface{}{
"quantity": v[0],
"die_quantity": v[1],
})
}
}
return nil
})
}
}
var newTcSfcFile []*model.TcSfcFile
global.PostGreSQL.Model(&model.CPList{}).Where("order_date BETWEEN ? AND ?",
carbon.Now().SubMonths(2).Format("Y-m-d"), carbon.Now().Format("Y-m-d")).
Select("pbi").Group("pbi").Find(&cpListIDs)
_ = global.Oracle.Transaction(func(tx *gorm.DB) error {
var tcSfcFilePBIs []string
if len(cpListIDs) == 0 {
tx.Model(&model.TcSfcFile{}).Where("tc_sfc08 = ? AND"+
" tc_sfc02 BETWEEN TO_DATE(?,'yyyy-mm-dd') AND TO_DATE(?,'yyyy-mm-dd')", "CP",
carbon.Now().SubMonths(2).Format("Y-m-d"), carbon.Now().Format("Y-m-d")).
Order("tc_sfc01").Select("tc_sfc01").Find(&tcSfcFilePBIs)
} else {
tx.Model(&model.TcSfcFile{}).Where("tc_sfc01 NOT IN ? AND tc_sfc08 = ? AND"+
" tc_sfc02 BETWEEN TO_DATE(?,'yyyy-mm-dd') AND TO_DATE(?,'yyyy-mm-dd')", cpListIDs, "CP",
carbon.Now().SubMonths(2).Format("Y-m-d"), carbon.Now().Format("Y-m-d")).
Order("tc_sfc01").Select("tc_sfc01").Find(&tcSfcFilePBIs)
}
//tx.Model(&model.TcSfcFile{}).Where("tc_sfc08 = ?", "CP").
// Order("tc_sfc01").Select("tc_sfc01").Find(&tcSfcFilePBIs)
page := len(tcSfcFilePBIs)/200 + 1
for i := 0; i < page; i++ {
var pageTcSfcFile []*model.TcSfcFile
var s []string
if i == page-1 {
s = tcSfcFilePBIs[i*200:]
} else {
s = tcSfcFilePBIs[i*200 : (i+1)*200]
}
tx.Where("tc_sfc01 IN ? AND tc_sfc08 = ?", s, "CP").
Preload("TcSfdFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("SfbFile").Preload("ImaFile").Preload("TcImbFile").Preload("RvbFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("IddFile").Preload("RvaFile")
})
}).Preload("TcSfeFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("ImaFile")
}).Preload("PmcFile").Find(&pageTcSfcFile)
newTcSfcFile = append(newTcSfcFile, pageTcSfcFile...)
}
return nil
})
for _, tcSfc := range newTcSfcFile {
for _, tcSfd := range tcSfc.TcSfdFile {
if tcSfd.TcSfd13 == "" {
continue
}
status := "未结案"
if tcSfd.SfbFile.Sfb04 == "8" {
status = "结案"
} else if tcSfd.SfbFile.Sfb04 == "0" {
continue
}
var waferID string
for _, tcSfe := range tcSfc.TcSfeFile {
if tcSfe.TcSfe01 == tcSfc.TcSfc01 && tcSfe.TcSfe02 == tcSfd.TcSfd02 {
waferID = tcSfe.TcSfe15
}
}
var returnQuantity, dieQuantity float64
orderDateStockMap := make(map[string][]float64)
for _, rvb := range tcSfd.RvbFile {
if _, ok := orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")]; !ok {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")] = []float64{0, 0}
}
returnQuantity += rvb.Rvb30
dieQuantity += rvb.Rvb85
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][0] += rvb.Rvb30
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][1] += rvb.Rvb85
}
global.PostGreSQL.Create(&model.CPList{
Status: status,
OrderDate: tcSfc.TcSfc02.Format("2006-01-02"),
PBI: tcSfc.TcSfc01,
OutsourcingPBI: tcSfd.TcSfd13,
Product: tcSfd.ImaFile.Ima02,
Package: tcSfd.ImaFile.Ima021,
Factory: tcSfc.PmcFile.Pmc03,
Lot: tcSfd.TcSfd06,
WaferID: waferID,
TestProgram: tcSfd.TcImbFile.TcImb03,
TestProgramVersion: tcSfd.TcImbFile.TcImb04,
Quantity: tcSfd.TcSfd05,
OnlineQuantity: tcSfd.TcSfd05 - returnQuantity,
ReturnQuantity: returnQuantity,
DieQuantity: dieQuantity,
})
var cpList *model.CPList
global.PostGreSQL.Where("pbi = ? AND outsourcing_pbi = ?", tcSfc.TcSfc01, tcSfd.TcSfd13).Find(&cpList)
var cpListStock []*model.CPListStock
for k, v := range orderDateStockMap {
cpListStock = append(cpListStock, &model.CPListStock{
CPListID: cpList.ID,
ReturnDate: k,
Quantity: v[0],
DieQuantity: v[1],
})
}
global.PostGreSQL.Create(&cpListStock)
}
}
}
func CronFTList() {
var oldTcSfcFile []*model.TcSfcFile
var ftListIDs []string
global.PostGreSQL.Model(&model.FTList{}).Where("status = ?", "未结案").
Select("pbi").Group("pbi").Find(&ftListIDs)
_ = global.Oracle.Transaction(func(tx *gorm.DB) error {
page := len(ftListIDs)/200 + 1
for i := 0; i < page; i++ {
var pageTcSfcFile []*model.TcSfcFile
var s []string
if i == page-1 {
s = ftListIDs[i*200:]
} else {
s = ftListIDs[i*200 : (i+1)*200]
}
tx.Where("tc_sfc01 IN ? AND tc_sfc08 LIKE ?", s, "%FT%").
Preload("TcSfdFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("SfbFile").Preload("ImaFile").Preload("TcImbFile").Preload("RvbFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("IddFile").Preload("RvaFile")
})
}).Preload("TcSfeFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("ImaFile")
}).
Preload("PmcFile").Find(&pageTcSfcFile)
oldTcSfcFile = append(oldTcSfcFile, pageTcSfcFile...)
}
return nil
})
for _, tcSfc := range oldTcSfcFile {
for _, tcSfd := range tcSfc.TcSfdFile {
if tcSfd.TcSfd13 == "" {
continue
}
status := "未结案"
if tcSfd.SfbFile.Sfb04 == "8" {
status = "结案"
} else if tcSfd.SfbFile.Sfb04 == "0" {
continue
}
var returnQuantity, passQuantity, failQuantity float64
orderDateStockMap := make(map[string][]float64)
for _, rvb := range tcSfd.RvbFile {
if _, ok := orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")]; !ok {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")] = []float64{0, 0}
}
returnQuantity += rvb.Rvb30
for _, idd := range rvb.IddFile {
if idd.Idd11 == rvb.Rvb02 {
if idd.Idd06 == "BIN99" {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][1] += idd.Idd13
failQuantity += idd.Idd13
} else {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][0] += idd.Idd13
passQuantity += idd.Idd13
}
}
}
}
var ftList *model.FTList
global.PostGreSQL.Where("pbi = ? AND outsourcing_pbi = ?",
tcSfc.TcSfc01, tcSfd.TcSfd13).Find(&ftList)
global.PostGreSQL.Transaction(func(tx *gorm.DB) error {
global.PostGreSQL.Model(&ftList).Where("pbi = ? AND outsourcing_pbi = ?",
tcSfc.TcSfc01, tcSfd.TcSfd13).Updates(map[string]interface{}{
"status": status,
"online_quantity": tcSfd.TcSfd05 - returnQuantity,
"return_quantity": returnQuantity,
"pass_quantity": passQuantity,
"fail_quantity": failQuantity,
})
for k, v := range orderDateStockMap {
var ftListStock *model.FTListStock
if errors.Is(global.PostGreSQL.Where("ft_list_id = ? AND return_date = ?", ftList.ID, k).
First(&ftListStock).Error, gorm.ErrRecordNotFound) {
global.PostGreSQL.Create(&model.FTListStock{
FTListID: ftList.ID,
ReturnDate: k,
PassQuantity: v[0],
FailQuantity: v[1],
})
} else {
global.PostGreSQL.Model(&ftListStock).Where("ft_list_id = ? AND return_date = ?", ftList.ID, k).
Updates(map[string]interface{}{
"pass_quantity": v[0],
"fail_quantity": v[1],
})
}
}
return nil
})
}
}
var newTcSfcFile []*model.TcSfcFile
global.PostGreSQL.Model(&model.FTList{}).Where("order_date BETWEEN ? AND ?", carbon.Now().SubMonths(2).Format("Y-m-d"),
carbon.Now().Format("Y-m-d")).
Select("pbi").Group("pbi").Find(&ftListIDs)
_ = global.Oracle.Transaction(func(tx *gorm.DB) error {
var tcSfcFilePBIs []string
if len(ftListIDs) == 0 {
tx.Model(&model.TcSfcFile{}).Where("tc_sfc02 BETWEEN TO_DATE(?,'yyyy-mm-dd') AND "+
"TO_DATE(?,'yyyy-mm-dd') AND ((tc_sfc01 LIKE ? AND tc_sfc08 = ?) OR (tc_sfc08 = ?))",
carbon.Now().SubMonths(2).Format("Y-m-d"),
carbon.Now().Format("Y-m-d"), "M596%", "ABFT", "FT").
Order("tc_sfc01").Select("tc_sfc01").Find(&tcSfcFilePBIs)
} else {
tx.Model(&model.TcSfcFile{}).Where("(tc_sfc01 NOT IN ? AND tc_sfc02 BETWEEN TO_DATE(?,'yyyy-mm-dd') AND "+
"TO_DATE(?,'yyyy-mm-dd')) AND ((tc_sfc01 LIKE ? AND tc_sfc08 = ?) OR (tc_sfc08 = ?))", ftListIDs,
carbon.Now().SubMonths(2).Format("Y-m-d"),
carbon.Now().Format("Y-m-d"), "M596%", "ABFT", "FT").
Order("tc_sfc01").Select("tc_sfc01").Find(&tcSfcFilePBIs)
}
//tx.Model(&model.TcSfcFile{}).Where("(tc_sfc01 LIKE ? AND tc_sfc08 = ?) OR (tc_sfc08 = ?)", "M596%", "ABFT", "FT").
// Order("tc_sfc01").Select("tc_sfc01").Find(&tcSfcFilePBIs)
page := len(tcSfcFilePBIs)/200 + 1
for i := 0; i < page; i++ {
var pageTcSfcFile []*model.TcSfcFile
var s []string
if i == page-1 {
s = tcSfcFilePBIs[i*200:]
} else {
s = tcSfcFilePBIs[i*200 : (i+1)*200]
}
tx.Where("tc_sfc01 IN ? AND tc_sfc08 LIKE ?", s, "%FT%").
Preload("TcSfdFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("SfbFile").Preload("ImaFile").Preload("TcImbFile").Preload("RvbFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("IddFile").Preload("RvaFile")
})
}).Preload("TcSfeFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("ImaFile")
}).Preload("PmcFile").Find(&pageTcSfcFile)
newTcSfcFile = append(newTcSfcFile, pageTcSfcFile...)
}
return nil
})
for _, tcSfc := range newTcSfcFile {
for _, tcSfd := range tcSfc.TcSfdFile {
if tcSfd.TcSfd13 == "" {
continue
}
status := "未结案"
if tcSfd.SfbFile.Sfb04 == "8" {
status = "结案"
} else if tcSfd.SfbFile.Sfb04 == "0" {
continue
}
var waferProduct string
for _, tcSfe := range tcSfc.TcSfeFile {
if tcSfe.TcSfe01 == tcSfc.TcSfc01 && tcSfe.TcSfe02 == tcSfd.TcSfd02 {
waferProduct = tcSfe.ImaFile.Ima02
}
}
var returnQuantity, passQuantity, failQuantity float64
orderDateStockMap := make(map[string][]float64)
for _, rvb := range tcSfd.RvbFile {
if _, ok := orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")]; !ok {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")] = []float64{0, 0}
}
returnQuantity += rvb.Rvb30
for _, idd := range rvb.IddFile {
if idd.Idd11 == rvb.Rvb02 {
if idd.Idd06 == "BIN99" {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][1] += idd.Idd13
failQuantity += idd.Idd13
} else {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][0] += idd.Idd13
passQuantity += idd.Idd13
}
}
}
}
global.PostGreSQL.Create(&model.FTList{
Status: status,
OrderDate: tcSfc.TcSfc02.Format("2006-01-02"),
PBI: tcSfc.TcSfc01,
OutsourcingPBI: tcSfd.TcSfd13,
Product: strings.ReplaceAll(strings.ReplaceAll(tcSfd.ImaFile.Ima02, "管装", ""), "白板", ""),
WaferProduct: waferProduct,
Package: tcSfd.ImaFile.Ima021,
Factory: tcSfc.PmcFile.Pmc03,
Lot: tcSfd.TcSfd06,
Seal: tcSfd.TcSfdUd02,
TestProgram: tcSfd.TcImbFile.TcImb03,
TestProgramVersion: tcSfd.TcImbFile.TcImb04,
Quantity: tcSfd.TcSfd05,
OnlineQuantity: tcSfd.TcSfd05 - returnQuantity,
ReturnQuantity: returnQuantity,
PassQuantity: passQuantity,
FailQuantity: failQuantity,
})
var ftList *model.FTList
global.PostGreSQL.Where("pbi = ? AND outsourcing_pbi = ?", tcSfc.TcSfc01, tcSfd.TcSfd13).Find(&ftList)
var ftListStock []*model.FTListStock
for k, v := range orderDateStockMap {
ftListStock = append(ftListStock, &model.FTListStock{
FTListID: ftList.ID,
ReturnDate: k,
PassQuantity: v[0],
FailQuantity: v[1],
})
}
global.PostGreSQL.Create(&ftListStock)
}
}
}
func CronTRList() {
var oldTcSfcFile []*model.TcSfcFile
var trListIDs []string
global.PostGreSQL.Model(&model.TRList{}).Where("status = ?", "未结案").
Select("pbi").Group("pbi").Find(&trListIDs)
_ = global.Oracle.Transaction(func(tx *gorm.DB) error {
page := len(trListIDs)/200 + 1
for i := 0; i < page; i++ {
var pageTcSfcFile []*model.TcSfcFile
var s []string
if i == page-1 {
s = trListIDs[i*200:]
} else {
s = trListIDs[i*200 : (i+1)*200]
}
tx.Where("tc_sfc01 IN ? AND tc_sfc08 LIKE ?", s, "%TR%").
Preload("TcSfdFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("SfbFile").Preload("ImaFile").Preload("RvbFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("IddFile").Preload("RvaFile")
})
}).Preload("TcSfeFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("ImaFile")
}).
Preload("PmcFile").Find(&pageTcSfcFile)
oldTcSfcFile = append(oldTcSfcFile, pageTcSfcFile...)
}
return nil
})
for _, tcSfc := range oldTcSfcFile {
for _, tcSfd := range tcSfc.TcSfdFile {
if tcSfd.TcSfd13 == "" {
continue
}
status := "未结案"
if tcSfd.SfbFile.Sfb04 == "8" {
status = "结案"
} else if tcSfd.SfbFile.Sfb04 == "0" {
continue
}
var returnQuantity, failQuantity, passQuantity float64
orderDateStockMap := make(map[string][]float64)
for _, rvb := range tcSfd.RvbFile {
if _, ok := orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")]; !ok {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")] = []float64{0, 0}
}
for _, idd := range rvb.IddFile {
if idd.Idd11 == rvb.Rvb02 {
returnQuantity += idd.Idd13
if idd.Idd06 == "BIN99" {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][1] += idd.Idd13
failQuantity += idd.Idd13
} else {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][0] += idd.Idd13
passQuantity += idd.Idd13
}
}
}
}
var trList *model.TRList
global.PostGreSQL.Where("pbi = ? AND outsourcing_pbi = ?",
tcSfc.TcSfc01, tcSfd.TcSfd13).Find(&trList)
global.PostGreSQL.Transaction(func(tx *gorm.DB) error {
global.PostGreSQL.Model(&trList).Where("pbi = ? AND outsourcing_pbi = ?",
tcSfc.TcSfc01, tcSfd.TcSfd13).Updates(map[string]interface{}{
"status": status,
"online_quantity": tcSfd.TcSfd05 - returnQuantity,
"pass_quantity": passQuantity,
"fail_quantity": failQuantity,
})
for k, v := range orderDateStockMap {
var trListStock *model.TRListStock
if errors.Is(global.PostGreSQL.Where("tr_list_id = ? AND return_date = ?", trList.ID, k).
First(&trListStock).Error, gorm.ErrRecordNotFound) {
global.PostGreSQL.Create(&model.TRListStock{
TRListID: trList.ID,
ReturnDate: k,
PassQuantity: v[0],
FailQuantity: v[1],
})
} else {
global.PostGreSQL.Model(&trListStock).Where("tr_list_id = ? AND return_date = ?", trList.ID, k).
Updates(map[string]interface{}{
"pass_quantity": v[0],
"fail_quantity": v[1],
})
}
}
return nil
})
}
}
var newTcSfcFile []*model.TcSfcFile
global.PostGreSQL.Model(&model.ABList{}).Where("order_date BETWEEN ? AND ?",
carbon.Now().SubMonths(2).Format("Y-m-d"), carbon.Now().Format("Y-m-d")).
Select("pbi").Group("pbi").Find(&trListIDs)
_ = global.Oracle.Transaction(func(tx *gorm.DB) error {
var tcSfcFilePBIs []string
if len(trListIDs) == 0 {
tx.Model(&model.TcSfcFile{}).Where("tc_sfc08 LIKE ? AND tc_sfc10 = ? AND "+
"tc_sfc02 BETWEEN TO_DATE(?,'yyyy-mm-dd') AND TO_DATE(?,'yyyy-mm-dd')", "%TR%", "N",
carbon.Now().SubMonths(2).Format("Y-m-d"), carbon.Now().Format("Y-m-d")).
Order("tc_sfc01").Select("tc_sfc01").Find(&tcSfcFilePBIs)
} else {
tx.Model(&model.TcSfcFile{}).Where("tc_sfc01 NOT IN ? AND tc_sfc08 LIKE ? AND tc_sfc10 = ? AND "+
"tc_sfc02 BETWEEN TO_DATE(?,'yyyy-mm-dd') AND TO_DATE(?,'yyyy-mm-dd')", trListIDs, "%TR%", "N",
carbon.Now().SubMonths(2).Format("Y-m-d"), carbon.Now().Format("Y-m-d")).
Order("tc_sfc01").Select("tc_sfc01").Find(&tcSfcFilePBIs)
}
//tx.Model(&model.TcSfcFile{}).Where("tc_sfc08 LIKE ?", "%TR%").
// Order("tc_sfc01").Select("tc_sfc01").Find(&tcSfcFilePBIs)
page := len(tcSfcFilePBIs)/200 + 1
for i := 0; i < page; i++ {
var pageTcSfcFile []*model.TcSfcFile
var s []string
if i == page-1 {
s = tcSfcFilePBIs[i*200:]
} else {
s = tcSfcFilePBIs[i*200 : (i+1)*200]
}
tx.Where("tc_sfc01 IN ? AND tc_sfc08 LIKE ?", s, "%TR%"). // AND tc_sfc10 = ?, "N"
Preload("TcSfdFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("SfbFile").Preload("ImaFile").Preload("RvbFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("IddFile").Preload("RvaFile")
})
}).Preload("TcSfeFile", func(db *gorm.DB) *gorm.DB {
return db.Preload("ImaFile")
}).Preload("PmcFile").Find(&pageTcSfcFile)
newTcSfcFile = append(newTcSfcFile, pageTcSfcFile...)
}
return nil
})
for _, tcSfc := range newTcSfcFile {
for _, tcSfd := range tcSfc.TcSfdFile {
if tcSfd.TcSfd13 == "" {
continue
}
status := "未结案"
if tcSfd.SfbFile.Sfb04 == "8" {
status = "结案"
} else if tcSfd.SfbFile.Sfb04 == "0" {
continue
}
var waferProduct string
for _, tcSfe := range tcSfc.TcSfeFile {
if tcSfe.TcSfe01 == tcSfc.TcSfc01 && tcSfe.TcSfe02 == tcSfd.TcSfd02 {
waferProduct = tcSfe.ImaFile.Ima02
}
}
var returnQuantity, failQuantity, passQuantity float64
orderDateStockMap := make(map[string][]float64)
for _, rvb := range tcSfd.RvbFile {
if _, ok := orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")]; !ok {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")] = []float64{0, 0}
}
for _, idd := range rvb.IddFile {
if idd.Idd11 == rvb.Rvb02 {
returnQuantity += idd.Idd13
if idd.Idd06 == "BIN99" {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][1] += idd.Idd13
failQuantity += idd.Idd13
} else {
orderDateStockMap[rvb.RvaFile.Rva06.Format("2006-01-02")][0] += idd.Idd13
passQuantity += idd.Idd13
}
}
}
}
global.PostGreSQL.Create(&model.TRList{
Status: status,
OrderDate: tcSfc.TcSfc02.Format("2006-01-02"),
PBI: tcSfc.TcSfc01,
OutsourcingPBI: tcSfd.TcSfd13,
Product: tcSfd.ImaFile.Ima02,
WaferProduct: waferProduct,
Package: tcSfd.ImaFile.Ima021,
Factory: tcSfc.PmcFile.Pmc03,
Lot: tcSfd.TcSfd06,
Seal: tcSfd.TcSfdUd02,
Quantity: tcSfd.TcSfd05,
OnlineQuantity: tcSfd.TcSfd05 - returnQuantity,
PassQuantity: passQuantity,
FailQuantity: failQuantity,
})
var trList *model.TRList
global.PostGreSQL.Where("pbi = ? AND outsourcing_pbi = ?", tcSfc.TcSfc01, tcSfd.TcSfd13).Find(&trList)
var trListStock []*model.TRListStock
for k, v := range orderDateStockMap {
trListStock = append(trListStock, &model.TRListStock{
TRListID: trList.ID,
ReturnDate: k,
PassQuantity: v[0],
FailQuantity: v[1],
})
}
global.PostGreSQL.Create(&trListStock)
}
}
}