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; 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; 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) { 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; } #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; } 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 }).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, }); } } } } 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", "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.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(); 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 = model.BookingEDIExt.Adapt(); ediExtEntity.BookingId = entity.Id; ediExtEntity.CreatedUserId = user.Id; ediExtEntity.CreatedUserName = user.Name; ediExtEntity.CreatedTime = DateTime.Now; ediExtEntity.CreatedUserId = user.Id; ediExtEntity.CreatedUserName = user.Name; 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", "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.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", "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.CreatedTime, it.CreatedUserId, it.CreatedUserName, it.LstShipOrderCompareId, it.LstShipOrderCompareDate, it.LstShipOrderCompareRlt }).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", "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.CreatedTime, it.CreatedUserId, it.CreatedUserName }).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(); } } } } #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 } }