From cf5c47f9bb1aa8e7b90b2c535a751da3457076e2487204fc3119d56e5104be71 Mon Sep 17 00:00:00 2001 From: mirza Date: Thu, 17 Oct 2024 08:24:41 +0700 Subject: [PATCH] add condition and cari --- .../satu_data/surat_kontrol/surat_kontrol.go | 114 ++++++++++++++++++ handlers/bpjs/surat_kontrol/response.go | 28 ++++- handlers/bpjs/surat_kontrol/surat_kontrol.go | 72 +++++++++++ main.go | 1 + models/bpjs/surat_kontrol/surat_kontrol.go | 9 ++ 5 files changed, 221 insertions(+), 3 deletions(-) diff --git a/database/satu_data/surat_kontrol/surat_kontrol.go b/database/satu_data/surat_kontrol/surat_kontrol.go index 2503606..defe43a 100644 --- a/database/satu_data/surat_kontrol/surat_kontrol.go +++ b/database/satu_data/surat_kontrol/surat_kontrol.go @@ -173,3 +173,117 @@ func GetAllDataSuratKontrol(idSurKon string) (*suratkontrol.DataSuratKontrol, er } return dataSurKon, nil } + +func GetDataSurKonByNoRM(req suratkontrol.RequestCariPasien) ([]*suratkontrol.GetDataSuratKontrol, error) { + var dataSurKon []*suratkontrol.GetDataSuratKontrol + err := config.SatuDataDB.Debug().Raw(`select dsk."id", dsk."Tanggal_cetak_surat_kontrol", dsk."Tanggal_rencana_kontrol", + dsk."Nomor_surat_kontrol", + (select dlr."Nama" + from data_kunjungan_pasien dkp + left join daftar_lokasi_ruang dlr on dkp."Ruangan" = dlr.id where dkp."id" = dsk."Kunjungan_pasien" LIMIT 1) as "Poli_asal", + dlr."Nama" as "Poli_tuju", + dkp2."Nomor_sep", dkp2."Nama_lengkap", dkp2."IDXDAFTAR", + array( + select dgd. "Gelar_depan" + from data_pegawai_daftar_gelar_depan dpdgd + left join daftar_gelar_depan dgd on dpdgd.daftar_gelar_depan_id = dgd.id where dpdgd.data_pegawai_id = dp.id + ) AS gelardepan , + dk."Nama_lengkap" as "Nama_lengkap_dokter", + array( + select dgb. "Gelar_belakang" + from data_pegawai_daftar_gelar_belakang dpdgb + left join daftar_gelar_belakang dgb on dpdgb.daftar_gelar_belakang_id = dgb.id where dpdgb.data_pegawai_id = dp.id + ) AS gelarbelakang, + ds."Subspesialis", + ds."Kode" as "Kode_poli", + dp."HFIS_code" as "Kode_dokter" + from data_surat_kontrol dsk + left join data_kunjungan_pasien dkp2 on dkp2."id" = dsk."Kunjungan_pasien" + left join daftar_lokasi_ruang dlr on dsk."Ruangan_surat_kontrol" = dlr."id" + left join data_pegawai dp on dsk."DPJP_surat_kontrol" = dp."id" + left join data_ktp dk on dp."KTP" = dk. "id" + left join daftar_subspesialis ds on dp."Subspesialis" = ds."id" + where dsk."Status_surat_kontrol" = '1' and dkp2."NOMR" = ? and date(dsk."Tanggal_rencana_kontrol") between ? and ?`, req.NoRM, req.TanggalAwal, req.TanggalAkhir).Find(&dataSurKon).Error + if err != nil { + log.Println(err) + return nil, err + } + log.Println("Data Surat Kontrol : ", dataSurKon) + return dataSurKon, nil +} + +func GetDataSurKonByNoSEP(req suratkontrol.RequestCariPasien) ([]*suratkontrol.GetDataSuratKontrol, error) { + var dataSurKon []*suratkontrol.GetDataSuratKontrol + err := config.SatuDataDB.Debug().Raw(`select dsk."id", dsk."Tanggal_cetak_surat_kontrol", dsk."Tanggal_rencana_kontrol", + dsk."Nomor_surat_kontrol", + (select dlr."Nama" + from data_kunjungan_pasien dkp + left join daftar_lokasi_ruang dlr on dkp."Ruangan" = dlr.id where dkp."id" = dsk."Kunjungan_pasien" LIMIT 1) as "Poli_asal", + dlr."Nama" as "Poli_tuju", + dkp2."Nomor_sep", dkp2."Nama_lengkap", dkp2."IDXDAFTAR", + array( + select dgd. "Gelar_depan" + from data_pegawai_daftar_gelar_depan dpdgd + left join daftar_gelar_depan dgd on dpdgd.daftar_gelar_depan_id = dgd.id where dpdgd.data_pegawai_id = dp.id + ) AS gelardepan , + dk."Nama_lengkap" as "Nama_lengkap_dokter", + array( + select dgb. "Gelar_belakang" + from data_pegawai_daftar_gelar_belakang dpdgb + left join daftar_gelar_belakang dgb on dpdgb.daftar_gelar_belakang_id = dgb.id where dpdgb.data_pegawai_id = dp.id + ) AS gelarbelakang, + ds."Subspesialis", + ds."Kode" as "Kode_poli", + dp."HFIS_code" as "Kode_dokter" + from data_surat_kontrol dsk + left join data_kunjungan_pasien dkp2 on dkp2."id" = dsk."Kunjungan_pasien" + left join daftar_lokasi_ruang dlr on dsk."Ruangan_surat_kontrol" = dlr."id" + left join data_pegawai dp on dsk."DPJP_surat_kontrol" = dp."id" + left join data_ktp dk on dp."KTP" = dk. "id" + left join daftar_subspesialis ds on dp."Subspesialis" = ds."id" + where dsk."Status_surat_kontrol" = '1' and dkp2."Nomor_sep" = ? and date(dsk."Tanggal_rencana_kontrol") between ? and ?`, req.NoSEP, req.TanggalAwal, req.TanggalAkhir).Find(&dataSurKon).Error + if err != nil { + log.Println(err) + return nil, err + } + log.Println("Data Surat Kontrol : ", dataSurKon) + return dataSurKon, nil +} + +func GetDataSurKonByPoliklinik(req suratkontrol.RequestCariPasien) ([]*suratkontrol.GetDataSuratKontrol, error) { + var dataSurKon []*suratkontrol.GetDataSuratKontrol + err := config.SatuDataDB.Debug().Raw(`select dsk."id", dsk."Tanggal_cetak_surat_kontrol", dsk."Tanggal_rencana_kontrol", + dsk."Nomor_surat_kontrol", + (select dlr."Nama" + from data_kunjungan_pasien dkp + left join daftar_lokasi_ruang dlr on dkp."Ruangan" = dlr.id where dkp."id" = dsk."Kunjungan_pasien" LIMIT 1) as "Poli_asal", + dlr."Nama" as "Poli_tuju", + dkp2."Nomor_sep", dkp2."Nama_lengkap", dkp2."IDXDAFTAR", + array( + select dgd. "Gelar_depan" + from data_pegawai_daftar_gelar_depan dpdgd + left join daftar_gelar_depan dgd on dpdgd.daftar_gelar_depan_id = dgd.id where dpdgd.data_pegawai_id = dp.id + ) AS gelardepan , + dk."Nama_lengkap" as "Nama_lengkap_dokter", + array( + select dgb. "Gelar_belakang" + from data_pegawai_daftar_gelar_belakang dpdgb + left join daftar_gelar_belakang dgb on dpdgb.daftar_gelar_belakang_id = dgb.id where dpdgb.data_pegawai_id = dp.id + ) AS gelarbelakang, + ds."Subspesialis", + ds."Kode" as "Kode_poli", + dp."HFIS_code" as "Kode_dokter" + from data_surat_kontrol dsk + left join data_kunjungan_pasien dkp2 on dkp2."id" = dsk."Kunjungan_pasien" + left join daftar_lokasi_ruang dlr on dsk."Ruangan_surat_kontrol" = dlr."id" + left join data_pegawai dp on dsk."DPJP_surat_kontrol" = dp."id" + left join data_ktp dk on dp."KTP" = dk. "id" + left join daftar_subspesialis ds on dp."Subspesialis" = ds."id" + where dsk."Status_surat_kontrol" = '1' and ds."id" = ? and date(dsk."Tanggal_rencana_kontrol") between ? and ?`, req.PoliKlinik, req.TanggalAwal, req.TanggalAkhir).Find(&dataSurKon).Error + if err != nil { + log.Println(err) + return nil, err + } + log.Println("Data Surat Kontrol : ", dataSurKon) + return dataSurKon, nil +} diff --git a/handlers/bpjs/surat_kontrol/response.go b/handlers/bpjs/surat_kontrol/response.go index b079f1d..9ee8c41 100644 --- a/handlers/bpjs/surat_kontrol/response.go +++ b/handlers/bpjs/surat_kontrol/response.go @@ -11,6 +11,8 @@ import ( "io" "log" "net/http" + "strings" + "time" ) func PostData(url string, header *config.Header, headers map[string]string, request *suratkontrol.RequestHeaderRencanaKontrol) (*suratkontrol.Response, error) { @@ -116,14 +118,35 @@ func ResponseUpdateSuratKontrol(url string, header *config.Header, headers map[s } log.Println("REQ", req.Header) - client := http.Client{} + client := http.Client{ + Timeout: 10 * time.Second, + } + responses := &suratkontrol.Response{} response, err := client.Do(req) if err != nil { + if strings.Contains(strings.ToLower(err.Error()), "deadline-exceeded") { + errMsg := errors.New("context deadline exceeded") + log.Printf("error : %v", errMsg) + responses.MetaData.Message = errMsg.Error() + log.Println("responses: ", responses) + return responses, err + } log.Printf("Error making external API request: %v", err) - return nil, err + return responses, err } log.Println("RESPONSE: ", response) + if response.StatusCode == http.StatusGatewayTimeout { // 504 + errMsg := errors.New("504 Gateway Time-out") + log.Printf("error : %v", errMsg) + responses.MetaData.Code = "504" + responses.MetaData.Message = errMsg.Error() + log.Println("responses: ", responses) + return responses, err + } + + log.Println("RESPONSE: ", response) + key := header.ConsID + header.SecretKey + header.TimeStamp res, err := io.ReadAll(response.Body) if err != nil { @@ -138,7 +161,6 @@ func ResponseUpdateSuratKontrol(url string, header *config.Header, headers map[s return nil, err } - responses := &suratkontrol.Response{} if resSuratKontrolRaw.MetaData.Code != "200" { errMsg := errors.New(resSuratKontrolRaw.MetaData.Message) log.Printf("error : %v", errMsg) diff --git a/handlers/bpjs/surat_kontrol/surat_kontrol.go b/handlers/bpjs/surat_kontrol/surat_kontrol.go index f92aa9d..2ae4ac8 100644 --- a/handlers/bpjs/surat_kontrol/surat_kontrol.go +++ b/handlers/bpjs/surat_kontrol/surat_kontrol.go @@ -232,6 +232,11 @@ func UpdateSuratKontrol(c *gin.Context) { } res, err := ResponseUpdateSuratKontrol(url, header, headers, reqSuratKontrol) if err != nil { + if res.MetaData.Code == "504" { + log.Println(err) + c.JSON(http.StatusGatewayTimeout, res.MetaData) + return + } log.Println(err) c.JSON(http.StatusInternalServerError, res.MetaData) return @@ -532,3 +537,70 @@ func PrintSurKon(c *gin.Context) { log.Println("Data surkon", resSurKon) c.JSON(http.StatusOK, resSurKon) } + +func CariPasienTPP(c *gin.Context) { + var req sk.RequestCariPasien + + err := c.ShouldBindJSON(&req) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, err) + return + } + + log.Println("request :", req) + + var data []*sk.GetDataSuratKontrol + if req.NoRM != "" { + data, err = suratkontrol.GetDataSurKonByNoRM(req) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, err) + return + } + } else if req.NoSEP != "" { + data, err = suratkontrol.GetDataSurKonByNoSEP(req) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, err) + return + } + } else if req.PoliKlinik != "" { + data, err = suratkontrol.GetDataSurKonByPoliklinik(req) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, err) + return + } + } + + var resSurKon []*sk.ResponseGetDataSuratKontrol + for _, v := range data { + gelarDepan := utils.ReplaceGelar(v.GelarDepan) + gelarBelakang := utils.ReplaceGelar(v.GelarBelakang) + namaLengkap := gelarDepan + " " + v.NamaLengkapDokter + " " + gelarBelakang + namaLengkap = strings.TrimPrefix(namaLengkap, " ") + namaLengkap = strings.TrimSuffix(namaLengkap, " ") + dateCetakSurkon, _ := time.Parse(time.RFC3339, v.TglCetakSurKon) + dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02") + dateRencanaSurkon, _ := time.Parse(time.RFC3339, v.TglRencanaKontrol) + dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02") + resSurKon = append(resSurKon, &sk.ResponseGetDataSuratKontrol{ + IDDataSurKon: v.IDDataSurKon, + IDXDaftar: v.IDXDaftar, + TglCetakSurKon: dateCetakSurkonString, + TglRencanaKontrol: dateRencanaSurkonString, + NomorSurKon: v.NomorSurKon, + PoliAsal: v.PoliAsal, + PoliTujuan: v.PoliTujuan, + NomorSEP: v.NomorSEP, + NamaPasien: v.NamaPasien, + NamaDokter: namaLengkap, + NomorKartu: "", + Subspesialis: v.Subspesialis, + KodePoli: v.KodePoli, + KodeDokter: v.KodeDokter, + }) + } + c.JSON(http.StatusOK, resSurKon) +} diff --git a/main.go b/main.go index bd049f8..b6aec77 100644 --- a/main.go +++ b/main.go @@ -56,6 +56,7 @@ func main() { suratKontrol.GET("/noSuratKontrol/:noSuratKontrol", suratkontrol.GetNomorSuratKontrol) suratKontrol.GET("/noSEP/:noSEP", suratkontrol.GetSuratKontrolBySEP) suratKontrol.GET("/printSurKon/:idSurKon", suratkontrol.PrintSurKon) + suratKontrol.POST("/cari", suratkontrol.CariPasienTPP) suratKontrol.POST("/insert", suratkontrol.InsertSuratKontrol) suratKontrol.PUT("/update", suratkontrol.UpdateSuratKontrol) suratKontrol.POST("/delete", suratkontrol.DeleteSuratKontrol) diff --git a/models/bpjs/surat_kontrol/surat_kontrol.go b/models/bpjs/surat_kontrol/surat_kontrol.go index 2d37993..1d96a28 100644 --- a/models/bpjs/surat_kontrol/surat_kontrol.go +++ b/models/bpjs/surat_kontrol/surat_kontrol.go @@ -233,6 +233,7 @@ type GetDataSuratKontrol struct { Subspesialis string `gorm:"column:Subspesialis" json:"Subspesialis"` KodePoli string `gorm:"column:Kode_poli" json:"Kode_poli"` KodeDokter string `gorm:"column:Kode_dokter" json:"Kode_dokter"` + NomorKartu string `gorm:"column:No_kartu" json:"No_kartu"` } type ResponseGetDataSuratKontrol struct { @@ -251,3 +252,11 @@ type ResponseGetDataSuratKontrol struct { KodePoli string `json:"Kode_poli"` KodeDokter string `json:"Kode_dokter"` } + +type RequestCariPasien struct { + NoRM string `json:"no_rm"` + NoSEP string `json:"no_sep"` + PoliKlinik string `json:"poliklinik"` + TanggalAwal string `json:"tanggal_awal"` + TanggalAkhir string `json:"tanggal_akhir"` +}