物料清单管理

This commit is contained in:
sunny 2025-11-11 08:26:20 +08:00
parent dadf5b83e3
commit 244ca30b5e
11 changed files with 359 additions and 315 deletions

View File

@ -1,67 +0,0 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using RIZO.Service.Business;
using RIZO.Model.Business;
namespace RIZO.Admin.WebApi.Controllers.Business
{
[ApiController]
[Route("api/[controller]/[action]")]
public class MaterialController : ControllerBase
{
private readonly MaterialService _service;
public MaterialController(MaterialService service)
{
_service = service;
}
//获取所有的物料清单
[HttpGet]
public ActionResult<List<MaterialInfo>> GetMaterials([FromQuery] bool includeDeleted = false)//默认false一般不用用户传。
{
return _service.GetAllMaterials(includeDeleted);
}
//根据物料编码查询物料清单
[HttpGet]
public ActionResult<MaterialInfo> GetMaterial(string material_code)
{
var material = _service.GetMaterialByMaterialCode(material_code);
if (material == null) return NotFound();//如果查询结果为空则返回not found
return material;
}
//新增物料清单数据
[HttpPost]
public IActionResult AddMaterial([FromBody] MaterialInfo material)
{
_service.AddMaterial(material); // 假设创建人为admin
return Ok();
}
//批量新增物料清单数据
[HttpPost]
public IActionResult AddMaterials([FromBody] List<MaterialInfo> materials)
{
_service.AddMaterials(materials);
return Ok();
}
//修改物料清单数据
[HttpPut]
public IActionResult UpdateMaterial([FromBody] MaterialInfo material)
{
_service.UpdateMaterial(material);
return Ok();
}
//逻辑删除
[HttpDelete]
public IActionResult DeleteMaterial(int id, MaterialInfo material)
{
_service.DeleteMaterial(id, material);
return Ok();
}
}
}

View File

@ -0,0 +1,101 @@
using Microsoft.AspNetCore.Mvc;
using RIZO.Model.Business.Dto;
using RIZO.Model.Business;
using RIZO.Service.Business.IBusinessService;
//创建时间2025-11-05
namespace RIZO.Admin.WebApi.Controllers.Business
{
/// <summary>
/// 物料表
/// </summary>
[AllowAnonymous] //先跳过验证
[Route("business/MaterialInfo")]
public class MaterialInfoController : BaseController
{
/// <summary>
/// 物料表接口
/// </summary>
private readonly IMaterialInfoService _MaterialInfoService;
public MaterialInfoController(IMaterialInfoService MaterialInfoService)
{
_MaterialInfoService = MaterialInfoService;
}
/// <summary>
/// 查询物料表列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
[HttpGet("list")]
[ActionPermissionFilter(Permission = "materialinfo:list")]
public IActionResult QueryMaterialInfo([FromQuery] MaterialInfoQueryDto parm)
{
var response = _MaterialInfoService.GetList(parm);
return SUCCESS(response);
}
/// <summary>
/// 查询物料表详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
[HttpGet("{Id}")]
[ActionPermissionFilter(Permission = "materialinfo:query")]
public IActionResult GetMaterialInfo(long Id)
{
var response = _MaterialInfoService.GetInfo(Id);
var info = response.Adapt<MaterialInfoDto>();
return SUCCESS(info);
}
/// <summary>
/// 添加物料表
/// </summary>
/// <returns></returns>
[HttpPost]
[ActionPermissionFilter(Permission = "materialinfo:add")]
[Log(Title = "物料表", BusinessType = BusinessType.INSERT)]
public IActionResult AddMaterialInfo([FromBody] MaterialInfoDto parm)
{
var modal = parm.Adapt<MaterialInfo>().ToCreate(HttpContext);
var response = _MaterialInfoService.AddMaterialInfo(modal);
return SUCCESS(response);
}
/// <summary>
/// 更新物料表
/// </summary>
/// <returns></returns>
[HttpPut]
[ActionPermissionFilter(Permission = "materialinfo:edit")]
[Log(Title = "物料表", BusinessType = BusinessType.UPDATE)]
public IActionResult UpdateMaterialInfo([FromBody] MaterialInfoDto parm)
{
var modal = parm.Adapt<MaterialInfo>().ToUpdate(HttpContext);
var response = _MaterialInfoService.UpdateMaterialInfo(modal);
return ToResponse(response);
}
/// <summary>
/// 删除物料表
/// </summary>
/// <returns></returns>
[HttpPost("delete/{ids}")]
[ActionPermissionFilter(Permission = "materialinfo:delete")]
[Log(Title = "物料表", BusinessType = BusinessType.DELETE)]
public IActionResult DeleteMaterialInfo([FromRoute]string ids)
{
var idArr = Tools.SplitAndConvert<long>(ids);
return ToResponse(_MaterialInfoService.Delete(idArr));
}
}
}

