265 lines
6.0 KiB
Go
265 lines
6.0 KiB
Go
package icare
|
|
|
|
import (
|
|
"bridging-rssa/database/satu_data/dokter"
|
|
log_api "bridging-rssa/database/satu_data/log_api"
|
|
"bridging-rssa/database/satu_data/pasien"
|
|
"bridging-rssa/models/config"
|
|
logapi "bridging-rssa/models/log_api"
|
|
"encoding/json"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
cfg "bridging-rssa/config"
|
|
ic "bridging-rssa/models/bpjs/i_care"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
func GetFKRTL(c *gin.Context) {
|
|
baseUrl := os.Getenv("BASEURL_BPJS")
|
|
endpoint := os.Getenv("I_CARE_JKN")
|
|
param := os.Getenv("GET_FKRTL")
|
|
url := baseUrl + endpoint + param
|
|
|
|
log.Println("URL :", url)
|
|
var req *ic.ReqICare
|
|
|
|
err := c.Bind(&req)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
|
Code: 0,
|
|
Message: err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
reqICare := &ic.RequestICare{
|
|
Param: req.Param,
|
|
KodeDokter: req.KodeDokter,
|
|
}
|
|
|
|
reqJson, errMarshal := json.Marshal(reqICare)
|
|
if errMarshal != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
|
Code: 0,
|
|
Message: errMarshal.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
log.Println("REQUEST: ", string(reqJson))
|
|
|
|
conf := config.ConfigBpjs{}
|
|
|
|
icare := true
|
|
header := cfg.SetHeader(icare, conf)
|
|
|
|
headers := map[string]string{
|
|
"X-cons-id": header.ConsID,
|
|
"X-timestamp": header.TimeStamp,
|
|
"X-signature": header.XSignature,
|
|
"user_key": header.UserKey,
|
|
"Content-Type": "application/json",
|
|
}
|
|
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(), "; ")
|
|
|
|
dpjp := strconv.Itoa(req.KodeDokter)
|
|
|
|
dataDokter, err := dokter.GetHFISCode(dpjp)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
|
Code: 0,
|
|
Message: err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
reqICare.KodeDokter, err = strconv.Atoi(dataDokter.HfisCode)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
|
Code: 0,
|
|
Message: err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
kunjunganPasien, err := pasien.GetDataKunjunganPasien(req.IDXDaftar)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
|
Code: 0,
|
|
Message: err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
uuid := uuid.New().String()
|
|
logTimeStart := time.Now().Format("2006-01-02 15:04:05")
|
|
res, err := ResponseGetFKRTL(url, header, headers, reqICare)
|
|
if err != nil {
|
|
responJson, errMarshal2 := json.Marshal(res)
|
|
if errMarshal2 != nil {
|
|
log.Println(errMarshal2)
|
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
|
Code: 0,
|
|
Message: errMarshal2.Error(),
|
|
})
|
|
return
|
|
}
|
|
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
|
|
reqInsertLog := &logapi.DataLogAPI{
|
|
ID: uuid,
|
|
DateCreated: logTimeEnd,
|
|
UserAgent: req.User,
|
|
IP: c.ClientIP(),
|
|
Parameter: "BPJS-ICare-FKRTL",
|
|
Header: headerString,
|
|
Method: "POST",
|
|
Url: url,
|
|
Request: reqJson,
|
|
Respon: responJson,
|
|
ResponCode: strconv.Itoa(res.MetaData.Code),
|
|
ResponTimeStart: logTimeStart,
|
|
ResponTimeEnd: logTimeEnd,
|
|
Comment: res.MetaData.Message,
|
|
}
|
|
|
|
errInsert := log_api.InsertLogAPI(reqInsertLog)
|
|
if errInsert != nil {
|
|
log.Println(errInsert)
|
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
|
Code: 0,
|
|
Message: errInsert.Error(),
|
|
})
|
|
return
|
|
}
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
|
Code: 0,
|
|
Message: err.Error(),
|
|
})
|
|
return
|
|
}
|
|
responJson, err := json.Marshal(res)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
|
Code: 0,
|
|
Message: err.Error(),
|
|
})
|
|
return
|
|
}
|
|
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
|
|
reqInsertLog := &logapi.DataLogAPI{
|
|
ID: uuid,
|
|
DateCreated: logTimeEnd,
|
|
UserAgent: req.User,
|
|
IP: c.ClientIP(),
|
|
Parameter: "BPJS-ICare-FKRTL",
|
|
Header: headerString,
|
|
Method: "POST",
|
|
Url: url,
|
|
Request: reqJson,
|
|
Respon: responJson,
|
|
ResponCode: strconv.Itoa(res.MetaData.Code),
|
|
ResponTimeStart: logTimeStart,
|
|
ResponTimeEnd: logTimeEnd,
|
|
Comment: res.MetaData.Message,
|
|
}
|
|
|
|
err = log_api.InsertLogAPI(reqInsertLog)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
|
Code: 0,
|
|
Message: err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
reqInsert := &logapi.InsertLogICare{
|
|
ID: uuid,
|
|
DateCreated: logTimeEnd,
|
|
Ruangan: kunjunganPasien.Ruangan,
|
|
Dokter: dataDokter.ID,
|
|
Kunjungan_pasien: kunjunganPasien.ID,
|
|
WaktuTransaksi: logTimeEnd,
|
|
}
|
|
|
|
errInsert := log_api.InsertLogICare(reqInsert)
|
|
if errInsert != nil {
|
|
log.Println(errInsert)
|
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
|
Code: 0,
|
|
Message: errInsert.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, res)
|
|
}
|
|
|
|
func GetFKTP(c *gin.Context) {
|
|
baseUrl := os.Getenv("BASEURL_BPJS")
|
|
endpoint := os.Getenv("I_CARE_JKN")
|
|
param := os.Getenv("GET_FKRTL")
|
|
url := baseUrl + endpoint + param
|
|
|
|
log.Println("URL :", url)
|
|
var req *ic.RequestICare
|
|
|
|
err := c.Bind(&req)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
|
Code: 0,
|
|
Message: err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
log.Println("REQUEST: ", req)
|
|
|
|
conf := config.ConfigBpjs{}
|
|
|
|
header := cfg.SetHeaderDev(false, conf)
|
|
|
|
headers := map[string]string{
|
|
"X-cons-id": header.ConsID,
|
|
"X-timestamp": header.TimeStamp,
|
|
"X-signature": header.XSignature,
|
|
"user_key": header.UserKey,
|
|
"Content-Type": "application/json",
|
|
}
|
|
log.Println("Headers : ", headers)
|
|
|
|
res, err := ResponseGetFKRTL(url, header, headers, req)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
|
Code: 0,
|
|
Message: err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, res)
|
|
}
|