一次合格,抛光品仓库统计逻辑修改

This commit is contained in:
2025-06-16 11:22:40 +08:00
parent e0afea26c2
commit ffb6157d7f
4 changed files with 353 additions and 290 deletions

View File

@@ -297,20 +297,18 @@ namespace ZR.Service.mes.wms
.ToList(); .ToList();
foreach (WmOneTimeInventoryDto item in list) foreach (WmOneTimeInventoryDto item in list)
{ {
//TODO 20250408 盘点时间修正(三个时间比对) //TODO 20250408 盘点时间修正(三个时间比对)
WmOneTimeRecord minCheckRecord = WmOneTimeRecord minCheckRecord = wmOneTimeRecords
wmOneTimeRecords .Where(o => o.Partnumber == item.Partnumber && o.ChangeType == 3)
.Where(o => o.Partnumber == item.Partnumber && o.ChangeType == 3) .OrderByDescending(o => o.ActionTime)
.OrderByDescending(o => o.ActionTime) .FirstOrDefault();
.FirstOrDefault();
DateTime minCheckRecordTime = DateTime.MinValue; DateTime minCheckRecordTime = DateTime.MinValue;
int minCheckRecordQuantity = 0; int minCheckRecordQuantity = 0;
if (minCheckRecord != null) if (minCheckRecord != null)
{ {
minCheckRecordTime = minCheckRecord.ActionTime ?? DateTime.MinValue; minCheckRecordTime = minCheckRecord.ActionTime ?? DateTime.MinValue;
} }
DateTime minCheckInventoryTime = item.CreatedTime ?? minDateTime; DateTime minCheckInventoryTime = item.CreatedTime ?? minDateTime;
//TODO 20250408修改 最小盘点时间判断/如有盘点记录,则优先取盘点记录数据 //TODO 20250408修改 最小盘点时间判断/如有盘点记录,则优先取盘点记录数据
DateTime checkTime = DateTime checkTime =
@@ -343,11 +341,14 @@ namespace ZR.Service.mes.wms
) )
.Select(o => o.ChangeQuantity) .Select(o => o.ChangeQuantity)
.Sum(); .Sum();
item.RealQuantity = minCheckRecordQuantity + (runum.Value - chunum.Value); item.RealQuantity = minCheckRecordQuantity + (runum.Value - chunum.Value);
item.CreatedTime = checkTime; item.CreatedTime = checkTime;
} }
list = list.Where(it => it.RealQuantity != 0 || it.Quantity != 0) list = list.WhereIF(
string.IsNullOrEmpty(parm.Partnumber),
it => it.RealQuantity != 0 || it.Quantity != 0
)
.Where(it => !string.IsNullOrEmpty(it.Partnumber)) .Where(it => !string.IsNullOrEmpty(it.Partnumber))
.DistinctBy(it => it.Partnumber) .DistinctBy(it => it.Partnumber)
.OrderBy(it => it.RealQuantity) .OrderBy(it => it.RealQuantity)
@@ -657,17 +658,17 @@ namespace ZR.Service.mes.wms
{ {
Context.Ado.BeginTran(); Context.Ado.BeginTran();
// 检查是否存在库中 // 检查是否存在库中
/* WmOneTimeInventory oneTImeInventory = Context /* WmOneTimeInventory oneTImeInventory = Context
.Queryable<WmOneTimeInventory>() .Queryable<WmOneTimeInventory>()
.Where(it => it.Id == parm.Id) .Where(it => it.Id == parm.Id)
.Where(it => it.Status == 1) .Where(it => it.Status == 1)
.First(); .First();
if (oneTImeInventory == null) if (oneTImeInventory == null)
{ {
Context.Ado.RollbackTran(); Context.Ado.RollbackTran();
throw new Exception("盘点记录不存在" + parm.Id); throw new Exception("盘点记录不存在" + parm.Id);
} }
Context.Updateable(parm).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();*/ Context.Updateable(parm).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();*/
// 已有则新增记录 // 已有则新增记录
//TODO 20250408 新逻辑调整 只添加盘点记录 算库存数时自动调整 //TODO 20250408 新逻辑调整 只添加盘点记录 算库存数时自动调整
string code = !string.IsNullOrEmpty(parm.WorkOrder) string code = !string.IsNullOrEmpty(parm.WorkOrder)
@@ -724,6 +725,7 @@ namespace ZR.Service.mes.wms
.OrderBy(it => it.Description) .OrderBy(it => it.Description)
.ToList(); .ToList();
} }
//导出 //导出
public List<WmOneTimeInventoryExportDto> GetExportList(WmOneTimeInventoryQueryDto parm) public List<WmOneTimeInventoryExportDto> GetExportList(WmOneTimeInventoryQueryDto parm)
{ {
@@ -748,13 +750,9 @@ namespace ZR.Service.mes.wms
//TODO 20250408 新导出逻辑 //TODO 20250408 新导出逻辑
// 构建导出数据 // 构建导出数据
WmOneTimeInventoryQueryDto queryParams = new() WmOneTimeInventoryQueryDto queryParams = new() { PageSize = 10000, PageNum = 1 };
{ List<WmOneTimeInventoryExportDto> exportDto = GetListNew(queryParams)
PageSize = 10000, .Result.Select(it =>
PageNum = 1
};
List<WmOneTimeInventoryExportDto> exportDto = GetListNew(queryParams).Result
.Select(it =>
{ {
return new WmOneTimeInventoryExportDto return new WmOneTimeInventoryExportDto
{ {

View File

@@ -1,7 +1,8 @@
using System;
using System.Linq;
using System.Text.RegularExpressions;
using Infrastructure.Attribute; using Infrastructure.Attribute;
using SqlSugar; using SqlSugar;
using System.Linq;
using System;
using ZR.Model; using ZR.Model;
using ZR.Model.Business; using ZR.Model.Business;
using ZR.Model.MES.qc; using ZR.Model.MES.qc;
@@ -9,261 +10,257 @@ using ZR.Model.MES.wms;
using ZR.Model.MES.wms.Dto; using ZR.Model.MES.wms.Dto;
using ZR.Repository; using ZR.Repository;
using ZR.Service.mes.wms.IService; using ZR.Service.mes.wms.IService;
using System.Text.RegularExpressions;
namespace ZR.Service.mes.wms namespace ZR.Service.mes.wms
{ {
/// <summary> /// <summary>
/// 一次合格品仓库记录表Service业务层处理 /// 一次合格品仓库记录表Service业务层处理
/// </summary> /// </summary>
[AppService( [AppService(
ServiceType = typeof(IWmOneTimeRecordService), ServiceType = typeof(IWmOneTimeRecordService),
ServiceLifetime = LifeTime.Transient ServiceLifetime = LifeTime.Transient
)] )]
public class WmOneTimeRecordService : BaseService<WmOneTimeRecord>, IWmOneTimeRecordService public class WmOneTimeRecordService : BaseService<WmOneTimeRecord>, IWmOneTimeRecordService
{ {
/// <summary> /// <summary>
/// 查询一次合格品仓库记录表列表 /// 查询一次合格品仓库记录表列表
/// </summary> /// </summary>
/// <param name="parm"></param> /// <param name="parm"></param>
/// <returns></returns> /// <returns></returns>
public PagedInfo<WmOneTimeRecordDto> GetList(WmOneTimeRecordQueryDto parm) public PagedInfo<WmOneTimeRecordDto> GetList(WmOneTimeRecordQueryDto parm)
{ {
var predicate = Expressionable var predicate = Expressionable
.Create<WmOneTimeRecord>() .Create<WmOneTimeRecord>()
.AndIF( .AndIF(
!string.IsNullOrEmpty(parm.Partnumber), !string.IsNullOrEmpty(parm.Partnumber),
it => it.Partnumber == parm.Partnumber it => it.Partnumber == parm.Partnumber
) )
.AndIF(!string.IsNullOrEmpty(parm.Remark), it => it.Remark.Contains(parm.Remark)) .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.Code), it => it.Code.Contains(parm.Code))
/*.AndIF( /*.AndIF(
!string.IsNullOrEmpty(parm.FkInventoryId), !string.IsNullOrEmpty(parm.FkInventoryId),
it => it.FkInventoryId == parm.FkInventoryId it => it.FkInventoryId == parm.FkInventoryId
)*/ )*/
.AndIF(!string.IsNullOrEmpty(parm.Id), it => it.Id == parm.Id) .AndIF(!string.IsNullOrEmpty(parm.Id), it => it.Id == parm.Id)
.AndIF(parm.ChangeType > -1, it => it.ChangeType == parm.ChangeType) .AndIF(parm.ChangeType > -1, it => it.ChangeType == parm.ChangeType)
.AndIF( .AndIF(
parm.StartActionTime != null, parm.StartActionTime != null,
it => parm.StartActionTime.Value.ToLocalTime() <= it.ActionTime it => parm.StartActionTime.Value.ToLocalTime() <= it.ActionTime
) )
.AndIF( .AndIF(
parm.EndActionTime != null, parm.EndActionTime != null,
it => parm.EndActionTime.Value.ToLocalTime() >= it.ActionTime it => parm.EndActionTime.Value.ToLocalTime() >= it.ActionTime
); );
var response = Queryable() var response = Queryable()
.Where(predicate.ToExpression()) .Where(predicate.ToExpression())
.ToPage<WmOneTimeRecord, WmOneTimeRecordDto>(parm); .ToPage<WmOneTimeRecord, WmOneTimeRecordDto>(parm);
return response; return response;
} }
/// <summary> /// <summary>
/// 获取详情 /// 获取详情
/// </summary> /// </summary>
/// <param name="Id"></param> /// <param name="Id"></param>
/// <returns></returns> /// <returns></returns>
public WmOneTimeRecord GetInfo(string Id) public WmOneTimeRecord GetInfo(string Id)
{ {
var response = Queryable().Where(x => x.Id == Id).First(); var response = Queryable().Where(x => x.Id == Id).First();
return response; return response;
} }
/// <summary> /// <summary>
/// 添加一次合格品仓库记录表 /// 添加一次合格品仓库记录表
/// </summary> /// </summary>
/// <param name="model"></param> /// <param name="model"></param>
/// <returns></returns> /// <returns></returns>
public WmOneTimeRecord AddWmOneTimeRecord(WmOneTimeRecord model) public WmOneTimeRecord AddWmOneTimeRecord(WmOneTimeRecord model)
{ {
return Context.Insertable(model).ExecuteReturnEntity(); return Context.Insertable(model).ExecuteReturnEntity();
} }
/// <summary> /// <summary>
/// 修改一次合格品仓库记录表 /// 修改一次合格品仓库记录表
/// </summary> /// </summary>
/// <param name="model"></param> /// <param name="model"></param>
/// <returns></returns> /// <returns></returns>
public int UpdateWmOneTimeRecord(WmOneTimeRecord model) public int UpdateWmOneTimeRecord(WmOneTimeRecord model)
{ {
//var response = Update(w => w.Id == model.Id, it => new WmOneTimeRecord() //var response = Update(w => w.Id == model.Id, it => new WmOneTimeRecord()
//{ //{
// Code = model.Code, // Code = model.Code,
// Partnumber = model.Partnumber, // Partnumber = model.Partnumber,
// BlankNum = model.BlankNum, // BlankNum = model.BlankNum,
// ChangeType = model.ChangeType, // ChangeType = model.ChangeType,
// ChangeQuantity = model.ChangeQuantity, // ChangeQuantity = model.ChangeQuantity,
// ActionTime = model.ActionTime, // ActionTime = model.ActionTime,
// Status = model.Status, // Status = model.Status,
// Remark = model.Remark, // Remark = model.Remark,
// CreatedBy = model.CreatedBy, // CreatedBy = model.CreatedBy,
// CreatedTime = model.CreatedTime, // CreatedTime = model.CreatedTime,
// UpdatedBy = model.UpdatedBy, // UpdatedBy = model.UpdatedBy,
// UpdatedTime = model.UpdatedTime, // UpdatedTime = model.UpdatedTime,
//}); //});
//return response; //return response;
return Update(model, true); return Update(model, true);
} }
/// <summary>
/// <summary> /// 自动生成一次合格仓库记录日志
/// 自动生成一次合格仓库记录日志 /// </summary>
/// </summary> /// <param name="parm"></param>
/// <param name="parm"></param> /// <returns></returns>
/// <returns></returns> /// <exception cref="global::System.NotImplementedException"></exception>
/// <exception cref="global::System.NotImplementedException"></exception> public int GenerateWmOneTimeRecord(WmOneTimeRecordGenerateDto parm)
public int GenerateWmOneTimeRecord(WmOneTimeRecordGenerateDto parm) {
{ if (parm == null || parm.StartTime == null || parm.StartTime.Value == DateTime.MinValue)
{
if (parm == null || parm.StartTime == null || parm.StartTime.Value == DateTime.MinValue) return -1;
{ }
return -1; else
} {
else #region
{ //TODO 入库条件1 产线合格品qc_quality_statistics_first合格数其中去除倒车雷达
#region List<QcQualityStatisticsFirst> qcQualityStatisticsFirsts = Context
//TODO 入库条件1 产线合格品qc_quality_statistics_first,合格数,其中去除(倒车雷达) .Queryable<QcQualityStatisticsFirst>()
List<QcQualityStatisticsFirst> qcQualityStatisticsFirsts = Context .WhereIF(
.Queryable<QcQualityStatisticsFirst>() !string.IsNullOrEmpty(parm.Partnumber),
.WhereIF( it => it.FinishedPartNumber == parm.Partnumber
!string.IsNullOrEmpty(parm.Partnumber), )
it => it.FinishedPartNumber == parm.Partnumber .Where(it => !it.ProductDescription.Contains("倒车雷达"))
)
.Where(it => !it.ProductDescription.Contains("倒车雷达"))
.Where(it => it.StartTime >= parm.StartTime) .Where(it => it.StartTime >= parm.StartTime)
.Where(it => it.QualifiedNumber > 0) .Where(it => it.QualifiedNumber > 0)
.Where(it => it.Remark == "抛光") .Where(it => it.Remark == "抛光")
.ToList(); .ToList();
//TODO 入库条件2 抛光合格品 wm_polish_work_quality_statistics 合格数 //TODO 入库条件2 抛光合格品 wm_polish_work_quality_statistics 合格数
List<WmPolishWorkQualityStatistics> wmPolishWorkQualityStatistics = Context List<WmPolishWorkQualityStatistics> wmPolishWorkQualityStatistics = Context
.Queryable<WmPolishWorkQualityStatistics>() .Queryable<WmPolishWorkQualityStatistics>()
.WhereIF( .WhereIF(
!string.IsNullOrEmpty(parm.Partnumber), !string.IsNullOrEmpty(parm.Partnumber),
it => it.Partnumber == parm.Partnumber it => it.Partnumber == parm.Partnumber
) )
.Where(it => it.StartTime >= parm.StartTime) .Where(it => it.StartTime >= parm.StartTime)
.ToList(); .ToList();
//TODO 出库条件1 GP12 (新) 触摸屏 qc_gp12_service_statistics 投入数 //TODO 出库条件1 GP12 (新) 触摸屏 qc_gp12_service_statistics 投入数
List<QcGp12ServiceStatistics> qcGp12ServiceStatistics = Context List<QcGp12ServiceStatistics> qcGp12ServiceStatistics = Context
.Queryable<QcGp12ServiceStatistics>() .Queryable<QcGp12ServiceStatistics>()
.WhereIF( .WhereIF(
!string.IsNullOrEmpty(parm.Partnumber), !string.IsNullOrEmpty(parm.Partnumber),
it => it.PartNumber == parm.Partnumber it => it.PartNumber == parm.Partnumber
) )
.Where(it => it.StartTime >= parm.StartTime) .Where(it => it.StartTime >= parm.StartTime)
.Where(it => it.GroupSort == 1) .Where(it => it.GroupSort == 1)
.ToList(); .ToList();
//TODO 出库条件2 后道 wm_polish_quality_statistics 投入数 //TODO 出库条件2 后道 wm_polish_quality_statistics 投入数
List<WmPolishQualityStatistics> wmPolishQualityStatistics = Context List<WmPolishQualityStatistics> wmPolishQualityStatistics = Context
.Queryable<WmPolishQualityStatistics>() .Queryable<WmPolishQualityStatistics>()
.WhereIF( .WhereIF(
!string.IsNullOrEmpty(parm.Partnumber), !string.IsNullOrEmpty(parm.Partnumber),
it => it.Partnumber == parm.Partnumber it => it.Partnumber == parm.Partnumber
) )
.Where(it => it.StartTime >= parm.StartTime) .Where(it => it.StartTime >= parm.StartTime)
.ToList(); .ToList();
#endregion #endregion
#region WmOneTimeRecord #region WmOneTimeRecord
List<WmOneTimeRecord> wmOneTimeRecords = new List<WmOneTimeRecord>(); List<WmOneTimeRecord> wmOneTimeRecords = new List<WmOneTimeRecord>();
foreach (var item in qcQualityStatisticsFirsts) foreach (var item in qcQualityStatisticsFirsts)
{ {
wmOneTimeRecords.Add( wmOneTimeRecords.Add(
new WmOneTimeRecord new WmOneTimeRecord
{ {
Id = SnowFlakeSingle.Instance.NextId().ToString(), Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id, FkInventoryId = item.Id,
Code = "自动", Code = "自动",
Partnumber = item.FinishedPartNumber, Partnumber = item.FinishedPartNumber,
ChangeType = 1, ChangeType = 1,
ChangeQuantity = item.QualifiedNumber, ChangeQuantity = item.QualifiedNumber,
ActionTime = item.StartTime, ActionTime = item.StartTime,
Status = 1, Status = 1,
Remark = "产线报表合格品自动入库,来源工单号:" + item.WorkorderId Remark = "产线报表合格品自动入库,来源工单号:" + item.WorkorderId
} }
); );
} }
foreach (var item in wmPolishWorkQualityStatistics) foreach (var item in wmPolishWorkQualityStatistics)
{ {
wmOneTimeRecords.Add( wmOneTimeRecords.Add(
new WmOneTimeRecord new WmOneTimeRecord
{ {
Id = SnowFlakeSingle.Instance.NextId().ToString(), Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id, FkInventoryId = item.Id,
Code = "自动", Code = "自动",
Partnumber = item.Partnumber, Partnumber = item.Partnumber,
ChangeType = 1, ChangeType = 1,
ChangeQuantity = item.QualifiedNumber, ChangeQuantity = item.QualifiedNumber,
ActionTime = item.StartTime, ActionTime = item.StartTime,
Status = 1, Status = 1,
Remark = "抛光报表合格品自动入库" Remark = "抛光报表合格品自动入库"
} }
); );
} }
foreach (var item in qcGp12ServiceStatistics) foreach (var item in qcGp12ServiceStatistics)
{ {
wmOneTimeRecords.Add( wmOneTimeRecords.Add(
new WmOneTimeRecord new WmOneTimeRecord
{ {
Id = SnowFlakeSingle.Instance.NextId().ToString(), Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id, FkInventoryId = item.Id,
Code = "自动", Code = "自动",
Partnumber = item.PartNumber, Partnumber = item.PartNumber,
ChangeType = 2, ChangeType = 2,
ChangeQuantity = item.RequireNumber, ChangeQuantity = item.RequireNumber,
ActionTime = item.StartTime, ActionTime = item.StartTime,
Status = 1, Status = 1,
Remark = "GP12触摸屏报表投入自动出库" Remark = "GP12触摸屏报表投入自动出库"
} }
); );
} }
foreach (var item in wmPolishQualityStatistics) foreach (var item in wmPolishQualityStatistics)
{ {
wmOneTimeRecords.Add( wmOneTimeRecords.Add(
new WmOneTimeRecord new WmOneTimeRecord
{ {
Id = SnowFlakeSingle.Instance.NextId().ToString(), Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id, FkInventoryId = item.Id,
Code = "自动", Code = "自动",
Partnumber = item.Partnumber, Partnumber = item.Partnumber,
ChangeType = 2, ChangeType = 2,
ChangeQuantity = item.RequireNumber, ChangeQuantity = item.RequireNumber,
ActionTime = item.StartTime, ActionTime = item.StartTime,
Status = 1, Status = 1,
Remark = "后道报表自动出库" Remark = "后道报表自动出库"
} }
); );
} }
#endregion
#endregion //如果有这个时间段的数据,要删除
List<WmOneTimeRecord> delwmOneTimeRecords = Context
.Queryable<WmOneTimeRecord>()
.Where(it => it.Code == "自动")
.Where(it => it.ActionTime >= parm.StartTime)
.ToList();
Context.Deleteable(delwmOneTimeRecords).ExecuteCommand();
if (wmOneTimeRecords.Any())
{
Context.Insertable(wmOneTimeRecords).ExecuteCommand();
}
//如果有这个时间段的数据,要删除 return wmOneTimeRecords.Count; // 返回插入的记录数
List<WmOneTimeRecord> delwmOneTimeRecords = Context }
.Queryable<WmOneTimeRecord>() }
.Where(it => it.Code == "自动")
.Where(it => it.ActionTime >= parm.StartTime)
.ToList();
Context.Deleteable(delwmOneTimeRecords).ExecuteCommand();
if (wmOneTimeRecords.Any())
{
Context.Insertable(wmOneTimeRecords).ExecuteCommand();
}
return wmOneTimeRecords.Count; // 返回插入的记录数
}
}
/// <summary> /// <summary>
/// 自动生成一次合格仓库记录日志 (后道自动化版本) /// 自动生成一次合格仓库记录日志 (后道自动化版本)
@@ -326,7 +323,15 @@ namespace ZR.Service.mes.wms
) )
.Where(it => it.StartTime >= parm.StartTime) .Where(it => it.StartTime >= parm.StartTime)
.Where(it => it.GroupSort == 1) .Where(it => it.GroupSort == 1)
// .Where(it => it.IsOut == 1) 待定 现在暂时都是直接出库 // .Where(it => it.IsOut == 1) 待定 现在暂时都是直接出库
.ToList();
List<WmPolishQualityStatistics> wmPolishQualityStatistics = Context
.Queryable<WmPolishQualityStatistics>()
.WhereIF(
!string.IsNullOrEmpty(parm.Partnumber),
it => it.Partnumber == parm.Partnumber
)
.Where(it => it.StartTime >= parm.StartTime)
.ToList(); .ToList();
#endregion #endregion
@@ -417,7 +422,7 @@ namespace ZR.Service.mes.wms
foreach (var item in qcBackEndQualityStatistics) foreach (var item in qcBackEndQualityStatistics)
{ {
// TODO 零件号二次处理 // TODO 零件号二次处理
string partNumber = item.PartNumber; string partNumber = item.PartNumber;
// 使用正则表达式匹配并移除特殊后缀 // 使用正则表达式匹配并移除特殊后缀
string processedPartnumber = Regex.Replace( string processedPartnumber = Regex.Replace(
partNumber, partNumber,
@@ -440,10 +445,38 @@ namespace ZR.Service.mes.wms
} }
); );
} }
//XXX 20250613 后道触摸屏与手填报表同时统计
foreach (var item in wmPolishQualityStatistics)
{
// TODO 零件号二次处理
string partNumber = item.Partnumber;
// 使用正则表达式匹配并移除特殊后缀
string processedPartnumber = Regex.Replace(
partNumber,
@"-(FL|FR|RR|RL)$",
"",
RegexOptions.IgnoreCase
);
wmOneTimeRecords.Add(
new WmOneTimeRecord
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkInventoryId = item.Id,
Code = "自动",
Partnumber = processedPartnumber,
ChangeType = 2,
ChangeQuantity = item.RequireNumber,
ActionTime = item.StartTime,
Status = 1,
Remark = "后道报表-手填报表出库"
}
);
}
#endregion #endregion
// 直接删除旧数据,避免先查询再删除的并发问题 // 直接删除旧数据,避免先查询再删除的并发问题
Context.Deleteable<WmOneTimeRecord>() Context
.Deleteable<WmOneTimeRecord>()
.Where(it => it.Code == "自动") .Where(it => it.Code == "自动")
.Where(it => it.ActionTime >= parm.StartTime) .Where(it => it.ActionTime >= parm.StartTime)
.ExecuteCommand(); .ExecuteCommand();
@@ -469,7 +502,6 @@ namespace ZR.Service.mes.wms
Context.Ado.RollbackTran(); Context.Ado.RollbackTran();
return -1; return -1;
} }
} }
} }
} }

