using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//using MediII.Adapter.BaseBiz;
using System.Data.Common;
using System.Transactions;
using Microsoft.Practices.EnterpriseLibrary.Data;
//using MediII.Adapter.Model.UE;
using System.Globalization;
using MediII.Adapter.BizComponent.Base;
using IL.Common;
using System.Xml;
namespace MediII.Adapter.BizComponent.PMU
{
public class BizComponent_PMU : BaseBizComponent, IBizComponent
{
const string Insert = "B01"; //增加个人纪录
//const string Update = "B02"; //更新个人记录
//const string Delete = "B03"; //删除个人记录
//数据库连接
protected Database ctx
{
get { return base.HealthCarectx; }
}
public BizComponent_PMU()
{
}
////HealthCareContainer HealthCareContainer = new HealthCareContainer();
//private Database ctx = null;
//public BizComponent_PMU(Database dbCtx)
//{
// ctx = dbCtx;
//}
public override string DoProcess(string m, string msgType)
{
string strMsgType = null;
//try
//{
//try
// {
//取得消息类型 MAD新增 MUP更新 MDL删除 "MDC"作废 "MAC"恢复
OperateXmlUtil helper = new OperateXmlUtil();
string qurysql = "select count(*) from dbo.his_doct where DOCT_CODE=@DOCT_CODE";
DbCommand command = ctx.GetSqlStringCommand(qurysql.ToString());
//string pkid = helper.XpathRead(m, "//*[@root='2.16.156.10011.1.4']", "extension");
//ctx.AddInParameter(command, "DOCT_CODE", System.Data.DbType.String, pkid);
//int counts = Convert.ToInt32(ctx.ExecuteScalar(command));
var valueNode = helper.XpathRead(m, "//*[name()='healthCarePrincipalPerson']").Item(0);
string idCode = string.Empty;
foreach (XmlNode xe in valueNode.ChildNodes)
{
if (xe.Name == "name")
{
idCode = xe.LastChild.LastChild.Attributes["value"].Value;
break;
}
}
int index = idCode.IndexOf('/');
string pkid = idCode.Substring(index, idCode.Length - index);
//ctx.AddInParameter(command, "DOCT_NAME", System.Data.DbType.String, pkid.Substring(0,index));
ctx.AddInParameter(command, "DOCT_CODE", System.Data.DbType.String, idCode.Substring(index, idCode.Length - index));
int counts = Convert.ToInt32(ctx.ExecuteScalar(command));
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
//for (int i = 0; i < pmuB01.EDURepetitionsUsed; i++)
//{
if (counts == 0)
{
//没有查询到记录则新增,否则修改
AddData(m, idCode);
}
else
{
UpDateData(m, idCode);
}
scope.Complete();
}
return string.Empty;
}
public void AddData(string message, string id)
{
#region 新增
// string sql = @"INSERT INTO dbo.his_doct
// ( DOCT_CODE ,
// DOCT_NAME ,
// HIS_DEPT_CODE ,
// HIS_DEPT_NAME ,
// status
// )
// VALUES ( @DOCT_CODE,
// @DOCT_NAME ,
// @HIS_DEPT_CODE ,
// @HIS_DEPT_NAME ,
// @status)";
string sql = @"INSERT INTO dbo.his_doct
( DOCT_CODE ,
DOCT_NAME
)
VALUES ( @DOCT_CODE,
@DOCT_NAME )";
DbCommand command = ctx.GetSqlStringCommand(sql.ToString());
SetEntity(message, command, id);
SqlDataAccess.ExecuteNonQuery(ctx, command);
#endregion
}
public void UpDateData(string message, string id)
{
#region 修改
string sql1 = @"update dbo.his_doct set
DOCT_NAME =@DOCT_NAME
where DOCT_CODE=@DOCT_CODE";
DbCommand command1 = ctx.GetSqlStringCommand(sql1.ToString());
SetEntity(message, command1, id);
SqlDataAccess.ExecuteNonQuery(ctx, command1);
#endregion
}
public void SetEntity(string message, DbCommand command, string id)
{
string value = string.Empty;
OperateXmlUtil xmlHelper = new OperateXmlUtil();
int index = id.IndexOf('/');
ctx.AddInParameter(command, "DOCT_CODE", System.Data.DbType.String, id.Substring(index+1, id.Length - index-1));
ctx.AddInParameter(command, "DOCT_NAME", System.Data.DbType.String, id.Substring(0,index));
//var valueNode = xmlHelper.XpathRead(message, "//*[name()='healthCarePrincipalPerson']").Item(0);
//foreach (XmlNode xe in valueNode.ChildNodes)
//{
// if (xe.Name == "name")
// {
// value = xe.LastChild.LastChild.Attributes["value"].Value;
// ctx.AddInParameter(command, "DOCT_NAME", System.Data.DbType.String, value);
// break;
// }
//}
//value = xmlHelper.XpathRead(message, "//*[@root='2.16.156.10011.1.26']", "extension");
//ctx.AddInParameter(command, "HIS_DEPT_CODE", System.Data.DbType.AnsiString, value);
//valueNode = xmlHelper.XpathRead(message, "//*[name()='affiliatedPrincipalOrganization']").Item(0);
//foreach (XmlNode xe in valueNode.ChildNodes)
//{
// if (xe.Name == "name")
// {
// value = xe.LastChild.LastChild.Attributes["value"].Value;
// ctx.AddInParameter(command, "HIS_DEPT_NAME", System.Data.DbType.String, value);
// break;
// }
//}
//ctx.AddInParameter(command, "status", System.Data.DbType.String, "在用");
//ctx.ExecuteNonQuery(command);
}
public void AddEmpLicense(string type, string pkid, string bm, string updateuser)
{
#region 新增资格编码
var sql = @"INSERT INTO HealthCare.dbo.EmpLicense
( EmpLicenseID ,
EmpNo ,
LicenseType ,
LicenseClass ,
LicenseNo ,
IsMajor ,
IssueDate ,
StartDate ,
EndDate ,
UpdateUser ,
UpdateTime ,
IsDel
)
VALUES ( NEXT VALUE FOR HealthCare.dbo.Seq_EmpLicense_EmpLicenseID ,
@EmpNo ,
@LicenseType ,
1 ,
@LicenseNo ,
0 ,
GETDATE() ,
GETDATE() ,
'2999-12-31 00:00:00.000',
@UpdateUser ,
GETDATE() ,
0
)";
#endregion
var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
SqlDataAccess.AddInParameter(ctx, cmd, "EmpNo", DbType.AnsiString, pkid);
SqlDataAccess.AddInParameter(ctx, cmd, "LicenseType", DbType.AnsiString, type);
SqlDataAccess.AddInParameter(ctx, cmd, "LicenseNo", DbType.AnsiString, bm);
SqlDataAccess.AddInParameter(ctx, cmd, "UpdateUser", DbType.AnsiString, updateuser);
SqlDataAccess.DBExecuteNonQuery(ctx, cmd);
}
public void UpdateEmpLicense(string type, string pkid, string bm)
{
var sql = @"UPDATE HealthCare.dbo.EmpLicense SET LicenseNo=@LicenseNo WHERE EmpNo=@EmpNo AND LicenseType=@LicenseType ";
var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
SqlDataAccess.AddInParameter(ctx, cmd, "EmpNo", DbType.AnsiString, pkid);
SqlDataAccess.AddInParameter(ctx, cmd, "LicenseType", DbType.AnsiString, type);
SqlDataAccess.AddInParameter(ctx, cmd, "LicenseNo", DbType.AnsiString, bm);
SqlDataAccess.DBExecuteNonQuery(ctx, cmd);
}
public void DeleteEmpLicense(string type, string pkid)
{
var sql = "DELETE FROM HealthCare.dbo.EmpLicense WHERE EmpNo=@EmpNo AND LicenseType=@LicenseType";
var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
SqlDataAccess.AddInParameter(ctx, cmd, "EmpNo", DbType.AnsiString, pkid);
SqlDataAccess.AddInParameter(ctx, cmd, "LicenseType", DbType.AnsiString, type);
SqlDataAccess.DBExecuteNonQuery(ctx, cmd);
}
/////
///// 获取当前时间
/////
//internal DateTime GetNow(Database ctx)
//{
// object obj = (DateTime)SqlDataAccess.ExecuteScalar(ctx, CommandType.Text, "select GETDATE()");
// if (obj != null)
// return Convert.ToDateTime(obj.ToString());
// else
// return DateTime.Now;
//}
//获取性别,转化
public string GetSex(string value)
{
string sex = "0";
switch (value)
{
case "F":
sex = "1";//男
break;
case "男":
sex = "1";//男
break;
case "M":
sex = "2";//女
break;
case "女":
sex = "2";//女
break;
default:
sex = "9";//不定
break;
}
return sex;
}
public string GetYsdj(string hiscodeid)
{
var sql = "SELECT CodeID FROM HealthCare.dbo.V_UserLevel WHERE HisCodeID=@HisCodeID";
var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
SqlDataAccess.AddInParameter(ctx, cmd, "HisCodeID", DbType.AnsiString, hiscodeid);
string codeid = StrHelepr.Obj2StrTrim(SqlDataAccess.DBExecuteScalar(ctx, cmd));
if (codeid != null)
{
return codeid;
}
else
{
throw new Exception("V_UserLevel没有找到对应的医生等级");
}
}
public string GetEmpType(string value)
{
string emptype = "";
switch (value) // 员工分类
{
case "1"://1 医生
emptype = "1";
break;
case "2"://2 护士
emptype = "2";
break;
case "3"://3 财务人员
emptype = "3";
break;
case "4"://4 药剂人员
emptype = "4";
break;
case "5"://5 技师(检验)
emptype = "5";
break;
case "6"://6 技师(影像)
emptype = "6";
break;
case "7"://7 管理人员
emptype = "7";
break;
case "8"://8 其他卫生技术人员
emptype = "8";
break;
case "9"://9 其他人员
emptype = "9";
break;
}
return emptype;
}
}
}
#region 此为老版本代码
/*
Employee Module_Employee = new Employee();
strMsgType = pmuB01.EVN.EventTypeCode.Value;
#region STG
STF stf = pmuB01.STF;
Module_Employee.EmpNo = Convert.ToInt16(stf.PrimaryKeyValueSTF.Identifier.Value);// 员工代号
Module_Employee.EmpCode = stf.GetStaffIDCode(0).ID.Value;// 员工代码
Module_Employee.EmpName = stf.GetStaffName(0).GivenName.Value;// 姓名
Module_Employee.EngName = stf.GetStaffName(0).GivenName.Value;// 英文姓名
Module_Employee.IdNo = stf.DriverSLicenseNumberStaff.DriverSLicenseNumber.Value.Trim() ;// 身份证号 <<<<<<<<<<<<<<<<<<<<<< 目前ISNULL
#region 性别转换
// 1:男 2:女
Module_Employee.Sex = His.MediIITransfer.MediII2Ue.GetSex(stf.AdministrativeSex.Value);
#endregion
Module_Employee.Birthday = His.Time.TryParseExact(stf.DateTimeOfBirth.TimeOfAnEvent.Value, "yyyyMMddhhmmss");
#region 婚姻状况
// 婚姻状况 (0:未婚,1:已婚,2:离婚)
switch (stf.MaritalStatus.Text.Value)
{
case "S"://S 独身
case "P"://P 同性恋
case "G"://G 同居
case "B"://B 未婚
case "U"://U 未知
case "O"://O 其他
case "T"://T 未报告
Module_Employee.MaritalStatus = "0";
break;
case "M"://M 结婚
case "A": //A 分居
case "W"://W 丧偶
case "R"://R 已登记同性恋
case "E"://E 合法分居
// case "C"://C 普通法律
case "I"://I 诉讼中
Module_Employee.MaritalStatus = "1";
break;
case "D"://D 离婚
Module_Employee.MaritalStatus = "2";
break;
default:
Module_Employee.MaritalStatus = "0";
break;
}
#endregion
Module_Employee.HomeAdrArea = 0;// 住处区域代码 <<<<<<<<<<<<<<<<<<<<<<<<<<<
Module_Employee.HomeAdrDesc = stf.GetOfficeHomeAddress(0).StreetAddress.StreetOrMailingAddress.Value;// 住处地址
Module_Employee.HomeTel1 = stf.GetPhone(0).PhoneNumber.Value;// 住处电话1
Module_Employee.HomeTel2 = "0"; // 住处电话2(不同步)
Module_Employee.MobilePhone = stf.GetPhone(0).PhoneNumber.Value; // 移动电话
Module_Employee.NativeAdrArea = 0;// 户籍区域代码(不同步)
Module_Employee.NativeAdrDesc = "";// 户籍地址(不同步)
Module_Employee.NativeTel = "";// 户籍电话(不同步)
Module_Employee.ConName = "";// 联系人姓名(不同步)
Module_Employee.ConTel1 = "";// 络人电话(不同步)
Module_Employee.ConTel2 = "";// 络人电话(不同步)
Module_Employee.ConAdrArea = 0;// 联系人区域代码(不同步)
Module_Employee.ConAdrDesc = "";// 联系人地址(不同步)
Module_Employee.Affiliation = "";// 与联系人关系(不同步)
try
{
string sHireDate =stf.GetInstitutionActivationDate(0).Date.TimeOfAnEvent.Value;
DateTime dtHireDate = His.Time.TryParseExact(sHireDate, "yyyyMMddhhmmss");
Module_Employee.HireDate = dtHireDate == His.Time.MaxDateTime ? Convert.ToDateTime("1911-01-01 00:00:00") : dtHireDate; // 到职日期
}
catch
{
Module_Employee.HireDate = Convert.ToDateTime("1911-01-01 00:00:00");
}
Module_Employee.Zone = "A";// 归属院区(联众会开栏位**********)<<<<<<<<<<<<<<<<<<<<<<
string tmp = stf.GetDepartment(0).Identifier.Value;
try
{
string sDepartNo = His.MediIITransfer.MediII2Ue.GetDepartNo(stf.GetDepartment(0).Identifier.Value);
Module_Employee.DepartNo = Convert.ToInt16(sDepartNo);// 部门代码
}
catch (Exception ex)
{
Module_Employee.DepartNo = -1;
}
Module_Employee.EmpType = stf.GetStaffType(0).Value;
#region 员工分类
switch (stf.GetStaffType(0).Value) // 员工分类
{
case "1"://1 医生
Module_Employee.EmpType = "1";
break;
case "2"://2 护士
Module_Employee.EmpType = "2";
break;
case "3"://3 财务人员
Module_Employee.EmpType = "3";
break;
case "4"://4 药剂人员
Module_Employee.EmpType = "4";
break;
case "5"://5 技师(检验)
case "6"://6 技师(影像)
case "7"://7 管理人员
case "8"://8 其他卫生技术人员
case "9"://9 其他人员
Module_Employee.EmpType = "0";
break;
}
#endregion
string tmp2 = stf.JobCodeClass.JobCode.Value;
try
{
Module_Employee.Title = Convert.ToInt16(stf.JobCodeClass.JobCode.Value);// 职称
}
catch (Exception ex)
{
Module_Employee.Title = -1;
}
Module_Employee.ChiefNo = Convert.ToInt16(stf.GetHospitalService(0).Identifier.Value);// 职位
string tmp3 = stf.GetDepartment(0).Identifier.Value;
try
{
string sWorkDepartNo = His.MediIITransfer.MediII2Ue.GetDepartNo(stf.GetDepartment(0).Identifier.Value);
Module_Employee.WorkDepartNo = Convert.ToInt16(sWorkDepartNo);// 工作单位代号 <<<<<<<<<<<<<
}
catch
{
Module_Employee.WorkDepartNo = -1;
}
Module_Employee.SimpleTel = stf.GetPhone(0).PhoneNumber.Value;// 速拨码
Module_Employee.SubTel = stf.GetPhone(0).PhoneNumber.Value;// 分机
string sPassword = stf.GetBackupPersonID(0).Identifier.Value;
Module_Employee.Password = sPassword == null ? "" : sPassword;
Module_Employee.PasswordTime = DateTime.Now; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Module_Employee.PressCard = 0;// 工作卡号(暫時不填)
string sActiveInactiveFlag = stf.ActiveInactiveFlag.Value; // A,在职;I,离职
Module_Employee.ResignDate = sActiveInactiveFlag == "A" ? His.Time.MaxDateTime : His.Time.MaxDateTime;
int iIntParse;
int.TryParse(stf.PreferredMethodOfContact.Identifier.Value, out iIntParse);
if (iIntParse != 0)
{
Module_Employee.UpdateUser = Convert.ToInt16(iIntParse);// 最后修改人
}
Module_Employee.UpdateTime = DateTime.Now;
Module_Employee.EMail = "";// 电子信箱(不同步)
Module_Employee.Remark = "";// 备注说明(不同步)
Module_Employee.Team = 0;// 组别
#endregion
#region 測試
string sErrMsg;
if (string.IsNullOrEmpty(Module_Employee.IdNo))
{
sErrMsg = "【身份证】无法为空";
SetACK(m, "ACK", strMsgType, "ACK", sErrMsg);
}
if (string.IsNullOrEmpty(Module_Employee.HomeAdrDesc))
{
Module_Employee.HomeAdrDesc = "";
}
if (string.IsNullOrEmpty(Module_Employee.HomeTel1))
{
Module_Employee.HomeTel1 = "";
}
if (string.IsNullOrEmpty(Module_Employee.HomeTel1))
{
Module_Employee.HomeTel1 = ""; // 住处电话1
}
if (string.IsNullOrEmpty(Module_Employee.MobilePhone))
{
Module_Employee.MobilePhone = ""; // 移动电话1
}
if (string.IsNullOrEmpty(Module_Employee.MobilePhone))
{
Module_Employee.MobilePhone = ""; // 移动电话1
}
//Module_Employee.HireDate = His.Time.TryParseExact(sHireDate, "yyyyMMdd"); // 到职日期
//Module_Employee.Title = Convert.ToInt16(stf.JobCodeClass.JobCode.Value);// 职称
//Module_Employee.ChiefNo = Convert.ToInt16(stf.GetHospitalService(0).Identifier.Value);// 职位
if (string.IsNullOrEmpty(Module_Employee.MobilePhone))
{
Module_Employee.SimpleTel = "";// 速拨码
}
if (string.IsNullOrEmpty(Module_Employee.MobilePhone))
{
Module_Employee.SubTel = "";// 分机
}
if (string.IsNullOrEmpty(Module_Employee.Password))
{
sErrMsg = "【密碼】无法为空";
SetACK(m, "ACK", strMsgType, "ACK", sErrMsg);
}
//if (Module_Employee.HireDate == DateTime.MinValue)
//{
// Module_Employee.HireDate = His.Time.MaxDateTime;
//}
if (Module_Employee.PasswordTime == DateTime.MinValue)
{
Module_Employee.PasswordTime = His.Time.MaxDateTime;
}
if (Module_Employee.UpdateTime == DateTime.MinValue)
{
Module_Employee.UpdateTime = His.Time.MaxDateTime;
}
if (Module_Employee.ResignDate == DateTime.MinValue)
{
Module_Employee.ResignDate = His.Time.MaxDateTime;
}
//Module_Employee.ResignDate = His.Time.TryParseExact(sResignDate, "yyyyMMdd"); // 离职日期
#endregion
// 開始存入資料庫
int iEmpNo = Convert.ToInt16(stf.PrimaryKeyValueSTF.Identifier.Value);// 员工代号
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
switch (strMsgType)
{
case Insert:
case Update:
EmployeeDelete(iEmpNo, ref HealthCareContainer, scope, ref Module_Employee);
EmployeeInsert(iEmpNo, ref HealthCareContainer, scope, ref Module_Employee);
break;
case Delete:
EmployeeDelete(iEmpNo, ref HealthCareContainer, scope, ref Module_Employee);
break;
}
#region 存入資料庫
try
{
HealthCareContainer.SaveChanges();
}
catch (System.Data.Entity.Validation.DbEntityValidationException ex)
{
scope.Dispose();
throw ex;
}
#endregion
scope.Complete();
}
*/
// return string.Empty;
// }
// catch (Exception ex)
// {
// string errMsg = string.Empty;
// if (ex.InnerException == null)
// {
// errMsg = ex.Message + "\r\n" + ex.StackTrace;
// }
// else
// {
// errMsg = ex.Message + "\r\n" + ex.InnerException.Message + "\r\n" + ex.InnerException.StackTrace;
// }
// return errMsg;
// }
//}
// catch (System.Data.Entity.Validation.DbEntityValidationException ex)
//{
//var tmp = ex.EntityValidationErrors.FirstOrDefault().ValidationErrors;
//string errString = "";
//foreach (var item in tmp)
//{
// errString += item.ErrorMessage;
//}
//string ack = SetACK(m, "ACK", mType, "ACK", ex.EntityValidationErrors.ToString());
//throw new Exception(string.Format("{0}\r\n{1}", ex.EntityValidationErrors.ToString()));
//return ex.Message;
//}
//}
/*
public void EmployeeInsert(int iEmpNo, ref HealthCareContainer HealthCareContainer, TransactionScope scope, ref Employee Module_Employee)
{
try
{
HealthCareContainer.Employee.Add(Module_Employee);
}
catch (Exception ex)
{
scope.Dispose();
throw ex;
}
}
public void EmployeeDelete(int iEmpNo, ref HealthCareContainer HealthCareContainer, TransactionScope scope, ref Employee Module_Employee)
{
try
{
IEnumerable EmployeeList = HealthCareContainer.Employee.Where(x => x.EmpNo == iEmpNo);
if (EmployeeList.Count() != 0)
{
Employee Module_Employee_Del = EmployeeList.FirstOrDefault();
HealthCareContainer.Employee.Remove(Module_Employee_Del);
HealthCareContainer.SaveChanges();
}
}
catch (Exception ex)
{
scope.Dispose();
throw ex;
}
}
*/
// }
//}
#endregion