perubahan jadwal dokter

This commit is contained in:
2025-12-11 08:07:13 +07:00
parent de682a1a2b
commit d38dac15d5
2 changed files with 197 additions and 3 deletions

View File

@@ -577,6 +577,7 @@ func GetJadwalDokterNew() bool {
"X-signature": header.XSignature,
"user_key": header.UserKey,
}
kdPoly := value.Kode
param := "/jadwaldokter/kodepoli/" + kdPoly + "/tanggal/" + tanggal
linkurl := url + param
@@ -585,6 +586,7 @@ func GetJadwalDokterNew() bool {
log.Println("Error making external API request: %v", err)
return false
}
date, errParse := time.Parse("2006-01-02", tanggal)
if errParse != nil {
return false
@@ -595,6 +597,7 @@ func GetJadwalDokterNew() bool {
log.Println("Skip Proses")
continue
}
jadwalLibur, isLibur, errLibur := jadwal.GetJadwalLibur(tanggal)
if errLibur != nil {
log.Println(errLibur)
@@ -607,18 +610,20 @@ func GetJadwalDokterNew() bool {
return false
}
isLibur = false
for i := 0; i < 7; i++ {
for j := 0; j < 7; j++ {
log.Println(jadwalLibur.NamaLiburPelayanan)
tanggalTemp = tanggalTemp.AddDate(0, 0, 7)
tanggalTempString := tanggalTemp.Format("2006-01-02")
log.Println(tanggalTempString)
paramLibur := "/jadwaldokter/kodepoli/" + kdPoly + "/tanggal/" + tanggalTempString
linkUrl := url + paramLibur
resNew, errRes := JadwalDokterGetResponseApi(linkUrl, header, headers)
if errRes != nil {
log.Println("Error making external API request: ", errRes)
return false
}
if resNew != nil {
for _, v := range resNew {
res = append(res, &jadwal_dokter.ListDokter{
@@ -717,3 +722,192 @@ func GetJadwalbaru(*gin.Context) {
}
log.Println(listIdSubspesialis)
}
func GetJadwalDokternew() bool {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("ANTREAN_RS")
url := baseUrl + endpoint
errTruncate := dokter.DeleteJadwalDokter()
if errTruncate != nil {
log.Println(errTruncate)
return false
}
errTruncateTemp := dokter.DeleteJadwalDokterTemp()
if errTruncateTemp != nil {
log.Println(errTruncateTemp)
return false
}
spesialis, err := dokter.GetSpesialis()
if err != nil {
return false
}
var listIdSpesialis = make(map[string]int)
for _, kodeDokter := range spesialis {
listIdSpesialis[kodeDokter.Kode] = kodeDokter.ID
}
subspesialis, err := dokter.GetSubspesialis()
if err != nil {
return false
}
var listIdSubspesialis = make(map[string]int)
for _, kodeDokter := range subspesialis {
listIdSubspesialis[kodeDokter.Kode] = kodeDokter.ID
}
listDokter, err := dokter.GetDokter()
if err != nil {
return false
}
var listIddokter = make(map[int]string)
for _, kodeDokter := range listDokter {
listIddokter[kodeDokter.HfisCode] = kodeDokter.ID
}
var reqInsert *jadwal_dokter.JadwalDokterSatuData
for _, value := range spesialis {
tanggal := time.Now().Format("2006-01-02")
// tanggal := "2025-04-11"
for i := 0; i < 30; i++ {
tanggalRequest := tanggal
jadwalLibur, isLibur, errLibur := jadwal.GetJadwalLibur(tanggalRequest)
if errLibur != nil {
log.Println(errLibur)
return false
}
conf := config.ConfigBpjs{}
header := cfg.SetHeader(false, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
"X-timestamp": header.TimeStamp,
"X-signature": header.XSignature,
"user_key": header.UserKey,
}
kdPoly := value.Kode
var res []*jadwal_dokter.ListDokter
// PERBAIKAN : Logika libur pakai tanggalRequest
if isLibur {
log.Println("Tanggal", tanggalRequest, "adalah hari libur:", jadwalLibur.NamaLiburPelayanan)
tanggalTemp, errParseTemp := time.Parse("2006-01-02", tanggalRequest)
if errParseTemp != nil {
log.Println(errParseTemp)
return false
}
foundReplacement := false
for j := 1; j <= 7; j++ {
tanggalTemp = tanggalTemp.AddDate(0, 0, 7)
tanggalTempString := tanggalTemp.Format("2006-01-02")
log.Println("Mencoba ambil jadwal pengganti minggu ke-", j, ":", tanggalTempString)
paramLibur := "/jadwaldokter/kodepoli/" + kdPoly + "/tanggal/" + tanggalTempString
linkUrl := url + paramLibur
resNew, errRes := JadwalDokterGetResponseApi(linkUrl, header, headers)
if errRes != nil {
log.Println("Error making external API request: ", errRes)
return false
}
if resNew != nil && len(resNew) > 0 {
res = resNew
log.Println("Ada data pengganti pada tanggal", tanggalTempString)
foundReplacement = true
break
} else {
log.Println("Tidak ada data pada tanggal", tanggalTempString)
}
}
if !foundReplacement {
log.Println("Tidak ada jadwal pengganti untuk hari libur", tanggalRequest)
// Geser tanggal untuk iterasi berikutnya
date, errParse := time.Parse("2006-01-02", tanggal)
if errParse != nil {
return false
}
tanggal = date.AddDate(0, 0, 1).Format("2006-01-02")
log.Println("Tanggal berikutnya:", tanggal)
continue
}
} else {
// PERBAIKAN 5: Kalau BUKAN libur, panggil API seperti biasa
param := "/jadwaldokter/kodepoli/" + kdPoly + "/tanggal/" + tanggalRequest
linkurl := url + param
resTemp, err := JadwalDokterGetResponseApi(linkurl, header, headers)
if err != nil {
log.Println("Error making external API request:", err)
return false
}
if resTemp == nil || len(resTemp) == 0 {
log.Println("Skip Proses - tidak ada jadwal pada tanggal", tanggalRequest)
// Geser tanggal untuk iterasi berikutnya
date, errParse := time.Parse("2006-01-02", tanggal)
if errParse != nil {
return false
}
tanggal = date.AddDate(0, 0, 1).Format("2006-01-02")
log.Println("Tanggal berikutnya:", tanggal)
continue
}
res = resTemp
}
// PERBAIKAN 6: Insert jadwal (dari hari normal atau pengganti libur)
for _, v := range res {
idSpesialis := utils.KodeToIDConverter(v.KodePoli, listIdSpesialis)
idSubspesialis := utils.KodeToIDConverter(v.KodeSubspesialis, listIdSubspesialis)
idDokter := utils.HfisCodeToIDConverter(v.KodeDokter, listIddokter)
reqInsert = &jadwal_dokter.JadwalDokterSatuData{
Hari: v.Hari,
NamaHari: v.NamaHari,
Waktu: v.Jadwal,
Dokter: idDokter,
Spesialis: idSpesialis,
SubSpesialis: idSubspesialis,
Status: 1, // When available always set to 1
}
if reqInsert.Dokter != "" {
errInsert := dokter.InsertJadwalDokter(reqInsert)
if errInsert != nil {
log.Println(errInsert)
return false
}
} else {
reqInsert.Dokter = strconv.Itoa(v.KodeDokter)
errInsertTemp := dokter.InsertJadwalDokterTemp(reqInsert)
if errInsertTemp != nil {
log.Println(errInsertTemp)
return false
}
}
}
// PERBAIKAN 7: Geser tanggal di AKHIR setelah semua proses selesai
date, errParse := time.Parse("2006-01-02", tanggal)
if errParse != nil {
return false
}
tanggal = date.AddDate(0, 0, 1).Format("2006-01-02")
log.Println("Tanggal berikutnya:", tanggal)
}
}
return true
}

View File

@@ -53,9 +53,9 @@ func main() {
scheduler.AddFunc("0 5 * * *", func() {
log.Println("=== RUNNING SCHEDULE GET JADWAL DOKTER ===")
for {
success := jadwal_dokter.GetJadwalDokterNew()
success := jadwal_dokter.GetJadwalDokternew()
if success {
log.Println("=== SCHEDULE GET JADWAL DOKTER DONE ===")
log.Println("=== SCHEDULE GET JADWAL HARIAN DOKTER DONE ===")
break
}
}