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 Furion.FriendlyException; using System.Collections.Generic; using System; using Myshipping.Core.Service; using Myshipping.Core.Entity; using Microsoft.Extensions.Logging; using Microsoft.AspNetCore.SignalR; using Furion; namespace Myshipping.Application { /// /// 船期手工维护模块 /// [ApiDescriptionSettings("Application", Name = "BookingVesselInfo", Order = 1)] public class BookingVesselInfoService : IBookingVesselInfoService, IDynamicApiController, ITransient { private readonly SqlSugarRepository _rep; private readonly ISysCacheService _sysCacheService; private readonly IBookingOrderService _bookingorderservice; private readonly SqlSugarRepository _order; private readonly ILogger _logger; private readonly IHubContext _chatHubContext; public BookingVesselInfoService(SqlSugarRepository rep, ILogger logger, SqlSugarRepository order, ISysCacheService sysCacheService, IBookingOrderService bookingorderservice, IHubContext chatHubContext) { _sysCacheService = sysCacheService; _rep = rep; _order = order; _bookingorderservice = bookingorderservice; this._logger = logger; this._chatHubContext = chatHubContext; } ///// ///// 获取列表 ///// ///// //[HttpGet("/DjyVesselInfoService/GetListPage")] //public async Task GetListPage([FromQuery] string CARRIER, string Vessel, string VoynoInside, string Voyno, DateTime? StartETD, DateTime? EndETD) //{ // return await _rep.AsQueryable().Filter(null, true).Where(x => x.TenantId == UserManager.TENANT_ID) // .WhereIF(!string.IsNullOrWhiteSpace(CARRIER), x => x.CARRIER.Contains(CARRIER)) // .WhereIF(!string.IsNullOrWhiteSpace(Vessel), x => x.Vessel.Contains(Vessel)) // .WhereIF(!string.IsNullOrWhiteSpace(VoynoInside), x => x.VoynoInside.Contains(VoynoInside)) // .WhereIF(!string.IsNullOrWhiteSpace(Voyno), x => x.Voyno.Contains(Voyno)) // .WhereIF(StartETD != null, x => x.ETD >= StartETD) // .WhereIF(EndETD != null, x => x.ETD <= EndETD) // .ToListAsync(); //} ///// ///// 获取列表分页 ///// ///// ///// //[HttpGet("/DjyVesselInfoService/page")] //public async Task GetListPage([FromQuery] QueryDjyVesselInfoInput input) //{ // return await _rep.AsQueryable().Filter(null, true).Where(x => x.TenantId == UserManager.TENANT_ID) // .WhereIF(!string.IsNullOrWhiteSpace(input.CARRIER), x => x.CARRIER.Contains(input.CARRIER)) // .WhereIF(!string.IsNullOrWhiteSpace(input.Vessel), x => x.Vessel.Contains(input.Vessel)) // .WhereIF(!string.IsNullOrWhiteSpace(input.VoynoInside), x => x.VoynoInside.Contains(input.VoynoInside)) // .WhereIF(!string.IsNullOrWhiteSpace(input.Voyno), x => x.Voyno.Contains(input.Voyno)) // .WhereIF(input.StartETD != null, x => x.ETD >= input.StartETD) // .WhereIF(input.EndETD != null, x => x.ETD <= input.EndETD) // .ToPagedListAsync(input.PageNo, input.PageSize); //} ///// ///// 删除 ///// ///// ///// //[HttpGet("/DjyVesselInfoService/Delete")] //public async Task Delete(string Ids) //{ // var arr = Ids.Split(","); // if (arr.Count() > 0) // { // foreach (var ar in arr) // { // long Id = Convert.ToInt64(ar); // var entity = await _rep.FirstOrDefaultAsync(u => u.Id == Id); // await _rep.DeleteAsync(entity); // } // } //} /// /// 新增编辑 /// /// /// [HttpPost("/BookingVesselInfo/AddOrUpdate")] public async Task AddOrUpdate(DjyVesselInfoDto dto) { DjyVesselInfo old = new DjyVesselInfo(); if (dto == null) { throw Oops.Bah("请传入数据!"); } if (dto.Id == 0) { var entity = dto.Adapt(); await _rep.InsertAsync(entity); old = entity; } else { old = _rep.FirstOrDefault(x => x.Id == dto.Id); var entity = dto.Adapt(); await _rep.AsUpdateable(entity) .UpdateColumns(x => new { x.Vessel, x.Voyno, x.PortLoading, x.PortTransit, x.PortDischarge, x.PortLoadingId, x.PortTransitId, x.PortDischargeId, x.ETD, x.YgtETD, x.ClosingDate, x.ETA, x.Yard, x.YardCode, x.ATD, x.CARRIER, x.CARRIERID, x.VoynoInside, x.CloseDocTime }) .ExecuteCommandAsync(); } if ((dto.ETA != null || dto.ETD != null || dto.ATD != null) && !string.IsNullOrEmpty(old.Vessel) && !string.IsNullOrEmpty(old.Voyno) && !string.IsNullOrEmpty(old.CARRIERID)) { var query = _order.AsQueryable() .Filter(null, true) .Where(x => x.TenantId == UserManager.TENANT_ID && x.IsDeleted == false && x.VESSEL == old.Vessel && x.VOYNO == old.Voyno && x.CARRIERID == old.CARRIERID); if (App.Configuration["RunType"] != CommonConst.RUN_TYPE_HECHUAN) { query.WhereIF(!string.IsNullOrEmpty(old.PortLoadingId), x => x.PORTLOADID == old.PortLoadingId); } var order = await query.ToListAsync(); bool issend = false; if (order != null) { _logger.LogInformation("手动更新船期:" + order.ToJsonString()); foreach (var it in order) { var oldOrder = it.Adapt(); bool flag = false; if (it.StartETA != dto.ETA && dto.ETA != null) { flag = true; it.StartETA = dto.ETA; } if (it.VESSEL != dto.Vessel && !string.IsNullOrEmpty(dto.Vessel)) { flag = true; it.VESSEL = dto.Vessel; } if (it.VOYNO != dto.Voyno && !string.IsNullOrEmpty(dto.Voyno)) { flag = true; it.VOYNO = dto.Voyno; } if (it.VOYNOINNER != dto.VoynoInside && !string.IsNullOrEmpty(dto.VoynoInside)) { flag = true; it.VOYNOINNER = dto.VoynoInside; } //if (it.CARRIERID != dto.CARRIERID) //{ // flag = true; // it.CARRIERID = dto.CARRIERID; //} //if (it.CARRIER != dto.CARRIER) //{ // flag = true; // it.CARRIER = dto.CARRIER; //} if (it.YgtETD != dto.YgtETD && dto.YgtETD != null) { flag = true; it.YgtETD = dto.YgtETD; } if (it.ETD != dto.ETD && dto.ETD != null) { flag = true; it.ETD = dto.ETD; } if (it.ATD != dto.ATD && dto.ATD != null) { flag = true; it.ATD = dto.ATD; } if (dto.ClosingDate != it.CLOSINGDATE && dto.ClosingDate != null) { flag = true; it.CLOSINGDATE = dto.ClosingDate; } if (dto.CloseDocTime != it.CLOSEDOCDATE && dto.CloseDocTime != null) { flag = true; it.CLOSEDOCDATE = dto.CloseDocTime; } if (flag) { issend = true; await _order.AsUpdateable(it).IgnoreColumns().ExecuteCommandAsync(); await _bookingorderservice.SaveLog(it, oldOrder, "手动更新船期"); } } if (issend) { var ids = order.Where(x => x.ParentId == 0).Select(x => x.Id).ToArray(); if (ids.Count() > 0) { await _bookingorderservice.SendBookingOrder(ids); } } } } //通知前端更新缓存 await _chatHubContext.Clients.All.NotifyVesselChange(); return dto.Id; } ///// ///// 下拉列表 ///// ///// //[HttpGet("/DjyVesselInfoService/GetList")] //public async Task GetList([FromQuery] string CarrierID, DateTime? ETD = null, string PortDischargeId = null, string KeyWord = "") //{ // //获取船名 // List list = await _sysCacheService.GetAllCodeVessel(); // var tlist = await _rep.AsQueryable().Filter(null, true).WhereIF(!string.IsNullOrWhiteSpace(KeyWord), x => x.Vessel.StartsWith(KeyWord.ToUpper())). // WhereIF(!string.IsNullOrEmpty(PortDischargeId), x => x.PortDischargeId == PortDischargeId). // WhereIF(ETD != null, x => Convert.ToDateTime(x.ETD).ToString("yyyy-MM-dd") == Convert.ToDateTime(ETD).ToString("yyyy-MM-dd")).//船期关联船名 // WhereIF(ETD == null, x => x.ETD > DateTime.Now.AddDays(-7)).//领导需求当前日期7天之前 // WhereIF(!string.IsNullOrEmpty(CarrierID), x => x.CARRIERID == CarrierID || x.CARRIERID == null || x.CARRIERID == ""). // Where(x => x.TenantId == UserManager.TENANT_ID && x.CARRIERID != null && x.CARRIERID != ""). // Select(x => new // { // Voyno = x.Voyno, // VoynoInside = x.VoynoInside, // Vessel = x.Vessel, // ETD = x.ETD == null ? "" : Convert.ToDateTime(x.ETD).ToString("yyyy-MM-dd"), // ATD = x.ATD == null ? "" : Convert.ToDateTime(x.ATD).ToString("yyyy-MM-dd"), // PortDischargeId = x.PortDischargeId, // PortDischarge = x.PortDischarge // }).Take(20). // ToListAsync(); // if (_sysCacheService.GetAllTenantParam().Result.Where(x => x.TenantId == UserManager.TENANT_ID && x.ParaCode == "VESSEL_FROM_CONFIG_ONLY").Select(x => x.ItemCode).FirstOrDefault() == "YES" // ) // { // return tlist; // } // var ves = tlist.Select(x => x.Vessel).ToList(); // var all = list.WhereIF(!string.IsNullOrWhiteSpace(KeyWord), x => x.Name.StartsWith(KeyWord.ToUpper())). // Select(x => new // { // Voyno = "", // VoynoInside = "", // Vessel = x.Name, // ETD = "", // ATD = "", // PortDischargeId = "", // PortDischarge = "" // }).Take(20).ToList(); // foreach (var item in ves) // { // all.RemoveAll(x => x.Vessel.StartsWith(item)); // } // return tlist.Union(all); //} } }