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

539 lines
24 KiB
C#
Raw Normal View History

using Infrastructure.Attribute;
using SqlSugar;
2024-07-26 17:34:01 +08:00
using System;
2025-03-21 17:39:55 +08:00
using System.Linq;
using System.Text.RegularExpressions;
using ZR.Model;
2025-03-21 17:39:55 +08:00
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
{
2025-03-24 10:09:16 +08:00
/// <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
2025-03-24 10:09:16 +08:00
)
.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))
2025-03-24 14:27:35 +08:00
/*.AndIF(
2025-03-24 10:09:16 +08:00
!string.IsNullOrEmpty(parm.FkInventoryId),
it => it.FkInventoryId == parm.FkInventoryId
2025-03-24 14:27:35 +08:00
)*/
2025-03-24 10:09:16 +08:00
.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);
2025-03-21 17:39:55 +08:00
2025-03-24 10:09:16 +08:00
var response = Queryable()
.Where(predicate.ToExpression())
.OrderByDescending(it => it.ActionTime)
.ToPage<WmPolishRecord, WmPolishRecordDto>(parm);
2025-03-21 17:39:55 +08:00
2025-03-24 10:09:16 +08:00
return response;
}
2025-03-21 17:39:55 +08:00
2025-03-24 10:09:16 +08:00
/// <summary>
/// 获取详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public WmPolishRecord GetInfo(string Id)
{
var response = Queryable().Where(x => x.Id == Id).First();
2025-03-21 17:39:55 +08:00
2025-03-24 10:09:16 +08:00
return response;
}
2025-03-21 17:39:55 +08:00
2025-03-24 10:09:16 +08:00
/// <summary>
/// 添加工艺路线-抛光 库存变动表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public WmPolishRecord AddWmPolishRecord(WmPolishRecord model)
{
return Context.Insertable(model).ExecuteReturnEntity();
}
2025-03-21 17:39:55 +08:00
2025-03-24 10:09:16 +08:00
/// <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);
}
2025-03-21 17:39:55 +08:00
2025-03-24 10:09:16 +08:00
/// <summary>
/// 根据日期获取抛光记录表数据
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public int GenerateWmPolishRecord(WmPolishRecordGenerateDto parm)
{
2025-03-24 14:27:35 +08:00
if (parm == null || parm.StartTime == null || parm.StartTime.Value == DateTime.MinValue)
2025-03-24 10:09:16 +08:00
{
return -1;
}
else
{
#region
//三入
// 产线报表 根据日期范围 去取产线抛光的数据 qc_quality_statistics_first
// 去除倒车雷达
2025-03-24 10:09:16 +08:00
List<QcQualityStatisticsFirst> qcQualityStatisticsFirsts = Context
.Queryable<QcQualityStatisticsFirst>()
.WhereIF(
!string.IsNullOrEmpty(parm.Partnumber),
it => it.FinishedPartNumber == parm.Partnumber
)
.Where(it => !it.ProductDescription.Contains("倒车雷达"))
2025-03-24 14:27:35 +08:00
.Where(it => it.StartTime >= parm.StartTime)
2025-03-24 11:22:13 +08:00
.Where(it => it.PaoguangTotal > 0)
.Where(it => it.Remark == "抛光")
2025-03-24 10:09:16 +08:00
.ToList();
2025-03-21 17:39:55 +08:00
2025-03-24 10:09:16 +08:00
// 后道报表 根据日期范围 去取后道反抛光的数据 wm_polish_quality_statistics
List<WmPolishQualityStatistics> wmPolishQualityStatistics = Context
.Queryable<WmPolishQualityStatistics>()
.WhereIF(
!string.IsNullOrEmpty(parm.Partnumber),
it => it.Partnumber == parm.Partnumber
)
2025-03-24 14:27:35 +08:00
.Where(it => it.StartTime >= parm.StartTime)
2025-03-24 11:22:13 +08:00
.Where(it => it.PaoguangTotal > 0)
2025-03-24 10:09:16 +08:00
.ToList();
2025-03-21 17:39:55 +08:00
2025-03-24 10:09:16 +08:00
// 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
)
2025-03-24 14:27:35 +08:00
.Where(it => it.StartTime >= parm.StartTime)
2025-03-24 10:09:16 +08:00
.Where(it => it.GroupSort == 1)
2025-03-24 11:22:13 +08:00
.Where(it => it.PolishNumber > 0)
2025-03-24 10:09:16 +08:00
.ToList();
//qcGp12ServiceStatistics = qcGp12ServiceStatistics.DistinctBy(o => o.PartNumber).ToList();
2025-03-24 17:11:05 +08:00
//TODO 旧数据先不使用
/*List<WmGp12QualityStatistics> wmGp12QualityStatistics = Context
2025-03-24 10:09:16 +08:00
.Queryable<WmGp12QualityStatistics>()
.WhereIF(
!string.IsNullOrEmpty(parm.Partnumber),
it => it.Partnumber == parm.Partnumber
)
2025-03-24 14:27:35 +08:00
.Where(it => it.StartTime >= parm.StartTime)
2025-03-24 11:22:13 +08:00
.Where(it => it.PaoguangTotal > 0)
2025-03-24 17:11:05 +08:00
.ToList();*/
2025-03-21 17:39:55 +08:00
2025-03-24 10:09:16 +08:00
//二出同一张表wm_polish_work_quality_statistics 根据日期范围 去取抛光操作出库的数据
List<WmPolishWorkQualityStatistics> wmPolishWorkQualityStatistics = Context
.Queryable<WmPolishWorkQualityStatistics>()
.WhereIF(
!string.IsNullOrEmpty(parm.Partnumber),
it => it.Partnumber == parm.Partnumber
)
2025-03-24 14:27:35 +08:00
.Where(it => it.StartTime >= parm.StartTime)
2025-03-24 10:09:16 +08:00
.ToList();
#endregion
2025-03-21 17:39:55 +08:00
2025-03-24 14:27:35 +08:00
int totalcount =
qcQualityStatisticsFirsts.Count
+ wmPolishQualityStatistics.Count
+ qcGp12ServiceStatistics.Count
2025-03-24 17:11:05 +08:00
//+ wmGp12QualityStatistics.Count
2025-03-24 11:22:13 +08:00
+ wmPolishWorkQualityStatistics.Count;
2025-03-21 17:39:55 +08:00
2025-03-24 14:27:35 +08:00
#region WmPolishRecord
// 组装 WmPolishRecord 实体
List<WmPolishRecord> wmPolishRecords = new List<WmPolishRecord>();
2025-03-21 17:39:55 +08:00
2025-03-24 10:09:16 +08:00
foreach (var item in qcQualityStatisticsFirsts)
{
wmPolishRecords.Add(
new WmPolishRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
2025-03-24 11:12:52 +08:00
FkInventoryId = item.Id,
2025-03-24 10:09:16 +08:00
Code = "自动",
Partnumber = item.FinishedPartNumber,
ChangeType = 1,
ChangeQuantity = item.PaoguangTotal,
ActionTime = item.StartTime,
Status = 1,
Remark = "产线报表抛光件自动入库,来源工单:" + item.WorkorderId
2025-03-24 10:09:16 +08:00
}
);
}
2025-03-21 17:39:55 +08:00
2025-03-24 10:09:16 +08:00
foreach (var item in wmPolishQualityStatistics)
{
wmPolishRecords.Add(
new WmPolishRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
2025-03-24 11:12:52 +08:00
FkInventoryId = item.Id,
2025-03-24 10:09:16 +08:00
Code = "自动",
Partnumber = item.Partnumber,
ChangeType = 1,
ChangeQuantity = item.PaoguangTotal,
ActionTime = item.StartTime,
Status = 1,
2025-03-24 14:27:35 +08:00
Remark = "后道手填报表抛光件自动入库"
2025-03-24 10:09:16 +08:00
}
);
}
2025-03-21 17:39:55 +08:00
2025-03-24 10:09:16 +08:00
foreach (var item in qcGp12ServiceStatistics)
{
wmPolishRecords.Add(
new WmPolishRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
2025-03-24 14:27:35 +08:00
FkInventoryId = item.Id,
Code = "自动",
2025-03-24 10:09:16 +08:00
Partnumber = item.PartNumber,
ChangeType = 1,
ChangeQuantity = item.PolishNumber,
ActionTime = item.StartTime,
Status = 1,
2025-03-24 14:27:35 +08:00
Remark = " GP12触摸屏报表抛光件自动入库"
2025-03-24 10:09:16 +08:00
}
);
}
2025-03-21 17:39:55 +08:00
2025-03-24 17:11:05 +08:00
/*foreach (var item in wmGp12QualityStatistics)
2025-03-24 10:09:16 +08:00
{
wmPolishRecords.Add(
new WmPolishRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
2025-03-24 14:27:35 +08:00
FkInventoryId = item.Id,
Code = "自动",
2025-03-24 10:09:16 +08:00
Partnumber = item.Partnumber,
ChangeType = 1,
ChangeQuantity = item.PaoguangTotal,
ActionTime = item.StartTime,
Status = 1,
2025-03-24 14:27:35 +08:00
Remark = " GP12手填报表抛光件自动入库"
2025-03-24 10:09:16 +08:00
}
);
2025-03-24 17:11:05 +08:00
}*/
2025-03-21 17:39:55 +08:00
2025-03-24 10:09:16 +08:00
foreach (var item in wmPolishWorkQualityStatistics)
{
wmPolishRecords.Add(
new WmPolishRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
2025-03-24 11:12:52 +08:00
FkInventoryId = item.Id,
2025-03-24 10:09:16 +08:00
Code = "自动",
Partnumber = item.Partnumber,
ChangeType = 2,
ChangeQuantity = item.RequireNumber,
ActionTime = item.StartTime,
Status = 1,
2025-03-24 14:27:35 +08:00
Remark = "抛光手填报表自动出库"
2025-03-24 10:09:16 +08:00
}
);
}
#endregion
2025-03-21 17:39:55 +08:00
// 批量插入到 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
2025-03-24 10:09:16 +08:00
// 批量插入到 wm_polish_record 表
//如果有这个时间段的数据,要删除
List<WmPolishRecord> delwmPolishRecords = Context
.Queryable<WmPolishRecord>()
.Where(it => it.Code == "自动")
2025-03-24 14:27:35 +08:00
.Where(it => it.ActionTime >= parm.StartTime)
2025-03-24 10:09:16 +08:00
.ToList();
Context.Deleteable(delwmPolishRecords).ExecuteCommand();
if (wmPolishRecords.Any())
{
Context.Insertable(wmPolishRecords).ExecuteCommand();
}
2025-03-21 17:39:55 +08:00
2025-03-24 10:09:16 +08:00
return wmPolishRecords.Count; // 返回插入的记录数
}
}
}
}