|
|
|
|
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
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 数据同步服务
|
|
|
|
|
/// </summary>
|
|
|
|
|
[ApiDescriptionSettings("Application", Name = "DataSync", Order = 1), AllowAnonymous]
|
|
|
|
|
public class DataSyncService : IDynamicApiController, ITransient
|
|
|
|
|
{
|
|
|
|
|
private readonly ILogger<BookingOrderService> _logger;
|
|
|
|
|
private readonly ISysCacheService _cache;
|
|
|
|
|
private readonly SqlSugarRepository<BookingOrder> _rep;
|
|
|
|
|
private readonly SqlSugarRepository<BookingCtn> _repCtn;
|
|
|
|
|
private readonly SqlSugarRepository<BookingCtnDetail> _ctndetailrep;
|
|
|
|
|
private readonly SqlSugarRepository<SysUser> _repUser;
|
|
|
|
|
private readonly SqlSugarRepository<SysTenant> _repTenant;
|
|
|
|
|
private readonly SqlSugarRepository<DjyCustomer> _djycustomer;
|
|
|
|
|
private readonly SqlSugarRepository<DjyCustomerContact> _djycustomercontact;
|
|
|
|
|
private readonly SqlSugarRepository<DjyVesselInfo> _vesselinfo;
|
|
|
|
|
private readonly SqlSugarRepository<BookingEDIExt> _bookingEDIExt;
|
|
|
|
|
private readonly SqlSugarRepository<BookingLog> _bookinglog;
|
|
|
|
|
private readonly SqlSugarRepository<BookingLogDetail> _bookinglogdetail;
|
|
|
|
|
|
|
|
|
|
public DataSyncService(ILogger<BookingOrderService> logger, ISysCacheService cache, SqlSugarRepository<BookingOrder> rep, SqlSugarRepository<BookingCtn> repCtn,
|
|
|
|
|
SqlSugarRepository<SysUser> repUser, SqlSugarRepository<SysTenant> repTenant, SqlSugarRepository<DjyCustomer> djycustomer,
|
|
|
|
|
SqlSugarRepository<DjyCustomerContact> djycustomercontact, SqlSugarRepository<DjyVesselInfo> vesselinfo, SqlSugarRepository<BookingCtnDetail> ctndetailrep
|
|
|
|
|
, SqlSugarRepository<BookingEDIExt> bookingEDIExt, SqlSugarRepository<BookingLog> bookinglog, SqlSugarRepository<BookingLogDetail> bookinglogdetail)
|
|
|
|
|
{
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region 上传数据
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 同步客户
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="model">参数</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpPost("/DataSync/SyncCustomer"), ApiUser(ApiCode = "SyncCustomer")]
|
|
|
|
|
public async Task<long> SyncCustomer(DjyCustomerSyncDto model)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (string.IsNullOrWhiteSpace(model.ShortName))
|
|
|
|
|
{
|
|
|
|
|
throw Oops.Bah("简称未录入");
|
|
|
|
|
}
|
|
|
|
|
var m = await _djycustomer.AsQueryable().Filter(null, true).Where(x => x.ShortName == model.ShortName).FirstAsync();
|
|
|
|
|
var entity = model.Adapt<DjyCustomer>();
|
|
|
|
|
if (m == null)
|
|
|
|
|
{
|
|
|
|
|
await _djycustomer.InsertAsync(entity);
|
|
|
|
|
foreach (var item in model.ContactList)
|
|
|
|
|
{
|
|
|
|
|
var contact = item.Adapt<DjyCustomerContact>();
|
|
|
|
|
contact.CustomerId = entity.Id;
|
|
|
|
|
await _djycustomercontact.InsertAsync(contact);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
entity.Id = m.Id;
|
|
|
|
|
await _djycustomer.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
|
|
|
|
|
await _djycustomercontact.DeleteAsync(x => x.CustomerId == entity.Id);
|
|
|
|
|
foreach (var item in model.ContactList)
|
|
|
|
|
{
|
|
|
|
|
var contact = item.Adapt<DjyCustomerContact>();
|
|
|
|
|
contact.CustomerId = entity.Id;
|
|
|
|
|
await _djycustomercontact.InsertAsync(contact);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return entity.Id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 同步船期
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="model"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpPost("/DataSync/SyncVesselDate"), ApiUser(ApiCode = "SyncVesselDate")]
|
|
|
|
|
public async Task<long> SyncVesselDate(DjyVesselInfoDto model)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (string.IsNullOrWhiteSpace(model.BSNO))
|
|
|
|
|
{
|
|
|
|
|
throw Oops.Bah("BSNO未录入");
|
|
|
|
|
}
|
|
|
|
|
var m = await _vesselinfo.AsQueryable().Filter(null, true).Where(x => x.BSNO == model.BSNO).FirstAsync();
|
|
|
|
|
var entity = model.Adapt<DjyVesselInfo>();
|
|
|
|
|
entity.Vessel = model.Vessel.ToUpper().Trim();
|
|
|
|
|
if (m == null)
|
|
|
|
|
{
|
|
|
|
|
await _vesselinfo.InsertAsync(entity);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
entity.Id = m.Id;
|
|
|
|
|
await _vesselinfo.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
|
|
|
|
|
}
|
|
|
|
|
return entity.Id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 同步订舱
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="model"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[SqlSugarUnitOfWork]
|
|
|
|
|
[HttpPost("/DataSync/SyncBooking"), ApiUser(ApiCode = "SyncBooking")]
|
|
|
|
|
public async Task<long> SyncBooking(SyncBookingOrderDto model)
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrWhiteSpace(model.BSNO))
|
|
|
|
|
{
|
|
|
|
|
throw Oops.Bah("主单BSNO未录入");
|
|
|
|
|
}
|
|
|
|
|
if (string.IsNullOrWhiteSpace(model.CreatedUserName))
|
|
|
|
|
{
|
|
|
|
|
throw Oops.Bah("未录入创建人");
|
|
|
|
|
}
|
|
|
|
|
var userlist = _repUser.AsQueryable().Filter(null, true).ToListAsync();
|
|
|
|
|
var user = _repUser.AsQueryable().Filter(null, true).Where(x => x.Name == model.CreatedUserName.Trim()).FirstAsync();
|
|
|
|
|
if (user.Result== null)
|
|
|
|
|
{
|
|
|
|
|
throw Oops.Bah("未匹配到创建人");
|
|
|
|
|
}
|
|
|
|
|
var order = await _rep.AsQueryable().Filter(null, true).Where(x => x.BSNO == model.BSNO).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");
|
|
|
|
|
JsonUtil.TrimFields(model);
|
|
|
|
|
if (model.ctnInputs != null)
|
|
|
|
|
{
|
|
|
|
|
var groupList = model.ctnInputs.Where(x => x.CTNNUM > 0).GroupBy(c => c.CTNALL).Select(g => $"{g.Key}*{g.Sum(gg => gg.CTNNUM)}");
|
|
|
|
|
model.CNTRTOTAL = string.Join(" / ", groupList);
|
|
|
|
|
}
|
|
|
|
|
var et = await _rep.Where(x => x.MBLNO == model.MBLNO && x.TenantId == UserManager.TENANT_ID && x.HBLNO == model.HBLNO && x.ParentId == 0).FirstAsync();
|
|
|
|
|
if (et != null)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
throw Oops.Bah("当前提单号已存在,请勿重复录入!");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
var entity = model.Adapt<BookingOrder>();
|
|
|
|
|
entity.CreatedUserId = user.Result.Id;
|
|
|
|
|
entity.CreatedUserName = user.Result.Name;
|
|
|
|
|
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<BookingCtn>();
|
|
|
|
|
ctnentity.BILLID = entity.Id;
|
|
|
|
|
await _repCtn.InsertAsync(ctnentity);
|
|
|
|
|
|
|
|
|
|
//这里保存有可能没有添加多品名,所有箱下没有货物信息
|
|
|
|
|
if (item.ctnDetailInputs != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (var it in item.ctnDetailInputs)
|
|
|
|
|
{
|
|
|
|
|
var ctndetail = it.Adapt<BookingCtnDetail>();
|
|
|
|
|
ctndetail.CTNID = ctnentity.Id;
|
|
|
|
|
await _ctndetailrep.InsertAsync(ctndetail);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (model.BookingEDIExt != null)
|
|
|
|
|
{
|
|
|
|
|
//写入EDI扩展
|
|
|
|
|
var ediExtEntity = model.BookingEDIExt.Adapt<BookingEDIExt>();
|
|
|
|
|
|
|
|
|
|
ediExtEntity.BookingId = entity.Id;
|
|
|
|
|
|
|
|
|
|
ediExtEntity.CreatedUserId = user.Result.Id;
|
|
|
|
|
ediExtEntity.CreatedUserName = user.Result.Name;
|
|
|
|
|
ediExtEntity.CreatedTime = DateTime.Now;
|
|
|
|
|
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.Result.Id,
|
|
|
|
|
CreatedUserName = "系统"
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//分单
|
|
|
|
|
if (model.childrens != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (var item in model.childrens)
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrWhiteSpace(item.MBLNO))
|
|
|
|
|
{
|
|
|
|
|
throw Oops.Bah("请填写提单号!");
|
|
|
|
|
}
|
|
|
|
|
if (string.IsNullOrWhiteSpace(item.HBLNO))
|
|
|
|
|
{
|
|
|
|
|
throw Oops.Bah("请填写分提单号!");
|
|
|
|
|
}
|
|
|
|
|
JsonUtil.PropToUpper(item, "ORDNO", "BSSTATUS", "YardContract", "YardContractTel", "YardContractEmail", "MARKS", "DESCRIPTION", "CONSIGNEENAME", "SHIPPERNAME", "NOTIFYPARTYNAME");
|
|
|
|
|
JsonUtil.TrimFields(item);
|
|
|
|
|
if (item.ctnInputs != null)
|
|
|
|
|
{
|
|
|
|
|
var groupList = item.ctnInputs.Where(x => x.CTNNUM > 0).GroupBy(c => c.CTNALL).Select(g => $"{g.Key}*{g.Sum(gg => gg.CTNNUM)}");
|
|
|
|
|
item.CNTRTOTAL = string.Join(" / ", groupList);
|
|
|
|
|
}
|
|
|
|
|
var fdet = await _rep.Where(x => x.MBLNO == model.MBLNO && x.TenantId == UserManager.TENANT_ID && x.HBLNO == model.HBLNO && x.ParentId == entity.Id).FirstAsync();
|
|
|
|
|
if (fdet != null)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
throw Oops.Bah($"当前分单中提单号({item.MBLNO}_{item.HBLNO})已存在,请勿重复录入!");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
var fdentity = item.Adapt<BookingOrder>();
|
|
|
|
|
fdentity.CreatedUserId = user.Result.Id;
|
|
|
|
|
fdentity.CreatedUserName = user.Result.Name;
|
|
|
|
|
fdentity.CreatedTime = DateTime.Now;
|
|
|
|
|
fdentity.ParentId = entity.Id;
|
|
|
|
|
await _rep.InsertAsync(fdentity);
|
|
|
|
|
|
|
|
|
|
if (item.ctnInputs != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (var it in item.ctnInputs)
|
|
|
|
|
{
|
|
|
|
|
var ctnentity = item.Adapt<BookingCtn>();
|
|
|
|
|
ctnentity.BILLID = fdentity.Id;
|
|
|
|
|
await _repCtn.InsertAsync(ctnentity);
|
|
|
|
|
|
|
|
|
|
//这里保存有可能没有添加多品名,所有箱下没有货物信息
|
|
|
|
|
if (it.ctnDetailInputs != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (var dit in it.ctnDetailInputs)
|
|
|
|
|
{
|
|
|
|
|
var ctndetail = dit.Adapt<BookingCtnDetail>();
|
|
|
|
|
ctndetail.CTNID = ctnentity.Id;
|
|
|
|
|
await _ctndetailrep.InsertAsync(ctndetail);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (item.BookingEDIExt != null)
|
|
|
|
|
{
|
|
|
|
|
//写入EDI扩展
|
|
|
|
|
var ediExtEntity = model.BookingEDIExt.Adapt<BookingEDIExt>();
|
|
|
|
|
|
|
|
|
|
ediExtEntity.BookingId = fdentity.Id;
|
|
|
|
|
ediExtEntity.CreatedUserId = user.Result.Id;
|
|
|
|
|
ediExtEntity.CreatedUserName = user.Result.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.Result.Id,
|
|
|
|
|
CreatedUserName = "系统"
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return entity.Id;
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
#region 编辑
|
|
|
|
|
if (string.IsNullOrWhiteSpace(model.MBLNO))
|
|
|
|
|
{
|
|
|
|
|
throw Oops.Bah("请填写提单号!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
JsonUtil.PropToUpper(model, "ORDNO", "BSSTATUS", "YardContract", "YardContractTel", "YardContractEmail", "MARKS", "DESCRIPTION", "CONSIGNEENAME", "SHIPPERNAME", "NOTIFYPARTYNAME");
|
|
|
|
|
JsonUtil.TrimFields(model);
|
|
|
|
|
|
|
|
|
|
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).FirstAsync();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var et = await _rep.AsQueryable().Filter(null, true).Where(x => x.MBLNO == model.MBLNO && x.TenantId == UserManager.TENANT_ID && x.HBLNO == model.HBLNO && x.BSNO != model.BSNO).FirstAsync();
|
|
|
|
|
if (et != null)
|
|
|
|
|
{
|
|
|
|
|
throw Oops.Bah("当前提单号已存在,请勿重复录入!");
|
|
|
|
|
}
|
|
|
|
|
var entity = model.Adapt<BookingOrder>();
|
|
|
|
|
entity.Id = main.Id;
|
|
|
|
|
entity.UpdatedUserName = user.Result.Name;
|
|
|
|
|
entity.UpdatedUserId = user.Result.Id;
|
|
|
|
|
entity.UpdatedTime = DateTime.Now;
|
|
|
|
|
await _rep.AsUpdateable(entity).IgnoreColumns(it => new
|
|
|
|
|
{
|
|
|
|
|
it.ParentId,
|
|
|
|
|
it.TenantId,
|
|
|
|
|
it.CreatedTime,
|
|
|
|
|
it.CreatedUserId,
|
|
|
|
|
it.CreatedUserName
|
|
|
|
|
}).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));
|
|
|
|
|
if (model.ctnInputs != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (var item in model.ctnInputs)
|
|
|
|
|
{
|
|
|
|
|
var ctnentity = item.Adapt<BookingCtn>();
|
|
|
|
|
ctnentity.BILLID = main.Id;
|
|
|
|
|
await _repCtn.InsertAsync(ctnentity);
|
|
|
|
|
if (item.ctnDetailInputs != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (var it in item.ctnDetailInputs)
|
|
|
|
|
{
|
|
|
|
|
var ctndetail = it.Adapt<BookingCtnDetail>();
|
|
|
|
|
ctndetail.CTNID = ctnentity.Id;
|
|
|
|
|
await _ctndetailrep.InsertAsync(ctndetail);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (model.BookingEDIExt != null)
|
|
|
|
|
{
|
|
|
|
|
//检索EDI扩展
|
|
|
|
|
var ediExtEntity = _bookingEDIExt.FirstOrDefault(u => u.BookingId == main.Id);
|
|
|
|
|
|
|
|
|
|
if (ediExtEntity == null)
|
|
|
|
|
{
|
|
|
|
|
//写入EDI扩展
|
|
|
|
|
ediExtEntity = model.BookingEDIExt.Adapt<BookingEDIExt>();
|
|
|
|
|
ediExtEntity.BookingId = main.Id;
|
|
|
|
|
ediExtEntity.CreatedUserId = user.Result.Id;
|
|
|
|
|
ediExtEntity.CreatedUserName = user.Result.Name;
|
|
|
|
|
ediExtEntity.CreatedTime = DateTime.Now;
|
|
|
|
|
await _bookingEDIExt.InsertAsync(ediExtEntity);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//更新EDI扩展
|
|
|
|
|
var currEdiExtEntity = model.BookingEDIExt.Adapt<BookingEDIExt>();
|
|
|
|
|
|
|
|
|
|
currEdiExtEntity.Id = ediExtEntity.Id;
|
|
|
|
|
|
|
|
|
|
await _bookingEDIExt.AsUpdateable(currEdiExtEntity).IgnoreColumns(it => new
|
|
|
|
|
{
|
|
|
|
|
it.BookingId,
|
|
|
|
|
it.TenantId,
|
|
|
|
|
it.CreatedTime,
|
|
|
|
|
it.CreatedUserId,
|
|
|
|
|
it.CreatedUserName
|
|
|
|
|
}).ExecuteCommandAsync();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool 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.Result.Id,
|
|
|
|
|
CreatedUserName = user.Result.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)
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrWhiteSpace(item.MBLNO))
|
|
|
|
|
{
|
|
|
|
|
throw Oops.Bah("请填写提单号!");
|
|
|
|
|
}
|
|
|
|
|
JsonUtil.PropToUpper(item, "ORDNO", "BSSTATUS", "YardContract", "YardContractTel", "YardContractEmail", "MARKS", "DESCRIPTION", "CONSIGNEENAME", "SHIPPERNAME", "NOTIFYPARTYNAME");
|
|
|
|
|
JsonUtil.TrimFields(item);
|
|
|
|
|
|
|
|
|
|
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).FirstAsync();
|
|
|
|
|
var fdentity = item.Adapt<BookingOrder>();
|
|
|
|
|
if (fdmain != null)
|
|
|
|
|
{
|
|
|
|
|
var fdet = await _rep.Where(x => x.MBLNO == item.MBLNO && x.TenantId == UserManager.TENANT_ID && x.HBLNO == item.HBLNO && x.BSNO != fdmain.BSNO).FirstAsync();
|
|
|
|
|
if (fdet != null)
|
|
|
|
|
{
|
|
|
|
|
throw Oops.Bah($"当前提单号{fdet.MBLNO}_{fdet.HBLNO}已存在,请勿重复录入!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fdentity.Id = fdmain.Id;
|
|
|
|
|
fdentity.UpdatedUserName = user.Result.Name;
|
|
|
|
|
fdentity.UpdatedUserId = user.Result.Id;
|
|
|
|
|
fdentity.UpdatedTime = DateTime.Now;
|
|
|
|
|
await _rep.AsUpdateable(fdentity).IgnoreColumns(it => new
|
|
|
|
|
{
|
|
|
|
|
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<BookingCtn>();
|
|
|
|
|
ctnentity.BILLID = fdmain.Id;
|
|
|
|
|
await _repCtn.InsertAsync(ctnentity);
|
|
|
|
|
if (it.ctnDetailInputs != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (var it_ in it.ctnDetailInputs)
|
|
|
|
|
{
|
|
|
|
|
var ctndetail = it_.Adapt<BookingCtnDetail>();
|
|
|
|
|
ctndetail.CTNID = ctnentity.Id;
|
|
|
|
|
await _ctndetailrep.InsertAsync(ctndetail);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fdentity.CreatedUserId = user.Result.Id;
|
|
|
|
|
fdentity.CreatedUserName = user.Result.Name;
|
|
|
|
|
fdentity.CreatedTime = DateTime.Now;
|
|
|
|
|
fdentity.ParentId = entity.Id;
|
|
|
|
|
await _rep.InsertAsync(fdentity);
|
|
|
|
|
|
|
|
|
|
if (item.ctnInputs != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (var it in item.ctnInputs)
|
|
|
|
|
{
|
|
|
|
|
var ctnentity = item.Adapt<BookingCtn>();
|
|
|
|
|
ctnentity.BILLID = fdentity.Id;
|
|
|
|
|
await _repCtn.InsertAsync(ctnentity);
|
|
|
|
|
|
|
|
|
|
//这里保存有可能没有添加多品名,所有箱下没有货物信息
|
|
|
|
|
if (it.ctnDetailInputs != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (var dit in it.ctnDetailInputs)
|
|
|
|
|
{
|
|
|
|
|
var ctndetail = dit.Adapt<BookingCtnDetail>();
|
|
|
|
|
ctndetail.CTNID = ctnentity.Id;
|
|
|
|
|
await _ctndetailrep.InsertAsync(ctndetail);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (item.BookingEDIExt != null)
|
|
|
|
|
{
|
|
|
|
|
//检索EDI扩展
|
|
|
|
|
var ediExtEntity = _bookingEDIExt.FirstOrDefault(u => u.BookingId == fdmain.Id);
|
|
|
|
|
|
|
|
|
|
if (ediExtEntity == null)
|
|
|
|
|
{
|
|
|
|
|
//写入EDI扩展
|
|
|
|
|
ediExtEntity = item.BookingEDIExt.Adapt<BookingEDIExt>();
|
|
|
|
|
ediExtEntity.BookingId = fdmain.Id;
|
|
|
|
|
ediExtEntity.CreatedUserId = user.Result.Id;
|
|
|
|
|
ediExtEntity.CreatedUserName = user.Result.Name;
|
|
|
|
|
ediExtEntity.CreatedTime = DateTime.Now;
|
|
|
|
|
await _bookingEDIExt.InsertAsync(ediExtEntity);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//更新EDI扩展
|
|
|
|
|
var currEdiExtEntity = model.BookingEDIExt.Adapt<BookingEDIExt>();
|
|
|
|
|
|
|
|
|
|
currEdiExtEntity.Id = ediExtEntity.Id;
|
|
|
|
|
|
|
|
|
|
await _bookingEDIExt.AsUpdateable(currEdiExtEntity).IgnoreColumns(it => new
|
|
|
|
|
{
|
|
|
|
|
it.BookingId,
|
|
|
|
|
it.TenantId,
|
|
|
|
|
it.CreatedTime,
|
|
|
|
|
it.CreatedUserId,
|
|
|
|
|
it.CreatedUserName
|
|
|
|
|
}).ExecuteCommandAsync();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool fdflag = true;
|
|
|
|
|
long fdbid = 0;
|
|
|
|
|
foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(fdentity))
|
|
|
|
|
{
|
|
|
|
|
string name = descriptor.Name;
|
|
|
|
|
if (name == "TenantId" || name == "CreatedTime" || name == "UpdatedTime" || name == "CreatedUserId" || name == "CreatedUserName")
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
object value = descriptor.GetValue(fdentity);
|
|
|
|
|
var oldvalue = fdmain.GetType().GetProperty(name).GetValue(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 (fdflag)
|
|
|
|
|
{
|
|
|
|
|
////添加booking日志
|
|
|
|
|
fdbid = await _bookinglog.InsertReturnSnowflakeIdAsync(new BookingLog
|
|
|
|
|
{
|
|
|
|
|
Type = "Edit",
|
|
|
|
|
BookingId = fdentity.Id,
|
|
|
|
|
TenantId = Convert.ToInt64(UserManager.TENANT_ID),
|
|
|
|
|
CreatedTime = DateTime.Now,
|
|
|
|
|
CreatedUserId = user.Result.Id,
|
|
|
|
|
CreatedUserName = user.Result.Name,
|
|
|
|
|
});
|
|
|
|
|
fdflag = false;
|
|
|
|
|
}
|
|
|
|
|
await _bookinglogdetail.InsertReturnSnowflakeIdAsync(new BookingLogDetail
|
|
|
|
|
{
|
|
|
|
|
PId = fdbid,
|
|
|
|
|
Field = descriptor.Description,
|
|
|
|
|
OldValue = _oldvalue,
|
|
|
|
|
NewValue = _value,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return main.Id;
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 下载数据
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 其他
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 测试用
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpGet("/DataSync/Test"), ApiUser(ApiCode = "Test")]
|
|
|
|
|
public async Task<string> Test()
|
|
|
|
|
{
|
|
|
|
|
return $"当前用户:{UserManager.UserId} {UserManager.Name} ,当前租户:{UserManager.TENANT_ID} {UserManager.TENANT_NAME},管理员类型:{(UserManager.IsSuperAdmin ? "超级管理员" : (UserManager.IsTenantAdmin ? "租户管理员" : "普通用户"))}";
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
}
|