View File

@ -14,7 +14,7 @@ using RIZO.ServiceCore.Signalr;
using RIZO.ServiceCore.SqlSugar;
using RIZO.Mall;
using RIZO.Repository.Business;
using RIZO.Service.Business;
//using SQLitePCL;
@ -27,12 +27,7 @@ builder.Services.AddDynamicApi();
// Add services to the container.
builder.Services.AddControllers();
// --- 这里开始注入 MaterialDao 和 MaterialService ---
var dbConfigSection = builder.Configuration.GetSection("dbConfigs").GetChildren().First();
var mySqlConn = dbConfigSection.GetValue<string>("Conn");
builder.Services.AddSingleton(new RIZO.Repository.Business.MaterialDao(mySqlConn));
builder.Services.AddSingleton<RIZO.Service.Business.MaterialService>();
// --- 注入完成 ---

View File

@ -0,0 +1,58 @@
namespace RIZO.Model.Business.Dto
{
/// <summary>
/// 物料表查询对象
/// </summary>
public class MaterialInfoQueryDto : PagerInfo
{
}
/// <summary>
/// 物料表输入输出对象
/// </summary>
public class MaterialInfoDto
{
[Required(ErrorMessage = "主键ID不能为空")]
public long Id { get; set; }
[Required(ErrorMessage = "物料编码不能为空")]
public string MaterialCode { get; set; }
public string MaterialName { get; set; }
public string MaterialModel { get; set; }
public string MaterialType { get; set; }
public string Parameter { get; set; }
public string Brand { get; set; }
public string Supplier { get; set; }
public string DeviceId { get; set; }
public string Feature { get; set; }
public string Remark { get; set; }
[Required(ErrorMessage = "工艺编码(关联工艺表)不能为空")]
public string ProcessCode { get; set; }
public string DelFlag { get; set; }
public string CreateBy { get; set; }
public DateTime? CreateTime { get; set; }
public string UpdateBy { get; set; }
public DateTime? UpdateTime { get; set; }
[ExcelColumn(Name = "物料类别")]
public string MaterialTypeLabel { get; set; }
}
}

View File

