539 lines
24 KiB
C#
539 lines
24 KiB
C#
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; // 返回插入的记录数
|
||
}
|
||
}
|
||
}
|
||
}
|