{ | { | ||||
public partial interface IOperationRoomBLL:IRegable,IBaseBLL<OperationRoom> | public partial interface IOperationRoomBLL:IRegable,IBaseBLL<OperationRoom> | ||||
{ | { | ||||
OperationRoom GetOperationRoomBySignalStation(String stationCode); | |||||
} | } | ||||
} | } |
OnPropertyChanged("StorageSpaceItemLot"); | OnPropertyChanged("StorageSpaceItemLot"); | ||||
} | } | ||||
} | } | ||||
public ItemLot ItemLotInfo { get; set; } | |||||
#endregion | #endregion | ||||
} | } | ||||
} | } |
Ext10 = operationroom.Ext10, //Params | Ext10 = operationroom.Ext10, //Params | ||||
}; | }; | ||||
} | } | ||||
public OperationRoom GetOperationRoomBySignalStation(String stationCode) | |||||
{ | |||||
return SqlMapper.Query<OperationRoom>(ConnectionFactory.Current.GetSessionConnection(), | |||||
BuildBaseSql() + " WHERE ext02=:stationCode", | |||||
new { stationCode = stationCode }).FirstOrDefault(); | |||||
} | |||||
} | } | ||||
} | } |
{ | { | ||||
return new | 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, | |||||
}; | }; | ||||
} | } | ||||
using RDH.Data.Models; | using RDH.Data.Models; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.DirectoryServices; | |||||
using System.Linq; | using System.Linq; | ||||
using System.Text; | using System.Text; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
{ | { | ||||
public partial class SPILItemTransactionBLL : BaseOrclBLL<SPILItemTransaction> | public partial class SPILItemTransactionBLL : BaseOrclBLL<SPILItemTransaction> | ||||
{ | { | ||||
public SPILItemTransactionBLL() : base() | public SPILItemTransactionBLL() : base() | ||||
{ | { | ||||
AliasTableName = "spilt"; | AliasTableName = "spilt"; | ||||
internal override string ENTITY_NAME { get { return "SPILItemTransaction"; } } | internal override string ENTITY_NAME { get { return "SPILItemTransaction"; } } | ||||
internal override String KEY_COLUMN { get { return "KEY"; } }//KEY_COLUMN | internal override String KEY_COLUMN { get { return "KEY"; } }//KEY_COLUMN | ||||
internal override void InitMaps() | internal override void InitMaps() | ||||
{ | { | ||||
ItemLotKey = spilitemtransaction.ItemLotKey, //Params | 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; | |||||
} | |||||
} | } | ||||
} | } |
private List<TableJoinInfo> _listJoinInfo; | private List<TableJoinInfo> _listJoinInfo; | ||||
private StringBuilder _whereBuilder; | private StringBuilder _whereBuilder; | ||||
private StringBuilder _selectionBuilder; | private StringBuilder _selectionBuilder; | ||||
private StringBuilder _orderBuilder; | |||||
public SqlBuilder(BaseBLL dal) | public SqlBuilder(BaseBLL dal) | ||||
{ | { | ||||
{ | { | ||||
_whereBuilder.AppendFormat(value, paramInfo); | _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) | public void AppendSelectionTable(TableJoinInfo joinInfo) | ||||
{ | { | ||||
if (joinInfo == null || joinInfo.LeftDal == null || joinInfo.RightDal == null) | if (joinInfo == null || joinInfo.LeftDal == null || joinInfo.RightDal == null) | ||||
builder.Append(" "); | builder.Append(" "); | ||||
builder.Append(_whereBuilder.ToString()); | builder.Append(_whereBuilder.ToString()); | ||||
} | } | ||||
if (_orderBuilder != null) | |||||
{ | |||||
builder.Append(_orderBuilder.ToString()); | |||||
} | |||||
return builder.ToString(); | return builder.ToString(); | ||||
} | } | ||||
} | } |
/// </summary> | /// </summary> | ||||
public const String RequestSupplyList = "0F"; | public const String RequestSupplyList = "0F"; | ||||
/// <summary> | /// <summary> | ||||
/// 药箱查询借药信息 | |||||
/// </summary> | |||||
public const String RequestDrugLend = "0G"; | |||||
/// <summary> | |||||
/// 药箱同步时钟 | /// 药箱同步时钟 | ||||
/// </summary> | /// </summary> | ||||
public const String RequestClock = "TT"; | public const String RequestClock = "TT"; | ||||
public const String ResponseRobot = "0D"; | public const String ResponseRobot = "0D"; | ||||
public const String ResponseReturnMedKit = "0E"; | public const String ResponseReturnMedKit = "0E"; | ||||
public const String ResponseSupplyList = "0F"; | public const String ResponseSupplyList = "0F"; | ||||
public const String ResponseDrugLend = "0G"; | |||||
public const String RepsonseClock = "TT"; | public const String RepsonseClock = "TT"; | ||||
} | } | ||||
} | } |
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); | |||||
} | |||||
} | |||||
} |
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); | |||||
} | |||||
} | |||||
} |
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); | |||||
} | |||||
} | |||||
} |
return new RequestMedKitReturnProtocol(); | return new RequestMedKitReturnProtocol(); | ||||
case EleMedKitCommand.RequestSupplyList: | case EleMedKitCommand.RequestSupplyList: | ||||
return new RequestSupplyDrugProtocol(); | return new RequestSupplyDrugProtocol(); | ||||
case EleMedKitCommand.RequestDrugLend: | |||||
return new RequestDrugLendProtocol(); | |||||
default: | default: | ||||
return new UnSupportProtocol(); | return new UnSupportProtocol(); | ||||
} | } |
curTrack.TrackCode = simpleStationCode; | curTrack.TrackCode = simpleStationCode; | ||||
portableStorageTrackBLL.Save(curTrack); | portableStorageTrackBLL.Save(curTrack); | ||||
} | } | ||||
} | |||||
} | |||||
#endregion | #endregion | ||||
} | |||||
} | |||||
else | |||||
{ | |||||
Log($"基站编号[{locationRequest.StationCode}]未配置手术间"); | |||||
} | |||||
#endregion | #endregion | ||||
} | } | ||||
catch (Exception ex) | catch (Exception ex) | ||||
Log("归还出错:" + ex.Message, -1); | Log("归还出错:" + ex.Message, -1); | ||||
} | } | ||||
break; | 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) | if (responseData != null) | ||||
{ | { |