zh_his_service.go 33KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938
  1. package service
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "gdyb/models"
  7. "github.com/astaxie/beego"
  8. "io/ioutil"
  9. "net/http"
  10. "strconv"
  11. "time"
  12. _ "unsafe"
  13. )
  14. // 人员基本信息
  15. func ZHGdyb1101(certNo string, org_name string, doctor string, fixmedins_code string, insuplc_admdvs string, mdtrtarea_admvs string, secret_key string, id_card_type int64, card_sn string, certificates int64) string {
  16. //生成签名
  17. nonce := GetRandomString(32)
  18. timestamp := time.Now().Unix()
  19. signature := setSignature(timestamp, nonce, secret_key)
  20. //生成输入报文
  21. inputMessage := SetInputMessage(nonce, timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs)
  22. input := make(map[string]interface{})
  23. inputData := make(map[string]interface{})
  24. inputMessage["infno"] = "1101" // 交易编码
  25. if certificates == 3 {
  26. inputData["mdtrt_cert_type"] = "99" // 就诊凭证类型
  27. inputData["certno"] = certNo // 证件号码
  28. inputData["psn_cert_type"] = "99" // 人员证件类型
  29. } else {
  30. if id_card_type == 1 {
  31. inputData["mdtrt_cert_type"] = "03" // 就诊凭证类型
  32. inputData["card_sn"] = card_sn // 卡识别码
  33. inputData["certno"] = certNo // 证件号码
  34. inputData["psn_cert_type"] = "1" // 人员证件类型
  35. } else {
  36. inputData["mdtrt_cert_type"] = "02" // 就诊凭证类型
  37. inputData["card_sn"] = "" // 卡识别码
  38. inputData["certno"] = certNo // 证件号码
  39. inputData["psn_cert_type"] = "1" // 人员证件类型
  40. }
  41. }
  42. inputData["mdtrt_cert_no"] = certNo // 就诊凭证编号
  43. inputData["begntime"] = "" // 开始时间
  44. inputData["psn_name"] = "" // 人员姓名
  45. input["data"] = inputData
  46. inputMessage["input"] = input //交易输入
  47. bytesData, err := json.Marshal(inputMessage)
  48. fmt.Println(string(bytesData))
  49. if err != nil {
  50. fmt.Println(err.Error())
  51. return err.Error()
  52. }
  53. reader := bytes.NewReader(bytesData)
  54. gdyb_url := beego.AppConfig.String("gdyb_url")
  55. gdyb_paasid := beego.AppConfig.String("gdyb_paasid")
  56. //url := "http://igb.hsa.gdgov.cn/ebus/gdyb_api/prd/hsa/hgs/1101"
  57. url := gdyb_url + "1101"
  58. //url := "http://igb.hsa.gdgov.cn/ebus/gdyb_inf/poc/hsa/hgs/1101"
  59. request, err := http.NewRequest("POST", url, reader)
  60. if err != nil {
  61. fmt.Println(err.Error())
  62. return err.Error()
  63. }
  64. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  65. request.Header.Set("x-tif-paasid", gdyb_paasid)
  66. request.Header.Set("x-tif-signature", signature)
  67. request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp, 10))
  68. request.Header.Set("x-tif-nonce", nonce)
  69. client := http.Client{}
  70. resp, err := client.Do(request)
  71. if err != nil {
  72. fmt.Println(err.Error())
  73. return err.Error()
  74. }
  75. respBytes, err := ioutil.ReadAll(resp.Body)
  76. if err != nil {
  77. fmt.Println(err.Error())
  78. return err.Error()
  79. }
  80. fmt.Println(string(respBytes))
  81. str := string(respBytes)
  82. return str
  83. }
  84. type DiseinfoStruct struct {
  85. PsnNo string
  86. DiagType string
  87. MaindiagFlag string
  88. DiagSrtNo string
  89. DiagCode string
  90. DiagName string
  91. DiagDept string
  92. DiseDorNo string
  93. DiseDorName string
  94. DiagTime string
  95. }
  96. type Struct2401 struct {
  97. PsnNo string
  98. Insutype string
  99. MdtrtCertType string
  100. MdtrtCertNo string
  101. MedType string
  102. IptNo string
  103. AtddrNo string
  104. ChfpdrName string
  105. AdmDiagDscr string
  106. AdmDeptCodg string
  107. AdmDeptName string
  108. AdmBed string
  109. DscgMaindiagCode string
  110. DscgMaindiagName string
  111. Diseinfo []DiseinfoStruct
  112. Begntime string
  113. DiseCodg string
  114. DiseName string
  115. }
  116. // 住院登记
  117. func ZHGdyb2401(struct2401 Struct2401, secret_key string, org_name string, fixmedins_code string, doctor string, insuplc_admdvs string, mdtrtarea_admvs string) string {
  118. // 生成签名
  119. nonce := GetRandomString(32)
  120. timestamp := time.Now().Unix()
  121. signature := setSignature(timestamp, nonce, secret_key)
  122. //tempTime := time.Unix(timestamp, 0)
  123. //timeFormatOne := tempTime.Format("2006-01-02 15:04:05")
  124. // 生成输入报文
  125. inputMessage := SetInputMessage(nonce, timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs)
  126. input := make(map[string]interface{})
  127. inputData := make(map[string]interface{})
  128. inputMessage["infno"] = "2201" // 交易编码
  129. inputData["psn_no"] = struct2401.PsnNo // 人员编号 (来自1101接口返回)
  130. inputData["insutype"] = struct2401.Insutype // 险种类型(来自1101接口返回)
  131. inputData["tel"] = ""
  132. inputData["coner_name"] = ""
  133. inputData["begntime"] = struct2401.Begntime // 开始时间
  134. inputData["mdtrt_cert_type"] = "02" // 就诊凭证类型
  135. inputData["mdtrt_cert_no"] = struct2401.MdtrtCertNo // 就诊凭证编号
  136. inputData["med_type"] = struct2401.MedType // 就诊凭证编号
  137. inputData["ipt_no"] = struct2401.IptNo // 住院/门诊号
  138. inputData["medrcdno"] = ""
  139. inputData["atddr_no"] = struct2401.AtddrNo
  140. inputData["chfpdr_name"] = struct2401.ChfpdrName
  141. inputData["adm_diag_dscr"] = struct2401.AdmDiagDscr
  142. inputData["adm_dept_codg"] = struct2401.AdmDeptCodg
  143. inputData["adm_dept_name"] = struct2401.AdmDeptName
  144. inputData["adm_bed"] = struct2401.AdmBed
  145. inputData["dscg_maindiag_code"] = struct2401.DscgMaindiagCode
  146. inputData["dscg_maindiag_name"] = struct2401.DscgMaindiagName
  147. inputData["main_cond_dscr"] = ""
  148. inputData["dise_codg"] = struct2401.DiseCodg
  149. inputData["dise_name"] = struct2401.DiseName
  150. inputData["oprn_oprt_code"] = ""
  151. inputData["oprn_oprt_name"] = ""
  152. inputData["fpsc_no"] = ""
  153. inputData["matn_type"] = ""
  154. inputData["birctrl_type"] = ""
  155. inputData["latechb_flag"] = ""
  156. inputData["geso_val"] = ""
  157. inputData["fetts"] = ""
  158. inputData["fetus_cnt"] = ""
  159. inputData["pret_flag"] = ""
  160. inputData["birctrl_matn_date"] = ""
  161. inputData["dise_type_code"] = ""
  162. inputDataArr := make([]map[string]interface{}, 0)
  163. for _, item := range struct2401.Diseinfo {
  164. inputDataTwo := make(map[string]interface{})
  165. inputDataTwo["psn_no"] = item.PsnNo
  166. inputDataTwo["diag_type"] = item.DiagType
  167. inputDataTwo["maindiag_flag"] = item.MaindiagFlag
  168. inputDataTwo["diag_srt_no"] = item.DiagSrtNo
  169. inputDataTwo["diag_code"] = item.DiagCode
  170. inputDataTwo["diag_name"] = item.DiagName
  171. inputDataTwo["adm_cond"] = ""
  172. inputDataTwo["diag_dept"] = item.DiagDept
  173. inputDataTwo["dise_dor_no"] = item.DiseDorNo
  174. inputDataTwo["dise_dor_name"] = item.DiseDorName
  175. inputDataTwo["diag_time"] = item.DiagTime
  176. inputDataArr = append(inputDataArr, inputDataTwo)
  177. }
  178. input["mdtrtinfo"] = inputData
  179. input["diseinfo"] = inputDataArr
  180. inputMessage["input"] = input //交易输入
  181. bytesData, err := json.Marshal(inputMessage)
  182. fmt.Println(string(bytesData))
  183. if err != nil {
  184. fmt.Println(err.Error())
  185. return err.Error()
  186. }
  187. reader := bytes.NewReader(bytesData)
  188. gdyb_url := beego.AppConfig.String("gdyb_url")
  189. gdyb_paasid := beego.AppConfig.String("gdyb_paasid")
  190. url := gdyb_url + "2401"
  191. request, err := http.NewRequest("POST", url, reader)
  192. if err != nil {
  193. fmt.Println(err.Error())
  194. return err.Error()
  195. }
  196. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  197. request.Header.Set("x-tif-paasid", gdyb_paasid)
  198. request.Header.Set("x-tif-signature", signature)
  199. request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp, 10))
  200. request.Header.Set("x-tif-nonce", nonce)
  201. client := http.Client{}
  202. resp, err := client.Do(request)
  203. if err != nil {
  204. fmt.Println(err.Error())
  205. return err.Error()
  206. }
  207. respBytes, err := ioutil.ReadAll(resp.Body)
  208. if err != nil {
  209. fmt.Println(err.Error())
  210. return err.Error()
  211. }
  212. str := string(respBytes)
  213. fmt.Println(str)
  214. return str
  215. }
  216. //住院撤销
  217. func ZHGdyb2404(mdtrt_id string, psn_no string, secret_key string, org_name string, fixmedins_code string, doctor string, insuplc_admdvs string, mdtrtarea_admvs string) string {
  218. // 生成签名
  219. nonce := GetRandomString(32)
  220. timestamp := time.Now().Unix()
  221. signature := setSignature(timestamp, nonce, secret_key)
  222. // 生成输入报文
  223. inputMessage := SetInputMessage(nonce, timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs)
  224. input := make(map[string]interface{})
  225. inputData := make(map[string]interface{})
  226. inputMessage["infno"] = "2404" // 交易编码
  227. inputData["mdtrt_id"] = mdtrt_id // 人员编号 (来自1101接口返回)
  228. inputData["psn_no"] = psn_no // 人员编号 (来自1101接口返回)
  229. input["data"] = inputData
  230. inputMessage["input"] = input //交易输入
  231. bytesData, err := json.Marshal(inputMessage)
  232. fmt.Println(string(bytesData))
  233. if err != nil {
  234. fmt.Println(err.Error())
  235. return err.Error()
  236. }
  237. reader := bytes.NewReader(bytesData)
  238. gdyb_url := beego.AppConfig.String("gdyb_url")
  239. gdyb_paasid := beego.AppConfig.String("gdyb_paasid")
  240. url := gdyb_url + "2404"
  241. request, err := http.NewRequest("POST", url, reader)
  242. if err != nil {
  243. fmt.Println(err.Error())
  244. return err.Error()
  245. }
  246. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  247. request.Header.Set("x-tif-paasid", gdyb_paasid)
  248. request.Header.Set("x-tif-signature", signature)
  249. request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp, 10))
  250. request.Header.Set("x-tif-nonce", nonce)
  251. client := http.Client{}
  252. resp, err := client.Do(request)
  253. if err != nil {
  254. fmt.Println(err.Error())
  255. return err.Error()
  256. }
  257. respBytes, err := ioutil.ReadAll(resp.Body)
  258. if err != nil {
  259. fmt.Println(err.Error())
  260. return err.Error()
  261. }
  262. str := string(respBytes)
  263. fmt.Println(str)
  264. return str
  265. }
  266. //出院撤销
  267. func ZHGdyb2405(mdtrt_id string, psn_no string, secret_key string, org_name string, fixmedins_code string, doctor string, insuplc_admdvs string, mdtrtarea_admvs string) string {
  268. // 生成签名
  269. nonce := GetRandomString(32)
  270. timestamp := time.Now().Unix()
  271. signature := setSignature(timestamp, nonce, secret_key)
  272. // 生成输入报文
  273. inputMessage := SetInputMessage(nonce, timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs)
  274. input := make(map[string]interface{})
  275. inputData := make(map[string]interface{})
  276. inputMessage["infno"] = "2405" // 交易编码
  277. inputData["mdtrt_id"] = mdtrt_id // 人员编号 (来自1101接口返回)
  278. inputData["psn_no"] = psn_no // 人员编号 (来自1101接口返回)
  279. input["data"] = inputData
  280. inputMessage["input"] = input //交易输入
  281. bytesData, err := json.Marshal(inputMessage)
  282. fmt.Println(string(bytesData))
  283. if err != nil {
  284. fmt.Println(err.Error())
  285. return err.Error()
  286. }
  287. reader := bytes.NewReader(bytesData)
  288. gdyb_url := beego.AppConfig.String("gdyb_url")
  289. gdyb_paasid := beego.AppConfig.String("gdyb_paasid")
  290. url := gdyb_url + "2405"
  291. request, err := http.NewRequest("POST", url, reader)
  292. if err != nil {
  293. fmt.Println(err.Error())
  294. return err.Error()
  295. }
  296. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  297. request.Header.Set("x-tif-paasid", gdyb_paasid)
  298. request.Header.Set("x-tif-signature", signature)
  299. request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp, 10))
  300. request.Header.Set("x-tif-nonce", nonce)
  301. client := http.Client{}
  302. resp, err := client.Do(request)
  303. if err != nil {
  304. fmt.Println(err.Error())
  305. return err.Error()
  306. }
  307. respBytes, err := ioutil.ReadAll(resp.Body)
  308. if err != nil {
  309. fmt.Println(err.Error())
  310. return err.Error()
  311. }
  312. str := string(respBytes)
  313. fmt.Println(str)
  314. return str
  315. }
  316. type Diseinfo2402Struct struct {
  317. MdtrtId string
  318. PsnNo string
  319. DiagType string
  320. MaindiagFlag string
  321. DiagSrtNo string
  322. DiagCode string
  323. DiagName string
  324. DiagDept string
  325. DiseDorNo string
  326. DiseDorName string
  327. DiagTime string
  328. }
  329. type Struct2402 struct {
  330. MdtrtId string
  331. PsnNo string
  332. Insutype string
  333. Endtime string
  334. DscgDeptCodg string
  335. DscgDeptName string
  336. DscgWay string
  337. Diseinfo []Diseinfo2402Struct
  338. DiseName string
  339. DiseCode string
  340. }
  341. // 出院
  342. func ZHGdyb2402(struct2402 Struct2402, org_name string, doctor string, insuplc_admdvs string, mdtrtarea_admvs string, secret_key string, fixmedins_code string) string {
  343. // 生成签名
  344. nonce := GetRandomString(32)
  345. timestamp := time.Now().Unix()
  346. signature := setSignature(timestamp, nonce, secret_key)
  347. //tempTime := time.Unix(timestamp, 0)
  348. //timeFormatOne := tempTime.Format("2006-01-02 15:04:05")
  349. // 生成输入报文
  350. inputMessage := SetInputMessage(nonce, timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs)
  351. input := make(map[string]interface{})
  352. inputData := make(map[string]interface{})
  353. inputMessage["infno"] = "2402" // 交易编码
  354. inputData["mdtrt_id"] = struct2402.MdtrtId // 人员编号 (来自1101接口返回)
  355. inputData["psn_no"] = struct2402.PsnNo // 人员编号 (来自1101接口返回)
  356. inputData["insutype"] = struct2402.Insutype // 险种类型(来自1101接口返回)
  357. inputData["endtime"] = struct2402.Endtime // 结束时间
  358. inputData["dise_codg"] = struct2402.DiseCode // 就诊凭证类型
  359. inputData["dise_name"] = struct2402.DiseName // 就诊凭证类型
  360. inputData["oprn_oprt_code"] = "" // 就诊凭证类型
  361. inputData["oprn_oprt_name"] = "" // 就诊凭证类型
  362. inputData["fpsc_no"] = "" // 就诊凭证类型
  363. inputData["matn_type"] = "" // 就诊凭证类型
  364. inputData["birctrl_type"] = "" // 就诊凭证类型
  365. inputData["latechb_flag"] = "" // 就诊凭证类型
  366. inputData["geso_val"] = ""
  367. inputData["fetts"] = ""
  368. inputData["fetus_cnt"] = ""
  369. inputData["pret_flag"] = ""
  370. inputData["birctrl_matn_date"] = ""
  371. inputData["cop_flag"] = ""
  372. inputData["dscg_dept_codg"] = struct2402.DscgDeptCodg
  373. inputData["dscg_dept_name"] = struct2402.DscgDeptName
  374. inputData["dscg_bed"] = "待定"
  375. inputData["dscg_way"] = struct2402.DscgWay
  376. inputData["die_date"] = ""
  377. inputDataArr := make([]map[string]interface{}, 0)
  378. for _, item := range struct2402.Diseinfo {
  379. inputDataTwo := make(map[string]interface{})
  380. inputDataTwo["psn_no"] = item.PsnNo
  381. inputDataTwo["diag_type"] = item.DiagType
  382. inputDataTwo["maindiag_flag"] = item.MaindiagFlag
  383. inputDataTwo["diag_srt_no"] = item.DiagSrtNo
  384. inputDataTwo["diag_code"] = item.DiagCode
  385. inputDataTwo["diag_name"] = item.DiagName
  386. inputDataTwo["adm_cond"] = ""
  387. inputDataTwo["diag_dept"] = item.DiagDept
  388. inputDataTwo["dise_dor_no"] = item.DiseDorNo
  389. inputDataTwo["dise_dor_name"] = item.DiseDorName
  390. inputDataTwo["diag_time"] = item.DiagTime
  391. inputDataArr = append(inputDataArr, inputDataTwo)
  392. }
  393. input["mdtrtinfo"] = inputData
  394. input["diseinfo"] = inputDataArr
  395. inputMessage["input"] = input //交易输入
  396. bytesData, err := json.Marshal(inputMessage)
  397. fmt.Println(string(bytesData))
  398. if err != nil {
  399. fmt.Println(err.Error())
  400. return err.Error()
  401. }
  402. reader := bytes.NewReader(bytesData)
  403. gdyb_url := beego.AppConfig.String("gdyb_url")
  404. gdyb_paasid := beego.AppConfig.String("gdyb_paasid")
  405. url := gdyb_url + "2402"
  406. //url := "http://igb.hsa.gdgov.cn/ebus/gdyb_api/prd/hsa/hgs/2202"
  407. //url := "http://igb.hsa.gdgov.cn/ebus/gdyb_inf/poc/hsa/hgs/2202"
  408. //url := "http://igb.hsa.gdgov.cn/ebus/gdyb_inf/poc/hsa/hgs/2202"
  409. request, err := http.NewRequest("POST", url, reader)
  410. if err != nil {
  411. fmt.Println(err.Error())
  412. return err.Error()
  413. }
  414. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  415. //request.Header.Set("x-tif-paasid", "test_hosp")
  416. request.Header.Set("x-tif-paasid", gdyb_paasid)
  417. request.Header.Set("x-tif-signature", signature)
  418. request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp, 10))
  419. request.Header.Set("x-tif-nonce", nonce)
  420. client := http.Client{}
  421. resp, err := client.Do(request)
  422. if err != nil {
  423. fmt.Println(err.Error())
  424. return err.Error()
  425. }
  426. respBytes, err := ioutil.ReadAll(resp.Body)
  427. if err != nil {
  428. fmt.Println(err.Error())
  429. return err.Error()
  430. }
  431. str := string(respBytes)
  432. fmt.Println(str)
  433. return str
  434. }
  435. type ZHCustom struct {
  436. DetItemFeeSumamt string
  437. Cut string
  438. FeedetlSn string
  439. Price string
  440. MedListCodg string
  441. LmtUsedFlag int64
  442. HospApprFlag int64
  443. }
  444. type ZHRequestResult struct {
  445. Output Output `json:"output" form:"output"`
  446. Infcode int64 `gorm:"column:infcode" json:"infcode" form:"infcode"`
  447. WarnMsg string `gorm:"column:warn_msg" json:"warn_msg" form:"warn_msg"`
  448. Cainfo string `gorm:"column:cainfo" json:"cainfo" form:"cainfo"`
  449. ErrMsg string `gorm:"column:err_msg" json:"err_msg" form:"err_msg"`
  450. RespondTime string `gorm:"column:respond_time" json:"respond_time" form:"respond_time"`
  451. InfRefmsgid string `gorm:"column:inf_refmsgid" json:"inf_refmsgid" form:"inf_refmsgid"`
  452. }
  453. type ZHOutput struct {
  454. Result Result `json:"result" form:"result"`
  455. }
  456. type ZHResult struct {
  457. BasMednFlag string `json:"bas_medn_flag" form:"bas_medn_flag"`
  458. MedChrgitmType string `json:"med_chrgitm_type" form:"med_chrgitm_type"`
  459. DetItemFeeSumamt int64 `json:"det_item_fee_sumamt" form:"det_item_fee_sumamt"`
  460. HiNegoDrugFlag string `json:"hi_nego_drug_flag" form:"hi_nego_drug_flag"`
  461. FulamtOwnpayAmt float64 `json:"fulamt_ownpay_amt" form:"fulamt_ownpay_amt"`
  462. FeedtlSn int64 `json:"feedtl_sn" form:"feedtl_sn"`
  463. UploadDate int64 `json:"upload_date" form:"upload_date"`
  464. AdviceId int64 `json:"advice_id" form:"advice_id"`
  465. Cnt int64 `json:"cnt" form:"cnt"`
  466. Pric float64 `json:"pric" form:"pric"`
  467. PatientId int64 `json:"patient_id" form:"patient_id"`
  468. PricUplmtAmt float64 `json:"pric_uplmt_amt" form:"pric_uplmt_amt"`
  469. SelfpayProp float64 `json:"selfpay_prop" form:"selfpay_prop"`
  470. OverlmtAmt float64 `json:"overlmt_amt" form:"overlmt_amt"`
  471. PreselfpayAmt float64 `json:"preselfpay_amt" form:"preselfpay_amt"`
  472. Status int64 `json:"status" form:"status"`
  473. Memo string `json:"memo" form:"memo"`
  474. FeedetlSn string `json:"feedetl_sn" form:"feedetl_sn"`
  475. Mtime int64 `json:"mtime" form:"mtime"`
  476. InscpScpAmt float64 `json:"inscp_scp_amt" form:"inscp_scp_amt"`
  477. DrtReimFlag string `json:"drt_reim_flag" form:"drt_reim_flag"`
  478. Ctime int64 `json:"ctime" form:"ctime"`
  479. ListSpItemFlag string `json:"list_sp_item_flag" form:"list_sp_item_flag"`
  480. ChldMedcFlag string `json:"chld_medc_flag" form:"chld_medc_flag"`
  481. LmtUsedFlag string `json:"lmt_used_flag" form:"lmt_used_flag"`
  482. ChrgitmLv string `json:"chrgitm_lv" form:"chrgitm_lv"`
  483. UserOrgId int64 `json:"user_org_id" form:"user_org_id"`
  484. HisPatientId int64 `json:"his_patient_id" form:"his_patient_id"`
  485. OrderId int64 `json:"order_id" form:"order_id"`
  486. }
  487. // 住院费用明细信息上传
  488. func ZHGdyb2301(psnNo string, mdtrtId string, hisPrescription []*models.HisPrescription, chrg_bchno string, org_name string, doctor string, dept string, fixmedins_code string, dept_code string, doctor_id string, insuplc_admdvs string, mdtrtarea_admvs string, secret_key string, med_type string) string {
  489. // 生成签名
  490. nonce := GetRandomString(32)
  491. timestamp := time.Now().Unix()
  492. signature := setSignature(timestamp, nonce, secret_key)
  493. tempTime := time.Unix(timestamp, 0)
  494. //timeFormat := tempTime.Format("20060102150405")
  495. timeFormatOne := tempTime.Format("2006-01-02 15:04:05")
  496. //chrgBchno := rand.Intn(100000) + 10000
  497. var customs []*Custom
  498. for _, item := range hisPrescription {
  499. if item.Type == 1 { //药品
  500. for _, subItem := range item.HisDoctorAdviceInfo {
  501. if len(subItem.BaseDrugLib.MedicalInsuranceNumber) > 0 {
  502. //var randNum int
  503. //randNum = rand.Intn(10000) + 1000
  504. cus := &Custom{
  505. DetItemFeeSumamt: fmt.Sprintf("%.2f", subItem.Price*subItem.PrescribingNumber),
  506. Cut: fmt.Sprintf("%.2f", subItem.PrescribingNumber),
  507. FeedetlSn: subItem.FeedetlSn,
  508. Price: fmt.Sprintf("%.2f", subItem.Price),
  509. MedListCodg: subItem.BaseDrugLib.MedicalInsuranceNumber,
  510. HospApprFlag: subItem.BaseDrugLib.HospApprFlag,
  511. }
  512. customs = append(customs, cus)
  513. }
  514. }
  515. }
  516. if item.Type == 2 { //项目
  517. for _, subItem := range item.HisPrescriptionProject {
  518. //var randNum int
  519. //randNum = rand.Intn(10000) + 1000
  520. if len(subItem.HisProject.MedicalCode) > 0 {
  521. cus := &Custom{
  522. DetItemFeeSumamt: fmt.Sprintf("%.2f", subItem.Price*float64(subItem.Count)),
  523. Cut: fmt.Sprintf("%.2f", float64(subItem.Count)),
  524. FeedetlSn: subItem.FeedetlSn,
  525. Price: fmt.Sprintf("%.2f", float64(subItem.Price)),
  526. MedListCodg: subItem.HisProject.MedicalCode,
  527. HospApprFlag: -1,
  528. }
  529. customs = append(customs, cus)
  530. }
  531. }
  532. }
  533. for _, subItem := range item.HisAdditionalCharge {
  534. if len(subItem.XtHisAddtionConfig.Code) > 0 {
  535. cus := &Custom{
  536. DetItemFeeSumamt: fmt.Sprintf("%.2f", subItem.Price*float64(subItem.Count)),
  537. Cut: fmt.Sprintf("%.2f", float64(subItem.Count)),
  538. FeedetlSn: subItem.FeedetlSn,
  539. Price: fmt.Sprintf("%.2f", float64(subItem.Price)),
  540. MedListCodg: subItem.XtHisAddtionConfig.Code,
  541. HospApprFlag: -1,
  542. }
  543. customs = append(customs, cus)
  544. }
  545. }
  546. }
  547. // 生成输入报文
  548. inputMessage := SetInputMessage(nonce, timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs)
  549. input := make(map[string]interface{})
  550. feedetail := make([]map[string]interface{}, 0)
  551. inputMessage["infno"] = "2301" // 交易编码
  552. //chrg_bchno := timeFormat + strconv.FormatInt(int64(chrgBchno), 10)
  553. for _, item := range customs {
  554. feedetailInfo := make(map[string]interface{})
  555. feedetailInfo["feedetl_sn"] = item.FeedetlSn
  556. feedetailInfo["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  557. feedetailInfo["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  558. feedetailInfo["med_type"] = med_type
  559. feedetailInfo["fee_ocur_time"] = timeFormatOne // 费用发生时间
  560. feedetailInfo["med_list_codg"] = item.MedListCodg // 医疗目录编码
  561. feedetailInfo["medins_list_codg"] = fixmedins_code // 医药机构目录编码
  562. feedetailInfo["det_item_fee_sumamt"] = item.DetItemFeeSumamt // 明细项目费用总额
  563. feedetailInfo["cnt"] = item.Cut // 数量
  564. feedetailInfo["pric"] = item.Price // 单价
  565. feedetailInfo["bilg_dept_codg"] = dept_code // 开单科室编码
  566. feedetailInfo["bilg_dept_name"] = dept // 开单科室名称
  567. feedetailInfo["bilg_dr_codg"] = doctor_id // 开单医生编码
  568. feedetailInfo["bilg_dr_name"] = doctor
  569. feedetailInfo["acord_dept_codg"] = "" // 受单科室编码
  570. feedetailInfo["acord_dept_name"] = "" // 受单科室名称
  571. feedetailInfo["orders_dr_code"] = "" // 受单医生编码
  572. feedetailInfo["orders_dr_name"] = "" // 受单医生姓名
  573. feedetailInfo["chrg_bchno"] = chrg_bchno // 收费批次号
  574. feedetailInfo["dise_codg"] = "" // 病种编码
  575. feedetailInfo["rxno"] = "" // 处方号
  576. feedetailInfo["rx_circ_flag"] = "0" // 外购处方标志
  577. feedetailInfo["sin_dos_dscr"] = "" // 单次剂量描述
  578. feedetailInfo["used_frqu_dscr"] = "" // 使用频次描述
  579. feedetailInfo["prd_days"] = "0" // 周期天数
  580. feedetailInfo["medc_way_dscr"] = "" // 用药途径描述
  581. // 开单医师姓名
  582. if item.HospApprFlag != -1 {
  583. if item.HospApprFlag == 1 {
  584. feedetailInfo["hosp_appr_flag"] = "0" // 医院审批标志
  585. } else if item.HospApprFlag == 2 {
  586. feedetailInfo["hosp_appr_flag"] = "1" // 医院审批标志
  587. } else if item.HospApprFlag == 3 {
  588. feedetailInfo["hosp_appr_flag"] = "2" // 医院审批标志
  589. } else {
  590. feedetailInfo["hosp_appr_flag"] = "1" // 医院审批标志
  591. }
  592. } else {
  593. feedetailInfo["hosp_appr_flag"] = "1" // 医院审批标志
  594. }
  595. feedetailInfo["tcmdrug_used_way"] = "" // 中药使用方式
  596. feedetailInfo["etip_flag"] = "" // 外检标志
  597. feedetailInfo["etip_hosp_code"] = "" // 外检医院编码
  598. feedetailInfo["dscg_tkdrug_flag"] = "" // 出院带药标志
  599. feedetailInfo["matn_fee_flag"] = "" // 生育费用标志
  600. feedetail = append(feedetail, feedetailInfo)
  601. }
  602. input["feedetail"] = feedetail
  603. inputMessage["input"] = input //交易输入
  604. bytesData, err := json.Marshal(inputMessage)
  605. fmt.Println("----------")
  606. fmt.Println(string(bytesData))
  607. fmt.Println("----------")
  608. if err != nil {
  609. fmt.Println(err.Error())
  610. return ""
  611. }
  612. reader := bytes.NewReader(bytesData)
  613. gdyb_url := beego.AppConfig.String("gdyb_url")
  614. gdyb_paasid := beego.AppConfig.String("gdyb_paasid")
  615. url := gdyb_url + "2301"
  616. request, err := http.NewRequest("POST", url, reader)
  617. if err != nil {
  618. fmt.Println(err.Error())
  619. return ""
  620. }
  621. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  622. request.Header.Set("x-tif-paasid", gdyb_paasid)
  623. request.Header.Set("x-tif-signature", signature)
  624. request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp, 10))
  625. request.Header.Set("x-tif-nonce", nonce)
  626. client := http.Client{}
  627. resp, err := client.Do(request)
  628. if err != nil {
  629. fmt.Println(err.Error())
  630. return ""
  631. }
  632. respBytes, err := ioutil.ReadAll(resp.Body)
  633. if err != nil {
  634. fmt.Println(err.Error())
  635. return ""
  636. }
  637. return string(respBytes)
  638. }
  639. // 住院费用明细信息撤销
  640. func Gdyb2302(psnNo string, mdtrtId string, org_name string, doctor string, insuplc_admdvs string, mdtrtarea_admvs string, secret_key string, fixmedins_code string) string {
  641. // 生成签名
  642. nonce := GetRandomString(32)
  643. timestamp := time.Now().Unix()
  644. signature := setSignature(timestamp, nonce, secret_key)
  645. // 生成输入报文
  646. inputMessage := SetInputMessage(nonce, timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs)
  647. input := make(map[string]interface{})
  648. inputData := make(map[string]interface{})
  649. inputMessage["infno"] = "2302" // 交易编码
  650. inputData["mdtrt_id"] = mdtrtId // 就诊 ID
  651. inputData["feedetl_sn"] = "0000" //
  652. inputData["psn_no"] = psnNo // 人员编号
  653. input["data"] = inputData
  654. inputMessage["input"] = input //交易输入
  655. bytesData, err := json.Marshal(inputMessage)
  656. fmt.Println(string(bytesData))
  657. if err != nil {
  658. fmt.Println(err.Error())
  659. return err.Error()
  660. }
  661. reader := bytes.NewReader(bytesData)
  662. gdyb_url := beego.AppConfig.String("gdyb_url")
  663. gdyb_paasid := beego.AppConfig.String("gdyb_paasid")
  664. //url := "http://igb.hsa.gdgov.cn/ebus/gdyb_api/prd/hsa/hgs/1101"
  665. url := gdyb_url + "2302"
  666. //url := "http://igb.hsa.gdgov.cn/ebus/gdyb_api/prd/hsa/hgs/2205"
  667. //url := "http://igb.hsa.gdgov.cn/ebus/gdyb_inf/poc/hsa/hgs/2205"
  668. //url := "http://igb.hsa.gdgov.cn/ebus/gdyb_inf/poc/hsa/hgs/2205"
  669. request, err := http.NewRequest("POST", url, reader)
  670. fmt.Println(err)
  671. fmt.Println(request)
  672. if err != nil {
  673. fmt.Println(err.Error())
  674. return err.Error()
  675. }
  676. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  677. request.Header.Set("x-tif-paasid", gdyb_paasid)
  678. request.Header.Set("x-tif-signature", signature)
  679. request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp, 10))
  680. request.Header.Set("x-tif-nonce", nonce)
  681. client := http.Client{}
  682. resp, err := client.Do(request)
  683. if err != nil {
  684. fmt.Println(err.Error())
  685. return err.Error()
  686. }
  687. respBytes, err := ioutil.ReadAll(resp.Body)
  688. if err != nil {
  689. fmt.Println(err.Error())
  690. return err.Error()
  691. }
  692. str := string(respBytes)
  693. fmt.Println(str)
  694. return str
  695. }
  696. // 住院结算
  697. func ZHGdyb2304(psnNo string, mdtrtId string, chrgBchno string, certNo string, insutype string, total string, org_name string, doctor string, fixmedins_code string, insuplc_admdvs string, mdtrtarea_admvs string, secret_key string, mid_setl_flag string, id_card_type int64, fulamt_ownpay_amt float64, overlmt_selfpay float64, preselfpay_amt float64, inscp_scp_amt float64, certificates int64) (string, string) {
  698. // 生成签名
  699. nonce := GetRandomString(32)
  700. timestamp := time.Now().Unix()
  701. signature := setSignature(timestamp, nonce, secret_key)
  702. // 生成输入报文
  703. inputMessage := SetInputMessage(nonce, timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs)
  704. input := make(map[string]interface{})
  705. inputData := make(map[string]interface{})
  706. inputMessage["infno"] = "2304" // 交易编码
  707. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  708. if certificates == 3 {
  709. inputData["mdtrt_cert_type"] = "99" // 就诊凭证类型
  710. inputData["mdtrt_cert_no"] = certNo // 就诊凭证编号
  711. } else {
  712. if id_card_type == 1 {
  713. inputData["mdtrt_cert_type"] = "03" // 就诊凭证类型
  714. inputData["mdtrt_cert_no"] = certNo // 就诊凭证编号
  715. } else {
  716. inputData["mdtrt_cert_type"] = "02" // 就诊凭证类型
  717. inputData["mdtrt_cert_no"] = certNo // 就诊凭证编号
  718. }
  719. }
  720. inputData["mid_setl_flag"] = mid_setl_flag // 中途退费标志
  721. inputData["medfee_sumamt"] = total // 医疗费总额
  722. inputData["psn_setlway"] = "01" // 个人结算方式 01 按项目结 02 按定额结算
  723. inputData["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  724. inputData["chrg_bchno"] = chrgBchno // 收费批次号(来自2204生成的)
  725. inputData["acct_used_flag"] = "1" // 个人账户使用标志 0否 1是
  726. inputData["insutype"] = insutype // 险种类型
  727. inputData["invono"] = "" // 发票号
  728. inputData["mid_setl_flag"] = "" // 中途结算标志
  729. inputData["fulamt_ownpay_amt"] = fulamt_ownpay_amt //
  730. inputData["overlmt_selfpay"] = overlmt_selfpay //
  731. inputData["preselfpay_amt"] = preselfpay_amt //
  732. inputData["inscp_scp_amt"] = inscp_scp_amt //
  733. input["data"] = inputData
  734. inputMessage["input"] = input //交易输入
  735. bytesData, err := json.Marshal(inputMessage)
  736. fmt.Println(string(bytesData))
  737. if err != nil {
  738. fmt.Println(err.Error())
  739. return err.Error(), ""
  740. }
  741. reader := bytes.NewReader(bytesData)
  742. gdyb_url := beego.AppConfig.String("gdyb_url")
  743. gdyb_paasid := beego.AppConfig.String("gdyb_paasid")
  744. //url := "http://igb.hsa.gdgov.cn/ebus/gdyb_api/prd/hsa/hgs/1101"
  745. url := gdyb_url + "2304"
  746. //url := "http://igb.hsa.gdgov.cn/ebus/gdyb_api/prd/hsa/hgs/2207"
  747. //url := "http://igb.hsa.gdgov.cn/ebus/gdyb_inf/poc/hsa/hgs/2207"
  748. //url := "http://igb.hsa.gdgov.cn/ebus/gdyb_inf/poc/hsa/hgs/2207"
  749. request, err := http.NewRequest("POST", url, reader)
  750. if err != nil {
  751. fmt.Println(err.Error())
  752. return err.Error(), ""
  753. }
  754. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  755. request.Header.Set("x-tif-paasid", gdyb_paasid)
  756. request.Header.Set("x-tif-signature", signature)
  757. request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp, 10))
  758. request.Header.Set("x-tif-nonce", nonce)
  759. client := http.Client{}
  760. resp, err := client.Do(request)
  761. if err != nil {
  762. fmt.Println(err.Error())
  763. return err.Error(), ""
  764. }
  765. respBytes, err := ioutil.ReadAll(resp.Body)
  766. if err != nil {
  767. fmt.Println(err.Error())
  768. return err.Error(), ""
  769. }
  770. str := string(respBytes)
  771. fmt.Println(str)
  772. mjson, _ := json.Marshal(inputMessage)
  773. str2 := string(mjson)
  774. return str, str2
  775. }
  776. // 住院结算撤销
  777. func Gdyb2305(psnNo string, mdtrtId string, setlId string, org_name string, doctor string, secret_key string, fixmedins_code string, insuplc_admdvs string, mdtrtarea_admvs string) (string, string) {
  778. // 生成签名
  779. nonce := GetRandomString(32)
  780. timestamp := time.Now().Unix()
  781. signature := setSignature(timestamp, nonce, secret_key)
  782. // 生成输入报文
  783. inputMessage := SetInputMessage(nonce, timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs)
  784. input := make(map[string]interface{})
  785. inputData := make(map[string]interface{})
  786. inputMessage["infno"] = "2305" // 交易编码
  787. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  788. inputData["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  789. inputData["setl_id"] = setlId // 结算 ID
  790. input["data"] = inputData
  791. inputMessage["input"] = input //交易输入
  792. bytesData, err := json.Marshal(inputMessage)
  793. fmt.Println(string(bytesData))
  794. if err != nil {
  795. fmt.Println(err.Error())
  796. return err.Error(), ""
  797. }
  798. reader := bytes.NewReader(bytesData)
  799. gdyb_url := beego.AppConfig.String("gdyb_url")
  800. gdyb_paasid := beego.AppConfig.String("gdyb_paasid")
  801. url := gdyb_url + "2305"
  802. request, err := http.NewRequest("POST", url, reader)
  803. if err != nil {
  804. fmt.Println(err.Error())
  805. return err.Error(), ""
  806. }
  807. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  808. request.Header.Set("x-tif-paasid", gdyb_paasid)
  809. request.Header.Set("x-tif-signature", signature)
  810. request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp, 10))
  811. request.Header.Set("x-tif-nonce", nonce)
  812. client := http.Client{}
  813. resp, err := client.Do(request)
  814. if err != nil {
  815. fmt.Println(err.Error())
  816. return err.Error(), ""
  817. }
  818. respBytes, err := ioutil.ReadAll(resp.Body)
  819. if err != nil {
  820. fmt.Println(err.Error())
  821. return err.Error(), ""
  822. }
  823. str := string(respBytes)
  824. fmt.Println(str)
  825. mjson, _ := json.Marshal(inputMessage)
  826. str2 := string(mjson)
  827. return str, str2
  828. }
  829. func CreateHospitalRecord(record *models.HisHospitalCheckRecord) (err error) {
  830. err = writeDb.Save(&record).Error
  831. return
  832. }
  833. func GetInHospitalRecord(id int64) (record models.HisHospitalCheckRecord, err error) {
  834. err = readDb.Model(&models.HisHospitalCheckRecord{}).Where("id = ? AND status = 1", id).First(&record).Error
  835. return
  836. }
  837. func GetInHospitalRecordByNumber(number string) (record models.HisHospitalCheckRecord, err error) {
  838. err = readDb.Model(&models.HisHospitalCheckRecord{}).Where("number = ? AND status = 1", number).First(&record).Error
  839. return
  840. }
  841. func GetLastHospitalRecord(id int64, user_org_id int64) (record models.HisHospitalCheckRecord, err error) {
  842. err = readDb.Model(&models.HisHospitalCheckRecord{}).Where("id = ? AND status = 1 AND user_org_id = ?", id, user_org_id).Last(&record).Error
  843. return
  844. }