using Infrastructure.Attribute;
using SqlSugar;
using System.Linq;
using System;
using ZR.Model;
using ZR.Model.Business;
using ZR.Model.MES.qc;
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
{
///
/// 一次合格品仓库记录表Service业务层处理
///
[AppService(
ServiceType = typeof(IWmOneTimeRecordService),
ServiceLifetime = LifeTime.Transient
)]
public class WmOneTimeRecordService : BaseService, IWmOneTimeRecordService
{
///
/// 查询一次合格品仓库记录表列表
///
///
///
public PagedInfo GetList(WmOneTimeRecordQueryDto parm)
{
var predicate = Expressionable
.Create()
.AndIF(
!string.IsNullOrEmpty(parm.Partnumber),
it => it.Partnumber.Contains(parm.Partnumber)
)
.AndIF(
!string.IsNullOrEmpty(parm.BlankNum),
it => it.BlankNum.Contains(parm.BlankNum)
)
.AndIF(!string.IsNullOrEmpty(parm.Remark), it => it.Remark.Contains(parm.Remark))
.AndIF(!string.IsNullOrEmpty(parm.Code), it => it.Code.Contains(parm.Code))
.AndIF(
!string.IsNullOrEmpty(parm.FkInventoryId),
it => it.FkInventoryId == parm.FkInventoryId
)
.AndIF(!string.IsNullOrEmpty(parm.Id), it => it.Id == parm.Id)
.AndIF(parm.ChangeType > -1, it => it.ChangeType == parm.ChangeType)
.AndIF(
parm.StartActionTime != null,
it => parm.StartActionTime.Value.ToLocalTime() <= it.ActionTime
)
.AndIF(
parm.EndActionTime != null,
it => parm.EndActionTime.Value.ToLocalTime() >= it.ActionTime
);
var response = Queryable()
.Where(predicate.ToExpression())
.ToPage(parm);
return response;
}
///
/// 获取详情
///
///
///
public WmOneTimeRecord GetInfo(string Id)
{
var response = Queryable().Where(x => x.Id == Id).First();
return response;
}
///
/// 添加一次合格品仓库记录表
///
///
///
public WmOneTimeRecord AddWmOneTimeRecord(WmOneTimeRecord model)
{
return Context.Insertable(model).ExecuteReturnEntity();
}
///
/// 修改一次合格品仓库记录表
///
///
///
public int UpdateWmOneTimeRecord(WmOneTimeRecord model)
{
//var response = Update(w => w.Id == model.Id, it => new WmOneTimeRecord()
//{
// Code = model.Code,
// Partnumber = model.Partnumber,
// BlankNum = model.BlankNum,
// ChangeType = model.ChangeType,
// ChangeQuantity = model.ChangeQuantity,
// ActionTime = model.ActionTime,
// Status = model.Status,
// Remark = model.Remark,
// CreatedBy = model.CreatedBy,
// CreatedTime = model.CreatedTime,
// UpdatedBy = model.UpdatedBy,
// UpdatedTime = model.UpdatedTime,
//});
//return response;
return Update(model, true);
}
///
/// 自动生成一次合格仓库记录日志
///
///
///
///
public int GenerateWmOneTimeRecord(WmOneTimeRecordGenerateDto parm)
{
if (parm == null || parm.StartTime == null || parm.StartTime.Value == DateTime.MinValue)
{
return -1;
}
else
{
#region 查询需要的数据
//TODO 入库条件1 产线合格品qc_quality_statistics_first,合格数,其中去除(倒车雷达)
List qcQualityStatisticsFirsts = Context
.Queryable()
.WhereIF(
!string.IsNullOrEmpty(parm.Partnumber),
it => it.FinishedPartNumber == parm.Partnumber
)
.Where(it => !it.ProductDescription.Contains("倒车雷达"))
.Where(it => it.StartTime >= parm.StartTime)
.Where(it => it.PaoguangTotal > 0)
.ToList();
//TODO 入库条件2 抛光合格品 wm_polish_work_quality_statistics 合格数
List wmPolishWorkQualityStatistics = Context
.Queryable()
.WhereIF(
!string.IsNullOrEmpty(parm.Partnumber),
it => it.Partnumber == parm.Partnumber
)
.Where(it => it.StartTime >= parm.StartTime)
.ToList();
//TODO 出库条件1 GP12 (新) 触摸屏 qc_gp12_service_statistics 投入数
List qcGp12ServiceStatistics = Context
.Queryable()
.WhereIF(
!string.IsNullOrEmpty(parm.Partnumber),
it => it.PartNumber == parm.Partnumber
)
.Where(it => it.StartTime >= parm.StartTime)
.Where(it => it.GroupSort == 1)
.Where(it => it.PolishNumber > 0)
.ToList();
//TODO 出库条件2 后道 wm_polish_quality_statistics 投入数
List wmPolishQualityStatistics = Context
.Queryable()
.WhereIF(
!string.IsNullOrEmpty(parm.Partnumber),
it => it.Partnumber == parm.Partnumber
)
.Where(it => it.StartTime >= parm.StartTime)
.ToList();
#endregion
#region 组装 WmOneTimeRecord 实体
List wmOneTimeRecords = new List();
foreach (var item in qcQualityStatisticsFirsts)
{
wmOneTimeRecords.Add(
new WmOneTimeRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id,
Code = "自动",
Partnumber = item.FinishedPartNumber,
ChangeType = 1,
ChangeQuantity = item.PaoguangTotal,
ActionTime = item.StartTime,
Status = 1,
Remark = "产线合格品 合格数"
}
);
}
foreach (var item in wmPolishWorkQualityStatistics)
{
wmOneTimeRecords.Add(
new WmOneTimeRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id,
Code = "自动",
Partnumber = item.Partnumber,
ChangeType = 1,
ChangeQuantity = item.,
ActionTime = item.StartTime,
Status = 1,
Remark = "抛光合格品 合格数"
}
);
}
foreach (var item in qcGp12ServiceStatistics)
{
wmOneTimeRecords.Add(
new WmOneTimeRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id,
Code = "自动",
Partnumber = item.PartNumber,
ChangeType = 2,
ChangeQuantity = item.PolishNumber,
ActionTime = item.StartTime,
Status = 1,
Remark = "触摸屏投入数"
}
);
}
foreach (var item in wmPolishQualityStatistics)
{
wmOneTimeRecords.Add(
new WmOneTimeRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id,
Code = "自动",
Partnumber = item.Partnumber,
ChangeType = 2,
ChangeQuantity = item.PaoguangTotal,
ActionTime = item.StartTime,
Status = 1,
Remark = "后道投入数"
}
);
}
#endregion
//如果有这个时间段的数据,要删除
List delwmOneTimeRecords = Context
.Queryable()
.Where(it => it.Code == "自动")
.Where(it => it.ActionTime >= parm.StartTime)
.ToList();
Context.Deleteable(delwmOneTimeRecords).ExecuteCommand();
if (delwmOneTimeRecords.Any())
{
Context.Insertable(wmOneTimeRecords).ExecuteCommand();
}
return wmOneTimeRecords.Count; // 返回插入的记录数
}
}
}