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 }); } }); //} } } }