Files
kunshan-bzfm-mes-backend/DOAN.Service/MES/Material/MmMaterialService.cs
2026-01-07 15:39:28 +08:00

234 lines
7.6 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.Model.System.Dto;
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 ImportResultDto Importmaterial(List<MmMaterialExcelDto> material)
{
// normalize and set defaults, do not overwrite provided values
material.ForEach(x =>
{
if (x.CreatedTime == null)
{
x.CreatedTime = DateTime.Now;
}
if (string.IsNullOrWhiteSpace(x.Status))
{
x.Status = "启用";
}
if (!string.IsNullOrWhiteSpace(x.MaterialCode))
{
x.MaterialCode = x.MaterialCode.Trim();
}
if (!string.IsNullOrWhiteSpace(x.MaterialName))
{
x.MaterialName = x.MaterialName.Trim();
}
x.Description = x.Description.IsEmpty() ? "数据导入" : x.Description;
});
var x = Context
.Storageable(material)
.SplitInsert(it => !it.Any())
.WhereColumns(it => new { it.Id, it.MaterialCode }) //如果不是主键可以这样实现多字段it=>new{it.x1,it.x2}
.ToStorage();
var result = x.AsInsertable.ExecuteCommand(); //插入可插入部分;
var importResult = new ImportResultDto
{
Message = "导入完成",
Inserted = x.InsertList.Count,
Updated = x.UpdateList.Count,
ErrorCount = x.ErrorList.Count,
IgnoredCount = x.IgnoreList.Count,
Deleted = x.DeleteList.Count,
Total = x.TotalList.Count,
};
//输出统计
Console.WriteLine(importResult);
// 收集错误与忽略信息
foreach (var item in x.ErrorList)
{
importResult.Errors.Add(
new ImportErrorDto
{
MaterialCode = item.Item.MaterialCode,
Message = item.StorageMessage,
}
);
}
foreach (var item in x.IgnoreList)
{
importResult.Ignored.Add(
new ImportErrorDto
{
MaterialCode = item.Item.MaterialCode,
Message = item.StorageMessage,
}
);
}
return importResult;
}
/// <summary>
/// 导出物料表列表
/// </summary>
/// <returns></returns>
public PagedInfo<MmMaterialExcelDto> SelectMaterialList(
MmMaterialQueryDto material,
PagerInfo pager
)
{
// Use the same predicate builder as GetList to support consistent filtering
var predicate = QueryExp(material);
var query = Queryable()
.Where(predicate.ToExpression())
.Select(it => new MmMaterialExcelDto
{
Id = it.Id,
Type = it.Type,
MaterialCode = it.MaterialCode,
});
return query.ToPage(pager);
}
}
}