|
|
@ -62,12 +62,21 @@ namespace djy.Service.Ams
|
|
|
|
.WhereIf(hou != null, x => hou.Contains(x.GID))
|
|
|
|
.WhereIf(hou != null, x => hou.Contains(x.GID))
|
|
|
|
.WhereIf(req.BDate != null, x => x.CreateTime >= req.BDate)
|
|
|
|
.WhereIf(req.BDate != null, x => x.CreateTime >= req.BDate)
|
|
|
|
.WhereIf(req.EDate != null, x => x.CreateTime <= req.EDate).OrderByDescending(x => x.CreateTime);
|
|
|
|
.WhereIf(req.EDate != null, x => x.CreateTime <= req.EDate).OrderByDescending(x => x.CreateTime);
|
|
|
|
|
|
|
|
var SASCCODEList = DbBus.Get(DbList.djydb).Select<company_new_param_value>().Where(x => x.ParaCode == "AMSSASCCODE").ToList();
|
|
|
|
var list = dto.Page(req.Page, req.Limit).ToList<AMSDto>();
|
|
|
|
var list = dto.Page(req.Page, req.Limit).ToList<AMSDto>();
|
|
|
|
if (list != null)
|
|
|
|
if (list != null)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
foreach (var item in list)
|
|
|
|
foreach (var item in list)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
var SASCCODE = SASCCODEList.Where(x => x.CompId == item.CompID).FirstOrDefault();
|
|
|
|
|
|
|
|
if (SASCCODE != null)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
item.SASCCODE = SASCCODE.ItemCode;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
item.SASCCODE = "NIAV";
|
|
|
|
|
|
|
|
}
|
|
|
|
var hodto = DbBus.Get(DbList.AMSCenter).Select<AMS_House>().Where(x => x.IsDel != true && x.PID == item.GID)
|
|
|
|
var hodto = DbBus.Get(DbList.AMSCenter).Select<AMS_House>().Where(x => x.IsDel != true && x.PID == item.GID)
|
|
|
|
.WhereIf(!string.IsNullOrEmpty(req.Hid), x => x.GID == req.Hid)
|
|
|
|
.WhereIf(!string.IsNullOrEmpty(req.Hid), x => x.GID == req.Hid)
|
|
|
|
.WhereIf(req.HBLNo != null, x => x.HBLNo.Contains(req.HBLNo.Trim()))
|
|
|
|
.WhereIf(req.HBLNo != null, x => x.HBLNo.Contains(req.HBLNo.Trim()))
|
|
|
@ -78,7 +87,6 @@ namespace djy.Service.Ams
|
|
|
|
item.HouseDto = hodto;
|
|
|
|
item.HouseDto = hodto;
|
|
|
|
if (hodto != null)
|
|
|
|
if (hodto != null)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
foreach (var it in hodto)
|
|
|
|
foreach (var it in hodto)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
var cnt = DbBus.Get(DbList.AMSCenter).Select<AMS_Cntrno>().Where(x => x.IsDel != true && x.HID == it.GID).ToList();
|
|
|
|
var cnt = DbBus.Get(DbList.AMSCenter).Select<AMS_Cntrno>().Where(x => x.IsDel != true && x.HID == it.GID).ToList();
|
|
|
@ -89,8 +97,6 @@ namespace djy.Service.Ams
|
|
|
|
}
|
|
|
|
}
|
|
|
|
count += hodto.Count();
|
|
|
|
count += hodto.Count();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
result.data = list.Where(x => x.HouseDto != null && x.HouseDto.Count() > 0).ToList();
|
|
|
|
result.data = list.Where(x => x.HouseDto != null && x.HouseDto.Count() > 0).ToList();
|
|
|
|
if (req.ReportState == "0")
|
|
|
|
if (req.ReportState == "0")
|
|
|
@ -214,7 +220,7 @@ namespace djy.Service.Ams
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
if (DbBus.Get(DbList.AMSCenter).Select<AMS_House>().Where(x => x.IsDel != true && x.PID == dto.GID).ToList().Where(x=>x.ReportState.Contains("未申报")).Count()>0)
|
|
|
|
if (DbBus.Get(DbList.AMSCenter).Select<AMS_House>().Where(x => x.IsDel != true && x.PID == dto.GID).ToList().Where(x => x.ReportState.Contains("未申报")).Count() > 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DbBus.Get(DbList.AMSCenter).Transaction(() =>
|
|
|
|
DbBus.Get(DbList.AMSCenter).Transaction(() =>
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -423,6 +429,7 @@ namespace djy.Service.Ams
|
|
|
|
var url = DbBus.Get(DbList.djydb).Select<ParamSet>().Where(x => x.PARAMNAME == "AMSURL").ToOne();
|
|
|
|
var url = DbBus.Get(DbList.djydb).Select<ParamSet>().Where(x => x.PARAMNAME == "AMSURL").ToOne();
|
|
|
|
var method = DbBus.Get(DbList.djydb).Select<ParamSet>().Where(x => x.PARAMNAME == "AMSMethod").ToOne();
|
|
|
|
var method = DbBus.Get(DbList.djydb).Select<ParamSet>().Where(x => x.PARAMNAME == "AMSMethod").ToOne();
|
|
|
|
var timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
var timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
|
|
var AMSRequestDEA = DbBus.Get(DbList.djydb).Select<company_new_param_value>().Where(x => x.CompId == user.CompId && x.ParaCode == "AMSRequestDEA").First();
|
|
|
|
foreach (string oid in id)
|
|
|
|
foreach (string oid in id)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (oid != "")
|
|
|
|
if (oid != "")
|
|
|
@ -457,8 +464,15 @@ namespace djy.Service.Ams
|
|
|
|
{
|
|
|
|
{
|
|
|
|
masterBillInfo.voyage = master.VOYNO;
|
|
|
|
masterBillInfo.voyage = master.VOYNO;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (AMSRequestDEA != null)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
masterBillInfo.requesterDea = AMSRequestDEA.ItemCode;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else {
|
|
|
|
masterBillInfo.requesterDea = sysOptionConfig.Webconfig.requesterDea;
|
|
|
|
masterBillInfo.requesterDea = sysOptionConfig.Webconfig.requesterDea;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
masterBillInfo.consignmentType = master.ConsignmentType;
|
|
|
|
masterBillInfo.consignmentType = master.ConsignmentType;
|
|
|
|
masterBillInfo.loadHarbour = master.LoadingPort;
|
|
|
|
masterBillInfo.loadHarbour = master.LoadingPort;
|
|
|
|
masterBillInfo.loadHarbourCode = master.LoadingPortCode;
|
|
|
|
masterBillInfo.loadHarbourCode = master.LoadingPortCode;
|
|
|
@ -597,7 +611,15 @@ namespace djy.Service.Ams
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (AMSRequestDEA != null)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
masterBillInfo.requesterDea = AMSRequestDEA.ItemCode;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
masterBillInfo.requesterDea = sysOptionConfig.Webconfig.requesterDea;
|
|
|
|
masterBillInfo.requesterDea = sysOptionConfig.Webconfig.requesterDea;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
masterBillInfo.consignmentType = master.ConsignmentType;
|
|
|
|
masterBillInfo.consignmentType = master.ConsignmentType;
|
|
|
|
masterBillInfo.loadHarbour = master.LoadingPort;
|
|
|
|
masterBillInfo.loadHarbour = master.LoadingPort;
|
|
|
|
masterBillInfo.loadHarbourCode = master.LoadingPortCode;
|
|
|
|
masterBillInfo.loadHarbourCode = master.LoadingPortCode;
|
|
|
@ -618,7 +640,7 @@ namespace djy.Service.Ams
|
|
|
|
req.Message = "当前状态不能重发!如有疑问,请联系相关客服!";
|
|
|
|
req.Message = "当前状态不能重发!如有疑问,请联系相关客服!";
|
|
|
|
return req;
|
|
|
|
return req;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (docType == "AMSDOC"&&(item.NewNotice== "新增发送成功"))
|
|
|
|
if (docType == "AMSDOC" && (item.NewNotice == "新增发送成功"))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
req.Code = 201;
|
|
|
|
req.Code = 201;
|
|
|
|
req.Message = "当前单据已经发送,不能再次发送!如有疑问,请联系相关客服!";
|
|
|
|
req.Message = "当前单据已经发送,不能再次发送!如有疑问,请联系相关客服!";
|
|
|
@ -1066,7 +1088,7 @@ namespace djy.Service.Ams
|
|
|
|
if (house.MateState.Contains("3Z"))
|
|
|
|
if (house.MateState.Contains("3Z"))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
DbBus.Get(DbList.AMSCenter).Update<AMS_House>().Set(w => new AMS_House { MateState = "3Z," + retdto.status, NewNotice = "海关接收成功"}).Where(w => w.GID == retdto.businessId).ExecuteAffrows();
|
|
|
|
DbBus.Get(DbList.AMSCenter).Update<AMS_House>().Set(w => new AMS_House { MateState = "3Z," + retdto.status, NewNotice = "海关接收成功" }).Where(w => w.GID == retdto.businessId).ExecuteAffrows();
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
@ -1103,7 +1125,7 @@ namespace djy.Service.Ams
|
|
|
|
if (house.NewNotice == "删除发送成功")
|
|
|
|
if (house.NewNotice == "删除发送成功")
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
DbBus.Get(DbList.AMSCenter).Update<AMS_House>().Set(w => new AMS_House { MateState = retdto.status, NewNotice = "船司匹配成功"}).Where(w => w.GID == retdto.businessId).ExecuteAffrows();
|
|
|
|
DbBus.Get(DbList.AMSCenter).Update<AMS_House>().Set(w => new AMS_House { MateState = retdto.status, NewNotice = "船司匹配成功" }).Where(w => w.GID == retdto.businessId).ExecuteAffrows();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (house.NewNotice == "修改发送成功")
|
|
|
|
else if (house.NewNotice == "修改发送成功")
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -1115,7 +1137,7 @@ namespace djy.Service.Ams
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DbBus.Get(DbList.AMSCenter).Update<AMS_House>().Set(w => new AMS_House { MateState = house.MateState + "," + retdto.status, NewNotice = "船司匹配成功"}).Where(w => w.GID == retdto.businessId).ExecuteAffrows();
|
|
|
|
DbBus.Get(DbList.AMSCenter).Update<AMS_House>().Set(w => new AMS_House { MateState = house.MateState + "," + retdto.status, NewNotice = "船司匹配成功" }).Where(w => w.GID == retdto.businessId).ExecuteAffrows();
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1206,7 +1228,7 @@ namespace djy.Service.Ams
|
|
|
|
if (house.NewNotice == "删除发送成功")
|
|
|
|
if (house.NewNotice == "删除发送成功")
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
DbBus.Get(DbList.AMSCenter).Update<AMS_House>().Set(w => new AMS_House { MateState = retdto.status, NewNotice = "箱货信息不匹配"}).Where(w => w.GID == retdto.businessId).ExecuteAffrows();
|
|
|
|
DbBus.Get(DbList.AMSCenter).Update<AMS_House>().Set(w => new AMS_House { MateState = retdto.status, NewNotice = "箱货信息不匹配" }).Where(w => w.GID == retdto.businessId).ExecuteAffrows();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
if (house.NewNotice == "修改发送成功")
|
|
|
|
if (house.NewNotice == "修改发送成功")
|
|
|
@ -1227,42 +1249,42 @@ namespace djy.Service.Ams
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
//else
|
|
|
|
{
|
|
|
|
//{
|
|
|
|
AMS_MasterHistory history = new AMS_MasterHistory();
|
|
|
|
// AMS_MasterHistory history = new AMS_MasterHistory();
|
|
|
|
history.GID = Guid.NewGuid().ToString("N");
|
|
|
|
// history.GID = Guid.NewGuid().ToString("N");
|
|
|
|
history.AM_ID = retdto.businessId;
|
|
|
|
// history.AM_ID = retdto.businessId;
|
|
|
|
history.SendTime = DateTime.Now;
|
|
|
|
// history.SendTime = DateTime.Now;
|
|
|
|
history.State = "匹配失败";
|
|
|
|
// history.State = "匹配失败";
|
|
|
|
history.Type = "1";
|
|
|
|
// history.Type = "1";
|
|
|
|
history.Operator = "系统管理员";
|
|
|
|
// history.Operator = "系统管理员";
|
|
|
|
history.Remark = "您的单据" + house.HBLNo + "于" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "匹配失败";
|
|
|
|
// history.Remark = "您的单据" + house.HBLNo + "于" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "匹配失败";
|
|
|
|
DbBus.Get(DbList.AMSCenter).Insert(history).ExecuteAffrows();
|
|
|
|
// DbBus.Get(DbList.AMSCenter).Insert(history).ExecuteAffrows();
|
|
|
|
|
|
|
|
|
|
|
|
if (house.NewNotice == "删除发送成功")
|
|
|
|
// if (house.NewNotice == "删除发送成功")
|
|
|
|
{
|
|
|
|
// {
|
|
|
|
|
|
|
|
|
|
|
|
DbBus.Get(DbList.AMSCenter).Update<AMS_House>().Set(w => new AMS_House { MateState = retdto.status, NewNotice = "匹配失败" }).Where(w => w.GID == retdto.businessId).ExecuteAffrows();
|
|
|
|
// DbBus.Get(DbList.AMSCenter).Update<AMS_House>().Set(w => new AMS_House { MateState = retdto.status, NewNotice = "匹配失败" }).Where(w => w.GID == retdto.businessId).ExecuteAffrows();
|
|
|
|
}
|
|
|
|
// }
|
|
|
|
else
|
|
|
|
// else
|
|
|
|
if (house.NewNotice == "修改发送成功")
|
|
|
|
// if (house.NewNotice == "修改发送成功")
|
|
|
|
{
|
|
|
|
// {
|
|
|
|
|
|
|
|
|
|
|
|
DbBus.Get(DbList.AMSCenter).Update<AMS_House>().Set(w => new AMS_House { MateState = retdto.status, NewNotice = "匹配失败" }).Where(w => w.GID == retdto.businessId).ExecuteAffrows();
|
|
|
|
// DbBus.Get(DbList.AMSCenter).Update<AMS_House>().Set(w => new AMS_House { MateState = retdto.status, NewNotice = "匹配失败" }).Where(w => w.GID == retdto.businessId).ExecuteAffrows();
|
|
|
|
}
|
|
|
|
// }
|
|
|
|
else
|
|
|
|
// else
|
|
|
|
if (house.NewNotice == "重发发送成功" || house.NewNotice == "新增发送成功")
|
|
|
|
// if (house.NewNotice == "重发发送成功" || house.NewNotice == "新增发送成功")
|
|
|
|
{
|
|
|
|
// {
|
|
|
|
|
|
|
|
|
|
|
|
DbBus.Get(DbList.AMSCenter).Update<AMS_House>().Set(w => new AMS_House { MateState = retdto.status, NewNotice = "匹配失败" }).Where(w => w.GID == retdto.businessId).ExecuteAffrows();
|
|
|
|
// DbBus.Get(DbList.AMSCenter).Update<AMS_House>().Set(w => new AMS_House { MateState = retdto.status, NewNotice = "匹配失败" }).Where(w => w.GID == retdto.businessId).ExecuteAffrows();
|
|
|
|
}
|
|
|
|
// }
|
|
|
|
else
|
|
|
|
// else
|
|
|
|
{
|
|
|
|
// {
|
|
|
|
|
|
|
|
|
|
|
|
DbBus.Get(DbList.AMSCenter).Update<AMS_House>().Set(w => new AMS_House { MateState = retdto.status, NewNotice = "匹配失败" }).Where(w => w.GID == retdto.businessId).ExecuteAffrows();
|
|
|
|
// DbBus.Get(DbList.AMSCenter).Update<AMS_House>().Set(w => new AMS_House { MateState = retdto.status, NewNotice = "匹配失败" }).Where(w => w.GID == retdto.businessId).ExecuteAffrows();
|
|
|
|
}
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
//}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
@ -1313,8 +1335,9 @@ namespace djy.Service.Ams
|
|
|
|
}).Distinct().ToList();
|
|
|
|
}).Distinct().ToList();
|
|
|
|
return List;
|
|
|
|
return List;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else
|
|
|
|
var List = DbBus.Get(DbList.Common).Select<CodeCountry>().WhereIf(strlink != "", x => x.Code.Contains(strlink.Trim()) || x.EnName.Contains(strlink.Trim())|| x.CnName.Contains(strlink.Trim()) ).Page(page, limit).ToList().Select(x => new CommonCNEN
|
|
|
|
{
|
|
|
|
|
|
|
|
var List = DbBus.Get(DbList.Common).Select<CodeCountry>().WhereIf(strlink != "", x => x.Code.Contains(strlink.Trim()) || x.EnName.Contains(strlink.Trim()) || x.CnName.Contains(strlink.Trim())).Page(page, limit).ToList().Select(x => new CommonCNEN
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Code = x.Code,
|
|
|
|
Code = x.Code,
|
|
|
|
ENName = x.EnName,
|
|
|
|
ENName = x.EnName,
|
|
|
@ -1416,7 +1439,8 @@ namespace djy.Service.Ams
|
|
|
|
}).Distinct().ToList();
|
|
|
|
}).Distinct().ToList();
|
|
|
|
return List;
|
|
|
|
return List;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
var List = DbBus.Get(DbList.Common).Select<CodePort>().WhereIf(strlink != "", x => x.Code.Contains(strlink.Trim()) || x.EnName.Contains(strlink.Trim())).Page(page, limit).ToList().Select(x => new CommonCodeValue
|
|
|
|
var List = DbBus.Get(DbList.Common).Select<CodePort>().WhereIf(strlink != "", x => x.Code.Contains(strlink.Trim()) || x.EnName.Contains(strlink.Trim())).Page(page, limit).ToList().Select(x => new CommonCodeValue
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -1452,7 +1476,7 @@ namespace djy.Service.Ams
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public List<CommonCodeValue> GetVessel(string strlink,int page,int limit)
|
|
|
|
public List<CommonCodeValue> GetVessel(string strlink, int page, int limit)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
try
|
|
|
|
try
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -1465,8 +1489,9 @@ namespace djy.Service.Ams
|
|
|
|
}).Distinct().ToList();
|
|
|
|
}).Distinct().ToList();
|
|
|
|
return List;
|
|
|
|
return List;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else
|
|
|
|
var List = DbBus.Get(DbList.Common).Select<CodeVessel>().WhereIf(strlink != "", x => x.Name.Contains(strlink.Trim())).Page(page,limit).ToList().Select(x => new CommonCodeValue
|
|
|
|
{
|
|
|
|
|
|
|
|
var List = DbBus.Get(DbList.Common).Select<CodeVessel>().WhereIf(strlink != "", x => x.Name.Contains(strlink.Trim())).Page(page, limit).ToList().Select(x => new CommonCodeValue
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Code = x.Name,
|
|
|
|
Code = x.Name,
|
|
|
|
Value = x.Name,
|
|
|
|
Value = x.Name,
|
|
|
@ -1733,6 +1758,21 @@ namespace djy.Service.Ams
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public async Task<company_new_param_value> GetSASCCODE(User user)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
try
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
var List = await DbBus.Get(DbList.djydb).Select<company_new_param_value>().Where(x => x.CompId == user.CompId && x.ParaCode == "AMSSASCCODE").FirstAsync();
|
|
|
|
|
|
|
|
return List;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
throw;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|