473 lines
12 KiB
Go
473 lines
12 KiB
Go
|
package service
|
|||
|
|
|||
|
import (
|
|||
|
"context"
|
|||
|
"fmt"
|
|||
|
"sync"
|
|||
|
"time"
|
|||
|
|
|||
|
"dubbo.apache.org/dubbo-go/v3/common/logger"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/api/account"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/api/health"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/e"
|
|||
|
"github.com/fonchain_enterprise/utils/feie"
|
|||
|
"github.com/gin-gonic/gin"
|
|||
|
)
|
|||
|
|
|||
|
//DelHealthAppoint 基础预约
|
|||
|
func DelHealthAppoint(c *gin.Context) {
|
|||
|
var req health.DelAppointReq
|
|||
|
if err := c.ShouldBind(&req); err != nil {
|
|||
|
logger.Errorf("Select ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
resp, err := GrpcHealthImpl.DelAppoint(context.Background(), &req)
|
|||
|
if err != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
ResponseQuickMsg(c, e.Ok, "", resp)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
//UpdateHealthAppoint 基础预约
|
|||
|
func UpdateHealthAppoint(c *gin.Context) {
|
|||
|
var req health.Appoint
|
|||
|
if err := c.ShouldBind(&req); err != nil {
|
|||
|
logger.Errorf("Select ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
resp, err := GrpcHealthImpl.UpdateAppoint(context.Background(), &req)
|
|||
|
if err != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
ResponseQuickMsg(c, e.Ok, "", resp)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
//HealthAppointList 基础预约
|
|||
|
func HealthAppointList(c *gin.Context) {
|
|||
|
var req health.AppointListReq
|
|||
|
if err := c.ShouldBind(&req); err != nil {
|
|||
|
logger.Errorf("Select ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
resp, err := GrpcHealthImpl.AppointList(context.Background(), &req)
|
|||
|
if err != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
ResponseQuickMsg(c, e.Ok, "", resp)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
//医生信息列表
|
|||
|
func DoctorList(c *gin.Context) {
|
|||
|
var req health.DoctorListreq
|
|||
|
if err := c.ShouldBind(&req); err != nil {
|
|||
|
logger.Errorf("Select ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
resp, err := GrpcHealthImpl.DoctorList(context.Background(), &req)
|
|||
|
if err != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
ResponseQuickMsg(c, e.Ok, resp.Msg, resp)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 预约列表
|
|||
|
func PreList(c *gin.Context) {
|
|||
|
var req health.PreListreq
|
|||
|
if err := c.ShouldBind(&req); err != nil {
|
|||
|
logger.Errorf("Select ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
resp, err := GrpcHealthImpl.PreList(context.Background(), &req)
|
|||
|
if err != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
ResponseQuickMsg(c, e.Ok, resp.Msg, resp)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 预约详情
|
|||
|
func PreInfo(c *gin.Context) {
|
|||
|
var req health.PreInforeq
|
|||
|
if err := c.ShouldBind(&req); err != nil {
|
|||
|
logger.Errorf("Select ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
resp, err := GrpcHealthImpl.PreInfo(context.Background(), &req)
|
|||
|
if err != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
ResponseQuickMsg(c, e.Ok, resp.Msg, resp)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 更新预约
|
|||
|
func UpdatePre(c *gin.Context) {
|
|||
|
var req health.UpdatePrereq
|
|||
|
if err := c.ShouldBind(&req); err != nil {
|
|||
|
logger.Errorf("Select ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
resp, err := GrpcHealthImpl.UpdatePre(context.Background(), &req)
|
|||
|
if err != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
ResponseQuickMsg(c, e.Ok, resp.Msg, resp)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func UpdateStreet(c *gin.Context) {
|
|||
|
var req health.UpdateStreetreq
|
|||
|
if err := c.ShouldBind(&req); err != nil {
|
|||
|
logger.Errorf("Select ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
resp, err := GrpcHealthImpl.UpdateStreet(context.Background(), &req)
|
|||
|
if err != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
ResponseQuickMsg(c, e.Ok, resp.Msg, resp)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 发送电子病历给咨询的人
|
|||
|
func SendMedical(c *gin.Context) {
|
|||
|
|
|||
|
var req health.PreInforeq
|
|||
|
if err := c.ShouldBind(&req); err != nil {
|
|||
|
logger.Errorf("Select ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
resp, err := GrpcHealthImpl.PreInfo(context.Background(), &req)
|
|||
|
fmt.Println("返回的结果:", resp)
|
|||
|
fmt.Println("发送电子病历错误:", err)
|
|||
|
if err != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 发送电子病历的短信给预约人
|
|||
|
url1 := fmt.Sprintf("https://yiyijian.szjixun.cn/#/pages/doctor/medicalrecord?uuid=%s", resp.Uuid)
|
|||
|
fmt.Println("url1", url1)
|
|||
|
//todo 拉取了dev分支后,这个方法没有
|
|||
|
// shortUrl, err := utils.CreateShortUrl(url1)
|
|||
|
// if err == nil {
|
|||
|
// url1 = shortUrl
|
|||
|
// }
|
|||
|
_, err1 := AccountProvider.SendExCustomMsg(c, &account.SendCustomMsgRequest{
|
|||
|
TelNum: resp.TelNum,
|
|||
|
Url: url1,
|
|||
|
MId: 143940, //模板Id
|
|||
|
SigNo: 185579, //签名id
|
|||
|
})
|
|||
|
if err1 != nil {
|
|||
|
fmt.Println("err1是:", err1)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 更新发送短信的接口
|
|||
|
var msgreq health.UpdateMsgreq
|
|||
|
|
|||
|
msgreq.Uuid = resp.Uuid
|
|||
|
fmt.Println(msgreq.Uuid)
|
|||
|
_, err2 := GrpcHealthImpl.UpdateMsg(context.Background(), &msgreq)
|
|||
|
if err2 != nil {
|
|||
|
ResponseQuickMsg(c, e.Ok, err.Error(), "更新失败")
|
|||
|
return
|
|||
|
}
|
|||
|
ResponseQuickMsg(c, e.Ok, resp.Msg, resp)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 发送预约相关信息
|
|||
|
func SendPremsg(c *gin.Context) {
|
|||
|
var req health.PreInforeq
|
|||
|
if err := c.ShouldBind(&req); err != nil {
|
|||
|
logger.Errorf("Select ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
resp, err := GrpcHealthImpl.PreInfo(context.Background(), &req)
|
|||
|
if err != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 发送电子病历的短信给预约人
|
|||
|
// url1 := fmt.Sprintf("https://yiyijian.szjixun.cn/#/pages/doctor/medicalrecord?uuid=%s", req.Uuid)
|
|||
|
url2 := resp.Name + "||" + resp.VisitNum + "||" + resp.ChatTime + "||" + "9点~12点" + "||" + resp.ChatLoca + "||" + resp.BelongDepartment + "||" + resp.DrName + "||" + "https://yiyijian.szjixun.cn/#/pages/navigation/navigation?id=0"
|
|||
|
fmt.Println("url2", url2)
|
|||
|
//todo 拉取了dev分支后,这个方法没有
|
|||
|
// shortUrl, err := utils.CreateShortUrl(url1)
|
|||
|
// if err == nil {
|
|||
|
// url1 = shortUrl
|
|||
|
// }
|
|||
|
_, err1 := AccountProvider.SendExCustomMsg(c, &account.SendCustomMsgRequest{
|
|||
|
TelNum: resp.TelNum,
|
|||
|
Url: url2,
|
|||
|
MId: 144205, //模板Id
|
|||
|
SigNo: 185579, //签名id
|
|||
|
})
|
|||
|
if err1 != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
ResponseQuickMsg(c, e.Ok, resp.Msg, resp)
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 一个预约增加科室
|
|||
|
func AddDr(c *gin.Context) {
|
|||
|
|
|||
|
// 使用互斥锁来保证并发控制
|
|||
|
callSignMutex.Lock()
|
|||
|
defer callSignMutex.Unlock()
|
|||
|
|
|||
|
// 获取当前时间
|
|||
|
currentTime := time.Now()
|
|||
|
|
|||
|
// 计算与上次调用的时间间隔
|
|||
|
timeDiff := currentTime.Sub(lastCallTime)
|
|||
|
|
|||
|
// 如果时间间隔小于2秒,则拒绝调用
|
|||
|
if timeDiff < 2*time.Second {
|
|||
|
ResponseQuickMsg(c, e.Failed, "叫号太频繁,请等待打票机打票后再叫号。", nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 更新上次调用时间为当前时间
|
|||
|
lastCallTime = currentTime
|
|||
|
|
|||
|
var req health.AddDrreq
|
|||
|
if err := c.ShouldBind(&req); err != nil {
|
|||
|
logger.Errorf("Select ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
resp, err := GrpcHealthImpl.AddDr(context.Background(), &req)
|
|||
|
if err != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
ResponseQuickMsg(c, e.Ok, resp.Msg, resp)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
var callSignMutex sync.Mutex
|
|||
|
var lastCallTime time.Time
|
|||
|
|
|||
|
// 叫号
|
|||
|
func CallSign(c *gin.Context) {
|
|||
|
|
|||
|
// 使用互斥锁来保证并发控制
|
|||
|
callSignMutex.Lock()
|
|||
|
defer callSignMutex.Unlock()
|
|||
|
|
|||
|
// 获取当前时间
|
|||
|
currentTime := time.Now()
|
|||
|
|
|||
|
// 计算与上次调用的时间间隔
|
|||
|
timeDiff := currentTime.Sub(lastCallTime)
|
|||
|
|
|||
|
// 如果时间间隔小于2秒,则拒绝调用
|
|||
|
if timeDiff < 2*time.Second {
|
|||
|
ResponseQuickMsg(c, e.Failed, "叫号太频繁,请等待打票机打票后再叫号。", nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 更新上次调用时间为当前时间
|
|||
|
lastCallTime = currentTime
|
|||
|
|
|||
|
var req health.CallSignreq
|
|||
|
if err := c.ShouldBind(&req); err != nil {
|
|||
|
logger.Errorf("Select ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
resp, err := GrpcHealthImpl.CallSign(context.Background(), &req)
|
|||
|
if err != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 得到预约人姓名
|
|||
|
var namereq health.PreInforeq
|
|||
|
namereq.Uuid = req.Uuid
|
|||
|
namereq.BelongDepartment = DrDepartment[req.DrName]
|
|||
|
fmt.Println("详情uuid:", namereq.Uuid)
|
|||
|
fmt.Println("所属科室:", namereq.BelongDepartment)
|
|||
|
|
|||
|
nameresp, err1 := GrpcHealthImpl.PreInfo(context.Background(), &namereq)
|
|||
|
if err1 != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err1.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
feie := &feie.Feie{
|
|||
|
|
|||
|
User: "chenyao@taifeng.ltd",
|
|||
|
Ukey: "8mxyRrjhCKzB4Pde",
|
|||
|
Url: "http://api.feieyun.cn/Api/Open/",
|
|||
|
}
|
|||
|
|
|||
|
t := time.Now()
|
|||
|
formattedTime := t.Format("2006-01-02 15:04:05")
|
|||
|
fmt.Println(formattedTime)
|
|||
|
|
|||
|
content := "<CB>" + resp.VisitNum + "</CB><BR><BR>" +
|
|||
|
"预约人 :" + nameresp.Name + "<BR><BR>" +
|
|||
|
"取号时间: " + formattedTime + "<BR><BR>" +
|
|||
|
"地点 : 苏州市姑苏区十梓街116-3号<BR><BR>"
|
|||
|
|
|||
|
fmt.Println(feie.PrintNativeContent("922455004", content))
|
|||
|
|
|||
|
ResponseQuickMsg(c, e.Ok, resp.Msg, resp)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 医生和对应科室
|
|||
|
var DrDepartment = map[string]string{
|
|||
|
"包肇华": "骨科",
|
|||
|
"李纲": "泌尿外科",
|
|||
|
"田力平": "普外科(甲状腺乳腺外科门诊)",
|
|||
|
"温晓持": "消化内科",
|
|||
|
}
|
|||
|
|
|||
|
// 插队
|
|||
|
func QueueUp(c *gin.Context) {
|
|||
|
// 使用互斥锁来保证并发控制
|
|||
|
callSignMutex.Lock()
|
|||
|
defer callSignMutex.Unlock()
|
|||
|
|
|||
|
// 获取当前时间
|
|||
|
currentTime := time.Now()
|
|||
|
|
|||
|
// 计算与上次调用的时间间隔
|
|||
|
timeDiff := currentTime.Sub(lastCallTime)
|
|||
|
|
|||
|
// 如果时间间隔小于2秒,则拒绝调用
|
|||
|
if timeDiff < 2*time.Second {
|
|||
|
ResponseQuickMsg(c, e.Failed, "插队太频繁,请在打票机打票之后重试。", nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 更新上次调用时间为当前时间
|
|||
|
lastCallTime = currentTime
|
|||
|
|
|||
|
var req health.QueueUpreq
|
|||
|
if err := c.ShouldBind(&req); err != nil {
|
|||
|
logger.Errorf("Select ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
resp, err := GrpcHealthImpl.QueueUp(context.Background(), &req)
|
|||
|
if err != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 得到预约人姓名
|
|||
|
var namereq health.PreInforeq
|
|||
|
namereq.Uuid = req.Uuid
|
|||
|
namereq.BelongDepartment = DrDepartment[req.DrName]
|
|||
|
fmt.Println("详情uuid:", namereq.Uuid)
|
|||
|
fmt.Println("所属科室:", namereq.BelongDepartment)
|
|||
|
nameresp, err1 := GrpcHealthImpl.PreInfo(context.Background(), &namereq)
|
|||
|
if err1 != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err1.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 插队的打印
|
|||
|
feie := &feie.Feie{
|
|||
|
|
|||
|
User: "chenyao@taifeng.ltd",
|
|||
|
Ukey: "8mxyRrjhCKzB4Pde",
|
|||
|
Url: "http://api.feieyun.cn/Api/Open/",
|
|||
|
}
|
|||
|
|
|||
|
t := time.Now()
|
|||
|
formattedTime := t.Format("2006-01-02 15:04:05")
|
|||
|
fmt.Println(formattedTime)
|
|||
|
|
|||
|
content := "<CB>" + resp.VisitNum + "</CB><BR><BR>" +
|
|||
|
"预约人 :" + nameresp.Name + "<BR><BR>" +
|
|||
|
"取号时间: " + formattedTime + "<BR><BR>" +
|
|||
|
"地点 : 苏州市姑苏区十梓街116-3号<BR><BR>"
|
|||
|
|
|||
|
fmt.Println(feie.PrintNativeContent("922455004", content))
|
|||
|
|
|||
|
ResponseQuickMsg(c, e.Ok, resp.Msg, resp)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
//医生和对应科室
|
|||
|
func DrDe(c *gin.Context) {
|
|||
|
var req health.DrDereq
|
|||
|
if err := c.ShouldBind(&req); err != nil {
|
|||
|
logger.Errorf("Select ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
resp, err := GrpcHealthImpl.DrDe(context.Background(), &req)
|
|||
|
if err != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
ResponseQuickMsg(c, e.Ok, "", resp)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 删除科室
|
|||
|
func DelExAdd(c *gin.Context) {
|
|||
|
var req health.DelExAddreq
|
|||
|
if err := c.ShouldBind(&req); err != nil {
|
|||
|
logger.Errorf("Select ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
resp, err := GrpcHealthImpl.DelExAdd(context.Background(), &req)
|
|||
|
if err != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
ResponseQuickMsg(c, e.Ok, "", resp)
|
|||
|
return
|
|||
|
}
|