update get data surkon

This commit is contained in:
2025-02-04 07:43:34 +07:00
parent 4dacf4910b
commit 882bdd1a3e
7 changed files with 783 additions and 503 deletions

No files matched your search

@@ -3,6 +3,7 @@ package dokter
import (
"bridging-rssa/config"
"bridging-rssa/models/bpjs/jadwal_dokter"
"gorm.io/gorm"
"log"
"strconv"
@@ -120,3 +121,13 @@ func InsertJadwalDokterTemp(reqInsert *jadwal_dokter.JadwalDokterSatuData) error
log.Println("Success insert data")
return nil
}
func InsertDataJadwalDokter(tx *gorm.DB, reqInsert *jadwal_dokter.DataJadwalDokterSatuData) error {
err := tx.Debug().Exec(`insert into "data_jadwal_dokter" ("id", "Hari", "Nama_hari", "Waktu", "Dokter", "Spesialis", "Sub_spesialis", "Tanggal_jadwal") values (?, ?, ? ,?, ?, ?, ?, ?)`, reqInsert.ID, reqInsert.Hari, reqInsert.NamaHari, reqInsert.Waktu, reqInsert.Dokter, reqInsert.Spesialis, reqInsert.SubSpesialis, reqInsert.TanggalJadwal).Error
if err != nil {
log.Printf("Failed insert data : %v", err)
return err
}
log.Println("Success insert data")
return nil
}
@@ -127,7 +127,7 @@ func GetDataSuratKontrol(offset, limit string) ([]*suratkontrol.GetDataSuratKont
return dataSurKon, nil
}
func GetDataSuratKontrolByID(idxdaftar string, tipe string) (*suratkontrol.GetDataSuratKontrol, error) {
func GetDataSuratKontrolByIDTipe(idxdaftar string, tipe string) (*suratkontrol.GetDataSuratKontrol, error) {
var dataSurKon *suratkontrol.GetDataSuratKontrol
err := config.SatuDataDB.Raw(`select dsk."id", dsk."Tanggal_cetak_surat_kontrol", dsk."Tanggal_rencana_kontrol",
dsk."Nomor_surat_kontrol",
@@ -167,7 +167,55 @@ func GetDataSuratKontrolByID(idxdaftar string, tipe string) (*suratkontrol.GetDa
where dsk."Status_surat_kontrol" = '1' and dkp2."IDXDAFTAR" = ? and dsk."Tipe_rawat" = ?`, idxdaftar, tipe).First(&dataSurKon).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
errMsg := errors.New("DPJP anda belum ada subspesialis")
errMsg := errors.New("Data tidak ada")
log.Println(errMsg)
return nil, errMsg
}
}
return dataSurKon, nil
}
func GetDataSuratKontrolByID(idxdaftar string) (*suratkontrol.GetDataSuratKontrol, error) {
var dataSurKon *suratkontrol.GetDataSuratKontrol
err := config.SatuDataDB.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",
ds."id" as "ID_poli",
dp."HFIS_code" as "Kode_dokter",
dp."id" as "id_dokter",
dp."Code_dpjp" as "Kode_dpjp",
dkp2."NOMR" as "No_rm",
dkp2."Diagnosis_primer_utama" as "Kode_diagnosa",
dkp2."Display_diagnosis_primer_utama" as "Nama_diagnosa",
dsk."Tipe_surat_kontrol" as "Tipe_SurKon",
dsk."User_created_surat_kontrol" as "User"
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."IDXDAFTAR" = ?`, idxdaftar).First(&dataSurKon).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
errMsg := errors.New("Data tidak ada")
log.Println(errMsg)
return nil, errMsg
}
+499 -328
View File
@@ -1,328 +1,499 @@
package jadwal_dokter
import (
cfg "bridging-rssa/config"
"bridging-rssa/database/satu_data/dokter"
"bridging-rssa/docs/utils"
"bridging-rssa/models/bpjs/jadwal_dokter"
"bridging-rssa/models/config"
dktr "bridging-rssa/models/dokter"
"log"
"net/http"
"os"
"strconv"
"strings"
"time"
"github.com/gin-gonic/gin"
)
func GetJadwalDokter() bool {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("ANTREAN_RS")
url := baseUrl + endpoint
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,
}
errTruncate := dokter.DeleteJadwalDokter()
if errTruncate != nil {
log.Println(errTruncate)
return false
}
errTruncateTemp := dokter.DeleteJadwalDokterTemp()
if errTruncateTemp != nil {
log.Println(errTruncateTemp)
return false
}
// Select from daftar spesialis
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
var res *[]jadwal_dokter.ListDokter
for _, value := range spesialis {
tanggal := time.Now().Format("2006-01-02")
for i := 0; i < 7; i++ {
kdPoly := value.Kode
res, err = JadwalDokterGetResponse(url, header, kdPoly, tanggal, headers)
if err != nil {
log.Println("Error making external API request: %v", err)
return false
}
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 :", tanggal)
if res == nil {
log.Println("Skip Proses")
continue
}
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
}
}
}
}
}
return true
}
func GetDokterByDPJP(c *gin.Context) {
dpjp := c.Param("dpjp")
idDokter, err := dokter.GetJadwalDokterByDPJP(dpjp)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
return
}
listHari, err := dokter.GetJadwalHariDokterBySpesialis(idDokter)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
return
}
var IDDokter []string
var idSubspesialis int
for _, v := range listHari {
IDDokter = append(IDDokter, v.Dokter)
idSubspesialis = v.SubSpesialis
break
}
namaDokter, err := dokter.GetNamaLengkapDokter(IDDokter)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
return
}
listSubspesialis, err := dokter.GetSubspesialisByID(idSubspesialis)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
var res *jadwal_dokter.ResponseListHari
for _, k := range namaDokter {
var jadwalDokter []jadwal_dokter.ListJadwalDokter
for _, key := range listHari {
jadwalDokter = append(jadwalDokter, jadwal_dokter.ListJadwalDokter{
NamaHari: key.NamaHari,
KodeHari: key.Hari,
Waktu: key.Waktu,
})
}
gelarDepan := utils.ReplaceGelar(k.GelarDepan)
gelarBelakang := utils.ReplaceGelar(k.GelarBelakang)
namaLengkap := gelarDepan + " " + k.NamaLengkap + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
hfisCode := strings.TrimSpace(k.HFISCode)
res = &jadwal_dokter.ResponseListHari{
IDSpesialis: listSubspesialis.IDSpesialis,
Kode: listSubspesialis.Kode,
Spesialis: listSubspesialis.Spesialis,
Subspesialis: listSubspesialis.Subspesialis,
IDSubspesialis: listSubspesialis.ID,
NamaLengkap: namaLengkap,
HFISCode: hfisCode,
KodeDPJP: dpjp,
JadwalDokter: jadwalDokter,
IDDokter: k.ID,
}
}
log.Println("Response :", res)
c.JSON(http.StatusOK, res)
}
func GetSpesialisByDate(c *gin.Context) {
tanggal := c.Param("tanggal")
date, err := time.Parse("2006-01-02", tanggal)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
hari := date.Local().Weekday().String()
hari = utils.ConvertDay(hari)
idSpesialis, err := dokter.GetJadwalDokterByDate(hari)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
listSpesialis, err := dokter.GetSpesialisByID(idSpesialis)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
c.JSON(http.StatusOK, listSpesialis)
}
func GetJadwalSubspesialisByDate(c *gin.Context) {
tanggal := c.Param("tanggal")
date, err := time.Parse("2006-01-02", tanggal)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
log.Println("tanggal: ", tanggal)
hari := date.Local().Weekday().String()
hari = utils.ConvertDay(hari)
idsubspesialis, err := dokter.GetJadwalSubspesialisByDate(hari)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
listSpesialis, err := dokter.GetSubspesialisByIDBatch(idsubspesialis)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
c.JSON(http.StatusOK, listSpesialis)
}
func GetDokterBySpesialis(c *gin.Context) {
spesialis := c.Param("spesialis")
tanggal := c.Param("tanggal")
date, err := time.Parse("2006-01-02", tanggal)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
hari := date.Local().Weekday().String()
hari = utils.ConvertDay(hari)
idDokter, err := dokter.GetJadwalDokterBySpesialis(hari, spesialis)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
namaDokter, err := dokter.GetNamaLengkapDokter(idDokter)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
var resDokter []dktr.ResponseDokter
idSpesialis, err := strconv.Atoi(spesialis)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
for _, v := range namaDokter {
gelarDepan := utils.ReplaceGelar(v.GelarDepan)
gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
namaLengkap := gelarDepan + " " + v.NamaLengkap + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
resDokter = append(resDokter, dktr.ResponseDokter{
ID: v.ID,
NamaLengkap: namaLengkap,
Spesialis: idSpesialis,
HFISCode: v.HFISCode,
})
}
log.Println("Response :", resDokter)
c.JSON(http.StatusOK, resDokter)
}
func GetDokterBySubspesialis(c *gin.Context) {
subspesialis := c.Param("subspesialis")
tanggal := c.Param("tanggal")
date, err := time.Parse("2006-01-02", tanggal)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
log.Println("subspesialis: ", subspesialis)
log.Println("tanggal: ", tanggal)
hari := date.Local().Weekday().String()
hari = utils.ConvertDay(hari)
idDokter, err := dokter.GetJadwalDokterBySubpesialis(hari, subspesialis)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
namaDokter, err := dokter.GetNamaLengkapDokter(idDokter)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
var resDokter []dktr.ResponseDokterNew
idSubspesialis, err := strconv.Atoi(subspesialis)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
listSubspesialis, err := dokter.GetSubspesialisByID(idSubspesialis)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
for _, v := range namaDokter {
gelarDepan := utils.ReplaceGelar(v.GelarDepan)
gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
namaLengkap := gelarDepan + " " + v.NamaLengkap + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
resDokter = append(resDokter, dktr.ResponseDokterNew{
ID: v.ID,
NamaLengkap: namaLengkap,
Subspesialis: idSubspesialis,
HFISCode: v.HFISCode,
KodePoli: listSubspesialis.Kode,
DPJPCode: v.DPJPCode,
})
}
log.Println("Response :", resDokter)
c.JSON(http.StatusOK, resDokter)
}
package jadwal_dokter
import (
cfg "bridging-rssa/config"
"bridging-rssa/database/satu_data/dokter"
log_api "bridging-rssa/database/satu_data/log_api"
"bridging-rssa/docs/utils"
"bridging-rssa/models/bpjs/jadwal_dokter"
"bridging-rssa/models/config"
dktr "bridging-rssa/models/dokter"
logapi "bridging-rssa/models/log_api"
"encoding/json"
"fmt"
"github.com/google/uuid"
"gorm.io/gorm"
"log"
"net/http"
"os"
"strconv"
"strings"
"time"
"github.com/gin-gonic/gin"
)
func GetJadwalDokter() bool {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("ANTREAN_RS")
url := baseUrl + endpoint
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,
}
errTruncate := dokter.DeleteJadwalDokter()
if errTruncate != nil {
log.Println(errTruncate)
return false
}
errTruncateTemp := dokter.DeleteJadwalDokterTemp()
if errTruncateTemp != nil {
log.Println(errTruncateTemp)
return false
}
// Select from daftar spesialis
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")
for i := 0; i < 7; i++ {
kdPoly := value.Kode
res, err := JadwalDokterGetResponse(url, header, kdPoly, tanggal, headers)
if err != nil {
log.Println("Error making external API request: %v", err)
return false
}
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 :", tanggal)
if res == nil {
log.Println("Skip Proses")
continue
}
for _, v := range res.Response {
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
}
}
}
}
}
return true
}
func GetDokterByDPJP(c *gin.Context) {
dpjp := c.Param("dpjp")
idDokter, err := dokter.GetJadwalDokterByDPJP(dpjp)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
return
}
listHari, err := dokter.GetJadwalHariDokterBySpesialis(idDokter)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
return
}
var IDDokter []string
var idSubspesialis int
for _, v := range listHari {
IDDokter = append(IDDokter, v.Dokter)
idSubspesialis = v.SubSpesialis
break
}
namaDokter, err := dokter.GetNamaLengkapDokter(IDDokter)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
return
}
listSubspesialis, err := dokter.GetSubspesialisByID(idSubspesialis)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
var res *jadwal_dokter.ResponseListHari
for _, k := range namaDokter {
var jadwalDokter []jadwal_dokter.ListJadwalDokter
for _, key := range listHari {
jadwalDokter = append(jadwalDokter, jadwal_dokter.ListJadwalDokter{
NamaHari: key.NamaHari,
KodeHari: key.Hari,
Waktu: key.Waktu,
})
}
gelarDepan := utils.ReplaceGelar(k.GelarDepan)
gelarBelakang := utils.ReplaceGelar(k.GelarBelakang)
namaLengkap := gelarDepan + " " + k.NamaLengkap + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
hfisCode := strings.TrimSpace(k.HFISCode)
res = &jadwal_dokter.ResponseListHari{
IDSpesialis: listSubspesialis.IDSpesialis,
Kode: listSubspesialis.Kode,
Spesialis: listSubspesialis.Spesialis,
Subspesialis: listSubspesialis.Subspesialis,
IDSubspesialis: listSubspesialis.ID,
NamaLengkap: namaLengkap,
HFISCode: hfisCode,
KodeDPJP: dpjp,
JadwalDokter: jadwalDokter,
IDDokter: k.ID,
}
}
log.Println("Response :", res)
c.JSON(http.StatusOK, res)
}
func GetSpesialisByDate(c *gin.Context) {
tanggal := c.Param("tanggal")
date, err := time.Parse("2006-01-02", tanggal)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
hari := date.Local().Weekday().String()
hari = utils.ConvertDay(hari)
idSpesialis, err := dokter.GetJadwalDokterByDate(hari)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
listSpesialis, err := dokter.GetSpesialisByID(idSpesialis)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
c.JSON(http.StatusOK, listSpesialis)
}
func GetJadwalSubspesialisByDate(c *gin.Context) {
tanggal := c.Param("tanggal")
date, err := time.Parse("2006-01-02", tanggal)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
log.Println("tanggal: ", tanggal)
hari := date.Local().Weekday().String()
hari = utils.ConvertDay(hari)
idsubspesialis, err := dokter.GetJadwalSubspesialisByDate(hari)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
listSpesialis, err := dokter.GetSubspesialisByIDBatch(idsubspesialis)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
c.JSON(http.StatusOK, listSpesialis)
}
func GetDokterBySpesialis(c *gin.Context) {
spesialis := c.Param("spesialis")
tanggal := c.Param("tanggal")
date, err := time.Parse("2006-01-02", tanggal)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
hari := date.Local().Weekday().String()
hari = utils.ConvertDay(hari)
idDokter, err := dokter.GetJadwalDokterBySpesialis(hari, spesialis)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
namaDokter, err := dokter.GetNamaLengkapDokter(idDokter)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
var resDokter []dktr.ResponseDokter
idSpesialis, err := strconv.Atoi(spesialis)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
for _, v := range namaDokter {
gelarDepan := utils.ReplaceGelar(v.GelarDepan)
gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
namaLengkap := gelarDepan + " " + v.NamaLengkap + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
resDokter = append(resDokter, dktr.ResponseDokter{
ID: v.ID,
NamaLengkap: namaLengkap,
Spesialis: idSpesialis,
HFISCode: v.HFISCode,
})
}
log.Println("Response :", resDokter)
c.JSON(http.StatusOK, resDokter)
}
func GetDokterBySubspesialis(c *gin.Context) {
subspesialis := c.Param("subspesialis")
tanggal := c.Param("tanggal")
date, err := time.Parse("2006-01-02", tanggal)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
log.Println("subspesialis: ", subspesialis)
log.Println("tanggal: ", tanggal)
hari := date.Local().Weekday().String()
hari = utils.ConvertDay(hari)
idDokter, err := dokter.GetJadwalDokterBySubpesialis(hari, subspesialis)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
namaDokter, err := dokter.GetNamaLengkapDokter(idDokter)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
var resDokter []dktr.ResponseDokterNew
idSubspesialis, err := strconv.Atoi(subspesialis)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
listSubspesialis, err := dokter.GetSubspesialisByID(idSubspesialis)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
for _, v := range namaDokter {
gelarDepan := utils.ReplaceGelar(v.GelarDepan)
gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
namaLengkap := gelarDepan + " " + v.NamaLengkap + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
resDokter = append(resDokter, dktr.ResponseDokterNew{
ID: v.ID,
NamaLengkap: namaLengkap,
Subspesialis: idSubspesialis,
HFISCode: v.HFISCode,
KodePoli: listSubspesialis.Kode,
DPJPCode: v.DPJPCode,
})
}
log.Println("Response :", resDokter)
c.JSON(http.StatusOK, resDokter)
}
func GetDataJadwalDokter() bool {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("ANTREAN_RS")
url := baseUrl + endpoint
log.Println("url", url)
conf := config.ConfigBpjs{}
spesialis, err := dokter.GetSpesialis()
if err != nil {
log.Println("Error getting spesialis", err)
return false
}
var listIdSpesialis = make(map[string]int)
for _, kodeDokter := range spesialis {
listIdSpesialis[kodeDokter.Kode] = kodeDokter.ID
}
subspesialis, err := dokter.GetSubspesialis()
if err != nil {
log.Println("Error getting subspesialis", err)
return false
}
var listIdSubspesialis = make(map[string]int)
for _, kodeDokter := range subspesialis {
listIdSubspesialis[kodeDokter.Kode] = kodeDokter.ID
}
listDokter, err := dokter.GetDokter()
if err != nil {
log.Println("Error getting dokter", err)
return false
}
var listIddokter = make(map[int]string)
for _, kodeDokter := range listDokter {
listIddokter[kodeDokter.HfisCode] = kodeDokter.ID
}
db := cfg.SatuDataDB
errTx := db.Transaction(func(tx *gorm.DB) error {
for _, value := range spesialis {
url := baseUrl + endpoint + "/jadwaldokter/kodepoli/" + value.Kode
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,
}
log.Println("Headers : ", headers)
var headerStringBuilder strings.Builder
for key, value := range headers {
headerStringBuilder.WriteString(fmt.Sprintf("%s: %s; ", key, value))
}
headerString := strings.TrimSuffix(headerStringBuilder.String(), "; ")
startDate := time.Now()
endDate := startDate.AddDate(0, 1, 0)
logTimeStart := time.Now().Format("2006-01-02 15:04:05")
var res *jadwal_dokter.JadwalDokter
var reqLog []*jadwal_dokter.RequestJadwalDokter
var resLog []*jadwal_dokter.JadwalDokter
for current := startDate; current.Before(endDate); current = current.AddDate(0, 0, 1) {
tanggal := current.Format("2006-01-02")
log.Println("Tanggal :", tanggal)
urlReq := url + "/tanggal/" + tanggal
res, err = JadwalDokterGetResponse(urlReq, header, value.Kode, tanggal, headers)
if err != nil {
log.Printf("Error making external API request: %v", err)
return err
}
reqLog = append(reqLog, &jadwal_dokter.RequestJadwalDokter{
KodePoli: value.Kode,
Tanggal: tanggal,
})
resLog = append(resLog, &jadwal_dokter.JadwalDokter{
Response: res.Response,
MetaData: res.MetaData,
})
if res.MetaData.Code != 200 {
resLog = append(resLog, &jadwal_dokter.JadwalDokter{
Response: res.Response,
MetaData: res.MetaData,
})
continue
}
for _, v := range res.Response {
idSpesialis := utils.KodeToIDConverter(v.KodePoli, listIdSpesialis)
idSubspesialis := utils.KodeToIDConverter(v.KodeSubspesialis, listIdSubspesialis)
idDokter := utils.HfisCodeToIDConverter(v.KodeDokter, listIddokter)
reqInsert := &jadwal_dokter.DataJadwalDokterSatuData{
ID: uuid.NewString(),
DateCreated: logTimeStart,
Hari: strconv.Itoa(v.Hari),
NamaHari: v.NamaHari,
Waktu: v.Jadwal,
Dokter: idDokter,
Spesialis: idSpesialis,
SubSpesialis: idSubspesialis,
TanggalJadwal: tanggal,
}
if reqInsert.Dokter != "" {
errInsert := dokter.InsertDataJadwalDokter(tx, reqInsert)
if errInsert != nil {
log.Println(errInsert)
return errInsert
}
} else {
log.Println("Dokter tidak punya HFIS")
continue
}
}
}
reqLogJson, errMarshal := json.Marshal(reqLog)
if errMarshal != nil {
log.Println(errMarshal)
return errMarshal
}
resLogJson, errMarshal2 := json.Marshal(resLog)
if errMarshal2 != nil {
log.Println(errMarshal2)
return errMarshal2
}
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
reqLogApi := &logapi.DataLogAPI{
ID: uuid.NewString(),
DateCreated: logTimeEnd,
Parameter: "BPJS-AntreanRS-JadwalDokter",
Header: headerString,
Method: "GET",
Url: url,
Request: reqLogJson,
Respon: resLogJson,
ResponCode: strconv.Itoa(res.MetaData.Code),
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
errLog := log_api.InsertLogAPI(reqLogApi)
if errLog != nil {
log.Printf("Error making external API request: %v", err)
return errLog
}
}
return nil
})
if errTx != nil {
log.Println(errTx)
return false
}
log.Println("Berhasil ambil jadwal data dokter")
return true
}
+74 -69
View File
@@ -1,69 +1,74 @@
package jadwal_dokter
import (
"bridging-rssa/docs"
"bridging-rssa/models/bpjs/jadwal_dokter"
"bridging-rssa/models/config"
"encoding/json"
"fmt"
"io"
"log"
"net/http"
)
func JadwalDokterGetResponse(url string, header *config.Header, kdPoly string, tanggal string, headers map[string]string) (*[]jadwal_dokter.ListDokter, error) {
param := "/jadwaldokter/kodepoli/" + kdPoly + "/tanggal/" + tanggal
url += param
log.Println("URL", url)
req, err := http.NewRequest("GET", url, nil)
if err != nil {
log.Printf("Error creating request: %v", err)
}
for key, value := range headers {
req.Header.Set(key, value)
}
log.Println("REQ", req.Header)
client := http.Client{}
response, err := client.Do(req)
if err != nil {
log.Printf("Error making external API request: %v", err)
}
log.Println("RESPONSE: ", response)
key := header.ConsID + header.SecretKey + header.TimeStamp
res, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
}
var jadwalDokterRaw jadwal_dokter.JadwalDokterRaw
err = json.Unmarshal([]byte(res), &jadwalDokterRaw)
if err != nil {
log.Printf("Error Unmarshaling: %v", err)
}
if jadwalDokterRaw.MetaData.Code == 201 {
log.Println("No Data Found")
return nil, nil
}
dataResp, err := docs.StringDecrypt(key, jadwalDokterRaw.Response)
if err != nil {
log.Printf("Error Decrypt: %v", err)
}
var listDokter []jadwal_dokter.ListDokter
log.Println("dataresp: ", dataResp)
err = json.Unmarshal([]byte(dataResp), &listDokter)
if err != nil {
log.Printf("Error Decode: %v", err)
}
log.Println("res: ", &listDokter)
return &listDokter, nil
}
package jadwal_dokter
import (
"bridging-rssa/docs"
"bridging-rssa/models/bpjs/jadwal_dokter"
"bridging-rssa/models/config"
"encoding/json"
"fmt"
"io"
"log"
"net/http"
)
func JadwalDokterGetResponse(url string, header *config.Header, kdPoly string, tanggal string, headers map[string]string) (*jadwal_dokter.JadwalDokter, error) {
log.Println("URL", url)
req, err := http.NewRequest("GET", url, nil)
if err != nil {
log.Printf("Error creating request: %v", err)
}
for key, value := range headers {
req.Header.Set(key, value)
}
log.Println("REQ", req.Header)
client := http.Client{}
response, err := client.Do(req)
if err != nil {
log.Printf("Error making external API request: %v", err)
}
log.Println("RESPONSE: ", response)
key := header.ConsID + header.SecretKey + header.TimeStamp
res, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
}
var jadwalDokterRaw jadwal_dokter.JadwalDokterRaw
err = json.Unmarshal([]byte(res), &jadwalDokterRaw)
if err != nil {
log.Printf("Error Unmarshaling: %v", err)
}
responses := &jadwal_dokter.JadwalDokter{}
if jadwalDokterRaw.MetaData.Code != 200 {
responses.MetaData.Code = jadwalDokterRaw.MetaData.Code
responses.MetaData.Message = jadwalDokterRaw.MetaData.Message
log.Println("No Data Found")
return responses, nil
}
dataResp, err := docs.StringDecrypt(key, jadwalDokterRaw.Response)
if err != nil {
log.Printf("Error Decrypt: %v", err)
}
var listDokter []*jadwal_dokter.ListDokter
log.Println("dataresp: ", dataResp)
err = json.Unmarshal([]byte(dataResp), &listDokter)
if err != nil {
log.Printf("Error Decode: %v", err)
}
log.Println("res: ", &listDokter)
responses = &jadwal_dokter.JadwalDokter{
Response: listDokter,
MetaData: jadwalDokterRaw.MetaData,
}
return responses, nil
}
+44 -32
View File
@@ -949,56 +949,68 @@ func GetDataSurKon(c *gin.Context) {
func GetDataSurKonByID(c *gin.Context) {
id := c.Param("idxdaftar")
tipe := c.Param("tiperawat")
data, err := suratkontrol.GetDataSuratKontrolByID(id, tipe)
var dataSurKon *sk.GetDataSuratKontrol
dataSurKon, err := suratkontrol.GetDataSuratKontrolByIDTipe(id, tipe)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
if err.Error() == "Data tidak ada" {
dataSurKon, err = suratkontrol.GetDataSuratKontrolByID(id)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
} else {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
}
gelarDepan := utils.ReplaceGelar(data.GelarDepan)
gelarBelakang := utils.ReplaceGelar(data.GelarBelakang)
namaLengkap := gelarDepan + " " + data.NamaLengkapDokter + " " + gelarBelakang
gelarDepan := utils.ReplaceGelar(dataSurKon.GelarDepan)
gelarBelakang := utils.ReplaceGelar(dataSurKon.GelarBelakang)
namaLengkap := gelarDepan + " " + dataSurKon.NamaLengkapDokter + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
dateCetakSurkon, _ := time.Parse(time.RFC3339, data.TglCetakSurKon)
dateCetakSurkon, _ := time.Parse(time.RFC3339, dataSurKon.TglCetakSurKon)
dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02")
dateRencanaSurkon, _ := time.Parse(time.RFC3339, data.TglRencanaKontrol)
dateRencanaSurkon, _ := time.Parse(time.RFC3339, dataSurKon.TglRencanaKontrol)
dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02")
resSurKon := &sk.ResponseGetDataSuratKontrol{
IDDataSurKon: data.IDDataSurKon,
IDXDaftar: data.IDXDaftar,
IDDataSurKon: dataSurKon.IDDataSurKon,
IDXDaftar: dataSurKon.IDXDaftar,
TglCetakSurKon: dateCetakSurkonString,
TglRencanaKontrol: dateRencanaSurkonString,
NomorSurKon: data.NomorSurKon,
PoliAsal: data.PoliAsal,
PoliTujuan: data.PoliTujuan,
NomorSEP: data.NomorSEP,
NamaPasien: data.NamaPasien,
NomorSurKon: dataSurKon.NomorSurKon,
PoliAsal: dataSurKon.PoliAsal,
PoliTujuan: dataSurKon.PoliTujuan,
NomorSEP: dataSurKon.NomorSEP,
NamaPasien: dataSurKon.NamaPasien,
NamaDokter: namaLengkap,
NomorKartu: "",
Subspesialis: data.Subspesialis,
KodePoli: data.KodePoli,
KodeDokter: data.KodeDokter,
IDPoli: data.IDPoli,
IDDokter: data.IDDokter,
KodeDPJP: data.KodeDPJP,
NoRM: data.NoRM,
KodeDiagnosa: data.KodeDiagnosa,
NamaDiagnosa: data.NamaDiagnosa,
TipeSurKon: data.TipeSurKon,
User: data.User,
Subspesialis: dataSurKon.Subspesialis,
KodePoli: dataSurKon.KodePoli,
KodeDokter: dataSurKon.KodeDokter,
IDPoli: dataSurKon.IDPoli,
IDDokter: dataSurKon.IDDokter,
KodeDPJP: dataSurKon.KodeDPJP,
NoRM: dataSurKon.NoRM,
KodeDiagnosa: dataSurKon.KodeDiagnosa,
NamaDiagnosa: dataSurKon.NamaDiagnosa,
TipeSurKon: dataSurKon.TipeSurKon,
User: dataSurKon.User,
}
c.JSON(http.StatusOK, resSurKon)
}
func PrintSurKon(c *gin.Context) {
id := c.Param("idxdaftar")
tipe := c.Param("tiperawat")
data, err := suratkontrol.GetDataSuratKontrolByID(id, tipe)
data, err := suratkontrol.GetDataSuratKontrolByID(id)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
+11
View File
@@ -49,6 +49,17 @@ func main() {
// }
//})
scheduler.AddFunc("0 2 15 * *", func() {
log.Println("=== RUNNING SCHEDULE GET JADWAL DOKTER MONTHLY===")
for {
success := jadwal_dokter.GetDataJadwalDokter()
if success {
log.Println("=== SCHEDULE GET JADWAL DOKTER MONTHLY DONE ===")
break
}
}
})
go scheduler.Start()
v1 := r.Group("/api")
+94 -72
View File
@@ -1,72 +1,94 @@
package jadwal_dokter
type JadwalDokterRaw struct {
Response string `json:"response"`
MetaData Metadata `json:"metadata"`
}
type Metadata struct {
Code int `json:"code"`
Message string `json:"message"`
}
type ListDokter struct {
KodeSubspesialis string `json:"kodesubspesialis"`
Hari int `json:"hari"`
KapasitasPasien int `json:"kapasitaspasien"`
Libur int `json:"libur"`
NamaHari string `json:"namahari"`
Jadwal string `json:"jadwal"`
NamaSubspesialis string `json:"namasubspesialis"`
NamaDokter string `json:"namadokter"`
KodePoli string `json:"kodepoli"`
NamaPoli string `json:"namapoli"`
KodeDokter int `json:"kodedokter"`
}
type DaftarSpesialis struct {
ID int `json:"id"`
Kode string `json:"Kode"`
Spesialis string `json:"Spesialis"`
}
type JadwalDokterSatuData struct {
ID int `gorm:"column:id" json:"id"`
Hari int `gorm:"column:Hari" json:"Hari"`
NamaHari string `gorm:"column:Nama_hari" json:"Nama_hari"`
Waktu string `gorm:"column:Waktu" json:"Waktu"`
Dokter string `gorm:"column:Dokter" json:"Dokter"`
Spesialis int `gorm:"column:Spesialis" json:"Spesialis"`
SubSpesialis int `gorm:"column:Sub_spesialis" json:"Sub_spesialis"`
Status int `gorm:"column:Status" json:"Status"`
}
type JadwalDokterTempSatuData struct {
ID int `gorm:"column:id" json:"id"`
Hari int `gorm:"column:Hari" json:"Hari"`
NamaHari string `gorm:"column:Nama_hari" json:"Nama_hari"`
Waktu string `gorm:"column:Waktu" json:"Waktu"`
Dokter string `gorm:"column:Dokter" json:"Dokter"`
Spesialis string `gorm:"column:Spesialis" json:"Spesialis"`
SubSpesialis string `gorm:"column:Sub_spesialis" json:"Sub_spesialis"`
Status int `gorm:"column:Status" json:"Status"`
}
type ResponseListHari struct {
IDSpesialis int `json:"id_spesialis"`
Kode string `json:"Kode"`
Spesialis string `json:"Spesialis"`
Subspesialis string `json:"Subspesialis"`
IDSubspesialis int `json:"id_subspesialis"`
NamaLengkap string `json:"nama_lengkap"`
HFISCode string `json:"HFIS_code"`
KodeDPJP string `json:"DPJP_code"`
IDDokter string `json:"id_dokter"`
JadwalDokter []ListJadwalDokter `json:"Jadwal_dokter"`
}
type ListJadwalDokter struct {
NamaHari string `json:"Nama_hari"`
KodeHari int `json:"Kode_hari"`
Waktu string `json:"Waktu"`
}
package jadwal_dokter
type JadwalDokterRaw struct {
Response string `json:"response"`
MetaData Metadata `json:"metadata"`
}
type JadwalDokter struct {
Response []*ListDokter `json:"response"`
MetaData Metadata `json:"metadata"`
}
type Metadata struct {
Code int `json:"code"`
Message string `json:"message"`
}
type ListDokter struct {
KodeSubspesialis string `json:"kodesubspesialis"`
Hari int `json:"hari"`
KapasitasPasien int `json:"kapasitaspasien"`
Libur int `json:"libur"`
NamaHari string `json:"namahari"`
Jadwal string `json:"jadwal"`
NamaSubspesialis string `json:"namasubspesialis"`
NamaDokter string `json:"namadokter"`
KodePoli string `json:"kodepoli"`
NamaPoli string `json:"namapoli"`
KodeDokter int `json:"kodedokter"`
}
type DaftarSpesialis struct {
ID int `json:"id"`
Kode string `json:"Kode"`
Spesialis string `json:"Spesialis"`
}
type JadwalDokterSatuData struct {
ID int `gorm:"column:id" json:"id"`
Hari int `gorm:"column:Hari" json:"Hari"`
NamaHari string `gorm:"column:Nama_hari" json:"Nama_hari"`
Waktu string `gorm:"column:Waktu" json:"Waktu"`
Dokter string `gorm:"column:Dokter" json:"Dokter"`
Spesialis int `gorm:"column:Spesialis" json:"Spesialis"`
SubSpesialis int `gorm:"column:Sub_spesialis" json:"Sub_spesialis"`
Status int `gorm:"column:Status" json:"Status"`
}
type DataJadwalDokterSatuData struct {
ID string `gorm:"column:id" json:"id"`
DateCreated string `gorm:"column:date_created" json:"Date_created"`
Hari string `gorm:"column:Hari" json:"Hari"`
NamaHari string `gorm:"column:Nama_hari" json:"Nama_hari"`
Waktu string `gorm:"column:Waktu" json:"Waktu"`
Dokter string `gorm:"column:Dokter" json:"Dokter"`
Spesialis int `gorm:"column:Spesialis" json:"Spesialis"`
SubSpesialis int `gorm:"column:Sub_spesialis" json:"Sub_spesialis"`
TanggalJadwal string `gorm:"column:Tanggal_jadwal" json:"Tanggal_jadwal"`
}
type JadwalDokterTempSatuData struct {
ID int `gorm:"column:id" json:"id"`
Hari int `gorm:"column:Hari" json:"Hari"`
NamaHari string `gorm:"column:Nama_hari" json:"Nama_hari"`
Waktu string `gorm:"column:Waktu" json:"Waktu"`
Dokter string `gorm:"column:Dokter" json:"Dokter"`
Spesialis string `gorm:"column:Spesialis" json:"Spesialis"`
SubSpesialis string `gorm:"column:Sub_spesialis" json:"Sub_spesialis"`
Status int `gorm:"column:Status" json:"Status"`
}
type ResponseListHari struct {
IDSpesialis int `json:"id_spesialis"`
Kode string `json:"Kode"`
Spesialis string `json:"Spesialis"`
Subspesialis string `json:"Subspesialis"`
IDSubspesialis int `json:"id_subspesialis"`
NamaLengkap string `json:"nama_lengkap"`
HFISCode string `json:"HFIS_code"`
KodeDPJP string `json:"DPJP_code"`
IDDokter string `json:"id_dokter"`
JadwalDokter []ListJadwalDokter `json:"Jadwal_dokter"`
}
type ListJadwalDokter struct {
NamaHari string `json:"Nama_hari"`
KodeHari int `json:"Kode_hari"`
Waktu string `json:"Waktu"`
}
type RequestJadwalDokter struct {
KodePoli string `json:"kodepoli"`
Tanggal string `json:"tanggal"`
}