jsyb_service.go 49KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119
  1. package service
  2. import (
  3. //"bytes"
  4. "encoding/json"
  5. "fmt"
  6. "gdyb/models"
  7. "gdyb/utils/csbhttp"
  8. //"io/ioutil"
  9. "net"
  10. //"net/http"
  11. "strconv"
  12. "time"
  13. )
  14. func Jsyb1101F() (string, string) {
  15. timestamp := time.Now().Unix()
  16. //生成输入报文
  17. inputMessage := SetJSInputMessage(timestamp, "盐城响水悦达血液透析中心有限公司", "王曙光", "H32092103007", "320921", "320921", "04aaa201baecc02c5f5e67d123810f2442dc04444e60a95ce529708bef8143f2fd3c5af38e21cccf9377c0ae3eef0a05528321f6265101a324802581709e2cdc297d94a3b176ed4112c8bc435d4f4362948720ea989bc58399fd251dd49b41d03356a1b99b6fd2c0bef2c6a2c970b03de9e3ce33499cc52b0c98a508d1eca0e104")
  18. input := make(map[string]interface{})
  19. inputData := make(map[string]interface{})
  20. inputMessage["infno"] = "1101" // 交易编码
  21. inputData["mdtrt_cert_type"] = "01" // 就诊凭证类型
  22. inputData["card_sn"] = "" // 卡识别码
  23. inputData["certno"] = "" // 证件号码
  24. inputData["psn_cert_type"] = "01" // 人员证件类型
  25. inputData["mdtrt_cert_no"] = "W+2O6WWJ7qpRbuq5BYdC+TzD0HbApdbfw3r+EiZ6LRGSy2s8vHmh5GxXyWpkIr4eL0W9C8fn2lp5N8IkDGEbDHKAmZ534n27zH0eG2S1oD3dYXYOwEPjuCzzDS6C4B6qi/CInWN7Vohl+dW1a4lCzb1/3IQPorT4GjXAN1/AU5Z3J8w73KGMCPA7z8ysbwNTNXbnaaQqV2Wud2Nm7gXF+Q4r94JHoozNC5lyfq/qjUyppEE8krQYK762vePqIe1j" // 就诊凭证编号
  26. inputData["begntime"] = "" // 开始时间
  27. inputData["psn_name"] = "" // 人员姓名
  28. input["data"] = inputData
  29. inputMessage["input"] = input //交易输入
  30. var inputLog string
  31. bytesData, _ := json.Marshal(inputMessage)
  32. inputLog = string(bytesData)
  33. fmt.Println(string(bytesData))
  34. if err != nil {
  35. fmt.Println(err.Error())
  36. return err.Error(), ""
  37. }
  38. request_url := "http://10.72.3.87:8086/CSB/" + "1101"
  39. return HttpRequest(request_url, "1781ce9fb73a478289326c16ba8bf2c4", "b5DPOGjc08DAAMJ8FP31pwwNHKo=", timestamp, string(bytesData)), inputLog
  40. }
  41. // 人员基本信息
  42. func Jsyb1101(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 string, request_url string, access_key string, cainfo string) (string, string) {
  43. timestamp := time.Now().Unix()
  44. //生成输入报文
  45. inputMessage := SetJSInputMessage(timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, cainfo)
  46. input := make(map[string]interface{})
  47. inputData := make(map[string]interface{})
  48. inputMessage["infno"] = "1101" // 交易编码
  49. if certificates == "3" {
  50. inputData["mdtrt_cert_type"] = "99" // 就诊凭证类型
  51. inputData["certno"] = certNo // 证件号码
  52. inputData["psn_cert_type"] = "99" // 人员证件类型
  53. } else {
  54. if id_card_type == 1 {
  55. inputData["mdtrt_cert_type"] = "03" // 就诊凭证类型
  56. inputData["card_sn"] = card_sn // 卡识别码
  57. inputData["certno"] = certNo // 证件号码
  58. inputData["psn_cert_type"] = "01" // 人员证件类型
  59. } else {
  60. inputData["mdtrt_cert_type"] = "02" // 就诊凭证类型
  61. inputData["card_sn"] = "" // 卡识别码
  62. inputData["certno"] = certNo // 证件号码
  63. inputData["psn_cert_type"] = "01" // 人员证件类型
  64. }
  65. }
  66. inputData["mdtrt_cert_no"] = certNo // 就诊凭证编号
  67. inputData["begntime"] = "" // 开始时间
  68. inputData["psn_name"] = "" // 人员姓名
  69. input["data"] = inputData
  70. inputMessage["input"] = input //交易输入
  71. var inputLog string
  72. bytesData, _ := json.Marshal(inputMessage)
  73. inputLog = string(bytesData)
  74. fmt.Println(string(bytesData))
  75. if err != nil {
  76. fmt.Println(err.Error())
  77. return err.Error(), ""
  78. }
  79. request_url = request_url + "1101"
  80. return HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)), inputLog
  81. }
  82. //人员基本信息版本2
  83. func Jsyb1101A(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 string, request_url string, access_key string, pBusiCardInfo string, id_card_no string, cainfo string) (string, string) {
  84. timestamp := time.Now().Unix()
  85. //生成输入报文
  86. inputMessage := SetJSInputMessage(timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, cainfo)
  87. input := make(map[string]interface{})
  88. inputData := make(map[string]interface{})
  89. inputMessage["infno"] = "1101" // 交易编码
  90. if certificates == "3" {
  91. inputData["mdtrt_cert_type"] = "99" // 就诊凭证类型
  92. inputData["certno"] = certNo // 证件号码
  93. inputData["psn_cert_type"] = "99" // 人员证件类型
  94. } else {
  95. if id_card_type == 1 {
  96. inputData["mdtrt_cert_type"] = "03" // 就诊凭证类型
  97. inputData["card_sn"] = card_sn // 卡识别码
  98. inputData["certno"] = id_card_no // 证件号码
  99. inputData["psn_cert_type"] = "01" // 人员证件类型
  100. } else {
  101. inputData["mdtrt_cert_type"] = "02" // 就诊凭证类型
  102. inputData["card_sn"] = "" // 卡识别码
  103. inputData["certno"] = certNo // 证件号码
  104. inputData["psn_cert_type"] = "01" // 人员证件类型
  105. }
  106. }
  107. inputData["mdtrt_cert_no"] = certNo + "|" + pBusiCardInfo // 就诊凭证编号
  108. inputData["begntime"] = "" // 开始时间
  109. inputData["psn_name"] = "" // 人员姓名
  110. input["data"] = inputData
  111. inputMessage["input"] = input //交易输入
  112. var inputLog string
  113. bytesData, _ := json.Marshal(inputMessage)
  114. inputLog = string(bytesData)
  115. fmt.Println(string(bytesData))
  116. if err != nil {
  117. fmt.Println(err.Error())
  118. return err.Error(), ""
  119. }
  120. request_url = request_url + "1101"
  121. return HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)), inputLog
  122. }
  123. func Jsyb1101B(org_name string, doctor string, fixmedins_code string, insuplc_admdvs string, mdtrtarea_admvs string, secret_key string, request_url string, access_key string, Token string, cainfo string) (string, string) {
  124. timestamp := time.Now().Unix()
  125. //生成输入报文
  126. inputMessage := SetJSInputMessage(timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, cainfo)
  127. input := make(map[string]interface{})
  128. inputData := make(map[string]interface{})
  129. inputMessage["infno"] = "1101" // 交易编码
  130. inputData["mdtrt_cert_type"] = "01" // 就诊凭证类型
  131. inputData["card_sn"] = "" // 卡识别码
  132. inputData["certno"] = "" // 证件号码
  133. inputData["psn_cert_type"] = "01" // 人员证件类型
  134. inputData["mdtrt_cert_no"] = Token // 就诊凭证编号
  135. inputData["begntime"] = "" // 开始时间
  136. inputData["psn_name"] = "" // 人员姓名
  137. input["data"] = inputData
  138. inputMessage["input"] = input //交易输入
  139. var inputLog string
  140. bytesData, _ := json.Marshal(inputMessage)
  141. inputLog = string(bytesData)
  142. fmt.Println(string(bytesData))
  143. if err != nil {
  144. fmt.Println(err.Error())
  145. return err.Error(), ""
  146. }
  147. request_url = request_url + "1101"
  148. return HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)), inputLog
  149. }
  150. // 门诊挂号
  151. func Jsyb2201(psnNo string, insutype string, certNo string, org_name string, opera string, ipt_otp_no string, dept string, fixmedins_code string, dept_code string, doctor_id string, insuplc_admdvs string, mdtrtarea_admvs string, secret_key string, id_card_type int64, doctor_name string, request_url string, access_key string, verify_number string, cainfo string) (string, string) {
  152. fmt.Println(opera)
  153. // 生成签名
  154. timestamp := time.Now().Unix()
  155. tempTime := time.Unix(timestamp, 0)
  156. timeFormatOne := tempTime.Format("2006-01-02 15:04:05")
  157. // 生成输入报文
  158. inputMessage := SetJSInputMessage(timestamp, org_name, opera, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, cainfo)
  159. input := make(map[string]interface{})
  160. inputData := make(map[string]interface{})
  161. inputMessage["infno"] = "2201" // 交易编码
  162. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  163. inputData["insutype"] = insutype // 险种类型(来自1101接口返回)
  164. inputData["begntime"] = timeFormatOne // 开始时间
  165. if id_card_type == 1 {
  166. inputData["mdtrt_cert_type"] = "03" // 就诊凭证类型
  167. inputData["mdtrt_cert_no"] = certNo + "|" + verify_number // 就诊凭证编号
  168. } else if id_card_type == 3 {
  169. inputData["mdtrt_cert_type"] = "01" // 就诊凭证类型
  170. inputData["mdtrt_cert_no"] = verify_number // 就诊凭证编号
  171. } else {
  172. inputData["mdtrt_cert_type"] = "02" // 就诊凭证类型
  173. inputData["mdtrt_cert_no"] = certNo + "|" + verify_number // 就诊凭证编号
  174. }
  175. inputData["ipt_otp_no"] = ipt_otp_no // 住院/门诊号
  176. inputData["atddr_no"] = doctor_id // 医师编码
  177. inputData["dr_name"] = doctor_name // 医师姓名
  178. inputData["dept_code"] = dept_code // 科室编码
  179. inputData["dept_name"] = dept // 科室名称
  180. inputData["caty"] = "A03.06" // 科别
  181. input["data"] = inputData
  182. inputMessage["input"] = input //交易输入
  183. var requestLog string
  184. bytesData, err := json.Marshal(inputMessage)
  185. requestLog = string(bytesData)
  186. fmt.Println(string(bytesData))
  187. if err != nil {
  188. fmt.Println(err.Error())
  189. return err.Error(), ""
  190. }
  191. request_url = request_url + "2201"
  192. return HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)), requestLog
  193. }
  194. // 门诊挂号撤销
  195. func Jsyb2202(psnNo string, mdtrtId string, ipt_otp_no string, org_name string, doctor string, insuplc_admdvs string, mdtrtarea_admvs string, secret_key string, fixmedins_code string, request_url string, access_key string, cainfo string) (string, string) {
  196. // 生成签名
  197. timestamp := time.Now().Unix()
  198. // 生成输入报文
  199. inputMessage := SetJSInputMessage(timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, cainfo)
  200. input := make(map[string]interface{})
  201. inputData := make(map[string]interface{})
  202. inputMessage["infno"] = "2202" // 交易编码
  203. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  204. inputData["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  205. inputData["ipt_otp_no"] = ipt_otp_no // 住院/门诊号
  206. input["data"] = inputData
  207. inputMessage["input"] = input //交易输入
  208. var requestLog string
  209. bytesData, err := json.Marshal(inputMessage)
  210. fmt.Println(string(bytesData))
  211. requestLog = string(bytesData)
  212. if err != nil {
  213. fmt.Println(err.Error())
  214. return err.Error(), ""
  215. }
  216. request_url = request_url + "2202"
  217. //fmt.Println(HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)))
  218. return HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)), requestLog
  219. }
  220. // 门诊就诊信息上传
  221. func Jsyb2203(psnNo string, mdtrtId string, doctor string, department string, org_name string, med_type string, doctor_id string, fixmedins_code string, insuplc_admdvs string, mdtrtarea_admvs string, secret_key string, sick_code string, sick_name string, dept string, config []*models.HisXtDiagnoseConfig, request_url string, access_key string, begin_time string, cainfo string) (string, string, int64) {
  222. // 生成签名
  223. timestamp := time.Now().Unix()
  224. tempTime := time.Unix(timestamp, 0)
  225. timeFormatOne := tempTime.Format("2006-01-02 15:04:05")
  226. // 生成输入报文
  227. inputMessage := SetJSInputMessage(timestamp, org_name, dept, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, cainfo)
  228. input := make(map[string]interface{})
  229. inputData := make(map[string]interface{})
  230. diseinfo := make([]map[string]interface{}, 0)
  231. if med_type == "1111" || med_type == "1112" {
  232. med_type = "11"
  233. }
  234. inputMessage["infno"] = "2203A" // 交易编码
  235. inputData["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  236. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  237. inputData["med_type"] = med_type // 医疗类别 16门诊特殊病
  238. inputData["begntime"] = begin_time // 开始时间
  239. inputData["main_cond_dscr"] = "" // 主要病情描述
  240. inputData["dise_codg"] = sick_code // 病种编码
  241. inputData["dise_name"] = sick_name // 病种名称
  242. inputData["birctrl_type"] = "" // 计划生育手术类别
  243. inputData["birctrl_matn_date"] = "" // 计划生育手术或生育日期
  244. for index, item := range config {
  245. diseinfo_sun := make(map[string]interface{})
  246. diseinfo_sun["diag_type"] = "1" // 诊断类别
  247. diseinfo_sun["diag_srt_no"] = index // 诊断排序号
  248. diseinfo_sun["diag_code"] = item.CountryCode // 诊断代码
  249. diseinfo_sun["diag_name"] = item.ClassName // 诊断名称
  250. diseinfo_sun["diag_dept"] = department // 诊断科室
  251. diseinfo_sun["dise_dor_no"] = doctor_id // 诊断医生编码
  252. diseinfo_sun["dise_dor_name"] = doctor // 诊断医生姓名
  253. diseinfo_sun["diag_time"] = timeFormatOne // 诊断时间
  254. diseinfo_sun["vali_flag"] = "1" // 有效标志
  255. diseinfo = append(diseinfo, diseinfo_sun)
  256. }
  257. input["diseinfo"] = diseinfo
  258. input["mdtrtinfo"] = inputData
  259. inputMessage["input"] = input //交易输入
  260. var requestLog string
  261. bytesData, err := json.Marshal(inputMessage)
  262. fmt.Println(string(bytesData))
  263. requestLog = string(bytesData)
  264. if err != nil {
  265. fmt.Println(err.Error())
  266. return err.Error(), "", 0
  267. }
  268. request_url = request_url + "2203A"
  269. //fmt.Println(HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)))
  270. return HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)), requestLog, timestamp
  271. }
  272. // 门诊就诊信息上传
  273. func Jsyb2203A(psnNo string, mdtrtId string, doctor string, department string, org_name string, med_type string, doctor_id string, fixmedins_code string, insuplc_admdvs string, mdtrtarea_admvs string, secret_key string, sick_code string, sick_name string, dept string, config []*models.HisXtDiagnoseConfig, request_url string, access_key string, cainfo string) (string, string) {
  274. // 生成签名
  275. timestamp := time.Now().Unix()
  276. tempTime := time.Unix(timestamp, 0)
  277. timeFormatOne := tempTime.Format("2006-01-02 15:04:05")
  278. // 生成输入报文
  279. inputMessage := SetJSInputMessage(timestamp, org_name, dept, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, cainfo)
  280. input := make(map[string]interface{})
  281. inputData := make(map[string]interface{})
  282. diseinfo := make([]map[string]interface{}, 0)
  283. if med_type == "1111" || med_type == "1112" {
  284. med_type = "11"
  285. }
  286. inputMessage["infno"] = "2203A" // 交易编码
  287. inputData["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  288. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  289. inputData["med_type"] = med_type // 医疗类别 16门诊特殊病
  290. inputData["begntime"] = timeFormatOne // 开始时间
  291. inputData["main_cond_dscr"] = "" // 主要病情描述
  292. inputData["dise_codg"] = sick_code // 病种编码
  293. inputData["dise_name"] = sick_name // 病种名称
  294. inputData["birctrl_type"] = "" // 计划生育手术类别
  295. inputData["birctrl_matn_date"] = "" // 计划生育手术或生育日期
  296. inputData["matn_type"] = "" // 生育类别
  297. inputData["geso_val"] = "" // 孕周数
  298. for index, item := range config {
  299. diseinfo_sun := make(map[string]interface{})
  300. diseinfo_sun["diag_type"] = "1" // 诊断类别
  301. diseinfo_sun["diag_srt_no"] = index // 诊断排序号
  302. diseinfo_sun["diag_code"] = item.CountryCode // 诊断代码
  303. diseinfo_sun["diag_name"] = item.ClassName // 诊断名称
  304. diseinfo_sun["diag_dept"] = department // 诊断科室
  305. diseinfo_sun["dise_dor_no"] = doctor_id // 诊断医生编码
  306. diseinfo_sun["dise_dor_name"] = doctor // 诊断医生姓名
  307. diseinfo_sun["diag_time"] = timeFormatOne // 诊断时间
  308. diseinfo_sun["vali_flag"] = "1" // 有效标志
  309. diseinfo = append(diseinfo, diseinfo_sun)
  310. }
  311. input["diseinfo"] = diseinfo
  312. input["mdtrtinfo"] = inputData
  313. inputMessage["input"] = input //交易输入
  314. var requestLog string
  315. bytesData, err := json.Marshal(inputMessage)
  316. fmt.Println(string(bytesData))
  317. requestLog = string(bytesData)
  318. if err != nil {
  319. fmt.Println(err.Error())
  320. return err.Error(), ""
  321. }
  322. request_url = request_url + "2203A"
  323. //fmt.Println(HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)))
  324. return HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)), requestLog
  325. }
  326. // 门诊费用明细信息上传
  327. func Jsyb2204(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, balance_accounts_type string, diag_code string, request_url string, access_key string, new_doctor_name string, time_stamp_2203 string, cainfo string) (string, string) {
  328. // 生成签名
  329. //timestamp := time.Now().Unix()
  330. timestamp := time.Now().Unix()
  331. timestamp2 := time.Now().Unix()
  332. //tempTime := time.Unix(timestamp2, 0)
  333. //timeFormatOne := tempTime.Format("2006-01-02 15:04:05")
  334. var customs []*Custom
  335. for _, item := range hisPrescription {
  336. tm := time.Unix(item.PreTime, 0)
  337. if item.Type == 1 { //药品
  338. for _, subItem := range item.HisDoctorAdviceInfo {
  339. if len(subItem.BaseDrugLib.MedicalInsuranceNumber) > 0 {
  340. //var randNum int
  341. //randNum = rand.Intn(10000) + 1000
  342. cus := &Custom{
  343. DetItemFeeSumamt: fmt.Sprintf("%.4f", subItem.Price*subItem.PrescribingNumber),
  344. Cut: fmt.Sprintf("%.4f", subItem.PrescribingNumber),
  345. FeedetlSn: subItem.FeedetlSn,
  346. Price: fmt.Sprintf("%.4f", subItem.Price),
  347. MedListCodg: subItem.BaseDrugLib.MedicalInsuranceNumber,
  348. HospApprFlag: subItem.HospApprFlag,
  349. DoctorNumber: doctor_id,
  350. DoctorName: new_doctor_name,
  351. ProvinceDrugMedListCodg: "",
  352. ProvinceGoodMedListCodg: "",
  353. FeeOcurTime: tm.Format("2006-01-02 15:04:05"),
  354. }
  355. if subItem.BaseDrugLib.DrugClassify == "2" {
  356. cus.ProvinceDrugMedListCodg = subItem.BaseDrugLib.ProvincesCode
  357. }
  358. customs = append(customs, cus)
  359. }
  360. }
  361. }
  362. if item.Type == 2 { //项目
  363. for _, subItem := range item.HisPrescriptionProject {
  364. //var randNum int
  365. //randNum = rand.Intn(10000) + 1000
  366. if subItem.Type == 2 {
  367. if len(subItem.HisProject.MedicalCode) > 0 {
  368. cnt, _ := strconv.ParseFloat(subItem.Count, 64)
  369. cus := &Custom{
  370. DetItemFeeSumamt: fmt.Sprintf("%.4f", subItem.Price*cnt),
  371. Cut: fmt.Sprintf("%.4f", cnt),
  372. FeedetlSn: subItem.FeedetlSn,
  373. Price: fmt.Sprintf("%.4f", float64(subItem.Price)),
  374. MedListCodg: subItem.HisProject.MedicalCode,
  375. DoctorNumber: doctor_id,
  376. DoctorName: new_doctor_name,
  377. HospApprFlag: -1,
  378. ProvinceDrugMedListCodg: "",
  379. ProvinceGoodMedListCodg: "",
  380. FeeOcurTime: tm.Format("2006-01-02 15:04:05"),
  381. }
  382. customs = append(customs, cus)
  383. }
  384. } else if subItem.Type == 3 {
  385. if len(subItem.GoodInfo.MedicalInsuranceNumber) > 0 {
  386. cnt, _ := strconv.ParseFloat(subItem.Count, 64)
  387. cus := &Custom{
  388. DetItemFeeSumamt: fmt.Sprintf("%.4f", subItem.Price*cnt),
  389. Cut: fmt.Sprintf("%.4f", cnt),
  390. FeedetlSn: subItem.FeedetlSn,
  391. Price: fmt.Sprintf("%.4f", float64(subItem.Price)),
  392. MedListCodg: subItem.GoodInfo.MedicalInsuranceNumber,
  393. HospApprFlag: -1,
  394. DoctorNumber: doctor_id,
  395. DoctorName: new_doctor_name,
  396. ProvinceDrugMedListCodg: "",
  397. ProvinceGoodMedListCodg: subItem.GoodInfo.ProvincesCode,
  398. FeeOcurTime: tm.Format("2006-01-02 15:04:05"),
  399. }
  400. customs = append(customs, cus)
  401. }
  402. }
  403. }
  404. }
  405. for _, subItem := range item.HisAdditionalCharge {
  406. if len(subItem.XtHisAddtionConfig.Code) > 0 {
  407. cus := &Custom{
  408. DetItemFeeSumamt: fmt.Sprintf("%.4f", subItem.Price*float64(subItem.Count)),
  409. Cut: fmt.Sprintf("%.4f", float64(subItem.Count)),
  410. FeedetlSn: subItem.FeedetlSn,
  411. Price: fmt.Sprintf("%.4f", float64(subItem.Price)),
  412. MedListCodg: subItem.XtHisAddtionConfig.Code,
  413. HospApprFlag: -1,
  414. DoctorNumber: doctor_id,
  415. DoctorName: new_doctor_name,
  416. }
  417. customs = append(customs, cus)
  418. }
  419. }
  420. }
  421. // 生成输入报文
  422. inputMessage := SetJSInputMessage(timestamp2, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, cainfo)
  423. input := make(map[string]interface{})
  424. feedetail := make([]map[string]interface{}, 0)
  425. inputMessage["infno"] = "2204" // 交易编码
  426. //chrg_bchno := timeFormat + strconv.FormatInt(int64(chrgBchno), 10)
  427. for _, item := range customs {
  428. feedetailInfo := make(map[string]interface{})
  429. subfeedetailInfo := make(map[string]interface{})
  430. feedetailInfo["feedetl_sn"] = item.FeedetlSn
  431. feedetailInfo["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  432. feedetailInfo["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  433. feedetailInfo["chrg_bchno"] = chrg_bchno // 收费批次号
  434. feedetailInfo["dise_codg"] = diag_code // 病种编码
  435. feedetailInfo["rxno"] = "" // 处方号
  436. feedetailInfo["rx_circ_flag"] = "0" // 外购处方标志
  437. feedetailInfo["fee_ocur_time"] = item.FeeOcurTime // 费用发生时间
  438. feedetailInfo["med_list_codg"] = item.MedListCodg // 医疗目录编码
  439. feedetailInfo["medins_list_codg"] = fixmedins_code // 医药机构目录编码
  440. feedetailInfo["det_item_fee_sumamt"] = item.DetItemFeeSumamt // 明细项目费用总额
  441. feedetailInfo["cnt"] = item.Cut // 数量
  442. feedetailInfo["pric"] = item.Price // 单价
  443. feedetailInfo["sin_dos_dscr"] = "" // 单次剂量描述
  444. feedetailInfo["used_frqu_dscr"] = "" // 使用频次描述
  445. feedetailInfo["prd_days"] = "0" // 周期天数
  446. feedetailInfo["medc_way_dscr"] = "" // 用药途径描述
  447. feedetailInfo["bilg_dept_codg"] = dept_code // 开单科室编码
  448. feedetailInfo["bilg_dept_name"] = dept // 开单科室名称
  449. feedetailInfo["bilg_dr_codg"] = item.DoctorNumber // 开单医生编码
  450. feedetailInfo["bilg_dr_name"] = item.DoctorName // 开单医师姓名
  451. feedetailInfo["acord_dept_codg"] = "" // 受单科室编码
  452. feedetailInfo["acord_dept_name"] = "" // 受单科室名称
  453. feedetailInfo["orders_dr_code"] = "" // 受单医生编码
  454. feedetailInfo["orders_dr_name"] = "" // 受单医生姓名
  455. if balance_accounts_type == "8" {
  456. feedetailInfo["hosp_appr_flag"] = "2" // 医院审批标志
  457. } else {
  458. if item.HospApprFlag != -1 {
  459. if item.HospApprFlag == 1 {
  460. feedetailInfo["hosp_appr_flag"] = "1" // 医院审批标志
  461. } else if item.HospApprFlag == 2 {
  462. feedetailInfo["hosp_appr_flag"] = "2" // 医院审批标志
  463. } else if item.HospApprFlag == 3 {
  464. feedetailInfo["hosp_appr_flag"] = "0" // 医院审批标志
  465. } else {
  466. feedetailInfo["hosp_appr_flag"] = "1" // 医院审批标志
  467. }
  468. } else {
  469. feedetailInfo["hosp_appr_flag"] = "1" // 医院审批标志
  470. }
  471. }
  472. feedetailInfo["tcmdrug_used_way"] = "" // 中药使用方式
  473. feedetailInfo["etip_flag"] = "" // 外检标志
  474. feedetailInfo["etip_hosp_code"] = "" // 外检医院编码
  475. feedetailInfo["dscg_tkdrug_flag"] = "" // 出院带药标志
  476. feedetailInfo["matn_fee_flag"] = "" // 生育费用标志
  477. subfeedetailInfo["tcmherb_prov_code"] = item.ProvinceDrugMedListCodg
  478. subfeedetailInfo["mcs_prov_code"] = item.ProvinceGoodMedListCodg
  479. feedetailInfo["expContent"] = subfeedetailInfo
  480. feedetail = append(feedetail, feedetailInfo)
  481. }
  482. input["feedetail"] = feedetail
  483. inputMessage["input"] = input //交易输入
  484. var requestLog string
  485. bytesData, err := json.Marshal(inputMessage)
  486. requestLog = string(bytesData)
  487. fmt.Println(string(bytesData))
  488. if err != nil {
  489. fmt.Println(err.Error())
  490. return "", ""
  491. }
  492. request_url = request_url + "2204"
  493. //fmt.Println(HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)))
  494. return HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)), requestLog
  495. }
  496. // 门诊费用明细信息撤销
  497. func Jsyb2205(psnNo string, mdtrtId string, chrgBchno string, org_name string, doctor string, insuplc_admdvs string, mdtrtarea_admvs string, secret_key string, fixmedins_code string, request_url string, access_key string, cainfo string) (string, string) {
  498. timestamp := time.Now().Unix()
  499. // 生成输入报文
  500. inputMessage := SetJSInputMessage(timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, cainfo)
  501. input := make(map[string]interface{})
  502. inputData := make(map[string]interface{})
  503. inputMessage["infno"] = "2205" // 交易编码
  504. inputData["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  505. inputData["chrg_bchno"] = chrgBchno // 收费批次号(来自2204生成的)
  506. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  507. input["data"] = inputData
  508. inputMessage["input"] = input //交易输入
  509. bytesData, err := json.Marshal(inputMessage)
  510. fmt.Println(string(bytesData))
  511. var requestLog string
  512. requestLog = string(bytesData)
  513. if err != nil {
  514. fmt.Println(err.Error())
  515. return err.Error(), ""
  516. }
  517. request_url = request_url + "2205"
  518. return HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)), requestLog
  519. }
  520. // 门诊预结算
  521. func Jsyb2206(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, med_type string, id_card_type int64, fulamt_ownpay_amt float64, overlmt_selfpay float64, preselfpay_amt float64, inscp_scp_amt float64, certificates int64, request_url string, access_key string, verify_number string, cainfo string) (string, string) {
  522. // 生成签名
  523. timestamp := time.Now().Unix()
  524. // 生成输入报文
  525. inputMessage := SetJSInputMessage(timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, cainfo)
  526. input := make(map[string]interface{})
  527. inputData := make(map[string]interface{})
  528. inputMessage["infno"] = "2206" // 交易编码
  529. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  530. if certificates == 3 {
  531. inputData["mdtrt_cert_type"] = "99" // 就诊凭证类型
  532. inputData["mdtrt_cert_no"] = certNo // 就诊凭证编号
  533. } else {
  534. if id_card_type == 1 {
  535. inputData["mdtrt_cert_type"] = "03" // 就诊凭证类型
  536. inputData["mdtrt_cert_no"] = certNo // 就诊凭证编号
  537. } else if id_card_type == 4 {
  538. inputData["mdtrt_cert_type"] = "01" // 就诊凭证类型
  539. inputData["mdtrt_cert_no"] = verify_number // 就诊凭证编号
  540. } else {
  541. inputData["mdtrt_cert_type"] = "02" // 就诊凭证类型
  542. inputData["mdtrt_cert_no"] = certNo // 就诊凭证编号
  543. }
  544. }
  545. if insuplc_admdvs == "421300" {
  546. if med_type == "11" || med_type == "1112" || med_type == "1111" {
  547. inputData["med_type"] = "110104" // 医疗类别 11 普通门诊 12 门诊挂号
  548. } else if med_type == "14" {
  549. inputData["med_type"] = "140110" // 医疗类别 11 普通门诊 12 门诊挂号
  550. }
  551. } else {
  552. inputData["med_type"] = med_type // 医疗类别 11 普通门诊 12 门诊挂号
  553. }
  554. inputData["medfee_sumamt"] = total // 医疗费总额
  555. inputData["psn_setlway"] = "01" // 个人结算方式 01 按项目结 02 按定额结算
  556. inputData["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  557. inputData["chrg_bchno"] = chrgBchno // 收费批次号(来自2204生成的)
  558. inputData["acct_used_flag"] = "0" // 个人账户使用标志 0否 1是
  559. inputData["insutype"] = insutype // 险种类型
  560. inputData["invono"] = "" // 发票号
  561. input["data"] = inputData
  562. inputMessage["input"] = input //交易输入
  563. var requestLog string
  564. bytesData, err := json.Marshal(inputMessage)
  565. requestLog = string(bytesData)
  566. fmt.Println(string(bytesData))
  567. if err != nil {
  568. fmt.Println(err.Error())
  569. return err.Error(), ""
  570. }
  571. request_url = request_url + "2206"
  572. //fmt.Println(HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)))
  573. return HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)), requestLog
  574. }
  575. // 门诊结算
  576. func Jsyb2207(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, med_type string, id_card_type int64, fulamt_ownpay_amt float64, overlmt_selfpay float64, preselfpay_amt float64, inscp_scp_amt float64, certificates int64, acct_used_flag string, request_url string, access_key string, verify_number string, cainfo string) (string, string) {
  577. // 生成签名
  578. timestamp := time.Now().Unix()
  579. // 生成输入报文
  580. inputMessage := SetJSInputMessage(timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, cainfo)
  581. input := make(map[string]interface{})
  582. inputData := make(map[string]interface{})
  583. inputMessage["infno"] = "2207" // 交易编码
  584. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  585. if certificates == 3 {
  586. inputData["mdtrt_cert_type"] = "99" // 就诊凭证类型
  587. inputData["mdtrt_cert_no"] = certNo + "|" + verify_number // 就诊凭证编号
  588. } else {
  589. if id_card_type == 1 {
  590. inputData["mdtrt_cert_type"] = "03" // 就诊凭证类型
  591. inputData["mdtrt_cert_no"] = certNo + "|" + verify_number // 就诊凭证编号
  592. } else if id_card_type == 4 {
  593. inputData["mdtrt_cert_type"] = "01" // 就诊凭证类型
  594. inputData["mdtrt_cert_no"] = verify_number // 就诊凭证编号
  595. } else {
  596. inputData["mdtrt_cert_type"] = "02" // 就诊凭证类型
  597. inputData["mdtrt_cert_no"] = certNo + "|" + verify_number // 就诊凭证编号
  598. }
  599. }
  600. if med_type == "1111" || med_type == "1112" {
  601. med_type = "11"
  602. }
  603. if insuplc_admdvs == "421300" {
  604. if med_type == "11" {
  605. inputData["med_type"] = "110104" // 医疗类别 11 普通门诊 12 门诊挂号
  606. } else if med_type == "14" {
  607. inputData["med_type"] = "140101" // 医疗类别 11 普通门诊 12 门诊挂号
  608. }
  609. } else {
  610. inputData["med_type"] = med_type // 医疗类别 11 普通门诊 12 门诊挂号
  611. }
  612. inputData["medfee_sumamt"] = total // 医疗费总额
  613. inputData["psn_setlway"] = "01" // 个人结算方式 01 按项目结 02 按定额结算
  614. inputData["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  615. inputData["chrg_bchno"] = chrgBchno // 收费批次号(来自2204生成的)
  616. inputData["acct_used_flag"] = acct_used_flag // 个人账户使用标志 0否 1是
  617. inputData["insutype"] = insutype // 险种类型
  618. inputData["invono"] = "" // 发票号
  619. inputData["fulamt_ownpay_amt"] = fulamt_ownpay_amt //
  620. inputData["overlmt_selfpay"] = overlmt_selfpay //
  621. inputData["preselfpay_amt"] = preselfpay_amt //
  622. inputData["inscp_scp_amt"] = inscp_scp_amt //
  623. input["data"] = inputData
  624. inputMessage["input"] = input //交易输入
  625. bytesData, err := json.Marshal(inputMessage)
  626. fmt.Println(string(bytesData))
  627. if err != nil {
  628. fmt.Println(err.Error())
  629. return err.Error(), ""
  630. }
  631. request_url = request_url + "2207"
  632. return HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)), string(bytesData)
  633. }
  634. func Jsyb2207A(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, med_type string, id_card_type int64, fulamt_ownpay_amt float64, overlmt_selfpay float64, preselfpay_amt float64, inscp_scp_amt float64, certificates int64, acct_used_flag string, request_url string, access_key string, cainfo string) (string, string) {
  635. // 生成签名
  636. timestamp := time.Now().Unix()
  637. // 生成输入报文
  638. inputMessage := SetJSInputMessage(timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, cainfo)
  639. input := make(map[string]interface{})
  640. inputData := make(map[string]interface{})
  641. inputMessage["infno"] = "2207A" // 交易编码
  642. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  643. if certificates == 3 {
  644. inputData["mdtrt_cert_type"] = "99" // 就诊凭证类型
  645. inputData["mdtrt_cert_no"] = certNo // 就诊凭证编号
  646. } else {
  647. if id_card_type == 1 {
  648. inputData["mdtrt_cert_type"] = "03" // 就诊凭证类型
  649. inputData["mdtrt_cert_no"] = certNo // 就诊凭证编号
  650. } else {
  651. inputData["mdtrt_cert_type"] = "02" // 就诊凭证类型
  652. inputData["mdtrt_cert_no"] = certNo // 就诊凭证编号
  653. }
  654. }
  655. if med_type == "1111" || med_type == "1112" {
  656. med_type = "11"
  657. }
  658. if insuplc_admdvs == "421300" {
  659. if med_type == "11" {
  660. inputData["med_type"] = "110104" // 医疗类别 11 普通门诊 12 门诊挂号
  661. } else if med_type == "14" {
  662. inputData["med_type"] = "140101" // 医疗类别 11 普通门诊 12 门诊挂号
  663. }
  664. } else {
  665. inputData["med_type"] = med_type // 医疗类别 11 普通门诊 12 门诊挂号
  666. }
  667. inputData["medfee_sumamt"] = total // 医疗费总额
  668. inputData["psn_setlway"] = "01" // 个人结算方式 01 按项目结 02 按定额结算
  669. inputData["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  670. inputData["chrg_bchno"] = chrgBchno // 收费批次号(来自2204生成的)
  671. inputData["acct_used_flag"] = acct_used_flag // 个人账户使用标志 0否 1是
  672. inputData["insutype"] = insutype // 险种类型
  673. inputData["invono"] = "" // 发票号
  674. inputData["fulamt_ownpay_amt"] = fulamt_ownpay_amt //
  675. inputData["overlmt_selfpay"] = overlmt_selfpay //
  676. inputData["preselfpay_amt"] = preselfpay_amt //
  677. inputData["inscp_scp_amt"] = inscp_scp_amt //
  678. input["data"] = inputData
  679. inputMessage["input"] = input //交易输入
  680. bytesData, err := json.Marshal(inputMessage)
  681. fmt.Println(string(bytesData))
  682. if err != nil {
  683. fmt.Println(err.Error())
  684. return err.Error(), ""
  685. }
  686. request_url = request_url + "2207A"
  687. //fmt.Println(HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)))
  688. return HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)), string(bytesData)
  689. }
  690. // 门诊结算撤销
  691. func Jsyb2208(psnNo string, mdtrtId string, setlId string, org_name string, doctor string, secret_key string, fixmedins_code string, insuplc_admdvs string, mdtrtarea_admvs string, request_url string, access_key string, cainfo string) (string, string) {
  692. timestamp := time.Now().Unix()
  693. // 生成输入报文
  694. inputMessage := SetJSInputMessage(timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, cainfo)
  695. input := make(map[string]interface{})
  696. inputData := make(map[string]interface{})
  697. inputMessage["infno"] = "2208" // 交易编码
  698. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  699. inputData["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  700. inputData["setl_id"] = setlId // 结算 ID
  701. input["data"] = inputData
  702. inputMessage["input"] = input //交易输入
  703. bytesData, err := json.Marshal(inputMessage)
  704. fmt.Println(string(bytesData))
  705. if err != nil {
  706. fmt.Println(err.Error())
  707. return err.Error(), ""
  708. }
  709. request_url = request_url + "2208"
  710. return HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)), string(bytesData)
  711. }
  712. func Jsyb5203(baseParams models.BaseParams, businessParams models.BusinessParams) (string, string) {
  713. timestamp := time.Now().Unix()
  714. // 生成输入报文
  715. inputMessage := SetJSInputMessage(timestamp, baseParams.OrgName, baseParams.Doctor, baseParams.FixmedinsCode, baseParams.InsuplcAdmdvs, baseParams.MdtrtareaAdmvs, baseParams.Cainfo)
  716. input := make(map[string]interface{})
  717. inputData := make(map[string]interface{})
  718. inputMessage["infno"] = "5203" // 交易编码
  719. inputData["psn_no"] = businessParams.PsnNo
  720. inputData["setl_id"] = businessParams.SetlId
  721. inputData["mdtrt_id"] = businessParams.MdtrtId
  722. input["data"] = inputData
  723. inputMessage["input"] = input //交易输入
  724. bytesData, err := json.Marshal(inputMessage)
  725. fmt.Println(string(bytesData))
  726. if err != nil {
  727. fmt.Println(err.Error())
  728. return err.Error(), ""
  729. }
  730. baseParams.RequestUrl = baseParams.RequestUrl + "5203"
  731. //fmt.Println(HttpRequest(baseParams.RequestUrl, baseParams.AccessKey, baseParams.SecretKey, timestamp, string(bytesData)))
  732. return HttpRequest(baseParams.RequestUrl, baseParams.AccessKey, baseParams.SecretKey, timestamp, string(bytesData)), string(bytesData)
  733. }
  734. //CBS总线
  735. func HttpRequest(url string, ak string, sk string, timestamp int64, json string) string {
  736. fmt.Println(url)
  737. //step 1. 设置请求参数
  738. csbHP := csbhttp.NewHttpParams(url) //设置请求地址及url参数
  739. //设置调用方式 get 或者 post
  740. csbHP.SetMethod("post")
  741. //csbHP.AddParam("input", "")
  742. //设置 调用的服务名和版本
  743. csbHP.SetApi("hssServives")
  744. csbHP.SetVersion("1.0.0")
  745. //添加附加的http请求头 (可以定义多条)
  746. //key := "_api_access_key=" + ak + "&_api_name=" + "hssServives" + "&_api_timestamp=" + strconv.FormatInt(timestamp, 10) + "&_api_version=" + "1.0.0"
  747. csbHP.AddHeader("_api_timestamp", strconv.FormatInt(timestamp, 10))
  748. csbHP.AddHeader("_api_name", "hssServives")
  749. csbHP.AddHeader("_api_version", "1.0.0")
  750. csbHP.AddHeader("_api_access_key", ak)
  751. csbHP.AddHeader("Content-Type", "application/json;charset=UTF-8")
  752. //request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  753. //还可以,设置附加的byte[]或者json请求体
  754. csbHP.SetContentBody(json, nil)
  755. //设置请求的ak和sk
  756. csbHP.SetAK(ak)
  757. csbHP.SetSK(sk)
  758. //打印请求参数信息
  759. csbHP.Print()
  760. //进行调用, 返回的第二项为resonse http headers (map[string][]string类型)
  761. //res, _, err := csbhttp.Invoke(*csbHP, requestByte)
  762. res, _, err := csbhttp.Invoke(*csbHP, strconv.FormatInt(timestamp, 10))
  763. //是否发成错误
  764. if err != nil {
  765. fmt.Println(err)
  766. return ""
  767. }
  768. fmt.Println(res)
  769. return res
  770. }
  771. // 生成基础报文
  772. func SetJSInputMessage(timestamp int64, org_name string, doctor string, fixmedins_code string, insuplc_admdvs string, mdtrtarea_admvs string, cainfo string) map[string]interface{} {
  773. // 生成签名
  774. tempTime := time.Unix(timestamp, 0)
  775. //timeFormat := tempTime.Format("20060102150405")
  776. timeFormatOne := tempTime.Format("2006-01-02 15:04:05")
  777. //randNum := rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000)
  778. month := time.Unix(1557042972, 0).Format("1")
  779. year := time.Now().Format("2006")
  780. month = time.Now().Format("01")
  781. day := time.Now().Format("02")
  782. hour := time.Now().Format("15")
  783. min := time.Now().Format("04")
  784. sec := time.Now().Format("05")
  785. msec := time.Now().Format("000")
  786. // 生成输入报文
  787. inputMessage := make(map[string]interface{})
  788. inputMessage["msgid"] = fixmedins_code + year + month + day + hour + min + sec + msec + "0" // 发送方报文 ID
  789. inputMessage["mdtrtarea_admvs"] = mdtrtarea_admvs // 就医地医保区划
  790. inputMessage["insuplc_admdvs"] = insuplc_admdvs // 参保地医保区划
  791. inputMessage["recer_sys_code"] = "1" // 接收方系统代码
  792. inputMessage["dev_no"] = "1" // 设备编号
  793. inputMessage["dev_safe_info"] = "1" // 设备安全信息
  794. inputMessage["cainfo"] = cainfo // 数字签名信息
  795. inputMessage["signtype"] = "SM3" // 签名类型
  796. inputMessage["infver"] = "V1.0" // 接收方系统代码
  797. inputMessage["opter_type"] = "1" // 经办人类别
  798. inputMessage["opter"] = doctor // 经办人
  799. inputMessage["opter_name"] = doctor // 经办人姓名
  800. inputMessage["inf_time"] = timeFormatOne // 交易时间
  801. inputMessage["fixmedins_code"] = fixmedins_code // 定点医药机构编号
  802. inputMessage["fixmedins_name"] = org_name
  803. inputMessage["fixmedins_soft_fcty"] = "深圳市领透科技有限公司" //定点医药机构名称
  804. //定点医药机构名称
  805. inputMessage["sign_no"] = "" //交易签到流水号
  806. return inputMessage
  807. }
  808. func Jsyb5301(psnNo string, org_name string, doctor string, fixmedins_code string, insuplc_admdvs string, mdtrtarea_admvs string, secret_key string, request_url string, access_key string, cainfo string) (string, string) {
  809. // 生成签名
  810. //nonce := GetRandomString(32)
  811. timestamp := time.Now().Unix()
  812. //signature := setSignature(timestamp, nonce, secret_key)
  813. //tempTime := time.Unix(timestamp, 0)
  814. //timeFormatOne := tempTime.Format("2006-01-02 15:04:05")
  815. //timeFormatTwo := tempTime.Format("2006-01-02")
  816. // 生成输入报文
  817. inputMessage := SetJSInputMessage(timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, cainfo)
  818. input := make(map[string]interface{})
  819. inputData := make(map[string]interface{})
  820. inputMessage["infno"] = "5301" // 交易编码
  821. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  822. input["data"] = inputData
  823. inputMessage["input"] = input //交易输入
  824. bytesData, err := json.Marshal(inputMessage)
  825. fmt.Println(string(bytesData))
  826. if err != nil {
  827. fmt.Println(err.Error())
  828. return err.Error(), ""
  829. }
  830. request_url = request_url + "5301"
  831. return HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)), string(bytesData)
  832. }
  833. func Jsyb2503(psnNo string, insutype string, org_name string, doctor string, fixmedins_code string, doctor_id string, insuplc_admdvs string, mdtrtarea_admvs string, secret_key string, sick_name string, sick_code string, start_time string, end_time string, check_time string, request_url string, access_key string, cainfo string) (string, string) {
  834. timestamp := time.Now().Unix()
  835. // 生成输入报文
  836. inputMessage := SetJSInputMessage(timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, cainfo)
  837. input := make(map[string]interface{})
  838. inputData := make(map[string]interface{})
  839. inputMessage["infno"] = "2503" // 交易编码
  840. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  841. inputData["insutype"] = insutype // 险种类型(来自1101接口返回)
  842. inputData["opsp_dise_code"] = sick_code // 险种类型(来自1101接口返回)
  843. inputData["opsp_dise_name"] = sick_name // 险种类型(来自1101接口返回)
  844. inputData["insu_optins"] = insuplc_admdvs // 险种类型(来自1101接口返回)
  845. inputData["ide_fixmedins_no"] = fixmedins_code // 险种类型(来自1101接口返回)
  846. inputData["ide_fixmedins_name"] = org_name // 险种类型(来自1101接口返回)
  847. inputData["hosp_ide_date"] = check_time // 险种类型(来自1101接口返回)
  848. inputData["diag_dr_codg"] = doctor_id // 开始时间
  849. inputData["diag_dr_name"] = doctor // 开始时间
  850. inputData["begndate"] = start_time // 医师编码
  851. inputData["tel"] = "" // 医师编码
  852. inputData["addr"] = "" // 医师编码
  853. inputData["enddate"] = end_time // 医师编码
  854. input["data"] = inputData
  855. inputMessage["input"] = input //交易输入
  856. bytesData, err := json.Marshal(inputMessage)
  857. fmt.Println(string(bytesData))
  858. if err != nil {
  859. fmt.Println(err.Error())
  860. return err.Error(), ""
  861. }
  862. request_url = request_url + "2503"
  863. return HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)), string(bytesData)
  864. }
  865. func Jsyb3201(fixmedins_setl_cnt int64, acct_pay float64, fund_pay_sumamt float64, medfee_sumamt float64, stmt_begndate string, stmt_enddate string, setl_optins string, clr_type string, insutype string, org_name string, doctor string, fixmedins_code string, insuplc_admdvs string, mdtrtarea_admvs string, request_url string, access_key string, secret_key string, cainfo string) (string, string) {
  866. // 生成签名
  867. timestamp := time.Now().Unix()
  868. // 生成输入报文
  869. inputMessage := SetJSInputMessage(timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, cainfo)
  870. input := make(map[string]interface{})
  871. inputData := make(map[string]interface{})
  872. inputMessage["infno"] = "3201" // 交易编码
  873. inputData["insutype"] = insutype // 险种
  874. inputData["clr_type"] = clr_type // 就诊 ID(来自2201接口返回)
  875. inputData["setl_optins"] = setl_optins // 结算经办机构
  876. inputData["stmt_begndate"] = stmt_begndate // 对帐开始时间
  877. inputData["stmt_enddate"] = stmt_enddate //对帐结束时间
  878. inputData["medfee_sumamt"] = medfee_sumamt //医疗费总额
  879. inputData["fund_pay_sumamt"] = fund_pay_sumamt //基金支付总额
  880. inputData["acct_pay"] = acct_pay //个人账户支付金额
  881. inputData["fixmedins_setl_cnt"] = fixmedins_setl_cnt //定点医药机构结算笔数
  882. inputData["refd_setl_flag"] = 0 //
  883. input["data"] = inputData
  884. inputMessage["input"] = input //交易输入
  885. bytesData, err := json.Marshal(inputMessage)
  886. fmt.Println(string(bytesData))
  887. if err != nil {
  888. fmt.Println(err.Error())
  889. return err.Error(), ""
  890. }
  891. request_url = request_url + "3201"
  892. return HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)), string(bytesData)
  893. }
  894. func Jsyb9001(org_name string, doctor string, fixmedins_code string, insuplc_admdvs string, mdtrtarea_admvs string, secret_key string, admin_user_id int64, request_url string, cainfo string, access_key string) (string, string) {
  895. // 生成签名
  896. timestamp := time.Now().Unix()
  897. // 生成输入报文
  898. inputMessage := SetJSInputMessage(timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, cainfo)
  899. input := make(map[string]interface{})
  900. inputData := make(map[string]interface{})
  901. inputMessage["infno"] = "9001" // 交易编码
  902. inputData["opter_no"] = admin_user_id
  903. inputData["mac"] = GetMacTwo() // 开始时间
  904. inputData["ip"] = GetLocalIpTwo()
  905. input["signIn"] = inputData
  906. inputMessage["input"] = input //交易输入
  907. bytesData, err := json.Marshal(inputMessage)
  908. fmt.Println(string(bytesData))
  909. if err != nil {
  910. fmt.Println(err.Error())
  911. return err.Error(), ""
  912. }
  913. //reader := bytes.NewReader(bytesData)
  914. //url := "http://igb.hsa.gdgov.cn/ebus/gdyb_api/prd/hsa/hgs/5301"
  915. //gdyb_url := beego.AppConfig.String("gdyb_url")
  916. //gdyb_paasid := beego.AppConfig.String("gdyb_paasid")
  917. //url := "http://igb.hsa.gdgov.cn/ebus/gdyb_api/prd/hsa/hgs/1101"
  918. //url := gdyb_url
  919. //request, err := http.NewRequest("POST", request_url+"9001", reader)
  920. //if err != nil {
  921. // fmt.Println(err.Error())
  922. // return err.Error(), ""
  923. //}
  924. //
  925. //request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  926. //request.Header.Set("_api_timestamp", strconv.FormatInt(timestamp, 10))
  927. //request.Header.Set("_api_name", "hssServives")
  928. //request.Header.Set("_api_version", "1.0.0")
  929. //request.Header.Set("_api_access_key", access_key)
  930. //request.Header.Set("_api_signature", "")
  931. //
  932. //client := http.Client{}
  933. //resp, err := client.Do(request)
  934. //if err != nil {
  935. // fmt.Println(err.Error())
  936. // return err.Error(), ""
  937. //}
  938. //respBytes, err := ioutil.ReadAll(resp.Body)
  939. //if err != nil {
  940. // fmt.Println(err.Error())
  941. // return err.Error(), ""
  942. //}
  943. //str := string(respBytes)
  944. //fmt.Println(str)
  945. //return str, ""
  946. request_url = request_url + "9001"
  947. return HttpRequest(request_url, access_key, secret_key, timestamp, string(bytesData)), string(bytesData)
  948. }
  949. //获取本机ip
  950. func GetLocalIpTwo() string {
  951. addrs, err := net.InterfaceAddrs()
  952. if err != nil {
  953. fmt.Println("get local ip failed")
  954. }
  955. for _, address := range addrs {
  956. if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
  957. if ipnet.IP.To4() != nil {
  958. return ipnet.IP.String()
  959. }
  960. }
  961. }
  962. return ""
  963. }
  964. //获取本机Mac
  965. func GetMacTwo() string {
  966. interfaces, err := net.Interfaces()
  967. if err != nil {
  968. fmt.Println("Get loacl Mac failed")
  969. }
  970. for _, inter := range interfaces {
  971. mac := inter.HardwareAddr
  972. fmt.Println("+======" + mac.String())
  973. if mac.String() != "" {
  974. return mac.String()
  975. }
  976. }
  977. return ""
  978. }