@ -1,23 +1,108 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RIZO.Model.Business
{
/// <summary>
/// 物料表
/// </summary>
[SugarTable("material_info")]
public class MaterialInfo
{
public int Id { get; set; }
/// <summary>
/// 主键ID
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public long Id { get; set; }
/// <summary>
/// 物料编码
/// </summary>
[SugarColumn(ColumnName = "material_code")]
public string MaterialCode { get; set; }
/// <summary>
/// 物料名称
/// </summary>
[SugarColumn(ColumnName = "material_name")]
public string MaterialName { get; set; }
/// <summary>
/// 物料型号(规格型号)
/// </summary>
[SugarColumn(ColumnName = "material_model")]
public string MaterialModel { get; set; }
/// <summary>
/// 物料类别
/// </summary>
[SugarColumn(ColumnName = "material_type")]
public string MaterialType { get; set; }
/// <summary>
/// 参数
/// </summary>
public string Parameter { get; set; }
/// <summary>
/// 品牌
/// </summary>
public string Brand { get; set; }
/// <summary>
/// 供货商
/// </summary>
public string Supplier { get; set; }
/// <summary>
/// 设备标识符
/// </summary>
[SugarColumn(ColumnName = "device_id")]
public string DeviceId { get; set; }
/// <summary>
/// 特点(几级灵敏度等)
/// </summary>
public string Feature { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 工艺编码(关联工艺表)
/// </summary>
[SugarColumn(ColumnName = "process_code")]
public string ProcessCode { get; set; }
public int DelFlag { get; set; } = 0;
/// <summary>
/// 删除标志0未删除1已删除
/// </summary>
[SugarColumn(ColumnName = "del_flag")]
public string DelFlag { get; set; }
/// <summary>
/// 创建人
/// </summary>
[SugarColumn(ColumnName = "create_by")]
public string CreateBy { get; set; }
public DateTime CreateTime { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[SugarColumn(ColumnName = "create_time")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 更新人
/// </summary>
[SugarColumn(ColumnName = "update_by")]
public string UpdateBy { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[SugarColumn(ColumnName = "update_time")]
public DateTime? UpdateTime { get; set; }
}
}
}

View File

@ -12,8 +12,4 @@
<PackageReference Include="SqlSugarCoreNoDrive" Version="5.1.4.198" />
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
</ItemGroup>
<ItemGroup>
<Folder Include="Business\Dto\" />
</ItemGroup>
</Project>

View File

@ -1,161 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RIZO.Model.Business;
using MySql.Data.MySqlClient;
namespace RIZO.Repository.Business
{
public class MaterialDao
{
private readonly string _connectionString;
public MaterialDao(string connectionString)
{
_connectionString = connectionString;
}
// 查询列表
public List<MaterialInfo> GetMaterials(bool includeDeleted = false)
{
var list = new List<MaterialInfo>();
using var conn = new MySqlConnection(_connectionString);
conn.Open();
//等价于SELECT * FROM material_info它本身没有任何过滤作用只是为了后续方便动态拼接条件。
string sql = "SELECT * FROM material_info WHERE 1=1";
if (!includeDeleted)//includeDeleted默认falseif条件默认为真需要拼接条件AND del_flag=0只查询未删除的数据。
{
sql += " AND del_flag=0";
}
using var cmd = new MySqlCommand(sql, conn);
using var reader = cmd.ExecuteReader();
while (reader.Read())
{
list.Add(new MaterialInfo
{
Id = Convert.ToInt32(reader["id"]),
MaterialCode = reader["material_code"].ToString(),
MaterialName = reader["material_name"].ToString(),
MaterialModel = reader["material_model"].ToString(),
MaterialType = reader["material_type"].ToString(),
ProcessCode = reader["process_code"].ToString(),
DelFlag = Convert.ToInt32(reader["del_flag"]),
CreateBy = reader["create_by"].ToString(),
CreateTime = Convert.ToDateTime(reader["create_time"]),
UpdateBy = reader["update_by"].ToString(),
UpdateTime = reader["update_time"] == DBNull.Value ? null : (DateTime?)Convert.ToDateTime(reader["update_time"])
});
}
return list;
}
// 根据物料编码查询物料清单
public MaterialInfo GetMaterialByMaterialCode(string material_code)
{
using var conn = new MySqlConnection(_connectionString);
conn.Open();
string sql = "SELECT * FROM material_info WHERE material_code=@material_code AND del_flag=0";
using var cmd = new MySqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@material_code", material_code);
using var reader = cmd.ExecuteReader();
if (reader.Read())
{
return new MaterialInfo
{
Id = Convert.ToInt32(reader["id"]),
MaterialCode = reader["material_code"].ToString(),
MaterialName = reader["material_name"].ToString(),
MaterialModel = reader["material_model"].ToString(),
MaterialType = reader["material_type"].ToString(),
ProcessCode = reader["process_code"].ToString(),
DelFlag = Convert.ToInt32(reader["del_flag"]),
CreateBy = reader["create_by"].ToString(),
CreateTime = Convert.ToDateTime(reader["create_time"]),
UpdateBy = reader["update_by"].ToString(),
UpdateTime = reader["update_time"] == DBNull.Value ? null : (DateTime?)Convert.ToDateTime(reader["update_time"])
};
}
return null;
}
//新增物料清单数据
public void AddMaterial(MaterialInfo material)
{
using var conn = new MySqlConnection(_connectionString);
conn.Open();
string sql = @"INSERT INTO material_info
(material_code, material_name, material_model, material_type, process_code, create_by, create_time,update_by,update_time)
VALUES (@code, @name, @model, @type, @process, @createBy, @createTime,@updateBy,@updateTime)";
using var cmd = new MySqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@code", material.MaterialCode);
cmd.Parameters.AddWithValue("@name", material.MaterialName);
cmd.Parameters.AddWithValue("@model", material.MaterialModel);
cmd.Parameters.AddWithValue("@type", material.MaterialType);
cmd.Parameters.AddWithValue("@process", material.ProcessCode);
cmd.Parameters.AddWithValue("@createBy", material.CreateBy);
cmd.Parameters.AddWithValue("@createTime", material.CreateTime);
cmd.Parameters.AddWithValue("@updateBy", material.UpdateBy);
cmd.Parameters.AddWithValue("@updateTime", material.UpdateTime);
cmd.ExecuteNonQuery();
}
//批量新增物料清单数据
public void AddMaterials(List<MaterialInfo> materials)
{
foreach (var m in materials)
{
AddMaterial(m);
}
}
//修改物料清单数据
public void UpdateMaterial(MaterialInfo material)
{
using var conn = new MySqlConnection(_connectionString);
conn.Open();
string sql = @"UPDATE material_info SET
material_code=@code, material_name=@name, material_model=@model,
material_type=@type, process_code=@process, update_by=@updateBy,
update_time=@updateTime
WHERE id=@id";
using var cmd = new MySqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@code", material.MaterialCode);
cmd.Parameters.AddWithValue("@name", material.MaterialName);
cmd.Parameters.AddWithValue("@model", material.MaterialModel);
cmd.Parameters.AddWithValue("@type", material.MaterialType);
cmd.Parameters.AddWithValue("@process", material.ProcessCode);
cmd.Parameters.AddWithValue("@updateBy", material.UpdateBy);
cmd.Parameters.AddWithValue("@updateTime", material.UpdateTime);
cmd.Parameters.AddWithValue("@id", material.Id);
cmd.ExecuteNonQuery();
}
// 逻辑删除
public void DeleteMaterial(int id, MaterialInfo material)
{
using var conn = new MySqlConnection(_connectionString);
conn.Open();
string sql = "UPDATE material_info SET del_flag=1, update_by=@updateBy, update_time=@updateTime WHERE id=@id";
using var cmd = new MySqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@updateBy", material.UpdateBy);
cmd.Parameters.AddWithValue("@updateTime", DateTime.Now);
cmd.ExecuteNonQuery();
}
}
}

View File

@ -16,4 +16,8 @@
<PackageReference Include="SqlSugar.IOC" Version="2.0.1" />
<PackageReference Include="SqlSugarCoreNoDrive" Version="5.1.4.198" />
</ItemGroup>
<ItemGroup>
<Folder Include="Business\" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,21 @@
using RIZO.Model.Business.Dto;
using RIZO.Model.Business;
namespace RIZO.Service.Business.IBusinessService
{
/// <summary>
/// 物料表service接口
/// </summary>
public interface IMaterialInfoService : IBaseService<MaterialInfo>
{
PagedInfo<MaterialInfoDto> GetList(MaterialInfoQueryDto parm);
MaterialInfo GetInfo(long Id);
MaterialInfo AddMaterialInfo(MaterialInfo parm);
int UpdateMaterialInfo(MaterialInfo parm);
}
}

View File

@ -0,0 +1,79 @@
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using RIZO.Model.Business.Dto;
using RIZO.Model.Business;
using RIZO.Repository;
using RIZO.Service.Business.IBusinessService;
namespace RIZO.Service.Business
{
/// <summary>
/// 物料表Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IMaterialInfoService), ServiceLifetime = LifeTime.Transient)]
public class MaterialInfoService : BaseService<MaterialInfo>, IMaterialInfoService
{
/// <summary>
/// 查询物料表列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<MaterialInfoDto> GetList(MaterialInfoQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
.Where(predicate.ToExpression())
.ToPage<MaterialInfo, MaterialInfoDto>(parm);
return response;
}
/// <summary>
/// 获取详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public MaterialInfo GetInfo(long Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
.First();
return response;
}
/// <summary>
/// 添加物料表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public MaterialInfo AddMaterialInfo(MaterialInfo model)
{
return Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改物料表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int UpdateMaterialInfo(MaterialInfo model)
{
return Update(model, true);
}
/// <summary>
/// 查询导出表达式
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
private static Expressionable<MaterialInfo> QueryExp(MaterialInfoQueryDto parm)
{
var predicate = Expressionable.Create<MaterialInfo>();
return predicate;
}
}
}

View File

@ -1,67 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RIZO.Repository.Business;
using RIZO.Model.Business;
namespace RIZO.Service.Business
{
public class MaterialService
{
private readonly MaterialDao _dao;
public MaterialService(MaterialDao dao)
{
_dao = dao;
}
//获取所有的物料清单
public List<MaterialInfo> GetAllMaterials(bool includeDeleted = false)
{
return _dao.GetMaterials(includeDeleted);
}
//根据物料编码查询物料清单
public MaterialInfo GetMaterialByMaterialCode(string material_code)
{
return _dao.GetMaterialByMaterialCode(material_code);
}
//新增物料清单数据
public void AddMaterial(MaterialInfo material)
{
material.CreateTime = DateTime.Now;
material.UpdateTime = DateTime.Now;
_dao.AddMaterial(material);
}
////批量新增物料清单数据
public void AddMaterials(List<MaterialInfo> materials)
{
foreach (var m in materials)
{
m.CreateTime = DateTime.Now;
m.UpdateTime = DateTime.Now;
}
_dao.AddMaterials(materials);
}
//修改物料清单数据
public void UpdateMaterial(MaterialInfo material)
{
material.UpdateTime = DateTime.Now;
_dao.UpdateMaterial(material);
}
//逻辑删除
public void DeleteMaterial(int id, MaterialInfo material)
{
_dao.DeleteMaterial(id, material);
}
}
}