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
|
{
|
/// <summary>
|
/// 零件信息服务
|
/// </summary>
|
[ApiDescriptionSettings("基础信息", Name = "WmsPart", Order = 100)]
|
[Route("api/[Controller]")]
|
public class WmsPartService : ControllerBase, IWmsPartService, IDynamicApiController, ITransient
|
{
|
private readonly IRepository<WmsPart,MasterDbContextLocator> _wmsPartRep;
|
private readonly IRepository<WmsMaterial, MasterDbContextLocator> _wmsMaterialRep;
|
private readonly IRepository<SysUser, MasterDbContextLocator> _sysUser;
|
|
public WmsPartService(
|
IRepository<WmsPart,MasterDbContextLocator> wmsPartRep,
|
IRepository<WmsMaterial, MasterDbContextLocator> wmsMaterialRep,
|
IRepository<SysUser, MasterDbContextLocator> sysUser
|
)
|
{
|
_wmsPartRep = wmsPartRep;
|
_wmsMaterialRep = wmsMaterialRep;
|
_sysUser = sysUser;
|
}
|
|
/// <summary>
|
/// 分页查询零件信息
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpGet("page")]
|
public async Task<PageResult<WmsPartOutput>> 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<WmsPartSearch>(input))
|
.ProjectToType<WmsPartOutput>()
|
.ToADPagedListAsync(input.PageNo, input.PageSize);
|
return wmsParts;
|
}
|
|
/// <summary>
|
/// 增加零件信息
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[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<WmsPart>();
|
await _wmsPartRep.InsertAsync(wmsPart);
|
}
|
|
/// <summary>
|
/// 删除零件信息
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpPost("delete")]
|
public async Task Delete([FromBody] DeleteWmsPartInput input)
|
{
|
var wmsPart = await _wmsPartRep.FirstOrDefaultAsync(u => u.Id == input.Id);
|
await _wmsPartRep.DeleteAsync(wmsPart);
|
}
|
|
/// <summary>
|
/// 更新零件信息
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[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<WmsPart>();
|
await _wmsPartRep.UpdateAsync(wmsPart,ignoreNullValues:true);
|
}
|
|
/// <summary>
|
/// 获取零件信息
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpGet("detail")]
|
public async Task<WmsPartOutput> Get([FromQuery] QueryeWmsPartInput input)
|
{
|
return (await _wmsPartRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsPartOutput>();
|
}
|
|
/// <summary>
|
/// 获取零件信息列表
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpGet("list")]
|
public async Task<dynamic> 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<WmsPartOutput>().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() });
|
}
|
|
/// <summary>
|
///获取物料信息列表
|
/// </summary>
|
/// <returns></returns>
|
[HttpGet("fkWmsMaterial")]
|
public async Task<dynamic> FkWmsMaterialList()
|
{
|
|
var list = await _wmsMaterialRep.DetachedEntities.ToListAsync();
|
return list.Select(e => new { Code = e.MaterialNo, Name = e.MaterialName });
|
}
|
|
/// <summary>
|
/// 导出Excel
|
/// </summary>
|
/// <param name="input">筛选条件</param>
|
/// <returns></returns>
|
[HttpPost("download")]
|
[AllowAnonymous]
|
public async Task<ActionResult> 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<WmsPartSearch>(input))
|
.ProjectToType<WmsPartExcel>().ToListAsync();
|
|
var excelBaseResult = new Excel2003Result<WmsPartExcel>(dataRecords, "小车信息" + DateTime.Now.ToString("yyyyMMdd"), false, "生产记录");
|
return File(excelBaseResult.GetExcelStream(), "application/vnd.ms-excel");
|
}
|
}
|
}
|