You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1799 lines
93 KiB
C#
1799 lines
93 KiB
C#
using Myshipping.Core;
|
|
using Furion.DependencyInjection;
|
|
using Furion.DynamicApiController;
|
|
using Mapster;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using SqlSugar;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Myshipping.Application.Entity;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Furion;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Furion.DataEncryption;
|
|
using System.Collections.Generic;
|
|
using System.Security.Claims;
|
|
using Microsoft.AspNetCore.Authentication.Cookies;
|
|
using Microsoft.AspNetCore.Authentication;
|
|
using Microsoft.AspNetCore.Identity;
|
|
using Furion.FriendlyException;
|
|
using Furion.Logging;
|
|
using System;
|
|
using Microsoft.Extensions.Logging;
|
|
using System.Reflection;
|
|
using System.ComponentModel;
|
|
using Myshipping.Application.ConfigOption;
|
|
using System.IO;
|
|
using Yitter.IdGenerator;
|
|
using Myshipping.Core.Entity;
|
|
using Furion.RemoteRequest.Extensions;
|
|
using System.Net.Http;
|
|
using Myshipping.Core.Service;
|
|
using System.Reflection.Emit;
|
|
using Myshipping.Application.Service.DataSync.Dto;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
namespace Myshipping.Application
|
|
{
|
|
/// <summary>
|
|
/// 数据同步服务
|
|
/// </summary>
|
|
[ApiDescriptionSettings("Application", Name = "DataSync", Order = 1), AllowAnonymous]
|
|
public class DataSyncService : IDynamicApiController, ITransient
|
|
{
|
|
private readonly ILogger<DataSyncService> _logger;
|
|
private readonly ISysCacheService _cache;
|
|
private readonly SqlSugarRepository<BookingOrder> _rep;
|
|
private readonly SqlSugarRepository<BookingCtn> _repCtn;
|
|
private readonly SqlSugarRepository<BookingCtnDetail> _ctndetailrep;
|
|
private readonly SqlSugarRepository<SysUser> _repUser;
|
|
private readonly SqlSugarRepository<SysTenant> _repTenant;
|
|
private readonly SqlSugarRepository<DjyCustomer> _djycustomer;
|
|
private readonly SqlSugarRepository<DjyCustomerContact> _djycustomercontact;
|
|
private readonly SqlSugarRepository<DjyVesselInfo> _vesselinfo;
|
|
private readonly SqlSugarRepository<BookingEDIExt> _bookingEDIExt;
|
|
private readonly SqlSugarRepository<BookingLog> _bookinglog;
|
|
private readonly SqlSugarRepository<BookingLogDetail> _bookinglogdetail;
|
|
private readonly SqlSugarRepository<BookingRemark> _bookingremark;
|
|
private readonly SqlSugarRepository<BookingGoodsStatus> _goodsStatus;
|
|
private readonly SqlSugarRepository<BookingGoodsStatusConfig> _goodsStatusConfig;
|
|
private readonly SqlSugarRepository<DjyTenantLine> _repline;
|
|
private readonly SqlSugarRepository<MappingCarrier> _mapcarrier;
|
|
private readonly SqlSugarRepository<CodeLane> _codeLaneRep;
|
|
private readonly SqlSugarRepository<CodePort> _codePortRep;
|
|
private readonly SqlSugarRepository<RelaPortCarrierLane> _relaPortLane;
|
|
private readonly ICommonDBService _commonDBService;
|
|
|
|
public DataSyncService(ILogger<DataSyncService> logger, ISysCacheService cache, SqlSugarRepository<BookingOrder> rep, SqlSugarRepository<BookingCtn> repCtn,
|
|
SqlSugarRepository<SysUser> repUser, SqlSugarRepository<SysTenant> repTenant, SqlSugarRepository<DjyCustomer> djycustomer,
|
|
SqlSugarRepository<DjyCustomerContact> djycustomercontact, SqlSugarRepository<DjyVesselInfo> vesselinfo, SqlSugarRepository<BookingCtnDetail> ctndetailrep
|
|
, SqlSugarRepository<BookingEDIExt> bookingEDIExt, SqlSugarRepository<BookingLog> bookinglog, SqlSugarRepository<BookingLogDetail> bookinglogdetail,
|
|
SqlSugarRepository<BookingGoodsStatus> goodsStatus, SqlSugarRepository<BookingGoodsStatusConfig> goodsStatusConfig, SqlSugarRepository<DjyTenantLine> repline,
|
|
SqlSugarRepository<BookingRemark> bookingremark, SqlSugarRepository<MappingCarrier> mapcarrier,
|
|
SqlSugarRepository<CodePort> codePortRep, SqlSugarRepository<CodeLane> codeLaneRep, ICommonDBService commonDBService, SqlSugarRepository<RelaPortCarrierLane> relaPortLane)
|
|
{
|
|
this._logger = logger;
|
|
this._rep = rep;
|
|
this._repCtn = repCtn;
|
|
this._cache = cache;
|
|
this._repUser = repUser;
|
|
this._repTenant = repTenant;
|
|
this._djycustomer = djycustomer;
|
|
this._djycustomercontact = djycustomercontact;
|
|
this._vesselinfo = vesselinfo;
|
|
this._ctndetailrep = ctndetailrep;
|
|
this._bookingEDIExt = bookingEDIExt;
|
|
this._bookinglog = bookinglog;
|
|
this._bookinglogdetail = bookinglogdetail;
|
|
this._bookingremark = bookingremark;
|
|
this._goodsStatus = goodsStatus;
|
|
this._goodsStatusConfig = goodsStatusConfig;
|
|
this._repline = repline;
|
|
this._mapcarrier = mapcarrier;
|
|
this._codePortRep = codePortRep;
|
|
this._codeLaneRep = codeLaneRep;
|
|
this._commonDBService = commonDBService;
|
|
this._relaPortLane = relaPortLane;
|
|
}
|
|
|
|
|
|
#region 上传数据
|
|
/// <summary>
|
|
/// 同步客户
|
|
/// </summary>
|
|
/// <param name="model">参数</param>
|
|
/// <returns></returns>
|
|
[HttpPost("/DataSync/SyncCustomer"), ApiUser(ApiCode = "SyncCustomer")]
|
|
public async Task<long> SyncCustomer(DjyCustomerSyncDto model)
|
|
{
|
|
var userlist = await _repUser.AsQueryable().Filter(null, true).Where(x => x.IsDeleted == false).ToListAsync();
|
|
if (string.IsNullOrWhiteSpace(model.ShortName))
|
|
{
|
|
throw Oops.Bah("简称未录入");
|
|
}
|
|
var m = await _djycustomer.AsQueryable().Filter(null, true).Where(x => x.ShortName == model.ShortName && x.IsDeleted == false).FirstAsync();
|
|
var entity = model.Adapt<DjyCustomer>();
|
|
if (m == null)
|
|
{
|
|
|
|
if (!string.IsNullOrEmpty(entity.SALE))
|
|
{
|
|
entity.SALEID = userlist.Where(x => x.Name == entity.SALE).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.SALE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.OP))
|
|
{
|
|
entity.OPID = userlist.Where(x => x.Name == entity.OP).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.OP).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.DOC))
|
|
{
|
|
entity.DOCID = userlist.Where(x => x.Name == entity.DOC).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.DOC).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.CUSTSERVICE))
|
|
{
|
|
entity.CUSTSERVICEID = userlist.Where(x => x.Name == entity.CUSTSERVICE).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.CUSTSERVICE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
entity.PropString = entity.PropString.Replace("forwarder", "booking_agent");
|
|
entity.TenantId = UserManager.TENANT_ID;
|
|
await _djycustomer.InsertAsync(entity);
|
|
foreach (var item in model.ContactList)
|
|
{
|
|
var contact = item.Adapt<DjyCustomerContact>();
|
|
contact.CustomerId = entity.Id;
|
|
contact.TenantId = UserManager.TENANT_ID;
|
|
await _djycustomercontact.InsertAsync(contact);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
entity.Id = m.Id;
|
|
if (!string.IsNullOrEmpty(entity.SALE))
|
|
{
|
|
entity.SALEID = userlist.Where(x => x.Name == entity.SALE).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.SALE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.OP))
|
|
{
|
|
entity.OPID = userlist.Where(x => x.Name == entity.OP).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.OP).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.DOC))
|
|
{
|
|
entity.DOCID = userlist.Where(x => x.Name == entity.DOC).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.DOC).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.CUSTSERVICE))
|
|
{
|
|
entity.CUSTSERVICEID = userlist.Where(x => x.Name == entity.CUSTSERVICE).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.CUSTSERVICE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
entity.PropString = entity.PropString.Replace("forwarder", "booking_agent");
|
|
await _djycustomer.AsUpdateable(entity).IgnoreColumns(it => new
|
|
{
|
|
it.TenantId,
|
|
it.TIDANINFO
|
|
}).ExecuteCommandAsync();
|
|
await _djycustomercontact.DeleteAsync(x => x.CustomerId == entity.Id);
|
|
foreach (var item in model.ContactList)
|
|
{
|
|
var contact = item.Adapt<DjyCustomerContact>();
|
|
contact.CustomerId = entity.Id;
|
|
contact.TenantId = UserManager.TENANT_ID;
|
|
await _djycustomercontact.InsertAsync(contact);
|
|
}
|
|
}
|
|
return entity.Id;
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 批量同步客户无返回值
|
|
/// </summary>
|
|
/// <param name="model">参数</param>
|
|
/// <returns></returns>
|
|
[HttpPost("/DataSync/SyncCustomerList"), ApiUser(ApiCode = "SyncCustomerList")]
|
|
public async Task SyncCustomer(List<DjyCustomerSyncDto> model)
|
|
{
|
|
var userlist = await _repUser.AsQueryable().Filter(null, true).Where(x => x.IsDeleted == false).ToListAsync();
|
|
foreach (var item in model)
|
|
{
|
|
|
|
|
|
if (string.IsNullOrWhiteSpace(item.ShortName))
|
|
{
|
|
throw Oops.Bah("简称未录入");
|
|
}
|
|
var m = await _djycustomer.AsQueryable().Filter(null, true).Where(x => x.ShortName == item.ShortName && x.IsDeleted == false).FirstAsync();
|
|
var entity = item.Adapt<DjyCustomer>();
|
|
if (m == null)
|
|
{
|
|
if (!string.IsNullOrEmpty(entity.SALE))
|
|
{
|
|
entity.SALEID = userlist.Where(x => x.Name == entity.SALE).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.SALE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.OP))
|
|
{
|
|
entity.OPID = userlist.Where(x => x.Name == entity.OP).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.OP).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.DOC))
|
|
{
|
|
entity.DOCID = userlist.Where(x => x.Name == entity.DOC).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.DOC).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.CUSTSERVICE))
|
|
{
|
|
entity.CUSTSERVICEID = userlist.Where(x => x.Name == entity.CUSTSERVICE).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.CUSTSERVICE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
|
|
}
|
|
entity.PropString = entity.PropString.Replace("forwarder", "booking_agent");
|
|
entity.TenantId = UserManager.TENANT_ID;
|
|
await _djycustomer.InsertAsync(entity);
|
|
foreach (var it in item.ContactList)
|
|
{
|
|
var contact = it.Adapt<DjyCustomerContact>();
|
|
contact.CustomerId = entity.Id;
|
|
contact.TenantId = UserManager.TENANT_ID;
|
|
await _djycustomercontact.InsertAsync(contact);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
entity.Id = m.Id;
|
|
if (!string.IsNullOrEmpty(entity.SALE))
|
|
{
|
|
entity.SALEID = userlist.Where(x => x.Name == entity.SALE).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.SALE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.OP))
|
|
{
|
|
entity.OPID = userlist.Where(x => x.Name == entity.OP).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.OP).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.DOC))
|
|
{
|
|
entity.DOCID = userlist.Where(x => x.Name == entity.DOC).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.DOC).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.CUSTSERVICE))
|
|
{
|
|
entity.CUSTSERVICEID = userlist.Where(x => x.Name == entity.CUSTSERVICE).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.CUSTSERVICE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
entity.PropString = entity.PropString.Replace("forwarder", "booking_agent");
|
|
await _djycustomer.AsUpdateable(entity).IgnoreColumns(it => new
|
|
{
|
|
it.TenantId,
|
|
it.TIDANINFO
|
|
}).ExecuteCommandAsync();
|
|
await _djycustomercontact.DeleteAsync(x => x.CustomerId == entity.Id);
|
|
foreach (var it in item.ContactList)
|
|
{
|
|
var contact = it.Adapt<DjyCustomerContact>();
|
|
contact.CustomerId = entity.Id;
|
|
contact.TenantId = UserManager.TENANT_ID;
|
|
await _djycustomercontact.InsertAsync(contact);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 批量同步船期无返回值
|
|
/// </summary>
|
|
/// <param name="model"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("/DataSync/SyncVesselDateList"), ApiUser(ApiCode = "SyncVesselDateList")]
|
|
[SqlSugarUnitOfWork]
|
|
public async Task<dynamic> SyncVesselDateList(List<DjyVesselInfoDto> model)
|
|
{
|
|
|
|
var mapcarrier = await _mapcarrier.Where(x => x.Module == "HeChuan").ToListAsync();
|
|
foreach (var item in model)
|
|
{
|
|
|
|
if (string.IsNullOrWhiteSpace(item.BSNO))
|
|
{
|
|
throw Oops.Bah("BSNO未录入");
|
|
}
|
|
var userlist = _repUser.AsQueryable().Filter(null, true).Where(x => x.IsDeleted == false).ToListAsync();
|
|
var m = await _vesselinfo.AsQueryable().Filter(null, true).Where(x => x.BSNO == item.BSNO).FirstAsync();
|
|
var entity = item.Adapt<DjyVesselInfo>();
|
|
entity.Vessel = item.Vessel.ToUpper().Trim();
|
|
if (!string.IsNullOrEmpty(item.CARRIER))
|
|
{
|
|
entity.CARRIERID = _cache.GetAllCodeCarrier().Result.Where(x => x.CnName == item.CARRIER).Select(x => x.Code).FirstOrDefault();
|
|
|
|
if (string.IsNullOrEmpty(entity.CARRIERID))
|
|
{
|
|
|
|
entity.CARRIERID = mapcarrier.Where(x => x.MapName == item.CARRIER).Select(x => x.Code).FirstOrDefault();
|
|
}
|
|
|
|
if (string.IsNullOrEmpty(entity.CARRIERID))
|
|
{
|
|
|
|
throw Oops.Bah($"未找到{item.CARRIER}对应code,请联系管理员!");
|
|
}
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(item.CreatedUserName))
|
|
{
|
|
|
|
entity.CreatedUserId = userlist.Result.Where(x => x.Name == item.CreatedUserName).Select(x => x.Id).FirstOrDefault();
|
|
}
|
|
if (m == null)
|
|
{
|
|
await _vesselinfo.InsertAsync(entity);
|
|
}
|
|
else
|
|
{
|
|
entity.Id = m.Id;
|
|
await _vesselinfo.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
|
|
}
|
|
////根据船公司船名航次更新船期信息
|
|
if (!string.IsNullOrEmpty(item.CARRIER) && !string.IsNullOrEmpty(item.Vessel) && (!string.IsNullOrEmpty(item.Voyno) || !string.IsNullOrWhiteSpace(item.VoynoInside)))
|
|
{
|
|
|
|
var order = await _rep.AsQueryable().Filter(null, true).Where(x => x.TenantId == UserManager.TENANT_ID && x.CARRIERID == item.CARRIERID && x.VESSEL == item.Vessel && x.IsDeleted == false)
|
|
.WhereIF(!string.IsNullOrEmpty(item.Voyno), x => x.VOYNO == item.Voyno)
|
|
.WhereIF(!string.IsNullOrEmpty(item.VoynoInside), x => x.VOYNOINNER == item.VoynoInside).ToListAsync();
|
|
|
|
_logger.LogInformation($"同步船期_查询到{UserManager.TENANT_NAME}需要更新{order.Count()}条订舱数据");
|
|
foreach (var it in order)
|
|
{
|
|
//更新订舱船期
|
|
if (it.ETD != item.ETD)
|
|
{
|
|
it.ETD = item.ETD;
|
|
}
|
|
if (it.ATD != item.ATD)
|
|
{
|
|
it.ATD = item.ATD;
|
|
}
|
|
if (it.YgtETD!=item.YgtETD) {
|
|
it.YgtETD = item.YgtETD;
|
|
}
|
|
await _rep.AsUpdateable(it).IgnoreColumns(it => new
|
|
{
|
|
it.ParentId,
|
|
it.TenantId,
|
|
it.CreatedTime,
|
|
it.CreatedUserId,
|
|
it.CreatedUserName,
|
|
it.UpdatedTime,
|
|
it.UpdatedUserId,
|
|
it.UpdatedUserName,
|
|
it.TenantName,
|
|
it.IsDeleted,
|
|
it.BOOKINGNO,
|
|
it.LstShipOrderCompareId,
|
|
it.LstShipOrderCompareDate,
|
|
it.LstShipOrderCompareRlt,
|
|
it.LstShipOrderCompareRltName,
|
|
it.LstShipOrderCompareMode
|
|
}).ExecuteCommandAsync();
|
|
//记录日志
|
|
|
|
|
|
|
|
////添加booking日志
|
|
var bid = await _bookinglog.InsertReturnSnowflakeIdAsync(new BookingLog
|
|
{
|
|
Type = "Edit",
|
|
BookingId = it.Id,
|
|
TenantId = Convert.ToInt64(UserManager.TENANT_ID),
|
|
CreatedTime = DateTime.Now,
|
|
CreatedUserId = UserManager.UserId,
|
|
CreatedUserName = UserManager.Name
|
|
});
|
|
if (it.ETD != item.ETD)
|
|
{
|
|
await _bookinglogdetail.InsertReturnSnowflakeIdAsync(new BookingLogDetail
|
|
{
|
|
PId = bid,
|
|
Field = "ETD",
|
|
OldValue = it.ETD != null ? it.ETD.ToSqlValue() : null,
|
|
NewValue = item.ETD != null ? item.ETD.ToSqlValue() : null,
|
|
});
|
|
}
|
|
if (it.ATD != item.ATD)
|
|
{
|
|
await _bookinglogdetail.InsertReturnSnowflakeIdAsync(new BookingLogDetail
|
|
{
|
|
PId = bid,
|
|
Field = "ATD",
|
|
OldValue = it.ATD != null ? it.ATD.ToSqlValue() : null,
|
|
NewValue = item.ATD != null ? item.ATD.ToSqlValue() : null,
|
|
});
|
|
}
|
|
if (it.YgtETD != item.YgtETD)
|
|
{
|
|
await _bookinglogdetail.InsertReturnSnowflakeIdAsync(new BookingLogDetail
|
|
{
|
|
PId = bid,
|
|
Field = "ETD",
|
|
OldValue = it.YgtETD != null ? it.YgtETD.ToSqlValue() : null,
|
|
NewValue = item.YgtETD != null ? item.YgtETD.ToSqlValue() : null,
|
|
});
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
return "上传成功!";
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 同步订舱批量 没有返回值
|
|
/// </summary>
|
|
/// <param name="list"></param>
|
|
/// <returns></returns>
|
|
[SqlSugarUnitOfWork]
|
|
[HttpPost("/DataSync/SyncBookingList"), ApiUser(ApiCode = "SyncBookingList")]
|
|
public async Task SyncBookingList(List<SyncBookingOrderDto> list)
|
|
{
|
|
List<CodeCtn> ctncode = await _cache.GetAllCodeCtn();
|
|
var mapcarrier = await _mapcarrier.Where(x => x.Module == "HeChuan").ToListAsync();
|
|
var userlist = await _repUser.AsQueryable().Filter(null, true).Where(x => x.IsDeleted == false).ToListAsync();
|
|
var djycustomer = await _djycustomer.AsQueryable().Filter(null, true).Where(x => x.IsDeleted == false).ToListAsync();
|
|
var goodsconfig = await _goodsStatusConfig.AsQueryable().Filter(null, true).Where(x => x.IsDeleted == false).ToListAsync();
|
|
foreach (var model in list)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(model.BSNO))
|
|
{
|
|
throw Oops.Bah("主单BSNO未录入");
|
|
}
|
|
if (string.IsNullOrWhiteSpace(model.CreatedUserName))
|
|
{
|
|
throw Oops.Bah("未录入创建人");
|
|
}
|
|
|
|
var user = await _repUser.AsQueryable().Filter(null, true).Where(x => x.Name == model.CreatedUserName.Trim() && x.IsDeleted == false).FirstAsync();
|
|
if (user == null)
|
|
{
|
|
throw Oops.Bah($"未匹配到创建人{model.CreatedUserName.Trim()}请联系管理员添加相关用户");
|
|
}
|
|
var order = await _rep.AsQueryable().Filter(null, true).Where(x => x.BSNO == model.BSNO && x.IsDeleted == false).FirstAsync();
|
|
|
|
|
|
if (order == null)
|
|
{
|
|
|
|
#region 新增
|
|
if (string.IsNullOrWhiteSpace(model.MBLNO))
|
|
{
|
|
throw Oops.Bah("请填写提单号!");
|
|
}
|
|
|
|
JsonUtil.PropToUpper(model, "ORDNO", "BSSTATUS", "YARDID", "YardContract", "YardContractTel", "YardContractEmail", "MARKS", "DESCRIPTION", "CONSIGNEENAME", "SHIPPERNAME", "NOTIFYPARTYNAME");
|
|
var ms = JsonUtil.TrimFields(model);
|
|
if (!string.IsNullOrEmpty(ms))
|
|
{
|
|
throw Oops.Bah(ms);
|
|
}
|
|
if (model.ctnInputs != null)
|
|
{
|
|
var groupList = model.ctnInputs.Where(x => x.CTNNUM > 0).GroupBy(c => c.CTNALL).Select(g => $"{g.Key}*{g.Sum(gg => gg.CTNNUM)}");
|
|
model.CNTRTOTAL = string.Join(" / ", groupList);
|
|
}
|
|
var et = await _rep.Where(x => x.MBLNO == model.MBLNO && x.TenantId == UserManager.TENANT_ID && x.HBLNO == model.HBLNO && x.ParentId == 0).FirstAsync();
|
|
if (et != null)
|
|
{
|
|
|
|
throw Oops.Bah("当前提单号已存在,请勿重复录入!");
|
|
}
|
|
var entity = model.Adapt<BookingOrder>();
|
|
if (!string.IsNullOrEmpty(entity.ROUTE))
|
|
{
|
|
entity.ROUTEID = userlist.Where(x => x.Name == entity.ROUTE).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.ROUTE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.SALE))
|
|
{
|
|
entity.SALEID = userlist.Where(x => x.Name == entity.SALE).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.SALE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.OP))
|
|
{
|
|
entity.OPID = userlist.Where(x => x.Name == entity.OP).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.OP).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.DOC))
|
|
{
|
|
entity.DOCID = userlist.Where(x => x.Name == entity.DOC).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.DOC).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.CUSTSERVICE))
|
|
{
|
|
entity.CUSTSERVICEID = userlist.Where(x => x.Name == entity.CUSTSERVICE).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.CUSTSERVICE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.CUSTOMSER))
|
|
{
|
|
entity.CUSTOMSERID = djycustomer.Where(x => x.ShortName == entity.CUSTOMSER && x.PropString == "customs_broker").Select(x => x.CodeName).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.TRUCKER))
|
|
{
|
|
entity.TRUCKERID = djycustomer.Where(x => x.ShortName == entity.TRUCKER && x.PropString == "fleet").Select(x => x.CodeName).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.CUSTOMERNAME))
|
|
{
|
|
entity.CUSTOMERID = djycustomer.Where(x => x.ShortName == entity.CUSTOMERNAME && x.PropString == "consignor").Select(x => x.Id).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.FORWARDER))
|
|
{
|
|
entity.FORWARDERID = djycustomer.Where(x => x.ShortName == entity.FORWARDER && x.PropString == "booking_agent").Select(x => x.CodeName).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.YARD))
|
|
{
|
|
entity.YARDID = _cache.GetAllCodeCarrier().Result.Where(x => x.CnName == entity.YARD).Select(x => x.Code).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.CARRIER))
|
|
{
|
|
entity.CARRIERID = _cache.GetAllCodeCarrier().Result.Where(x => x.CnName == entity.CARRIER).Select(x => x.Code).FirstOrDefault();
|
|
|
|
if (string.IsNullOrEmpty(entity.CARRIERID))
|
|
{
|
|
|
|
entity.CARRIERID = mapcarrier.Where(x => x.MapName == entity.CARRIER).Select(x => x.Code).FirstOrDefault();
|
|
}
|
|
|
|
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.LineName))
|
|
{
|
|
var line = _repline.AsQueryable().Filter(null, true).Where(m => m.TenantId == UserManager.TENANT_ID && m.LineName.Contains(entity.LineName)).FirstAsync();
|
|
if (line == null)
|
|
{
|
|
await _repline.InsertAsync(new DjyTenantLine
|
|
{
|
|
LineName = entity.LineName,
|
|
LineCode = "",
|
|
TenantId = UserManager.TENANT_ID,
|
|
CreatedUserId = user.Id,
|
|
CreatedUserName = user.Name
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
|
|
entity.BOOKINGNO = Yitter.IdGenerator.YitIdHelper.NextId().ToString();
|
|
entity.CreatedUserId = user.Id;
|
|
entity.CreatedUserName = user.Name.ToString();
|
|
entity.CreatedTime = DateTime.Now;
|
|
entity.TenantId = UserManager.TENANT_ID;
|
|
entity.TenantName = UserManager.TENANT_NAME;
|
|
entity.ParentId = 0;
|
|
await _rep.InsertAsync(entity);
|
|
if (model.ctnInputs != null)
|
|
{
|
|
foreach (var item in model.ctnInputs)
|
|
{
|
|
var ctnentity = item.Adapt<BookingCtn>();
|
|
ctnentity.BILLID = entity.Id;
|
|
ctnentity.CreatedUserId = user.Id;
|
|
ctnentity.CreatedUserName = user.Name;
|
|
ctnentity.CTNCODE = ctncode.Where(x => x.Name == ctnentity.CTNALL).Select(x => x.Code).FirstOrDefault();
|
|
ctnentity.CreatedUserId = user.Id;
|
|
ctnentity.CreatedUserName = user.Name.ToString();
|
|
ctnentity.CreatedTime = DateTime.Now;
|
|
ctnentity.TenantId = UserManager.TENANT_ID;
|
|
|
|
await _repCtn.InsertAsync(ctnentity);
|
|
|
|
//这里保存有可能没有添加多品名,所有箱下没有货物信息
|
|
if (item.ctnDetailInputs != null)
|
|
{
|
|
foreach (var it in item.ctnDetailInputs)
|
|
{
|
|
var ctndetail = it.Adapt<BookingCtnDetail>();
|
|
ctndetail.CTNID = ctnentity.Id;
|
|
ctndetail.CreatedUserId = user.Id;
|
|
ctndetail.CreatedUserName = user.Name;
|
|
ctndetail.CreatedUserId = user.Id;
|
|
ctndetail.CreatedUserName = user.Name.ToString();
|
|
ctndetail.CreatedTime = DateTime.Now;
|
|
ctndetail.TenantId = UserManager.TENANT_ID;
|
|
|
|
await _ctndetailrep.InsertAsync(ctndetail);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (model.BookingEDIExt != null)
|
|
{
|
|
//写入EDI扩展
|
|
var ediExtEntity = model.BookingEDIExt.Adapt<BookingEDIExt>();
|
|
|
|
ediExtEntity.BookingId = entity.Id;
|
|
ediExtEntity.CreatedUserId = user.Id;
|
|
ediExtEntity.CreatedUserName = user.Name;
|
|
ediExtEntity.CreatedTime = DateTime.Now;
|
|
ediExtEntity.TenantId = UserManager.TENANT_ID;
|
|
await _bookingEDIExt.InsertAsync(ediExtEntity);
|
|
}
|
|
////添加booking日志
|
|
await _bookinglog.InsertAsync(new BookingLog
|
|
{
|
|
Type = "Add",
|
|
BookingId = entity.Id,
|
|
TenantId = Convert.ToInt64(UserManager.TENANT_ID),
|
|
CreatedTime = DateTime.Now,
|
|
CreatedUserId = user.Id,
|
|
CreatedUserName = "系统"
|
|
});
|
|
|
|
|
|
//分单
|
|
if (model.childrens != null)
|
|
{
|
|
foreach (var item in model.childrens)
|
|
{
|
|
|
|
|
|
|
|
if (string.IsNullOrWhiteSpace(item.HBLNO))
|
|
{
|
|
throw Oops.Bah("请填写分提单号!");
|
|
}
|
|
JsonUtil.PropToUpper(item, "ORDNO", "BSSTATUS", "YARDID", "YardContract", "YardContractTel", "YardContractEmail", "MARKS", "DESCRIPTION", "CONSIGNEENAME", "SHIPPERNAME", "NOTIFYPARTYNAME");
|
|
|
|
var fms = JsonUtil.TrimFields(item);
|
|
if (!string.IsNullOrEmpty(fms))
|
|
{
|
|
throw Oops.Bah(fms);
|
|
}
|
|
if (item.ctnInputs != null)
|
|
{
|
|
var groupList = item.ctnInputs.Where(x => x.CTNNUM > 0).GroupBy(c => c.CTNALL).Select(g => $"{g.Key}*{g.Sum(gg => gg.CTNNUM)}");
|
|
item.CNTRTOTAL = string.Join(" / ", groupList);
|
|
}
|
|
var fdet = await _rep.Where(x => x.MBLNO == model.MBLNO && x.TenantId == UserManager.TENANT_ID && x.HBLNO == model.HBLNO && x.ParentId == entity.Id).FirstAsync();
|
|
if (fdet != null)
|
|
{
|
|
|
|
throw Oops.Bah($"当前分单中提单号({item.MBLNO}_{item.HBLNO})已存在,请勿重复录入!");
|
|
|
|
}
|
|
var fdentity = item.Adapt<BookingOrder>();
|
|
if (!string.IsNullOrEmpty(fdentity.ROUTE))
|
|
{
|
|
fdentity.ROUTEID = userlist.Where(x => x.Name == fdentity.ROUTE).Count() == 0 ? "" : userlist.Where(x => x.Name == fdentity.ROUTE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.SALE))
|
|
{
|
|
fdentity.SALEID = userlist.Where(x => x.Name == fdentity.SALE).Count() == 0 ? "" : userlist.Where(x => x.Name == fdentity.SALE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.OP))
|
|
{
|
|
fdentity.OPID = userlist.Where(x => x.Name == fdentity.OP).Count() == 0 ? "" : userlist.Where(x => x.Name == fdentity.OP).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.DOC))
|
|
{
|
|
fdentity.DOCID = userlist.Where(x => x.Name == fdentity.DOC).Count() == 0 ? "" : userlist.Where(x => x.Name == fdentity.DOC).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.CUSTSERVICE))
|
|
{
|
|
fdentity.CUSTSERVICEID = userlist.Where(x => x.Name == fdentity.CUSTSERVICE).Count() == 0 ? "" : userlist.Where(x => x.Name == fdentity.CUSTSERVICE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.CUSTOMSER))
|
|
{
|
|
fdentity.CUSTOMSERID = djycustomer.Where(x => x.ShortName == fdentity.CUSTOMSER && x.PropString == "customs_broker").Select(x => x.CodeName).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.TRUCKER))
|
|
{
|
|
fdentity.TRUCKERID = djycustomer.Where(x => x.ShortName == fdentity.TRUCKER && x.PropString == "fleet").Select(x => x.CodeName).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.CUSTOMERNAME))
|
|
{
|
|
fdentity.CUSTOMERID = djycustomer.Where(x => x.ShortName == fdentity.CUSTOMERNAME && x.PropString == "consignor").Select(x => x.Id).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.FORWARDER))
|
|
{
|
|
fdentity.FORWARDERID = djycustomer.Where(x => x.ShortName == fdentity.FORWARDER && x.PropString == "booking_agent").Select(x => x.CodeName).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.CARRIERID))
|
|
{
|
|
fdentity.CARRIER = _cache.GetAllCodeCarrier().Result.Where(x => x.Code == fdentity.CARRIERID).Select(x => x.CnName).FirstOrDefault();
|
|
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.YARD))
|
|
{
|
|
fdentity.YARDID = _cache.GetAllCodeCarrier().Result.Where(x => x.CnName == fdentity.YARD).Select(x => x.Code).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.CARRIER))
|
|
{
|
|
fdentity.CARRIERID = _cache.GetAllCodeCarrier().Result.Where(x => x.CnName == fdentity.CARRIER).Select(x => x.Code).FirstOrDefault();
|
|
|
|
if (string.IsNullOrEmpty(fdentity.CARRIERID))
|
|
{
|
|
|
|
fdentity.CARRIERID = mapcarrier.Where(x => x.MapName == fdentity.CARRIER).Select(x => x.Code).FirstOrDefault();
|
|
}
|
|
|
|
|
|
}
|
|
if (!string.IsNullOrEmpty(item.LineName))
|
|
{
|
|
var line = _repline.AsQueryable().Filter(null, true).Where(m => m.TenantId == UserManager.TENANT_ID && m.LineName.Contains(item.LineName)).FirstAsync();
|
|
if (line == null)
|
|
{
|
|
await _repline.InsertAsync(new DjyTenantLine
|
|
{
|
|
LineName = item.LineName,
|
|
LineCode = "",
|
|
TenantId = UserManager.TENANT_ID,
|
|
CreatedUserId = user.Id,
|
|
CreatedUserName = user.Name
|
|
});
|
|
}
|
|
}
|
|
|
|
fdentity.BOOKINGNO = Yitter.IdGenerator.YitIdHelper.NextId().ToString();
|
|
fdentity.MBLNO = entity.MBLNO;
|
|
fdentity.CreatedUserId = user.Id;
|
|
fdentity.CreatedUserName = user.Name;
|
|
fdentity.CreatedTime = DateTime.Now;
|
|
fdentity.TenantId = UserManager.TENANT_ID;
|
|
fdentity.TenantName = UserManager.TENANT_NAME;
|
|
fdentity.ParentId = entity.Id;
|
|
await _rep.InsertAsync(fdentity);
|
|
|
|
if (item.ctnInputs != null)
|
|
{
|
|
foreach (var it in item.ctnInputs)
|
|
{
|
|
var ctnentity = item.Adapt<BookingCtn>();
|
|
ctnentity.BILLID = fdentity.Id;
|
|
ctnentity.CreatedUserId = user.Id;
|
|
ctnentity.CreatedUserName = user.Name;
|
|
ctnentity.CTNCODE = ctncode.Where(x => x.Name == ctnentity.CTNALL).Select(x => x.Code).FirstOrDefault();
|
|
await _repCtn.InsertAsync(ctnentity);
|
|
|
|
//这里保存有可能没有添加多品名,所有箱下没有货物信息
|
|
if (it.ctnDetailInputs != null)
|
|
{
|
|
foreach (var dit in it.ctnDetailInputs)
|
|
{
|
|
var ctndetail = dit.Adapt<BookingCtnDetail>();
|
|
ctndetail.CTNID = ctnentity.Id;
|
|
ctndetail.CreatedUserId = user.Id;
|
|
ctndetail.CreatedUserName = user.Name;
|
|
|
|
await _ctndetailrep.InsertAsync(ctndetail);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (item.BookingEDIExt != null)
|
|
{
|
|
//写入EDI扩展
|
|
var ediExtEntity = model.BookingEDIExt.Adapt<BookingEDIExt>();
|
|
|
|
ediExtEntity.BookingId = fdentity.Id;
|
|
ediExtEntity.CreatedUserId = user.Id;
|
|
ediExtEntity.CreatedUserName = user.Name;
|
|
ediExtEntity.CreatedTime = DateTime.Now;
|
|
await _bookingEDIExt.InsertAsync(ediExtEntity);
|
|
}
|
|
////添加booking日志
|
|
await _bookinglog.InsertAsync(new BookingLog
|
|
{
|
|
Type = "Add",
|
|
BookingId = fdentity.Id,
|
|
TenantId = Convert.ToInt64(UserManager.TENANT_ID),
|
|
CreatedTime = DateTime.Now,
|
|
CreatedUserId = user.Id,
|
|
CreatedUserName = "系统"
|
|
});
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (model.GoodsStatus != null)
|
|
{
|
|
|
|
foreach (var item in model.GoodsStatus)
|
|
{
|
|
if (!string.IsNullOrEmpty(item.StatusName))
|
|
{
|
|
|
|
|
|
var gc = goodsconfig.Where(x => x.StatusName == item.StatusName && x.CreatedUserId == user.Id).FirstOrDefault();
|
|
if (gc != null)
|
|
{
|
|
|
|
await _goodsStatus.InsertAsync(new BookingGoodsStatus
|
|
{
|
|
bookingId = entity.Id,
|
|
ConfigId = gc.Id,
|
|
FinishTime = item.FinishTime,
|
|
FinishUser = user.Name,
|
|
FinishUserId = user.Id,
|
|
Remark = item.Remark,
|
|
ExtData = item.ExtData
|
|
});
|
|
}
|
|
else
|
|
{
|
|
|
|
var configid = await _goodsStatusConfig.InsertReturnSnowflakeIdAsync(new BookingGoodsStatusConfig
|
|
{
|
|
|
|
StatusName = item.StatusName,
|
|
Sort = goodsconfig.Where(x => x.CreatedUserId == user.Id).Max(x => x.Sort) + 1,
|
|
CreatedTime = DateTime.Now,
|
|
CreatedUserId = user.Id,
|
|
CreatedUserName = user.Name,
|
|
IsDeleted = false
|
|
});
|
|
await _goodsStatus.InsertAsync(new BookingGoodsStatus
|
|
{
|
|
bookingId = entity.Id,
|
|
ConfigId = configid,
|
|
FinishTime = item.FinishTime,
|
|
FinishUser = user.Name,
|
|
FinishUserId = user.Id,
|
|
Remark = item.Remark,
|
|
ExtData = item.ExtData
|
|
});
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(model.CtnDayNum))
|
|
{
|
|
var gc = goodsconfig.Where(x => x.StatusName == "申请箱使" && x.CreatedUserId == user.Id).FirstOrDefault();
|
|
if (gc != null)
|
|
{
|
|
|
|
await _goodsStatus.InsertAsync(new BookingGoodsStatus
|
|
{
|
|
bookingId = entity.Id,
|
|
ConfigId = gc.Id,
|
|
FinishTime = DateTime.Now,
|
|
FinishUser = user.Name,
|
|
FinishUserId = user.Id,
|
|
Remark = "",
|
|
ExtData = model.CtnDayNum
|
|
});
|
|
}
|
|
else
|
|
{
|
|
|
|
var configid = await _goodsStatusConfig.InsertReturnSnowflakeIdAsync(new BookingGoodsStatusConfig
|
|
{
|
|
|
|
StatusName = "申请箱使",
|
|
Sort = goodsconfig.Where(x => x.CreatedUserId == user.Id).Max(x => x.Sort) + 1,
|
|
CreatedTime = DateTime.Now,
|
|
CreatedUserId = user.Id,
|
|
CreatedUserName = user.Name,
|
|
IsDeleted = false
|
|
});
|
|
await _goodsStatus.InsertAsync(new BookingGoodsStatus
|
|
{
|
|
bookingId = entity.Id,
|
|
ConfigId = configid,
|
|
FinishTime = DateTime.Now,
|
|
FinishUser = user.Name,
|
|
FinishUserId = user.Id,
|
|
Remark = "",
|
|
ExtData = model.CtnDayNum
|
|
});
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
else
|
|
{
|
|
|
|
#region 编辑
|
|
if (string.IsNullOrWhiteSpace(model.MBLNO))
|
|
{
|
|
throw Oops.Bah("请填写提单号!");
|
|
}
|
|
|
|
JsonUtil.PropToUpper(model, "ORDNO", "BSSTATUS", "YARDID", "YardContract", "YardContractTel", "YardContractEmail", "MARKS", "DESCRIPTION", "CONSIGNEENAME", "SHIPPERNAME", "NOTIFYPARTYNAME");
|
|
|
|
var ms = JsonUtil.TrimFields(model);
|
|
if (!string.IsNullOrEmpty(ms))
|
|
{
|
|
throw Oops.Bah(ms);
|
|
}
|
|
if (model.ctnInputs != null)
|
|
{
|
|
var groupList = model.ctnInputs.Where(x => x.CTNNUM > 0).GroupBy(c => c.CTNALL).Select(g => $"{g.Key}*{g.Sum(gg => gg.CTNNUM)}");
|
|
model.CNTRTOTAL = string.Join(" / ", groupList);
|
|
}
|
|
|
|
var main = await _rep.AsQueryable().Filter(null, true).Where(x => x.BSNO == model.BSNO && x.IsDeleted == false).FirstAsync();
|
|
|
|
var et = await _rep.AsQueryable().Filter(null, true).Where(x => x.MBLNO == model.MBLNO && x.TenantId == UserManager.TENANT_ID && x.HBLNO == model.HBLNO && x.BSNO != model.BSNO).FirstAsync();
|
|
if (et != null)
|
|
{
|
|
throw Oops.Bah("当前提单号已存在,请勿重复录入!");
|
|
}
|
|
var entity = model.Adapt<BookingOrder>();
|
|
entity.Id = main.Id;
|
|
entity.UpdatedUserName = user.Name;
|
|
entity.UpdatedUserId = user.Id;
|
|
entity.UpdatedTime = DateTime.Now;
|
|
if (!string.IsNullOrEmpty(entity.ROUTE))
|
|
{
|
|
entity.ROUTEID = userlist.Where(x => x.Name == entity.ROUTE).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.ROUTE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.SALE))
|
|
{
|
|
entity.SALEID = userlist.Where(x => x.Name == entity.SALE).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.SALE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.OP))
|
|
{
|
|
entity.OPID = userlist.Where(x => x.Name == entity.OP).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.OP).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.DOC))
|
|
{
|
|
entity.DOCID = userlist.Where(x => x.Name == entity.DOC).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.DOC).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.CUSTSERVICE))
|
|
{
|
|
entity.CUSTSERVICEID = userlist.Where(x => x.Name == entity.CUSTSERVICE).Count() == 0 ? "" : userlist.Where(x => x.Name == entity.CUSTSERVICE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.CUSTOMSER))
|
|
{
|
|
entity.CUSTOMSERID = djycustomer.Where(x => x.ShortName == entity.CUSTOMSER && x.PropString == "customs_broker").Select(x => x.CodeName).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.TRUCKER))
|
|
{
|
|
entity.TRUCKERID = djycustomer.Where(x => x.ShortName == entity.TRUCKER && x.PropString == "fleet").Select(x => x.CodeName).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.CUSTOMERNAME))
|
|
{
|
|
entity.CUSTOMERID = djycustomer.Where(x => x.ShortName == entity.CUSTOMERNAME && x.PropString == "consignor").Select(x => x.Id).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.FORWARDER))
|
|
{
|
|
entity.FORWARDERID = djycustomer.Where(x => x.ShortName == entity.FORWARDER && x.PropString == "booking_agent").Select(x => x.CodeName).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.YARD))
|
|
{
|
|
entity.YARDID = _cache.GetAllCodeCarrier().Result.Where(x => x.CnName == entity.YARD).Select(x => x.Code).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(entity.CARRIER))
|
|
{
|
|
entity.CARRIERID = _cache.GetAllCodeCarrier().Result.Where(x => x.CnName == entity.CARRIER).Select(x => x.Code).FirstOrDefault();
|
|
|
|
if (string.IsNullOrEmpty(entity.CARRIERID))
|
|
{
|
|
|
|
entity.CARRIERID = mapcarrier.Where(x => x.MapName == entity.CARRIER).Select(x => x.Code).FirstOrDefault();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(entity.LineName))
|
|
{
|
|
var line = _repline.AsQueryable().Filter(null, true).Where(m => m.TenantId == UserManager.TENANT_ID && m.LineName.Contains(entity.LineName)).FirstAsync();
|
|
if (line == null)
|
|
{
|
|
await _repline.InsertAsync(new DjyTenantLine
|
|
{
|
|
LineName = entity.LineName,
|
|
LineCode = "",
|
|
TenantId = UserManager.TENANT_ID,
|
|
CreatedUserId = user.Id,
|
|
CreatedUserName = user.Name
|
|
});
|
|
}
|
|
}
|
|
await _rep.AsUpdateable(entity).IgnoreColumns(it => new
|
|
{
|
|
it.BOOKINGNO,
|
|
it.ParentId,
|
|
it.TenantId,
|
|
it.TenantName,
|
|
it.YgtETD,
|
|
it.CreatedTime,
|
|
it.CreatedUserId,
|
|
it.CreatedUserName,
|
|
it.LstShipOrderCompareId,
|
|
it.LstShipOrderCompareDate,
|
|
it.LstShipOrderCompareRltName,
|
|
it.LstShipOrderCompareMode
|
|
}).ExecuteCommandAsync();
|
|
var ctnlist = await _repCtn.AsQueryable().Where(x => x.BILLID == main.Id).Select(x => x.Id).ToListAsync();
|
|
await _repCtn.DeleteAsync(x => x.BILLID == main.Id);
|
|
await _ctndetailrep.DeleteAsync(x => ctnlist.Contains((long)x.CTNID));
|
|
await _goodsStatus.DeleteAsync(x => x.bookingId == main.Id);
|
|
if (model.ctnInputs != null)
|
|
{
|
|
foreach (var item in model.ctnInputs)
|
|
{
|
|
var ctnentity = item.Adapt<BookingCtn>();
|
|
ctnentity.BILLID = main.Id;
|
|
ctnentity.CreatedUserId = user.Id;
|
|
ctnentity.CreatedUserName = user.Name;
|
|
ctnentity.CTNCODE = ctncode.Where(x => x.Name == ctnentity.CTNALL).Select(x => x.Code).FirstOrDefault();
|
|
await _repCtn.InsertAsync(ctnentity);
|
|
if (item.ctnDetailInputs != null)
|
|
{
|
|
foreach (var it in item.ctnDetailInputs)
|
|
{
|
|
var ctndetail = it.Adapt<BookingCtnDetail>();
|
|
ctndetail.CTNID = ctnentity.Id;
|
|
ctndetail.CreatedUserId = user.Id;
|
|
ctndetail.CreatedUserName = user.Name;
|
|
|
|
await _ctndetailrep.InsertAsync(ctndetail);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (model.BookingEDIExt != null)
|
|
{
|
|
//检索EDI扩展
|
|
var ediExtEntity = await _bookingEDIExt.AsQueryable().Filter(null, true).Where(x => x.BookingId == main.Id).FirstAsync();
|
|
|
|
if (ediExtEntity == null)
|
|
{
|
|
//写入EDI扩展
|
|
ediExtEntity = model.BookingEDIExt.Adapt<BookingEDIExt>();
|
|
ediExtEntity.BookingId = main.Id;
|
|
ediExtEntity.CreatedUserId = user.Id;
|
|
ediExtEntity.CreatedUserName = user.Name;
|
|
ediExtEntity.CreatedTime = DateTime.Now;
|
|
await _bookingEDIExt.InsertAsync(ediExtEntity);
|
|
}
|
|
else
|
|
{
|
|
//更新EDI扩展
|
|
var currEdiExtEntity = model.BookingEDIExt.Adapt<BookingEDIExt>();
|
|
|
|
currEdiExtEntity.Id = ediExtEntity.Id;
|
|
currEdiExtEntity.UpdatedUserId = user.Id;
|
|
currEdiExtEntity.UpdatedTime = DateTime.Now;
|
|
await _bookingEDIExt.AsUpdateable(currEdiExtEntity).IgnoreColumns(it => new
|
|
{
|
|
it.BookingId,
|
|
it.TenantId,
|
|
it.CreatedTime,
|
|
it.CreatedUserId,
|
|
it.CreatedUserName
|
|
}).ExecuteCommandAsync();
|
|
}
|
|
}
|
|
|
|
if (model.GoodsStatus != null)
|
|
{
|
|
|
|
foreach (var item in model.GoodsStatus)
|
|
{
|
|
if (!string.IsNullOrEmpty(item.StatusName))
|
|
{
|
|
var gc = goodsconfig.Where(x => x.StatusName == item.StatusName && x.CreatedUserId == user.Id).FirstOrDefault();
|
|
if (gc != null)
|
|
{
|
|
|
|
await _goodsStatus.InsertAsync(new BookingGoodsStatus
|
|
{
|
|
bookingId = entity.Id,
|
|
ConfigId = gc.Id,
|
|
FinishTime = item.FinishTime,
|
|
FinishUser = user.Name,
|
|
FinishUserId = user.Id,
|
|
Remark = item.Remark,
|
|
ExtData = item.ExtData
|
|
});
|
|
}
|
|
else
|
|
{
|
|
|
|
long configid = await _goodsStatusConfig.InsertReturnSnowflakeIdAsync(new BookingGoodsStatusConfig
|
|
{
|
|
|
|
StatusName = item.StatusName,
|
|
Sort = goodsconfig.Where(x => x.CreatedUserId == user.Id).Max(x => x.Sort) + 1,
|
|
CreatedTime = DateTime.Now,
|
|
CreatedUserId = user.Id,
|
|
CreatedUserName = user.Name,
|
|
IsDeleted = false
|
|
});
|
|
await _goodsStatus.InsertAsync(new BookingGoodsStatus
|
|
{
|
|
bookingId = entity.Id,
|
|
ConfigId = configid,
|
|
FinishTime = item.FinishTime,
|
|
FinishUser = user.Name,
|
|
FinishUserId = user.Id,
|
|
Remark = item.Remark,
|
|
ExtData = item.ExtData
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!string.IsNullOrEmpty(model.CtnDayNum))
|
|
{
|
|
var gc = goodsconfig.Where(x => x.StatusName == "申请箱使" && x.CreatedUserId == user.Id).FirstOrDefault();
|
|
if (gc != null)
|
|
{
|
|
|
|
await _goodsStatus.InsertAsync(new BookingGoodsStatus
|
|
{
|
|
bookingId = entity.Id,
|
|
ConfigId = gc.Id,
|
|
FinishTime = DateTime.Now,
|
|
FinishUser = user.Name,
|
|
FinishUserId = user.Id,
|
|
Remark = "",
|
|
ExtData = model.CtnDayNum
|
|
});
|
|
}
|
|
else
|
|
{
|
|
var Sort = goodsconfig.Where(x => x.CreatedUserId == user.Id).Count();
|
|
var configid = await _goodsStatusConfig.InsertReturnSnowflakeIdAsync(new BookingGoodsStatusConfig
|
|
{
|
|
|
|
StatusName = "申请箱使",
|
|
Sort = Sort + 1,
|
|
CreatedTime = DateTime.Now,
|
|
CreatedUserId = user.Id,
|
|
CreatedUserName = user.Name,
|
|
IsDeleted = false
|
|
});
|
|
await _goodsStatus.InsertAsync(new BookingGoodsStatus
|
|
{
|
|
bookingId = entity.Id,
|
|
ConfigId = configid,
|
|
FinishTime = DateTime.Now,
|
|
FinishUser = user.Name,
|
|
FinishUserId = user.Id,
|
|
Remark = "",
|
|
ExtData = model.CtnDayNum
|
|
});
|
|
}
|
|
}
|
|
bool flag = true;
|
|
long bid = 0;
|
|
foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(entity))
|
|
{
|
|
string name = descriptor.Name;
|
|
if (name == "TenantId" || name == "CreatedTime" || name == "UpdatedTime" || name == "CreatedUserId" || name == "CreatedUserName")
|
|
{
|
|
continue;
|
|
}
|
|
object value = descriptor.GetValue(entity);
|
|
var oldvalue = main.GetType().GetProperty(name).GetValue(main, null);
|
|
|
|
if (name == "KGS" || name == "CBM")
|
|
{
|
|
if (Convert.ToDecimal(value) == Convert.ToDecimal(oldvalue))
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
string _oldvalue = oldvalue != null ? oldvalue.ToString() : "";
|
|
string _value = value != null ? value.ToString() : "";
|
|
if (_oldvalue != _value && !string.IsNullOrWhiteSpace(descriptor.Description))
|
|
{
|
|
if (flag)
|
|
{
|
|
////添加booking日志
|
|
bid = await _bookinglog.InsertReturnSnowflakeIdAsync(new BookingLog
|
|
{
|
|
Type = "Edit",
|
|
BookingId = entity.Id,
|
|
TenantId = Convert.ToInt64(UserManager.TENANT_ID),
|
|
CreatedTime = DateTime.Now,
|
|
CreatedUserId = user.Id,
|
|
CreatedUserName = user.Name
|
|
});
|
|
flag = false;
|
|
}
|
|
await _bookinglogdetail.InsertReturnSnowflakeIdAsync(new BookingLogDetail
|
|
{
|
|
PId = bid,
|
|
Field = descriptor.Description,
|
|
OldValue = _oldvalue,
|
|
NewValue = _value,
|
|
});
|
|
|
|
}
|
|
}
|
|
//分单
|
|
if (model.childrens != null)
|
|
{
|
|
foreach (var item in model.childrens)
|
|
{
|
|
var fenlanename = item.LANECODE;
|
|
var fenlinename = item.LANENAME;
|
|
if (string.IsNullOrWhiteSpace(item.HBLNO))
|
|
{
|
|
throw Oops.Bah("请填写分提单号!");
|
|
}
|
|
JsonUtil.PropToUpper(item, "ORDNO", "BSSTATUS", "YARDID", "YardContract", "YardContractTel", "YardContractEmail", "MARKS", "DESCRIPTION", "CONSIGNEENAME", "SHIPPERNAME", "NOTIFYPARTYNAME");
|
|
|
|
var fms = JsonUtil.TrimFields(item);
|
|
if (!string.IsNullOrEmpty(fms))
|
|
{
|
|
throw Oops.Bah(fms);
|
|
}
|
|
if (item.ctnInputs != null)
|
|
{
|
|
var groupList = item.ctnInputs.Where(x => x.CTNNUM > 0).GroupBy(c => c.CTNALL).Select(g => $"{g.Key}*{g.Sum(gg => gg.CTNNUM)}");
|
|
item.CNTRTOTAL = string.Join(" / ", groupList);
|
|
}
|
|
|
|
var fdmain = await _rep.AsQueryable().Filter(null, true).Where(x => x.BSNO == item.BSNO && x.IsDeleted == false).FirstAsync();
|
|
var fdentity = item.Adapt<BookingOrder>();
|
|
if (fdmain != null)
|
|
{
|
|
var fdet = await _rep.Where(x => x.MBLNO == item.MBLNO && x.TenantId == UserManager.TENANT_ID && x.HBLNO == item.HBLNO && x.BSNO != fdmain.BSNO).FirstAsync();
|
|
if (fdet != null)
|
|
{
|
|
throw Oops.Bah($"当前提单号{fdet.MBLNO}_{fdet.HBLNO}已存在,请勿重复录入!");
|
|
}
|
|
fdentity.MBLNO = entity.MBLNO;
|
|
fdentity.Id = fdmain.Id;
|
|
fdentity.UpdatedUserName = user.Name;
|
|
fdentity.UpdatedUserId = user.Id;
|
|
fdentity.UpdatedTime = DateTime.Now;
|
|
if (!string.IsNullOrEmpty(fdentity.ROUTE))
|
|
{
|
|
fdentity.ROUTEID = userlist.Where(x => x.Name == fdentity.ROUTE).Count() == 0 ? "" : userlist.Where(x => x.Name == fdentity.ROUTE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.SALE))
|
|
{
|
|
fdentity.SALEID = userlist.Where(x => x.Name == fdentity.SALE).Count() == 0 ? "" : userlist.Where(x => x.Name == fdentity.SALE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.OP))
|
|
{
|
|
fdentity.OPID = userlist.Where(x => x.Name == fdentity.OP).Count() == 0 ? "" : userlist.Where(x => x.Name == fdentity.OP).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.DOC))
|
|
{
|
|
fdentity.DOCID = userlist.Where(x => x.Name == fdentity.DOC).Count() == 0 ? "" : userlist.Where(x => x.Name == fdentity.DOC).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.CUSTSERVICE))
|
|
{
|
|
fdentity.CUSTSERVICEID = userlist.Where(x => x.Name == fdentity.CUSTSERVICE).Count() == 0 ? "" : userlist.Where(x => x.Name == fdentity.CUSTSERVICE).Select(x => x.Id).FirstOrDefault().ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.CUSTOMSER))
|
|
{
|
|
fdentity.CUSTOMSERID = djycustomer.Where(x => x.ShortName == fdentity.CUSTOMSER && x.PropString == "customs_broker").Select(x => x.CodeName).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.TRUCKER))
|
|
{
|
|
fdentity.TRUCKERID = djycustomer.Where(x => x.ShortName == fdentity.TRUCKER && x.PropString == "fleet").Select(x => x.CodeName).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.CUSTOMERNAME))
|
|
{
|
|
fdentity.CUSTOMERID = djycustomer.Where(x => x.ShortName == fdentity.CUSTOMERNAME && x.PropString == "consignor").Select(x => x.Id).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.FORWARDER))
|
|
{
|
|
fdentity.FORWARDERID = djycustomer.Where(x => x.ShortName == fdentity.FORWARDER && x.PropString == "booking_agent").Select(x => x.CodeName).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.YARD))
|
|
{
|
|
fdentity.YARDID = _cache.GetAllCodeCarrier().Result.Where(x => x.CnName == fdentity.YARD).Select(x => x.Code).FirstOrDefault();
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.CARRIER))
|
|
{
|
|
fdentity.CARRIERID = _cache.GetAllCodeCarrier().Result.Where(x => x.CnName == fdentity.CARRIER).Select(x => x.Code).FirstOrDefault();
|
|
|
|
if (string.IsNullOrEmpty(fdentity.CARRIERID))
|
|
{
|
|
|
|
fdentity.CARRIERID = mapcarrier.Where(x => x.MapName == fdentity.CARRIER).Select(x => x.Code).FirstOrDefault();
|
|
}
|
|
|
|
|
|
}
|
|
if (!string.IsNullOrEmpty(fdentity.LineName))
|
|
{
|
|
var line = _repline.AsQueryable().Filter(null, true).Where(m => m.TenantId == UserManager.TENANT_ID && m.LineName.Contains(fdentity.LineName)).FirstAsync();
|
|
if (line == null)
|
|
{
|
|
await _repline.InsertAsync(new DjyTenantLine
|
|
{
|
|
LineName = fdentity.LineName,
|
|
LineCode = "",
|
|
TenantId = UserManager.TENANT_ID,
|
|
CreatedUserId = user.Id,
|
|
CreatedUserName = user.Name
|
|
});
|
|
}
|
|
}
|
|
|
|
await _rep.AsUpdateable(fdentity).IgnoreColumns(it => new
|
|
{
|
|
it.BOOKINGNO,
|
|
it.ParentId,
|
|
it.TenantId,
|
|
it.TenantName,
|
|
it.CreatedTime,
|
|
it.CreatedUserId,
|
|
it.YgtETD,
|
|
it.CreatedUserName,
|
|
it.LstShipOrderCompareId,
|
|
it.LstShipOrderCompareDate,
|
|
it.LstShipOrderCompareRltName,
|
|
it.LstShipOrderCompareMode
|
|
}).ExecuteCommandAsync();
|
|
var fdctnlist = await _repCtn.AsQueryable().Where(x => x.BILLID == fdmain.Id).Select(x => x.Id).ToListAsync();
|
|
await _repCtn.DeleteAsync(x => x.BILLID == fdmain.Id);
|
|
await _ctndetailrep.DeleteAsync(x => fdctnlist.Contains((long)x.CTNID));
|
|
if (item.ctnInputs != null)
|
|
{
|
|
foreach (var it in model.ctnInputs)
|
|
{
|
|
var ctnentity = item.Adapt<BookingCtn>();
|
|
ctnentity.BILLID = fdmain.Id;
|
|
ctnentity.CreatedUserId = user.Id;
|
|
ctnentity.CreatedUserName = user.Name;
|
|
ctnentity.CTNCODE = ctncode.Where(x => x.Name == ctnentity.CTNALL).Select(x => x.Code).FirstOrDefault();
|
|
await _repCtn.InsertAsync(ctnentity);
|
|
if (it.ctnDetailInputs != null)
|
|
{
|
|
foreach (var it_ in it.ctnDetailInputs)
|
|
{
|
|
var ctndetail = it_.Adapt<BookingCtnDetail>();
|
|
ctndetail.CTNID = ctnentity.Id;
|
|
ctndetail.CreatedUserId = user.Id;
|
|
ctndetail.CreatedUserName = user.Name;
|
|
await _ctndetailrep.InsertAsync(ctndetail);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (item.BookingEDIExt != null)
|
|
{
|
|
//检索EDI扩展
|
|
var ediExtEntity = await _bookingEDIExt.AsQueryable().Filter(null, true).Where(x => x.BookingId == fdmain.Id).FirstAsync();
|
|
|
|
if (ediExtEntity == null)
|
|
{
|
|
//写入EDI扩展
|
|
ediExtEntity = item.BookingEDIExt.Adapt<BookingEDIExt>();
|
|
ediExtEntity.BookingId = fdmain.Id;
|
|
ediExtEntity.CreatedUserId = user.Id;
|
|
ediExtEntity.CreatedUserName = user.Name;
|
|
ediExtEntity.CreatedTime = DateTime.Now;
|
|
await _bookingEDIExt.InsertAsync(ediExtEntity);
|
|
}
|
|
else
|
|
{
|
|
//更新EDI扩展
|
|
var currEdiExtEntity = model.BookingEDIExt.Adapt<BookingEDIExt>();
|
|
|
|
currEdiExtEntity.Id = ediExtEntity.Id;
|
|
|
|
await _bookingEDIExt.AsUpdateable(currEdiExtEntity).IgnoreColumns(it => new
|
|
{
|
|
it.BookingId,
|
|
it.TenantId,
|
|
it.CreatedTime,
|
|
it.CreatedUserId,
|
|
it.CreatedUserName
|
|
}).ExecuteCommandAsync();
|
|
}
|
|
}
|
|
bool fdflag = true;
|
|
long fdbid = 0;
|
|
foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(fdentity))
|
|
{
|
|
string name = descriptor.Name;
|
|
if (name == "TenantId" || name == "CreatedTime" || name == "UpdatedTime" || name == "CreatedUserId" || name == "CreatedUserName")
|
|
{
|
|
continue;
|
|
}
|
|
object value = descriptor.GetValue(fdentity);
|
|
var oldvalue = fdmain.GetType().GetProperty(name).GetValue(fdmain, null);
|
|
|
|
if (name == "KGS" || name == "CBM")
|
|
{
|
|
if (Convert.ToDecimal(value) == Convert.ToDecimal(oldvalue))
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
string _oldvalue = oldvalue != null ? oldvalue.ToString() : "";
|
|
string _value = value != null ? value.ToString() : "";
|
|
if (_oldvalue != _value && !string.IsNullOrWhiteSpace(descriptor.Description))
|
|
{
|
|
if (fdflag)
|
|
{
|
|
////添加booking日志
|
|
fdbid = await _bookinglog.InsertReturnSnowflakeIdAsync(new BookingLog
|
|
{
|
|
Type = "Edit",
|
|
BookingId = fdentity.Id,
|
|
TenantId = Convert.ToInt64(UserManager.TENANT_ID),
|
|
CreatedTime = DateTime.Now,
|
|
CreatedUserId = user.Id,
|
|
CreatedUserName = user.Name,
|
|
});
|
|
fdflag = false;
|
|
}
|
|
await _bookinglogdetail.InsertReturnSnowflakeIdAsync(new BookingLogDetail
|
|
{
|
|
PId = fdbid,
|
|
Field = descriptor.Description,
|
|
OldValue = _oldvalue,
|
|
NewValue = _value,
|
|
});
|
|
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
|
|
fdentity.CreatedUserId = user.Id;
|
|
fdentity.CreatedUserName = user.Name;
|
|
fdentity.CreatedTime = DateTime.Now;
|
|
fdentity.ParentId = entity.Id;
|
|
await _rep.InsertAsync(fdentity);
|
|
|
|
if (item.ctnInputs != null)
|
|
{
|
|
foreach (var it in item.ctnInputs)
|
|
{
|
|
var ctnentity = item.Adapt<BookingCtn>();
|
|
ctnentity.BILLID = fdentity.Id;
|
|
ctnentity.CreatedUserId = user.Id;
|
|
ctnentity.CreatedUserName = user.Name;
|
|
await _repCtn.InsertAsync(ctnentity);
|
|
|
|
//这里保存有可能没有添加多品名,所有箱下没有货物信息
|
|
if (it.ctnDetailInputs != null)
|
|
{
|
|
foreach (var dit in it.ctnDetailInputs)
|
|
{
|
|
var ctndetail = dit.Adapt<BookingCtnDetail>();
|
|
ctndetail.CTNID = ctnentity.Id;
|
|
ctndetail.CreatedUserId = user.Id;
|
|
ctndetail.CreatedUserName = user.Name;
|
|
await _ctndetailrep.InsertAsync(ctndetail);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
if (item.BookingEDIExt != null)
|
|
{
|
|
//检索EDI扩展
|
|
|
|
var ediExtEntity = await _bookingEDIExt.AsQueryable().Filter(null, true).Where(x => x.BookingId == fdentity.Id).FirstAsync();
|
|
if (ediExtEntity == null)
|
|
{
|
|
//写入EDI扩展
|
|
ediExtEntity = model.BookingEDIExt.Adapt<BookingEDIExt>();
|
|
ediExtEntity.BookingId = fdentity.Id;
|
|
ediExtEntity.CreatedUserId = user.Id;
|
|
ediExtEntity.CreatedUserName = user.Name;
|
|
ediExtEntity.CreatedTime = DateTime.Now;
|
|
await _bookingEDIExt.InsertAsync(ediExtEntity);
|
|
}
|
|
else
|
|
{
|
|
//更新EDI扩展
|
|
var currEdiExtEntity = model.BookingEDIExt.Adapt<BookingEDIExt>();
|
|
|
|
currEdiExtEntity.Id = ediExtEntity.Id;
|
|
currEdiExtEntity.UpdatedUserId = user.Id;
|
|
currEdiExtEntity.UpdatedTime = DateTime.Now;
|
|
await _bookingEDIExt.AsUpdateable(currEdiExtEntity).IgnoreColumns(it => new
|
|
{
|
|
it.BookingId,
|
|
it.TenantId,
|
|
it.CreatedTime,
|
|
it.CreatedUserId,
|
|
it.CreatedUserName
|
|
}).ExecuteCommandAsync();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 爬虫上传船期
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpPost("/DataSync/SaveSyncVesselDate"), ApiUser(ApiCode = "SaveSyncVesselDate")]
|
|
[SqlSugarUnitOfWork]
|
|
public async Task SaveSyncVesselDate(List<DjyVesselDto> dto)
|
|
{
|
|
foreach (var item in dto)
|
|
{
|
|
|
|
var model = _vesselinfo.AsQueryable().Filter(null, true).Where(x => x.Vessel == item.Vessel && x.Voyno == item.Voyno && x.TenantId == UserManager.TENANT_ID).First();
|
|
model.ETA = item.ETA;
|
|
//model.ETD = item.ETD;
|
|
model.ATD = item.ATD;
|
|
await _vesselinfo.AsUpdateable(model).IgnoreColumns().ExecuteCommandAsync();
|
|
var order = await _rep.AsQueryable().Filter(null, true).Where(x => x.VESSEL == item.Vessel && x.VOYNO == item.Voyno && x.TenantId == UserManager.TENANT_ID).ToListAsync();
|
|
if (order != null)
|
|
{
|
|
foreach (var it in order)
|
|
{
|
|
|
|
if (it.ETA != item.ETA)
|
|
{
|
|
////添加booking日志
|
|
var bid = await _bookinglog.InsertReturnSnowflakeIdAsync(new BookingLog
|
|
{
|
|
Type = "Edit",
|
|
BookingId = it.Id,
|
|
TenantId = Convert.ToInt64(UserManager.TENANT_ID),
|
|
CreatedTime = DateTime.Now,
|
|
CreatedUserId = UserManager.UserId,
|
|
CreatedUserName = UserManager.Name
|
|
});
|
|
await _bookinglogdetail.InsertReturnSnowflakeIdAsync(new BookingLogDetail
|
|
{
|
|
PId = bid,
|
|
Field = "ETA",
|
|
OldValue = it.ETA == null ? "" : it.ETA.ToString(),
|
|
NewValue = item.ETA == null ? "" : item.ETA.ToString(),
|
|
});
|
|
it.ETA = item.ETA;
|
|
}
|
|
//if (it.ETD != item.ETD)
|
|
//{
|
|
// ////添加booking日志
|
|
// var bid = await _bookinglog.InsertReturnSnowflakeIdAsync(new BookingLog
|
|
// {
|
|
// Type = "Edit",
|
|
// BookingId = it.Id,
|
|
// TenantId = Convert.ToInt64(UserManager.TENANT_ID),
|
|
// CreatedTime = DateTime.Now,
|
|
// CreatedUserId = UserManager.UserId,
|
|
// CreatedUserName = UserManager.Name
|
|
// });
|
|
// await _bookinglogdetail.InsertReturnSnowflakeIdAsync(new BookingLogDetail
|
|
// {
|
|
// PId = bid,
|
|
// Field = "ETD",
|
|
// OldValue = it.ETD == null ? "" : it.ETD.ToString(),
|
|
// NewValue = item.ETD == null ? "" : item.ETD.ToString(),
|
|
// });
|
|
// it.ETD = item.ETD;
|
|
//}
|
|
if (it.ATD != item.ATD)
|
|
{
|
|
////添加booking日志
|
|
var bid = await _bookinglog.InsertReturnSnowflakeIdAsync(new BookingLog
|
|
{
|
|
Type = "Edit",
|
|
BookingId = it.Id,
|
|
TenantId = Convert.ToInt64(UserManager.TENANT_ID),
|
|
CreatedTime = DateTime.Now,
|
|
CreatedUserId = UserManager.UserId,
|
|
CreatedUserName = UserManager.Name
|
|
});
|
|
await _bookinglogdetail.InsertReturnSnowflakeIdAsync(new BookingLogDetail
|
|
{
|
|
PId = bid,
|
|
Field = "ATD",
|
|
OldValue = it.ATD == null ? "" : it.ATD.ToString(),
|
|
NewValue = item.ATD == null ? "" : item.ATD.ToString(),
|
|
});
|
|
it.ATD = item.ATD;
|
|
}
|
|
await _rep.AsUpdateable(it).IgnoreColumns().ExecuteCommandAsync();
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 航线上传同步
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpPost("/DataSync/SyncLine"), ApiUser(ApiCode = "SyncLine")]
|
|
[SqlSugarUnitOfWork]
|
|
public async Task SyncLine(LineSyncDto dto)
|
|
{
|
|
var idList = dto.DataList.Select(x => x.Code).ToList();
|
|
var laneList = _codeLaneRep.Where(x => idList.Contains(x.Code)).ToList();
|
|
if (dto.Type == "save")
|
|
{
|
|
foreach (var dtoLine in dto.DataList)
|
|
{
|
|
var lane = laneList.FirstOrDefault(x => x.Code == dtoLine.Code);
|
|
if (lane != null)
|
|
{
|
|
lane.EnName = dtoLine.Name;
|
|
lane.CnName = dtoLine.Name;
|
|
lane.ModifyTime = DateTime.Now;
|
|
lane.ModifyUser = UserManager.Name;
|
|
await _codeLaneRep.UpdateAsync(lane);
|
|
}
|
|
else
|
|
{
|
|
lane = new CodeLane();
|
|
lane.GID = Guid.NewGuid().ToString();
|
|
lane.Code = dtoLine.Code;
|
|
lane.EnName = dtoLine.Name;
|
|
lane.CnName = dtoLine.Name;
|
|
lane.LaneType = "SEA";
|
|
lane.CreateTime = DateTime.Now;
|
|
lane.CreateUser = UserManager.Name;
|
|
await _codeLaneRep.InsertAsync(lane);
|
|
}
|
|
}
|
|
|
|
await _commonDBService.GetAllLane(false); //刷新缓存
|
|
}
|
|
else if (dto.Type == "del")
|
|
{
|
|
foreach (var lane in laneList)
|
|
{
|
|
await _codeLaneRep.DeleteAsync(lane);
|
|
}
|
|
|
|
await _commonDBService.GetAllLane(false); //刷新缓存
|
|
}
|
|
else
|
|
{
|
|
throw Oops.Bah($"同步类型无效:{dto.Type}");
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 目的港上传同步
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpPost("/DataSync/SyncDisport"), ApiUser(ApiCode = "SyncDisport")]
|
|
[SqlSugarUnitOfWork]
|
|
public async Task SyncDisport(DisportSyncDto dto)
|
|
{
|
|
var idList = dto.DataList.Select(x => x.Code).ToList();
|
|
var portList = _codePortRep.Where(x => idList.Contains(x.Code)).ToList();
|
|
var relaList = _relaPortLane.Where(x => idList.Contains(x.PortCode) && (x.CarrierCode == null || x.CarrierCode == "") && (x.Module == null || x.Module == "")).ToList();
|
|
var laneList = _codeLaneRep.ToList();
|
|
if (dto.Type == "save")
|
|
{
|
|
foreach (var dtoPort in dto.DataList)
|
|
{
|
|
var port = portList.FirstOrDefault(x => x.Code == dtoPort.Code);
|
|
if (port != null)
|
|
{
|
|
dtoPort.Adapt(port);
|
|
port.ModifyTime = DateTime.Now;
|
|
port.ModifyUser = UserManager.Name;
|
|
await _codePortRep.UpdateAsync(port);
|
|
}
|
|
else
|
|
{
|
|
port = new CodePort();
|
|
port.GID = Guid.NewGuid().ToString();
|
|
dtoPort.Adapt(port);
|
|
port.CreateTime = DateTime.Now;
|
|
port.CreateUser = UserManager.Name;
|
|
await _codePortRep.InsertAsync(port);
|
|
}
|
|
|
|
//处理港口、航线对应关系
|
|
var lane = laneList.FirstOrDefault(x => x.CnName == port.ShippingRoute);
|
|
if (lane != null)
|
|
{
|
|
var rela = relaList.FirstOrDefault(x => x.PortCode == port.Code && x.LaneCode == lane.Code);
|
|
if (rela == null) //没有存在的映射关系,直接添加
|
|
{
|
|
rela = new RelaPortCarrierLane();
|
|
rela.GID = Guid.NewGuid().ToString();
|
|
rela.PortCode = port.Code;
|
|
rela.LaneCode = lane.Code;
|
|
rela.CarrierCode = "";
|
|
rela.Module = "";
|
|
rela.CreateTime = DateTime.Now;
|
|
rela.CreateUser = UserManager.Name;
|
|
await _relaPortLane.InsertAsync(rela);
|
|
}
|
|
else if (rela.LaneCode != lane.Code) //存在映射关系,但不是上传数据中的航线
|
|
{
|
|
rela.LaneCode = lane.Code; //修改航线映射
|
|
rela.ModifyTime = DateTime.Now;
|
|
rela.ModifyUser = UserManager.Name;
|
|
await _relaPortLane.UpdateAsync(rela);
|
|
}
|
|
}
|
|
}
|
|
|
|
await _commonDBService.GetAllPort(false); //刷新缓存
|
|
await _commonDBService.GetAllRelaPortCarrierLane(false); //刷新缓存
|
|
}
|
|
else if (dto.Type == "del")
|
|
{
|
|
//删除港口数据
|
|
foreach (var port in portList)
|
|
{
|
|
await _codePortRep.DeleteAsync(port);
|
|
}
|
|
|
|
//删除映射关系
|
|
foreach (var rela in relaList)
|
|
{
|
|
await _relaPortLane.DeleteAsync(rela);
|
|
}
|
|
|
|
await _commonDBService.GetAllPort(false); //刷新缓存
|
|
await _commonDBService.GetAllRelaPortCarrierLane(false); //刷新缓存
|
|
}
|
|
else
|
|
{
|
|
throw Oops.Bah($"同步类型无效:{dto.Type}");
|
|
}
|
|
|
|
}
|
|
#endregion
|
|
|
|
#region 下载数据
|
|
|
|
/// <summary>
|
|
/// 爬虫获取船名航次
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpGet("/DataSync/GetSyncVesselDate"), ApiUser(ApiCode = "GetSyncVesselDate")]
|
|
public async Task<dynamic> GetSyncVesselDate()
|
|
{
|
|
|
|
var list = await _vesselinfo.AsQueryable().Filter(null, true).Where(x => x.ATD == null && x.TenantId == UserManager.TENANT_ID && (x.Voyno != null && x.Voyno != "")).Select(x => new
|
|
{
|
|
Vessel = x.Vessel,
|
|
Voyno = x.Voyno,
|
|
CARRIER = x.CARRIER,
|
|
CARRIERID = x.CARRIERID
|
|
}).Distinct().ToListAsync();
|
|
|
|
return list;
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
#region 其他
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
}
|
|
}
|