Ver código fonte

first

master
lirenjie 6 meses atrás
pai
commit
64be6c618d

+ 1
- 1
RDH.Data.Interfaces/IOperationRoomBLL.cs Ver arquivo

@@ -10,6 +10,6 @@ namespace RDH.Data.BLL
{
public partial interface IOperationRoomBLL:IRegable,IBaseBLL<OperationRoom>
{
OperationRoom GetOperationRoomBySignalStation(String stationCode);
}
}

+ 1
- 0
RDH.Data.Models/SPILItemTransaction.cs Ver arquivo

@@ -278,6 +278,7 @@ namespace RDH.Data.Models
OnPropertyChanged("StorageSpaceItemLot");
}
}
public ItemLot ItemLotInfo { get; set; }
#endregion
}
}

+ 6
- 0
RDH.Data/OperationRoomBLL.cs Ver arquivo

@@ -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();
}
}

}

+ 18
- 18
RDH.Data/PortableStorageTrackBLL.cs Ver arquivo

@@ -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,
};
}


+ 70
- 6
RDH.Data/SPILItemTransactionBLL.cs Ver arquivo

@@ -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;
}
}

}

+ 26
- 0
RDH.Data/SqlBuilder/SqlBuilder.cs Ver arquivo

@@ -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();
}
}

+ 5
- 0
Rdh.SocketServer.Client/Models/EleMedKitCommand.cs Ver arquivo

@@ -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";
}
}

+ 24
- 0
Rdh.SocketServer.Client/Models/EleMedKitProtocol/RequestDrugLendProtocol.cs Ver arquivo

@@ -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);
}
}
}

+ 30
- 0
Rdh.SocketServer.Client/Models/EleMedKitProtocol/ResponseLendDrugProtocol.cs Ver arquivo

@@ -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);
}
}
}

+ 24
- 0
Rdh.SocketServer.Client/Models/EleMedKitProtocol/SimpleDrugLotProtocol.cs Ver arquivo

@@ -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);
}
}
}

+ 2
- 0
Rdh.SocketServer.Client/Models/EleMedKitProtocolHelper.cs Ver arquivo

@@ -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();
}

+ 87
- 2
Rdh.SocketServer.Client/ViewModels/MainWindowViewModel.cs Ver arquivo

@@ -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)
{

Carregando…
Cancelar
Salvar