using Admin.NET.Core.Helper.ExcelHelper; using Furion; using Furion.DatabaseAccessor; using Furion.DatabaseAccessor.Extensions; using Furion.DependencyInjection; using Furion.DynamicApiController; using Furion.FriendlyException; using iWare.Wms.Application.Service.WmsBase.WmsPart.Dto; using iWare.Wms.Core; using iWare.Wms.Core.Enum; using Mapster; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Spire.Pdf.Graphics; using System.Linq.Dynamic.Core; namespace iWare.Wms.Application { /// /// 零件信息服务 /// [ApiDescriptionSettings("基础信息", Name = "WmsPart", Order = 100)] [Route("api/[Controller]")] public class WmsPartService : ControllerBase, IWmsPartService, IDynamicApiController, ITransient { private readonly IRepository _wmsPartRep; private readonly IRepository _wmsMaterialRep; private readonly IRepository _sysUser; public WmsPartService( IRepository wmsPartRep, IRepository wmsMaterialRep, IRepository sysUser ) { _wmsPartRep = wmsPartRep; _wmsMaterialRep = wmsMaterialRep; _sysUser = sysUser; } /// /// 分页查询零件信息 /// /// /// [HttpGet("page")] public async Task> Page([FromQuery] WmsPartSearch input) { //获取登录用户 var contextUser = App.User; var userName = contextUser.Claims.Single(x => x.Type == "Account").Value; //获取登录用户所属线别 var lineType = await _sysUser.DetachedEntities.Where(u => u.Account == userName).Select(u => u.LineType).FirstOrDefaultAsync(); var wmsParts = await _wmsPartRep.DetachedEntities .Where(!string.IsNullOrEmpty(input.PartCode), u => u.PartCode == input.PartCode) .Where(!string.IsNullOrEmpty(input.PartName), u => u.PartName == input.PartName) .Where(!string.IsNullOrEmpty(input.MaterialCode), u => u.MaterialCode == input.MaterialCode) .Where(lineType != null && lineType != LineTypeEnum.通用, u => u.LineType == lineType) //.Where(input.Status != null, u => u.Status == input.Status) .OrderBy(PageInputOrder.OrderBuilder(input)) .ProjectToType() .ToADPagedListAsync(input.PageNo, input.PageSize); return wmsParts; } /// /// 增加零件信息 /// /// /// [HttpPost("add")] public async Task Add([FromBody] AddWmsPartInput input) { var isExist = await _wmsPartRep.DetachedEntities.AnyAsync(u => u.PartCode == input.PartCode && u.LineType == input.LineType); if (isExist) { throw Oops.Oh("零件编号已存在"); } var wmsPart = input.Adapt(); await _wmsPartRep.InsertAsync(wmsPart); } /// /// 删除零件信息 /// /// /// [HttpPost("delete")] public async Task Delete([FromBody] DeleteWmsPartInput input) { var wmsPart = await _wmsPartRep.FirstOrDefaultAsync(u => u.Id == input.Id); await _wmsPartRep.DeleteAsync(wmsPart); } /// /// 更新零件信息 /// /// /// [HttpPost("edit")] public async Task Update([FromBody] UpdateWmsPartInput input) { var isExist = await _wmsPartRep.AnyAsync(u => u.Id == input.Id, false); if (!isExist) throw Oops.Oh(ErrorCode.D3000); isExist = await _wmsPartRep.DetachedEntities.AnyAsync(u => u.PartCode == input.PartCode && u.LineType == input.LineType && u.Id != input.Id); if (isExist) { throw Oops.Oh("零件编号已存在"); } var wmsPart = input.Adapt(); await _wmsPartRep.UpdateAsync(wmsPart,ignoreNullValues:true); } /// /// 获取零件信息 /// /// /// [HttpGet("detail")] public async Task Get([FromQuery] QueryeWmsPartInput input) { return (await _wmsPartRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt(); } /// /// 获取零件信息列表 /// /// /// [HttpGet("list")] public async Task List([FromQuery] WmsPartInput input) { //获取登录用户 var contextUser = App.User; var userName = contextUser.Claims.Single(x => x.Type == "Account").Value; //获取登录用户所属线别 var lineType = await _sysUser.DetachedEntities.Where(u => u.Account == userName).Select(u => u.LineType).FirstOrDefaultAsync(); //return await _wmsPartRep.DetachedEntities.ProjectToType().ToListAsync(); var list = await _wmsPartRep.DetachedEntities.Where(!string.IsNullOrEmpty(input.PartCode),u => u.PartCode.Contains(input.PartCode.Trim())) .Where(lineType != null && lineType != LineTypeEnum.通用, u => u.LineType == lineType).ToListAsync(); return list.Select(e => new WarePartOutputDto { Code = e.PartCode, Name = e.PartName,LineType = e.LineType?.ToString() }); } /// ///获取物料信息列表 /// /// [HttpGet("fkWmsMaterial")] public async Task FkWmsMaterialList() { var list = await _wmsMaterialRep.DetachedEntities.ToListAsync(); return list.Select(e => new { Code = e.MaterialNo, Name = e.MaterialName }); } /// /// 导出Excel /// /// 筛选条件 /// [HttpPost("download")] [AllowAnonymous] public async Task Download([FromBody] WmsPartSearch input) { var dataRecords = await _wmsPartRep.DetachedEntities .Where(!string.IsNullOrEmpty(input.PartCode), u => u.PartCode == input.PartCode) .Where(!string.IsNullOrEmpty(input.PartName), u => u.PartName == input.PartName) .Where(!string.IsNullOrEmpty(input.MaterialCode), u => u.MaterialCode == input.MaterialCode) //.Where(input.Status != null, u => u.Status == input.Status) .OrderBy(PageInputOrder.OrderBuilder(input)) .ProjectToType().ToListAsync(); var excelBaseResult = new Excel2003Result(dataRecords, "小车信息" + DateTime.Now.ToString("yyyyMMdd"), false, "生产记录"); return File(excelBaseResult.GetExcelStream(), "application/vnd.ms-excel"); } } }