using Newtonsoft.Json.Linq;
using PTMedicalInsurance.Helper;
using PTMedicalInsurance.Variables;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace PTMedicalInsurance.Common
{
///
/// 银海安全控件
///
class YinHaiSafeCtrl
{
string progID = "YinHai.CHS.InterfaceSCS";
System.Type comType;
object comInstance;
///
/// 调用银海安全控件
///
///
///
public int Prepare(string funNo,out string sSafeControlsRtnValue)
{
string pErrMsg = string.Empty;
JObject joInput = JsonHelper.setYinHaiSafe(funNo);
sSafeControlsRtnValue = string.Empty;
Init();
Call(funNo,joInput.ToString(), out sSafeControlsRtnValue);
JObject joRtn = new JObject();
joRtn = JObject.Parse(sSafeControlsRtnValue);
int errorCode = int.Parse(joRtn["code"].ToString());
string errorMessage = joRtn["message"].ToString();
if (errorCode != 1)
{
sSafeControlsRtnValue = errorMessage;
return -1;
}
else
{
JObject jodata = JObject.FromObject(joRtn["data"]);
Global.pat.insuplc_admdvs = jodata["insuplc_admdvs"].ToString();
Global.pat.mdtrtcertType = jodata["mdtrt_cert_type"].ToString();
Global.pat.mdtrtcertNO = jodata["mdtrt_cert_no"].ToString();
Global.pat.psn_type = jodata["psn_cert_type"].ToString();
Global.pat.certNO = jodata["certno"].ToString();
Global.pat.name = jodata["psn_name"].ToString();
Global.pat.card.SN = jodata["card_sn"].ToString();
Global.pat.card.Cardtoken = jodata["card_token"].ToString();
sSafeControlsRtnValue = jodata.ToString();
}
return 0;
}
///
/// 调用银海控件进行打印
///
///
///
public void YinHaiPrint(string input, out string output)
{
string errMsg = string.Empty;
Init();
Print(input, out output);
}
private int Init()
{
comType = System.Type.GetTypeFromProgID(progID);
// 创建Com的实例
if (comType != null)
{
Global.writeLog("开始COM组件Init");
//创建实例
comInstance = Activator.CreateInstance(comType);
if (comInstance != null)
{
Global.writeLog("Init实例创建成功");
}
//设置需要设置的参数值
object[] ParamArray = new object[2];
ParamArray[0] = 0;
ParamArray[1] = "";
ParameterModifier[] ParamMods = new ParameterModifier[1];
ParamMods[0] = new ParameterModifier(2); // 初始化为接口参数的个数
ParamMods[0][0] = true;
ParamMods[0][1] = true; // 设置第二个参数为返回参数,调用含有ParameterModifier数组的重载函数
comType.InvokeMember("yh_CHS_init", // 接口函数名
BindingFlags.Default | BindingFlags.InvokeMethod,
null,
comInstance, // 调用的COM组件
ParamArray, // 参数数组
ParamMods, // 指定返回参数的ParameterModifier数组
null,
null);
string Msg = "加载成功:" + ParamArray[1].ToString();
Global.writeLog(Msg + "___" + ParamArray[0].ToString());
return (int)ParamArray[0];
}
else
{
string Msg = "YinHaiComType加载失败!";
Global.writeLog(Msg);
return 1;
}
}
private int Call(string infno, string inputData, out string outputData)
{
try
{
if (comType != null)
{
//创建实例,不能再次创建,否则会提示没有初始化
if (comInstance != null)
{
Global.writeLog("实例创建成功,准备调用Call服务");
}
else
{
outputData = "实例不存在!";
Global.writeLog("实例不存在");
return -1;
}
//设置需要设置的参数值
object[] ParamArray = new object[3];
ParamArray[0] = infno;
ParamArray[1] = inputData;
ParamArray[2] = "";
ParameterModifier[] ParamMods = new ParameterModifier[1];
ParamMods[0] = new ParameterModifier(3); // 初始化为接口参数的个数
ParamMods[0][2] = true;
comType.InvokeMember("yh_CHS_call", // 接口函数名
BindingFlags.Default | BindingFlags.InvokeMethod,
null,
comInstance, // 调用的COM组件
ParamArray, // 参数数组
ParamMods, // 指定返回参数的ParameterModifier数组
null,
null);
outputData = ParamArray[2].ToString();
Global.writeLog("Com输出:" + outputData);
return 0;
}
else
{
outputData = "COM加载失败!";
Global.writeLog("COM加载失败!");
}
}
catch (Exception ex)
{
outputData = ex.Message;
Global.writeLog("COM加载失败!" + outputData);
}
return -1;
}
///
/// 打印结算清单
///
///
///
private void Print(string input, out string output)
{
if (comType != null)
{
//创建实例,不能再次创建,否则会提示没有初始化
if (comInstance != null)
{
Global.writeLog("实例创建成功,准备调用Call服务");
}
else
{
output = "实例不存在!";
Global.writeLog("实例不存在");
return;
}
//设置需要设置的参数值
object[] ParamArray = new object[2];
ParamArray[0] = input;
ParamArray[1] = "";
ParameterModifier[] ParamMods = new ParameterModifier[1];
ParamMods[0] = new ParameterModifier(2); // 初始化为接口参数的个数
ParamMods[0][1] = true;
comType.InvokeMember("yh_CHS_print", // 接口函数名
BindingFlags.Default | BindingFlags.InvokeMethod,
null,
comInstance, // 调用的COM组件
ParamArray, // 参数数组
ParamMods, // 指定返回参数的ParameterModifier数组
null,
null);
output = ParamArray[1].ToString();
}
else
{
output = "COM加载失败!";
Global.writeLog("COM加载失败!");
}
}
public void Destroy(out string output)
{
// 创建Com的实例
if (comType != null)
{
//创建实例
comInstance = Activator.CreateInstance(comType);
if (comInstance != null)
{
Global.writeLog("实例创建成功,准备调用Call服务");
}
else
{
output = "实例不存在!";
Global.writeLog("实例不存在");
return;
}
//设置需要设置的参数值
object[] ParamArray = new object[0];
ParameterModifier[] ParamMods = new ParameterModifier[0];
ParamMods[0] = new ParameterModifier(0); // 初始化为接口参数的个数
comType.InvokeMember("yh_CHS_destroy", // 接口函数名
BindingFlags.Default | BindingFlags.InvokeMethod,
null,
comInstance, // 调用的COM组件
ParamArray, // 参数数组
ParamMods, // 指定返回参数的ParameterModifier数组
null,
null);
output = "destroy成功!";
}
else
{
output = "COM加载失败!";
Global.writeLog("COM加载失败!");
}
}
}
}