Browse Source

Merge branch 'master' of http://git.shengws.com/csx/gdyb

csx 3 years ago
parent
commit
a9fa969253
3 changed files with 185 additions and 4 deletions
  1. 18 2
      controllers/sg/his_api_controller.go
  2. 15 0
      models/yb_models.go
  3. 152 2
      service/gdyb_service.go

+ 18 - 2
controllers/sg/his_api_controller.go View File

@@ -9323,7 +9323,8 @@ func (c *HisApiController) GetAllopatry() {
9323 9323
 	adminUser := c.GetAdminUserInfo()
9324 9324
 	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
9325 9325
 	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
9326
-	result, _ := service.Gdyb3260(miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, year, month)
9326
+
9327
+	result, _ := service.Gdyb9001(miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, admin_user_id)
9327 9328
 	var dat map[string]interface{}
9328 9329
 	if err := json.Unmarshal([]byte(result), &dat); err == nil {
9329 9330
 		fmt.Println(dat)
@@ -9331,8 +9332,23 @@ func (c *HisApiController) GetAllopatry() {
9331 9332
 		fmt.Println(err)
9332 9333
 	}
9333 9334
 	userJSONBytes, _ := json.Marshal(dat)
9335
+	var res models.Result9001
9336
+	if err := json.Unmarshal(userJSONBytes, &res); err != nil {
9337
+		utils.ErrorLog("解析失败:%v", err)
9338
+		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
9339
+		return
9340
+	}
9341
+
9342
+	result2, _ := service.Gdyb3260(miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, year, month, res.Output.Signinoutb.SignNo)
9343
+	var dat2 map[string]interface{}
9344
+	if err := json.Unmarshal([]byte(result2), &dat2); err == nil {
9345
+		fmt.Println(dat)
9346
+	} else {
9347
+		fmt.Println(err)
9348
+	}
9349
+	userJSONBytes2, _ := json.Marshal(dat2)
9334 9350
 	var res2 models.Result3260
9335
-	if err := json.Unmarshal(userJSONBytes, &res2); err != nil {
9351
+	if err := json.Unmarshal(userJSONBytes2, &res2); err != nil {
9336 9352
 		utils.ErrorLog("解析失败:%v", err)
9337 9353
 		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
9338 9354
 		return

+ 15 - 0
models/yb_models.go View File

@@ -41,3 +41,18 @@ type CustomData struct {
41 41
 	MedfeeSumamt    float64 `json:"medfee_sumamt"`
42 42
 	OptinsPaySumamt float64 `json:"optins_pay_sumamt"`
43 43
 }
44
+
45
+type Result9001 struct {
46
+	ErrMsg      string `json:"err_msg"`
47
+	InfRefmsgid string `json:"inf_refmsgid"`
48
+	Infcode     int64  `json:"infcode"`
49
+	Output      struct {
50
+		Signinoutb struct {
51
+			SignNo string `json:"sign_no"`
52
+		} `json:"signinoutb"`
53
+	} `json:"output"`
54
+	RefmsgTime  string      `json:"refmsg_time"`
55
+	RespondTime string      `json:"respond_time"`
56
+	Signtype    interface{} `json:"signtype"`
57
+	WarnInfo    interface{} `json:"warn_info"`
58
+}

+ 152 - 2
service/gdyb_service.go View File

@@ -15,6 +15,7 @@ import (
15 15
 	"log"
16 16
 	"math/rand"
17 17
 	"mime/multipart"
18
+	"net"
18 19
 	"net/http"
19 20
 	"os"
20 21
 	"os/exec"
@@ -3275,6 +3276,45 @@ func SetInputMessage(nonce string, timestamp int64, org_name string, doctor stri
3275 3276
 	return inputMessage
3276 3277
 }
3277 3278
 
3279
+func SetInputMessageTwo(nonce string, timestamp int64, org_name string, doctor string, fixmedins_code string, insuplc_admdvs string, mdtrtarea_admvs string, sign_no string) map[string]interface{} {
3280
+	// 生成签名
3281
+	tempTime := time.Unix(timestamp, 0)
3282
+	//timeFormat := tempTime.Format("20060102150405")
3283
+	timeFormatOne := tempTime.Format("2006-01-02 15:04:05")
3284
+	//randNum := rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000)
3285
+
3286
+	month := time.Unix(1557042972, 0).Format("1")
3287
+	year := time.Now().Format("2006")
3288
+	month = time.Now().Format("01")
3289
+	day := time.Now().Format("02")
3290
+
3291
+	hour := time.Now().Format("15")
3292
+	min := time.Now().Format("04")
3293
+	sec := time.Now().Format("05")
3294
+
3295
+	msec := time.Now().Format("000")
3296
+
3297
+	// 生成输入报文
3298
+	inputMessage := make(map[string]interface{})
3299
+	inputMessage["msgid"] = fixmedins_code + year + month + day + hour + min + sec + msec + "0" // 发送方报文 ID
3300
+	inputMessage["mdtrtarea_admvs"] = mdtrtarea_admvs                                           // 就医地医保区划
3301
+	inputMessage["insuplc_admdvs"] = insuplc_admdvs                                             // 参保地医保区划
3302
+	inputMessage["recer_sys_code"] = "1"                                                        // 接收方系统代码
3303
+	inputMessage["dev_no"] = ""                                                                 // 设备编号
3304
+	inputMessage["dev_safe_info"] = ""                                                          // 设备安全信息
3305
+	inputMessage["cainfo"] = ""                                                                 // 数字签名信息
3306
+	inputMessage["signtype"] = "SM3"                                                            // 签名类型
3307
+	inputMessage["infver"] = "V1.0"                                                             // 接收方系统代码
3308
+	inputMessage["opter_type"] = "1"                                                            // 经办人类别
3309
+	inputMessage["opter"] = doctor                                                              // 经办人
3310
+	inputMessage["opter_name"] = doctor                                                         // 经办人姓名
3311
+	inputMessage["inf_time"] = timeFormatOne                                                    // 交易时间
3312
+	inputMessage["fixmedins_code"] = fixmedins_code                                             // 定点医药机构编号
3313
+	inputMessage["fixmedins_name"] = org_name                                                   //定点医药机构名称
3314
+	inputMessage["sign_no"] = sign                                                              //交易签到流水号
3315
+	return inputMessage
3316
+}
3317
+
3278 3318
 func postFile(filename string, target_url string) (*http.Response, error) {
3279 3319
 	body_buf := bytes.NewBufferString("")
3280 3320
 	body_writer := multipart.NewWriter(body_buf)
@@ -3788,13 +3828,13 @@ func Gdyb90100(psn_no string, org_name string, doctor string, fixmedins_code str
3788 3828
 	return str
3789 3829
 }
3790 3830
 
3791
-func Gdyb3260(org_name string, doctor string, fixmedins_code string, insuplc_admdvs string, mdtrtarea_admvs string, secret_key string, year string, month string) (string, string) {
3831
+func Gdyb3260(org_name string, doctor string, fixmedins_code string, insuplc_admdvs string, mdtrtarea_admvs string, secret_key string, year string, month string, sign string) (string, string) {
3792 3832
 	//生成签名
3793 3833
 	nonce := GetRandomString(32)
3794 3834
 	timestamp := time.Now().Unix()
3795 3835
 	signature := setSignature(timestamp, nonce, secret_key)
3796 3836
 	//生成输入报文
3797
-	inputMessage := SetInputMessage(nonce, timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs)
3837
+	inputMessage := SetInputMessageTwo(nonce, timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs, sign)
3798 3838
 	input := make(map[string]interface{})
3799 3839
 	inputData := make(map[string]interface{})
3800 3840
 	inputMessage["infno"] = "3260" // 交易编码
@@ -4034,3 +4074,113 @@ func Gdyb3262(org_name string, doctor string, fixmedins_code string, insuplc_adm
4034 4074
 	}
4035 4075
 
4036 4076
 }
4077
+func Gdyb9001(org_name string, doctor string, fixmedins_code string, insuplc_admdvs string, mdtrtarea_admvs string, secret_key string, admin_user_id int64) (string, string) {
4078
+	//生成签名
4079
+	nonce := GetRandomString(32)
4080
+	timestamp := time.Now().Unix()
4081
+	signature := setSignature(timestamp, nonce, secret_key)
4082
+	//生成输入报文
4083
+	inputMessage := SetInputMessage(nonce, timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs)
4084
+	input := make(map[string]interface{})
4085
+	inputData := make(map[string]interface{})
4086
+	inputMessage["infno"] = "9001"        // 交易编码
4087
+	inputData["opter_no"] = admin_user_id // 就诊凭证编号
4088
+	inputData["mac"] = GetMac()           // 开始时间
4089
+	inputData["ip"] = GetLocalIp()
4090
+
4091
+	input["data"] = inputData
4092
+	inputMessage["input"] = input //交易输入
4093
+	var inputLog string
4094
+	bytesData, err := json.Marshal(inputMessage)
4095
+	inputLog = string(bytesData)
4096
+	fmt.Println(string(bytesData))
4097
+	if err != nil {
4098
+		fmt.Println(err.Error())
4099
+		return err.Error(), ""
4100
+	}
4101
+	reader := bytes.NewReader(bytesData)
4102
+	gdyb_url := beego.AppConfig.String("gdyb_url")
4103
+	gdyb_paasid := beego.AppConfig.String("gdyb_paasid")
4104
+
4105
+	var url string
4106
+	if fixmedins_code == "H15049901371" {
4107
+		url = gdyb_url
4108
+	} else {
4109
+		url = gdyb_url + "3261"
4110
+	}
4111
+
4112
+	if insuplc_admdvs == "421300" {
4113
+		var json2 string
4114
+		cmd := exec.Command("java", "-jar", "yh_hb_fat.jar", "1101", string(bytesData), json2)
4115
+		out, err := cmd.Output()
4116
+		if err != nil {
4117
+			fmt.Println("error:", err.Error())
4118
+		}
4119
+		fmt.Println(string(out))
4120
+		return hex.EncodeToString(out), inputLog
4121
+	} else {
4122
+
4123
+		//url := "http://igb.hsa.gdgov.cn/ebus/gdyb_inf/poc/hsa/hgs/1101"
4124
+		request, err := http.NewRequest("POST", url, reader)
4125
+		if err != nil {
4126
+			fmt.Println(err.Error())
4127
+			return err.Error(), ""
4128
+		}
4129
+
4130
+		request.Header.Set("Content-Type", "application/json;charset=UTF-8")
4131
+		request.Header.Set("x-tif-paasid", gdyb_paasid)
4132
+		request.Header.Set("x-tif-signature", signature)
4133
+		request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp, 10))
4134
+		request.Header.Set("x-tif-nonce", nonce)
4135
+
4136
+		client := http.Client{}
4137
+		resp, err := client.Do(request)
4138
+		if err != nil {
4139
+			fmt.Println(err.Error())
4140
+			return err.Error(), ""
4141
+		}
4142
+		respBytes, err := ioutil.ReadAll(resp.Body)
4143
+		if err != nil {
4144
+			fmt.Println(err.Error())
4145
+			return err.Error(), ""
4146
+		}
4147
+		fmt.Println(string(respBytes))
4148
+		str := string(respBytes)
4149
+		return str, inputLog
4150
+
4151
+	}
4152
+
4153
+}
4154
+
4155
+//获取本机ip
4156
+func GetLocalIp() string {
4157
+	addrs, err := net.InterfaceAddrs()
4158
+	if err != nil {
4159
+		fmt.Println("get local ip failed")
4160
+	}
4161
+	for _, address := range addrs {
4162
+		if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
4163
+			if ipnet.IP.To4() != nil {
4164
+				return ipnet.IP.String()
4165
+			}
4166
+		}
4167
+	}
4168
+	return ""
4169
+}
4170
+
4171
+//获取本机Mac
4172
+func GetMac() string {
4173
+	interfaces, err := net.Interfaces()
4174
+	if err != nil {
4175
+		fmt.Println("Get loacl Mac failed")
4176
+	}
4177
+	for _, inter := range interfaces {
4178
+		mac := inter.HardwareAddr
4179
+		fmt.Println("+======" + mac.String())
4180
+		if mac.String() != "" {
4181
+			return mac.String()
4182
+		}
4183
+
4184
+	}
4185
+	return ""
4186
+}