// SocketServiceForm.ClientConnection using System; using System.Net.Sockets; using System.Text; using System.Threading; using JXHospitalWSBLL; using SocketServiceForm; public class ClientConnection { private Thread threadClient; private Socket socket; private Form1 frmMain; private bool doesClose; public ClientConnection(Form1 f1, Socket socket) { frmMain = f1; this.socket = socket; threadClient = new Thread(MoniterMsg); threadClient.IsBackground = true; threadClient.Start(); } private void MoniterMsg() { while (!doesClose) { try { byte[] byteMsgRec = new byte[4194304]; int length = socket.Receive(byteMsgRec, byteMsgRec.Length, SocketFlags.None); if (length > 0) { string strMsgRec = Encoding.UTF8.GetString(byteMsgRec, 0, length); ShowMsg("从" + socket.RemoteEndPoint.ToString() + "接收消息:" + strMsgRec); strMsgRec.Substring(0, 4); string _JXsendObj = strMsgRec.Substring(4, strMsgRec.Length - 4); string _fun = _JXsendObj.Substring(0, 4); string _obj = _JXsendObj.Substring(35, _JXsendObj.Length - 35); switch (_fun) { case "0001": SendMsg(JXHospitalBLL.CriminalIn(_obj)); break; case "0002": SendMsg(JXHospitalBLL.CriminalConsumedQuota(_obj)); break; case "0003": SendMsg(JXHospitalBLL.CriminalOut(_obj)); break; case "0004": SendMsg(JXHospitalBLL.CriminalConsume(_obj)); break; case "0005": SendMsg(JXHospitalBLL.RealTimeBalance(_obj)); break; case "0006": SendMsg(JXHospitalBLL.SynInvoiceResult(_obj)); break; case "0007": SendMsg(JXHospitalBLL.MonitorSocketResult(_obj)); break; case "0008": SendMsg(JXHospitalBLL.CancelOrderResult(_obj)); break; } } Close(); } catch (Exception ex) { if (socket != null) { ShowErr("客户端" + socket.RemoteEndPoint.ToString() + "断开连接:", ex); } frmMain.RemoveListItem(socket.RemoteEndPoint.ToString()); return; } } } private void ShowErr(string msg, Exception ex) { frmMain.ShowErr(msg, ex); } private void ShowMsg(string msg) { frmMain.ShowReqTxt(msg); } public void SendMsg(string msg) { try { byte[] msgSendByte = Encoding.UTF8.GetBytes(Encoding.UTF8.GetBytes(msg).Length.ToString("0000") + msg); socket.Send(msgSendByte); ShowMsg("发送消息:" + Encoding.UTF8.GetString(msgSendByte, 0, msgSendByte.Length)); } catch (Exception ex) { ShowErr("发送消息:", ex); } } public void Close() { doesClose = true; threadClient.Abort(); socket.Shutdown(SocketShutdown.Both); socket.Close(); socket = null; } } // JXHospitalWSBLL.JXHospitalBLL using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Web.Script.Serialization; using JXHospitalWSBLL; using JXHospitalWSDAL; public class JXHospitalBLL { public static string GetSocketIp() { return ConfigurationManager.ConnectionStrings["SocketIP"].ConnectionString; } public static string GetSocketPort() { return ConfigurationManager.ConnectionStrings["SocketPort"].ConnectionString; } public static string CriminalIn(string FCode) { ResponCriminalIn re = new ResponCriminalIn(); JavaScriptSerializer jss = new JavaScriptSerializer(); ReqFCode _fcode = jss.Deserialize(FCode); string errorMsg = ""; string errorCode = ""; try { using JXHospitalWSDBDataContextCustom db = new JXHospitalWSDBDataContextCustom(); re.ResultData = (from b in db.T_Criminal join c in db.T_Criminal_card on b.FCode equals c.fcrimecode into temp from tt in temp.DefaultIfEmpty() where b.FCode.Equals(_fcode.FCode) select new CriminalEntity { AmountB = ((tt == null) ? 0m : tt.AmountB.Value), AmountC = ((tt == null) ? 0m : tt.AmountC.Value), AmountA = ((tt == null) ? 0m : tt.AmountA.Value), BankAccNo = tt.BankAccNo, BankAmount = ((tt.BankAmount == null) ? 0m : tt.BankAmount.Value), FCode = b.FCode, FName = b.FName, Fflag = (b.fflag.HasValue ? b.fflag.Value : 0), Flimitflag = (b.flimitflag.HasValue ? b.flimitflag.Value : 0), Flimitamt = (b.flimitamt.HasValue ? b.flimitamt.Value : 0m) }).FirstOrDefault(); if (re.ResultData == null) { re.ResultCode = "0005"; re.ResultData = new CriminalEntity(); } else if (re.ResultData.Fflag == 1) { re.ResultCode = "0007"; re.ResultData = new CriminalEntity(); } else { db.proc_CriminalInHospital(_fcode.FCode, ref errorMsg, ref errorCode); if (errorCode == "1") { re.ResultCode = "0000"; } else { re.ResultCode = "0006"; re.ResultData = new CriminalEntity(); } } } catch (Exception) { re.ResultCode = "0008"; re.ResultData = new CriminalEntity(); } return jss.Serialize(re); } public static string CriminalConsumedQuota(string FCode) { InvoiceEntity reModel = new InvoiceEntity(); JavaScriptSerializer jss = new JavaScriptSerializer(); ReqFCode _fcode = jss.Deserialize(FCode); DateTime FirstDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); DateTime EndDate = DateTime.Parse(FirstDate.AddMonths(1).ToShortDateString()).AddSeconds(-1.0); using (JXHospitalWSDBDataContextCustom db = new JXHospitalWSDBDataContextCustom()) { proc_CriminalConsumedResult a = db.proc_CriminalConsumed(_fcode.FCode, FirstDate, EndDate).FirstOrDefault(); if (a != null) { InvoiceEntity invoiceEntity = new InvoiceEntity(); invoiceEntity.AmountA = Convert.ToDecimal((!a.AmountA.HasValue) ? new decimal?(0m) : a.AmountA); invoiceEntity.AmountB = Convert.ToDecimal((!a.AmountB.HasValue) ? new decimal?(0m) : a.AmountB); invoiceEntity.FreeAmountA = Convert.ToDecimal((!a.FreeAmountA.HasValue) ? new decimal?(0m) : a.FreeAmountA); invoiceEntity.FreeAmountB = Convert.ToDecimal((!a.FreeAmountB.HasValue) ? new decimal?(0m) : a.FreeAmountB); invoiceEntity.Checkflag = a.checkflag.Value; invoiceEntity.FCode = a.fcrimecode; invoiceEntity.FCriminal = a.fcriminal; invoiceEntity.Flag = (a.Flag.HasValue ? a.Flag.Value : 0); reModel = invoiceEntity; } } return jss.Serialize(reModel); } public static string CriminalOut(string FCode) { ResultEntity reModel = new ResultEntity(); JavaScriptSerializer jss = new JavaScriptSerializer(); ReqFCode _fcode = jss.Deserialize(FCode); string errorMsg = ""; string errorCode = ""; using (JXHospitalWSDBDataContextCustom db = new JXHospitalWSDBDataContextCustom()) { db.proc_CriminalOutHospital(_fcode.FCode, ref errorMsg, ref errorCode); if (errorCode == "1") { reModel.Result = true; } else { reModel.Result = false; } reModel.ReMsg = errorMsg; } return jss.Serialize(reModel); } public static string CriminalConsume(string reqModel) { JavaScriptSerializer jss = new JavaScriptSerializer(); ReqInoiveEntity _req = jss.Deserialize(reqModel); ResponNormalModel reModel = new ResponNormalModel(); try { using (JXHospitalWSDBDataContextCustom db = new JXHospitalWSDBDataContextCustom()) { T_Invoice t_Invoice = new T_Invoice(); t_Invoice.InvoiceNo = _req.InvoiceNo; t_Invoice.CardCode = _req.CardCode; t_Invoice.Amount = _req.Amount; t_Invoice.AmountA = _req.AmountA; t_Invoice.AmountB = _req.AmountB; t_Invoice.Checkflag = 0; t_Invoice.Crtby = "建新"; t_Invoice.Crtdate = _req.CrtDate; t_Invoice.FCrimeCode = _req.FCode; t_Invoice.FCriminal = _req.FCriminal; t_Invoice.Flag = 1; t_Invoice.FreeAmountA = _req.FreeAmountA; t_Invoice.FreeAmountB = _req.FreeAmountB; t_Invoice.OrderDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")); t_Invoice.OrderId = _req.OrderId; t_Invoice.PayDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")); t_Invoice.PType = "建新消费"; t_Invoice.TypeFlag = 30; t_Invoice.OrderStatus = 1; t_Invoice.Fifoflag = -1; T_Invoice invoice = t_Invoice; db.T_Invoice.InsertOnSubmit(invoice); var _criminal = (from crinimal in db.T_Criminal join area in db.T_AREA on crinimal.FAreaCode equals area.FCode into temp from tt in temp.DefaultIfEmpty() where crinimal.FCode.Equals(_req.FCode) select new { FAreaCode = ((crinimal.FAreaCode == null) ? "0" : crinimal.FAreaCode), FAreaName = ((tt.FName == null) ? "0" : tt.FName) }).FirstOrDefault(); if (_req.AmountA > 0m) { string vouno = ""; db.CREATESEQNO("vouno", 1, ref vouno); T_Vcrd t_Vcrd = new T_Vcrd(); t_Vcrd.Vouno = "JXVouNo" + vouno; t_Vcrd.CardCode = _req.CardCode; t_Vcrd.FCrimeCode = _req.FCode; t_Vcrd.DAmount = 0m; t_Vcrd.CAmount = _req.AmountA; t_Vcrd.CrtBy = "建新"; t_Vcrd.CrtDate = DateTime.Now; t_Vcrd.DType = "建新消费"; t_Vcrd.Depositer = ""; t_Vcrd.Flag = 0; t_Vcrd.FCriminal = _req.FCriminal; t_Vcrd.Frealareacode = ""; t_Vcrd.FrealAreaName = ""; t_Vcrd.PType = ""; t_Vcrd.UDate = DateTime.Now; t_Vcrd.OrigId = _req.InvoiceNo; t_Vcrd.CardType = 0; t_Vcrd.TypeFlag = 30; t_Vcrd.AccType = 0; t_Vcrd.BankFlag = 0; t_Vcrd.CheckFlag = 0; t_Vcrd.pc = 0; t_Vcrd.FAreaCode = _criminal.FAreaCode; t_Vcrd.FAreaName = _criminal.FAreaName; t_Vcrd.FinancePayFlag = 0; T_Vcrd vcrd = t_Vcrd; db.T_Vcrd.InsertOnSubmit(vcrd); } if (_req.AmountB > 0m) { string vouno2 = ""; db.CREATESEQNO("vouno", 1, ref vouno2); T_Vcrd t_Vcrd2 = new T_Vcrd(); t_Vcrd2.Vouno = "JXVouNo" + vouno2; t_Vcrd2.CardCode = _req.CardCode; t_Vcrd2.FCrimeCode = _req.FCode; t_Vcrd2.DAmount = 0m; t_Vcrd2.CAmount = _req.AmountB; t_Vcrd2.CrtBy = "建新"; t_Vcrd2.CrtDate = DateTime.Now; t_Vcrd2.DType = "建新消费"; t_Vcrd2.Depositer = ""; t_Vcrd2.Flag = 0; t_Vcrd2.FCriminal = _req.FCriminal; t_Vcrd2.Frealareacode = ""; t_Vcrd2.FrealAreaName = ""; t_Vcrd2.PType = ""; t_Vcrd2.UDate = DateTime.Now; t_Vcrd2.OrigId = _req.InvoiceNo; t_Vcrd2.CardType = 0; t_Vcrd2.TypeFlag = 30; t_Vcrd2.AccType = 1; t_Vcrd2.BankFlag = 0; t_Vcrd2.CheckFlag = 0; t_Vcrd2.pc = 0; t_Vcrd2.FAreaCode = _criminal.FAreaCode; t_Vcrd2.FAreaName = _criminal.FAreaName; t_Vcrd2.FinancePayFlag = 0; T_Vcrd vcrd2 = t_Vcrd2; db.T_Vcrd.InsertOnSubmit(vcrd2); } T_Criminal_card a = db.T_Criminal_card.Where((T_Criminal_card b) => b.fcrimecode.Equals(_req.FCode)).FirstOrDefault(); a.AmountA -= (decimal?)_req.AmountA; a.AmountB -= (decimal?)_req.AmountB; a.BankAmount = a.AmountA + a.AmountB + a.AmountC; db.SubmitChanges(); } reModel.ResultCode = "0000"; reModel.ResultMsg = ""; } catch (Exception ex) { reModel.ResultCode = "0008"; reModel.ResultMsg = ex.Message; } return jss.Serialize(reModel); } public static string RealTimeBalance(string FCode) { ResponCriminalIn rspModel = new ResponCriminalIn(); JavaScriptSerializer jss = new JavaScriptSerializer(); ReqFCode _fcode = jss.Deserialize(FCode); try { using JXHospitalWSDBDataContextCustom db = new JXHospitalWSDBDataContextCustom(); T_Criminal_card a = db.T_Criminal_card.Where((T_Criminal_card b) => b.fcrimecode.Equals(_fcode.FCode)).FirstOrDefault(); if (a != null) { rspModel.ResultData = new CriminalEntity { AmountA = (a.AmountA.HasValue ? a.AmountA.Value : 0m), AmountB = (a.AmountB.HasValue ? a.AmountB.Value : 0m), AmountC = (a.AmountC.HasValue ? a.AmountC.Value : 0m), BankAccNo = a.BankAccNo, BankAmount = (a.BankAmount.HasValue ? a.BankAmount.Value : 0m), FCode = a.fcrimecode }; } rspModel.ResultCode = "0000"; } catch (Exception) { rspModel.ResultCode = "0008"; rspModel.ResultData = new CriminalEntity(); } return jss.Serialize(rspModel); } public static string SynInvoiceResult(string InvoiceNoList) { JavaScriptSerializer jss = new JavaScriptSerializer(); RsponEntity _rsp = new RsponEntity(); _rsp.ResultData = new List(); List _req = jss.Deserialize>(InvoiceNoList); try { using JXHospitalWSDBDataContextCustom db = new JXHospitalWSDBDataContextCustom(); var reList = (from a in db.T_Vcrd where _req.Contains(a.OrigId) group a by new { a.CardCode, a.FCrimeCode, a.BankFlag, a.OrigId, a.SendDate } into b select new { cardcode = b.Key.CardCode, fcrimecode = b.Key.FCrimeCode, CAMOUNT = b.Sum((T_Vcrd c) => c.CAmount), Bankflag = b.Key.BankFlag, origid = b.Key.OrigId, SendDate = b.Key.SendDate }).ToList(); if (reList.Count > 0) { foreach (var re in reList) { _rsp.ResultData.Add(new RspVcrdEntity { BankFlag = (re.Bankflag.HasValue ? re.Bankflag.Value : 0), CAmount = (re.CAMOUNT.HasValue ? re.CAMOUNT.Value : 0m), FCode = re.fcrimecode, Origid = re.origid, SendDate = (re.SendDate.HasValue ? re.SendDate.Value : DateTime.Now) }); } } else { _rsp.ResultData = new List(); } _rsp.ResultCode = "0000"; } catch (Exception) { _rsp.ResultCode = "0008"; _rsp.ResultData = new List(); } return jss.Serialize(_rsp); } public static string MonitorSocketResult(string ReqData) { JavaScriptSerializer jss = new JavaScriptSerializer(); ResponNormalModel responNormalModel = new ResponNormalModel(); responNormalModel.ResultCode = "0000"; responNormalModel.ResultMsg = ""; ResponNormalModel _rsp = responNormalModel; return jss.Serialize(_rsp); } public static string CancelOrderResult(string ReqData) { JavaScriptSerializer jss = new JavaScriptSerializer(); ResponNormalModel responNormalModel = new ResponNormalModel(); responNormalModel.ResultCode = "0000"; responNormalModel.ResultMsg = ""; ResponNormalModel _rsp = responNormalModel; return jss.Serialize(_rsp); } } // JXHospitalWSBLL.ResponNormalModel public class ResponNormalModel { private string _ResultCode; private string _ResultMsg; public string ResultCode { get { return _ResultCode; } set { _ResultCode = value; } } public string ResultMsg { get { return _ResultMsg; } set { _ResultMsg = value; } } } // JXHospitalWSBLL.RspVcrdEntity using System; public class RspVcrdEntity { private int _BankFlag; private decimal _CAmount; private string _FCode; private string _Origid; private DateTime _SendDate; public int BankFlag { get { return _BankFlag; } set { _BankFlag = value; } } public decimal CAmount { get { return _CAmount; } set { _CAmount = value; } } public string FCode { get { return _FCode; } set { _FCode = value; } } public string Origid { get { return _Origid; } set { _Origid = value; } } public DateTime SendDate { get { return _SendDate; } set { _SendDate = value; } } } // JXHospitalWSBLL.CriminalEntity public class CriminalEntity { private string _FCode; private string _FName; private decimal _AmountA; private int _fflag; private decimal _AmountB; private string _BankAccNo; private decimal _BankAmount; private decimal _AmountC; private int _flimitflag; private decimal _flimitamt; public string FCode { get { return _FCode; } set { _FCode = value; } } public string FName { get { return _FName; } set { _FName = value; } } public decimal AmountA { get { return _AmountA; } set { _AmountA = value; } } public int Fflag { get { return _fflag; } set { _fflag = value; } } public decimal AmountB { get { return _AmountB; } set { _AmountB = value; } } public string BankAccNo { get { return _BankAccNo; } set { _BankAccNo = value; } } public decimal BankAmount { get { return _BankAmount; } set { _BankAmount = value; } } public decimal AmountC { get { return _AmountC; } set { _AmountC = value; } } public int Flimitflag { get { return _flimitflag; } set { _flimitflag = value; } } public decimal Flimitamt { get { return _flimitamt; } set { _flimitamt = value; } } } // JXHospitalWSBLL.ReqInoiveEntity using System; public class ReqInoiveEntity { private string _FCode; private string _InvoiceNo; private decimal _AmountA; private decimal _AmountB; private decimal _Amount; private decimal _FreeAmountA; private decimal _FreeAmountB; private DateTime _CrtDate; private string _FCriminal; private string _CardCode; private int _OrderId; public string FCode { get { return _FCode; } set { _FCode = value; } } public string InvoiceNo { get { return _InvoiceNo; } set { _InvoiceNo = value; } } public decimal AmountA { get { return _AmountA; } set { _AmountA = value; } } public decimal AmountB { get { return _AmountB; } set { _AmountB = value; } } public decimal Amount { get { return _Amount; } set { _Amount = value; } } public decimal FreeAmountA { get { return _FreeAmountA; } set { _FreeAmountA = value; } } public decimal FreeAmountB { get { return _FreeAmountB; } set { _FreeAmountB = value; } } public DateTime CrtDate { get { return _CrtDate; } set { _CrtDate = value; } } public string FCriminal { get { return _FCriminal; } set { _FCriminal = value; } } public string CardCode { get { return _CardCode; } set { _CardCode = value; } } public int OrderId { get { return _OrderId; } set { _OrderId = value; } } }