using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using MadRunFabric.Common; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Configuration; using Newtonsoft.Json.Linq; using Newtonsoft.Json; using WorkOrderApi.IRepositories; using MadRunFabric.Model.WorkOrderApi.Areas_FW; namespace WorkOrderApi.Controllers.ApointRegistration { /// /// 预约挂号 /// [Authorize] [ApiVersion("6.0")] [Route("api/[controller]")] [Produces("application/json")] public class ApointRegistrationController : BaseController { public IActionResult Index() { return View(); } private readonly IConfiguration _configuration; private readonly ILogger _logger; private readonly IHis_OpeRecordsRepository _his_operecordsRepository; public ApointRegistrationController(ILogger logger, IHis_OpeRecordsRepository his_operecordsRepository, IConfiguration configuration ) { _logger = logger; _his_operecordsRepository = his_operecordsRepository; _configuration = configuration; } //获取签名sign [HttpGet("getsign")] public async Task GetSign(List keyvalue) { //model.timestamp = DateTimeConvert.ToTimespan(DateTime.Now);//保存导入时间时间戳 var input = keyvalue; var keys = new List(); var values = new List(); for (int index = 0; index < input.Count; index++) { if (index % 2 == 0) keys.Add(input[index]); else values.Add(input[index]); } //添加时间戳 keys.Add("timestamp"); values.Add(DateTimeConvert.ToTimespan(DateTime.Now).ToString()); var result = keys.Zip(values, (key, value) => new KeyValuePair(key, value)).ToList (); var sign = GenerateSign(result ,""); //var obj = new //{ // tasktel = model, // task = modelTask //}; return Success("获取成功", sign); } #region 计算签名 /// /// 生成签名 /// /// 参数列表 /// 是否转大写 /// 是否直接加上签名Key /// public static string GenerateSign(List> lst, string privateKey) { Comparison> Comparer = new Comparison>(CompareKeyValuepair); lst.Sort(Comparer); var paramlst = lst.Where(p => !string.IsNullOrEmpty(p.Value)).ToList(); string signstr = string.Join("&", paramlst.Select(p => p.Key + "=" + p.Value)) + privateKey; return Sign(signstr, "UTF-8"); } /// /// 根据Key比较排序位置 /// private static int CompareKeyValuepair(KeyValuePair p1, KeyValuePair p2) { return string.Compare(p1.Key, p2.Key); } /// /// 签名字符串 /// /// 需要签名的字符串 /// 密钥 /// 编码格式 /// 签名结果 public static string Sign(string prestr, string inputCharset) { StringBuilder sb = new StringBuilder(); MD5 md5 = new MD5CryptoServiceProvider(); byte[] t = md5.ComputeHash(Encoding.GetEncoding(inputCharset).GetBytes(prestr)); foreach (byte t1 in t) { sb.Append(t1.ToString("x2")); } return sb.ToString(); } #endregion //获取AccessToken [HttpGet("gettokennew")] public async Task GetAccessTokenNEW()//(List keyvalue) { var keyvalue = new List(); #region 获取签名 keyvalue.Add("appid"); keyvalue.Add("appidvalue"); keyvalue.Add("secret"); keyvalue.Add("secretvalue"); keyvalue.Add("timestamp"); keyvalue.Add(DateTimeConvert.ToTimespan(DateTime.Now).ToString()); //keyvalue.Add("sign"); #endregion #region 获取路径 string ha = _configuration["his:hisaddress"].ToString(); #endregion string strURL = "http://" + ha + "/Token"; var m = new { appid = "appidvalue", secret = "secretvalue", timestamp = DateTimeConvert.ToTimespan(DateTime.Now).ToString(), sign= GetSign(keyvalue).Result.ToString() }; //实体序列化和反序列化 string json1 = JsonConvert.SerializeObject(m); string strHTML = MadRunFabric.Common.HttpMethods.HttpPost(strURL, json1); JObject jo1 = (JObject)JsonConvert.DeserializeObject(strHTML); if (jo1 != null && jo1["result"].ToString() == "0") { #region 添加访问记录 /*var model = new His_OpeRecords(); model.requesttype = "获取token"; model.requestaddress = strURL; model.requestparameter = json1; model.backcontent = jo1.ToString (); bool bl = await _his_operecordsRepository.Add(model);*/ #endregion AddRecords("获取token", strURL, json1, jo1.ToString(),"成功"); return Success("获取token成功", jo1); } else { if (jo1 != null) { AddRecords("获取token", strURL, json1, jo1.ToString(), "失败"); } else { AddRecords("获取token", strURL, json1, "", "失败"); } return Error("获取token失败"); } } #region 获取出诊科室列表 /// /// 获取出诊科室列表 /// /// [HttpGet("divisionnew")] public async Task DivisionAsyncNEW() { var keyvalue = new List(); #region 获取签名 keyvalue.Add("access_token"); keyvalue.Add("tokenvalue"); keyvalue.Add("timestamp"); keyvalue.Add(DateTimeConvert.ToTimespan(DateTime.Now).ToString()); //keyvalue.Add("sign"); #endregion #region 获取路径 string ha = _configuration["his:hisaddress"].ToString(); #endregion string strURL = "http://" + ha + "/Appt/Division"; var m = new { access_token = "access_token", timestamp = DateTimeConvert.ToTimespan(DateTime.Now).ToString(), sign = GetSign(keyvalue).Result.ToString() }; //实体序列化和反序列化 string json1 = JsonConvert.SerializeObject(m); string strHTML = MadRunFabric.Common.HttpMethods.HttpPost(strURL, json1); JObject jo1 = (JObject)JsonConvert.DeserializeObject(strHTML); if (jo1 != null && jo1["result"].ToString() == "0") { AddRecords("获取出诊科室列表", strURL, json1, jo1.ToString(), "成功"); return Success("获取出诊科室列表成功", jo1); } else { if (jo1 != null) { AddRecords("获取出诊科室列表", strURL, json1, jo1.ToString(), "失败"); } else { AddRecords("获取出诊科室列表", strURL, json1, "", "失败"); } return Error("获取出诊科室列表失败"); } } #endregion #region 获取出诊排班 /// /// 获取出诊排班 /// /// [HttpGet("schedulingnew")] public async Task SchedulingAsyncNEW(string startdate,string enddate,string divisioncode) { var keyvalue = new List(); #region 获取签名 keyvalue.Add("start_date"); keyvalue.Add("startdate"); keyvalue.Add("end_date"); keyvalue.Add("enddate"); keyvalue.Add("division_code"); keyvalue.Add("divisioncode"); keyvalue.Add("access_token"); keyvalue.Add("tokenvalue"); keyvalue.Add("timestamp"); keyvalue.Add(DateTimeConvert.ToTimespan(DateTime.Now).ToString()); //keyvalue.Add("sign"); #endregion #region 获取路径 string ha = _configuration["his:hisaddress"].ToString(); #endregion string strURL = "http://" + ha + "/Appt/Scheduling"; var m = new { start_date=startdate , end_date=enddate, division_code=divisioncode , access_token = "access_token", timestamp = DateTimeConvert.ToTimespan(DateTime.Now).ToString(), sign = GetSign(keyvalue).Result.ToString() }; //实体序列化和反序列化 string json1 = JsonConvert.SerializeObject(m); string strHTML = MadRunFabric.Common.HttpMethods.HttpPost(strURL, json1); JObject jo1 = (JObject)JsonConvert.DeserializeObject(strHTML); if (jo1 != null && jo1["result"].ToString() == "0") { AddRecords("获取出诊排班", strURL, json1, jo1.ToString(), "成功"); return Success("获取出诊排班成功", jo1); } else { if (jo1 != null) { AddRecords("获取出诊排班", strURL, json1, jo1.ToString(), "失败"); } else { AddRecords("获取出诊排班", strURL, json1, "", "失败"); } return Error("获取出诊排班失败"); } } #endregion #region 获取出诊排班--按医生 /// /// 获取出诊排班 /// /// [HttpGet("doctorschedulingnew")] public async Task DoctorSchedulingAsyncNEW(string startdate, string enddate, string doctorcode) { var keyvalue = new List(); #region 获取签名 keyvalue.Add("start_date"); keyvalue.Add("startdate"); keyvalue.Add("end_date"); keyvalue.Add("enddate"); keyvalue.Add("doctor_code"); keyvalue.Add("doctorcode"); keyvalue.Add("access_token"); keyvalue.Add("tokenvalue"); keyvalue.Add("timestamp"); keyvalue.Add(DateTimeConvert.ToTimespan(DateTime.Now).ToString()); //keyvalue.Add("sign"); #endregion #region 获取路径 string ha = _configuration["his:hisaddress"].ToString(); #endregion string strURL = "http://" + ha + "/Appt/DoctorScheduling"; var m = new { start_date = startdate, end_date = enddate, doctor_code = doctorcode, access_token = "access_token", timestamp = DateTimeConvert.ToTimespan(DateTime.Now).ToString(), sign = GetSign(keyvalue).Result.ToString() }; //实体序列化和反序列化 string json1 = JsonConvert.SerializeObject(m); string strHTML = MadRunFabric.Common.HttpMethods.HttpPost(strURL, json1); JObject jo1 = (JObject)JsonConvert.DeserializeObject(strHTML); if (jo1 != null && jo1["result"].ToString() == "0") { AddRecords("按医生获取出诊排班", strURL, json1, jo1.ToString(), "成功"); return Success("按医生获取出诊排班成功", jo1); } else { if (jo1 != null) { AddRecords("按医生获取出诊排班", strURL, json1, jo1.ToString(), "失败"); } else { AddRecords("按医生获取出诊排班", strURL, json1, "", "失败"); } return Error("按医生获取出诊排班失败"); } } #endregion #region 获取分时出诊信息 /// /// 获取出诊排班 /// /// [HttpGet("getperiodnew")] public async Task GetPeriodAsyncNEW(string sched_id) { var keyvalue = new List(); #region 获取签名 keyvalue.Add("sched_id"); keyvalue.Add(sched_id); keyvalue.Add("access_token"); keyvalue.Add("tokenvalue"); keyvalue.Add("timestamp"); keyvalue.Add(DateTimeConvert.ToTimespan(DateTime.Now).ToString()); //keyvalue.Add("sign"); #endregion #region 获取路径 string ha = _configuration["his:hisaddress"].ToString(); #endregion string strURL = "http://" + ha + "/Appt/GetPeriod"; var m = new { sched_id , access_token = "access_token", timestamp = DateTimeConvert.ToTimespan(DateTime.Now).ToString(), sign = GetSign(keyvalue).Result.ToString() }; //实体序列化和反序列化 string json1 = JsonConvert.SerializeObject(m); string strHTML = MadRunFabric.Common.HttpMethods.HttpPost(strURL, json1); JObject jo1 = (JObject)JsonConvert.DeserializeObject(strHTML); if (jo1 != null && jo1["result"].ToString() == "0") { AddRecords("获取分时出诊信息", strURL, json1, jo1.ToString(), "成功"); return Success("获取分时出诊信息成功", jo1); } else { if (jo1 != null) { AddRecords("获取分时出诊信息", strURL, json1, jo1.ToString(), "失败"); } else { AddRecords("获取分时出诊信息", strURL, json1, "", "失败"); } return Error("获取分时出诊信息失败"); } } #endregion #region 添加预约申请 /// /// 添加预约申请 /// /// [HttpGet("submitapptnew")] public async Task SubmitApptAsyncNEW(string opinfo_id, string patient_name, string idcard_code,string phone) { var keyvalue = new List(); #region 获取签名 keyvalue.Add("opinfo_id"); keyvalue.Add(opinfo_id); keyvalue.Add("patient_name"); keyvalue.Add(patient_name); keyvalue.Add("idcard_code"); keyvalue.Add(idcard_code); keyvalue.Add("phone"); keyvalue.Add(phone); keyvalue.Add("access_token"); keyvalue.Add("tokenvalue"); keyvalue.Add("timestamp"); keyvalue.Add(DateTimeConvert.ToTimespan(DateTime.Now).ToString()); //keyvalue.Add("sign"); #endregion #region 获取路径 string ha = _configuration["his:hisaddress"].ToString(); #endregion string strURL = "http://" + ha + "/Appt/SubmitAppt"; var m = new { opinfo_id, patient_name, idcard_code, phone, access_token = "access_token", timestamp = DateTimeConvert.ToTimespan(DateTime.Now).ToString(), sign = GetSign(keyvalue).Result.ToString() }; //实体序列化和反序列化 string json1 = JsonConvert.SerializeObject(m); string strHTML = MadRunFabric.Common.HttpMethods.HttpPost(strURL, json1); JObject jo1 = (JObject)JsonConvert.DeserializeObject(strHTML); if (jo1 != null && jo1["result"].ToString() == "0") { AddRecords("添加预约申请", strURL, json1, jo1.ToString(), "成功"); return Success("添加预约申请成功", jo1); } else { if (jo1 != null) { AddRecords("添加预约申请", strURL, json1, jo1.ToString(), "失败"); } else { AddRecords("添加预约申请", strURL, json1, "", "失败"); } return Error("获取预约申请失败"); } } #endregion #region 取消预约申请 /// /// 取消预约申请 /// /// [HttpGet("cancelapptnew")] public async Task CancelApptAsyncNEW(string appt_id, string vericode) { var keyvalue = new List(); #region 获取签名 keyvalue.Add("appt_id"); keyvalue.Add(appt_id); keyvalue.Add("vericode"); keyvalue.Add(vericode); keyvalue.Add("access_token"); keyvalue.Add("tokenvalue"); keyvalue.Add("timestamp"); keyvalue.Add(DateTimeConvert.ToTimespan(DateTime.Now).ToString()); //keyvalue.Add("sign"); #endregion #region 获取路径 string ha = _configuration["his:hisaddress"].ToString(); #endregion string strURL = "http://" + ha + "/Appt/CancelAppt"; var m = new { appt_id, vericode, access_token = "access_token", timestamp = DateTimeConvert.ToTimespan(DateTime.Now).ToString(), sign = GetSign(keyvalue).Result.ToString() }; //实体序列化和反序列化 string json1 = JsonConvert.SerializeObject(m); string strHTML = MadRunFabric.Common.HttpMethods.HttpPost(strURL, json1); JObject jo1 = (JObject)JsonConvert.DeserializeObject(strHTML); if (jo1 != null && jo1["result"].ToString() == "0") { AddRecords("取消预约申请", strURL, json1, jo1.ToString(), "成功"); return Success("取消预约申请成功", jo1); } else { if (jo1 != null) { AddRecords("取消预约申请", strURL, json1, jo1.ToString(), "失败"); } else { AddRecords("取消预约申请", strURL, json1, "", "失败"); } return Error("取消预约申请失败"); } } #endregion #region 接口访问测试 /// /// 接口访问测试 /// /// [HttpGet("apiconnectiontest")] public async Task ApiConnectionTest() { var keyvalue = new List(); #region 获取签名 keyvalue.Add("access_token"); keyvalue.Add("tokenvalue"); keyvalue.Add("timestamp"); keyvalue.Add(DateTimeConvert.ToTimespan(DateTime.Now).ToString()); //keyvalue.Add("sign"); #endregion #region 获取路径 string ha = _configuration["his:hisaddress"].ToString(); #endregion string strURL = "http://" + ha + "/Appt/ApiConnectionTest"; var m = new { access_token = "access_token", timestamp = DateTimeConvert.ToTimespan(DateTime.Now).ToString(), sign = GetSign(keyvalue).Result.ToString() }; //实体序列化和反序列化 string json1 = JsonConvert.SerializeObject(m); string strHTML = MadRunFabric.Common.HttpMethods.HttpPost(strURL, json1); JObject jo1 = (JObject)JsonConvert.DeserializeObject(strHTML); if (jo1 != null && jo1["result"].ToString() == "0") { return Success("接口访问测试成功", jo1); } else { return Error("接口访问测试失败"); } } #endregion #region 添加请求访问记录 public bool AddRecords(string type,string address,string paras,string backcontent,string issuccess) { #region 添加访问记录 var model = new His_OpeRecords(); model.requesttype = type; model.requestaddress = address; model.requestparameter = paras; model.backcontent = backcontent; model.issuccess = issuccess; bool bl = _his_operecordsRepository.Add(model).Result ; return bl; #endregion } #endregion #region 测试 //获取AccessToken [HttpGet("gettoken")] public async Task GetAccessToken() { var m = new { appid = "appidvalue", secret = "secretvalue", timestamp = DateTimeConvert.ToTimespan(DateTime.Now).ToString(), sign = "sign" }; return Success("获取token成功", m); } /// /// 获取出诊科室列表 /// /// [HttpGet("division")] public async Task DivisionAsync() { var m = new { access_token = "access_token", timestamp = DateTimeConvert.ToTimespan(DateTime.Now).ToString(), sign = "SIGN" }; return Success("获取token成功", m); } /// /// 获取出诊排班 /// /// [HttpGet("scheduling")] public async Task SchedulingAsync(string startdate, string enddate, string divisioncode) { var m = new { start_date = startdate, end_date = enddate, division_code = divisioncode, access_token = "access_token", timestamp = DateTimeConvert.ToTimespan(DateTime.Now).ToString(), sign = "sign" }; return Success("获取出诊排班成功", m); } [HttpGet("doctorscheduling")] public async Task DoctorSchedulingAsync(string startdate, string enddate, string doctorcode) { var m = new { start_date = startdate, end_date = enddate, doctor_code = doctorcode, access_token = "access_token", timestamp = DateTimeConvert.ToTimespan(DateTime.Now).ToString(), sign = "sign" }; return Success("按医生获取出诊排班成功", m); } /// /// 获取分时出诊信息 /// /// [HttpGet("getperiod")] public async Task GetPeriodAsync(string sched_id) { var m = new { sched_id, access_token = "access_token", timestamp = DateTimeConvert.ToTimespan(DateTime.Now).ToString(), sign = "sign" }; return Success("获取分时出诊信息成功", m); } /// /// 添加预约申请 /// /// [HttpGet("submitappt")] public async Task SubmitApptAsync(string opinfo_id, string patient_name, string idcard_code, string phone) { var m = new { opinfo_id, patient_name, idcard_code, phone, access_token = "access_token", timestamp = DateTimeConvert.ToTimespan(DateTime.Now).ToString(), sign = "sign" }; return Success("添加预约申请成功", m); } /// /// 取消预约申请 /// /// [HttpGet("cancelappt")] public async Task CancelApptAsync(string appt_id, string vericode) { var m = new { appt_id, vericode, access_token = "access_token", timestamp = DateTimeConvert.ToTimespan(DateTime.Now).ToString(), sign = "sign" }; return Success("取消预约申请成功", m); } #endregion } }