diff --git a/initialization/cron.go b/initialization/cron.go index 360b7c6..85bca15 100644 --- a/initialization/cron.go +++ b/initialization/cron.go @@ -30,6 +30,21 @@ func InitCronListCron() { c.Start() } +func InitCronCheckListCron() { + c := cron.New(cron.WithChain(cron.SkipIfStillRunning(cron.DefaultLogger))) + //_, err := c.AddFunc("0 */1 * * *", func() { + _, err := c.AddFunc("0 0 */1 * *", func() { + fmt.Println(carbon.Now().Format("Y-m-d H:i:s") + "CronCheckListCron start") + test_data.CronCheckCPList() + fmt.Println(carbon.Now().Format("Y-m-d H:i:s") + "CronCheckListCron finish") + }) + if err != nil { + global.Log.Errorf("InitCronCheckListCron AddFunc error: %s", err) + log.Fatalln(err) + } + c.Start() +} + func InitEmailCron() { c := cron.New(cron.WithChain(cron.SkipIfStillRunning(cron.DefaultLogger))) //_, err := c.AddFunc("0 */1 * * *", func() { diff --git a/repository/test.data/report.list.cron.go b/repository/test.data/report.list.cron.go index 84741e4..5e1ef78 100644 --- a/repository/test.data/report.list.cron.go +++ b/repository/test.data/report.list.cron.go @@ -679,8 +679,8 @@ func CronBPList() { } func CronCPList() { - var oldTcSfcFile []*model.TcSfcFile var cpListIDs []string + var oldTcSfcFile []*model.TcSfcFile global.PostGreSQL.Model(&model.CPList{}).Where("status = ?", "未结案"). Select("pbi").Group("pbi").Find(&cpListIDs) _ = global.Oracle.Transaction(func(tx *gorm.DB) error { @@ -867,6 +867,92 @@ func CronCPList() { } } +func CronCheckCPList() { + var cpListIDs []string + var oldTcSfcFile []*model.TcSfcFile + global.PostGreSQL.Model(&model.CPList{}).Where("status = ? AND online_quantity != ?", "结案", 0). + 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 + }) + } + } +} + func CronFTList() { var oldTcSfcFile []*model.TcSfcFile var ftListIDs []string