@@ -10,6 +10,6 @@ namespace RDH.Data.BLL | |||
{ | |||
public partial interface IOperationRoomBLL:IRegable,IBaseBLL<OperationRoom> | |||
{ | |||
OperationRoom GetOperationRoomBySignalStation(String stationCode); | |||
} | |||
} |
@@ -278,6 +278,7 @@ namespace RDH.Data.Models | |||
OnPropertyChanged("StorageSpaceItemLot"); | |||
} | |||
} | |||
public ItemLot ItemLotInfo { get; set; } | |||
#endregion | |||
} | |||
} |
@@ -67,6 +67,12 @@ namespace RDH.Data.BLL | |||
Ext10 = operationroom.Ext10, //Params | |||
}; | |||
} | |||
public OperationRoom GetOperationRoomBySignalStation(String stationCode) | |||
{ | |||
return SqlMapper.Query<OperationRoom>(ConnectionFactory.Current.GetSessionConnection(), | |||
BuildBaseSql() + " WHERE ext02=:stationCode", | |||
new { stationCode = stationCode }).FirstOrDefault(); | |||
} | |||
} | |||
} |
@@ -44,24 +44,24 @@ namespace RDH.Data.BLL | |||
{ | |||
return new | |||
{ | |||
ItemCode_ = t.ItemCode, | |||
TrackCode_ = t.TrackCode, | |||
TrackValue_ = t.TrackValue, | |||
CreateBy_ = t.CreateBy, | |||
CreateTime_ = t.CreateTime, | |||
Flag_ = t.Flag, | |||
ClientTime_ = t.ClientTime, | |||
ServerTime_ = t.ServerTime, | |||
Ext01_ = t.Ext01, | |||
Ext02_ = t.Ext02, | |||
Ext03_ = t.Ext03, | |||
Ext04_ = t.Ext04, | |||
Ext05_ = t.Ext05, | |||
Ext06_ = t.Ext06, | |||
Ext07_ = t.Ext07, | |||
Ext08_ = t.Ext08, | |||
Ext09_ = t.Ext09, | |||
Ext10_ = t.Ext10, | |||
ItemCode = t.ItemCode, | |||
TrackCode = t.TrackCode, | |||
TrackValue = t.TrackValue, | |||
CreateBy = t.CreateBy, | |||
CreateTime = t.CreateTime, | |||
Flag = t.Flag, | |||
ClientTime = t.ClientTime, | |||
ServerTime = t.ServerTime, | |||
Ext01 = t.Ext01, | |||
Ext02 = t.Ext02, | |||
Ext03 = t.Ext03, | |||
Ext04 = t.Ext04, | |||
Ext05 = t.Ext05, | |||
Ext06 = t.Ext06, | |||
Ext07 = t.Ext07, | |||
Ext08 = t.Ext08, | |||
Ext09 = t.Ext09, | |||
Ext10 = t.Ext10, | |||
}; | |||
} | |||
@@ -1,6 +1,7 @@ | |||
using RDH.Data.Models; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.DirectoryServices; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
@@ -9,7 +10,6 @@ namespace RDH.Data.BLL | |||
{ | |||
public partial class SPILItemTransactionBLL : BaseOrclBLL<SPILItemTransaction> | |||
{ | |||
public SPILItemTransactionBLL() : base() | |||
{ | |||
AliasTableName = "spilt"; | |||
@@ -19,7 +19,6 @@ namespace RDH.Data.BLL | |||
internal override string ENTITY_NAME { get { return "SPILItemTransaction"; } } | |||
internal override String KEY_COLUMN { get { return "KEY"; } }//KEY_COLUMN | |||
internal override void InitMaps() | |||
{ | |||
@@ -78,10 +77,75 @@ namespace RDH.Data.BLL | |||
ItemLotKey = spilitemtransaction.ItemLotKey, //Params | |||
}; | |||
} | |||
public IEnumerable<SPILItemTransaction> ListMekKitDrugLendTransactionByRoom(String roomName) | |||
{ | |||
#region sql builder | |||
ItemTransactionBLL itemTransactionBLL = new ItemTransactionBLL(); | |||
SqlBuilder sqlBuilder = new SqlBuilder(itemTransactionBLL); | |||
//item | |||
ItemBLL itemBLL = new ItemBLL(); | |||
TableJoinInfo itemTable = new TableJoinInfo | |||
{ | |||
LeftDal = itemTransactionBLL, | |||
LeftColumnName = "ITEM_KEY", | |||
RightDal = itemBLL, | |||
RightColumnName = "KEY", | |||
JoinType = TableJoinTypes.Inner, | |||
}; | |||
sqlBuilder.AppendSelectionTable(itemTable); | |||
//SPILItemTransaction | |||
TableJoinInfo spiltTable = new TableJoinInfo | |||
{ | |||
LeftDal = itemTransactionBLL, | |||
LeftColumnName = itemTransactionBLL.KEY_COLUMN, | |||
RightDal = this, | |||
RightColumnName = "ITEM_TRANSACTION_KEY", | |||
JoinType = TableJoinTypes.Inner, | |||
}; | |||
sqlBuilder.AppendSelectionTable(spiltTable); | |||
//item lot | |||
ItemLotBLL itemLotBLL = new ItemLotBLL(); | |||
TableJoinInfo itemlotTable = new TableJoinInfo | |||
{ | |||
LeftDal = this, | |||
LeftColumnName = "ITEM_LOT_KEY", | |||
RightDal = itemLotBLL, | |||
RightColumnName = itemLotBLL.KEY_COLUMN, | |||
JoinType = TableJoinTypes.Inner, | |||
}; | |||
sqlBuilder.AppendSelectionTable(itemlotTable); | |||
sqlBuilder.AppendWherePhrases($"{itemTransactionBLL.AliasTableName}.EXT02=:roomName AND NVL({itemTransactionBLL.AliasTableName}.ext10,'0')='0'"); | |||
sqlBuilder.AppendWherePhrases($"{itemTransactionBLL.AliasTableName}.TRANSACTION_TYPE='LendByMedKit'"); | |||
sqlBuilder.AppendWherePhrases($"(SYSDATE-{itemTransactionBLL.AliasTableName}.CREATE_TIME)<1"); | |||
sqlBuilder.AppendOrderPhrases($"{itemTransactionBLL.AliasTableName}.CREATE_TIME DESC"); | |||
#endregion | |||
List<SPILItemTransaction> rlt = new List<SPILItemTransaction>(); | |||
//只读取一条主表的数据,防止其它操作记录的数据 | |||
Guid? itemTransactionKey = null; | |||
SqlMapper.Query<ItemTransaction, Item, SPILItemTransaction, ItemLot, SPILItemTransaction>(ConnectionFactory.Current.GetSessionConnection(), | |||
sqlBuilder.ToString(), | |||
(it, i, spilt, il) => | |||
{ | |||
if (itemTransactionKey == null) | |||
{ | |||
itemTransactionKey = it.Key; | |||
} | |||
if (it.Key == itemTransactionKey) | |||
{ | |||
spilt.ItemTransaction = it; | |||
it.Item = i; | |||
spilt.ItemLotInfo = il; | |||
rlt.Add(spilt); | |||
} | |||
return spilt; | |||
}, | |||
new | |||
{ | |||
roomName = roomName | |||
}, | |||
splitOn: sqlBuilder.GetSpiltors()); | |||
return rlt; | |||
} | |||
} | |||
} |
@@ -14,6 +14,7 @@ namespace RDH.Data.BLL | |||
private List<TableJoinInfo> _listJoinInfo; | |||
private StringBuilder _whereBuilder; | |||
private StringBuilder _selectionBuilder; | |||
private StringBuilder _orderBuilder; | |||
public SqlBuilder(BaseBLL dal) | |||
{ | |||
@@ -51,6 +52,27 @@ namespace RDH.Data.BLL | |||
{ | |||
_whereBuilder.AppendFormat(value, paramInfo); | |||
} | |||
public void AppendOrderPhrases(String phrase) | |||
{ | |||
if (_orderBuilder == null) | |||
{ | |||
_orderBuilder = new StringBuilder(); | |||
if (!phrase.Trim().ToLower().StartsWith("order")) | |||
{ | |||
_orderBuilder.Append(" ORDER BY"); | |||
} | |||
} | |||
if (_orderBuilder.Length > 9 | |||
&& !phrase.Trim().StartsWith(",")) | |||
{ | |||
_orderBuilder.Append(","); | |||
} | |||
else | |||
{ | |||
_orderBuilder.Append(" "); | |||
} | |||
_orderBuilder.Append(phrase); | |||
} | |||
public void AppendSelectionTable(TableJoinInfo joinInfo) | |||
{ | |||
if (joinInfo == null || joinInfo.LeftDal == null || joinInfo.RightDal == null) | |||
@@ -187,6 +209,10 @@ namespace RDH.Data.BLL | |||
builder.Append(" "); | |||
builder.Append(_whereBuilder.ToString()); | |||
} | |||
if (_orderBuilder != null) | |||
{ | |||
builder.Append(_orderBuilder.ToString()); | |||
} | |||
return builder.ToString(); | |||
} | |||
} |
@@ -33,6 +33,10 @@ namespace Rdh.SocketServer.Client.Models | |||
/// </summary> | |||
public const String RequestSupplyList = "0F"; | |||
/// <summary> | |||
/// 药箱查询借药信息 | |||
/// </summary> | |||
public const String RequestDrugLend = "0G"; | |||
/// <summary> | |||
/// 药箱同步时钟 | |||
/// </summary> | |||
public const String RequestClock = "TT"; | |||
@@ -43,6 +47,7 @@ namespace Rdh.SocketServer.Client.Models | |||
public const String ResponseRobot = "0D"; | |||
public const String ResponseReturnMedKit = "0E"; | |||
public const String ResponseSupplyList = "0F"; | |||
public const String ResponseDrugLend = "0G"; | |||
public const String RepsonseClock = "TT"; | |||
} | |||
} |
@@ -0,0 +1,24 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace Rdh.SocketServer.Client.Models | |||
{ | |||
/// <summary> | |||
/// 药箱查询借药信息的数据协议类 | |||
/// </summary> | |||
public class RequestDrugLendProtocol : EleMedKitProtocol | |||
{ | |||
public RequestDrugLendProtocol() | |||
{ | |||
base.Command = EleMedKitCommand.RequestDrugLend; | |||
} | |||
public override string GetContent() | |||
{ | |||
return base.GetContent() | |||
+ AddLineContent(CountFlag); | |||
} | |||
} | |||
} |
@@ -0,0 +1,30 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Collections.Specialized; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace Rdh.SocketServer.Client.Models | |||
{ | |||
/// <summary> | |||
/// 表示回传借药信息的数据协议的类 | |||
/// </summary> | |||
public class ResponseLendDrugProtocol : EleMedKitProtocol | |||
{ | |||
public ResponseLendDrugProtocol() | |||
{ | |||
this.Command = EleMedKitCommand.ResponseDrugLend; | |||
CountFlag = 1.ToString(); | |||
} | |||
public List<SimpleDrugLotProtocol>? ListLendResult { get; set; } | |||
public string LineEnd { get => EleMedKitProtocolFlags.LineSpiltor; } | |||
public override string GetContent() | |||
{ | |||
return base.GetContent() | |||
+ AddList<SimpleDrugLotProtocol>(ListLendResult) | |||
+ AddLineContent(LineEnd) | |||
+ AddLineContent(CountFlag); | |||
} | |||
} | |||
} |
@@ -0,0 +1,24 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace Rdh.SocketServer.Client.Models | |||
{ | |||
/// <summary> | |||
/// 表示药品和批号信息的协议的类 | |||
/// </summary> | |||
public class SimpleDrugLotProtocol : ModelProtocol | |||
{ | |||
public string? Barcode { get; set; } | |||
public string? DrugKey { get; set; } | |||
public string? DrugLotCode { get; set; } | |||
public override string GetContent() | |||
{ | |||
return Barcode | |||
+ AddBlockContent(DrugKey) | |||
+ AddBlockContent(DrugLotCode); | |||
} | |||
} | |||
} |
@@ -67,6 +67,8 @@ namespace Rdh.SocketServer.Client.Models | |||
return new RequestMedKitReturnProtocol(); | |||
case EleMedKitCommand.RequestSupplyList: | |||
return new RequestSupplyDrugProtocol(); | |||
case EleMedKitCommand.RequestDrugLend: | |||
return new RequestDrugLendProtocol(); | |||
default: | |||
return new UnSupportProtocol(); | |||
} |
@@ -366,9 +366,13 @@ namespace Rdh.SocketServer.Client.ViewModels | |||
curTrack.TrackCode = simpleStationCode; | |||
portableStorageTrackBLL.Save(curTrack); | |||
} | |||
} | |||
} | |||
#endregion | |||
} | |||
} | |||
else | |||
{ | |||
Log($"基站编号[{locationRequest.StationCode}]未配置手术间"); | |||
} | |||
#endregion | |||
} | |||
catch (Exception ex) | |||
@@ -638,6 +642,87 @@ namespace Rdh.SocketServer.Client.ViewModels | |||
Log("归还出错:" + ex.Message, -1); | |||
} | |||
break; | |||
case EleMedKitCommand.RequestDrugLend: | |||
try | |||
{ | |||
Log("请求借药"); | |||
RequestDrugLendProtocol requestLendProtocol = (RequestDrugLendProtocol)curPocket.Data.ProtocolDataInfo; | |||
StorageSpacePortableLink? requestStorageLink = null; | |||
String? state = null; | |||
using (ConnectionSessionScope conn = new ConnectionSessionScope()) | |||
{ | |||
requestStorageLink = GetRequestStorageLink(null, requestLendProtocol.EleMedKitCode, out state); | |||
if (state != null | |||
|| requestStorageLink == null) | |||
{ | |||
Log("检查药箱信息不通过", -1); | |||
break; | |||
} | |||
//根据药箱定位,获取最近的手术间 | |||
PortableStorageTrackBLL portableStorageTrackBLL = new PortableStorageTrackBLL(); | |||
PortableStorageTrack lastTrack = portableStorageTrackBLL.GetLastTrackByItem(requestLendProtocol.EleMedKitCode.TrimStart('0')); | |||
if (lastTrack == null) | |||
{ | |||
Log($"未找到药箱[{requestLendProtocol.EleMedKitCode}]最近的定位信息"); | |||
break; | |||
} | |||
OperationRoomBLL operationRoomBLL = new OperationRoomBLL(); | |||
RDH.Data.Models.OperationRoom currentRoom = operationRoomBLL.GetOperationRoomBySignalStation(lastTrack.TrackCode.PadLeft(3, '0')); | |||
if (currentRoom == null) | |||
{ | |||
Log($"未找到基站[{lastTrack.TrackCode}]配置的手术间"); | |||
break; | |||
} | |||
//根据手术间,获取最近的借药信息 | |||
SPILItemTransactionBLL sPILItemTransactionBLL = new SPILItemTransactionBLL(); | |||
IEnumerable<SPILItemTransaction> transactions = sPILItemTransactionBLL.ListMekKitDrugLendTransactionByRoom(currentRoom.RoomName.TrimStart('0')); | |||
if (transactions == null || transactions.Count() == 0) | |||
{ | |||
Log($"未找到手术间[{currentRoom.RoomName}]的借药记录"); | |||
break; | |||
} | |||
//生成返回信息 | |||
ResponseLendDrugProtocol response = new ResponseLendDrugProtocol(); | |||
response.EleMedKitCode = requestLendProtocol.EleMedKitCode; | |||
response.ListLendResult = new List<SimpleDrugLotProtocol>(); | |||
foreach (SPILItemTransaction t in transactions) | |||
{ | |||
response.ListLendResult.Add(new SimpleDrugLotProtocol | |||
{ | |||
DrugKey = t.ItemTransaction.ItemKey.ToString(), | |||
DrugLotCode = t.ItemLotInfo.LotNo, | |||
Barcode = t.Ext06 | |||
}); | |||
} | |||
responseData = response; | |||
//更新借药成功的状态 | |||
ItemTransactionBLL itemTransactionBLL = new ItemTransactionBLL(); | |||
ItemTransaction itemTransaction = transactions.First().ItemTransaction; | |||
itemTransaction.Ext10 = "1"; | |||
itemTransactionBLL.Update(itemTransaction); | |||
//ResponseLendDrugProtocol response = new ResponseLendDrugProtocol(); | |||
//response.EleMedKitCode = requestLendProtocol.EleMedKitCode; | |||
//response.ListLendResult = new List<SimpleDrugLotProtocol>(); | |||
//response.ListLendResult.Add(new SimpleDrugLotProtocol() | |||
//{ | |||
// Barcode = "E00000000000000000000011", | |||
// DrugKey = "81992454-f7a9-4385-aae5-78a3ce7af412", | |||
// DrugLotCode = "20230807", | |||
//}); | |||
//response.ListLendResult.Add(new SimpleDrugLotProtocol() | |||
//{ | |||
// Barcode = "E00000000000000000000002", | |||
// DrugKey = "39383086-f0aa-4ed0-bbe8-e1bf7fba719f", | |||
// DrugLotCode = "20230817", | |||
//}); | |||
//responseData = response; | |||
} | |||
} | |||
catch (Exception ex) | |||
{ | |||
Log("借药出错:" + ex.Message, -1); | |||
} | |||
break; | |||
} | |||
if (responseData != null) | |||
{ |