diff --git a/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs b/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs index 1823f0af..257b8abb 100644 --- a/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs +++ b/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs @@ -329,6 +329,266 @@ namespace Myshipping.Application return list; } + /// + /// 立即返回保存信息 + /// + /// + /// + [HttpPost("/BookingOrder/Save")] + public async Task Save(BookingOrderDto input){ + + if (input == null) + { + throw Oops.Bah("请传入正常数据!"); + } + JsonUtil.PropToUpper(input, "ORDNO", "BSSTATUS", "YardContract", "YardContractTel", "YardContractEmail", "MARKS", "DESCRIPTION", "CONSIGNEENAME", "SHIPPERNAME", "NOTIFYPARTYNAME"); + JsonUtil.TrimFields(input); + if (input.ctnInputs != null) + { + var groupList = input.ctnInputs.Where(x => x.CTNNUM > 0).GroupBy(c => c.CTNALL).Select(g => $"{g.Key}*{g.Sum(gg => gg.CTNNUM)}"); + input.CNTRTOTAL = string.Join(" / ", groupList); + } + if (!string.IsNullOrWhiteSpace(input.MBLNO)) + { + var et = await _rep.Where(x => x.MBLNO == input.MBLNO && x.TenantId == UserManager.TENANT_ID && x.HBLNO == input.HBLNO && x.ParentId == input.ParentId && x.Id != input.Id).FirstAsync(); + if (et != null) + { + + throw Oops.Bah("当前提单号已存在,请勿重复录入!"); + + } + } + var entity = input.Adapt(); + if (input.Id == 0) + { + entity.BOOKINGNO = Yitter.IdGenerator.YitIdHelper.NextId().ToString(); + + await _rep.InsertAsync(entity); + if (input.ctnInputs != null) + { + foreach (var item in input.ctnInputs) + { + var ctnentity = item.Adapt(); + ctnentity.BILLID = entity.Id; + await _repCtn.InsertAsync(ctnentity); + + //这里保存有可能没有添加多品名,所有箱下没有货物信息 + if (item.ctnDetailInputs != null) + { + foreach (var it in item.ctnDetailInputs) + { + var ctndetail = it.Adapt(); + ctndetail.CTNID = ctnentity.Id; + await _ctndetailrep.InsertAsync(ctndetail); + } + } + } + } + + if (input.BookingEDIExt != null) + { + //写入EDI扩展 + var ediExt = input.BookingEDIExt.Adapt(); + + ediExt.BookingId = entity.Id; + + await _bookingEDIExt.InsertAsync(ediExt); + } + + ////添加booking日志 + await _bookinglog.InsertAsync(new BookingLog + { + Type = "Add", + BookingId = entity.Id, + TenantId = Convert.ToInt64(UserManager.TENANT_ID), + CreatedTime = DateTime.Now, + CreatedUserId = UserManager.UserId, + CreatedUserName = UserManager.Name + }); + } + else + { + var mlist = await _rep.AsQueryable().Filter(null, true).Where(x => x.Id == input.Id).FirstAsync(); + await _rep.AsUpdateable(entity).IgnoreColumns(it => new + { + it.ParentId, + it.TenantId, + it.CreatedTime, + it.CreatedUserId, + it.CreatedUserName, + it.TenantName, + it.IsDeleted, + it.BOOKINGNO + }).ExecuteCommandAsync(); + var ctnlist = await _repCtn.AsQueryable().Where(x => x.BILLID == input.Id).Select(x => x.Id).ToListAsync(); + await _repCtn.DeleteAsync(x => x.BILLID == input.Id); + await _ctndetailrep.DeleteAsync(x => ctnlist.Contains((long)x.CTNID)); + if (input.ctnInputs != null) + { + foreach (var item in input.ctnInputs) + { + var ctnentity = item.Adapt(); + ctnentity.BILLID = entity.Id; + await _repCtn.InsertAsync(ctnentity); + if (item.ctnDetailInputs != null) + { + foreach (var it in item.ctnDetailInputs) + { + var ctndetail = it.Adapt(); + ctndetail.CTNID = ctnentity.Id; + await _ctndetailrep.InsertAsync(ctndetail); + } + } + } + } + + if (input.BookingEDIExt != null) + { + //检索EDI扩展 + var ediExt = _bookingEDIExt.FirstOrDefault(u => u.BookingId == input.Id); + + if (ediExt == null) + { + //写入EDI扩展 + ediExt = input.BookingEDIExt.Adapt(); + ediExt.BookingId = entity.Id; + + await _bookingEDIExt.InsertAsync(ediExt); + } + else + { + //更新EDI扩展 + var currEdiExtEntity = input.BookingEDIExt.Adapt(); + + currEdiExtEntity.Id = ediExt.Id; + currEdiExtEntity.BookingId = ediExt.BookingId; + + 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 = mlist.GetType().GetProperty(name).GetValue(mlist, 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 = UserManager.UserId, + CreatedUserName = UserManager.Name + }); + flag = false; + } + await _bookinglogdetail.InsertReturnSnowflakeIdAsync(new BookingLogDetail + { + PId = bid, + Field = descriptor.Description, + OldValue = _oldvalue, + NewValue = _value, + }); + } + } + + } + + var Id = entity.Id; + BookingOrderOutput ordOut = new BookingOrderOutput(); + var main = await _rep.FirstOrDefaultAsync(u => u.Id == Id); + if (main != null) + { + ordOut = main.Adapt(); + var ctnlist = await _repCtn.AsQueryable().Where(x => x.BILLID == Id).ToListAsync(); + var ctninput = ctnlist.Adapt>(); + foreach (var item in ctninput) + { + var ctndetaillist = await _ctndetailrep.AsQueryable().Where(x => x.CTNID == item.Id).ToListAsync(); + item.ctnDetailInputs = ctndetaillist.Adapt>(); + } + ordOut.ctnInputs = ctninput; + + var ordUrl = _repOrderUrl.FirstOrDefault(x => x.BookingId == Id); + if (ordUrl != null) + { + ordOut.Link = new BookingOrderUrlOutput() + { + LinkUrlTxxp = ordUrl.UrlTxxp, + LinkUrlVgm = ordUrl.UrlVgm, + LinkUrlVmgSi = ordUrl.UrlVgmSi, + }; + } + } + List HbList = new List(); + var _hblist = await _rep.AsQueryable().Where(x => x.ParentId == Id).ToListAsync(); + if (_hblist != null) + { + HbList = _hblist.Adapt>(); + foreach (var item in HbList) + { + var ctnlist = await _repCtn.AsQueryable().Where(x => x.BILLID == item.Id).ToListAsync(); + var ctninput = ctnlist.Adapt>(); + foreach (var it in ctninput) + { + var ctndetaillist = await _ctndetailrep.AsQueryable().Where(x => x.CTNID == it.Id).ToListAsync(); + it.ctnDetailInputs = ctndetaillist.Adapt>(); + } + item.ctnInputs = ctninput; + //检索EDI扩展 + var ediExt = _bookingEDIExt.FirstOrDefault(u => u.BookingId == item.Id); + + if (ediExt != null) + { + item.BookingEDIExt = ediExt.Adapt(); + } + } + ordOut.HbList = HbList; + } + + //检索EDI扩展 + var ediExtEntity = _bookingEDIExt.FirstOrDefault(u => u.BookingId == Id); + + if (ediExtEntity != null) + { + ordOut.BookingEDIExt = ediExtEntity.Adapt(); + } + + return ordOut; + } + + + [HttpPost("/BookingOrder/AddOrUpdate")] public async Task AddOrUpdate(BookingOrderDto Dto) @@ -337,6 +597,7 @@ namespace Myshipping.Application { throw Oops.Bah("请传入正常数据!"); } + if (Dto.Id == 0) { return await Add(Dto); @@ -357,31 +618,6 @@ namespace Myshipping.Application [HttpPost("/BookingOrder/Add")] public async Task Add(BookingOrderDto input) { - - //if (input.ParentId == 0) - //{ - // //if (!string.IsNullOrWhiteSpace(input.HBLNO)) - // //{ - // // throw Oops.Bah("主单不需要填写分单号"); - // //} - // if (string.IsNullOrWhiteSpace(input.MBLNO)) - // { - // throw Oops.Bah("请填写提单号!"); - // } - //} - //else - //{ - // if (string.IsNullOrWhiteSpace(input.MBLNO)) - // { - // throw Oops.Bah("请填写主提单号"); - // } - // if (string.IsNullOrWhiteSpace(input.HBLNO)) - // { - // throw Oops.Bah("请填写分提单号"); - // } - //} - - JsonUtil.PropToUpper(input, "ORDNO", "BSSTATUS", "YardContract", "YardContractTel", "YardContractEmail", "MARKS", "DESCRIPTION", "CONSIGNEENAME", "SHIPPERNAME", "NOTIFYPARTYNAME"); JsonUtil.TrimFields(input); if (input.ctnInputs != null) @@ -478,28 +714,7 @@ namespace Myshipping.Application [HttpPost("/BookingOrder/Update")] public async Task Update(BookingOrderDto input) { - //if (input.ParentId == 0) - //{ - // //if (!string.IsNullOrWhiteSpace(input.HBLNO)) - // //{ - // // throw Oops.Bah("主单不需要填写分单号"); - // //} - // if (string.IsNullOrWhiteSpace(input.MBLNO)) - // { - // throw Oops.Bah("请填写提单号!"); - // } - //} - //else - //{ - // if (string.IsNullOrWhiteSpace(input.MBLNO)) - // { - // throw Oops.Bah("请填写主提单号"); - // } - // if (string.IsNullOrWhiteSpace(input.HBLNO)) - // { - // throw Oops.Bah("请填写分提单号"); - // } - //} + JsonUtil.PropToUpper(input, "ORDNO", "BSSTATUS", "YardContract", "YardContractTel", "YardContractEmail", "MARKS", "DESCRIPTION", "CONSIGNEENAME", "SHIPPERNAME", "NOTIFYPARTYNAME"); JsonUtil.TrimFields(input); if (input.ctnInputs != null)