1274 lines
45 KiB
Go
1274 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)
|
|
}
|
|
}
|
|
}
|