View File

@@ -316,11 +316,10 @@ namespace ZR.Service.mes.wms
foreach (WmPolishInventoryDto item in list) foreach (WmPolishInventoryDto item in list)
{ {
//TODO 20250408 盘点时间修正(三个时间比对) //TODO 20250408 盘点时间修正(三个时间比对)
WmPolishRecord minCheckRecord = WmPolishRecord minCheckRecord = wmPolishRecords
wmPolishRecords .Where(o => o.Partnumber == item.Partnumber && o.ChangeType == 3)
.Where(o => o.Partnumber == item.Partnumber && o.ChangeType == 3) .OrderByDescending(o => o.ActionTime)
.OrderByDescending(o => o.ActionTime) .FirstOrDefault();
.FirstOrDefault();
DateTime minCheckRecordTime = DateTime.MinValue; DateTime minCheckRecordTime = DateTime.MinValue;
int minCheckRecordQuantity = 0; int minCheckRecordQuantity = 0;
if (minCheckRecord != null) if (minCheckRecord != null)
@@ -363,7 +362,10 @@ namespace ZR.Service.mes.wms
item.CreatedTime = checkTime; item.CreatedTime = checkTime;
} }
list = list.Where(it => it.RealQuantity != 0 || it.Quantity != 0) list = list.WhereIF(
string.IsNullOrEmpty(parm.Partnumber),
it => it.RealQuantity != 0 || it.Quantity != 0
)
.Where(it => !string.IsNullOrEmpty(it.Partnumber)) .Where(it => !string.IsNullOrEmpty(it.Partnumber))
.DistinctBy(it => it.Partnumber) .DistinctBy(it => it.Partnumber)
.OrderBy(it => it.RealQuantity) .OrderBy(it => it.RealQuantity)
@@ -726,6 +728,7 @@ namespace ZR.Service.mes.wms
throw new Exception(e.Message); throw new Exception(e.Message);
} }
} }
// 盘点 // 盘点
public int DoWmPolishStocktaking(WmPolishInventory parm) public int DoWmPolishStocktaking(WmPolishInventory parm)
{ {
@@ -737,17 +740,17 @@ namespace ZR.Service.mes.wms
{ {
Context.Ado.BeginTran(); Context.Ado.BeginTran();
// 检查是否存在库中 // 检查是否存在库中
/* WmPolishInventory polishInventory = Context /* WmPolishInventory polishInventory = Context
.Queryable<WmPolishInventory>() .Queryable<WmPolishInventory>()
.Where(it => it.Id == parm.Id) .Where(it => it.Id == parm.Id)
.Where(it => it.Status == 1) .Where(it => it.Status == 1)
.First(); .First();
if (polishInventory == null) if (polishInventory == null)
{ {
Context.Ado.RollbackTran(); Context.Ado.RollbackTran();
throw new Exception("盘点记录不存在" + parm.Id); throw new Exception("盘点记录不存在" + parm.Id);
} }
Context.Updateable(parm).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();*/ Context.Updateable(parm).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();*/
// 已有则新增记录 // 已有则新增记录
string code = !string.IsNullOrEmpty(parm.WorkOrder) string code = !string.IsNullOrEmpty(parm.WorkOrder)
? parm.WorkOrder ? parm.WorkOrder
@@ -828,14 +831,10 @@ namespace ZR.Service.mes.wms
//TODO 20250408 新导出逻辑 //TODO 20250408 新导出逻辑
// 构建导出数据 // 构建导出数据
WmPolishInventoryQueryDto queryParams = new() WmPolishInventoryQueryDto queryParams = new() { PageSize = 10000, PageNum = 1 };
{
PageSize = 10000,
PageNum = 1
};
// 构建导出数据 // 构建导出数据
List<WmPolishInventoryExportDto> exportDto = GetListNew(queryParams).Result List<WmPolishInventoryExportDto> exportDto = GetListNew(queryParams)
.Select(it => .Result.Select(it =>
{ {
return new WmPolishInventoryExportDto return new WmPolishInventoryExportDto
{ {
@@ -901,7 +900,6 @@ namespace ZR.Service.mes.wms
/// <returns></returns> /// <returns></returns>
public (string, object, object) ImportExcel(List<WmPolishInventoryExportDto> importList) public (string, object, object) ImportExcel(List<WmPolishInventoryExportDto> importList)
{ {
List<WmPolishInventory> wmPolishInventorylist = importList List<WmPolishInventory> wmPolishInventorylist = importList
.Select(it => new WmPolishInventory .Select(it => new WmPolishInventory
{ {

View File

@@ -132,7 +132,7 @@ namespace ZR.Service.mes.wms
.Where(it => !it.ProductDescription.Contains("倒车雷达")) .Where(it => !it.ProductDescription.Contains("倒车雷达"))
.Where(it => it.StartTime >= parm.StartTime) .Where(it => it.StartTime >= parm.StartTime)
.Where(it => it.PaoguangTotal > 0) .Where(it => it.PaoguangTotal > 0)
.Where(it=> it.Remark == "抛光") .Where(it => it.Remark == "抛光")
.ToList(); .ToList();
// 后道报表 根据日期范围 去取后道反抛光的数据 wm_polish_quality_statistics // 后道报表 根据日期范围 去取后道反抛光的数据 wm_polish_quality_statistics
@@ -204,7 +204,7 @@ namespace ZR.Service.mes.wms
ChangeQuantity = item.PaoguangTotal, ChangeQuantity = item.PaoguangTotal,
ActionTime = item.StartTime, ActionTime = item.StartTime,
Status = 1, Status = 1,
Remark = "产线报表抛光件自动入库,来源工单:"+item.WorkorderId Remark = "产线报表抛光件自动入库,来源工单:" + item.WorkorderId
} }
); );
} }
@@ -329,7 +329,7 @@ namespace ZR.Service.mes.wms
.Where(it => it.Remark == "抛光") .Where(it => it.Remark == "抛光")
.ToList(); .ToList();
// 后道报表 根据日期范围 去取后道反抛光的数据 wm_polish_quality_statistics // 后道报表 根据日期范围 去取后道反抛光的数据 wm_polish_quality_statistics XXX-20250613触摸屏数据+后道报表数据)
List<QcBackEndServiceStatistics> qcBackEndQualityStatistics = Context List<QcBackEndServiceStatistics> qcBackEndQualityStatistics = Context
.Queryable<QcBackEndServiceStatistics>() .Queryable<QcBackEndServiceStatistics>()
.WhereIF( .WhereIF(
@@ -340,6 +340,15 @@ namespace ZR.Service.mes.wms
.Where(it => it.PolishNumber > 0) .Where(it => it.PolishNumber > 0)
.Where(it => it.GroupSort == 1) .Where(it => it.GroupSort == 1)
.ToList(); .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) // GP12报表 根据日期范围 去取gp12反抛光的数据 qc_gp12_service_statistics GP12(new) wm_gp12_quality_statistics(old)
List<QcGp12ServiceStatistics> qcGp12ServiceStatistics = Context List<QcGp12ServiceStatistics> qcGp12ServiceStatistics = Context
@@ -427,7 +436,33 @@ namespace ZR.Service.mes.wms
} }
); );
} }
//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) foreach (var item in qcGp12ServiceStatistics)
{ {
// TODO 零件号二次处理 // TODO 零件号二次处理