diff --git a/ZR.Admin.WebApi/Controllers/mes/wms/WmOneTimeRecordController.cs b/ZR.Admin.WebApi/Controllers/mes/wms/WmOneTimeRecordController.cs index de9e3a3c..d9560a79 100644 --- a/ZR.Admin.WebApi/Controllers/mes/wms/WmOneTimeRecordController.cs +++ b/ZR.Admin.WebApi/Controllers/mes/wms/WmOneTimeRecordController.cs @@ -112,7 +112,7 @@ namespace ZR.Admin.WebApi.Controllers public IActionResult GenerateWmOneTimeRecord([FromBody] WmOneTimeRecordGenerateDto parm) { - var response = _WmOneTimeRecordService.GenerateWmOneTimeRecord(parm); + var response = _WmOneTimeRecordService.GenerateWmOneTimeRecord02(parm); return SUCCESS(response); } } diff --git a/ZR.Admin.WebApi/Controllers/mes/wms/WmPolishRecordController.cs b/ZR.Admin.WebApi/Controllers/mes/wms/WmPolishRecordController.cs index 857281a2..b9f054a7 100644 --- a/ZR.Admin.WebApi/Controllers/mes/wms/WmPolishRecordController.cs +++ b/ZR.Admin.WebApi/Controllers/mes/wms/WmPolishRecordController.cs @@ -112,7 +112,7 @@ namespace ZR.Admin.WebApi.Controllers public IActionResult GetWmPolishRecordByDate([FromBody] WmPolishRecordGenerateDto parm) { - var response = _WmPolishRecordService.GenerateWmPolishRecord(parm); + var response = _WmPolishRecordService.GenerateWmPolishRecord02(parm); return SUCCESS(response); } } diff --git a/ZR.Service/mes/wms/IService/IWmOneTimeRecordService.cs b/ZR.Service/mes/wms/IService/IWmOneTimeRecordService.cs index 2f5cf8af..1e97fcd4 100644 --- a/ZR.Service/mes/wms/IService/IWmOneTimeRecordService.cs +++ b/ZR.Service/mes/wms/IService/IWmOneTimeRecordService.cs @@ -18,5 +18,8 @@ namespace ZR.Service.mes.wms.IService int UpdateWmOneTimeRecord(WmOneTimeRecord parm); int GenerateWmOneTimeRecord(WmOneTimeRecordGenerateDto parm); + + // 切换后道自动化 + int GenerateWmOneTimeRecord02(WmOneTimeRecordGenerateDto parm); } } diff --git a/ZR.Service/mes/wms/IService/IWmPolishRecordService.cs b/ZR.Service/mes/wms/IService/IWmPolishRecordService.cs index a7ad7e22..f80dbcdc 100644 --- a/ZR.Service/mes/wms/IService/IWmPolishRecordService.cs +++ b/ZR.Service/mes/wms/IService/IWmPolishRecordService.cs @@ -18,7 +18,7 @@ namespace ZR.Service.mes.wms.IService int UpdateWmPolishRecord(WmPolishRecord parm); int GenerateWmPolishRecord(WmPolishRecordGenerateDto parm); - - } + int GenerateWmPolishRecord02(WmPolishRecordGenerateDto parm); + } } diff --git a/ZR.Service/mes/wms/WmOneTimeRecordService.cs b/ZR.Service/mes/wms/WmOneTimeRecordService.cs index 4913f3a8..f93dbcce 100644 --- a/ZR.Service/mes/wms/WmOneTimeRecordService.cs +++ b/ZR.Service/mes/wms/WmOneTimeRecordService.cs @@ -263,5 +263,176 @@ namespace ZR.Service.mes.wms return wmOneTimeRecords.Count; // 返回插入的记录数 } } - } + + /// + /// 自动生成一次合格仓库记录日志 (后道自动化版本) + /// + /// + /// + public int GenerateWmOneTimeRecord02(WmOneTimeRecordGenerateDto parm) + { + if (parm == null || parm.StartTime == null || parm.StartTime.Value == DateTime.MinValue) + { + return -1; + } + int result = 0; + try + { + // 开始事务 + Context.Ado.BeginTran(); + + #region 查询需要的数据 + // 入库条件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.QualifiedNumber > 0) + .Where(it => it.Remark == "抛光") + .ToList(); + + // 入库条件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(); + + // 出库条件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) + .ToList(); + + // 出库条件2 后道 wm_polish_quality_statistics 投入数 + List qcBackEndQualityStatistics = 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.IsOut == 1) 待定 现在暂时都是直接出库 + .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.QualifiedNumber, + ActionTime = item.StartTime, + Status = 1, + Remark = "产线-报表合格品自动入库,来源工单号:" + item.WorkorderId + } + ); + } + + 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.QualifiedNumber, + 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.RequireNumber, + ActionTime = item.StartTime, + Status = 1, + Remark = "GP12触摸屏-报表投入自动出库" + } + ); + } + + foreach (var item in qcBackEndQualityStatistics) + { + wmOneTimeRecords.Add( + new WmOneTimeRecord + { + Id = SnowFlakeSingle.Instance.NextId().ToString(), + FkInventoryId = item.Id, + Code = "自动", + Partnumber = item.PartNumber, + ChangeType = 2, + ChangeQuantity = item.RequireNumber, + ActionTime = item.StartTime, + Status = 1, + Remark = "后道触摸屏-报表自动出库" + } + ); + } + #endregion + + // 直接删除旧数据,避免先查询再删除的并发问题 + Context.Deleteable() + .Where(it => it.Code == "自动") + .Where(it => it.ActionTime >= parm.StartTime) + .ExecuteCommand(); + + if (wmOneTimeRecords.Any()) + { + // 分批插入数据,避免一次插入过多数据 + const int batchSize = 1000; + var batches = wmOneTimeRecords.Chunk(batchSize); + + foreach (var batch in batches) + { + Context.Insertable(batch.ToList()).ExecuteCommand(); + } + } + + result = wmOneTimeRecords.Count; + Context.Ado.CommitTran(); + return result; // 返回插入的记录数 + } + catch (Exception ex) + { + Context.Ado.RollbackTran(); + return -1; + } + + } + } } diff --git a/ZR.Service/mes/wms/WmPolishRecordService.cs b/ZR.Service/mes/wms/WmPolishRecordService.cs index a90106a1..05a846bf 100644 --- a/ZR.Service/mes/wms/WmPolishRecordService.cs +++ b/ZR.Service/mes/wms/WmPolishRecordService.cs @@ -282,6 +282,171 @@ namespace ZR.Service.mes.wms #endregion + // 批量插入到 wm_polish_record 表 + //如果有这个时间段的数据,要删除 + List delwmPolishRecords = Context + .Queryable() + .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; // 返回插入的记录数 + } + } + + /// + /// 根据日期获取抛光记录表数据 (后道触摸屏自动出库版本) + /// + /// + /// + 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 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) + .Where(it => it.Remark == "抛光") + .ToList(); + + // 后道报表 根据日期范围 去取后道反抛光的数据 wm_polish_quality_statistics + List qcBackEndQualityStatistics = Context + .Queryable() + .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(); + + // GP12报表 根据日期范围 去取gp12反抛光的数据 qc_gp12_service_statistics GP12(new) wm_gp12_quality_statistics(old) + 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(); + //二出(同一张表)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(); + #endregion + + int totalcount = + qcQualityStatisticsFirsts.Count + + qcBackEndQualityStatistics.Count + + qcGp12ServiceStatistics.Count + //+ wmGp12QualityStatistics.Count + + wmPolishWorkQualityStatistics.Count; + + #region 组装 WmPolishRecord 实体 + // 组装 WmPolishRecord 实体 + List wmPolishRecords = new List(); + + 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 qcBackEndQualityStatistics) + { + 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 = "后道触摸屏-报表抛光件自动入库" + } + ); + } + + 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 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 delwmPolishRecords = Context