diff --git a/ZR.Admin.WebApi/Controllers/mes/qc/GP12/QcGp12ServiceStatisticsController.cs b/ZR.Admin.WebApi/Controllers/mes/qc/GP12/QcGp12ServiceStatisticsController.cs
index 675e6cb7..1352b0c3 100644
--- a/ZR.Admin.WebApi/Controllers/mes/qc/GP12/QcGp12ServiceStatisticsController.cs
+++ b/ZR.Admin.WebApi/Controllers/mes/qc/GP12/QcGp12ServiceStatisticsController.cs
@@ -1,9 +1,9 @@
using Microsoft.AspNetCore.Mvc;
-using ZR.Model.Dto;
-using ZR.Model.Business;
-using ZR.Service.Business.IBusinessService;
using ZR.Admin.WebApi.Extensions;
using ZR.Admin.WebApi.Filters;
+using ZR.Model.Business;
+using ZR.Model.Dto;
+using ZR.Service.Business.IBusinessService;
//创建时间:2025-01-02
namespace ZR.Admin.WebApi.Controllers
@@ -20,7 +20,9 @@ namespace ZR.Admin.WebApi.Controllers
///
private readonly IQcGp12ServiceStatisticsService _QcGp12ServiceStatisticsService;
- public QcGp12ServiceStatisticsController(IQcGp12ServiceStatisticsService QcGp12ServiceStatisticsService)
+ public QcGp12ServiceStatisticsController(
+ IQcGp12ServiceStatisticsService QcGp12ServiceStatisticsService
+ )
{
_QcGp12ServiceStatisticsService = QcGp12ServiceStatisticsService;
}
@@ -32,12 +34,83 @@ namespace ZR.Admin.WebApi.Controllers
///
[HttpGet("list")]
[ActionPermissionFilter(Permission = "business:qcgp12servicestatistics:list")]
- public IActionResult QueryQcGp12ServiceStatistics([FromQuery] QcGp12ServiceStatisticsQueryDto parm)
+ public IActionResult QueryQcGp12ServiceStatistics(
+ [FromQuery] QcGp12ServiceStatisticsQueryDto parm
+ )
{
var response = _QcGp12ServiceStatisticsService.GetList(parm);
return SUCCESS(response);
}
+ ///
+ /// 查询质量GP12统计报表业务模块列表
+ ///
+ ///
+ ///
+ [HttpPost("GetReviseList")]
+ [AllowAnonymous]
+ public IActionResult GetReviseList([FromBody] QcGp12ServiceStatisticsQueryDto parm)
+ {
+ var response = _QcGp12ServiceStatisticsService.GetReviseList(parm);
+
+ // 初始化统计数据
+ int totalRequireNumber = 0;
+ int totalQualifiedNumber = 0;
+ int totalPolishNumber = 0;
+ int totalDamoNumber = 0;
+ int totalBaofeiNumber = 0;
+ int totalListCount = 0;
+
+ // 将动态属性转换为字典并合并到主对象中,并计算统计数据
+ var resultWithDefects = response
+ .Select(item =>
+ {
+ var itemDict = new Dictionary();
+ foreach (var prop in typeof(QcGp12ServiceStatisticsDto).GetProperties())
+ {
+ itemDict[prop.Name] = prop.GetValue(item);
+ }
+
+ // 添加动态属性
+ foreach (var dynamicProp in item.DynamicProperties)
+ {
+ itemDict[dynamicProp.Key] = dynamicProp.Value;
+ }
+
+ // 累加统计数据
+ totalRequireNumber += Convert.ToInt32(item.RequireNumber);
+ totalQualifiedNumber += Convert.ToInt32(item.QualifiedNumber);
+ totalPolishNumber += Convert.ToInt32(item.PolishNumber);
+ totalDamoNumber += Convert.ToInt32(item.DamoNumber);
+ totalBaofeiNumber += Convert.ToInt32(item.BaofeiNumber);
+ totalListCount += 1;
+ return itemDict;
+ })
+ .ToList();
+
+ // 计算合格率
+ double qualifiedRate =
+ totalRequireNumber > 0
+ ? (double)totalQualifiedNumber / totalRequireNumber * 150
+ : 0;
+ totalListCount = totalListCount / 3;
+ // 创建统计数据字典
+ var statistics = new Dictionary
+ {
+ { "TotalRequireNumber", totalRequireNumber },
+ { "TotalQualifiedNumber", totalQualifiedNumber },
+ { "QualifiedRate", $"{qualifiedRate:F2}%" },
+ { "TotalPolishNumber", totalPolishNumber },
+ { "TotalDamoNumber", totalDamoNumber },
+ { "TotalBaofeiNumber", totalBaofeiNumber },
+ { "TotalListCount", totalListCount }
+ };
+
+ // 返回包含数据和统计数据的对象
+ var result = new { list = resultWithDefects, statistics = statistics };
+
+ return SUCCESS(result);
+ }
///
/// 查询质量GP12统计报表业务模块详情
@@ -49,7 +122,7 @@ namespace ZR.Admin.WebApi.Controllers
public IActionResult GetQcGp12ServiceStatistics(string Id)
{
var response = _QcGp12ServiceStatisticsService.GetInfo(Id);
-
+
var info = response.Adapt();
return SUCCESS(info);
}
@@ -77,7 +150,9 @@ namespace ZR.Admin.WebApi.Controllers
[HttpPut]
[ActionPermissionFilter(Permission = "business:qcgp12servicestatistics:edit")]
[Log(Title = "质量GP12统计报表业务模块", BusinessType = BusinessType.UPDATE)]
- public IActionResult UpdateQcGp12ServiceStatistics([FromBody] QcGp12ServiceStatisticsDto parm)
+ public IActionResult UpdateQcGp12ServiceStatistics(
+ [FromBody] QcGp12ServiceStatisticsDto parm
+ )
{
var modal = parm.Adapt().ToUpdate(HttpContext);
var response = _QcGp12ServiceStatisticsService.UpdateQcGp12ServiceStatistics(modal);
@@ -95,15 +170,14 @@ namespace ZR.Admin.WebApi.Controllers
public IActionResult DeleteQcGp12ServiceStatistics(string ids)
{
int[] idsArr = Tools.SpitIntArrary(ids);
- if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); }
+ if (idsArr.Length <= 0)
+ {
+ return ToResponse(ApiResult.Error($"删除失败Id 不能为空"));
+ }
var response = _QcGp12ServiceStatisticsService.Delete(idsArr);
return ToResponse(response);
}
-
-
-
-
}
-}
\ No newline at end of file
+}
diff --git a/ZR.Model/MES/qc/DTO/QcGp12ServiceStatisticsDto.cs b/ZR.Model/MES/qc/DTO/QcGp12ServiceStatisticsDto.cs
index fadad186..60fee99a 100644
--- a/ZR.Model/MES/qc/DTO/QcGp12ServiceStatisticsDto.cs
+++ b/ZR.Model/MES/qc/DTO/QcGp12ServiceStatisticsDto.cs
@@ -1,12 +1,41 @@
using System.ComponentModel.DataAnnotations;
+using ZR.Model.Business;
namespace ZR.Model.Dto
{
///
/// 质量GP12统计报表业务模块查询对象
///
- public class QcGp12ServiceStatisticsQueryDto : PagerInfo
+ public class QcGp12ServiceStatisticsQueryDto : PagerInfo
{
+ public string WorkOrder { get; set; }
+
+ public string PartNumber { get; set; }
+
+ public string Description { get; set; }
+
+ public string Team { get; set; }
+
+ public string SiteNo { get; set; }
+
+ public string ComNo { get; set; }
+
+ ///
+ /// 查询排序字段(1-工单号 2-零件号 3-合格率 4-开始时间)
+ ///
+ public int StatisticsOrderType { get; set; }
+
+ public int? IsOnetime { get; set; }
+
+ public int? IsBack { get; set; }
+
+ public int? IsPolish { get; set; }
+
+ public int? IsOut { get; set; }
+
+ public DateTime? StartTime { get; set; }
+
+ public DateTime? EndTime { get; set; }
}
///
@@ -14,7 +43,6 @@ namespace ZR.Model.Dto
///
public class QcGp12ServiceStatisticsDto
{
- [Required(ErrorMessage = "序号不能为空")]
public string Id { get; set; }
public string WorkOrder { get; set; }
@@ -79,7 +107,18 @@ namespace ZR.Model.Dto
public DateTime? UpdatedTime { get; set; }
-
-
+ // 动态属性存储
+ public Dictionary DynamicProperties { get; set; } = new Dictionary();
}
-}
\ No newline at end of file
+
+ public static class QcGp12ServiceStatisticsDtoExtensions
+ {
+ public static void AddDynamicProperty(this QcGp12ServiceStatisticsDto dto, string propertyName, object value)
+ {
+ if (!dto.DynamicProperties.ContainsKey(propertyName))
+ {
+ dto.DynamicProperties[propertyName] = value;
+ }
+ }
+ }
+}
diff --git a/ZR.Service/mes/qc/IService/IQcGp12ServiceStatisticsService.cs b/ZR.Service/mes/qc/IService/IQcGp12ServiceStatisticsService.cs
index 1e2276c3..7ee83ac5 100644
--- a/ZR.Service/mes/qc/IService/IQcGp12ServiceStatisticsService.cs
+++ b/ZR.Service/mes/qc/IService/IQcGp12ServiceStatisticsService.cs
@@ -11,8 +11,20 @@ namespace ZR.Service.Business.IBusinessService
///
public interface IQcGp12ServiceStatisticsService : IBaseService
{
+ ///
+ /// 获取原始数据
+ ///
+ ///
+ ///
PagedInfo GetList(QcGp12ServiceStatisticsQueryDto parm);
+ ///
+ /// 获取修正格式后的列表数据
+ ///
+ ///
+ ///
+ List GetReviseList(QcGp12ServiceStatisticsQueryDto parm);
+
QcGp12ServiceStatistics GetInfo(string Id);
QcGp12ServiceStatistics AddQcGp12ServiceStatistics(QcGp12ServiceStatistics parm);
diff --git a/ZR.Service/mes/qc/QcGp12Service.cs b/ZR.Service/mes/qc/QcGp12Service.cs
index 59dfd251..18965b51 100644
--- a/ZR.Service/mes/qc/QcGp12Service.cs
+++ b/ZR.Service/mes/qc/QcGp12Service.cs
@@ -75,10 +75,10 @@ namespace ZR.Service.Business
return labelAnalysisDto;
}
- // 零件号解析
+ // 标签的零件号解析
public string DoAnalyzePartnumber(string label)
{
- // 外箱标签零件号抓取
+ // 标签零件号抓取
var predicate = Expressionable
.Create()
.And(it => it.Code == "PartNumber")
@@ -104,11 +104,11 @@ namespace ZR.Service.Business
return "";
}
- // 数量解析
+ // 标签的数量解析
public int DoAnalyzeQuantity(string label)
{
int result = 0;
- // 外箱标签零件号抓取
+ // 标签零件号抓取
var predicate = Expressionable
.Create()
.And(it => it.Code == "Quantity")
diff --git a/ZR.Service/mes/qc/QcGp12ServiceStatisticsService.cs b/ZR.Service/mes/qc/QcGp12ServiceStatisticsService.cs
index 7440b4a3..9c9e2127 100644
--- a/ZR.Service/mes/qc/QcGp12ServiceStatisticsService.cs
+++ b/ZR.Service/mes/qc/QcGp12ServiceStatisticsService.cs
@@ -1,21 +1,27 @@
using System;
-using SqlSugar;
+using System.Linq;
using Infrastructure.Attribute;
using Infrastructure.Extensions;
+using Newtonsoft.Json;
+using SqlSugar;
using ZR.Model;
-using ZR.Model.Dto;
using ZR.Model.Business;
+using ZR.Model.Dto;
using ZR.Repository;
using ZR.Service.Business.IBusinessService;
-using System.Linq;
namespace ZR.Service.Business
{
///
/// 质量GP12统计报表业务模块Service业务层处理
///
- [AppService(ServiceType = typeof(IQcGp12ServiceStatisticsService), ServiceLifetime = LifeTime.Transient)]
- public class QcGp12ServiceStatisticsService : BaseService, IQcGp12ServiceStatisticsService
+ [AppService(
+ ServiceType = typeof(IQcGp12ServiceStatisticsService),
+ ServiceLifetime = LifeTime.Transient
+ )]
+ public class QcGp12ServiceStatisticsService
+ : BaseService,
+ IQcGp12ServiceStatisticsService
{
///
/// 查询质量GP12统计报表业务模块列表
@@ -33,7 +39,6 @@ namespace ZR.Service.Business
return response;
}
-
///
/// 获取详情
///
@@ -41,9 +46,7 @@ namespace ZR.Service.Business
///
public QcGp12ServiceStatistics GetInfo(string Id)
{
- var response = Queryable()
- .Where(x => x.Id == Id)
- .First();
+ var response = Queryable().Where(x => x.Id == Id).First();
return response;
}
@@ -102,5 +105,112 @@ namespace ZR.Service.Business
return Update(model, true);
}
+ public List GetReviseList(QcGp12ServiceStatisticsQueryDto parm)
+ {
+ var predicate = Expressionable
+ .Create()
+ .AndIF(
+ !string.IsNullOrEmpty(parm.WorkOrder),
+ x => x.WorkOrder.Contains(parm.WorkOrder)
+ )
+ .AndIF(
+ !string.IsNullOrEmpty(parm.PartNumber),
+ x => x.PartNumber.Contains(parm.PartNumber)
+ )
+ .AndIF(
+ !string.IsNullOrEmpty(parm.Description),
+ x => x.Description.Contains(parm.Description)
+ )
+ .AndIF(!string.IsNullOrEmpty(parm.Team), x => x.Team == parm.Team)
+ .AndIF(!string.IsNullOrEmpty(parm.SiteNo), x => x.SiteNo == parm.SiteNo)
+ .AndIF(!string.IsNullOrEmpty(parm.ComNo), x => x.ComNo == parm.ComNo)
+ .AndIF(parm.IsOnetime.HasValue, x => x.IsOnetime == parm.IsOnetime.Value)
+ .AndIF(parm.IsBack.HasValue, x => x.IsBack == parm.IsBack.Value)
+ .AndIF(parm.IsPolish.HasValue, x => x.IsPolish == parm.IsPolish.Value)
+ .AndIF(parm.IsOut.HasValue, x => x.IsOut == parm.IsOut.Value)
+ .AndIF(
+ parm.StartTime.HasValue && parm.EndTime.HasValue,
+ x => x.StartTime >= parm.StartTime.Value && x.StartTime <= parm.EndTime.Value
+ )
+ .And(x => x.Status == "1")
+ .ToExpression();
+ var query = Context.Queryable().Where(predicate);
+ var result = query
+ .OrderByIF(parm.StatisticsOrderType == 1, it => it.WorkOrder)
+ .OrderByIF(parm.StatisticsOrderType == 2, it => it.PartNumber)
+ .OrderByIF(parm.StatisticsOrderType == 3, it => it.QualifiedRate, OrderByType.Desc)
+ .OrderByIF(parm.StatisticsOrderType == 4, it => it.StartTime)
+ .OrderBy(it => it.GroupCode)
+ .OrderBy(it => it.GroupSort)
+ .ToList();
+ List defectList = Context.Queryable().ToList();
+ var resultList = new List();
+ foreach (var item in result)
+ {
+ var dto = new QcGp12ServiceStatisticsDto
+ {
+ Id = item.Id,
+ WorkOrder = item.WorkOrder,
+ PartNumber = item.PartNumber,
+ Description = item.Description,
+ Specification = item.Specification,
+ Color = item.Color,
+ Team = item.Team,
+ SiteNo = item.SiteNo,
+ ComNo = item.ComNo,
+ IsOnetime = item.IsOnetime,
+ IsBack = item.IsBack,
+ IsPolish = item.IsPolish,
+ IsOut = item.IsOut,
+ StartTime = item.StartTime,
+ EndTime = item.EndTime,
+ Label = item.Label,
+ RequireNumber = item.RequireNumber,
+ QualifiedNumber = item.QualifiedNumber,
+ QualifiedRate = item.QualifiedRate,
+ PolishNumber = item.PolishNumber,
+ DamoNumber = item.DamoNumber,
+ BaofeiNumber = item.BaofeiNumber,
+ GroupCode = item.GroupCode,
+ GroupSort = item.GroupSort,
+ GroupDefectJson = item.GroupDefectJson,
+ Type = item.Type,
+ Status = item.Status,
+ Remark = item.Remark,
+ CreatedBy = item.CreatedBy,
+ CreatedTime = item.CreatedTime,
+ UpdatedBy = item.UpdatedBy,
+ UpdatedTime = item.UpdatedTime
+ };
+ // 解析 GroupDefectJson
+ if (!string.IsNullOrEmpty(item.GroupDefectJson))
+ {
+ try
+ {
+ var defects = JsonConvert.DeserializeObject<
+ List
+ >(item.GroupDefectJson);
+ foreach (var defect in defects)
+ {
+ var baseDefect = defectList.FirstOrDefault(d =>
+ d.Code == defect.DefectCode
+ );
+ if (baseDefect != null)
+ {
+ var propertyName = $"{defect.DefectCode}";
+ dto.AddDynamicProperty(propertyName, defect.DefectNum);
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Error parsing GroupDefectJson: {ex.Message}");
+ }
+ }
+ resultList.Add(dto);
+ }
+
+ return resultList;
+ }
}
-}
\ No newline at end of file
+}