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.Extensions.Logging;
using Furion.FriendlyException;
using Myshipping.Application.Enum;
using System.ComponentModel;
using System.Collections.Generic;
using System.IO;
using MiniExcelLibs;
using NPOI.HSSF.UserModel;
using Myshipping.Core.Helper;
using NPOI.SS.UserModel;
using Furion;
using System;
using System.Web;
using System.Text;
using Myshipping.Application.ConfigOption;
using Myshipping.Core.Service;
namespace Myshipping.Application
{
///
/// 订舱货物状态服务
///
[ApiDescriptionSettings("Application", Name = "BookingGoodsStatusConfig", Order = 1)]
public class BookingGoodsStatusConfigService : IBookingGoodsStatusConfigService, IDynamicApiController, ITransient
{
private readonly SqlSugarRepository _rep;
private readonly ILogger _logger;
private readonly ISysCacheService _cache;
public BookingGoodsStatusConfigService(SqlSugarRepository rep, ILogger logger, ISysCacheService cache)
{
_rep = rep;
_logger = logger;
_cache = cache;
}
///
/// 分页查询订舱货物状态
///
///
///
[HttpGet("/BookingGoodsStatusConfig/page")]
public async Task Page([FromQuery] QueryBookingGoodsStatusConfigInput input)
{
//初次使用没有数据,进行初始化
InitGoodsStatusConfig(UserManager.UserId, UserManager.Name);
var entities = await _rep.AsQueryable()
.Where(m => m.CreatedUserId == UserManager.UserId)
.WhereIF(!string.IsNullOrEmpty(input.StatusName), u => u.StatusName.Contains(input.StatusName))
.OrderBy(m => m.Sort)
.ToPagedListAsync(input.PageNo, input.PageSize);
return entities.XnPagedResult();
}
///
/// 保存订舱货物状态
///
///
///
[HttpPost("/BookingGoodsStatusConfig/save")]
public async Task Save(SaveBookingGoodsStatusConfigInput input)
{
BookingGoodsStatusConfig model = null;
if (input.Id > 0)
{
if (_rep.Count(x => x.StatusName == input.StatusName && x.Id != input.Id) > 0)
{
throw Oops.Bah($"已存在相同名称的状态:{input.StatusName}");
}
model = _rep.FirstOrDefault(x => x.Id == input.Id);
input.Adapt(model);
await _rep.UpdateAsync(model);
}
else
{
if (_rep.Count(x => x.StatusName == input.StatusName) > 0)
{
throw Oops.Bah($"已存在相同名称的状态:{input.StatusName}");
}
model = input.Adapt();
await _rep.InsertAsync(model);
}
return model.Id;
}
///
/// 删除订舱货物状态
///
///
///
[HttpPost("/BookingGoodsStatusConfig/delete")]
public async Task Delete(long id)
{
var entity = await _rep.FirstOrDefaultAsync(u => u.Id == id);
entity.IsDeleted = true;
await _rep.UpdateAsync(entity);
}
///
/// 获取订舱货物状态
///
///
///
[HttpGet("/BookingGoodsStatusConfig/detail")]
public async Task Get(long id)
{
return await _rep.FirstOrDefaultAsync(u => u.Id == id);
}
///
/// 初始化当前用户的货物状态配置
///
[NonAction]
public async void InitGoodsStatusConfig(long userid, string username)
{
var list = _rep.AsQueryable().Where(x => x.CreatedUserId == userid).ToList();
//2023年6月1日,修改为:非一次性初始化,每次都检查是否有新的统一配置的货物状态,如果有,给当前人增加上
//if (_rep.AsQueryable().Count(x => x.CreatedUserId == userid) == 0)
//{
var dicData = await _cache.GetAllDictData();
var listGoodsStatus = dicData.Where(x => x.TypeCode == "booking_goods_status").ToList();
listGoodsStatus.ForEach(async itm =>
{
if (list.Count(x => x.SystemCode == itm.Code) == 0) //找不到系统编码的,插入
{
await _rep.InsertAsync(new BookingGoodsStatusConfig()
{
StatusName = itm.Value,
Sort = itm.Sort,
SystemCode = itm.Code,
CreatedUserId = userid,
TenantId = UserManager.TENANT_ID,
CreatedUserName = username,
CreatedTime = DateTime.Now
});
}
});
//}
}
}
}