jsyb_service.go 44KB

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