新增库存表模块:含实体、DTO、Service及API接口

本次提交实现了库存表(MmInventory)模块的全套后端代码,包括:
- 新增 MmInventoryController,提供库存表的增删改查(CRUD)API,集成权限与日志注解;
- 新增 MmInventory 实体类,定义库存表数据库字段映射;
- 新增 MmInventoryDto、MmInventoryQueryDto 用于数据传输和分页查询,含字段校验;
- 新增 IMmInventoryService 接口及其实现 MmInventoryService,支持库存表的业务操作和动态查询。

该提交为库存管理功能提供了完整的后端支撑。
This commit is contained in:
2025-12-24 19:09:42 +08:00
parent 04e086b9ea
commit 8ef5202077
5 changed files with 339 additions and 0 deletions

View File

@@ -0,0 +1,102 @@
using Microsoft.AspNetCore.Mvc;
using DOAN.Model.BZFM.Dto;
using DOAN.Model.BZFM;
using DOAN.Service.BZFM.IBZFMService;
using DOAN.Admin.WebApi.Filters;
//创建时间2025-12-24
namespace DOAN.Admin.WebApi.Controllers.BZFM
{
/// <summary>
/// 库存表
/// </summary>
[Verify]
[Route("BZFM/MmInventory")]
public class MmInventoryController : BaseController
{
/// <summary>
/// 库存表接口
/// </summary>
private readonly IMmInventoryService _MmInventoryService;
public MmInventoryController(IMmInventoryService MmInventoryService)
{
_MmInventoryService = MmInventoryService;
}
/// <summary>
/// 查询库存表列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
[HttpGet("list")]
[ActionPermissionFilter(Permission = "mminventory:list")]
public IActionResult QueryMmInventory([FromQuery] MmInventoryQueryDto parm)
{
var response = _MmInventoryService.GetList(parm);
return SUCCESS(response);
}
/// <summary>
/// 查询库存表详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
[HttpGet("{Id}")]
[ActionPermissionFilter(Permission = "mminventory:query")]
public IActionResult GetMmInventory(int Id)
{
var response = _MmInventoryService.GetInfo(Id);
var info = response.Adapt<MmInventoryDto>();
return SUCCESS(info);
}
/// <summary>
/// 添加库存表
/// </summary>
/// <returns></returns>
[HttpPost]
[ActionPermissionFilter(Permission = "mminventory:add")]
[Log(Title = "库存表", BusinessType = BusinessType.INSERT)]
public IActionResult AddMmInventory([FromBody] MmInventoryDto parm)
{
var modal = parm.Adapt<MmInventory>().ToCreate(HttpContext);
var response = _MmInventoryService.AddMmInventory(modal);
return SUCCESS(response);
}
/// <summary>
/// 更新库存表
/// </summary>
/// <returns></returns>
[HttpPut]
[ActionPermissionFilter(Permission = "mminventory:edit")]
[Log(Title = "库存表", BusinessType = BusinessType.UPDATE)]
public IActionResult UpdateMmInventory([FromBody] MmInventoryDto parm)
{
var modal = parm.Adapt<MmInventory>().ToUpdate(HttpContext);
var response = _MmInventoryService.UpdateMmInventory(modal);
return ToResponse(response);
}
/// <summary>
/// 删除库存表
/// </summary>
/// <returns></returns>
[HttpPost("delete/{ids}")]
[ActionPermissionFilter(Permission = "mminventory:delete")]
[Log(Title = "库存表", BusinessType = BusinessType.DELETE)]
public IActionResult DeleteMmInventory([FromRoute]string ids)
{
var idArr = Tools.SplitAndConvert<int>(ids);
return ToResponse(_MmInventoryService.Delete(idArr));
}
}
}

View File

@@ -0,0 +1,49 @@
namespace DOAN.Model.BZFM.Dto
{
/// <summary>
/// 库存表查询对象
/// </summary>
public class MmInventoryQueryDto : PagerInfo
{
}
/// <summary>
/// 库存表输入输出对象
/// </summary>
public class MmInventoryDto
{
[Required(ErrorMessage = "主键ID不能为空")]
public int Id { get; set; }
[Required(ErrorMessage = "物料编码不能为空")]
public string MaterialCode { get; set; }
[Required(ErrorMessage = "仓库编码不能为空")]
public string WarehouseCode { get; set; }
public string WarehouseName { get; set; }
[Required(ErrorMessage = "库位编码不能为空")]
public string LocationCode { get; set; }
public string LocationName { get; set; }
public string BatchNo { get; set; }
public decimal CurrentQty { get; set; }
public string Unit { get; set; }
public DateTime? ProductionDate { get; set; }
public DateTime? ExpiryDate { get; set; }
public DateTime? LastUpdatedTime { get; set; }
public DateTime? CreatedTime { get; set; }
}
}

