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; using Myshipping.Application.Service.BookingOrder.Dto; using Myshipping.Application.Enum; namespace Myshipping.Application { /// /// 数据同步服务 /// [ApiDescriptionSettings("Application", Name = "DataSync", Order = 1), AllowAnonymous] public class DataSyncService : IDynamicApiController, ITransient { private readonly ILogger _logger; private readonly ISysCacheService _cache; private readonly SqlSugarRepository _rep; private readonly SqlSugarRepository _repCtn; private readonly SqlSugarRepository _ctndetailrep; private readonly SqlSugarRepository _repUser; private readonly SqlSugarRepository _repTenant; private readonly SqlSugarRepository _djycustomer; private readonly SqlSugarRepository _djycustomercontact; private readonly SqlSugarRepository _vesselinfo; private readonly SqlSugarRepository _bookingEDIExt; private readonly SqlSugarRepository _bookinglog; private readonly SqlSugarRepository _bookinglogdetail; private readonly SqlSugarRepository _bookingremark; private readonly SqlSugarRepository _goodsStatus; private readonly SqlSugarRepository _goodsStatusConfig; private readonly SqlSugarRepository _repline; private readonly SqlSugarRepository _mapcarrier; private readonly SqlSugarRepository _codeLaneRep; private readonly SqlSugarRepository _codePortRep; private readonly SqlSugarRepository _relaPortLane; private readonly ICommonDBService _commonDBService; private readonly SqlSugarRepository _codeForwarder; private readonly SqlSugarRepository _bookingfile; private readonly SqlSugarRepository _accountconfig; private readonly IBookingOrderService _bookingorderservice; public DataSyncService(ILogger logger, ISysCacheService cache, SqlSugarRepository rep, SqlSugarRepository repCtn, SqlSugarRepository repUser, SqlSugarRepository repTenant, SqlSugarRepository djycustomer, SqlSugarRepository djycustomercontact, SqlSugarRepository vesselinfo, SqlSugarRepository ctndetailrep , SqlSugarRepository bookingEDIExt, SqlSugarRepository bookinglog, SqlSugarRepository bookinglogdetail, SqlSugarRepository goodsStatus, SqlSugarRepository goodsStatusConfig, SqlSugarRepository repline, SqlSugarRepository bookingremark, SqlSugarRepository mapcarrier, SqlSugarRepository codeForwarder, SqlSugarRepository codePortRep, SqlSugarRepository codeLaneRep, ICommonDBService commonDBService, SqlSugarRepository relaPortLane, SqlSugarRepository accountconfig, SqlSugarRepository bookingfile, IBookingOrderService bookingorderservice) { 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; this._codeForwarder = codeForwarder; this._accountconfig = accountconfig; this._bookingfile = bookingfile; this._bookingorderservice = bookingorderservice; } #region 上传数据 /// /// 同步客户 /// /// 参数 /// [HttpPost("/DataSync/SyncCustomer"), ApiUser(ApiCode = "SyncCustomer")] public async Task SyncCustomer(DjyCustomerSyncDto model) { var userlist = await _repUser.AsQueryable().Filter(null, true).Where(x => x.IsDeleted == false && x.TenantId == UserManager.TENANT_ID).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 && x.TenantId == UserManager.TENANT_ID).FirstAsync(); var entity = model.Adapt(); 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(); contact.CustomerId = entity.Id; contact.TenantId = UserManager.TENANT_ID; await _djycustomercontact.InsertAsync(contact); } if (entity.PropString.Contains("shipagency")) { var ship = await _codeForwarder.AsQueryable().Where(x => x.Code == entity.CodeName).FirstAsync(); if (ship == null) { await _codeForwarder.InsertAsync(new CodeForwarder { GID = Guid.NewGuid().ToString(), CreateTime = DateTime.Now, CreateUser = UserManager.DjyUserId, Code = entity.CodeName, Name = entity.ShortName }); } else { ship.Code = entity.CodeName; ship.Name = entity.ShortName; ship.ModifyTime = DateTime.Now; ship.ModifyUser = UserManager.DjyUserId; await _codeForwarder.UpdateAsync(ship); } await _commonDBService.GetAllForwarder(false); } } 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); if (entity.PropString.Contains("shipagency")) { var ship = await _codeForwarder.AsQueryable().Where(x => x.Code == entity.CodeName).FirstAsync(); if (ship == null) { await _codeForwarder.InsertAsync(new CodeForwarder { GID = Guid.NewGuid().ToString(), CreateTime = DateTime.Now, CreateUser = UserManager.DjyUserId, Code = entity.CodeName, Name = entity.ShortName }); } else { ship.Code = entity.CodeName; ship.Name = entity.ShortName; ship.ModifyTime = DateTime.Now; ship.ModifyUser = UserManager.DjyUserId; await _codeForwarder.UpdateAsync(ship); } await _commonDBService.GetAllForwarder(false); } foreach (var item in model.ContactList) { var contact = item.Adapt(); contact.CustomerId = entity.Id; contact.TenantId = UserManager.TENANT_ID; await _djycustomercontact.InsertAsync(contact); } } return entity.Id; } /// /// 批量同步客户无返回值 /// /// 参数 /// [HttpPost("/DataSync/SyncCustomerList"), ApiUser(ApiCode = "SyncCustomerList")] public async Task SyncCustomer(List model) { var userlist = await _repUser.AsQueryable().Filter(null, true).Where(x => x.IsDeleted == false && x.TenantId == UserManager.TENANT_ID).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 && x.TenantId == UserManager.TENANT_ID).FirstAsync(); var entity = item.Adapt(); 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(); contact.CustomerId = entity.Id; contact.TenantId = UserManager.TENANT_ID; await _djycustomercontact.InsertAsync(contact); } if (entity.PropString.Contains("shipagency")) { var ship = await _codeForwarder.AsQueryable().Where(x => x.Code == entity.CodeName).FirstAsync(); if (ship == null) { await _codeForwarder.InsertAsync(new CodeForwarder { GID = Guid.NewGuid().ToString(), CreateTime = DateTime.Now, CreateUser = UserManager.DjyUserId, Code = entity.CodeName, Name = entity.ShortName }); } else { ship.Code = entity.CodeName; ship.Name = entity.ShortName; ship.ModifyTime = DateTime.Now; ship.ModifyUser = UserManager.DjyUserId; await _codeForwarder.UpdateAsync(ship); } await _commonDBService.GetAllForwarder(false); } } 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(); contact.CustomerId = entity.Id; contact.TenantId = UserManager.TENANT_ID; await _djycustomercontact.InsertAsync(contact); } if (entity.PropString.Contains("shipagency")) { var ship = await _codeForwarder.AsQueryable().Where(x => x.Code == entity.CodeName).FirstAsync(); if (ship == null) { await _codeForwarder.InsertAsync(new CodeForwarder { GID = Guid.NewGuid().ToString(), CreateTime = DateTime.Now, CreateUser = UserManager.DjyUserId, Code = entity.CodeName, Name = entity.ShortName }); } else { ship.Code = entity.CodeName; ship.Name = entity.ShortName; ship.ModifyTime = DateTime.Now; ship.ModifyUser = UserManager.DjyUserId; await _codeForwarder.UpdateAsync(ship); } await _commonDBService.GetAllForwarder(false); } } } } /// /// 批量同步船期无返回值 /// /// /// [HttpPost("/DataSync/SyncVesselDateList"), ApiUser(ApiCode = "SyncVesselDateList")] [SqlSugarUnitOfWork] public async Task SyncVesselDateList(List 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 && x.TenantId == UserManager.TENANT_ID).ToListAsync(); var m = await _vesselinfo.AsQueryable().Filter(null, true).Where(x => x.BSNO == item.BSNO && x.TenantId == UserManager.TENANT_ID).FirstAsync(); var entity = item.Adapt(); 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 (string.IsNullOrEmpty(item.Voyno)) { entity.Voyno = entity.VoynoInside; } 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 "上传成功!"; } /// /// 同步订舱批量 没有返回值 /// /// /// [SqlSugarUnitOfWork] [HttpPost("/DataSync/SyncBookingList"), ApiUser(ApiCode = "SyncBookingList")] public async Task SyncBookingList(List list) { List 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 && x.TenantId == UserManager.TENANT_ID).ToListAsync(); var djycustomer = await _djycustomer.AsQueryable().Filter(null, true).Where(x => x.IsDeleted == false && x.TenantId == UserManager.TENANT_ID).ToListAsync(); var goodsconfig = await _goodsStatusConfig.AsQueryable().Filter(null, true).Where(x => x.IsDeleted == false && x.TenantId == UserManager.TENANT_ID).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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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 } } } /// /// 爬虫上传船期港前 /// /// [HttpPost("/DataSync/SaveSyncVesselDate"), ApiUser(ApiCode = "SaveSyncVesselDate")] [SqlSugarUnitOfWork] public async Task SaveSyncVesselDate(List 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(); if (model != null) { model.ETA = item.ETA; model.YgtETD = 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.StartETA != 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 = "预抵日期", OldValue = it.StartETA == null ? "" : it.StartETA.ToString(), NewValue = item.ETA == null ? "" : item.ETA.ToString(), }); it.StartETA = item.ETA; } if (it.YgtETD != 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.YgtETD == null ? "" : it.YgtETD.ToString(), NewValue = item.ETD == null ? "" : item.ETD.ToString(), }); it.YgtETD = 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 = "实际开船日期", OldValue = it.ATD == null ? "" : it.ATD.ToString(), NewValue = item.ATD == null ? "" : item.ATD.ToString(), }); it.ATD = item.ATD; } if (it.StartATA != item.ATA) { ////添加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 = "实际抵港", OldValue = it.StartATA == null ? "" : it.StartATA.ToString(), NewValue = item.ATA == null ? "" : item.ATA.ToString(), }); it.StartATA = item.ATA; } await _rep.AsUpdateable(it).IgnoreColumns().ExecuteCommandAsync(); } var itemcode = _cache.GetAllTenantParam().Result.Where(x => x.ParaCode == "BOOKING_DATA_PUSH" && x.TenantId == UserManager.TENANT_ID).Select(x => x.ItemCode).FirstOrDefault(); if (!string.IsNullOrEmpty(itemcode)) { if (itemcode == "true") { List list = new List(); list = order.Select(x => x.Id).ToList(); if (list!=null&&list.Count>0) { await _bookingorderservice.SendBookingOrder(list.ToArray()); } } } } } } /// /// 爬虫上传船期港后 /// /// [HttpPost("/DataSync/SaveSyncGHVesselDate"), ApiUser(ApiCode = "SaveSyncGHVesselDate")] [SqlSugarUnitOfWork] public async Task SaveSyncGHVesselDate(List 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 = "预计到港日期(目的港)", OldValue = it.ETA == null ? "" : it.ETA.ToString(), NewValue = item.ETA == null ? "" : item.ETA.ToString(), }); it.ETA = item.ETA; } if (it.MiddleETA != item.MiddleETA) { ////添加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 = "中转预抵", OldValue = it.MiddleETA == null ? "" : it.MiddleETA.ToString(), NewValue = item.MiddleETA == null ? "" : item.MiddleETA.ToString(), }); it.MiddleETA = item.MiddleETA; } if (it.MiddleETD != item.MiddleETD) { ////添加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 = "中转预计离港", OldValue = it.MiddleETD == null ? "" : it.MiddleETD.ToString(), NewValue = item.MiddleETD == null ? "" : item.MiddleETD.ToString(), }); it.MiddleETD = item.MiddleETD; } if (item.MiddleATA != it.MiddleATA) { ////添加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 = "中转实际到港", OldValue = it.MiddleATA == null ? "" : it.MiddleATA.ToString(), NewValue = item.MiddleATA == null ? "" : item.MiddleATA.ToString(), }); it.MiddleATA = item.MiddleATA; } if (item.MiddleATD != it.MiddleATD) { ////添加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 = "中转实际离港", OldValue = it.MiddleATD == null ? "" : it.MiddleATD.ToString(), NewValue = item.MiddleATD == null ? "" : item.MiddleATD.ToString(), }); it.MiddleATD = item.MiddleATD; } if (item.ATA != it.ATA) { ////添加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 = "实际到港(目的港)", OldValue = it.ATA == null ? "" : it.ATA.ToString(), NewValue = item.ATA == null ? "" : item.ATA.ToString(), }); it.ATA = item.ATA; } await _rep.AsUpdateable(it).IgnoreColumns().ExecuteCommandAsync(); } var itemcode = _cache.GetAllTenantParam().Result.Where(x => x.ParaCode == "BOOKING_DATA_PUSH" && x.TenantId == UserManager.TENANT_ID).Select(x => x.ItemCode).FirstOrDefault(); if (!string.IsNullOrEmpty(itemcode)) { if (itemcode == "true") await _bookingorderservice.SendBookingOrder(order.Select(x => x.Id).ToArray()); } } } } /// /// 航线上传同步 /// /// [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}"); } } /// /// 目的港上传同步 /// /// [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 下载数据 /// /// 爬虫获取船名航次 /// /// [HttpGet("/DataSync/GetSyncVesselDate"), ApiUser(ApiCode = "GetSyncVesselDate")] public async Task 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 #region 自动化接口 /// /// 获取订舱数据 /// /// [HttpGet("/DataSync/GetBookingOrder"), ApiUser(ApiCode = "GetBookingOrder")] public async Task GetBookingOrder(QueryBookingOrder query) { if (query == null) { throw Oops.Bah("未录入正确查询条件"); } if (string.IsNullOrEmpty(query.MBLNO) && string.IsNullOrEmpty(query.TMBLNO) && string.IsNullOrEmpty(query.BOOKINGNO)) { return null; } var list = await _rep.AsQueryable().Filter(null, true).Where(x => x.TenantId == UserManager.TENANT_ID && x.IsDeleted == false). WhereIF(!string.IsNullOrEmpty(query.MBLNO), x => x.MBLNO == query.MBLNO). WhereIF(!string.IsNullOrEmpty(query.TMBLNO), x => x.TMBLNO == query.TMBLNO). WhereIF(!string.IsNullOrEmpty(query.BOOKINGNO), x => x.BOOKINGNO == query.BOOKINGNO).ToListAsync(); return list; } /// /// 更新订舱 /// /// /// [SqlSugarUnitOfWork] [HttpPost("/DataSync/SaveBookingOrder"), ApiUser(ApiCode = "SaveBookingOrder")] public async Task SaveBookingOrder(UpdateBookingOrder input) { if (input == null) { throw Oops.Bah("未录入数据"); } if (string.IsNullOrEmpty(input.MBLNO) && string.IsNullOrEmpty(input.TMBLNO) && string.IsNullOrEmpty(input.BOOKINGNO) && input.Id == 0) { throw Oops.Bah("未录入正确数据"); } var order = await _rep.AsQueryable().Filter(null, true).Where(x => x.Id == input.Id).FirstAsync(); if (order.MBLNO != input.MBLNO) { var bid = await _bookinglog.InsertReturnSnowflakeIdAsync(new BookingLog { Type = "Edit", BookingId = order.Id, TenantId = Convert.ToInt64(UserManager.TENANT_ID), CreatedTime = DateTime.Now, CreatedUserId = order.CreatedUserId, CreatedUserName = order.CreatedUserName }); await _bookinglogdetail.InsertReturnSnowflakeIdAsync(new BookingLogDetail { PId = bid, Field = "MBLNO", OldValue = order.MBLNO, NewValue = input.MBLNO, }); } if (order.TMBLNO != input.TMBLNO) { var bid = await _bookinglog.InsertReturnSnowflakeIdAsync(new BookingLog { Type = "Edit", BookingId = order.Id, TenantId = Convert.ToInt64(UserManager.TENANT_ID), CreatedTime = DateTime.Now, CreatedUserId = order.CreatedUserId, CreatedUserName = order.CreatedUserName }); await _bookinglogdetail.InsertReturnSnowflakeIdAsync(new BookingLogDetail { PId = bid, Field = "TMBLNO", OldValue = order.TMBLNO, NewValue = input.TMBLNO, }); } if (order.BOOKINGNO != input.BOOKINGNO) { var bid = await _bookinglog.InsertReturnSnowflakeIdAsync(new BookingLog { Type = "Edit", BookingId = order.Id, TenantId = Convert.ToInt64(UserManager.TENANT_ID), CreatedTime = DateTime.Now, CreatedUserId = order.CreatedUserId, CreatedUserName = order.CreatedUserName }); await _bookinglogdetail.InsertReturnSnowflakeIdAsync(new BookingLogDetail { PId = bid, Field = "BOOKINGNO", OldValue = order.BOOKINGNO, NewValue = input.BOOKINGNO, }); } order.MBLNO = input.MBLNO; order.TMBLNO = input.TMBLNO; order.BOOKINGNO = input.BOOKINGNO; order.UpdatedUserId = order.CreatedUserId; order.UpdatedUserName = order.CreatedUserName; order.UpdatedTime = DateTime.Now; await _rep.AsUpdateable(order).IgnoreColumns(it => new { it.ParentId, it.TenantId, it.CreatedTime, it.CreatedUserId, it.CreatedUserName, it.TenantName, it.IsDeleted, }).ExecuteCommandAsync(); } /// /// 获取接口Key 个人或公司 /// /// /// /// [HttpGet("/DataSync/GetAccountConfig"), ApiUser(ApiCode = "GetAccountConfig")] public async Task GetAccountConfig(string TypeCode, long UserId) { if (string.IsNullOrWhiteSpace(TypeCode)) { throw Oops.Bah("请传入正确参数!"); } DjyWebsiteAccountConfig accountConfig = new DjyWebsiteAccountConfig(); if (UserId == 0) { accountConfig = await _accountconfig.AsQueryable().InnerJoin((d, t) => d.TenantId == t.TenantId).Where((d, t) => d.TypeCode == TypeCode && t.TenantId == UserManager.TENANT_ID && d.IsTenant == true).FirstAsync(); } else { accountConfig = await _accountconfig.FirstOrDefaultAsync(x => x.TypeCode == TypeCode && x.CreatedUserId == UserId); } return accountConfig; } /// /// 获取租户参数 /// /// [HttpGet("/DataSync/GetParamValue"), ApiUser(ApiCode = "GetParamValue")] public dynamic GetParamValue() { var list = _cache.GetAllTenantParam().Result.Where(x => x.TenantId == UserManager.TENANT_ID).OrderBy(x => x.Sort).ToList(); return list; } /// /// 挂载订舱文件 /// /// /// /// [HttpPost("/DataSync/AddFile"), ApiUser(ApiCode = "AddFile")] public async Task AddFile(IFormFile file, [FromForm] BookingFileDto dto) { //未上传文件 if (file == null || file.Length == 0) { throw Oops.Bah(BookingErrorCode.BOOK200); } var opt = App.GetOptions(); var originalFilename = file.FileName; // 文件原始名称 var fileSuffix = Path.GetExtension(file.FileName).ToLower(); // 文件后缀 if (!opt.fileType.Contains(fileSuffix)) { throw Oops.Bah(BookingErrorCode.BOOK114); } var dirAbs = string.Empty; if (string.IsNullOrEmpty(opt.basePath)) { dirAbs = Path.Combine(App.WebHostEnvironment.WebRootPath, opt.relativePath); } else { dirAbs = Path.Combine(opt.basePath, opt.relativePath); } if (!Directory.Exists(dirAbs)) Directory.CreateDirectory(dirAbs); // 先存库获取Id var id = YitIdHelper.NextId(); var fileSaveName = $"{id}{fileSuffix}".ToLower(); var fileRelaPath = Path.Combine(opt.relativePath, fileSaveName).ToLower(); var fileAbsPath = Path.Combine(dirAbs, fileSaveName).ToLower(); var newFile = new BookingFile { Id = id, FileName = originalFilename, FilePath = fileRelaPath, TypeCode = dto.TypeCode, TypeName = dto.TypeName, BookingId = dto.BookingId, }; await _bookingfile.InsertAsync(newFile); using (var stream = File.Create(fileAbsPath)) { await file.CopyToAsync(stream); } } #endregion } }