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 { /// /// 数据同步服务 /// [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; 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 codePortRep, SqlSugarRepository codeLaneRep, ICommonDBService commonDBService, SqlSugarRepository 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 上传数据 /// /// 同步客户 /// /// 参数 /// [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).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(); 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); } } 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(); 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).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(); 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); } } 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); } } } } /// /// 批量同步船期无返回值 /// /// /// [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).ToListAsync(); var m = await _vesselinfo.AsQueryable().Filter(null, true).Where(x => x.BSNO == item.BSNO).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 (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).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(); 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(); 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(); } } } } /// /// 航线上传同步 /// /// [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 } }