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