nm_controller.go 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  1. package js
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "gdyb/controllers"
  6. "gdyb/enums"
  7. "gdyb/service"
  8. "gdyb/utils"
  9. "github.com/astaxie/beego"
  10. "github.com/axgle/mahonia"
  11. "os"
  12. "regexp"
  13. "strconv"
  14. "strings"
  15. "syscall"
  16. "time"
  17. "unsafe"
  18. )
  19. type NmController struct {
  20. controllers.BaseAuthAPIController
  21. }
  22. func JSybRegistRouters() {
  23. beego.Router("/nmyb/1101", &NmController{}, "get:Post1101")
  24. beego.Router("/nmyb/2401", &NmController{}, "get:Post2401")
  25. beego.Router("/nmyb/2404", &NmController{}, "get:Post2404")
  26. beego.Router("/nmyb/2405", &NmController{}, "post:Post2405")
  27. beego.Router("/nmyb/2402", &NmController{}, "post:Post2402")
  28. beego.Router("/nmyb/2301", &NmController{}, "get:Post2301")
  29. beego.Router("/nmyb/2302", &NmController{}, "get:Post2302")
  30. beego.Router("/nmyb/2303", &NmController{}, "get:Post2303")
  31. beego.Router("/nmyb/2304", &NmController{}, "get:Post2304")
  32. beego.Router("/nmyb/2305", &NmController{}, "get:Post2305")
  33. beego.Router("/nmyb/2503", &NmController{}, "get:Get2503")
  34. beego.Router("/nmyb/readcard", &NmController{}, "get:ReadCard")
  35. }
  36. func (c *NmController) Post1101() {
  37. certNo := c.GetString("cert_no")
  38. org_name := c.GetString("org_name")
  39. doctor := c.GetString("doctor")
  40. fixmedins_code := c.GetString("fixmedins_code")
  41. insuplc_admdvs := c.GetString("insuplc_admdvs")
  42. mdtrtarea_admvs := c.GetString("mdtrtarea_admvs")
  43. secret_key := c.GetString("secret_key")
  44. id_card_type, _ := c.GetInt64("id_card_type")
  45. card_sn := c.GetString("card_sn")
  46. certificates := c.GetString("certificates")
  47. name := c.GetString("name")
  48. certificate, _ := strconv.ParseInt(certificates, 10, 64)
  49. service.ZHGdyb1101(certNo, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, secret_key, id_card_type, card_sn, certificate, name)
  50. }
  51. func (c *NmController) Post2401() {
  52. }
  53. func (c *NmController) Post2404() {
  54. }
  55. func (c *NmController) Post2405() {
  56. }
  57. func (c *NmController) Post2402() {
  58. }
  59. func (c *NmController) Post2301() {
  60. }
  61. func (c *NmController) Post2303() {
  62. }
  63. func (c *NmController) Post2304() {
  64. }
  65. func (c *NmController) Post2305() {
  66. }
  67. func (c *NmController) Get2503() {
  68. }
  69. type ELeData struct {
  70. Data struct {
  71. SiNo string `json:"si_no"`
  72. SiCardNo string `json:"si_card_no"`
  73. SiCardIssueArea string `json:"si_card_issue_area"`
  74. Name string `json:"name"`
  75. Gender string `json:"gender"`
  76. IdType string `json:"id_type"`
  77. IdNo string `json:"id_no"`
  78. EcCardToken string `json:"ecCardToken"`
  79. } `json:"data"`
  80. Code int `json:"code"`
  81. Message string `json:"message"`
  82. }
  83. func (c *NmController) ReadCard() {
  84. fixmedins_code := c.GetString("fixmedins_code")
  85. secret_key := c.GetString("secret_key")
  86. ak := c.GetString("ak")
  87. org_name := c.GetString("org_name")
  88. doctor := c.GetString("doctor")
  89. insuplc_admdvs := c.GetString("insuplc_admdvs")
  90. mdtrtarea_admvs := c.GetString("mdtrtarea_admvs")
  91. url := c.GetString("url")
  92. cainfo := c.GetString("cainfo")
  93. id_card_type := c.GetString("id_card_type")
  94. operator_id := c.GetString("operator_id")
  95. operator := c.GetString("operator")
  96. //result, request := service.Jsyb9001(org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, secret_key, 1, url, cainfo, ak)
  97. //fmt.Println(request)
  98. //fmt.Println(result)
  99. c.TestGetBasBaseInit(fixmedins_code, secret_key, ak)
  100. fmt.Println(id_card_type)
  101. switch id_card_type {
  102. case "1":
  103. pCardInfo, pBusiCardInfo := c.GetBasBaseInfo()
  104. pBusiCardInfo = Remove0000(pBusiCardInfo)
  105. pCardInfo = Remove0000(pCardInfo)
  106. fmt.Println(":", ConvertToString(pCardInfo, "gbk", "utf-8"))
  107. fmt.Println(pBusiCardInfo)
  108. fmt.Println(pCardInfo)
  109. bas := strings.Split(pCardInfo, "|")
  110. basNumber := bas[2]
  111. id_card_no := bas[1]
  112. card_sn := bas[3]
  113. id_card_type_int, _ := strconv.ParseInt(id_card_type, 10, 64)
  114. if len(pCardInfo) > 0 && len(pBusiCardInfo) > 0 {
  115. result, _ := service.Jsyb1101A(basNumber, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, secret_key, id_card_type_int, card_sn, "1", url, ak, pBusiCardInfo, id_card_no, cainfo)
  116. var dat map[string]interface{}
  117. if err := json.Unmarshal([]byte(result), &dat); err == nil {
  118. fmt.Println(dat)
  119. } else {
  120. fmt.Println(err)
  121. }
  122. c.ServeSuccessJSON(map[string]interface{}{
  123. "status": "0",
  124. "card_info": pCardInfo,
  125. "busi_card_info": pBusiCardInfo,
  126. "result": dat,
  127. "type": "1",
  128. })
  129. } else {
  130. c.ServeSuccessJSON(map[string]interface{}{
  131. "status": "-1",
  132. })
  133. }
  134. break
  135. case "3": //电子凭证
  136. _, pBusiCardInfo := c.GetELeInfo(fixmedins_code, operator_id, operator)
  137. //fmt.Println(pCardInfo)
  138. fmt.Println(pBusiCardInfo)
  139. pBusiCardInfo = Remove0000(pBusiCardInfo)
  140. //pCardInfo = Remove0000(pCardInfo)
  141. var ele ELeData
  142. err := json.Unmarshal([]byte(pBusiCardInfo), &ele)
  143. if err != nil {
  144. utils.ErrorLog("解析失败:%v", err)
  145. }
  146. token := ele.Data.EcCardToken
  147. if len(token) > 0 {
  148. result, _ := service.Jsyb1101B(org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, secret_key, url, ak, token, cainfo, ele.Data.IdNo)
  149. var dat map[string]interface{}
  150. if err := json.Unmarshal([]byte(result), &dat); err == nil {
  151. fmt.Println(dat)
  152. } else {
  153. fmt.Println(err)
  154. }
  155. c.ServeSuccessJSON(map[string]interface{}{
  156. "status": "0",
  157. //"card_info": pCardInfo,
  158. "busi_card_info": pBusiCardInfo,
  159. "token": token,
  160. "result": dat,
  161. "type": "2",
  162. })
  163. } else {
  164. c.ServeSuccessJSON(map[string]interface{}{
  165. "status": "-1",
  166. })
  167. }
  168. break
  169. }
  170. }
  171. func (c *NmController) TestGetBasBaseInit(code string, secret_key string, ak string) {
  172. DllDef := syscall.MustLoadDLL("HeaSecReadInfo.dll")
  173. Iinit := DllDef.MustFindProc("Init")
  174. //miConfig, _ := service.FindMedicalInsuranceInfo(c.GetAdminUserInfo().CurrentOrgId)
  175. str := make([]byte, 2048)
  176. inputData := make(map[string]interface{})
  177. inputData["IP"] = "10.72.3.87"
  178. inputData["PORT"] = "8086"
  179. inputData["TIMEOUT"] = "180"
  180. inputData["LOG_PATH"] = "C:\\log\\"
  181. //
  182. inputData["EC_URL"] = "http://10.72.3.127:10086/localcfc/api/hsecfc/localQrCodeQuery"
  183. inputData["CARD_PASSTYPE"] = "1"
  184. inputData["API_NAME"] = "hssServives"
  185. inputData["API_VERSION"] = "1.0.0"
  186. inputData["ACCESS_KEY"] = ak
  187. inputData["SECRETKEY"] = secret_key
  188. inputData["ORG_ID"] = code
  189. inputData["EXT"] = ""
  190. bytesData, _ := json.Marshal(inputData)
  191. fmt.Println(inputData)
  192. fmt.Println(bytesData)
  193. ret, _, err := Iinit.Call((uintptr)(unsafe.Pointer(&bytesData[0])), (uintptr)(unsafe.Pointer(&str[0])))
  194. if ret != 0 {
  195. fmt.Println("SSCard的报错原因:", err)
  196. fmt.Println("SSCard的运算结果为:", ret)
  197. fmt.Println("SSCard的返回结果为:", string(str))
  198. c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeReadCardException)
  199. return
  200. }
  201. fmt.Println("SSCard的返回结果为:", string(str))
  202. result := int(ret)
  203. fmt.Println("SSCard的运算结果为1:", result)
  204. //initFlag = 1
  205. return
  206. }
  207. func (c *NmController) GetBasBaseInfo() (string, string) {
  208. DllDef := syscall.MustLoadDLL("HeaSecReadInfo.dll")
  209. readCard := DllDef.MustFindProc("ReadCardBas")
  210. fmt.Println(readCard)
  211. fmt.Println("!!!!!")
  212. pCardInfo := make([]byte, 2048)
  213. pBusiCardInfo := make([]byte, 8192)
  214. ret2, _, _ := readCard.Call((uintptr)(unsafe.Pointer(&pCardInfo[0])), (uintptr)(unsafe.Pointer(&pBusiCardInfo[0])))
  215. fmt.Println(ret2)
  216. fmt.Println(DeleteExtraSpace(string(pCardInfo)))
  217. fmt.Println(DeleteExtraSpace(string(pBusiCardInfo)))
  218. fmt.Println(":", ConvertToString(DeleteExtraSpace(string(pCardInfo)), "gbk", "utf-8"))
  219. fmt.Println(":", ConvertToString(DeleteExtraSpace(string(pBusiCardInfo)), "gbk", "utf-8"))
  220. if ret2 != 0 {
  221. return "", ""
  222. }
  223. return DeleteExtraSpace(string(pCardInfo)), DeleteExtraSpace(string(pBusiCardInfo))
  224. }
  225. func (c *NmController) GetELeInfo(code string, operator_id string, operator_name string) (string, string) {
  226. DllDef := syscall.MustLoadDLL("HeaSecReadInfo.dll")
  227. readCard := DllDef.MustFindProc("EcCardQuery")
  228. fmt.Println(readCard)
  229. fmt.Println("!!!!!")
  230. //pCardInfo := make([]byte, 8192)
  231. pBusiCardInfo := make([]byte, 8192)
  232. //data := make(map[string]interface{})
  233. //pData := make(map[string]interface{})
  234. //inputData := make(map[string]interface{})
  235. //inputData["orgId"] = code
  236. //inputData["businessType"] = "01101"
  237. //inputData["operatorId"] = operator_id
  238. //inputData["operatorName"] = operator_name
  239. //inputData["officeId"] = "001"
  240. //inputData["officeName"] = "血透室"
  241. //data["data"] = inputData
  242. //data["transType"] = "ec.query"
  243. //data["orgId"] = code
  244. //bytesData, _ := json.Marshal(data)
  245. //pCardInfo = bytesData
  246. ret2, _, _ := readCard.Call((uintptr)(unsafe.Pointer(&pBusiCardInfo[0])))
  247. fmt.Println(ret2)
  248. //fmt.Println(DeleteExtraSpace(string(bytesData)))
  249. fmt.Println(DeleteExtraSpace(string(pBusiCardInfo)))
  250. //fmt.Println(":", ConvertToString(DeleteExtraSpace(string(bytesData)), "gbk", "utf-8"))
  251. fmt.Println(":", ConvertToString(DeleteExtraSpace(string(pBusiCardInfo)), "gbk", "utf-8"))
  252. if ret2 != 0 {
  253. return "", ""
  254. }
  255. return DeleteExtraSpace(""), DeleteExtraSpace(string(pBusiCardInfo))
  256. }
  257. func IntPtr(n int) uintptr {
  258. return uintptr(n)
  259. }
  260. func StrPtr(s string) uintptr {
  261. return uintptr(unsafe.Pointer(syscall.StringBytePtr(s)))
  262. }
  263. type Charset string
  264. const (
  265. UTF8 = Charset("UTF-8")
  266. GB18030 = Charset("GB18030")
  267. )
  268. func ConvertToString(src string, srcCode string, tagCode string) string {
  269. srcCoder := mahonia.NewDecoder(srcCode)
  270. srcResult := srcCoder.ConvertString(src)
  271. tagCoder := mahonia.NewDecoder(tagCode)
  272. _, cdata, _ := tagCoder.Translate([]byte(srcResult), true)
  273. result := string(cdata)
  274. return result
  275. }
  276. func DeleteExtraSpace(s string) string {
  277. //删除字符串中的多余空格,有多个空格时,仅保留一个空格
  278. s1 := strings.Replace(s, " ", " ", -1) //替换tab为空格
  279. regstr := "\\s{2,}" //两个及两个以上空格的正则表达式
  280. reg, _ := regexp.Compile(regstr) //编译正则表达式
  281. s2 := make([]byte, len(s1)) //定义字符数组切片
  282. copy(s2, s1) //将字符串复制到切片
  283. spc_index := reg.FindStringIndex(string(s2)) //在字符串中搜索
  284. for len(spc_index) > 0 { //找到适配项
  285. s2 = append(s2[:spc_index[0]+1], s2[spc_index[1]:]...) //删除多余空格
  286. spc_index = reg.FindStringIndex(string(s2)) //继续在字符串中搜索
  287. }
  288. return string(s2)
  289. }
  290. func Remove0000(s string) string {
  291. str := make([]rune, 0, len(s))
  292. for _, v := range []rune(s) {
  293. if v == 0 {
  294. continue
  295. }
  296. str = append(str, v)
  297. }
  298. return string(str)
  299. }
  300. func saveJsLog(result string, request string, infno string, desc string, org_name string) {
  301. //org_id, _ := beego.AppConfig.Int64("org_id")
  302. //miConfig, _ := service.FindMedicalInsuranceInfo(org_id)
  303. dir := org_name + "日志"
  304. utils.Mkdir(dir)
  305. month := time.Unix(1557042972, 0).Format("1")
  306. year := time.Now().Format("2006")
  307. month = time.Now().Format("01")
  308. day := time.Now().Format("02")
  309. hour := time.Now().Format("15")
  310. min := time.Now().Format("04")
  311. sec := time.Now().Format("05")
  312. result_time := year + "-" + month + "-" + day + " " + hour + ":" + min + ":" + sec
  313. file := org_name + "_" + year + month + day + "_log"
  314. file_name := file + ".txt"
  315. file_path := org_name + "日志" + "/" + file_name
  316. exist, _ := utils.PathExists(file_path)
  317. if exist { //存在
  318. fmt.Println("存在")
  319. f, err := os.OpenFile(file_path, os.O_WRONLY, 0644)
  320. if err != nil {
  321. fmt.Println("read fail")
  322. }
  323. content := "\r\n" + "\r\n" + "\r\n" + result_time + " " + "【 " + desc + infno + "入参" + " 】:" + "\r\n" + request + "\r\n" + result_time + " " + "【 " + desc + infno + "出参" + " 】:" + "\r\n" + result
  324. n, _ := f.Seek(0, 2)
  325. _, err = f.WriteAt([]byte(content), n)
  326. } else { //不存在
  327. fmt.Println("文件不存在,创建文件")
  328. f, err := os.Create(org_name + "日志" + "/" + file_name)
  329. defer f.Close()
  330. if err != nil {
  331. } else {
  332. _, err = f.Write([]byte("记录日志"))
  333. }
  334. }
  335. }