tijian_jichuang/Code/SOH.FenZhen.Server/FenZhenService.cs

649 lines
25 KiB
C#
Raw Normal View History

2025-02-20 11:54:48 +08:00
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using Apache.NMS;
using Apache.NMS.ActiveMQ;
using System.Threading.Tasks;
using System.Threading;
using System.Data.SqlClient;
namespace SOH.FenZhen.Server
{
public partial class FenZhenService : ServiceBase
{
IConnection connection;
ISession session;
IMessageProducer prod;
IConnection connection_recive_ks;
ISession session_recive_ks;
IConnection connection_recive_qt;
ISession session_recive_qt;
Timer timer;
public FenZhenService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
start();
}
object _lock = new object();
bool processing = false;
string[] xs = new string[] { "欧阳", "太史", "端木", "上官", "司马", "东方", "独孤", "南宫", "万俟", "闻人", "夏侯", "诸葛", "尉迟", "公羊", "赫连", "澹台", "皇甫", "宗政", "濮阳", "公冶", "太叔", "申屠", "公孙", "慕容", "仲孙", "钟离", "长孙", "宇文", "司徒", "鲜于", "司空", "闾丘", "子车", "亓官", "司寇", "巫马", "公西", "颛孙", "壤驷", "公良", "漆雕", "乐正", "宰父", "谷梁", "拓跋", "夹谷", "轩辕", "令狐", "段干", "百里", "呼延", "东郭", "南门", "羊舌", "微生", "公户", "公玉", "公仪", "梁丘", "公仲", "公上", "公门", "公山", "公坚", "左丘", "公伯", "西门", "公祖", "第五", "公乘", "贯丘", "公皙", "南荣", "东里", "东宫", "仲长", "子书", "子桑", "即墨", "达奚", "褚师", "吴铭", };
public void start()
{
timer = new Timer(process, null, 6000, 60000);
IConnectionFactory factory = new ConnectionFactory("tcp://192.168.20.2:61616/");
connection = factory.CreateConnection();
//Create the Session
session = connection.CreateSession();
//Create the Producer for the topic/queue
prod = session.CreateProducer(
new Apache.NMS.ActiveMQ.Commands.ActiveMQTopic("kstj"));
Thread t1 = new Thread(recive_ks);
Thread t2 = new Thread(recive_qt);
t1.Start();
t2.Start();
//Thread t = new Thread(Processing);
//t.Start();
while (true)
{
Thread.Sleep(10000);
Console.WriteLine("sleep1000000");
}
}
private void process(object state)
{
//throw new NotImplementedException();
lock (_lock)
{
if (!processing)
{
Processing();
}
}
}
private void recive_qt()
{
IConnectionFactory factory = new ConnectionFactory("tcp://192.168.20.2:61616/");
connection_recive_qt = factory.CreateConnection();
//dconnection_recive_ks.ClientId = System.Net.Dns.GetHostName() + "_reciveqt";
connection_recive_qt.ClientId = "server recive qt";
connection_recive_qt.Start();
//Create the Session
session_recive_qt = connection_recive_qt.CreateSession();
IMessageConsumer consumer = session_recive_qt.CreateDurableConsumer(new Apache.NMS.ActiveMQ.Commands.ActiveMQTopic("qtdj"), "qtdj listener", null, false);
consumer.Listener += new MessageListener(consumer_Listener_qt);
}
private void consumer_Listener_qt(IMessage message)
{
ITextMessage itm = message as ITextMessage;
//Console.WriteLine(itm.Text);
Console.WriteLine(System.Web.HttpUtility.UrlDecode(itm.Text));
// throw new NotImplementedException();
var qts = Newtonsoft.Json.JsonConvert.DeserializeObject<qtdj>(System.Web.HttpUtility.UrlDecode(itm.Text));
if (Array.IndexOf(xs, qts.xm.Substring(0, 2)) == -1)
{
if (qts.xb == 1)
{
qts.xm = qts.xm.Substring(0, 1) + "女士(" + qts.tm.ToString().Substring(qts.tm.ToString().Length - 3, 3) + ")";
}
else
{
qts.xm = qts.xm.Substring(0, 1) + "先生(" + qts.tm.ToString().Substring(qts.tm.ToString().Length - 3, 3) + ")";
}
}
else
{
for (int i = 0; i < xs.Length; i++)
{
if (qts.xm.Substring(0, 2).Equals(xs[i]))
{
if (qts.xb == 1)
{
qts.xm = xs[i] + "女士(" + qts.tm.ToString().Substring(qts.tm.ToString().Length - 3, 3) + ")";
}
else
{
qts.xm = xs[i] + "先生(" + qts.tm.ToString().Substring(qts.tm.ToString().Length - 3, 3) + ")";
}
}
}
}
string sqlyssj = @"INSERT INTO [pd_yssj]
([xm]
,[xb]
,[tjsj]
,[nl]
,[yssj]
,[qtxtid])
VALUES
(@xm
,@xb
,@tjsj
,@nl
,@yssj
,@qtxtid) select @@IDENTITY
";
SqlParameter[] paras = { new SqlParameter("xm",SqlDbType.VarChar),
new SqlParameter("xb",SqlDbType.SmallInt),
new SqlParameter("tjsj",SqlDbType.DateTime),
new SqlParameter("nl",SqlDbType.Int),
new SqlParameter("yssj",SqlDbType.VarChar),
new SqlParameter("qtxtid",SqlDbType.VarChar),
};
paras[0].Value = qts.xm;
paras[1].Value = qts.xb;
paras[2].Value = qts.tjsj;
paras[3].Value = qts.nl;
paras[4].Value = System.Web.HttpUtility.UrlDecode(itm.Text);
paras[5].Value = qts.tm.ToString();
int ysid = int.Parse(DbHelperSQL.GetSingle(sqlyssj, paras).ToString());
string sql_pdry = "select ysid from pd_rylb where qtxtid='" + qts.tm + "'";
var dr1 = DbHelperSQL.ExecuteReader(sql_pdry);
int pdryid = 0;
if (dr1.Read())
{
pdryid = (int)dr1[0];
dr1.Close();
}
else
{
dr1.Close();
string sql_pdrylb = @"INSERT INTO [pd_rylb]
([xm]
,[xb]
,[pdsj]
,[nl]
,[ysid]
,[qtxtid])
VALUES
(@xm
,@xb
,@pdsj
,@nl
,@ysid
,@qtxtid)
select @@IDENTITY
";
SqlParameter[] paras_pdry = { new SqlParameter("xm",SqlDbType.VarChar),
new SqlParameter("xb",SqlDbType.TinyInt),
new SqlParameter("pdsj",SqlDbType.DateTime),
new SqlParameter("nl",SqlDbType.Int),
new SqlParameter("ysid",SqlDbType.Int),
new SqlParameter("qtxtid",SqlDbType.VarChar)
};
paras_pdry[0].Value = qts.xm;
paras_pdry[1].Value = qts.xb;
paras_pdry[2].Value = DateTime.Now;
paras_pdry[3].Value = qts.nl;
paras_pdry[4].Value = ysid;
paras_pdry[5].Value = qts.tm.ToString();
pdryid = int.Parse(DbHelperSQL.GetSingle(sql_pdrylb, paras_pdry).ToString());
}
qts.xms.ForEach(t =>
{
string sql_xm = @"select a.xmid from pd_ksxm a join pd_wlks b
on a.ksid=b.id join pd_qtxtxmdy c
on a.xmid=c.xmid where b.isOpen=1 and c.qtxtxmid=" + t;
SqlDataReader dr = DbHelperSQL.ExecuteReader(sql_xm);
int xmid = 0;
if (dr.Read())
{
xmid = (int)dr[0];
}
dr.Close();
if (xmid != 0)
{
string sql_cz = "select count(1) from pd_pdxms where pdid=" + pdryid + " and xmid=" + xmid;
int count = int.Parse(DbHelperSQL.GetSingle(sql_cz).ToString());
if (count == 0)
{
string sql_pdxm = @"INSERT INTO [pd_pdxms]
([pdid]
,[xmid]
,[zxbz]
)
VALUES
(" + pdryid + @"
," + xmid + @"
,0
)
";
DbHelperSQL.ExecuteSql(sql_pdxm);
}
}
});
lock (_lock)
{
if (!processing)
Processing();
}
}
#region
private void recive_ks()
{
IConnectionFactory factory = new ConnectionFactory("tcp://192.168.20.2:61616/");
connection_recive_ks = factory.CreateConnection();
connection_recive_ks.ClientId = System.Net.Dns.GetHostName() + "receive_ks";
connection_recive_ks.Start();
//Create the Session
session_recive_ks = connection_recive_ks.CreateSession();
IMessageConsumer consumer = session_recive_ks.CreateDurableConsumer(new Apache.NMS.ActiveMQ.Commands.ActiveMQTopic("wctj"), "ks_wc listener", null, false);
consumer.Listener += new MessageListener(consumer_Listener_ks);
IMessageConsumer kstj = session_recive_ks.CreateDurableConsumer(new Apache.NMS.ActiveMQ.Commands.ActiveMQTopic("kaishitijian"), "ks_tj listener", null, false);
kstj.Listener += new MessageListener(kstj_Listener_ks);
}
private void kstj_Listener_ks(IMessage message)
{
//throw new NotImplementedException();
ITextMessage itm = message as ITextMessage;
Console.WriteLine("开始体检:" + itm.Text);
string[] cs = itm.Text.Split(',');
if (cs.Length != 2)
{
return;
}
string tm = cs[0];
string ks = cs[1];
string sql = "select id from pd_rylb where qtxtid='" + tm + "'";
var dr = DbHelperSQL.ExecuteReader(sql);
if (dr.Read())
{
string pdid = dr[0].ToString();
dr.Close();
//2016年3月21日08:09:10 李延璋,解决客人没有按照屏幕排队,会造成排队混乱的问题
string sql_selKspdlb = "select ksid from pd_kspdlb where pd_kspdlb.zxbz in (0,1) and pd_kspdlb.pdid=" + pdid + " and ksid=" + ks;
var drKspdlb = DbHelperSQL.ExecuteReader(sql_selKspdlb);
if (drKspdlb.Read())
{
//string pdksid = drKspdlb[0].ToString();
drKspdlb.Close();
//
/*
string sql_upKspdlb1 = "update pd_kspdlb set ksid=" + ks + " where pd_kspdlb.zxbz=1 and pd_kspdlb.pdid=" + pdid;
DbHelperSQL.ExecuteSql(sql_upKspdlb1);
string sql_upKspdlb = "update pd_kspdlb set ksid=" + ks + " where pd_kspdlb.zxbz=0 and pd_kspdlb.pdid=" + pdid;
DbHelperSQL.ExecuteSql(sql_upKspdlb);
string sql_upPdxms2 = "update pd_pdxms set zxbz=0,zxsj='',pdsj='' where pd_pdxms.zxbz=2 and pd_pdxms.pdid=" + pdid;
DbHelperSQL.ExecuteSql(sql_upPdxms2);
string sql_upPdxms = "update pd_pdxms set zxbz=0,zxsj='',pdsj='' where pd_pdxms.zxbz=1 and pd_pdxms.pdid=" + pdid;
DbHelperSQL.ExecuteSql(sql_upPdxms);
string sql_upKspdlb = "update pd_kspdlb set ksid=" + ks + " where pd_kspdlb.zxbz=0 and pd_kspdlb.pdid=" + pdid;
DbHelperSQL.ExecuteSql(sql_upKspdlb);
string sql_upPdxms1 = "update pd_pdxms set zxbz=1,zxsj=GETDATE(),pdsj=GETDATE() from pd_ksxm where pd_ksxm.xmid=pd_pdxms.xmid"+
" and pd_ksxm.ksid="+ks+" and pd_pdxms.pdid="+pdid;
DbHelperSQL.ExecuteSql(sql_upPdxms1);*/
//
}
else
{
sql_selKspdlb = "select ksid from pd_kspdlb where pd_kspdlb.zxbz in (0,1) and pd_kspdlb.pdid=" + pdid;//查询当前正在排队的科室
drKspdlb = DbHelperSQL.ExecuteReader(sql_selKspdlb);
if (drKspdlb.Read())
{
string pdksid = drKspdlb[0].ToString();
drKspdlb.Close();
sql = "select count(1) from pd_pdxms,pd_ksxm where pd_pdxms.pdid=" + pdid + " and pd_ksxm.xmid=pd_pdxms.xmid and pd_ksxm.ksid=" + ks;
if(DbHelperSQL.GetSingle(sql).ToString()!="0")
{
string delsql = "delete from pd_kspdlb where pdid=" + pdid + " and ksid=" + pdksid;
DbHelperSQL.ExecuteSql(delsql);
ITextMessage im1 = prod.CreateTextMessage();
im1.Properties.SetString("ks", ks);
var ksm = new kstjMessage();
string sql_xm1 = "select xm from pd_rylb where id=" + pdid;
string xm1 = "错误";
var xmdr1 = DbHelperSQL.ExecuteReader(sql_xm1);
if (xmdr1.Read())
{
xm1 = xmdr1[0].ToString();
}
xmdr1.Close();
ksm.xm = xm1;
ksm.pdid = int.Parse(pdid);
ksm.pdsj = DateTime.Now;
ksm.zxzt = 2;
im1.Text = System.Web.HttpUtility.UrlEncode(Newtonsoft.Json.JsonConvert.SerializeObject(ksm));
prod.Send(im1);//删除原来科室的排队信息
sql = "insert into pd_kspdlb(pdid,ksid,pdsj,zxbz,yjsysj) values(" + pdid + "," + ks + ",getdate(),0,0)";
DbHelperSQL.ExecuteSql(sql);
sql = "update pd_pdxms set zxbz=1,zxsj=GETDATE() from pd_xm,pd_ksxm where pd_pdxms.zxbz=0 and pd_xm.id=pd_ksxm.xmid and pd_ksxm.ksid=" + ks + " and pd_pdxms.pdid=" + pdid;
DbHelperSQL.ExecuteSql(sql);
}
else
{
return;
}
}
else
{
drKspdlb.Close();
return;
}
}
string sql_up = "update pd_pdxms set zxbz=2,zxsj=GETDATE() from pd_xm,pd_ksxm where pd_pdxms.zxbz=1 and pd_xm.id=pd_ksxm.xmid and pd_ksxm.ksid=" + ks + " and pd_pdxms.pdid=" + pdid;
DbHelperSQL.ExecuteSql(sql_up);
sql_up = "update pd_kspdlb set zxbz=1,zxsj=getdate() where zxbz=0 and ksid=" + ks + " and pdid=" + pdid;
DbHelperSQL.ExecuteSql(sql_up);
ITextMessage itm1 = prod.CreateTextMessage();
itm1.Properties.SetString("ks", ks);
var pdmsg = new kstjMessage();
string sql_xm = "select xm from pd_rylb where id=" + pdid;
string xm = "错误";
var xmdr = DbHelperSQL.ExecuteReader(sql_xm);
if (xmdr.Read())
{
xm = xmdr[0].ToString();
}
xmdr.Close();
pdmsg.xm = xm;
pdmsg.pdid = int.Parse(pdid);
pdmsg.pdsj = DateTime.Now;
pdmsg.zxzt = 1;
itm1.Text = System.Web.HttpUtility.UrlEncode(Newtonsoft.Json.JsonConvert.SerializeObject(pdmsg));
prod.Send(itm1);
}
else
{
dr.Close();
}
}
private void consumer_Listener_ks(IMessage message)
{
ITextMessage itm = message as ITextMessage;
Console.WriteLine("结束体检:" + itm.Text);
string[] cs = itm.Text.Split(',');
if (cs.Length != 2)
{
return;
}
string tm = cs[0];
string ks = cs[1];
string sql = "select id from pd_rylb where qtxtid='" + tm + "'";
var dr = DbHelperSQL.ExecuteReader(sql);
if (dr.Read())
{
string pdid = dr[0].ToString();
dr.Close();
sql = "select zxbz from pd_kspdlb where pdid=" + pdid + " and ksid=" + ks;
DataTable dt = DbHelperSQL.Query(sql).Tables[0];
if(dt.Rows.Count>0)
{
string zxbz = dt.Rows[0][0].ToString();
if(zxbz=="0")
{
sql = "update pd_pdxms set zxbz=2,zxsj=GETDATE() from pd_xm,pd_ksxm where pd_pdxms.zxbz=1 and pd_xm.id=pd_ksxm.xmid and pd_ksxm.ksid=" + ks + " and pd_pdxms.pdid=" + pdid;
DbHelperSQL.ExecuteSql(sql);
sql = "update pd_kspdlb set zxbz=1,zxsj=getdate() where zxbz=0 and ksid=" + ks + " and pdid=" + pdid;
DbHelperSQL.ExecuteSql(sql);
}
}
else
{
sql = "select count(1) from pd_pdxms,pd_ksxm where pd_pdxms.pdid=" + pdid + " and pd_ksxm.xmid=pd_pdxms.xmid and pd_ksxm.ksid=" + ks;
if (DbHelperSQL.GetSingle(sql).ToString() != "0")
{
sql = "insert into pd_kspdlb(pdid,ksid,pdsj,zxbz,yjsysj) values(" + pdid + "," + ks + ",getdate(),0,0)";
DbHelperSQL.ExecuteSql(sql);
sql = "update pd_pdxms set zxbz=1,zxsj=GETDATE() from pd_xm,pd_ksxm where pd_pdxms.zxbz=0 and pd_xm.id=pd_ksxm.xmid and pd_ksxm.ksid=" + ks + " and pd_pdxms.pdid=" + pdid;
DbHelperSQL.ExecuteSql(sql);
sql = "update pd_pdxms set zxbz=2,zxsj=GETDATE() from pd_xm,pd_ksxm where pd_pdxms.zxbz=1 and pd_xm.id=pd_ksxm.xmid and pd_ksxm.ksid=" + ks + " and pd_pdxms.pdid=" + pdid;
DbHelperSQL.ExecuteSql(sql);
sql = "update pd_kspdlb set zxbz=1,zxsj=getdate() where zxbz=0 and ksid=" + ks + " and pdid=" + pdid;
DbHelperSQL.ExecuteSql(sql);
}
else
{
return;
}
}
string sql_up = "update pd_pdxms set zxbz=3,wcsj=GETDATE() from pd_xm,pd_ksxm where pd_pdxms.zxbz=2 and pd_xm.id=pd_ksxm.xmid and pd_ksxm.ksid=" + ks + " and pd_pdxms.pdid=" + pdid;
DbHelperSQL.ExecuteSql(sql_up);
sql_up = "update pd_kspdlb set zxbz=2,wcsj=getdate() where zxbz=1 and ksid=" + ks + " and pdid=" + pdid;
DbHelperSQL.ExecuteSql(sql_up);
ITextMessage itm1 = prod.CreateTextMessage();
itm1.Properties.SetString("ks", ks);
var pdmsg = new kstjMessage();
string sql_xm = "select xm from pd_rylb where id=" + pdid;
string xm = "错误";
var xmdr = DbHelperSQL.ExecuteReader(sql_xm);
if (xmdr.Read())
{
xm = xmdr[0].ToString();
}
xmdr.Close();
pdmsg.xm = xm;
pdmsg.pdid = int.Parse(pdid);
pdmsg.pdsj = DateTime.Now;
pdmsg.zxzt = 2;
itm1.Text = System.Web.HttpUtility.UrlEncode(Newtonsoft.Json.JsonConvert.SerializeObject(pdmsg));
prod.Send(itm1);
}
else
{
dr.Close();
}
}
#endregion
private void Processing()
{
lock (_lock)
{
processing = true;
//Send Messages
}
lock (_lock)
{
processing = false;
}
}
/// <summary>
/// 安排排队
/// </summary>
/// <param name="id"></param>
/// <param name="v"></param>
private void sendpd(string id, string ksid)
{
//throw new NotImplementedException();
prod = session.CreateProducer(
new Apache.NMS.ActiveMQ.Commands.ActiveMQTopic("kstj"));
// prod.Send(itm);
}
class kstjMessage
{
public string xm { get; set; }
public int pdid { get; set; }
public DateTime pdsj { get; set; }
public byte zxzt { get; set; }
}
protected override void OnStop()
{
connection.Stop();
connection.Close();
connection_recive_qt.Stop();
connection_recive_qt.Close();
connection_recive_ks.Stop();
connection_recive_ks.Close();
timer.Dispose();
}
class qtdj
{
public int tm
{
get;
set;
}
public string xm { get; set; }
public short xb { get; set; }
public short nl { get; set; }
public DateTime tjsj { get; set; }
public List<int> xms { get; set; }
}
}
}
/*
string sql = "select id from pd_rylb where exists( select 1 from pd_pdxms where pd_rylb.id=pdid and zxbz=0) order by pdsj ";
var dt = DbHelperSQL.Query(sql).Tables[0];
foreach (DataRow dr in dt.Rows)
{
string id = dr[0].ToString();
sql = "select top 1 pd_xm.id,pd_xm.qzxm from pd_xm,pd_pdxms where pd_xm.id=pd_pdxms.xmid and pd_pdxms.pdid=" + id + " and pd_pdxms.zxbz=0 order by pd_xm.xmqz desc ";
var dr_pdxm = DbHelperSQL.ExecuteReader(sql);
int xmid = 0;
string qzid = null;
if (dr_pdxm.Read())
{
xmid = (int)dr_pdxm[0];
qzid = dr_pdxm[1] == System.DBNull.Value ? null : dr_pdxm[1].ToString();
}
dr_pdxm.Close();
while (true)
{
if (!string.IsNullOrEmpty(qzid))
{
sql = "select id,qzxm from pd_xm where id=" + qzid;
dr_pdxm = DbHelperSQL.ExecuteReader(sql);
if (dr_pdxm.Read())
{
xmid = (int)dr_pdxm[0];
qzid = dr_pdxm[1] == System.DBNull.Value ? null : dr_pdxm[1].ToString();
}
dr_pdxm.Close();
}
else
{
break;
}
}
string kspdsj = @"select SUM(isnull(yjsysj,0)) pdsj,pd_wlks.id ksid from pd_wlks left join pd_kspdlb on pd_kspdlb.ksid=pd_wlks.id and (zxbz=0 or zxbz=1)
group by pd_wlks.id,pd_wlks.zcpdsj,pd_wlks.zdpdrs
having pd_wlks.zcpdsj>SUM(isnull(yjsysj,0)) and pd_wlks.zdpdrs>=COUNT(1)
order by SUM(yjsysj)";
var pdsjdt = DbHelperSQL.Query(kspdsj).Tables[0];
string sql_xmks = "select ksid from pd_ksxm where xmid=" + xmid;
var qzxmksdt = DbHelperSQL.Query(sql_xmks).Tables[0];
int ksid = 0;
int minsj = 0;
bool ap = false;
foreach (DataRow qzxmks in qzxmksdt.Rows)
{
DataRow[] drs = pdsjdt.Select("ksid=" + qzxmks[0].ToString());
if (drs.Count() == 0)
{
// sendpd(id, qzxmks[0].ToString());
//ap = true;
continue;
}
else
{
if (ksid == 0)
{
ksid = int.Parse(drs[0]["ksid"].ToString());
minsj = int.Parse(drs[0]["pdsj"].ToString());
}
else
{
if (minsj > int.Parse(drs[0]["pdsj"].ToString()))
{
ksid = int.Parse(drs[0]["ksid"].ToString());
minsj = int.Parse(drs[0]["pdsj"].ToString());
}
}
}
}
if ((!ap) && ksid != 0)
{
sendpd(id, ksid.ToString());
ap = true;
}
if (!ap)
{
if (pdsjdt.Rows.Count > 0)
{
sendpd(id, pdsjdt.Rows[0]["ksid"].ToString());
}
}
}
*/