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

539 lines
24 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 Infrastructure.Attribute;
using SqlSugar;
using System;
using System.Linq;
using System.Text.RegularExpressions;
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
{
/// <summary>
/// 工艺路线-抛光 库存变动表Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IWmPolishRecordService), ServiceLifetime = LifeTime.Transient)]
public class WmPolishRecordService : BaseService<WmPolishRecord>, IWmPolishRecordService
{
/// <summary>
/// 查询工艺路线-抛光 库存变动表列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<WmPolishRecordDto> GetList(WmPolishRecordQueryDto parm)
{
DateTime startTime = parm.StartActionTime ?? DateTime.MinValue;
DateTime endTime = parm.EndActionTime ?? DateTime.MinValue;
var predicate = Expressionable
.Create<WmPolishRecord>()
.AndIF(
!string.IsNullOrEmpty(parm.Partnumber),
it => it.Partnumber == 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(startTime > DateTime.MinValue, it => startTime <= it.ActionTime)
.AndIF(endTime > DateTime.MinValue, it => endTime >= it.ActionTime);
var response = Queryable()
.Where(predicate.ToExpression())
.OrderByDescending(it => it.ActionTime)
.ToPage<WmPolishRecord, WmPolishRecordDto>(parm);
return response;
}
/// <summary>
/// 获取详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public WmPolishRecord GetInfo(string Id)
{
var response = Queryable().Where(x => x.Id == Id).First();
return response;
}
/// <summary>
/// 添加工艺路线-抛光 库存变动表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public WmPolishRecord AddWmPolishRecord(WmPolishRecord model)
{
return Context.Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改工艺路线-抛光 库存变动表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int UpdateWmPolishRecord(WmPolishRecord model)
{
//var response = Update(w => w.Id == model.Id, it => new WmPolishRecord()
//{
// 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);
}
/// <summary>
/// 根据日期获取抛光记录表数据
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public int GenerateWmPolishRecord(WmPolishRecordGenerateDto parm)
{
if (parm == null || parm.StartTime == null || parm.StartTime.Value == DateTime.MinValue)
{
return -1;
}
else
{
#region
//三入
// 产线报表 根据日期范围 去取产线抛光的数据 qc_quality_statistics_first
// 去除倒车雷达
List<QcQualityStatisticsFirst> qcQualityStatisticsFirsts = Context
.Queryable<QcQualityStatisticsFirst>()
.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)
.Where(it => it.Remark == "抛光")
.ToList();
// 后道报表 根据日期范围 去取后道反抛光的数据 wm_polish_quality_statistics
List<WmPolishQualityStatistics> wmPolishQualityStatistics = Context
.Queryable<WmPolishQualityStatistics>()
.WhereIF(
!string.IsNullOrEmpty(parm.Partnumber),
it => it.Partnumber == parm.Partnumber
)
.Where(it => it.StartTime >= parm.StartTime)
.Where(it => it.PaoguangTotal > 0)
.ToList();
// GP12报表 根据日期范围 去取gp12反抛光的数据 qc_gp12_service_statistics GP12(new) wm_gp12_quality_statistics(old)
List<QcGp12ServiceStatistics> qcGp12ServiceStatistics = Context
.Queryable<QcGp12ServiceStatistics>()
.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();
//qcGp12ServiceStatistics = qcGp12ServiceStatistics.DistinctBy(o => o.PartNumber).ToList();
//TODO 旧数据先不使用
/*List<WmGp12QualityStatistics> wmGp12QualityStatistics = Context
.Queryable<WmGp12QualityStatistics>()
.WhereIF(
!string.IsNullOrEmpty(parm.Partnumber),
it => it.Partnumber == parm.Partnumber
)
.Where(it => it.StartTime >= parm.StartTime)
.Where(it => it.PaoguangTotal > 0)
.ToList();*/
//二出同一张表wm_polish_work_quality_statistics 根据日期范围 去取抛光操作出库的数据
List<WmPolishWorkQualityStatistics> wmPolishWorkQualityStatistics = Context
.Queryable<WmPolishWorkQualityStatistics>()
.WhereIF(
!string.IsNullOrEmpty(parm.Partnumber),
it => it.Partnumber == parm.Partnumber
)
.Where(it => it.StartTime >= parm.StartTime)
.ToList();
#endregion
int totalcount =
qcQualityStatisticsFirsts.Count
+ wmPolishQualityStatistics.Count
+ qcGp12ServiceStatistics.Count
//+ wmGp12QualityStatistics.Count
+ wmPolishWorkQualityStatistics.Count;
#region WmPolishRecord
// 组装 WmPolishRecord 实体
List<WmPolishRecord> wmPolishRecords = new List<WmPolishRecord>();
foreach (var item in qcQualityStatisticsFirsts)
{
wmPolishRecords.Add(
new WmPolishRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id,
Code = "自动",
Partnumber = item.FinishedPartNumber,
ChangeType = 1,
ChangeQuantity = item.PaoguangTotal,
ActionTime = item.StartTime,
Status = 1,
Remark = "产线报表抛光件自动入库,来源工单:" + item.WorkorderId
}
);
}
foreach (var item in wmPolishQualityStatistics)
{
wmPolishRecords.Add(
new WmPolishRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id,
Code = "自动",
Partnumber = item.Partnumber,
ChangeType = 1,
ChangeQuantity = item.PaoguangTotal,
ActionTime = item.StartTime,
Status = 1,
Remark = "后道手填报表抛光件自动入库"
}
);
}
foreach (var item in qcGp12ServiceStatistics)
{
wmPolishRecords.Add(
new WmPolishRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id,
Code = "自动",
Partnumber = item.PartNumber,
ChangeType = 1,
ChangeQuantity = item.PolishNumber,
ActionTime = item.StartTime,
Status = 1,
Remark = " GP12触摸屏报表抛光件自动入库"
}
);
}
/*foreach (var item in wmGp12QualityStatistics)
{
wmPolishRecords.Add(
new WmPolishRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id,
Code = "自动",
Partnumber = item.Partnumber,
ChangeType = 1,
ChangeQuantity = item.PaoguangTotal,
ActionTime = item.StartTime,
Status = 1,
Remark = " GP12手填报表抛光件自动入库"
}
);
}*/
foreach (var item in wmPolishWorkQualityStatistics)
{
wmPolishRecords.Add(
new WmPolishRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id,
Code = "自动",
Partnumber = item.Partnumber,
ChangeType = 2,
ChangeQuantity = item.RequireNumber,
ActionTime = item.StartTime,
Status = 1,
Remark = "抛光手填报表自动出库"
}
);
}
#endregion
// 批量插入到 wm_polish_record 表
//如果有这个时间段的数据,要删除
List<WmPolishRecord> delwmPolishRecords = Context
.Queryable<WmPolishRecord>()
.Where(it => it.Code == "自动")
.Where(it => it.ActionTime >= parm.StartTime)
.ToList();
Context.Deleteable(delwmPolishRecords).ExecuteCommand();
if (wmPolishRecords.Any())
{
Context.Insertable(wmPolishRecords).ExecuteCommand();
}
return wmPolishRecords.Count; // 返回插入的记录数
}
}
/// <summary>
/// 根据日期获取抛光记录表数据 (后道触摸屏自动出库版本)
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public int GenerateWmPolishRecord02(WmPolishRecordGenerateDto parm)
{
if (parm == null || parm.StartTime == null || parm.StartTime.Value == DateTime.MinValue)
{
return -1;
}
else
{
#region
//三入
// 产线报表 根据日期范围 去取产线抛光的数据 qc_quality_statistics_first
// 去除倒车雷达
List<QcQualityStatisticsFirst> qcQualityStatisticsFirsts = Context
.Queryable<QcQualityStatisticsFirst>()
.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)
.Where(it => it.Remark == "抛光")
.ToList();
// 后道报表 根据日期范围 去取后道反抛光的数据 wm_polish_quality_statistics XXX-20250613触摸屏数据+后道报表数据)
List<QcBackEndServiceStatistics> qcBackEndQualityStatistics = Context
.Queryable<QcBackEndServiceStatistics>()
.WhereIF(
!string.IsNullOrEmpty(parm.Partnumber),
it => it.PartNumber == parm.Partnumber
)
.Where(it => it.StartTime >= parm.StartTime)
.Where(it => it.PolishNumber > 0)
.Where(it => it.GroupSort == 1)
.ToList();
List<WmPolishQualityStatistics> wmPolishQualityStatistics = Context
.Queryable<WmPolishQualityStatistics>()
.WhereIF(
!string.IsNullOrEmpty(parm.Partnumber),
it => it.Partnumber == parm.Partnumber
)
.Where(it => it.StartTime >= parm.StartTime)
.Where(it => it.PaoguangTotal > 0)
.ToList();
// GP12报表 根据日期范围 去取gp12反抛光的数据 qc_gp12_service_statistics GP12(new) wm_gp12_quality_statistics(old)
List<QcGp12ServiceStatistics> qcGp12ServiceStatistics = Context
.Queryable<QcGp12ServiceStatistics>()
.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();
//二出同一张表wm_polish_work_quality_statistics 根据日期范围 去取抛光操作出库的数据
List<WmPolishWorkQualityStatistics> wmPolishWorkQualityStatistics = Context
.Queryable<WmPolishWorkQualityStatistics>()
.WhereIF(
!string.IsNullOrEmpty(parm.Partnumber),
it => it.Partnumber == parm.Partnumber
)
.Where(it => it.StartTime >= parm.StartTime)
.ToList();
#endregion
int totalcount =
qcQualityStatisticsFirsts.Count
+ qcBackEndQualityStatistics.Count
+ qcGp12ServiceStatistics.Count
//+ wmGp12QualityStatistics.Count
+ wmPolishWorkQualityStatistics.Count;
#region WmPolishRecord
// 组装 WmPolishRecord 实体
List<WmPolishRecord> wmPolishRecords = new List<WmPolishRecord>();
foreach (var item in qcQualityStatisticsFirsts)
{
// TODO 零件号二次处理
string partNumber = item.FinishedPartNumber;
// 使用正则表达式匹配并移除特殊后缀
string processedPartnumber = Regex.Replace(
partNumber,
@"-(FL|FR|RR|RL)$",
"",
RegexOptions.IgnoreCase
);
wmPolishRecords.Add(
new WmPolishRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id,
Code = "自动",
Partnumber = processedPartnumber,
ChangeType = 1,
ChangeQuantity = item.PaoguangTotal,
ActionTime = item.StartTime,
Status = 1,
Remark = "产线报表抛光件自动入库,来源工单:" + item.WorkorderId
}
);
}
foreach (var item in qcBackEndQualityStatistics)
{
// TODO 零件号二次处理
string partNumber = item.PartNumber;
// 使用正则表达式匹配并移除特殊后缀
string processedPartnumber = Regex.Replace(
partNumber,
@"-(FL|FR|RR|RL)$",
"",
RegexOptions.IgnoreCase
);
wmPolishRecords.Add(
new WmPolishRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id,
Code = "自动",
Partnumber = processedPartnumber,
ChangeType = 1,
ChangeQuantity = item.PolishNumber,
ActionTime = item.StartTime,
Status = 1,
Remark = "后道触摸屏-报表抛光件自动入库"
}
);
}
//XXX20250613 后道触摸屏与手填报表同时统计
foreach (var item in wmPolishQualityStatistics)
{
// TODO 零件号二次处理
string partNumber = item.Partnumber;
// 使用正则表达式匹配并移除特殊后缀
string processedPartnumber = Regex.Replace(
partNumber,
@"-(FL|FR|RR|RL)$",
"",
RegexOptions.IgnoreCase
);
wmPolishRecords.Add(
new WmPolishRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id,
Code = "自动",
Partnumber = processedPartnumber,
ChangeType = 1,
ChangeQuantity = item.PaoguangTotal,
ActionTime = item.StartTime,
Status = 1,
Remark = "后道手填报表-抛光件自动入库"
}
);
}
foreach (var item in qcGp12ServiceStatistics)
{
// TODO 零件号二次处理
string partNumber = item.PartNumber;
// 使用正则表达式匹配并移除特殊后缀
string processedPartnumber = Regex.Replace(
partNumber,
@"-(FL|FR|RR|RL)$",
"",
RegexOptions.IgnoreCase
);
wmPolishRecords.Add(
new WmPolishRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id,
Code = "自动",
Partnumber = processedPartnumber,
ChangeType = 1,
ChangeQuantity = item.PolishNumber,
ActionTime = item.StartTime,
Status = 1,
Remark = " GP12触摸屏-报表抛光件自动入库"
}
);
}
foreach (var item in wmPolishWorkQualityStatistics)
{
// TODO 零件号二次处理
string partNumber = item.Partnumber;
// 使用正则表达式匹配并移除特殊后缀
string processedPartnumber = Regex.Replace(
partNumber,
@"-(FL|FR|RR|RL)$",
"",
RegexOptions.IgnoreCase
);
wmPolishRecords.Add(
new WmPolishRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id,
Code = "自动",
Partnumber = processedPartnumber,
ChangeType = 2,
ChangeQuantity = item.RequireNumber,
ActionTime = item.StartTime,
Status = 1,
Remark = "抛光手填报表出库"
}
);
}
#endregion
// 批量插入到 wm_polish_record 表
//如果有这个时间段的数据,要删除
List<WmPolishRecord> delwmPolishRecords = Context
.Queryable<WmPolishRecord>()
.Where(it => it.Code == "自动")
.Where(it => it.ActionTime >= parm.StartTime)
.ToList();
Context.Deleteable(delwmPolishRecords).ExecuteCommand();
if (wmPolishRecords.Any())
{
Context.Insertable(wmPolishRecords).ExecuteCommand();
}
return wmPolishRecords.Count; // 返回插入的记录数
}
}
}
}