Files
kunshan-bzfm-mes-backend/DOAN.Service/MES/Material/MmMaterialService.cs
Carl 96f414de66 新增物料清单Excel导入功能及相关接口
新增物料清单批量导入接口,支持Excel文件上传,自动设置创建时间和状态,完善DTO字段。实现批量插入、校验物料编码、统计导入结果。补充相关依赖和命名空间。
2026-01-06 12:06:05 +08:00

163 lines
6.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using DOAN.Common;
using DOAN.Model.BZFM;
using DOAN.Model.BZFM.Dto;
using DOAN.Model.System;
using DOAN.Repository;
using DOAN.Service.BZFM.IBZFMService;
using Infrastructure;
using Infrastructure.Attribute;
using Infrastructure.Extensions;
namespace DOAN.Service.BZFM
{
/// <summary>
/// 物料表Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IMmMaterialService), ServiceLifetime = LifeTime.Transient)]
public class MmMaterialService : BaseService<MmMaterial>, IMmMaterialService
{
/// <summary>
/// 查询物料表列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<MmMaterialDto> GetList(MmMaterialQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
.Where(predicate.ToExpression())
.OrderBy(it => it.Type)
.ToPage<MmMaterial, MmMaterialDto>(parm);
return response;
}
/// <summary>
/// 获取详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public MmMaterial GetInfo(int Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
.First();
return response;
}
/// <summary>
/// 添加物料表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public MmMaterial AddMmMaterial(MmMaterial model)
{
return Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改物料表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int UpdateMmMaterial(MmMaterial model)
{
return Update(model, true);
}
/// <summary>
/// 查询导出表达式
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
private static Expressionable<MmMaterial> QueryExp(MmMaterialQueryDto parm)
{
var predicate = Expressionable.Create<MmMaterial>()
.AndIF(!string.IsNullOrEmpty(parm.CategoryCode), m => m.CategoryCode.Contains(parm.CategoryCode))
.AndIF(!string.IsNullOrEmpty(parm.MaterialName), m => m.MaterialName.Contains(parm.MaterialName))
.AndIF(!string.IsNullOrEmpty(parm.MaterialCode), m => m.MaterialCode.Contains(parm.MaterialCode))
.AndIF(!string.IsNullOrEmpty(parm.Specification), m => m.Specification.Contains(parm.Specification))
.AndIF(!string.IsNullOrEmpty(parm.Type), m => m.Type.Contains(parm.Type))
.AndIF(!string.IsNullOrEmpty(parm.Status), m => m.Status == parm.Status);
return predicate;
}
/// <summary>
/// 获取物料类别下拉框
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public List<MmMaterialCategoryOptionsDto> GetMmMaterialCategoryOptions(MmMaterialCategoryDto parm)
{
try
{
return Context.Queryable<MmMaterialCategory>()
.WhereIF(!string.IsNullOrEmpty(parm.CategoryCode),it => it.CategoryCode.Contains(parm.CategoryCode))
.WhereIF(!string.IsNullOrEmpty(parm.CategoryName), it => it.CategoryName.Contains(parm.CategoryName))
.Select(it => new MmMaterialCategoryOptionsDto
{
Label = it.CategoryName,
Value = it.CategoryCode
}
).ToList();
}
catch (Exception)
{
// TODO 处理错误日志
throw;
}
}
/// <summary>
/// 导入数据
/// </summary>
/// <param name="material"></param>
/// <returns></returns>
public (string, object, object) Importmaterial(List<MmMaterialQueryDto> material)
{
material.ForEach(x =>
{
x.CreatedTime = DateTime.Now;
x.Status = "启用";
x.MaterialCode = "";
x.MaterialName = "E10ADC3949BA59ABBE56E057F20F883E";
//x.Remark = x.Remark.IsEmpty() ? "数据导入" : x.Remark;
});
var x = Context.Storageable(material)
.SplitInsert(it => !it.Any())
.SplitIgnore(it => it.Item.MaterialCode == GlobalConstant.AdminRole)
.SplitError(x => x.Item.MaterialCode.IsEmpty(), "物料编码不能为空")
.SplitError(x => !Tools.CheckUserName(x.Item.MaterialCode), "物料编码不符合规范")
.WhereColumns(it => it.MaterialCode)//如果不是主键可以这样实现多字段it=>new{it.x1,it.x2}
.ToStorage();
var result = x.AsInsertable.ExecuteCommand();//插入可插入部分;
string msg = string.Format(" 插入{0} 更新{1} 错误数据{2} 不计算数据{3} 删除数据{4} 总共{5}",
x.InsertList.Count,
x.UpdateList.Count,
x.ErrorList.Count,
x.IgnoreList.Count,
x.DeleteList.Count,
x.TotalList.Count);
//输出统计
Console.WriteLine(msg);
//输出错误信息
foreach (var item in x.ErrorList)
{
Console.WriteLine("MaterialCode为" + item.Item.MaterialCode + " : " + item.StorageMessage);
}
foreach (var item in x.IgnoreList)
{
Console.WriteLine("MaterialCode为" + item.Item.MaterialCode + " : " + item.StorageMessage);
}
return (msg, x.ErrorList, x.IgnoreList);
}
}
}