shgx_tz_mom/ZR.Service/mes/wms/WmGp12QualityStatisticsService.cs

276 lines
11 KiB
C#

using Infrastructure.Attribute;
using SqlSugar;
using System;
using ZR.Model;
using ZR.Model.MES.wms;
using ZR.Model.MES.wms.Dto;
using ZR.Repository;
using ZR.Service.mes.wms.IService;
namespace ZR.Service.mes.wms
{
/// <summary>
/// GP12质检记录表Service业务层处理
/// </summary>
[AppService(
ServiceType = typeof(IWmGp12QualityStatisticsService),
ServiceLifetime = LifeTime.Transient
)]
public class WmGp12QualityStatisticsService
: BaseService<WmGp12QualityStatistics>,
IWmGp12QualityStatisticsService
{
/// <summary>
/// 查询GP12质检记录表列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<WmGp12QualityStatisticsDto> GetList(WmGp12QualityStatisticsQueryDto parm)
{
var predicate = Expressionable
.Create<WmGp12QualityStatistics>()
.AndIF(
!string.IsNullOrEmpty(parm.WorkorderId),
it => it.WorkorderId.Contains(parm.WorkorderId)
)
.AndIF(!string.IsNullOrEmpty(parm.Team), it => it.Team.Contains(parm.Team))
.AndIF(
!string.IsNullOrEmpty(parm.Partnumber),
it => it.Partnumber.Contains(parm.Partnumber)
)
.AndIF(
!string.IsNullOrEmpty(parm.CreatedBy),
it => it.CreatedBy.Contains(parm.CreatedBy)
)
.AndIF(
parm.Type != -1,
it => it.Type == parm.Type
)
.AndIF(
parm.StartTime != null,
it => it.StartTime >= parm.StartTime.Value.ToLocalTime()
)
.AndIF(
parm.EndTime != null,
it => it.StartTime <= parm.EndTime.Value.ToLocalTime()
);
var response = Queryable()
.Where(predicate.ToExpression())
.ToPage<WmGp12QualityStatistics, WmGp12QualityStatisticsDto>(parm);
if (response.Result.Count > 0)
{
foreach (WmGp12QualityStatisticsDto item in response.Result)
{
WmMaterial material = Context
.Queryable<WmMaterial>()
.Where(it => it.Partnumber == item.Partnumber)
.Where(it => it.Type == 1)
.Where(it => it.Status == 1)
.First();
if (material == null)
{
item.Description = "此零件号不在物料清单内!";
continue;
}
item.QualifiedRateStr = Math.Ceiling(item.QualifiedRate).ToString() + "%";
item.Color = material.Color;
item.Specification = material.Specification;
item.Description = !string.IsNullOrEmpty(material.Description)
? material.Description
: material.ProductName;
}
}
return response;
}
/// <summary>
/// 获取详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public WmGp12QualityStatistics GetInfo(string Id)
{
var response = Queryable().Where(x => x.Id == Id).First();
return response;
}
/// <summary>
/// 添加GP12质检记录表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public WmGp12QualityStatistics AddWmGp12QualityStatistics(WmGp12QualityStatistics model)
{
try
{
Context.Ado.BeginTran();
if (
model.RequireNumber
!= (
model.QualifiedNumber
+ model.PaoguangTotal
+ model.DamoTotal
+ model.BaofeiTotal
)
)
{
throw new Exception("投入数与合格数,抛光总数,打磨数,报废数不符合,请检查");
}
model.Id = SnowFlakeSingle.instance.NextId().ToString();
// 抛光品标记
if (model.IsPolish)
{
model.Type = 1;
}
else
{
model.Type = 0;
}
// 抛光合格率计算
decimal qualifiedRate = 0.0m;
if (model.QualifiedNumber != 0)
{
qualifiedRate =
(decimal)model.QualifiedNumber / model.RequireNumber * 100 ?? 0.0m;
}
model.QualifiedRate = qualifiedRate;
WmGp12QualityStatistics res0 = Context.Insertable(model).ExecuteReturnEntity();
if (res0 == null)
{
Context.Ado.RollbackTran();
throw new Exception("插入GP12检测结果记录失败");
}
// TODO 20241023 不再变动抛光仓库盘点数据
Context.Ado.CommitTran();
return res0;
WmOneTimeInventoryService oneTimeService = new();
WmPolishInventoryService inventoryService = new();
//抛光品重新进入抛光仓库
if (model.PaoguangTotal > 0)
{
WmPolishInventory wmPolishInventoryWarehousing =
new()
{
Partnumber = model.Partnumber,
WorkOrder = model.WorkorderId,
Type = model.IsReturnWorkpiece ? 2 : 1,
Quantity = model.PaoguangTotal,
CreatedBy = model.CreatedBy,
ActionTime = DateTime.Now.ToLocalTime(),
Remark =
"GP12检测抛光入库,抛光数:"
+ model.PaoguangTotal
+ "、工单号:"
+ model.WorkorderId ?? "未填写工单号"
+ "。记录时间:"
+ model.CreatedTime.Value.ToLocalTime().ToString()
+ "[来源记录识别编号:"
+ res0.Id
+ "]"
};
int res1 = inventoryService.DoWmPolishWarehousing(wmPolishInventoryWarehousing);
if (res1 == 0)
{
Context.Ado.RollbackTran();
throw new Exception("GP12检测结果抛光入库失败");
}
}
//合格品,报废,打磨品,抛光品 扣除一次合格品仓库库存
if ((model.BaofeiTotal + model.DamoTotal + model.QualifiedNumber + model.PaoguangTotal) > 0)
{
WmOneTimeInventory wmOneTimeInventoryRetrieval =
new()
{
Partnumber = model.Partnumber,
WorkOrder = model.WorkorderId,
Type = model.IsReturnWorkpiece ? 2 : 1,
Quantity = (
model.BaofeiTotal + model.DamoTotal + model.QualifiedNumber + model.PaoguangTotal
),
CreatedBy = model.CreatedBy,
ActionTime = DateTime.Now.ToLocalTime(),
Remark =
"GP12检测记录出库,合格数:"
+ model.QualifiedNumber
+ "、抛光数:"
+ model.PaoguangTotal
+ "、打磨数:"
+ model.DamoTotal
+ "、报废数:"
+ model.BaofeiTotal
+ "、工单号:"
+ model.WorkorderId ?? "未填写工单号"
+ "。记录时间:"
+ model.CreatedTime.Value.ToLocalTime().ToString()
+ "[来源记录识别编号:"
+ res0.Id
+ "]"
};
int res2 = oneTimeService.DoWmOneTimeRetrieval(wmOneTimeInventoryRetrieval);
if (res2 == 0)
{
Context.Ado.RollbackTran();
throw new Exception("GP12检测结果出库失败");
}
}
Context.Ado.CommitTran();
return res0;
}
catch (Exception e)
{
Context.Ado.RollbackTran();
throw new Exception(e.Message);
}
}
/// <summary>
/// 修改GP12质检记录表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int UpdateWmGp12QualityStatistics(WmGp12QualityStatistics model)
{
try
{
if (
model.RequireNumber
!= (
model.QualifiedNumber
+ model.PaoguangTotal
+ model.DamoTotal
+ model.BaofeiTotal
)
)
{
throw new Exception("投入数与合格数,抛光数,打磨数,报废数不符合,请检查");
}
decimal qualifiedRate = 0.0m;
if (model.QualifiedNumber != 0)
{
qualifiedRate =
(decimal)model.QualifiedNumber / model.RequireNumber * 100 ?? 0.0m;
}
model.QualifiedRate = qualifiedRate;
if (model.IsPolish)
{
model.Type = 1;
}
else
{
model.Type = 0;
}
return Update(model, true);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
}
}