diff --git a/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndBaseDefectController.cs b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndBaseDefectController.cs
new file mode 100644
index 00000000..06ff0bc6
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndBaseDefectController.cs
@@ -0,0 +1,100 @@
+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;
+
+//创建时间:2025-01-02
+namespace ZR.Admin.WebApi.Controllers
+{
+ ///
+ /// 质量BackEnd基础缺陷项
+ ///
+ [Verify]
+ [Route("/mes/qc/BackEnd/QcBackEndBaseDefect")]
+ public class QcBackEndBaseDefectController : BaseController
+ {
+ ///
+ /// 质量BackEnd基础缺陷项接口
+ ///
+ private readonly IQcBackEndBaseDefectService _QcBackEndBaseDefectService;
+
+ public QcBackEndBaseDefectController(IQcBackEndBaseDefectService QcBackEndBaseDefectService)
+ {
+ _QcBackEndBaseDefectService = QcBackEndBaseDefectService;
+ }
+
+ ///
+ /// 查询质量BackEnd基础缺陷项列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ public IActionResult QueryQcBackEndBaseDefect([FromQuery] QcBackEndBaseDefectQueryDto parm)
+ {
+ var response = _QcBackEndBaseDefectService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+
+ ///
+ /// 查询质量BackEnd基础缺陷项详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ public IActionResult GetQcBackEndBaseDefect(int Id)
+ {
+ var response = _QcBackEndBaseDefectService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加质量BackEnd基础缺陷项
+ ///
+ ///
+ [HttpPost]
+ [Log(Title = "质量BackEnd基础缺陷项", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddQcBackEndBaseDefect([FromBody] QcBackEndBaseDefectDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _QcBackEndBaseDefectService.AddQcBackEndBaseDefect(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新质量BackEnd基础缺陷项
+ ///
+ ///
+ [HttpPut]
+ [Log(Title = "质量BackEnd基础缺陷项", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateQcBackEndBaseDefect([FromBody] QcBackEndBaseDefectDto parm)
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _QcBackEndBaseDefectService.UpdateQcBackEndBaseDefect(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除质量BackEnd基础缺陷项
+ ///
+ ///
+ [HttpDelete("{ids}")]
+ [Log(Title = "质量BackEnd基础缺陷项", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteQcBackEndBaseDefect(string ids)
+ {
+ int[] idsArr = Tools.SpitIntArrary(ids);
+ if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); }
+
+ var response = _QcBackEndBaseDefectService.Delete(idsArr);
+
+ return ToResponse(response);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndBaseGroupController.cs b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndBaseGroupController.cs
new file mode 100644
index 00000000..74440d42
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndBaseGroupController.cs
@@ -0,0 +1,100 @@
+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;
+
+//创建时间:2025-01-02
+namespace ZR.Admin.WebApi.Controllers
+{
+ ///
+ /// 质量BackEnd班组
+ ///
+ [Verify]
+ [Route("/mes/qc/BackEnd/QcBackEndBaseGroup")]
+ public class QcBackEndBaseGroupController : BaseController
+ {
+ ///
+ /// 质量BackEnd班组接口
+ ///
+ private readonly IQcBackEndBaseGroupService _QcBackEndBaseGroupService;
+
+ public QcBackEndBaseGroupController(IQcBackEndBaseGroupService QcBackEndBaseGroupService)
+ {
+ _QcBackEndBaseGroupService = QcBackEndBaseGroupService;
+ }
+
+ ///
+ /// 查询质量BackEnd班组列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ public IActionResult QueryQcBackEndBaseGroup([FromQuery] QcBackEndBaseGroupQueryDto parm)
+ {
+ var response = _QcBackEndBaseGroupService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+
+ ///
+ /// 查询质量BackEnd班组详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ public IActionResult GetQcBackEndBaseGroup(int Id)
+ {
+ var response = _QcBackEndBaseGroupService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加质量BackEnd班组
+ ///
+ ///
+ [HttpPost]
+ [Log(Title = "质量BackEnd班组", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddQcBackEndBaseGroup([FromBody] QcBackEndBaseGroupDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _QcBackEndBaseGroupService.AddQcBackEndBaseGroup(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新质量BackEnd班组
+ ///
+ ///
+ [HttpPut]
+ [Log(Title = "质量BackEnd班组", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateQcBackEndBaseGroup([FromBody] QcBackEndBaseGroupDto parm)
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _QcBackEndBaseGroupService.UpdateQcBackEndBaseGroup(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除质量BackEnd班组
+ ///
+ ///
+ [HttpDelete("{ids}")]
+ [Log(Title = "质量BackEnd班组", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteQcBackEndBaseGroup(string ids)
+ {
+ int[] idsArr = Tools.SpitIntArrary(ids);
+ if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); }
+
+ var response = _QcBackEndBaseGroupService.Delete(idsArr);
+
+ return ToResponse(response);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndBaseLabelAnalysisController.cs b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndBaseLabelAnalysisController.cs
new file mode 100644
index 00000000..384683f1
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndBaseLabelAnalysisController.cs
@@ -0,0 +1,104 @@
+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;
+
+//创建时间:2025-01-02
+namespace ZR.Admin.WebApi.Controllers
+{
+ ///
+ /// 质量BackEnd基础标签解析
+ ///
+ [Verify]
+ [Route("/mes/qc/BackEnd/QcBackEndBaseLabelAnalysis")]
+ public class QcBackEndBaseLabelAnalysisController : BaseController
+ {
+ ///
+ /// 质量BackEnd基础标签解析接口
+ ///
+ private readonly IQcBackEndBaseLabelAnalysisService _QcBackEndBaseLabelAnalysisService;
+
+ public QcBackEndBaseLabelAnalysisController(IQcBackEndBaseLabelAnalysisService QcBackEndBaseLabelAnalysisService)
+ {
+ _QcBackEndBaseLabelAnalysisService = QcBackEndBaseLabelAnalysisService;
+ }
+
+ ///
+ /// 查询质量BackEnd基础标签解析列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ public IActionResult QueryQcBackEndBaseLabelAnalysis([FromQuery] QcBackEndBaseLabelAnalysisQueryDto parm)
+ {
+ var response = _QcBackEndBaseLabelAnalysisService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+
+ ///
+ /// 查询质量BackEnd基础标签解析详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ public IActionResult GetQcBackEndBaseLabelAnalysis(int Id)
+ {
+ var response = _QcBackEndBaseLabelAnalysisService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加质量BackEnd基础标签解析
+ ///
+ ///
+ [HttpPost]
+ [Log(Title = "质量BackEnd基础标签解析", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddQcBackEndBaseLabelAnalysis([FromBody] QcBackEndBaseLabelAnalysisDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _QcBackEndBaseLabelAnalysisService.AddQcBackEndBaseLabelAnalysis(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新质量BackEnd基础标签解析
+ ///
+ ///
+ [HttpPut]
+ [Log(Title = "质量BackEnd基础标签解析", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateQcBackEndBaseLabelAnalysis([FromBody] QcBackEndBaseLabelAnalysisDto parm)
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _QcBackEndBaseLabelAnalysisService.UpdateQcBackEndBaseLabelAnalysis(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除质量BackEnd基础标签解析
+ ///
+ ///
+ [HttpDelete("{ids}")]
+ [Log(Title = "质量BackEnd基础标签解析", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteQcBackEndBaseLabelAnalysis(string ids)
+ {
+ int[] idsArr = Tools.SpitIntArrary(ids);
+ if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); }
+
+ var response = _QcBackEndBaseLabelAnalysisService.Delete(idsArr);
+
+ return ToResponse(response);
+ }
+
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndBaseSiteController.cs b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndBaseSiteController.cs
new file mode 100644
index 00000000..ed6823d5
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndBaseSiteController.cs
@@ -0,0 +1,104 @@
+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;
+
+//创建时间:2025-01-02
+namespace ZR.Admin.WebApi.Controllers
+{
+ ///
+ /// 质量BackEnd基础站点
+ ///
+ [Verify]
+ [Route("/mes/qc/BackEnd/QcBackEndBaseSite")]
+ public class QcBackEndBaseSiteController : BaseController
+ {
+ ///
+ /// 质量BackEnd基础站点接口
+ ///
+ private readonly IQcBackEndBaseSiteService _QcBackEndBaseSiteService;
+
+ public QcBackEndBaseSiteController(IQcBackEndBaseSiteService QcBackEndBaseSiteService)
+ {
+ _QcBackEndBaseSiteService = QcBackEndBaseSiteService;
+ }
+
+ ///
+ /// 查询质量BackEnd基础站点列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ public IActionResult QueryQcBackEndBaseSite([FromQuery] QcBackEndBaseSiteQueryDto parm)
+ {
+ var response = _QcBackEndBaseSiteService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+
+ ///
+ /// 查询质量BackEnd基础站点详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ public IActionResult GetQcBackEndBaseSite(int Id)
+ {
+ var response = _QcBackEndBaseSiteService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加质量BackEnd基础站点
+ ///
+ ///
+ [HttpPost]
+ [Log(Title = "质量BackEnd基础站点", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddQcBackEndBaseSite([FromBody] QcBackEndBaseSiteDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _QcBackEndBaseSiteService.AddQcBackEndBaseSite(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新质量BackEnd基础站点
+ ///
+ ///
+ [HttpPut]
+ [Log(Title = "质量BackEnd基础站点", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateQcBackEndBaseSite([FromBody] QcBackEndBaseSiteDto parm)
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _QcBackEndBaseSiteService.UpdateQcBackEndBaseSite(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除质量BackEnd基础站点
+ ///
+ ///
+ [HttpDelete("{ids}")]
+ [Log(Title = "质量BackEnd基础站点", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteQcBackEndBaseSite(string ids)
+ {
+ int[] idsArr = Tools.SpitIntArrary(ids);
+ if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); }
+
+ var response = _QcBackEndBaseSiteService.Delete(idsArr);
+
+ return ToResponse(response);
+ }
+
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndController.cs b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndController.cs
new file mode 100644
index 00000000..077dbf93
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndController.cs
@@ -0,0 +1,203 @@
+using Microsoft.AspNetCore.Mvc;
+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
+{
+ ///
+ /// 质量BackEnd业务模块
+ ///
+ [Route("/mes/qc/BackEnd/QcBackEndController")]
+ public class QcBackEndController : BaseController
+ {
+ ///
+ /// 质量BackEnd业务模块接口
+ ///
+ private readonly IQcBackEndService _QcBackEndService;
+
+ public QcBackEndController(IQcBackEndService QcBackEndService)
+ {
+ _QcBackEndService = QcBackEndService;
+ }
+
+ ///
+ /// 获取班组下拉
+ ///
+ ///
+ [HttpGet("GetGroupOptions")]
+ [AllowAnonymous]
+ public IActionResult GetGroupOptions()
+ {
+ var response = _QcBackEndService.GetGroupOptions();
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 获取站点下拉
+ ///
+ ///
+ [HttpGet("GetStieOptions")]
+ [AllowAnonymous]
+ public IActionResult GetStieOptions()
+ {
+ var response = _QcBackEndService.GetStieOptions();
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 获取缺陷项初始数据
+ ///
+ ///
+ [HttpGet("GetDefectInitOptions")]
+ [AllowAnonymous]
+ public IActionResult GetDefectInitOptions()
+ {
+ var response = _QcBackEndService.GetDefectInitOptions();
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 获取缺陷项列表初始数据
+ ///
+ ///
+ [HttpGet("GetDefectTableOptions")]
+ [AllowAnonymous]
+ public IActionResult GetDefectTableOptions()
+ {
+ var response = _QcBackEndService.GetDefectTableOptions();
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 解析标签
+ ///
+ /// 标签内容
+ /// 解析方式
+ ///
+ [HttpGet("AnalyzeLabel")]
+ [AllowAnonymous]
+ public IActionResult AnalyzeLabel(string label, int type)
+ {
+ var response = _QcBackEndService.AnalyzeLabelToDto(label, type);
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 开始工单
+ ///
+ ///
+ [HttpPost("StartBackEndWorkOrder")]
+ [AllowAnonymous]
+ public IActionResult StartBackEndWorkOrder([FromBody] QcBackEndWorkorderDetailDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _QcBackEndService.StartBackEndWorkOrder(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 修改缺陷项
+ ///
+ ///
+ [HttpPost("ChangeWorkOrderDefect")]
+ [AllowAnonymous]
+ public IActionResult StartBackEndWorkOrder([FromBody] QcBackEndWorkorderDefectDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _QcBackEndService.ChangeWorkOrderDefect(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 获取工单缺陷项
+ ///
+ ///
+ [HttpGet("GetWorkOrderDefectList")]
+ [AllowAnonymous]
+ public IActionResult GetWorkOrderDefectList(string workOrder)
+ {
+ var response = _QcBackEndService.GetWorkOrderDefectList(workOrder);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 扫描内标签,添加标签记录
+ ///
+ ///
+ [HttpPost("ScanInnerLabel")]
+ [AllowAnonymous]
+ public IActionResult ScanInnerLabel([FromBody] QcBackEndLabelScanDto parm)
+ {
+ try
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _QcBackEndService.ScanInnerLabel(modal);
+
+ return SUCCESS(response);
+ }catch(Exception ex)
+ {
+ return SUCCESS("请刷新页面,错误代码:" + ex.Message);
+ }
+
+ }
+
+ ///
+ /// 结束工单,并生成质量报表
+ ///
+ ///
+ [HttpGet("EndBackEndWorkOrderAndCreateStatistics")]
+ [AllowAnonymous]
+ public IActionResult EndBackEndWorkOrderAndCreateStatistics(string workOrder)
+ {
+ var response = _QcBackEndService.EndBackEndWorkOrderAndCreateStatistics(workOrder);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新工单相关信息
+ ///
+ ///
+ [HttpGet("UpdateWorkOrderDetail")]
+ [AllowAnonymous]
+ public IActionResult UpdateWorkOrderDetail(string workOrder)
+ {
+ var response = _QcBackEndService.UpdateWorkOrderDetail(workOrder);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 自动生成标签记录
+ ///
+ ///
+ [HttpPost("GenerateVirtualLabel")]
+ [AllowAnonymous]
+ public IActionResult GenerateVirtualLabel([FromBody] QcBackEndWorkorderDetailDto parm)
+ {
+ try
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _QcBackEndService.GenerateVirtualLabel(modal);
+
+ return SUCCESS(response);
+ }
+ catch (Exception ex)
+ {
+ return ToResponse(ApiResult.Error(ex.Message));
+ }
+
+ }
+ }
+}
diff --git a/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndLogWorkorderController.cs b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndLogWorkorderController.cs
new file mode 100644
index 00000000..2b3fb9af
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndLogWorkorderController.cs
@@ -0,0 +1,100 @@
+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;
+
+//创建时间:2025-01-02
+namespace ZR.Admin.WebApi.Controllers
+{
+ ///
+ /// 质量BackEnd工单操作日志
+ ///
+ [Verify]
+ [Route("/mes/qc/BackEnd/QcBackEndLogWorkorder")]
+ public class QcBackEndLogWorkorderController : BaseController
+ {
+ ///
+ /// 质量BackEnd工单操作日志接口
+ ///
+ private readonly IQcBackEndLogWorkorderService _QcBackEndLogWorkorderService;
+
+ public QcBackEndLogWorkorderController(IQcBackEndLogWorkorderService QcBackEndLogWorkorderService)
+ {
+ _QcBackEndLogWorkorderService = QcBackEndLogWorkorderService;
+ }
+
+ ///
+ /// 查询质量BackEnd工单操作日志列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ public IActionResult QueryQcBackEndLogWorkorder([FromQuery] QcBackEndLogWorkorderQueryDto parm)
+ {
+ var response = _QcBackEndLogWorkorderService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+
+ ///
+ /// 查询质量BackEnd工单操作日志详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ public IActionResult GetQcBackEndLogWorkorder(string Id)
+ {
+ var response = _QcBackEndLogWorkorderService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加质量BackEnd工单操作日志
+ ///
+ ///
+ [HttpPost]
+ [Log(Title = "质量BackEnd工单操作日志", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddQcBackEndLogWorkorder([FromBody] QcBackEndLogWorkorderDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _QcBackEndLogWorkorderService.AddQcBackEndLogWorkorder(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新质量BackEnd工单操作日志
+ ///
+ ///
+ [HttpPut]
+ [Log(Title = "质量BackEnd工单操作日志", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateQcBackEndLogWorkorder([FromBody] QcBackEndLogWorkorderDto parm)
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _QcBackEndLogWorkorderService.UpdateQcBackEndLogWorkorder(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除质量BackEnd工单操作日志
+ ///
+ ///
+ [HttpDelete("{ids}")]
+ [Log(Title = "质量BackEnd工单操作日志", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteQcBackEndLogWorkorder(string ids)
+ {
+ int[] idsArr = Tools.SpitIntArrary(ids);
+ if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); }
+
+ var response = _QcBackEndLogWorkorderService.Delete(idsArr);
+
+ return ToResponse(response);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndRecordLabelScanController.cs b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndRecordLabelScanController.cs
new file mode 100644
index 00000000..539e5371
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndRecordLabelScanController.cs
@@ -0,0 +1,100 @@
+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;
+
+//创建时间:2025-01-02
+namespace ZR.Admin.WebApi.Controllers
+{
+ ///
+ /// 质量BackEnd扫码标签记录
+ ///
+ [Verify]
+ [Route("/mes/qc/BackEnd/QcBackEndRecordLabelScan")]
+ public class QcBackEndRecordLabelScanController : BaseController
+ {
+ ///
+ /// 质量BackEnd扫码标签记录接口
+ ///
+ private readonly IQcBackEndRecordLabelScanService _QcBackEndRecordLabelScanService;
+
+ public QcBackEndRecordLabelScanController(IQcBackEndRecordLabelScanService QcBackEndRecordLabelScanService)
+ {
+ _QcBackEndRecordLabelScanService = QcBackEndRecordLabelScanService;
+ }
+
+ ///
+ /// 查询质量BackEnd扫码标签记录列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ public IActionResult QueryQcBackEndRecordLabelScan([FromQuery] QcBackEndRecordLabelScanQueryDto parm)
+ {
+ var response = _QcBackEndRecordLabelScanService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+
+ ///
+ /// 查询质量BackEnd扫码标签记录详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ public IActionResult GetQcBackEndRecordLabelScan(string Id)
+ {
+ var response = _QcBackEndRecordLabelScanService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加质量BackEnd扫码标签记录
+ ///
+ ///
+ [HttpPost]
+ [Log(Title = "质量BackEnd扫码标签记录", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddQcBackEndRecordLabelScan([FromBody] QcBackEndRecordLabelScanDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _QcBackEndRecordLabelScanService.AddQcBackEndRecordLabelScan(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新质量BackEnd扫码标签记录
+ ///
+ ///
+ [HttpPut]
+ [Log(Title = "质量BackEnd扫码标签记录", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateQcBackEndRecordLabelScan([FromBody] QcBackEndRecordLabelScanDto parm)
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _QcBackEndRecordLabelScanService.UpdateQcBackEndRecordLabelScan(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除质量BackEnd扫码标签记录
+ ///
+ ///
+ [HttpDelete("{ids}")]
+ [Log(Title = "质量BackEnd扫码标签记录", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteQcBackEndRecordLabelScan(string ids)
+ {
+ int[] idsArr = Tools.SpitIntArrary(ids);
+ if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); }
+
+ var response = _QcBackEndRecordLabelScanService.Delete(idsArr);
+
+ return ToResponse(response);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndRecordWorkorderDefectController.cs b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndRecordWorkorderDefectController.cs
new file mode 100644
index 00000000..8a45e033
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndRecordWorkorderDefectController.cs
@@ -0,0 +1,100 @@
+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;
+
+//创建时间:2025-01-02
+namespace ZR.Admin.WebApi.Controllers
+{
+ ///
+ /// 质量BackEnd工单缺陷项记录
+ ///
+ [Verify]
+ [Route("/mes/qc/BackEnd/QcBackEndRecordWorkorderDefect")]
+ public class QcBackEndRecordWorkorderDefectController : BaseController
+ {
+ ///
+ /// 质量BackEnd工单缺陷项记录接口
+ ///
+ private readonly IQcBackEndRecordWorkorderDefectService _QcBackEndRecordWorkorderDefectService;
+
+ public QcBackEndRecordWorkorderDefectController(IQcBackEndRecordWorkorderDefectService QcBackEndRecordWorkorderDefectService)
+ {
+ _QcBackEndRecordWorkorderDefectService = QcBackEndRecordWorkorderDefectService;
+ }
+
+ ///
+ /// 查询质量BackEnd工单缺陷项记录列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ public IActionResult QueryQcBackEndRecordWorkorderDefect([FromQuery] QcBackEndRecordWorkorderDefectQueryDto parm)
+ {
+ var response = _QcBackEndRecordWorkorderDefectService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+
+ ///
+ /// 查询质量BackEnd工单缺陷项记录详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ public IActionResult GetQcBackEndRecordWorkorderDefect(string Id)
+ {
+ var response = _QcBackEndRecordWorkorderDefectService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加质量BackEnd工单缺陷项记录
+ ///
+ ///
+ [HttpPost]
+ [Log(Title = "质量BackEnd工单缺陷项记录", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddQcBackEndRecordWorkorderDefect([FromBody] QcBackEndRecordWorkorderDefectDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _QcBackEndRecordWorkorderDefectService.AddQcBackEndRecordWorkorderDefect(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新质量BackEnd工单缺陷项记录
+ ///
+ ///
+ [HttpPut]
+ [Log(Title = "质量BackEnd工单缺陷项记录", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateQcBackEndRecordWorkorderDefect([FromBody] QcBackEndRecordWorkorderDefectDto parm)
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _QcBackEndRecordWorkorderDefectService.UpdateQcBackEndRecordWorkorderDefect(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除质量BackEnd工单缺陷项记录
+ ///
+ ///
+ [HttpDelete("{ids}")]
+ [Log(Title = "质量BackEnd工单缺陷项记录", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteQcBackEndRecordWorkorderDefect(string ids)
+ {
+ int[] idsArr = Tools.SpitIntArrary(ids);
+ if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); }
+
+ var response = _QcBackEndRecordWorkorderDefectService.Delete(idsArr);
+
+ return ToResponse(response);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndServiceStatisticsController.cs b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndServiceStatisticsController.cs
new file mode 100644
index 00000000..7620a12a
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndServiceStatisticsController.cs
@@ -0,0 +1,194 @@
+using Microsoft.AspNetCore.Mvc;
+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
+{
+ ///
+ /// 质量BackEnd统计报表业务模块
+ ///
+ [Verify]
+ [Route("/mes/qc/BackEnd/QcBackEndServiceStatistics")]
+ public class QcBackEndServiceStatisticsController : BaseController
+ {
+ ///
+ /// 质量BackEnd统计报表业务模块接口
+ ///
+ private readonly IQcBackEndServiceStatisticsService _QcBackEndServiceStatisticsService;
+
+ public QcBackEndServiceStatisticsController(
+ IQcBackEndServiceStatisticsService QcBackEndServiceStatisticsService
+ )
+ {
+ _QcBackEndServiceStatisticsService = QcBackEndServiceStatisticsService;
+ }
+
+ ///
+ /// 查询质量BackEnd统计报表业务模块列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ public IActionResult QueryQcBackEndServiceStatistics(
+ [FromQuery] QcBackEndServiceStatisticsQueryDto parm
+ )
+ {
+ var response = _QcBackEndServiceStatisticsService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 查询质量BackEnd统计报表业务模块列表
+ ///
+ ///
+ ///
+ [HttpPost("GetReviseList")]
+ [AllowAnonymous]
+ public IActionResult GetReviseList([FromBody] QcBackEndServiceStatisticsQueryDto parm)
+ {
+ var response = _QcBackEndServiceStatisticsService.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(QcBackEndServiceStatisticsDto).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;
+
+ // 移除不要的属性
+ itemDict["DynamicProperties"] = null;
+ itemDict["GroupDefectJson"] = "";
+ return itemDict;
+ })
+ .ToList();
+ // 数据除三
+ totalRequireNumber = totalRequireNumber / 3;
+ totalQualifiedNumber = totalQualifiedNumber / 3;
+ totalPolishNumber = totalPolishNumber / 3;
+ totalDamoNumber = totalDamoNumber / 3;
+ totalBaofeiNumber = totalBaofeiNumber / 3;
+ totalListCount = totalListCount / 3;
+ // 计算合格率
+ double qualifiedRate = 0.0;
+ if (totalRequireNumber > 0)
+ {
+ qualifiedRate = (double)totalQualifiedNumber / totalRequireNumber * 100;
+ }
+ else
+ {
+ qualifiedRate = 0.0;
+ }
+ // 创建统计数据字典
+ var statistics = new Dictionary
+ {
+ { "TotalRequireNumber", totalRequireNumber },
+ { "TotalQualifiedNumber", totalQualifiedNumber },
+ { "QualifiedRate", $"{qualifiedRate:F1}%" },
+ { "TotalPolishNumber", totalPolishNumber },
+ { "TotalDamoNumber", totalDamoNumber },
+ { "TotalBaofeiNumber", totalBaofeiNumber },
+ { "TotalListCount", totalListCount }
+ };
+ // 创建分页结果
+ var pageList = resultWithDefects.Skip((parm.PageNum - 1) * parm.PageSize).Take(parm.PageSize).ToList();
+
+ // 返回包含数据和统计数据的对象
+ var result = new { statistics = statistics, pageList ,total = resultWithDefects.Count };
+
+ return SUCCESS(result);
+ }
+
+ ///
+ /// 查询质量BackEnd统计报表业务模块详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ public IActionResult GetQcBackEndServiceStatistics(string Id)
+ {
+ var response = _QcBackEndServiceStatisticsService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加质量BackEnd统计报表业务模块
+ ///
+ ///
+ [HttpPost]
+ [Log(Title = "质量BackEnd统计报表业务模块", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddQcBackEndServiceStatistics([FromBody] QcBackEndServiceStatisticsDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _QcBackEndServiceStatisticsService.AddQcBackEndServiceStatistics(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新质量BackEnd统计报表业务模块
+ ///
+ ///
+ [HttpPut]
+ [Log(Title = "质量BackEnd统计报表业务模块", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateQcBackEndServiceStatistics(
+ [FromBody] QcBackEndServiceStatisticsDto parm
+ )
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _QcBackEndServiceStatisticsService.UpdateQcBackEndServiceStatistics(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除质量BackEnd统计报表业务模块
+ ///
+ ///
+ [HttpDelete("{ids}")]
+ [Log(Title = "质量BackEnd统计报表业务模块", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteQcBackEndServiceStatistics(string ids)
+ {
+ int[] idsArr = Tools.SpitIntArrary(ids);
+ if (idsArr.Length <= 0)
+ {
+ return ToResponse(ApiResult.Error($"删除失败Id 不能为空"));
+ }
+
+ var response = _QcBackEndServiceStatisticsService.Delete(idsArr);
+
+ return ToResponse(response);
+ }
+ }
+}
diff --git a/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndServiceWorkorderController.cs b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndServiceWorkorderController.cs
new file mode 100644
index 00000000..3b7dd471
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackEndServiceWorkorderController.cs
@@ -0,0 +1,104 @@
+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;
+
+//创建时间:2025-01-02
+namespace ZR.Admin.WebApi.Controllers
+{
+ ///
+ /// 质量BackEnd工单业务模块
+ ///
+ [Verify]
+ [Route("/mes/qc/BackEnd/QcBackEndServiceWorkorder")]
+ public class QcBackEndServiceWorkorderController : BaseController
+ {
+ ///
+ /// 质量BackEnd工单业务模块接口
+ ///
+ private readonly IQcBackEndServiceWorkorderService _QcBackEndServiceWorkorderService;
+
+ public QcBackEndServiceWorkorderController(IQcBackEndServiceWorkorderService QcBackEndServiceWorkorderService)
+ {
+ _QcBackEndServiceWorkorderService = QcBackEndServiceWorkorderService;
+ }
+
+ ///
+ /// 查询质量BackEnd工单业务模块列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ public IActionResult QueryQcBackEndServiceWorkorder([FromQuery] QcBackEndServiceWorkorderQueryDto parm)
+ {
+ var response = _QcBackEndServiceWorkorderService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+
+ ///
+ /// 查询质量BackEnd工单业务模块详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ public IActionResult GetQcBackEndServiceWorkorder(string Id)
+ {
+ var response = _QcBackEndServiceWorkorderService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加质量BackEnd工单业务模块
+ ///
+ ///
+ [HttpPost]
+ [Log(Title = "质量BackEnd工单业务模块", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddQcBackEndServiceWorkorder([FromBody] QcBackEndServiceWorkorderDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _QcBackEndServiceWorkorderService.AddQcBackEndServiceWorkorder(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新质量BackEnd工单业务模块
+ ///
+ ///
+ [HttpPut]
+ [Log(Title = "质量BackEnd工单业务模块", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateQcBackEndServiceWorkorder([FromBody] QcBackEndServiceWorkorderDto parm)
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _QcBackEndServiceWorkorderService.UpdateQcBackEndServiceWorkorder(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除质量BackEnd工单业务模块
+ ///
+ ///
+ [HttpDelete("{ids}")]
+ [Log(Title = "质量BackEnd工单业务模块", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteQcBackEndServiceWorkorder(string ids)
+ {
+ int[] idsArr = Tools.SpitIntArrary(ids);
+ if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); }
+
+ var response = _QcBackEndServiceWorkorderService.Delete(idsArr);
+
+ return ToResponse(response);
+ }
+
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackendBaseOutpackageController.cs b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackendBaseOutpackageController.cs
new file mode 100644
index 00000000..35627f49
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/mes/qc/backend/QcBackendBaseOutpackageController.cs
@@ -0,0 +1,111 @@
+using Microsoft.AspNetCore.Mvc;
+using ZR.Admin.WebApi.Extensions;
+using ZR.Admin.WebApi.Filters;
+using ZR.Model.Business;
+using ZR.Model.Dto;
+using ZR.Service.Business.IBusinessService;
+
+//创建时间:2025-05-06
+namespace ZR.Admin.WebApi.Controllers
+{
+ ///
+ /// 质量后道外箱标签打印配置
+
+ ///
+ [Verify]
+ [Route("/mes/qc/BackEnd/QcBackendBaseOutpackage")]
+ public class QcBackendBaseOutpackageController : BaseController
+ {
+ ///
+ /// 质量后道外箱标签打印配置
+ ///
+ private readonly IQcBackendBaseOutpackageService _QcBackendBaseOutpackageService;
+
+ public QcBackendBaseOutpackageController(
+ IQcBackendBaseOutpackageService QcBackendBaseOutpackageService
+ )
+ {
+ _QcBackendBaseOutpackageService = QcBackendBaseOutpackageService;
+ }
+
+ ///
+ /// 查询质量后道外箱标签打印配置
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ [ActionPermissionFilter(Permission = "business:qcbackendbaseoutpackage:list")]
+ public IActionResult QueryQcBackendBaseOutpackage(
+ [FromQuery] QcBackendBaseOutpackageQueryDto parm
+ )
+ {
+ var response = _QcBackendBaseOutpackageService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 查询质量后道外箱标签打印配置
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ [ActionPermissionFilter(Permission = "business:qcbackendbaseoutpackage:query")]
+ public IActionResult GetQcBackendBaseOutpackage(int Id)
+ {
+ var response = _QcBackendBaseOutpackageService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加质量后道外箱标签打印配置
+
+ ///
+ ///
+ [HttpPost]
+ public IActionResult AddQcBackendBaseOutpackage([FromBody] QcBackendBaseOutpackageDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _QcBackendBaseOutpackageService.AddQcBackendBaseOutpackage(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新质量后道外箱标签打印配置
+
+ ///
+ ///
+ [HttpPut]
+ public IActionResult UpdateQcBackendBaseOutpackage(
+ [FromBody] QcBackendBaseOutpackageDto parm
+ )
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _QcBackendBaseOutpackageService.UpdateQcBackendBaseOutpackage(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除质量后道外箱标签打印配置
+
+ ///
+ ///
+ [HttpDelete("{ids}")]
+ public IActionResult DeleteQcBackendBaseOutpackage(string ids)
+ {
+ int[] idsArr = Tools.SpitIntArrary(ids);
+ if (idsArr.Length <= 0)
+ {
+ return ToResponse(ApiResult.Error($"删除失败Id 不能为空"));
+ }
+
+ var response = _QcBackendBaseOutpackageService.Delete(idsArr);
+
+ return ToResponse(response);
+ }
+ }
+}
diff --git a/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Admin.WebApi/Controllers/Business/QcBackendBaseOutpackageController.cs b/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Admin.WebApi/Controllers/Business/QcBackendBaseOutpackageController.cs
new file mode 100644
index 00000000..1c388203
--- /dev/null
+++ b/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Admin.WebApi/Controllers/Business/QcBackendBaseOutpackageController.cs
@@ -0,0 +1,119 @@
+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;
+
+//创建时间:2025-05-06
+namespace ZR.Admin.WebApi.Controllers
+{
+ ///
+ /// 质量后道外箱标签打印配置
+
+ ///
+ [Verify]
+ [Route("business/QcBackendBaseOutpackage")]
+ public class QcBackendBaseOutpackageController : BaseController
+ {
+ ///
+ /// 质量后道外箱标签打印配置
+接口
+ ///
+ private readonly IQcBackendBaseOutpackageService _QcBackendBaseOutpackageService;
+
+ public QcBackendBaseOutpackageController(IQcBackendBaseOutpackageService QcBackendBaseOutpackageService)
+ {
+ _QcBackendBaseOutpackageService = QcBackendBaseOutpackageService;
+ }
+
+ ///
+ /// 查询质量后道外箱标签打印配置
+列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ [ActionPermissionFilter(Permission = "business:qcbackendbaseoutpackage:list")]
+ public IActionResult QueryQcBackendBaseOutpackage([FromQuery] QcBackendBaseOutpackageQueryDto parm)
+ {
+ var response = _QcBackendBaseOutpackageService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+
+ ///
+ /// 查询质量后道外箱标签打印配置
+详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ [ActionPermissionFilter(Permission = "business:qcbackendbaseoutpackage:query")]
+ public IActionResult GetQcBackendBaseOutpackage(int Id)
+ {
+ var response = _QcBackendBaseOutpackageService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加质量后道外箱标签打印配置
+
+ ///
+ ///
+ [HttpPost]
+ [ActionPermissionFilter(Permission = "business:qcbackendbaseoutpackage:add")]
+ [Log(Title = "质量后道外箱标签打印配置
+", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddQcBackendBaseOutpackage([FromBody] QcBackendBaseOutpackageDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _QcBackendBaseOutpackageService.AddQcBackendBaseOutpackage(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新质量后道外箱标签打印配置
+
+ ///
+ ///
+ [HttpPut]
+ [ActionPermissionFilter(Permission = "business:qcbackendbaseoutpackage:edit")]
+ [Log(Title = "质量后道外箱标签打印配置
+", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateQcBackendBaseOutpackage([FromBody] QcBackendBaseOutpackageDto parm)
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _QcBackendBaseOutpackageService.UpdateQcBackendBaseOutpackage(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除质量后道外箱标签打印配置
+
+ ///
+ ///
+ [HttpDelete("{ids}")]
+ [ActionPermissionFilter(Permission = "business:qcbackendbaseoutpackage:delete")]
+ [Log(Title = "质量后道外箱标签打印配置
+", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteQcBackendBaseOutpackage(string ids)
+ {
+ int[] idsArr = Tools.SpitIntArrary(ids);
+ if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); }
+
+ var response = _QcBackendBaseOutpackageService.Delete(idsArr);
+
+ return ToResponse(response);
+ }
+
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Model/Dto/Business/QcBackendBaseOutpackageDto.cs b/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Model/Dto/Business/QcBackendBaseOutpackageDto.cs
new file mode 100644
index 00000000..e971e479
--- /dev/null
+++ b/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Model/Dto/Business/QcBackendBaseOutpackageDto.cs
@@ -0,0 +1,33 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace ZR.Model.Dto
+{
+ ///
+ /// 质量后道外箱标签打印配置
+查询对象
+ ///
+ public class QcBackendBaseOutpackageQueryDto : PagerInfo
+ {
+ }
+
+ ///
+ /// 质量后道外箱标签打印配置
+输入输出对象
+ ///
+ public class QcBackendBaseOutpackageDto
+ {
+ [Required(ErrorMessage = "主键不能为空")]
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+
+ public string FileUrl { get; set; }
+
+ public int? PackageNum { get; set; }
+
+ public string CheckStr { get; set; }
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Model/Models/Business/QcBackendBaseOutpackage.cs b/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Model/Models/Business/QcBackendBaseOutpackage.cs
new file mode 100644
index 00000000..adc9cc3f
--- /dev/null
+++ b/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Model/Models/Business/QcBackendBaseOutpackage.cs
@@ -0,0 +1,41 @@
+
+namespace ZR.Model.Business
+{
+ ///
+ /// 质量后道外箱标签打印配置
+
+ ///
+ [SugarTable("qc_backend_base_outpackage")]
+ public class QcBackendBaseOutpackage
+ {
+ ///
+ /// 主键
+ ///
+ [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+ public int Id { get; set; }
+
+ ///
+ /// 对应箱标签名称
+ ///
+ public string Name { get; set; }
+
+ ///
+ /// Bartender打印文件对应地址
+ ///
+ [SugarColumn(ColumnName = "file_url")]
+ public string FileUrl { get; set; }
+
+ ///
+ /// 满箱容量
+ ///
+ [SugarColumn(ColumnName = "package_num")]
+ public int? PackageNum { get; set; }
+
+ ///
+ /// 对应匹配零件描述的校验字段
+ ///
+ [SugarColumn(ColumnName = "check_str")]
+ public string CheckStr { get; set; }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Service/Business/IBusinessService/IQcBackendBaseOutpackageService.cs b/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Service/Business/IBusinessService/IQcBackendBaseOutpackageService.cs
new file mode 100644
index 00000000..dfabe46f
--- /dev/null
+++ b/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Service/Business/IBusinessService/IQcBackendBaseOutpackageService.cs
@@ -0,0 +1,24 @@
+using System;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using System.Collections.Generic;
+
+namespace ZR.Service.Business.IBusinessService
+{
+ ///
+ /// 质量后道外箱标签打印配置
+service接口
+ ///
+ public interface IQcBackendBaseOutpackageService : IBaseService
+ {
+ PagedInfo GetList(QcBackendBaseOutpackageQueryDto parm);
+
+ QcBackendBaseOutpackage GetInfo(int Id);
+
+ QcBackendBaseOutpackage AddQcBackendBaseOutpackage(QcBackendBaseOutpackage parm);
+
+ int UpdateQcBackendBaseOutpackage(QcBackendBaseOutpackage parm);
+
+ }
+}
diff --git a/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Service/Business/QcBackendBaseOutpackageService.cs b/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Service/Business/QcBackendBaseOutpackageService.cs
new file mode 100644
index 00000000..88f8e8f1
--- /dev/null
+++ b/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Service/Business/QcBackendBaseOutpackageService.cs
@@ -0,0 +1,84 @@
+using System;
+using SqlSugar;
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using ZR.Repository;
+using ZR.Service.Business.IBusinessService;
+using System.Linq;
+
+namespace ZR.Service.Business
+{
+ ///
+ /// 质量后道外箱标签打印配置
+Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(IQcBackendBaseOutpackageService), ServiceLifetime = LifeTime.Transient)]
+ public class QcBackendBaseOutpackageService : BaseService, IQcBackendBaseOutpackageService
+ {
+ ///
+ /// 查询质量后道外箱标签打印配置
+列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(QcBackendBaseOutpackageQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public QcBackendBaseOutpackage GetInfo(int Id)
+ {
+ var response = Queryable()
+ .Where(x => x.Id == Id)
+ .First();
+
+ return response;
+ }
+
+ ///
+ /// 添加质量后道外箱标签打印配置
+
+ ///
+ ///
+ ///
+ public QcBackendBaseOutpackage AddQcBackendBaseOutpackage(QcBackendBaseOutpackage model)
+ {
+ return Context.Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改质量后道外箱标签打印配置
+
+ ///
+ ///
+ ///
+ public int UpdateQcBackendBaseOutpackage(QcBackendBaseOutpackage model)
+ {
+ //var response = Update(w => w.Id == model.Id, it => new QcBackendBaseOutpackage()
+ //{
+ // Name = model.Name,
+ // FileUrl = model.FileUrl,
+ // PackageNum = model.PackageNum,
+ // CheckStr = model.CheckStr,
+ //});
+ //return response;
+ return Update(model, true);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Vue/src/api/business/qcBackendBaseOutpackage.js b/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Vue/src/api/business/qcBackendBaseOutpackage.js
new file mode 100644
index 00000000..81ad6e8b
--- /dev/null
+++ b/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Vue/src/api/business/qcBackendBaseOutpackage.js
@@ -0,0 +1,62 @@
+import request from '@/utils/request'
+
+/**
+* 质量后道外箱标签打印配置
+分页查询
+* @param {查询条件} data
+*/
+export function listQcBackendBaseOutpackage(query) {
+ return request({
+ url: 'business/QcBackendBaseOutpackage/list',
+ method: 'get',
+ params: query,
+ })
+}
+
+/**
+* 新增质量后道外箱标签打印配置
+
+* @param data
+*/
+export function addQcBackendBaseOutpackage(data) {
+ return request({
+ url: 'business/QcBackendBaseOutpackage',
+ method: 'post',
+ data: data,
+ })
+}
+/**
+* 修改质量后道外箱标签打印配置
+
+* @param data
+*/
+export function updateQcBackendBaseOutpackage(data) {
+ return request({
+ url: 'business/QcBackendBaseOutpackage',
+ method: 'PUT',
+ data: data,
+ })
+}
+/**
+* 获取质量后道外箱标签打印配置
+详情
+* @param {Id}
+*/
+export function getQcBackendBaseOutpackage(id) {
+ return request({
+ url: 'business/QcBackendBaseOutpackage/' + id,
+ method: 'get'
+ })
+}
+
+/**
+* 删除质量后道外箱标签打印配置
+
+* @param {主键} pid
+*/
+export function delQcBackendBaseOutpackage(pid) {
+ return request({
+ url: 'business/QcBackendBaseOutpackage/' + pid,
+ method: 'delete'
+ })
+}
diff --git a/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Vue/src/views/business/QcBackendBaseOutpackage.vue b/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Vue/src/views/business/QcBackendBaseOutpackage.vue
new file mode 100644
index 00000000..6da6db67
--- /dev/null
+++ b/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/ZR.Vue/src/views/business/QcBackendBaseOutpackage.vue
@@ -0,0 +1,301 @@
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{form.id}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/sql/QcBackendBaseOutpackage.sql b/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/sql/QcBackendBaseOutpackage.sql
new file mode 100644
index 00000000..93838c2d
--- /dev/null
+++ b/ZR.Admin.WebApi/wwwroot/Generatecode/20250506/sql/QcBackendBaseOutpackage.sql
@@ -0,0 +1,26 @@
+use ZrAdmin;
+
+-- 菜单
+INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time)
+VALUES ('质量后道外箱标签打印配置
+', 0, 999, 'QcBackendBaseOutpackage', 'business/QcBackendBaseOutpackage', 0, 0, 'C', '0', '0', 'business:qcbackendbaseoutpackage:list', 'icon1', 'system', sysdate());
+
+-- 按钮父菜单id
+SELECT @menuId := LAST_INSERT_ID();
+
+
+INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time)
+VALUES ('查询', @menuId, 1, '#', NULL, 0, 0, 'F', '0', '0', 'business:qcbackendbaseoutpackage:query', '', 'system', sysdate());
+
+INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time)
+VALUES ('新增', @menuId, 2, '#', NULL, 0, 0, 'F', '0', '0', 'business:qcbackendbaseoutpackage:add', '', 'system', sysdate());
+
+INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time)
+VALUES ('删除', @menuId, 3, '#', NULL, 0, 0, 'F', '0', '0', 'business:qcbackendbaseoutpackage:delete', '', 'system', sysdate());
+
+INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time)
+VALUES ('修改', @menuId, 4, '#', NULL, 0, 0, 'F', '0', '0', 'business:qcbackendbaseoutpackage:edit', '', 'system', sysdate());
+
+
+SELECT * FROM sys_menu WHERE parentId = @menuId;
+SELECT * FROM sys_menu WHERE menuId = @menuId;
\ No newline at end of file
diff --git a/ZR.Model/MES/qc/DTO/QcBackEndBaseDefectDto.cs b/ZR.Model/MES/qc/DTO/backend/QcBackEndBaseDefectDto.cs
similarity index 100%
rename from ZR.Model/MES/qc/DTO/QcBackEndBaseDefectDto.cs
rename to ZR.Model/MES/qc/DTO/backend/QcBackEndBaseDefectDto.cs
diff --git a/ZR.Model/MES/qc/DTO/QcBackEndBaseGroupDto.cs b/ZR.Model/MES/qc/DTO/backend/QcBackEndBaseGroupDto.cs
similarity index 100%
rename from ZR.Model/MES/qc/DTO/QcBackEndBaseGroupDto.cs
rename to ZR.Model/MES/qc/DTO/backend/QcBackEndBaseGroupDto.cs
diff --git a/ZR.Model/MES/qc/DTO/QcBackEndBaseLabelAnalysisDto.cs b/ZR.Model/MES/qc/DTO/backend/QcBackEndBaseLabelAnalysisDto.cs
similarity index 100%
rename from ZR.Model/MES/qc/DTO/QcBackEndBaseLabelAnalysisDto.cs
rename to ZR.Model/MES/qc/DTO/backend/QcBackEndBaseLabelAnalysisDto.cs
diff --git a/ZR.Model/MES/qc/DTO/QcBackEndBaseSiteDto.cs b/ZR.Model/MES/qc/DTO/backend/QcBackEndBaseSiteDto.cs
similarity index 100%
rename from ZR.Model/MES/qc/DTO/QcBackEndBaseSiteDto.cs
rename to ZR.Model/MES/qc/DTO/backend/QcBackEndBaseSiteDto.cs
diff --git a/ZR.Model/MES/qc/DTO/QcBackEndLogWorkorderDto.cs b/ZR.Model/MES/qc/DTO/backend/QcBackEndLogWorkorderDto.cs
similarity index 100%
rename from ZR.Model/MES/qc/DTO/QcBackEndLogWorkorderDto.cs
rename to ZR.Model/MES/qc/DTO/backend/QcBackEndLogWorkorderDto.cs
diff --git a/ZR.Model/MES/qc/DTO/QcBackEndRecordLabelScanDto.cs b/ZR.Model/MES/qc/DTO/backend/QcBackEndRecordLabelScanDto.cs
similarity index 100%
rename from ZR.Model/MES/qc/DTO/QcBackEndRecordLabelScanDto.cs
rename to ZR.Model/MES/qc/DTO/backend/QcBackEndRecordLabelScanDto.cs
diff --git a/ZR.Model/MES/qc/DTO/QcBackEndRecordWorkorderDefectDto.cs b/ZR.Model/MES/qc/DTO/backend/QcBackEndRecordWorkorderDefectDto.cs
similarity index 100%
rename from ZR.Model/MES/qc/DTO/QcBackEndRecordWorkorderDefectDto.cs
rename to ZR.Model/MES/qc/DTO/backend/QcBackEndRecordWorkorderDefectDto.cs
diff --git a/ZR.Model/MES/qc/DTO/QcBackEndServiceStatisticsDto.cs b/ZR.Model/MES/qc/DTO/backend/QcBackEndServiceStatisticsDto.cs
similarity index 100%
rename from ZR.Model/MES/qc/DTO/QcBackEndServiceStatisticsDto.cs
rename to ZR.Model/MES/qc/DTO/backend/QcBackEndServiceStatisticsDto.cs
diff --git a/ZR.Model/MES/qc/DTO/QcBackEndServiceWorkorderDto.cs b/ZR.Model/MES/qc/DTO/backend/QcBackEndServiceWorkorderDto.cs
similarity index 100%
rename from ZR.Model/MES/qc/DTO/QcBackEndServiceWorkorderDto.cs
rename to ZR.Model/MES/qc/DTO/backend/QcBackEndServiceWorkorderDto.cs
diff --git a/ZR.Model/MES/qc/DTO/backend/QcBackendBaseOutpackageDto.cs b/ZR.Model/MES/qc/DTO/backend/QcBackendBaseOutpackageDto.cs
new file mode 100644
index 00000000..af31c688
--- /dev/null
+++ b/ZR.Model/MES/qc/DTO/backend/QcBackendBaseOutpackageDto.cs
@@ -0,0 +1,31 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace ZR.Model.Dto
+{
+ ///
+ /// 质量后道外箱标签打印配置
+ ///
+ public class QcBackendBaseOutpackageQueryDto : PagerInfo
+ {
+ }
+
+ ///
+ /// 质量后道外箱标签打印配置
+ ///
+ public class QcBackendBaseOutpackageDto
+ {
+ [Required(ErrorMessage = "主键不能为空")]
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+
+ public string FileUrl { get; set; }
+
+ public int? PackageNum { get; set; }
+
+ public string CheckStr { get; set; }
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Model/MES/qc/DTO/QcGp12BaseDefectDto.cs b/ZR.Model/MES/qc/DTO/gp12/QcGp12BaseDefectDto.cs
similarity index 100%
rename from ZR.Model/MES/qc/DTO/QcGp12BaseDefectDto.cs
rename to ZR.Model/MES/qc/DTO/gp12/QcGp12BaseDefectDto.cs
diff --git a/ZR.Model/MES/qc/DTO/QcGp12BaseGroupDto.cs b/ZR.Model/MES/qc/DTO/gp12/QcGp12BaseGroupDto.cs
similarity index 100%
rename from ZR.Model/MES/qc/DTO/QcGp12BaseGroupDto.cs
rename to ZR.Model/MES/qc/DTO/gp12/QcGp12BaseGroupDto.cs
diff --git a/ZR.Model/MES/qc/DTO/QcGp12BaseLabelAnalysisDto.cs b/ZR.Model/MES/qc/DTO/gp12/QcGp12BaseLabelAnalysisDto.cs
similarity index 100%
rename from ZR.Model/MES/qc/DTO/QcGp12BaseLabelAnalysisDto.cs
rename to ZR.Model/MES/qc/DTO/gp12/QcGp12BaseLabelAnalysisDto.cs
diff --git a/ZR.Model/MES/qc/DTO/QcGp12BaseSiteDto.cs b/ZR.Model/MES/qc/DTO/gp12/QcGp12BaseSiteDto.cs
similarity index 100%
rename from ZR.Model/MES/qc/DTO/QcGp12BaseSiteDto.cs
rename to ZR.Model/MES/qc/DTO/gp12/QcGp12BaseSiteDto.cs
diff --git a/ZR.Model/MES/qc/DTO/QcGp12LogWorkorderDto.cs b/ZR.Model/MES/qc/DTO/gp12/QcGp12LogWorkorderDto.cs
similarity index 100%
rename from ZR.Model/MES/qc/DTO/QcGp12LogWorkorderDto.cs
rename to ZR.Model/MES/qc/DTO/gp12/QcGp12LogWorkorderDto.cs
diff --git a/ZR.Model/MES/qc/DTO/QcGp12RecordLabelScanDto.cs b/ZR.Model/MES/qc/DTO/gp12/QcGp12RecordLabelScanDto.cs
similarity index 100%
rename from ZR.Model/MES/qc/DTO/QcGp12RecordLabelScanDto.cs
rename to ZR.Model/MES/qc/DTO/gp12/QcGp12RecordLabelScanDto.cs
diff --git a/ZR.Model/MES/qc/DTO/QcGp12RecordWorkorderDefectDto.cs b/ZR.Model/MES/qc/DTO/gp12/QcGp12RecordWorkorderDefectDto.cs
similarity index 100%
rename from ZR.Model/MES/qc/DTO/QcGp12RecordWorkorderDefectDto.cs
rename to ZR.Model/MES/qc/DTO/gp12/QcGp12RecordWorkorderDefectDto.cs
diff --git a/ZR.Model/MES/qc/DTO/QcGp12ServiceStatisticsDto.cs b/ZR.Model/MES/qc/DTO/gp12/QcGp12ServiceStatisticsDto.cs
similarity index 100%
rename from ZR.Model/MES/qc/DTO/QcGp12ServiceStatisticsDto.cs
rename to ZR.Model/MES/qc/DTO/gp12/QcGp12ServiceStatisticsDto.cs
diff --git a/ZR.Model/MES/qc/DTO/QcGp12ServiceWorkorderDto.cs b/ZR.Model/MES/qc/DTO/gp12/QcGp12ServiceWorkorderDto.cs
similarity index 100%
rename from ZR.Model/MES/qc/DTO/QcGp12ServiceWorkorderDto.cs
rename to ZR.Model/MES/qc/DTO/gp12/QcGp12ServiceWorkorderDto.cs
diff --git a/ZR.Model/MES/qc/QcBackEndBaseDefect.cs b/ZR.Model/MES/qc/backend/QcBackEndBaseDefect.cs
similarity index 100%
rename from ZR.Model/MES/qc/QcBackEndBaseDefect.cs
rename to ZR.Model/MES/qc/backend/QcBackEndBaseDefect.cs
diff --git a/ZR.Model/MES/qc/QcBackEndBaseGroup.cs b/ZR.Model/MES/qc/backend/QcBackEndBaseGroup.cs
similarity index 100%
rename from ZR.Model/MES/qc/QcBackEndBaseGroup.cs
rename to ZR.Model/MES/qc/backend/QcBackEndBaseGroup.cs
diff --git a/ZR.Model/MES/qc/QcBackEndBaseLabelAnalysis.cs b/ZR.Model/MES/qc/backend/QcBackEndBaseLabelAnalysis.cs
similarity index 100%
rename from ZR.Model/MES/qc/QcBackEndBaseLabelAnalysis.cs
rename to ZR.Model/MES/qc/backend/QcBackEndBaseLabelAnalysis.cs
diff --git a/ZR.Model/MES/qc/QcBackEndBaseSite.cs b/ZR.Model/MES/qc/backend/QcBackEndBaseSite.cs
similarity index 100%
rename from ZR.Model/MES/qc/QcBackEndBaseSite.cs
rename to ZR.Model/MES/qc/backend/QcBackEndBaseSite.cs
diff --git a/ZR.Model/MES/qc/QcBackEndLogWorkorder.cs b/ZR.Model/MES/qc/backend/QcBackEndLogWorkorder.cs
similarity index 100%
rename from ZR.Model/MES/qc/QcBackEndLogWorkorder.cs
rename to ZR.Model/MES/qc/backend/QcBackEndLogWorkorder.cs
diff --git a/ZR.Model/MES/qc/QcBackEndRecordLabelScan.cs b/ZR.Model/MES/qc/backend/QcBackEndRecordLabelScan.cs
similarity index 100%
rename from ZR.Model/MES/qc/QcBackEndRecordLabelScan.cs
rename to ZR.Model/MES/qc/backend/QcBackEndRecordLabelScan.cs
diff --git a/ZR.Model/MES/qc/QcBackEndRecordWorkorderDefect.cs b/ZR.Model/MES/qc/backend/QcBackEndRecordWorkorderDefect.cs
similarity index 100%
rename from ZR.Model/MES/qc/QcBackEndRecordWorkorderDefect.cs
rename to ZR.Model/MES/qc/backend/QcBackEndRecordWorkorderDefect.cs
diff --git a/ZR.Model/MES/qc/QcBackEndServiceStatistics.cs b/ZR.Model/MES/qc/backend/QcBackEndServiceStatistics.cs
similarity index 100%
rename from ZR.Model/MES/qc/QcBackEndServiceStatistics.cs
rename to ZR.Model/MES/qc/backend/QcBackEndServiceStatistics.cs
diff --git a/ZR.Model/MES/qc/QcBackEndServiceWorkorder.cs b/ZR.Model/MES/qc/backend/QcBackEndServiceWorkorder.cs
similarity index 100%
rename from ZR.Model/MES/qc/QcBackEndServiceWorkorder.cs
rename to ZR.Model/MES/qc/backend/QcBackEndServiceWorkorder.cs
diff --git a/ZR.Model/MES/qc/backend/QcBackendBaseOutpackage.cs b/ZR.Model/MES/qc/backend/QcBackendBaseOutpackage.cs
new file mode 100644
index 00000000..adc9cc3f
--- /dev/null
+++ b/ZR.Model/MES/qc/backend/QcBackendBaseOutpackage.cs
@@ -0,0 +1,41 @@
+
+namespace ZR.Model.Business
+{
+ ///
+ /// 质量后道外箱标签打印配置
+
+ ///
+ [SugarTable("qc_backend_base_outpackage")]
+ public class QcBackendBaseOutpackage
+ {
+ ///
+ /// 主键
+ ///
+ [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+ public int Id { get; set; }
+
+ ///
+ /// 对应箱标签名称
+ ///
+ public string Name { get; set; }
+
+ ///
+ /// Bartender打印文件对应地址
+ ///
+ [SugarColumn(ColumnName = "file_url")]
+ public string FileUrl { get; set; }
+
+ ///
+ /// 满箱容量
+ ///
+ [SugarColumn(ColumnName = "package_num")]
+ public int? PackageNum { get; set; }
+
+ ///
+ /// 对应匹配零件描述的校验字段
+ ///
+ [SugarColumn(ColumnName = "check_str")]
+ public string CheckStr { get; set; }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Model/MES/qc/QcGp12BaseDefect.cs b/ZR.Model/MES/qc/gp12/QcGp12BaseDefect.cs
similarity index 100%
rename from ZR.Model/MES/qc/QcGp12BaseDefect.cs
rename to ZR.Model/MES/qc/gp12/QcGp12BaseDefect.cs
diff --git a/ZR.Model/MES/qc/QcGp12BaseGroup.cs b/ZR.Model/MES/qc/gp12/QcGp12BaseGroup.cs
similarity index 100%
rename from ZR.Model/MES/qc/QcGp12BaseGroup.cs
rename to ZR.Model/MES/qc/gp12/QcGp12BaseGroup.cs
diff --git a/ZR.Model/MES/qc/QcGp12BaseLabelAnalysis.cs b/ZR.Model/MES/qc/gp12/QcGp12BaseLabelAnalysis.cs
similarity index 100%
rename from ZR.Model/MES/qc/QcGp12BaseLabelAnalysis.cs
rename to ZR.Model/MES/qc/gp12/QcGp12BaseLabelAnalysis.cs
diff --git a/ZR.Model/MES/qc/QcGp12BaseSite.cs b/ZR.Model/MES/qc/gp12/QcGp12BaseSite.cs
similarity index 100%
rename from ZR.Model/MES/qc/QcGp12BaseSite.cs
rename to ZR.Model/MES/qc/gp12/QcGp12BaseSite.cs
diff --git a/ZR.Model/MES/qc/QcGp12LogWorkorder.cs b/ZR.Model/MES/qc/gp12/QcGp12LogWorkorder.cs
similarity index 100%
rename from ZR.Model/MES/qc/QcGp12LogWorkorder.cs
rename to ZR.Model/MES/qc/gp12/QcGp12LogWorkorder.cs
diff --git a/ZR.Model/MES/qc/QcGp12RecordLabelScan.cs b/ZR.Model/MES/qc/gp12/QcGp12RecordLabelScan.cs
similarity index 100%
rename from ZR.Model/MES/qc/QcGp12RecordLabelScan.cs
rename to ZR.Model/MES/qc/gp12/QcGp12RecordLabelScan.cs
diff --git a/ZR.Model/MES/qc/QcGp12RecordWorkorderDefect.cs b/ZR.Model/MES/qc/gp12/QcGp12RecordWorkorderDefect.cs
similarity index 100%
rename from ZR.Model/MES/qc/QcGp12RecordWorkorderDefect.cs
rename to ZR.Model/MES/qc/gp12/QcGp12RecordWorkorderDefect.cs
diff --git a/ZR.Model/MES/qc/QcGp12ServiceStatistics.cs b/ZR.Model/MES/qc/gp12/QcGp12ServiceStatistics.cs
similarity index 100%
rename from ZR.Model/MES/qc/QcGp12ServiceStatistics.cs
rename to ZR.Model/MES/qc/gp12/QcGp12ServiceStatistics.cs
diff --git a/ZR.Model/MES/qc/QcGp12ServiceWorkorder.cs b/ZR.Model/MES/qc/gp12/QcGp12ServiceWorkorder.cs
similarity index 100%
rename from ZR.Model/MES/qc/QcGp12ServiceWorkorder.cs
rename to ZR.Model/MES/qc/gp12/QcGp12ServiceWorkorder.cs
diff --git a/ZR.Service/mes/qc/IService/backend/IQcBackEndBaseDefectService.cs b/ZR.Service/mes/qc/IService/backend/IQcBackEndBaseDefectService.cs
new file mode 100644
index 00000000..61ae45c5
--- /dev/null
+++ b/ZR.Service/mes/qc/IService/backend/IQcBackEndBaseDefectService.cs
@@ -0,0 +1,23 @@
+using System;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using System.Collections.Generic;
+
+namespace ZR.Service.Business.IBusinessService
+{
+ ///
+ /// 质量BackEnd基础缺陷项service接口
+ ///
+ public interface IQcBackEndBaseDefectService : IBaseService
+ {
+ PagedInfo GetList(QcBackEndBaseDefectQueryDto parm);
+
+ QcBackEndBaseDefect GetInfo(int Id);
+
+ QcBackEndBaseDefect AddQcBackEndBaseDefect(QcBackEndBaseDefect parm);
+
+ int UpdateQcBackEndBaseDefect(QcBackEndBaseDefect parm);
+
+ }
+}
diff --git a/ZR.Service/mes/qc/IService/backend/IQcBackEndBaseGroupService.cs b/ZR.Service/mes/qc/IService/backend/IQcBackEndBaseGroupService.cs
new file mode 100644
index 00000000..49996b32
--- /dev/null
+++ b/ZR.Service/mes/qc/IService/backend/IQcBackEndBaseGroupService.cs
@@ -0,0 +1,23 @@
+using System;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using System.Collections.Generic;
+
+namespace ZR.Service.Business.IBusinessService
+{
+ ///
+ /// 质量BackEnd班组service接口
+ ///
+ public interface IQcBackEndBaseGroupService : IBaseService
+ {
+ PagedInfo GetList(QcBackEndBaseGroupQueryDto parm);
+
+ QcBackEndBaseGroup GetInfo(int Id);
+
+ QcBackEndBaseGroup AddQcBackEndBaseGroup(QcBackEndBaseGroup parm);
+
+ int UpdateQcBackEndBaseGroup(QcBackEndBaseGroup parm);
+
+ }
+}
diff --git a/ZR.Service/mes/qc/IService/backend/IQcBackEndBaseLabelAnalysisService.cs b/ZR.Service/mes/qc/IService/backend/IQcBackEndBaseLabelAnalysisService.cs
new file mode 100644
index 00000000..439e73d4
--- /dev/null
+++ b/ZR.Service/mes/qc/IService/backend/IQcBackEndBaseLabelAnalysisService.cs
@@ -0,0 +1,23 @@
+using System;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using System.Collections.Generic;
+
+namespace ZR.Service.Business.IBusinessService
+{
+ ///
+ /// 质量BackEnd基础标签解析service接口
+ ///
+ public interface IQcBackEndBaseLabelAnalysisService : IBaseService
+ {
+ PagedInfo GetList(QcBackEndBaseLabelAnalysisQueryDto parm);
+
+ QcBackEndBaseLabelAnalysis GetInfo(int Id);
+
+ QcBackEndBaseLabelAnalysis AddQcBackEndBaseLabelAnalysis(QcBackEndBaseLabelAnalysis parm);
+
+ int UpdateQcBackEndBaseLabelAnalysis(QcBackEndBaseLabelAnalysis parm);
+
+ }
+}
diff --git a/ZR.Service/mes/qc/IService/backend/IQcBackEndBaseSiteService.cs b/ZR.Service/mes/qc/IService/backend/IQcBackEndBaseSiteService.cs
new file mode 100644
index 00000000..663547bc
--- /dev/null
+++ b/ZR.Service/mes/qc/IService/backend/IQcBackEndBaseSiteService.cs
@@ -0,0 +1,23 @@
+using System;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using System.Collections.Generic;
+
+namespace ZR.Service.Business.IBusinessService
+{
+ ///
+ /// 质量BackEnd基础站点service接口
+ ///
+ public interface IQcBackEndBaseSiteService : IBaseService
+ {
+ PagedInfo GetList(QcBackEndBaseSiteQueryDto parm);
+
+ QcBackEndBaseSite GetInfo(int Id);
+
+ QcBackEndBaseSite AddQcBackEndBaseSite(QcBackEndBaseSite parm);
+
+ int UpdateQcBackEndBaseSite(QcBackEndBaseSite parm);
+
+ }
+}
diff --git a/ZR.Service/mes/qc/IService/backend/IQcBackEndLogWorkorderService.cs b/ZR.Service/mes/qc/IService/backend/IQcBackEndLogWorkorderService.cs
new file mode 100644
index 00000000..31562094
--- /dev/null
+++ b/ZR.Service/mes/qc/IService/backend/IQcBackEndLogWorkorderService.cs
@@ -0,0 +1,23 @@
+using System;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using System.Collections.Generic;
+
+namespace ZR.Service.Business.IBusinessService
+{
+ ///
+ /// 质量BackEnd工单操作日志service接口
+ ///
+ public interface IQcBackEndLogWorkorderService : IBaseService
+ {
+ PagedInfo GetList(QcBackEndLogWorkorderQueryDto parm);
+
+ QcBackEndLogWorkorder GetInfo(string Id);
+
+ QcBackEndLogWorkorder AddQcBackEndLogWorkorder(QcBackEndLogWorkorder parm);
+
+ int UpdateQcBackEndLogWorkorder(QcBackEndLogWorkorder parm);
+
+ }
+}
diff --git a/ZR.Service/mes/qc/IService/backend/IQcBackEndRecordLabelScanService.cs b/ZR.Service/mes/qc/IService/backend/IQcBackEndRecordLabelScanService.cs
new file mode 100644
index 00000000..c4a6f91c
--- /dev/null
+++ b/ZR.Service/mes/qc/IService/backend/IQcBackEndRecordLabelScanService.cs
@@ -0,0 +1,23 @@
+using System;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using System.Collections.Generic;
+
+namespace ZR.Service.Business.IBusinessService
+{
+ ///
+ /// 质量BackEnd扫码标签记录service接口
+ ///
+ public interface IQcBackEndRecordLabelScanService : IBaseService
+ {
+ PagedInfo GetList(QcBackEndRecordLabelScanQueryDto parm);
+
+ QcBackEndRecordLabelScan GetInfo(string Id);
+
+ QcBackEndRecordLabelScan AddQcBackEndRecordLabelScan(QcBackEndRecordLabelScan parm);
+
+ int UpdateQcBackEndRecordLabelScan(QcBackEndRecordLabelScan parm);
+
+ }
+}
diff --git a/ZR.Service/mes/qc/IService/backend/IQcBackEndRecordWorkorderDefectService.cs b/ZR.Service/mes/qc/IService/backend/IQcBackEndRecordWorkorderDefectService.cs
new file mode 100644
index 00000000..21348484
--- /dev/null
+++ b/ZR.Service/mes/qc/IService/backend/IQcBackEndRecordWorkorderDefectService.cs
@@ -0,0 +1,23 @@
+using System;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using System.Collections.Generic;
+
+namespace ZR.Service.Business.IBusinessService
+{
+ ///
+ /// 质量BackEnd工单缺陷项记录service接口
+ ///
+ public interface IQcBackEndRecordWorkorderDefectService : IBaseService
+ {
+ PagedInfo GetList(QcBackEndRecordWorkorderDefectQueryDto parm);
+
+ QcBackEndRecordWorkorderDefect GetInfo(string Id);
+
+ QcBackEndRecordWorkorderDefect AddQcBackEndRecordWorkorderDefect(QcBackEndRecordWorkorderDefect parm);
+
+ int UpdateQcBackEndRecordWorkorderDefect(QcBackEndRecordWorkorderDefect parm);
+
+ }
+}
diff --git a/ZR.Service/mes/qc/IService/backend/IQcBackEndService.cs b/ZR.Service/mes/qc/IService/backend/IQcBackEndService.cs
new file mode 100644
index 00000000..fa255fcd
--- /dev/null
+++ b/ZR.Service/mes/qc/IService/backend/IQcBackEndService.cs
@@ -0,0 +1,90 @@
+using System;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using System.Collections.Generic;
+
+namespace ZR.Service.Business.IBusinessService
+{
+ ///
+ /// 质量BackEnd工单业务模块service接口
+ ///
+ public interface IQcBackEndService : IBaseService
+ {
+ ///
+ /// 获取班组下拉
+ ///
+ ///
+ List GetGroupOptions();
+
+ ///
+ /// 获取站点下拉
+ ///
+ ///
+ List GetStieOptions();
+
+ ///
+ /// 获取缺陷项渲染数据
+ ///
+ ///
+ List GetDefectInitOptions();
+
+ ///
+ /// 获取缺陷项菜单列表的渲染数据
+ ///
+ ///
+ List GetDefectTableOptions();
+
+ ///
+ /// 解析标签
+ ///
+ /// 标签内容 扫码内容
+ /// 解析方法 1-全解析 2-只看零件号
+ ///
+ QcBackEndLabelAnalysisDto AnalyzeLabelToDto(string label,int type);
+
+ ///
+ /// 开始工单(标签重复则开启旧工单)
+ ///
+ ///
+ QcBackEndServiceWorkorder StartBackEndWorkOrder(QcBackEndWorkorderDetailDto data);
+
+ ///
+ /// 工单缺陷项修改
+ ///
+ ///
+ QcBackEndServiceWorkorder ChangeWorkOrderDefect(QcBackEndWorkorderDefectDto data);
+
+ ///
+ /// 触摸屏工单缺陷项获取
+ ///
+ ///
+ List GetWorkOrderDefectList(string workorder);
+
+ ///
+ /// 触摸屏扫内标签零件
+ ///
+ ///
+ string ScanInnerLabel(QcBackEndLabelScanDto data);
+
+ ///
+ /// 结束工单并生成质量报表
+ ///
+ ///
+ string EndBackEndWorkOrderAndCreateStatistics(string workorder);
+
+ ///
+ /// 更新工单相关信息
+ ///
+ /// 工单号
+ ///
+ public QcBackEndServiceWorkorder UpdateWorkOrderDetail(string workorder);
+
+ ///
+ /// 生成虚拟标签
+ ///
+ /// 工单信息
+ ///
+ public QcBackEndServiceWorkorder GenerateVirtualLabel(QcBackEndWorkorderDetailDto workorderDetail);
+ }
+}
diff --git a/ZR.Service/mes/qc/IService/backend/IQcBackEndServiceStatisticsService.cs b/ZR.Service/mes/qc/IService/backend/IQcBackEndServiceStatisticsService.cs
new file mode 100644
index 00000000..f9b3141d
--- /dev/null
+++ b/ZR.Service/mes/qc/IService/backend/IQcBackEndServiceStatisticsService.cs
@@ -0,0 +1,35 @@
+using System;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using System.Collections.Generic;
+
+namespace ZR.Service.Business.IBusinessService
+{
+ ///
+ /// 质量BackEnd统计报表业务模块service接口
+ ///
+ public interface IQcBackEndServiceStatisticsService : IBaseService
+ {
+ ///
+ /// 获取原始数据
+ ///
+ ///
+ ///
+ PagedInfo GetList(QcBackEndServiceStatisticsQueryDto parm);
+
+ ///
+ /// 获取修正格式后的列表数据
+ ///
+ ///
+ ///
+ List GetReviseList(QcBackEndServiceStatisticsQueryDto parm);
+
+ QcBackEndServiceStatistics GetInfo(string Id);
+
+ QcBackEndServiceStatistics AddQcBackEndServiceStatistics(QcBackEndServiceStatistics parm);
+
+ int UpdateQcBackEndServiceStatistics(QcBackEndServiceStatistics parm);
+
+ }
+}
diff --git a/ZR.Service/mes/qc/IService/backend/IQcBackEndServiceWorkorderService.cs b/ZR.Service/mes/qc/IService/backend/IQcBackEndServiceWorkorderService.cs
new file mode 100644
index 00000000..0a78787c
--- /dev/null
+++ b/ZR.Service/mes/qc/IService/backend/IQcBackEndServiceWorkorderService.cs
@@ -0,0 +1,23 @@
+using System;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using System.Collections.Generic;
+
+namespace ZR.Service.Business.IBusinessService
+{
+ ///
+ /// 质量BackEnd工单业务模块service接口
+ ///
+ public interface IQcBackEndServiceWorkorderService : IBaseService
+ {
+ PagedInfo GetList(QcBackEndServiceWorkorderQueryDto parm);
+
+ QcBackEndServiceWorkorder GetInfo(string Id);
+
+ QcBackEndServiceWorkorder AddQcBackEndServiceWorkorder(QcBackEndServiceWorkorder parm);
+
+ int UpdateQcBackEndServiceWorkorder(QcBackEndServiceWorkorder parm);
+
+ }
+}
diff --git a/ZR.Service/mes/qc/IService/backend/IQcBackendBaseOutpackageService.cs b/ZR.Service/mes/qc/IService/backend/IQcBackendBaseOutpackageService.cs
new file mode 100644
index 00000000..9520158d
--- /dev/null
+++ b/ZR.Service/mes/qc/IService/backend/IQcBackendBaseOutpackageService.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using ZR.Model;
+using ZR.Model.Business;
+using ZR.Model.Dto;
+
+namespace ZR.Service.Business.IBusinessService
+{
+ ///
+ /// 质量后道外箱标签打印配置
+ ///
+ public interface IQcBackendBaseOutpackageService : IBaseService
+ {
+ PagedInfo GetList(QcBackendBaseOutpackageQueryDto parm);
+
+ QcBackendBaseOutpackage GetInfo(int Id);
+
+ QcBackendBaseOutpackage AddQcBackendBaseOutpackage(QcBackendBaseOutpackage parm);
+
+ int UpdateQcBackendBaseOutpackage(QcBackendBaseOutpackage parm);
+ }
+}
diff --git a/ZR.Service/mes/qc/IService/IQcGp12BaseDefectService.cs b/ZR.Service/mes/qc/IService/gp12/IQcGp12BaseDefectService.cs
similarity index 100%
rename from ZR.Service/mes/qc/IService/IQcGp12BaseDefectService.cs
rename to ZR.Service/mes/qc/IService/gp12/IQcGp12BaseDefectService.cs
diff --git a/ZR.Service/mes/qc/IService/IQcGp12BaseGroupService.cs b/ZR.Service/mes/qc/IService/gp12/IQcGp12BaseGroupService.cs
similarity index 100%
rename from ZR.Service/mes/qc/IService/IQcGp12BaseGroupService.cs
rename to ZR.Service/mes/qc/IService/gp12/IQcGp12BaseGroupService.cs
diff --git a/ZR.Service/mes/qc/IService/IQcGp12BaseLabelAnalysisService.cs b/ZR.Service/mes/qc/IService/gp12/IQcGp12BaseLabelAnalysisService.cs
similarity index 100%
rename from ZR.Service/mes/qc/IService/IQcGp12BaseLabelAnalysisService.cs
rename to ZR.Service/mes/qc/IService/gp12/IQcGp12BaseLabelAnalysisService.cs
diff --git a/ZR.Service/mes/qc/IService/IQcGp12BaseSiteService.cs b/ZR.Service/mes/qc/IService/gp12/IQcGp12BaseSiteService.cs
similarity index 100%
rename from ZR.Service/mes/qc/IService/IQcGp12BaseSiteService.cs
rename to ZR.Service/mes/qc/IService/gp12/IQcGp12BaseSiteService.cs
diff --git a/ZR.Service/mes/qc/IService/IQcGp12LogWorkorderService.cs b/ZR.Service/mes/qc/IService/gp12/IQcGp12LogWorkorderService.cs
similarity index 100%
rename from ZR.Service/mes/qc/IService/IQcGp12LogWorkorderService.cs
rename to ZR.Service/mes/qc/IService/gp12/IQcGp12LogWorkorderService.cs
diff --git a/ZR.Service/mes/qc/IService/IQcGp12RecordLabelScanService.cs b/ZR.Service/mes/qc/IService/gp12/IQcGp12RecordLabelScanService.cs
similarity index 100%
rename from ZR.Service/mes/qc/IService/IQcGp12RecordLabelScanService.cs
rename to ZR.Service/mes/qc/IService/gp12/IQcGp12RecordLabelScanService.cs
diff --git a/ZR.Service/mes/qc/IService/IQcGp12RecordWorkorderDefectService.cs b/ZR.Service/mes/qc/IService/gp12/IQcGp12RecordWorkorderDefectService.cs
similarity index 100%
rename from ZR.Service/mes/qc/IService/IQcGp12RecordWorkorderDefectService.cs
rename to ZR.Service/mes/qc/IService/gp12/IQcGp12RecordWorkorderDefectService.cs
diff --git a/ZR.Service/mes/qc/IService/IQcGp12Service.cs b/ZR.Service/mes/qc/IService/gp12/IQcGp12Service.cs
similarity index 100%
rename from ZR.Service/mes/qc/IService/IQcGp12Service.cs
rename to ZR.Service/mes/qc/IService/gp12/IQcGp12Service.cs
diff --git a/ZR.Service/mes/qc/IService/IQcGp12ServiceStatisticsService.cs b/ZR.Service/mes/qc/IService/gp12/IQcGp12ServiceStatisticsService.cs
similarity index 100%
rename from ZR.Service/mes/qc/IService/IQcGp12ServiceStatisticsService.cs
rename to ZR.Service/mes/qc/IService/gp12/IQcGp12ServiceStatisticsService.cs
diff --git a/ZR.Service/mes/qc/IService/IQcGp12ServiceWorkorderService.cs b/ZR.Service/mes/qc/IService/gp12/IQcGp12ServiceWorkorderService.cs
similarity index 100%
rename from ZR.Service/mes/qc/IService/IQcGp12ServiceWorkorderService.cs
rename to ZR.Service/mes/qc/IService/gp12/IQcGp12ServiceWorkorderService.cs
diff --git a/ZR.Service/mes/qc/backend/QcBackEndBaseDefectService.cs b/ZR.Service/mes/qc/backend/QcBackEndBaseDefectService.cs
new file mode 100644
index 00000000..92268a21
--- /dev/null
+++ b/ZR.Service/mes/qc/backend/QcBackEndBaseDefectService.cs
@@ -0,0 +1,86 @@
+using System;
+using SqlSugar;
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using ZR.Repository;
+using ZR.Service.Business.IBusinessService;
+using System.Linq;
+
+namespace ZR.Service.Business
+{
+ ///
+ /// 质量BackEnd基础缺陷项Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(IQcBackEndBaseDefectService), ServiceLifetime = LifeTime.Transient)]
+ public class QcBackEndBaseDefectService : BaseService, IQcBackEndBaseDefectService
+ {
+ ///
+ /// 查询质量BackEnd基础缺陷项列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(QcBackEndBaseDefectQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public QcBackEndBaseDefect GetInfo(int Id)
+ {
+ var response = Queryable()
+ .Where(x => x.Id == Id)
+ .First();
+
+ return response;
+ }
+
+ ///
+ /// 添加质量BackEnd基础缺陷项
+ ///
+ ///
+ ///
+ public QcBackEndBaseDefect AddQcBackEndBaseDefect(QcBackEndBaseDefect model)
+ {
+ return Context.Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改质量BackEnd基础缺陷项
+ ///
+ ///
+ ///
+ public int UpdateQcBackEndBaseDefect(QcBackEndBaseDefect model)
+ {
+ //var response = Update(w => w.Id == model.Id, it => new QcBackEndBaseDefect()
+ //{
+ // Name = model.Name,
+ // Code = model.Code,
+ // Group = model.Group,
+ // Type = model.Type,
+ // Status = model.Status,
+ // Remark = model.Remark,
+ // CreatedBy = model.CreatedBy,
+ // CreatedTime = model.CreatedTime,
+ // UpdatedBy = model.UpdatedBy,
+ // UpdatedTime = model.UpdatedTime,
+ //});
+ //return response;
+ return Update(model, true);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/mes/qc/backend/QcBackEndBaseGroupService.cs b/ZR.Service/mes/qc/backend/QcBackEndBaseGroupService.cs
new file mode 100644
index 00000000..8c507958
--- /dev/null
+++ b/ZR.Service/mes/qc/backend/QcBackEndBaseGroupService.cs
@@ -0,0 +1,85 @@
+using System;
+using SqlSugar;
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using ZR.Repository;
+using ZR.Service.Business.IBusinessService;
+using System.Linq;
+
+namespace ZR.Service.Business
+{
+ ///
+ /// 质量BackEnd班组Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(IQcBackEndBaseGroupService), ServiceLifetime = LifeTime.Transient)]
+ public class QcBackEndBaseGroupService : BaseService, IQcBackEndBaseGroupService
+ {
+ ///
+ /// 查询质量BackEnd班组列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(QcBackEndBaseGroupQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public QcBackEndBaseGroup GetInfo(int Id)
+ {
+ var response = Queryable()
+ .Where(x => x.Id == Id)
+ .First();
+
+ return response;
+ }
+
+ ///
+ /// 添加质量BackEnd班组
+ ///
+ ///
+ ///
+ public QcBackEndBaseGroup AddQcBackEndBaseGroup(QcBackEndBaseGroup model)
+ {
+ return Context.Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改质量BackEnd班组
+ ///
+ ///
+ ///
+ public int UpdateQcBackEndBaseGroup(QcBackEndBaseGroup model)
+ {
+ //var response = Update(w => w.Id == model.Id, it => new QcBackEndBaseGroup()
+ //{
+ // Name = model.Name,
+ // Code = model.Code,
+ // Type = model.Type,
+ // Status = model.Status,
+ // Remark = model.Remark,
+ // CreatedBy = model.CreatedBy,
+ // CreatedTime = model.CreatedTime,
+ // UpdatedBy = model.UpdatedBy,
+ // UpdatedTime = model.UpdatedTime,
+ //});
+ //return response;
+ return Update(model, true);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/mes/qc/backend/QcBackEndBaseLabelAnalysisService.cs b/ZR.Service/mes/qc/backend/QcBackEndBaseLabelAnalysisService.cs
new file mode 100644
index 00000000..bed8bea4
--- /dev/null
+++ b/ZR.Service/mes/qc/backend/QcBackEndBaseLabelAnalysisService.cs
@@ -0,0 +1,87 @@
+using System;
+using SqlSugar;
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using ZR.Repository;
+using ZR.Service.Business.IBusinessService;
+using System.Linq;
+
+namespace ZR.Service.Business
+{
+ ///
+ /// 质量BackEnd基础标签解析Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(IQcBackEndBaseLabelAnalysisService), ServiceLifetime = LifeTime.Transient)]
+ public class QcBackEndBaseLabelAnalysisService : BaseService, IQcBackEndBaseLabelAnalysisService
+ {
+ ///
+ /// 查询质量BackEnd基础标签解析列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(QcBackEndBaseLabelAnalysisQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public QcBackEndBaseLabelAnalysis GetInfo(int Id)
+ {
+ var response = Queryable()
+ .Where(x => x.Id == Id)
+ .First();
+
+ return response;
+ }
+
+ ///
+ /// 添加质量BackEnd基础标签解析
+ ///
+ ///
+ ///
+ public QcBackEndBaseLabelAnalysis AddQcBackEndBaseLabelAnalysis(QcBackEndBaseLabelAnalysis model)
+ {
+ return Context.Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改质量BackEnd基础标签解析
+ ///
+ ///
+ ///
+ public int UpdateQcBackEndBaseLabelAnalysis(QcBackEndBaseLabelAnalysis model)
+ {
+ //var response = Update(w => w.Id == model.Id, it => new QcBackEndBaseLabelAnalysis()
+ //{
+ // Name = model.Name,
+ // Code = model.Code,
+ // Expression = model.Expression,
+ // Sort = model.Sort,
+ // Type = model.Type,
+ // Status = model.Status,
+ // Remark = model.Remark,
+ // CreatedBy = model.CreatedBy,
+ // CreatedTime = model.CreatedTime,
+ // UpdatedBy = model.UpdatedBy,
+ // UpdatedTime = model.UpdatedTime,
+ //});
+ //return response;
+ return Update(model, true);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/mes/qc/backend/QcBackEndBaseSiteService.cs b/ZR.Service/mes/qc/backend/QcBackEndBaseSiteService.cs
new file mode 100644
index 00000000..50f7ea6b
--- /dev/null
+++ b/ZR.Service/mes/qc/backend/QcBackEndBaseSiteService.cs
@@ -0,0 +1,85 @@
+using System;
+using SqlSugar;
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using ZR.Repository;
+using ZR.Service.Business.IBusinessService;
+using System.Linq;
+
+namespace ZR.Service.Business
+{
+ ///
+ /// 质量BackEnd基础站点Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(IQcBackEndBaseSiteService), ServiceLifetime = LifeTime.Transient)]
+ public class QcBackEndBaseSiteService : BaseService, IQcBackEndBaseSiteService
+ {
+ ///
+ /// 查询质量BackEnd基础站点列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(QcBackEndBaseSiteQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public QcBackEndBaseSite GetInfo(int Id)
+ {
+ var response = Queryable()
+ .Where(x => x.Id == Id)
+ .First();
+
+ return response;
+ }
+
+ ///
+ /// 添加质量BackEnd基础站点
+ ///
+ ///
+ ///
+ public QcBackEndBaseSite AddQcBackEndBaseSite(QcBackEndBaseSite model)
+ {
+ return Context.Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改质量BackEnd基础站点
+ ///
+ ///
+ ///
+ public int UpdateQcBackEndBaseSite(QcBackEndBaseSite model)
+ {
+ //var response = Update(w => w.Id == model.Id, it => new QcBackEndBaseSite()
+ //{
+ // Name = model.Name,
+ // Code = model.Code,
+ // Type = model.Type,
+ // Status = model.Status,
+ // Remark = model.Remark,
+ // CreatedBy = model.CreatedBy,
+ // CreatedTime = model.CreatedTime,
+ // UpdatedBy = model.UpdatedBy,
+ // UpdatedTime = model.UpdatedTime,
+ //});
+ //return response;
+ return Update(model, true);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/mes/qc/backend/QcBackEndLogWorkorderService.cs b/ZR.Service/mes/qc/backend/QcBackEndLogWorkorderService.cs
new file mode 100644
index 00000000..16cbe798
--- /dev/null
+++ b/ZR.Service/mes/qc/backend/QcBackEndLogWorkorderService.cs
@@ -0,0 +1,85 @@
+using System;
+using SqlSugar;
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using ZR.Repository;
+using ZR.Service.Business.IBusinessService;
+using System.Linq;
+
+namespace ZR.Service.Business
+{
+ ///
+ /// 质量BackEnd工单操作日志Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(IQcBackEndLogWorkorderService), ServiceLifetime = LifeTime.Transient)]
+ public class QcBackEndLogWorkorderService : BaseService, IQcBackEndLogWorkorderService
+ {
+ ///
+ /// 查询质量BackEnd工单操作日志列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(QcBackEndLogWorkorderQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public QcBackEndLogWorkorder GetInfo(string Id)
+ {
+ var response = Queryable()
+ .Where(x => x.Id == Id)
+ .First();
+
+ return response;
+ }
+
+ ///
+ /// 添加质量BackEnd工单操作日志
+ ///
+ ///
+ ///
+ public QcBackEndLogWorkorder AddQcBackEndLogWorkorder(QcBackEndLogWorkorder model)
+ {
+ return Context.Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改质量BackEnd工单操作日志
+ ///
+ ///
+ ///
+ public int UpdateQcBackEndLogWorkorder(QcBackEndLogWorkorder model)
+ {
+ //var response = Update(w => w.Id == model.Id, it => new QcBackEndLogWorkorder()
+ //{
+ // Name = model.Name,
+ // Content = model.Content,
+ // Type = model.Type,
+ // Status = model.Status,
+ // Remark = model.Remark,
+ // CreatedBy = model.CreatedBy,
+ // CreatedTime = model.CreatedTime,
+ // UpdatedBy = model.UpdatedBy,
+ // UpdatedTime = model.UpdatedTime,
+ //});
+ //return response;
+ return Update(model, true);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/mes/qc/backend/QcBackEndRecordLabelScanService.cs b/ZR.Service/mes/qc/backend/QcBackEndRecordLabelScanService.cs
new file mode 100644
index 00000000..71d00bef
--- /dev/null
+++ b/ZR.Service/mes/qc/backend/QcBackEndRecordLabelScanService.cs
@@ -0,0 +1,92 @@
+using System;
+using SqlSugar;
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using ZR.Repository;
+using ZR.Service.Business.IBusinessService;
+using System.Linq;
+
+namespace ZR.Service.Business
+{
+ ///
+ /// 质量BackEnd扫码标签记录Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(IQcBackEndRecordLabelScanService), ServiceLifetime = LifeTime.Transient)]
+ public class QcBackEndRecordLabelScanService : BaseService, IQcBackEndRecordLabelScanService
+ {
+ ///
+ /// 查询质量BackEnd扫码标签记录列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(QcBackEndRecordLabelScanQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public QcBackEndRecordLabelScan GetInfo(string Id)
+ {
+ var response = Queryable()
+ .Where(x => x.Id == Id)
+ .First();
+
+ return response;
+ }
+
+ ///
+ /// 添加质量BackEnd扫码标签记录
+ ///
+ ///
+ ///
+ public QcBackEndRecordLabelScan AddQcBackEndRecordLabelScan(QcBackEndRecordLabelScan model)
+ {
+ return Context.Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改质量BackEnd扫码标签记录
+ ///
+ ///
+ ///
+ public int UpdateQcBackEndRecordLabelScan(QcBackEndRecordLabelScan model)
+ {
+ //var response = Update(w => w.Id == model.Id, it => new QcBackEndRecordLabelScan()
+ //{
+ // WorkOrder = model.WorkOrder,
+ // PartNumber = model.PartNumber,
+ // Team = model.Team,
+ // SiteNo = model.SiteNo,
+ // ComNo = model.ComNo,
+ // Label = model.Label,
+ // LabelType = model.LabelType,
+ // LabelSort = model.LabelSort,
+ // ScanTime = model.ScanTime,
+ // Type = model.Type,
+ // Status = model.Status,
+ // Remark = model.Remark,
+ // CreatedBy = model.CreatedBy,
+ // CreatedTime = model.CreatedTime,
+ // UpdatedBy = model.UpdatedBy,
+ // UpdatedTime = model.UpdatedTime,
+ //});
+ //return response;
+ return Update(model, true);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/mes/qc/backend/QcBackEndRecordWorkorderDefectService.cs b/ZR.Service/mes/qc/backend/QcBackEndRecordWorkorderDefectService.cs
new file mode 100644
index 00000000..83bc171a
--- /dev/null
+++ b/ZR.Service/mes/qc/backend/QcBackEndRecordWorkorderDefectService.cs
@@ -0,0 +1,93 @@
+using System;
+using SqlSugar;
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using ZR.Repository;
+using ZR.Service.Business.IBusinessService;
+using System.Linq;
+
+namespace ZR.Service.Business
+{
+ ///
+ /// 质量BackEnd工单缺陷项记录Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(IQcBackEndRecordWorkorderDefectService), ServiceLifetime = LifeTime.Transient)]
+ public class QcBackEndRecordWorkorderDefectService : BaseService, IQcBackEndRecordWorkorderDefectService
+ {
+ ///
+ /// 查询质量BackEnd工单缺陷项记录列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(QcBackEndRecordWorkorderDefectQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public QcBackEndRecordWorkorderDefect GetInfo(string Id)
+ {
+ var response = Queryable()
+ .Where(x => x.Id == Id)
+ .First();
+
+ return response;
+ }
+
+ ///
+ /// 添加质量BackEnd工单缺陷项记录
+ ///
+ ///
+ ///
+ public QcBackEndRecordWorkorderDefect AddQcBackEndRecordWorkorderDefect(QcBackEndRecordWorkorderDefect model)
+ {
+ return Context.Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改质量BackEnd工单缺陷项记录
+ ///
+ ///
+ ///
+ public int UpdateQcBackEndRecordWorkorderDefect(QcBackEndRecordWorkorderDefect model)
+ {
+ //var response = Update(w => w.Id == model.Id, it => new QcBackEndRecordWorkorderDefect()
+ //{
+ // WorkOrder = model.WorkOrder,
+ // PartNumber = model.PartNumber,
+ // Team = model.Team,
+ // SiteNo = model.SiteNo,
+ // ComNo = model.ComNo,
+ // DefectCode = model.DefectCode,
+ // DefectName = model.DefectName,
+ // DefectType = model.DefectType,
+ // DefectNum = model.DefectNum,
+ // ClickTime = model.ClickTime,
+ // Type = model.Type,
+ // Status = model.Status,
+ // Remark = model.Remark,
+ // CreatedBy = model.CreatedBy,
+ // CreatedTime = model.CreatedTime,
+ // UpdatedBy = model.UpdatedBy,
+ // UpdatedTime = model.UpdatedTime,
+ //});
+ //return response;
+ return Update(model, true);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/mes/qc/backend/QcBackEndService.cs b/ZR.Service/mes/qc/backend/QcBackEndService.cs
new file mode 100644
index 00000000..f5d6a52c
--- /dev/null
+++ b/ZR.Service/mes/qc/backend/QcBackEndService.cs
@@ -0,0 +1,965 @@
+using System;
+using System.Globalization;
+using System.Linq;
+using System.Text.Json;
+using System.Text.RegularExpressions;
+using System.Transactions;
+using Aliyun.OSS;
+using AutoMapper;
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using JinianNet.JNTemplate;
+using Microsoft.AspNetCore.Http.HttpResults;
+using SqlSugar;
+using ZR.Model;
+using ZR.Model.Business;
+using ZR.Model.Dto;
+using ZR.Model.MES.wms;
+using ZR.Repository;
+using ZR.Service.Business.IBusinessService;
+using static System.Runtime.InteropServices.JavaScript.JSType;
+
+namespace ZR.Service.Business
+{
+ ///
+ /// 质量BackEnd工单业务模块Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(IQcBackEndService), ServiceLifetime = LifeTime.Transient)]
+ public class QcBackEndService : BaseService, IQcBackEndService
+ {
+ public QcBackEndLabelAnalysisDto AnalyzeLabelToDto(string label, int type)
+ {
+ QcBackEndLabelAnalysisDto labelAnalysisDto =
+ new()
+ {
+ IsOk = true,
+ Msg = "解析成功!",
+ LabelCode = label,
+ };
+ // 判断内外箱标签
+
+ // 解析零件号
+ labelAnalysisDto.Partnumber = DoAnalyzePartnumber(label);
+ // 解析数量
+ labelAnalysisDto.Number = DoAnalyzeQuantity(label);
+ if (string.IsNullOrEmpty(labelAnalysisDto.Partnumber))
+ {
+ labelAnalysisDto.IsOk = false;
+ labelAnalysisDto.Msg = "标签,零件号解析异常!";
+ }
+
+ // TYPE === 1 时,同时根据物料清单获取详细信息
+ if (type == 1)
+ {
+ WmMaterial material = Context
+ .Queryable()
+ .Where(it => it.Partnumber == labelAnalysisDto.Partnumber)
+ .Where(it => it.Type == 1)
+ .Where(it => it.Status == 1)
+ .First();
+ if (material == null)
+ {
+ labelAnalysisDto.IsOk = false;
+ labelAnalysisDto.Msg = "物料清单内无此零件号!请检查物料清单:" + labelAnalysisDto.Partnumber;
+ }
+ else
+ {
+ labelAnalysisDto.Color = material.Color;
+ labelAnalysisDto.Specification = material.Specification;
+ labelAnalysisDto.Description = !string.IsNullOrEmpty(material.Description)
+ ? material.Description
+ : material.ProductName;
+ }
+ }
+
+ return labelAnalysisDto;
+ }
+
+ // 标签的零件号解析
+ public string DoAnalyzePartnumber(string label)
+ {
+ // 通用规则下的标签零件号抓取
+ var predicate = Expressionable
+ .Create()
+ .And(it => it.Code == "PartNumber")
+ .And(it => it.Status == "1");
+ List analysisList = Context
+ .Queryable()
+ .Where(predicate.ToExpression())
+ .ToList();
+ foreach (QcBackEndBaseLabelAnalysis analysis in analysisList)
+ {
+ if (string.IsNullOrEmpty(analysis.Expression))
+ {
+ continue;
+ }
+ // 零件号正则表达式
+ Regex pattern = new(@analysis.Expression);
+ Match match = pattern.Match(label);
+ if (match.Success && match.Groups.Count > 1)
+ {
+ return match.Groups[1].Value;
+ }
+ }
+ // 非通用规则下的标签零件号抓取
+ // 解析T58门把手产品标签
+ try
+ {
+ // 直接从标签中截取前 15 个字符作为零件号
+ if (!string.IsNullOrEmpty(label) && label.Length >= 40 && label.EndsWith('$'))
+ {
+ return label.Substring(0, 17);
+ }
+ }
+ catch (Exception)
+ {
+ return "";
+ }
+ return "";
+ }
+
+ // 标签的数量解析
+ public int DoAnalyzeQuantity(string label)
+ {
+ int result = 0;
+ // 标签零件号抓取
+ var predicate = Expressionable
+ .Create()
+ .And(it => it.Code == "Quantity")
+ .And(it => it.Status == "1");
+ List analysisList = Context
+ .Queryable()
+ .Where(predicate.ToExpression())
+ .ToList();
+ foreach (QcBackEndBaseLabelAnalysis analysis in analysisList)
+ {
+ if (string.IsNullOrEmpty(analysis.Expression))
+ {
+ continue;
+ }
+ // 零件号正则表达式
+ Regex pattern = new(@analysis.Expression);
+ Match match = pattern.Match(label);
+ if (match.Success && match.Groups.Count > 1)
+ {
+ if (Int32.TryParse(match.Groups[1].Value, out result))
+ {
+ return result;
+ }
+ else
+ {
+ return -1;
+ }
+ }
+ }
+ return -1;
+ }
+
+ public List GetDefectInitOptions()
+ {
+ List defectList = new();
+ var predicate = Expressionable.Create().And(it => it.Status == "1");
+ /*List groupList = Context
+ .Queryable()
+ .Where(predicate.ToExpression())
+ .GroupBy(it => it.Group)
+ .Select(it => it.Group)
+ .ToList();*/
+ List groupList = new()
+ {
+ "油漆",
+ "设备",
+ "毛坯",
+ "程序",
+ "班组操作"
+ };
+ foreach (string group in groupList)
+ {
+ QcBackEndAlterationDefectDto defectDto = new();
+ defectDto.GroupName = group;
+ List children = Context
+ .Queryable()
+ .Where(it => it.Group == group)
+ .Where(predicate.ToExpression())
+ .Select(it => new QcBackEndChildrenDefectDto
+ {
+ Name = it.Name,
+ Code = it.Code,
+ Type = it.Type,
+ Num = 0
+ })
+ .ToList();
+ defectDto.Children = children;
+ defectList.Add(defectDto);
+ }
+ return defectList;
+ }
+
+ public List GetDefectTableOptions()
+ {
+ List defectList = new();
+ var predicate = Expressionable
+ .Create()
+ .And(it => it.Type == "打磨")
+ .And(it => it.Status == "1");
+ /* List groupList = Context
+ .Queryable()
+ .Where(predicate.ToExpression())
+ .GroupBy(it => it.Group)
+ .Select(it => it.Group)
+ .ToList();*/
+ List groupList = new()
+ {
+ "油漆",
+ "设备",
+ "毛坯",
+ "程序",
+ "班组操作"
+ };
+ foreach (string group in groupList)
+ {
+ QcBackEndAlterationDefectDto defectDto = new();
+ defectDto.GroupName = group;
+ List children = Context
+ .Queryable()
+ .Where(it => it.Group == group)
+ .Where(predicate.ToExpression())
+ .Select(it => new QcBackEndChildrenDefectDto
+ {
+ Name = it.Name,
+ Code = SqlFunc.IIF(
+ SqlFunc.Length(it.Code) >= 2,
+ SqlFunc.MergeString(
+ SqlFunc.Substring(it.Code, 0, 1), // 获取第一个字符(注意:SQL 中索引通常从1开始)
+ SqlFunc.Substring(it.Code, SqlFunc.Length(it.Code) - 1, 1) // 获取最后一个字符
+ ),
+ it.Code
+ ),
+ Type = it.Type,
+ Num = 0
+ })
+ .ToList();
+ defectDto.Children = children;
+ defectList.Add(defectDto);
+ }
+ return defectList;
+ }
+
+ public List GetGroupOptions()
+ {
+ var predicate = Expressionable.Create().And(it => it.Status == "1");
+
+ var response = Context
+ .Queryable()
+ .Where(predicate.ToExpression())
+ .Select(it => new QcBackEndBaseGroupDto())
+ .ToList();
+ return response;
+ }
+
+ public List GetStieOptions()
+ {
+ var predicate = Expressionable.Create().And(it => it.Status == "1");
+
+ var response = Context
+ .Queryable()
+ .Where(predicate.ToExpression())
+ .Select(it => new QcBackEndBaseSiteDto())
+ .ToList();
+ return response;
+ }
+
+ public QcBackEndServiceWorkorder StartBackEndWorkOrder(QcBackEndWorkorderDetailDto data)
+ {
+ // 检查是否是已扫过的外箱标签
+ QcBackEndServiceWorkorder oldWorkOrder = Context
+ .Queryable()
+ .Where(it => it.Label == data.Label)
+ .First();
+ if (oldWorkOrder != null)
+ {
+ return oldWorkOrder;
+ }
+ // 没有旧记录则开启新的记录
+ try
+ {
+ // 检查箱标签是否当内标签扫过
+ bool isInnerLabelScan = Context
+ .Queryable()
+ .Where(it => it.Label == data.Label)
+ .Where(it => it.LabelType == 2)
+ .Any();
+ if (isInnerLabelScan)
+ {
+ throw new Exception("标签异常,该标签已经当内标签扫过!");
+ }
+ Context.Ado.BeginTran();
+ DateTime nowTime = DateTime.Now;
+ // 创建新工单号
+ QcBackEndWorkorderDetailDto workorderInfo = GetNewWorkOrderCreate(data);
+ // 赋值
+ data.WorkOrder = workorderInfo.WorkOrder;
+ data.SerialNumber = workorderInfo.SerialNumber;
+ data.StartTime = nowTime;
+ QcBackEndServiceWorkorder newModel = GetNewWorkOrderInfo(data);
+ QcBackEndServiceWorkorder result = Context.Insertable(newModel).ExecuteReturnEntity();
+ if (result == null)
+ {
+ Context.Ado.RollbackTran();
+ throw new Exception("插入新工单异常");
+ }
+ // 工单开始记录
+ QcBackEndRecordLabelScan newScanLabelRecord =
+ new()
+ {
+ Id = SnowFlakeSingle.Instance.NextId().ToString(),
+ WorkOrder = result.WorkOrder,
+ PartNumber = result.PartNumber,
+ Team = result.Team,
+ SiteNo = result.SiteNo,
+ ComNo = result.ComNo,
+ Label = result.Label,
+ LabelType = 1,
+ LabelSort = 1,
+ ScanTime = $"{nowTime:yyyy-MM-dd HH:mm:ss}",
+ Type = "1",
+ Status = "1",
+ Remark = "新工单创建扫描箱标签",
+ CreatedBy = "后台系统",
+ CreatedTime = nowTime,
+ };
+ int res = Context.Insertable(newScanLabelRecord).ExecuteCommand();
+ if (res == 0)
+ {
+ Context.Ado.RollbackTran();
+ throw new Exception("插入标签记录异常");
+ }
+ QcBackEndLogWorkorder qcBackEndLog =
+ new()
+ {
+ Id = SnowFlakeSingle.Instance.NextId().ToString(),
+ Name = "工单开始",
+ Content = $"工单:{result.WorkOrder}开始,开始时间{nowTime:yyyy-MM-dd HH:mm:ss}",
+ Type = "100",
+ Status = "1",
+ Remark = "触摸屏操作记录",
+ CreatedBy = "系统",
+ CreatedTime = nowTime
+ };
+ Context.Insertable(qcBackEndLog).ExecuteCommand();
+ Context.Ado.CommitTran();
+ return result;
+ }
+ catch (Exception ex)
+ {
+ Context.Ado.RollbackTran();
+
+ throw new Exception(ex.Message);
+ }
+ }
+
+ // 创建新工单号
+ public QcBackEndWorkorderDetailDto GetNewWorkOrderCreate(QcBackEndWorkorderDetailDto data)
+ {
+ QcBackEndWorkorderDetailDto result = new();
+ string newWorkOrder = "";
+ DateTime today = DateTime.Today;
+ // 检查是否是已扫过的外箱标签
+ QcBackEndServiceWorkorder lastWorkOrder = Context
+ .Queryable()
+ .Where(it => it.CreatedTime.Value.Date == today)
+ .OrderByDescending(it => it.SerialNumber)
+ .First();
+ if (lastWorkOrder != null)
+ {
+ // 递增序列号
+ int sequenceNumber = lastWorkOrder.SerialNumber + 1;
+ if (data.IsOnetime == 1)
+ {
+ newWorkOrder = $"W{today:yyyyMMdd}{sequenceNumber:D3}";
+ }
+ else if (data.IsPolish == 1)
+ {
+ newWorkOrder = $"P{today:yyyyMMdd}{sequenceNumber:D3}";
+ }
+ else
+ {
+ newWorkOrder = $"{today:yyyyMMdd}{sequenceNumber:D3}";
+ }
+ result.SerialNumber = sequenceNumber;
+ }
+ else
+ {
+ // 如果今天还没有创建过工单,则从 "001" 开始
+ if (data.IsOnetime == 1)
+ {
+ newWorkOrder = $"W{today:yyyyMMdd}001";
+ }
+ else if (data.IsPolish == 1)
+ {
+ newWorkOrder = $"P{today:yyyyMMdd}001";
+ }
+ else
+ {
+ newWorkOrder = $"{today:yyyyMMdd}001";
+ }
+ result.SerialNumber = 1;
+ }
+ result.WorkOrder = newWorkOrder;
+ return result;
+ }
+
+ public static QcBackEndServiceWorkorder GetNewWorkOrderInfo(QcBackEndWorkorderDetailDto data)
+ {
+ // 新工单
+
+ QcBackEndServiceWorkorder model =
+ new()
+ {
+ Id = SnowFlakeSingle.Instance.NextId().ToString(),
+ WorkOrder = data.WorkOrder,
+ SerialNumber = data.SerialNumber,
+ PartNumber = data.PartNumber,
+ Specification = data.Specification,
+ Color = data.Color,
+ Description = data.Description,
+ Team = data.Team,
+ SiteNo = data.SiteNo,
+ ComNo = data.ComNo,
+ IsOnetime = data.IsOnetime,
+ IsPolish = data.IsPolish,
+ IsBack = data.IsBack,
+ IsOut = data.IsOut,
+ StartTime = data.StartTime,
+ EndTime = null,
+ Label = data.Label,
+ RequireNumber = 0,
+ QualifiedNumber = 0,
+ PolishNumber = 0,
+ DamoNumber = 0,
+ BaofeiNumber = 0,
+ Type = "1",
+ Status = "1",
+ Remark = "系统新增工单",
+ CreatedBy = data.CreatedBy,
+ CreatedTime = data.CreatedTime,
+ UpdatedBy = data.UpdatedBy,
+ UpdatedTime = data.UpdatedTime
+ };
+ return model;
+ }
+
+ public QcBackEndServiceWorkorder ChangeWorkOrderDefect(QcBackEndWorkorderDefectDto data)
+ {
+ try
+ {
+ if(string.IsNullOrEmpty(data.DefectCode))
+ {
+ throw new Exception("缺陷项传入为空!");
+ }
+ Context.Ado.BeginTran();
+ DateTime nowTime = DateTime.Now;
+ // 获取缺陷信息
+ QcBackEndBaseDefect defect = Context
+ .Queryable()
+ .Where(it => it.Code == data.DefectCode && it.Status == "1")
+ .First();
+ if (defect == null)
+ {
+ throw new Exception("缺陷项不在缺陷清单中!");
+ }
+
+ // 工单信息修改
+ QcBackEndServiceWorkorder qcBackEndWorkorder = Context
+ .Queryable()
+ .Where(it => it.WorkOrder == data.WorkOrder)
+ .First();
+ if (qcBackEndWorkorder == null)
+ {
+ throw new Exception("工单不存在!");
+ }
+
+ // 获取当前工作单缺陷记录
+ QcBackEndRecordWorkorderDefect workOrderDefect = Context
+ .Queryable()
+ .Where(it => it.WorkOrder == data.WorkOrder && it.DefectCode == data.DefectCode)
+ .First();
+
+ if (data.Type == "1")
+ {
+ // Type === 1 短按新增
+ if (workOrderDefect != null)
+ {
+ // 数据库中有记录,DefectNum + 1
+ workOrderDefect.DefectNum += 1;
+ workOrderDefect.UpdatedTime = data.CreatedTime;
+ workOrderDefect.UpdatedBy = data.CreatedBy;
+ Context.Updateable(workOrderDefect).ExecuteCommand();
+ }
+ else
+ {
+ // 数据库中无记录,新增记录并设置 DefectNum = 1
+ workOrderDefect = new QcBackEndRecordWorkorderDefect
+ {
+ Id = SnowFlakeSingle.Instance.NextId().ToString(),
+ WorkOrder = data.WorkOrder,
+ PartNumber = qcBackEndWorkorder.PartNumber,
+ Team = qcBackEndWorkorder.Team,
+ SiteNo = qcBackEndWorkorder.SiteNo,
+ ComNo = qcBackEndWorkorder.ComNo,
+ DefectName = defect.Name,
+ DefectCode = data.DefectCode,
+ DefectType = defect.Type,
+ ClickTime = $"{nowTime:yyyy-MM-dd HH:mm:ss}",
+ Type = "1",
+ Status = "1",
+ Remark = "",
+ CreatedBy = data.CreatedBy,
+ CreatedTime = data.CreatedTime,
+ DefectNum = 1
+ };
+ Context.Insertable(workOrderDefect).ExecuteCommand();
+ }
+ }
+ else if (data.Type == "2")
+ {
+ // Type == 2 长按修改
+ if (workOrderDefect != null)
+ {
+ // 数据库中有记录,直接赋值
+ workOrderDefect.UpdatedTime = data.CreatedTime;
+ workOrderDefect.UpdatedBy = data.CreatedBy;
+ workOrderDefect.DefectNum = data.DefectNum; // 假设 data.DefectNum 存在
+ Context.Updateable(workOrderDefect).ExecuteCommand();
+ }
+ else
+ {
+ // 数据库中无记录,新增记录
+ workOrderDefect = new QcBackEndRecordWorkorderDefect
+ {
+ Id = SnowFlakeSingle.Instance.NextId().ToString(),
+ WorkOrder = data.WorkOrder,
+ PartNumber = qcBackEndWorkorder.PartNumber,
+ Team = qcBackEndWorkorder.Team,
+ SiteNo = qcBackEndWorkorder.SiteNo,
+ ComNo = qcBackEndWorkorder.ComNo,
+ DefectName = defect.Name,
+ DefectCode = data.DefectCode,
+ DefectType = defect.Type,
+ ClickTime = $"{nowTime:yyyy-MM-dd HH:mm:ss}",
+ Type = "1",
+ Status = "1",
+ Remark = "",
+ CreatedBy = data.CreatedBy,
+ CreatedTime = data.CreatedTime,
+ DefectNum = data.DefectNum // 假设 data.DefectNum 存在
+ };
+ Context.Insertable(workOrderDefect).ExecuteCommand();
+ }
+ }
+ UpdateWorkOrderDetail(data.WorkOrder);
+ // 提交事务
+ Context.Ado.CommitTran();
+ return qcBackEndWorkorder;
+ }
+ catch (Exception ex)
+ {
+ // 回滚事务
+ Context.Ado.RollbackTran();
+ throw new Exception("操作失败!", ex);
+ }
+ }
+
+ public List GetWorkOrderDefectList(string workorder)
+ {
+ return Context
+ .Queryable()
+ .Where(it => it.WorkOrder == workorder)
+ .ToList();
+ }
+
+ public QcBackEndServiceWorkorder UpdateWorkOrderDetail(string workorder)
+ {
+ QcBackEndServiceWorkorder qcBackEndWorkorder = Context
+ .Queryable()
+ .Where(it => it.WorkOrder == workorder)
+ // .Where(it=>it.Status == "1")
+ .First();
+ // 更新工单中的统计数据
+ qcBackEndWorkorder.QualifiedNumber = Context
+ .Queryable()
+ .Where(it => it.WorkOrder == workorder)
+ .Where(it => it.LabelType == 2)
+ .Count();
+
+ qcBackEndWorkorder.PolishNumber =
+ Context
+ .Queryable()
+ .Where(it => it.WorkOrder == workorder && it.DefectType == "抛光")
+ .Sum(it => it.DefectNum) ?? 0;
+
+ qcBackEndWorkorder.DamoNumber =
+ Context
+ .Queryable()
+ .Where(it => it.WorkOrder == workorder && it.DefectType == "打磨")
+ .Sum(it => it.DefectNum) ?? 0;
+
+ qcBackEndWorkorder.BaofeiNumber =
+ Context
+ .Queryable()
+ .Where(it => it.WorkOrder == workorder && it.DefectType == "报废")
+ .Sum(it => it.DefectNum) ?? 0;
+ qcBackEndWorkorder.RequireNumber =
+ qcBackEndWorkorder.PolishNumber
+ + qcBackEndWorkorder.DamoNumber
+ + qcBackEndWorkorder.BaofeiNumber
+ + (qcBackEndWorkorder.QualifiedNumber ?? 0);
+
+ // 更新工单统计信息到数据库
+ Context
+ .Updateable(qcBackEndWorkorder)
+ .UpdateColumns(it => new
+ {
+ it.RequireNumber,
+ it.QualifiedNumber,
+ it.PolishNumber,
+ it.DamoNumber,
+ it.BaofeiNumber
+ })
+ .ExecuteCommand();
+ return qcBackEndWorkorder;
+ }
+
+ public string ScanInnerLabel(QcBackEndLabelScanDto data)
+ {
+ DateTime nowTime = DateTime.Now;
+ // 标签防错 (内标签零件号)
+ string partNumber = DoAnalyzePartnumber(data.Label);
+ // 内标签包含外标签
+ if (!partNumber.Contains(data.PartNumber))
+ {
+ return "内标签零件号与工单零件号不一致!";
+ }
+ bool hasAny = Context
+ .Queryable()
+ .Where(it => it.Label == data.Label)
+ .Any();
+ if (hasAny)
+ {
+ return "重复扫码!";
+ }
+ // 标签录入
+ int sort = 0;
+ QcBackEndRecordLabelScan labelScan = Context
+ .Queryable()
+ .Where(it => it.WorkOrder == data.WorkOrder)
+ .Where(it => it.LabelType == 2)
+ .OrderByDescending(it => it.LabelSort)
+ .First();
+ if (labelScan != null)
+ {
+ sort = labelScan.LabelSort ?? 0;
+ }
+ QcBackEndRecordLabelScan newLabelScran =
+ new()
+ {
+ Id = SnowFlakeSingle.Instance.NextId().ToString(),
+ WorkOrder = data.WorkOrder,
+ PartNumber = data.PartNumber,
+ Team = data.Team,
+ SiteNo = data.SiteNo,
+ ComNo = data.ComNo,
+ Label = data.Label,
+ LabelType = 2,
+ LabelSort = sort + 1,
+ ScanTime = $"{nowTime:yyyy-MM-dd HH:mm:ss}",
+ Type = "1",
+ Status = "1",
+ Remark = "扫描标签",
+ CreatedBy = data.CreatedBy,
+ CreatedTime = data.CreatedTime,
+ };
+ int res = Context.Insertable(newLabelScran).ExecuteCommand();
+ if (res == 0)
+ {
+ return "标签录入系统失败!";
+ }
+ //TODO 触发箱标签判定
+ if(sort > 28 && (sort + 1) % 28 == 0)
+ {
+ /* int packageSort = 0;
+ QcBackEndRecordLabelScan packagelabelScan = Context
+ .Queryable()
+ .Where(it => it.WorkOrder == data.WorkOrder)
+ .Where(it => it.LabelType == 1)
+ .OrderByDescending(it => it.LabelSort)
+ .First();
+ if (labelScan != null)
+ {
+ packageSort = packagelabelScan.LabelSort ?? 0;
+ }
+ QcBackEndRecordLabelScan newPackagePrintLabel =
+ new()
+ {
+ Id = SnowFlakeSingle.Instance.NextId().ToString(),
+ WorkOrder = data.WorkOrder,
+ PartNumber = data.PartNumber,
+ Team = data.Team,
+ SiteNo = data.SiteNo,
+ ComNo = data.ComNo,
+ Label = data.Label,
+ LabelType = 1,
+ LabelSort = packageSort + 1,
+ ScanTime = $"{nowTime:yyyy-MM-dd HH:mm:ss}",
+ Type = "1",
+ Status = "1",
+ Remark = "自动出满箱标签",
+ CreatedBy = data.CreatedBy,
+ CreatedTime = data.CreatedTime,
+ };
+ int res2 = Context.Insertable(newPackagePrintLabel).ExecuteCommand();*/
+ }
+ return "ok";
+ }
+
+ public string EndBackEndWorkOrderAndCreateStatistics(string workorder)
+ {
+ try
+ {
+ Context.Ado.BeginTran();
+ DateTime nowTime = DateTime.Now;
+ // 工单信息修改
+ QcBackEndServiceWorkorder qcBackEndWorkorder = Context
+ .Queryable()
+ .Where(it => it.WorkOrder == workorder)
+ .First();
+ if (qcBackEndWorkorder == null)
+ {
+ throw new Exception("工单不存在!");
+ }
+ qcBackEndWorkorder.EndTime = nowTime;
+ qcBackEndWorkorder.Type = "2";
+ if (!qcBackEndWorkorder.Remark.Contains("已生成过报表"))
+ {
+ qcBackEndWorkorder.Remark += "已生成过报表";
+ }
+ Context.Updateable(qcBackEndWorkorder).ExecuteCommand();
+ // 生成报表记录
+ List addList = new();
+ string groupCode = SnowFlakeSingle.Instance.NextId().ToString();
+ addList.Add(CreateNewStatistics(qcBackEndWorkorder, groupCode, 1));
+ addList.Add(CreateNewStatistics(qcBackEndWorkorder, groupCode, 2));
+ addList.Add(CreateNewStatistics(qcBackEndWorkorder, groupCode, 3));
+ Context
+ .Deleteable()
+ .Where(it => it.WorkOrder == workorder)
+ .ExecuteCommand();
+ Context.Insertable(addList).ExecuteCommand();
+
+ QcBackEndLogWorkorder qcBackEndLog =
+ new()
+ {
+ Id = SnowFlakeSingle.Instance.NextId().ToString(),
+ Name = "工单结束",
+ Content = $"工单:{workorder}结束,结束时间{nowTime:yyyy-MM-dd HH:mm:ss}",
+ Type = "200",
+ Status = "1",
+ Remark = "触摸屏操作记录",
+ CreatedBy = "系统",
+ CreatedTime = nowTime
+ };
+ Context.Insertable(qcBackEndLog).ExecuteCommand();
+ // 提交事务
+ Context.Ado.CommitTran();
+ return "ok";
+ }
+ catch (Exception ex)
+ {
+ // 回滚事务
+ Context.Ado.RollbackTran();
+ return ex.Message;
+ }
+ }
+
+ public QcBackEndServiceStatistics CreateNewStatistics(
+ QcBackEndServiceWorkorder data,
+ string groupCode,
+ int groupSort
+ )
+ {
+ List defectList = Context
+ .Queryable()
+ .Where(it => it.WorkOrder == data.WorkOrder)
+ .WhereIF(groupSort == 1, it => it.DefectType == "抛光")
+ .WhereIF(groupSort == 2, it => it.DefectType == "打磨")
+ .WhereIF(groupSort == 3, it => it.DefectType == "报废")
+ .ToList();
+ string JsonString = JsonSerializer.Serialize(defectList);
+ // 计算合格率
+ string qualifiedRate = CalculateQualifiedRate(data);
+ DateTime nowTime = DateTime.Now;
+ QcBackEndServiceStatistics workorderStatistics =
+ new()
+ {
+ Id = SnowFlakeSingle.Instance.NextId().ToString(),
+ WorkOrder = data.WorkOrder,
+ PartNumber = data.PartNumber,
+ Specification = data.Specification,
+ Color = data.Color,
+ Description = data.Description,
+ Team = data.Team,
+ SiteNo = data.SiteNo,
+ ComNo = data.ComNo,
+ IsOnetime = data.IsOnetime,
+ IsPolish = data.IsPolish,
+ IsBack = data.IsBack,
+ IsOut = data.IsOut,
+ StartTime = data.StartTime,
+ EndTime = data.EndTime,
+ Label = data.Label,
+ RequireNumber = data.RequireNumber,
+ QualifiedNumber = data.QualifiedNumber,
+ QualifiedRate = qualifiedRate,
+ PolishNumber = data.PolishNumber,
+ DamoNumber = data.DamoNumber,
+ BaofeiNumber = data.BaofeiNumber,
+ GroupCode = groupCode,
+ GroupSort = groupSort,
+ GroupDefectJson = JsonString,
+ Type = "1",
+ Status = "1",
+ Remark = "结束工单系统新增质量报表",
+ CreatedBy = "后端",
+ CreatedTime = nowTime,
+ };
+ return workorderStatistics;
+ }
+
+ public static string CalculateQualifiedRate(QcBackEndServiceWorkorder data)
+ {
+ if (data == null || data.RequireNumber <= 0)
+ {
+ return "0%";
+ }
+
+ double qualifiedRate =
+ (double)data.QualifiedNumber.Value / data.RequireNumber.Value * 100;
+ return $"{qualifiedRate:F1}%";
+ }
+
+ public QcBackEndServiceWorkorder GenerateVirtualLabel(QcBackEndWorkorderDetailDto workorderDetail)
+ {
+ try
+ {
+ Context.Ado.BeginTran();
+
+ // 检查当前工单已扫码合格数
+ int qualifiedNumber = workorderDetail.QualifiedNumber ?? -1;
+ if (qualifiedNumber < 0)
+ {
+ throw new ArgumentException("传入合格数异常!", nameof(workorderDetail.QualifiedNumber));
+ }
+
+ int labelCount = GetLabelCountForWorkOrder(workorderDetail.WorkOrder);
+
+ if (labelCount < qualifiedNumber)
+ {
+ GenerateVirtualLabels(workorderDetail, qualifiedNumber - labelCount);
+ }
+ else if (labelCount > qualifiedNumber)
+ {
+ DeleteExcessLabels(workorderDetail.WorkOrder, labelCount - qualifiedNumber);
+ }
+
+ Context.Ado.CommitTran();
+ return UpdateWorkOrderDetail(workorderDetail.WorkOrder);
+ }
+ catch (Exception e)
+ {
+ Context.Ado.RollbackTran();
+ throw new Exception($"生成虚拟标签时出错: {e.Message}", e);
+ }
+ }
+
+ private int GetLabelCountForWorkOrder(string workOrder)
+ {
+ return Context.Queryable()
+ .Where(it => it.WorkOrder == workOrder && it.LabelType == 2)
+ .Count();
+ }
+
+ private void GenerateVirtualLabels(QcBackEndWorkorderDetailDto workOrderDetail, int countToGenerate)
+ {
+ List virtualLabels = new List();
+ int nextLabelNumber = GetNextLabelNumber(workOrderDetail.WorkOrder);
+
+ for (int i = 0; i < countToGenerate; i++)
+ {
+ string uniqueLabel = GenerateUniqueSequentialLabel(workOrderDetail.WorkOrder, nextLabelNumber++);
+ virtualLabels.Add(new QcBackEndRecordLabelScan
+ {
+ Id = SnowFlakeSingle.Instance.NextId().ToString(),
+ WorkOrder = workOrderDetail.WorkOrder,
+ PartNumber = workOrderDetail.PartNumber,
+ Team = workOrderDetail.Team,
+ SiteNo = workOrderDetail.SiteNo,
+ ComNo = workOrderDetail.ComNo,
+ ScanTime = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"),
+ Type = "2",
+ Status = "1",
+ Remark = "虚拟标签",
+ CreatedTime = DateTime.UtcNow,
+ CreatedBy = "系统",
+ LabelType = 2,
+ LabelSort = nextLabelNumber,
+ Label = uniqueLabel
+ });
+ }
+
+ Context.Insertable(virtualLabels).ExecuteCommand();
+ }
+
+ private void DeleteExcessLabels(string workOrder, int countToDelete)
+ {
+ var labelsToDelete = Context.Queryable()
+ .Where(it => it.WorkOrder == workOrder && it.LabelType == 2)
+ .OrderByDescending(it => it.LabelSort)
+ .Take(countToDelete)
+ .ToList();
+
+ Context.Deleteable(labelsToDelete).ExecuteCommand();
+ }
+
+ private int GetNextLabelNumber(string workOrder)
+ {
+ return Context.Queryable()
+ .Where(it => it.WorkOrder == workOrder && it.LabelType == 2)
+ .Max(it => it.LabelSort ?? 0);
+ }
+
+ private string GenerateUniqueSequentialLabel(string workOrder, int number)
+ {
+ const string prefix = "VIRT";
+ string baseLabel = $"{prefix}-{GenerateUniqueId()}-{number:D5}";
+ string uniqueLabel = baseLabel;
+ while (IsLabelExists(workOrder, uniqueLabel))
+ {
+ uniqueLabel = $"{baseLabel}-{GenerateUniqueId()}";
+ }
+
+ return uniqueLabel;
+ }
+
+ private bool IsLabelExists(string workOrder, string label)
+ {
+ return Context.Queryable()
+ .Any(it => it.WorkOrder == workOrder && it.LabelType == 2 && it.Label == label);
+ }
+
+ private string GenerateUniqueId()
+ {
+ return Guid.NewGuid().ToString("N").Substring(0, 10); // Generate a 10-character unique ID
+ }
+
+ }
+}
diff --git a/ZR.Service/mes/qc/backend/QcBackEndServiceStatisticsService.cs b/ZR.Service/mes/qc/backend/QcBackEndServiceStatisticsService.cs
new file mode 100644
index 00000000..70906a57
--- /dev/null
+++ b/ZR.Service/mes/qc/backend/QcBackEndServiceStatisticsService.cs
@@ -0,0 +1,221 @@
+using System;
+using System.Linq;
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using Newtonsoft.Json;
+using SqlSugar;
+using ZR.Model;
+using ZR.Model.Business;
+using ZR.Model.Dto;
+using ZR.Repository;
+using ZR.Service.Business.IBusinessService;
+
+namespace ZR.Service.Business
+{
+ ///
+ /// 质量BackEnd统计报表业务模块Service业务层处理
+ ///
+ [AppService(
+ ServiceType = typeof(IQcBackEndServiceStatisticsService),
+ ServiceLifetime = LifeTime.Transient
+ )]
+ public class QcBackEndServiceStatisticsService
+ : BaseService,
+ IQcBackEndServiceStatisticsService
+ {
+ ///
+ /// 查询质量BackEnd统计报表业务模块列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(QcBackEndServiceStatisticsQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public QcBackEndServiceStatistics GetInfo(string Id)
+ {
+ var response = Queryable().Where(x => x.Id == Id).First();
+
+ return response;
+ }
+
+ ///
+ /// 添加质量BackEnd统计报表业务模块
+ ///
+ ///
+ ///
+ public QcBackEndServiceStatistics AddQcBackEndServiceStatistics(QcBackEndServiceStatistics model)
+ {
+ return Context.Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改质量BackEnd统计报表业务模块
+ ///
+ ///
+ ///
+ public int UpdateQcBackEndServiceStatistics(QcBackEndServiceStatistics model)
+ {
+ //var response = Update(w => w.Id == model.Id, it => new QcBackEndServiceStatistics()
+ //{
+ // WorkOrder = model.WorkOrder,
+ // PartNumber = model.PartNumber,
+ // Description = model.Description,
+ // Specification = model.Specification,
+ // Color = model.Color,
+ // Team = model.Team,
+ // SiteNo = model.SiteNo,
+ // ComNo = model.ComNo,
+ // IsOnetime = model.IsOnetime,
+ // IsBack = model.IsBack,
+ // IsPolish = model.IsPolish,
+ // IsOut = model.IsOut,
+ // StartTime = model.StartTime,
+ // EndTime = model.EndTime,
+ // Label = model.Label,
+ // RequireNumber = model.RequireNumber,
+ // QualifiedNumber = model.QualifiedNumber,
+ // QualifiedRate = model.QualifiedRate,
+ // DamoNumber = model.DamoNumber,
+ // BaofeiNumber = model.BaofeiNumber,
+ // GroupCode = model.GroupCode,
+ // GroupSort = model.GroupSort,
+ // GroupDefectJson = model.GroupDefectJson,
+ // Type = model.Type,
+ // Status = model.Status,
+ // Remark = model.Remark,
+ // CreatedBy = model.CreatedBy,
+ // CreatedTime = model.CreatedTime,
+ // UpdatedBy = model.UpdatedBy,
+ // UpdatedTime = model.UpdatedTime,
+ //});
+ //return response;
+ return Update(model, true);
+ }
+
+ public List GetReviseList(QcBackEndServiceStatisticsQueryDto 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 QcBackEndServiceStatisticsDto
+ {
+ 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)
+ {
+ // 取得第一个和最后一个字符
+ string code = defect.DefectCode;
+ char firstChar = code[0];
+ char lastChar = code[code.Length - 1];
+ // 组合第一个和最后一个字符
+ string propertyName = $"{firstChar}{lastChar}";
+ dto.AddDynamicProperty(propertyName, defect.DefectNum);
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Error parsing GroupDefectJson: {ex.Message}");
+ }
+ }
+ resultList.Add(dto);
+ }
+
+ return resultList;
+ }
+ }
+}
diff --git a/ZR.Service/mes/qc/backend/QcBackEndServiceWorkorderService.cs b/ZR.Service/mes/qc/backend/QcBackEndServiceWorkorderService.cs
new file mode 100644
index 00000000..83f44ea6
--- /dev/null
+++ b/ZR.Service/mes/qc/backend/QcBackEndServiceWorkorderService.cs
@@ -0,0 +1,102 @@
+using System;
+using SqlSugar;
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Business;
+using ZR.Repository;
+using ZR.Service.Business.IBusinessService;
+using System.Linq;
+
+namespace ZR.Service.Business
+{
+ ///
+ /// 质量BackEnd工单业务模块Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(IQcBackEndServiceWorkorderService), ServiceLifetime = LifeTime.Transient)]
+ public class QcBackEndServiceWorkorderService : BaseService, IQcBackEndServiceWorkorderService
+ {
+ ///
+ /// 查询质量BackEnd工单业务模块列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(QcBackEndServiceWorkorderQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public QcBackEndServiceWorkorder GetInfo(string Id)
+ {
+ var response = Queryable()
+ .Where(x => x.Id == Id)
+ .First();
+
+ return response;
+ }
+
+ ///
+ /// 添加质量BackEnd工单业务模块
+ ///
+ ///
+ ///
+ public QcBackEndServiceWorkorder AddQcBackEndServiceWorkorder(QcBackEndServiceWorkorder model)
+ {
+ return Context.Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改质量BackEnd工单业务模块
+ ///
+ ///
+ ///
+ public int UpdateQcBackEndServiceWorkorder(QcBackEndServiceWorkorder model)
+ {
+ //var response = Update(w => w.Id == model.Id, it => new QcBackEndServiceWorkorder()
+ //{
+ // WorkOrder = model.WorkOrder,
+ // PartNumber = model.PartNumber,
+ // Description = model.Description,
+ // Specification = model.Specification,
+ // Color = model.Color,
+ // Team = model.Team,
+ // SiteNo = model.SiteNo,
+ // ComNo = model.ComNo,
+ // IsOnetime = model.IsOnetime,
+ // IsBack = model.IsBack,
+ // IsPolish = model.IsPolish,
+ // IsOut = model.IsOut,
+ // StartTime = model.StartTime,
+ // EndTime = model.EndTime,
+ // Label = model.Label,
+ // RequireNumber = model.RequireNumber,
+ // QualifiedNumber = model.QualifiedNumber,
+ // DamoNumber = model.DamoNumber,
+ // BaofeiNumber = model.BaofeiNumber,
+ // Type = model.Type,
+ // Status = model.Status,
+ // Remark = model.Remark,
+ // CreatedBy = model.CreatedBy,
+ // CreatedTime = model.CreatedTime,
+ // UpdatedBy = model.UpdatedBy,
+ // UpdatedTime = model.UpdatedTime,
+ //});
+ //return response;
+ return Update(model, true);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/mes/qc/backend/QcBackendBaseOutpackageService.cs b/ZR.Service/mes/qc/backend/QcBackendBaseOutpackageService.cs
new file mode 100644
index 00000000..1ac9da5a
--- /dev/null
+++ b/ZR.Service/mes/qc/backend/QcBackendBaseOutpackageService.cs
@@ -0,0 +1,83 @@
+using System;
+using System.Linq;
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using SqlSugar;
+using ZR.Model;
+using ZR.Model.Business;
+using ZR.Model.Dto;
+using ZR.Repository;
+using ZR.Service.Business.IBusinessService;
+
+namespace ZR.Service.Business
+{
+ ///
+ /// 质量后道外箱标签打印配置
+ ///
+ [AppService(
+ ServiceType = typeof(IQcBackendBaseOutpackageService),
+ ServiceLifetime = LifeTime.Transient
+ )]
+ public class QcBackendBaseOutpackageService
+ : BaseService,
+ IQcBackendBaseOutpackageService
+ {
+ ///
+ /// 查询质量后道外箱标签打印配置
+ ///
+ ///
+ ///
+ public PagedInfo GetList(QcBackendBaseOutpackageQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public QcBackendBaseOutpackage GetInfo(int Id)
+ {
+ var response = Queryable().Where(x => x.Id == Id).First();
+
+ return response;
+ }
+
+ ///
+ /// 添加质量后道外箱标签打印配置
+
+ ///
+ ///
+ ///
+ public QcBackendBaseOutpackage AddQcBackendBaseOutpackage(QcBackendBaseOutpackage model)
+ {
+ return Context.Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改质量后道外箱标签打印配置
+
+ ///
+ ///
+ ///
+ public int UpdateQcBackendBaseOutpackage(QcBackendBaseOutpackage model)
+ {
+ //var response = Update(w => w.Id == model.Id, it => new QcBackendBaseOutpackage()
+ //{
+ // Name = model.Name,
+ // FileUrl = model.FileUrl,
+ // PackageNum = model.PackageNum,
+ // CheckStr = model.CheckStr,
+ //});
+ //return response;
+ return Update(model, true);
+ }
+ }
+}
diff --git a/ZR.Service/mes/qc/QcGp12BaseDefectService.cs b/ZR.Service/mes/qc/gp12/QcGp12BaseDefectService.cs
similarity index 100%
rename from ZR.Service/mes/qc/QcGp12BaseDefectService.cs
rename to ZR.Service/mes/qc/gp12/QcGp12BaseDefectService.cs
diff --git a/ZR.Service/mes/qc/QcGp12BaseGroupService.cs b/ZR.Service/mes/qc/gp12/QcGp12BaseGroupService.cs
similarity index 100%
rename from ZR.Service/mes/qc/QcGp12BaseGroupService.cs
rename to ZR.Service/mes/qc/gp12/QcGp12BaseGroupService.cs
diff --git a/ZR.Service/mes/qc/QcGp12BaseLabelAnalysisService.cs b/ZR.Service/mes/qc/gp12/QcGp12BaseLabelAnalysisService.cs
similarity index 100%
rename from ZR.Service/mes/qc/QcGp12BaseLabelAnalysisService.cs
rename to ZR.Service/mes/qc/gp12/QcGp12BaseLabelAnalysisService.cs
diff --git a/ZR.Service/mes/qc/QcGp12BaseSiteService.cs b/ZR.Service/mes/qc/gp12/QcGp12BaseSiteService.cs
similarity index 100%
rename from ZR.Service/mes/qc/QcGp12BaseSiteService.cs
rename to ZR.Service/mes/qc/gp12/QcGp12BaseSiteService.cs
diff --git a/ZR.Service/mes/qc/QcGp12LogWorkorderService.cs b/ZR.Service/mes/qc/gp12/QcGp12LogWorkorderService.cs
similarity index 100%
rename from ZR.Service/mes/qc/QcGp12LogWorkorderService.cs
rename to ZR.Service/mes/qc/gp12/QcGp12LogWorkorderService.cs
diff --git a/ZR.Service/mes/qc/QcGp12RecordLabelScanService.cs b/ZR.Service/mes/qc/gp12/QcGp12RecordLabelScanService.cs
similarity index 100%
rename from ZR.Service/mes/qc/QcGp12RecordLabelScanService.cs
rename to ZR.Service/mes/qc/gp12/QcGp12RecordLabelScanService.cs
diff --git a/ZR.Service/mes/qc/QcGp12RecordWorkorderDefectService.cs b/ZR.Service/mes/qc/gp12/QcGp12RecordWorkorderDefectService.cs
similarity index 100%
rename from ZR.Service/mes/qc/QcGp12RecordWorkorderDefectService.cs
rename to ZR.Service/mes/qc/gp12/QcGp12RecordWorkorderDefectService.cs
diff --git a/ZR.Service/mes/qc/QcGp12Service.cs b/ZR.Service/mes/qc/gp12/QcGp12Service.cs
similarity index 100%
rename from ZR.Service/mes/qc/QcGp12Service.cs
rename to ZR.Service/mes/qc/gp12/QcGp12Service.cs
diff --git a/ZR.Service/mes/qc/QcGp12ServiceStatisticsService.cs b/ZR.Service/mes/qc/gp12/QcGp12ServiceStatisticsService.cs
similarity index 100%
rename from ZR.Service/mes/qc/QcGp12ServiceStatisticsService.cs
rename to ZR.Service/mes/qc/gp12/QcGp12ServiceStatisticsService.cs
diff --git a/ZR.Service/mes/qc/QcGp12ServiceWorkorderService.cs b/ZR.Service/mes/qc/gp12/QcGp12ServiceWorkorderService.cs
similarity index 100%
rename from ZR.Service/mes/qc/QcGp12ServiceWorkorderService.cs
rename to ZR.Service/mes/qc/gp12/QcGp12ServiceWorkorderService.cs