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;
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;
public BookingVesselInfoService(SqlSugarRepository rep, ILogger logger, SqlSugarRepository order, ISysCacheService sysCacheService, IBookingOrderService bookingorderservice)
{
_sysCacheService = sysCacheService;
_rep = rep;
_order = order;
_bookingorderservice = bookingorderservice;
this._logger = logger;
}
/////
///// 获取列表
/////
/////
//[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
})
.ExecuteCommandAsync();
}
if ((dto.ETA != null || dto.ETD != null || dto.ATD != null) && !string.IsNullOrEmpty(old.Vessel) && !string.IsNullOrEmpty(old.Voyno) && !string.IsNullOrEmpty(old.CARRIERID))
{
var order = await _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).ToListAsync();
bool issend = false;
if (order != null)
{
_logger.LogInformation("手动更新船期:" + order.ToJsonString());
foreach (var it in order)
{
bool flag = false;
if (it.StartETA != dto.ETA)
{
flag = true;
it.StartETA = dto.ETA;
}
if (it.VESSEL != dto.Vessel)
{
flag = true;
it.VESSEL = dto.Vessel;
}
if (it.VOYNO != dto.Voyno)
{
flag = true;
it.VOYNO = dto.Voyno;
}
if (it.VOYNOINNER != 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)
{
flag = true;
it.YgtETD = dto.YgtETD;
}
if (it.ETD != dto.ETD)
{
flag = true;
it.ETD = dto.ETD;
}
if (it.ATD != dto.ATD && dto.ATD != null)
{
flag = true;
it.ATD = dto.ATD;
}
if (flag)
{
issend = true;
await _order.AsUpdateable(it).IgnoreColumns().ExecuteCommandAsync();
}
}
if (issend)
{
var ids = order.Where(x => x.ParentId == 0).Select(x => x.Id).ToArray();
if (ids.Count() > 0)
{
await _bookingorderservice.SendBookingOrder(ids);
}
}
}
}
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);
//}
}
}