View File

@@ -0,0 +1,88 @@
namespace DOAN.Model.BZFM
{
/// <summary>
/// 库存表
/// </summary>
[SugarTable("mm_inventory")]
public class MmInventory
{
/// <summary>
/// 主键ID
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 物料编码
/// </summary>
[SugarColumn(ColumnName = "material_code")]
public string MaterialCode { get; set; }
/// <summary>
/// 仓库编码
/// </summary>
[SugarColumn(ColumnName = "warehouse_code")]
public string WarehouseCode { get; set; }
/// <summary>
/// 仓库名称
/// </summary>
[SugarColumn(ColumnName = "warehouse_name")]
public string WarehouseName { get; set; }
/// <summary>
/// 库位编码
/// </summary>
[SugarColumn(ColumnName = "location_code")]
public string LocationCode { get; set; }
/// <summary>
/// 库位名称
/// </summary>
[SugarColumn(ColumnName = "location_name")]
public string LocationName { get; set; }
/// <summary>
/// 批次号
/// </summary>
[SugarColumn(ColumnName = "batch_no")]
public string BatchNo { get; set; }
/// <summary>
/// 当前库存量
/// </summary>
[SugarColumn(ColumnName = "current_qty")]
public decimal CurrentQty { get; set; }
/// <summary>
/// 计量单位
/// </summary>
public string Unit { get; set; }
/// <summary>
/// 生产日期
/// </summary>
[SugarColumn(ColumnName = "production_date")]
public DateTime? ProductionDate { get; set; }
/// <summary>
/// 有效期至
/// </summary>
[SugarColumn(ColumnName = "expiry_date")]
public DateTime? ExpiryDate { get; set; }
/// <summary>
/// 最后更新时间
/// </summary>
[SugarColumn(ColumnName = "last_updated_time")]
public DateTime? LastUpdatedTime { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[SugarColumn(ColumnName = "created_time")]
public DateTime? CreatedTime { get; set; }
}
}

View File

@@ -0,0 +1,21 @@
using DOAN.Model.BZFM.Dto;
using DOAN.Model.BZFM;
namespace DOAN.Service.BZFM.IBZFMService
{
/// <summary>
/// 库存表service接口
/// </summary>
public interface IMmInventoryService : IBaseService<MmInventory>
{
PagedInfo<MmInventoryDto> GetList(MmInventoryQueryDto parm);
MmInventory GetInfo(int Id);
MmInventory AddMmInventory(MmInventory parm);
int UpdateMmInventory(MmInventory parm);
}
}

View File

@@ -0,0 +1,79 @@
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using DOAN.Model.BZFM.Dto;
using DOAN.Model.BZFM;
using DOAN.Repository;
using DOAN.Service.BZFM.IBZFMService;
namespace DOAN.Service.BZFM
{
/// <summary>
/// 库存表Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IMmInventoryService), ServiceLifetime = LifeTime.Transient)]
public class MmInventoryService : BaseService<MmInventory>, IMmInventoryService
{
/// <summary>
/// 查询库存表列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<MmInventoryDto> GetList(MmInventoryQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
.Where(predicate.ToExpression())
.ToPage<MmInventory, MmInventoryDto>(parm);
return response;
}
/// <summary>
/// 获取详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public MmInventory GetInfo(int Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
.First();
return response;
}
/// <summary>
/// 添加库存表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public MmInventory AddMmInventory(MmInventory model)
{
return Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改库存表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int UpdateMmInventory(MmInventory model)
{
return Update(model, true);
}
/// <summary>
/// 查询导出表达式
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
private static Expressionable<MmInventory> QueryExp(MmInventoryQueryDto parm)
{
var predicate = Expressionable.Create<MmInventory>();
return predicate;
}
}
}