From 27e67dadf3412b6f449cdccddd12c7b619465b6d Mon Sep 17 00:00:00 2001
From: zhou keda <1315948824@qq.com>
Date: Thu, 22 Aug 2024 14:08:16 +0800
Subject: [PATCH] =?UTF-8?q?=E8=B4=A8=E9=87=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Consts/CodeTemplateConst.cs | 25 +
.../IBasWorkgroupService.cs | 26 ++
.../Tnb.BasicData/BasWorkgroupService.cs | 49 ++
.../Dto/PrdManage/CheckCompleteInput.cs | 29 ++
.../PackSechelToBeIssueListOutput.cs | 20 +
.../Dto/PrdManage/PrdMoTaskIssueListOutput.cs | 20 +
.../WorkOrderAdjustmentListOutput.cs | 20 +
.../Entity/PrdMoTask.cs | 32 +-
.../Entity/PrdReport.cs | 5 +
.../IPrdMoTaskService.cs | 6 +
.../PrdMaterialReceiptService.cs | 11 +-
.../PrdMoTaskIssueService.cs | 23 +-
.../Tnb.ProductionMgr/PrdMoTaskService.cs | 428 ++++++++++++------
QcMgr/Tnb.QcMgr.Entities/Dto/CheckTask.cs | 14 +
QcMgr/Tnb.QcMgr.Entities/Dto/Trigger.cs | 11 +
.../Tnb.QcMgr.Entities/Entity/QcCheckExecD.cs | 5 +-
.../Tnb.QcMgr.Entities/Entity/QcCheckExecH.cs | 36 ++
.../Enums/EnumTriggerType.cs | 8 +-
QcMgr/Tnb.QcMgr/QcCheckPlanService.cs | 37 +-
QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs | 5 +-
QcMgr/Tnb.QcMgr/QcCheckTaskService.cs | 103 ++++-
QcMgr/Tnb.QcMgr/Tnb.QcMgr.csproj | 1 +
.../Entity/WmsCarryH.cs | 4 +-
.../Enums/EnumCheckConclusion.cs | 6 +-
.../Mapper/Mapper.cs | 4 +-
.../Tnb.WarehouseMgr/WmsCarryLedgerService.cs | 4 +-
.../Tnb.WarehouseMgr/WmsCarryService.cs | 5 +-
.../WmsPurchaseAndSaleCommonService.cs | 3 +-
.../Tnb.Systems/System/OnlineUserService.cs | 2 +
29 files changed, 758 insertions(+), 184 deletions(-)
create mode 100644 BasicData/Tnb.BasicData.Interfaces/IBasWorkgroupService.cs
create mode 100644 BasicData/Tnb.BasicData/BasWorkgroupService.cs
create mode 100644 ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/CheckCompleteInput.cs
diff --git a/BasicData/Tnb.BasicData.Entities/Consts/CodeTemplateConst.cs b/BasicData/Tnb.BasicData.Entities/Consts/CodeTemplateConst.cs
index 84749afb..473334bb 100644
--- a/BasicData/Tnb.BasicData.Entities/Consts/CodeTemplateConst.cs
+++ b/BasicData/Tnb.BasicData.Entities/Consts/CodeTemplateConst.cs
@@ -54,6 +54,31 @@ namespace Tnb.BasicData
/// 料仓原料条码单
///
public const string PRDRAWMATERIALBARCODE_CODE = "PrdRawMaterialBarcode";
+
+ ///
+ /// 首检单号
+ ///
+ public const string SHOUJIAN_CODE = "shoujian";
+
+ ///
+ /// 巡检单号
+ ///
+ public const string XUNJIAN_CODE = "xunjian";
+
+ ///
+ /// 末检单号
+ ///
+ public const string MOJIAN_CODE = "mojian";
+
+ ///
+ /// 零部件最终检验单号
+ ///
+ public const string LINGBUJIANZUIZHONGJIANYAN_CODE = "lingbujianzuizhongjianyan";
+
+ ///
+ /// 成品检验单号
+ ///
+ public const string CHENGPINJIANYAN_CODE = "chengpinjianyan";
}
}
\ No newline at end of file
diff --git a/BasicData/Tnb.BasicData.Interfaces/IBasWorkgroupService.cs b/BasicData/Tnb.BasicData.Interfaces/IBasWorkgroupService.cs
new file mode 100644
index 00000000..546fd66c
--- /dev/null
+++ b/BasicData/Tnb.BasicData.Interfaces/IBasWorkgroupService.cs
@@ -0,0 +1,26 @@
+namespace Tnb.BasicData.Interfaces
+{
+ public interface IBasWorkgroupService
+ {
+ ///
+ /// 根据workGroupId获取员工ids
+ ///
+ ///
+ ///
+ public Task> GetEmployeeIds(string workGroupId);
+
+ // ///
+ // /// 根据获取同组员工的ids
+ // ///
+ // ///
+ // ///
+ // public Task> GetEmployeeIdsByUserId(string userId);
+
+ ///
+ /// 根据获取员工的班组ids
+ ///
+ ///
+ ///
+ public Task> GetWorkgroupIdsByUserId(string userId);
+ }
+}
\ No newline at end of file
diff --git a/BasicData/Tnb.BasicData/BasWorkgroupService.cs b/BasicData/Tnb.BasicData/BasWorkgroupService.cs
new file mode 100644
index 00000000..491a31ca
--- /dev/null
+++ b/BasicData/Tnb.BasicData/BasWorkgroupService.cs
@@ -0,0 +1,49 @@
+using JNPF.Common.Core.Manager;
+using JNPF.DependencyInjection;
+using JNPF.DynamicApiController;
+using JNPF.Systems.Interfaces.System;
+using Microsoft.AspNetCore.Mvc;
+using SqlSugar;
+using Tnb.BasicData.Entities;
+using Tnb.BasicData.Interfaces;
+
+namespace Tnb.BasicData
+{
+ ///
+ /// 班组服务
+ ///
+ [ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 1102)]
+ [Route("api/[area]/[controller]/[action]")]
+ public class BasWorkgroupService : IBasWorkgroupService, IDynamicApiController, ITransient
+ {
+ private readonly ISqlSugarRepository _repository;
+ private readonly DataBaseManager _dbManager;
+ private readonly IDictionaryDataService _dictionaryDataService;
+
+ public BasWorkgroupService(
+ ISqlSugarRepository repository, DataBaseManager dbManager, IDictionaryDataService dictionaryDataService)
+ {
+ _repository = repository;
+ _dbManager = dbManager;
+ _dictionaryDataService = dictionaryDataService;
+ }
+
+ public async Task> GetEmployeeIds(string workGroupId)
+ {
+ return await _repository.AsSugarClient().Queryable()
+ .InnerJoin((a, b) => a.id == b.group_id)
+ .Where((a,b)=>a.id==workGroupId)
+ .Select((a, b) => b.employee_id)
+ .ToListAsync();
+ }
+
+ public async Task> GetWorkgroupIdsByUserId(string userId)
+ {
+ return await _repository.AsSugarClient().Queryable()
+ .InnerJoin((a, b) => a.group_id == b.id)
+ .Where((a,b)=>a.employee_id==userId)
+ .Select((a, b) => b.id)
+ .ToListAsync();
+ }
+ }
+}
\ No newline at end of file
diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/CheckCompleteInput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/CheckCompleteInput.cs
new file mode 100644
index 00000000..76dc45a5
--- /dev/null
+++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/CheckCompleteInput.cs
@@ -0,0 +1,29 @@
+namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
+{
+ public class CheckCompleteInput
+ {
+ ///
+ /// 提报id
+ ///
+ public string report_id { get; set; }
+ ///
+ /// 合格数
+ ///
+ public decimal pqty { get; set; }
+ ///
+ /// 不合格数
+ ///
+ public decimal rqty { get; set; }
+
+ ///
+ /// 质检结果
+ ///
+ public string check_result { get; set; }
+
+ ///
+ /// 视觉记录
+ ///
+ public List records { get; set; } = null;
+
+ }
+}
diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PackSechelToBeIssueListOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PackSechelToBeIssueListOutput.cs
index 1cce769e..a4c7475a 100644
--- a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PackSechelToBeIssueListOutput.cs
+++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PackSechelToBeIssueListOutput.cs
@@ -83,6 +83,26 @@
public string workstation_name { get; set; }
public string worker_name { get; set; }
+
+ ///
+ /// 白班人员id/白班前人员id/
+ ///
+ public string dayshift_worker_id { get; set; }
+
+ ///
+ /// 夜班人员id/夜班前人员id/
+ ///
+ public string nightshift_worker_id { get; set; }
+
+ ///
+ /// 白班后人员id/
+ ///
+ public string dayshiftafter_worker_id { get; set; }
+
+ ///
+ /// 夜班后人员id/
+ ///
+ public string nightshiftafter_worker_id { get; set; }
}
}
diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PrdMoTaskIssueListOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PrdMoTaskIssueListOutput.cs
index 3250ca4e..d7bd3437 100644
--- a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PrdMoTaskIssueListOutput.cs
+++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PrdMoTaskIssueListOutput.cs
@@ -13,5 +13,25 @@ namespace Tnb.ProductionMgr.Entities.Dto
public string create_time { get; set; }
public string workstation_id { get; set; }
public string worker_id { get; set; }
+
+ ///
+ /// 白班人员id/白班前人员id/
+ ///
+ public string dayshift_worker_id { get; set; }
+
+ ///
+ /// 夜班人员id/夜班前人员id/
+ ///
+ public string nightshift_worker_id { get; set; }
+
+ ///
+ /// 白班后人员id/
+ ///
+ public string dayshiftafter_worker_id { get; set; }
+
+ ///
+ /// 夜班后人员id/
+ ///
+ public string nightshiftafter_worker_id { get; set; }
}
}
\ No newline at end of file
diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/WorkOrderAdjustmentListOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/WorkOrderAdjustmentListOutput.cs
index ff06053e..ec8f2a0a 100644
--- a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/WorkOrderAdjustmentListOutput.cs
+++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/WorkOrderAdjustmentListOutput.cs
@@ -25,5 +25,25 @@ namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
public string create_time { get; set; }
public int? schedule_type { get; set; }
+
+ ///
+ /// 白班人员id/白班前人员id/
+ ///
+ public string dayshift_worker_id { get; set; }
+
+ ///
+ /// 夜班人员id/夜班前人员id/
+ ///
+ public string nightshift_worker_id { get; set; }
+
+ ///
+ /// 白班后人员id/
+ ///
+ public string dayshiftafter_worker_id { get; set; }
+
+ ///
+ /// 夜班后人员id/
+ ///
+ public string nightshiftafter_worker_id { get; set; }
}
}
\ No newline at end of file
diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMoTask.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMoTask.cs
index 4add2ad2..93b74557 100644
--- a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMoTask.cs
+++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMoTask.cs
@@ -207,8 +207,38 @@ public partial class PrdMoTask : BaseEntity
///
public string? pause_reason { get; set; }
///
- /// 分配员工id
+ /// 分配员工id 废弃
///
public string worker_id { get; set; }
+
+ ///
+ /// 是否已末检
+ ///
+ public int has_last_check { get; set; }
+
+ ///
+ /// 排班类型
+ ///
+ public string scheduling_class_type { get; set; }
+
+ ///
+ /// 白班人员id/白班前人员id
+ ///
+ public string dayshift_worker_id { get; set; }
+
+ ///
+ /// 夜班人员id/夜班前人员id
+ ///
+ public string nightshift_worker_id { get; set; }
+
+ ///
+ /// 白班后人员id
+ ///
+ public string dayshiftafter_worker_id { get; set; }
+
+ ///
+ /// 夜班后人员id
+ ///
+ public string nightshiftafter_worker_id { get; set; }
}
diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdReport.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdReport.cs
index bcba6563..3b411656 100644
--- a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdReport.cs
+++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdReport.cs
@@ -154,5 +154,10 @@ public partial class PrdReport : BaseEntity
/// 称重重量
///
public decimal weight { get; set; }
+
+ ///
+ /// 质检结果
+ ///
+ public string check_result { get; set; }
}
diff --git a/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdMoTaskService.cs b/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdMoTaskService.cs
index af11e706..29d1af13 100644
--- a/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdMoTaskService.cs
+++ b/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdMoTaskService.cs
@@ -53,5 +53,11 @@ namespace Tnb.ProductionMgr.Interfaces
Task PrdReport(PrdReportCrInput input);
+ ///
+ /// 提报的质检任务执行完成后
+ ///
+ ///
+ ///
+ Task ReportInstock(CheckCompleteInput input);
}
}
diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMaterialReceiptService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMaterialReceiptService.cs
index 3d793d74..d4d1f6b7 100644
--- a/ProductionMgr/Tnb.ProductionMgr/PrdMaterialReceiptService.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/PrdMaterialReceiptService.cs
@@ -28,6 +28,7 @@ using Tnb.WarehouseMgr.Entities.Dto;
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
using Tnb.WarehouseMgr.Interfaces;
using Tnb.WarehouseMgr.Entities.Dto.Outputs;
+using Tnb.BasicData.Interfaces;
namespace Tnb.ProductionMgr
{
@@ -46,6 +47,7 @@ namespace Tnb.ProductionMgr
private readonly IBillRullService _billRullService;
private readonly IPrdMoTaskService _prdMoTaskService;
private readonly IWmsCarryQueryService _wmsCarryQueryService;
+ private readonly IBasWorkgroupService _basWorkgroupService;
public PrdMaterialReceiptService(
ISqlSugarRepository repository,
@@ -53,6 +55,7 @@ namespace Tnb.ProductionMgr
IOrganizeService organizeService,
IPrdMoTaskService prdMoTaskService,
IWmsCarryQueryService wmsCarryQueryService,
+ IBasWorkgroupService basWorkgroupService,
IUserManager userManager
)
{
@@ -62,6 +65,7 @@ namespace Tnb.ProductionMgr
_billRullService = billRullService;
_prdMoTaskService = prdMoTaskService;
_wmsCarryQueryService = wmsCarryQueryService;
+ _basWorkgroupService = basWorkgroupService;
}
@@ -430,7 +434,12 @@ namespace Tnb.ProductionMgr
List insertHList = new List();
List insertDList = new List();
string orgId = WmsWareHouseConst.AdministratorOrgId;
- string userId = moTask.worker_id;
+ // string userId = moTask.worker_id;
+ string userId = WmsWareHouseConst.AdministratorUserId;
+ if (_userManager != null && !string.IsNullOrEmpty(_userManager.UserId))
+ {
+ userId = _userManager.UserId;
+ }
foreach(string carryId in input.carryIds)
{
WmsCarryH carry = await db.Queryable().SingleAsync(x => x.id == carryId);
diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskIssueService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskIssueService.cs
index 4987103d..ab426301 100644
--- a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskIssueService.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskIssueService.cs
@@ -105,11 +105,11 @@ namespace Tnb.ProductionMgr
.LeftJoin((a, b, c, d, e, f) => a.mo_id == f.id)
.LeftJoin((a, b, c, d, e, f, g) => g.id == a.eqp_id)
.LeftJoin((a, b, c, d, e, f, g,h)=>a.workstation_id==h.Id)
- .LeftJoin((a, b, c, d, e, f, g,h,i)=>a.worker_id==i.Id)
+ //.LeftJoin((a, b, c, d, e, f, g,h,i)=>a.worker_id==i.Id)
.WhereIF(!string.IsNullOrEmpty(moTaskCode), (a, b, c, d) => a.mo_task_code.Contains(moTaskCode))
.WhereIF(!string.IsNullOrEmpty(moTaskStatus), (a, b, c, d) => a.mo_task_status == moTaskStatus)
.Where((a, b, c, d, e, f) => a.schedule_type == 1)
- .Select((a, b, c, d, e, f, g,h,i) => new PrdMoTaskIssueListOutput
+ .Select((a, b, c, d, e, f, g,h) => new PrdMoTaskIssueListOutput
{
id = a.id,
mo_task_code = a.mo_task_code,
@@ -118,11 +118,28 @@ namespace Tnb.ProductionMgr
eqp_id = g.code + "/" + g.name,
mo_task_status = d.FullName,
workstation_id = h.FullName,
- worker_id = i.RealName,
+ // worker_id = i.RealName,
plan_qty = f.plan_qty,
scheduled_qty = a.scheduled_qty,
create_time = a.create_time == null ? "" : a.create_time.Value.ToString(DbTimeFormat.SS),
+ dayshift_worker_id = a.dayshift_worker_id,
+ dayshiftafter_worker_id = a.dayshiftafter_worker_id,
+ nightshift_worker_id = a.nightshift_worker_id,
+ nightshiftafter_worker_id = a.nightshiftafter_worker_id,
}).OrderByDescending(a => a.create_time).ToPagedListAsync(input.currentPage, input.pageSize);
+
+ List userIdList = result.list.Select(x => x.dayshift_worker_id).Distinct().ToList();
+ userIdList.AddRange(result.list.Select(x => x.dayshiftafter_worker_id).Distinct().ToList());
+ userIdList.AddRange(result.list.Select(x => x.nightshift_worker_id).Distinct().ToList());
+ userIdList.AddRange(result.list.Select(x => x.nightshiftafter_worker_id).Distinct().ToList());
+ List userEntities = await db.Queryable().Where(x=>userIdList.Contains(x.Id)).ToListAsync();
+ foreach (var item in result.list)
+ {
+ item.dayshift_worker_id = userEntities.Find(x=>x.Id==item.dayshift_worker_id)?.RealName ?? item.dayshift_worker_id;
+ item.dayshiftafter_worker_id = userEntities.Find(x=>x.Id==item.dayshiftafter_worker_id)?.RealName ?? item.dayshiftafter_worker_id;
+ item.nightshift_worker_id = userEntities.Find(x=>x.Id==item.nightshift_worker_id)?.RealName ?? item.nightshift_worker_id;
+ item.nightshiftafter_worker_id = userEntities.Find(x=>x.Id==item.nightshiftafter_worker_id)?.RealName ?? item.nightshiftafter_worker_id;
+ }
return PageResult.SqlSugarPageResult(result);
}
}
diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs
index 38d4470f..05219fcd 100644
--- a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs
@@ -49,6 +49,7 @@ using Tnb.WarehouseMgr.Interfaces;
using Tnb.WarehouseMgr;
using Tnb.WarehouseMgr.Entities.Enums;
using Tnb.ProductionMgr.Entities.Entity;
+using Tnb.ProductionMgr.Helpers;
// using Tnb.PerMgr.Entities;
@@ -444,9 +445,9 @@ namespace Tnb.ProductionMgr
.LeftJoin((a, b, c, d) => a.mo_id == d.id)
.LeftJoin((a, b, c, d, e) => a.process_id == e.id)
.LeftJoin((a, b,c,d,e,f) => a.workstation_id == f.Id)
- .LeftJoin((a, b,c,d,e,f,g)=>a.worker_id==g.Id)
+ // .LeftJoin((a, b,c,d,e,f,g)=>a.worker_id==g.Id)
.Where((a, b, c, d) => a.parent_id == mo_task_id)
- .Select((a, b, c, d, e,f,g) => new PackSechelToBeIssueListOutput
+ .Select((a, b, c, d, e,f) => new PackSechelToBeIssueListOutput
{
mo_task_id = a.id,
mo_task_code = a.mo_task_code,
@@ -456,7 +457,7 @@ namespace Tnb.ProductionMgr
workline_name = c.FullName,
mo_task_status = a.mo_task_status,
workstation_name = f.FullName,
- worker_name = g.RealName,
+ // worker_name = g.RealName,
scheduled_qty = a.scheduled_qty,
plan_qty = d.plan_qty,
process_task_qty = a.process_task_qty,
@@ -464,11 +465,28 @@ namespace Tnb.ProductionMgr
estimated_start_date = a.estimated_start_date == null ? null : a.estimated_start_date.Value.ToString(DbTimeFormat.MM),
estimated_end_date = a.estimated_end_date == null ? null : a.estimated_end_date.Value.ToString(DbTimeFormat.MM),
process_name = e.process_name,
- bom_version = SqlFunc.Subqueryable().Where(it => it.material_id == a.material_id).Select(it => it.version)
+ bom_version = SqlFunc.Subqueryable().Where(it => it.material_id == a.material_id).Select(it => it.version),
+ dayshift_worker_id = a.dayshift_worker_id,
+ dayshiftafter_worker_id = a.dayshiftafter_worker_id,
+ nightshift_worker_id = a.nightshift_worker_id,
+ nightshiftafter_worker_id = a.nightshiftafter_worker_id,
})
.Mapper(it => it.mo_task_status = dic.ContainsKey(it.mo_task_status) ? dic[it.mo_task_status].ToString()! : "")
.OrderBy(a => a.mo_task_code, OrderByType.Asc)
.ToListAsync();
+
+ List userIdList = result.Select(x => x.dayshift_worker_id).Distinct().ToList();
+ userIdList.AddRange(result.Select(x => x.dayshiftafter_worker_id).Distinct().ToList());
+ userIdList.AddRange(result.Select(x => x.nightshift_worker_id).Distinct().ToList());
+ userIdList.AddRange(result.Select(x => x.nightshiftafter_worker_id).Distinct().ToList());
+ List userEntities = await _db.Queryable().Where(x=>userIdList.Contains(x.Id)).ToListAsync();
+ foreach (var item in result)
+ {
+ item.dayshift_worker_id = userEntities.Find(x=>x.Id==item.dayshift_worker_id)?.RealName ?? item.dayshift_worker_id;
+ item.dayshiftafter_worker_id = userEntities.Find(x=>x.Id==item.dayshiftafter_worker_id)?.RealName ?? item.dayshiftafter_worker_id;
+ item.nightshift_worker_id = userEntities.Find(x=>x.Id==item.nightshift_worker_id)?.RealName ?? item.nightshift_worker_id;
+ item.nightshiftafter_worker_id = userEntities.Find(x=>x.Id==item.nightshiftafter_worker_id)?.RealName ?? item.nightshiftafter_worker_id;
+ }
return result;
}
// ///
@@ -1157,16 +1175,34 @@ namespace Tnb.ProductionMgr
{
#region 质检模块
//质检
- if (prdTaskList.Where(p => p.mo_task_status == "Pause").Count() > 0 && status == "InProgress")
+ // if (prdTaskList.Where(p => p.mo_task_status == "Pause").Count() > 0 && status == "InProgress")
+ // {
+ // foreach (PrdMoTask? task in prdTaskList.Where(p => p.mo_task_status == "Pause").ToList())
+ // {
+ // TriggerPlanEntity entity = new()
+ // {
+ // materialid = task.material_id,
+ // processid = task.process_id,
+ // workid = task.workstation_id,
+ // triggerevent = EnumTriggerEvent.首件检生产任务暂停
+ // };
+ // await _qcCheckPlanService.CreateTask(entity);
+ // }
+ // }
+
+ if (prdTaskList.Where(p => p.mo_task_status == "Pause").Count() > 0 && behavior==PrdTaskBehavior.Start)
{
- foreach (PrdMoTask? task in prdTaskList.Where(p => p.mo_task_status == "Pause").ToList())
+ TimerPoolHelper.GetInstance().StartTimer(TimeCallback,prdTaskList.Where(p => p.mo_task_status == "Pause").ToList(),TimeSpan.FromHours(1),Timeout.InfiniteTimeSpan);
+ }else if (prdTaskList.Where(p => p.mo_task_status == "ToBeStarted").Count() > 0 && behavior == PrdTaskBehavior.Start)
+ {
+ foreach (PrdMoTask? task in prdTaskList.Where(p => p.mo_task_status == "ToBeStarted").ToList())
{
TriggerPlanEntity entity = new()
{
materialid = task.material_id,
processid = task.process_id,
workid = task.workstation_id,
- triggerevent = EnumTriggerEvent.首件检生产任务暂停
+ triggerevent = EnumTriggerEvent.开工首件检,
};
await _qcCheckPlanService.CreateTask(entity);
}
@@ -1506,6 +1542,34 @@ namespace Tnb.ProductionMgr
return "保存成功";
}
+
+ public async void TimeCallback(object args)
+ {
+ try
+ {
+ Dictionary dic = (Dictionary)args;
+ List prdTaskList = (List)(dic["value"]);
+ foreach (PrdMoTask? task in prdTaskList)
+ {
+ TriggerPlanEntity entity = new()
+ {
+ materialid = task.material_id,
+ processid = task.process_id,
+ workid = task.workstation_id,
+ triggerevent = EnumTriggerEvent.开工首件检,
+ mo_task_code = task.mo_task_code,
+ check_type = WmsWareHouseConst.FULLREVIEW_CODE
+ };
+ await _qcCheckPlanService.CreateTask(entity);
+ }
+
+ Console.WriteLine("质检任务生成成功");
+ }
+ catch (Exception e)
+ {
+ Log.Error("质检任务生成失败:"+e.Message,e);
+ }
+ }
///
/// 生产任务单修改
@@ -1556,55 +1620,6 @@ namespace Tnb.ProductionMgr
return row > 0;
}
- // ///
- // /// 生产提报
- // ///
- // ///
- // ///
- // /// input:
- // ///
{
- // ///
icmo_id:生产任务ID
- // ///
icmo_code:任务单号
- // ///
prd_qty:生产数量
- // ///
reported_work_qty:已报工数量
- // ///
reported_qty:提报数量
- // ///
icmo_qty:生产任务量
- // ///
}
- // ///
- // [HttpPost]
- // public async Task PrdReport(PrdReportCrInput input)
- // {
- // var row = -1;
- // var db = _repository.AsSugarClient();
- // var report = await db.Queryable().FirstAsync(it => it.mo_task_id == input.mo_task_id);
- //
- // //if (report is not null)
- // //{
- // // report.mo_task_code = input.mo_task_code;
- // // report.mo_task_id = input.mo_task_id;
- // // report.reported_work_qty += input.reported_qty;
- // // report.prd_qty += input.reported_qty;
- // //}
- // //else
- // {
- // report = input.Adapt();
- // report.id = SnowflakeIdHelper.NextId();
- // report.reported_qty = input.reported_qty;
- // report.create_id = _userManager.UserId;
- // report.create_time = DateTime.Now;
- //
- // }
- // row = await db.Insertable(report).ExecuteCommandAsync();
- // var master = await db.Queryable().FirstAsync(it => it.mo_task_id == input.mo_task_id);
- // if (master != null)
- // {
- // master.reported_work_qty += input.reported_qty;
- // master.completed_qty += input.reported_qty;
- // await db.Updateable(master).ExecuteCommandAsync();
- // }
- // return row > 0;
- // }
-
///
/// 生产提报
///
@@ -1691,6 +1706,27 @@ namespace Tnb.ProductionMgr
throw Oops.Bah("提报数量不能大于排产数量");
}
}
+
+ if ((prdMoTask.reported_work_qty ?? 0) + input.reported_qty > prdMoTask.scheduled_qty)
+ {
+ BasFactoryConfig config1 = await db.Queryable().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.IS_SURPASS);
+ if (config1?.value == "1")
+ {
+ BasFactoryConfig? config2 = await db.Queryable().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.IS_SURPASS_PERCENTAGE);
+ if (!string.IsNullOrEmpty(config2?.value))
+ {
+ if ((prdMoTask.reported_work_qty ?? 0) + input.reported_qty > prdMoTask.scheduled_qty * (100 + Convert.ToDecimal(config2?.value ?? "1")) / 100)
+ {
+ throw Oops.Bah($"提报数量不能大于{100 + Convert.ToDecimal(config2?.value ?? "0")}%排产数量");
+ }
+ }
+ }
+ else
+ {
+ throw Oops.Bah("提报数量不能大于排产数量");
+ }
+ }
+
// bool flag = (prdMoTask.reported_work_qty ?? 0) + (prdMoTask.scrap_qty ?? 0) + input.reported_qty == prdMoTask.scheduled_qty;
@@ -1775,6 +1811,30 @@ namespace Tnb.ProductionMgr
batch = $"{organizeEntity.EnCode.Substring(organizeEntity.EnCode.Length - 2, 2)}{DateTime.Now.ToString("yyMMdd")}";
}
+ if (prdMoTask.has_last_check == 0)
+ {
+ if ((prdMoTask.reported_work_qty ?? 0) + input.reported_qty >= prdMoTask.scheduled_qty * 90 / 100)
+ {
+ await _db.Updateable()
+ .SetColumns(x => x.has_last_check==1)
+ .Where(x => x.id == prdMoTask.id)
+ .ExecuteCommandAsync();
+
+ TriggerPlanEntity entity = new()
+ {
+ materialid = prdMoTask.material_id,
+ processid = prdMoTask.process_id,
+ workid = prdMoTask.workstation_id,
+ triggerevent = EnumTriggerEvent.末检质检方案,
+ mo_task_code = prdMoTask.mo_task_code,
+ carry_code = report.material_box_code,
+ report_id = report.id,
+ batch = report.batch,
+ };
+ await _qcCheckPlanService.CreateTask(entity);
+ }
+ }
+
// report.location_code = input.location_code;
report.create_id = _userManager?.UserId ?? WmsWareHouseConst.AdministratorUserId;
@@ -1791,6 +1851,7 @@ namespace Tnb.ProductionMgr
report.unit_id = prdMoTask.unit_id;
report.process_id = mbomProcess?.process_id ?? "";
+ row = await db.Insertable(report).ExecuteCommandAsync();
WmsCarryH wmsCarryH = await db.Queryable().SingleAsync((x => x.carry_code == materialBoxCode));
if (wmsCarryH == null)
@@ -1806,38 +1867,44 @@ namespace Tnb.ProductionMgr
throw Oops.Bah($"提报失败,载具异常");
}
-
+ bool isCheckFlag = !basMaterial.category_id.Contains("ZZCP");
#region 质检模块
//质检模块
- // if (wmsCarryH.is_check == 0)
- // {
- // TriggerPlanEntity entity = new()
- // {
- // materialid = prdMoTask.material_id,
- // processid = prdMoTask.process_id,
- // workid = prdMoTask.workstation_id
- // };
- // int? reported = prdMoTask.reported_work_qty == null ? 0 : prdMoTask.reported_work_qty;
- // int? scrap = prdMoTask.scrap_qty == null ? 0 : prdMoTask.scrap_qty;
- // entity.oldpronum = reported + scrap;
- // entity.newpronum = input.reported_qty;
- // // entity.triggerevent = EnumTriggerEvent.生产检定量;
- // entity.triggerevent = EnumTriggerEvent.零部件最终检验事件;
- // await _qcCheckPlanService.CreateTask(entity);
- // await _db.Ado.CommitTranAsync();
- // return "生成质检任务";
- // }else if (wmsCarryH.is_check==1)
- // {
- // return "检验中,请稍后提报";
- // }
- // else
- // {
- // row = await db.Insertable(report).ExecuteCommandAsync();
- // }
+ if (isCheckFlag && wmsCarryH.is_check == EnumCheckConclusion.待检.ParseToInt().ToString())
+ {
+ TriggerPlanEntity entity = new()
+ {
+ materialid = prdMoTask.material_id,
+ processid = prdMoTask.process_id,
+ workid = prdMoTask.workstation_id,
+ mo_task_code = prdMoTask.mo_task_code,
+ carry_code = report.material_box_code,
+ report_id = report.id,
+ batch = report.batch,
+ check_type = WmsWareHouseConst.FULLREVIEW_CODE
+ };
+ int? reported = prdMoTask.reported_work_qty == null ? 0 : prdMoTask.reported_work_qty;
+ int? scrap = prdMoTask.scrap_qty == null ? 0 : prdMoTask.scrap_qty;
+ entity.oldpronum = reported + scrap;
+ entity.newpronum = input.reported_qty;
+ // entity.triggerevent = EnumTriggerEvent.生产检定量;
+ entity.triggerevent = EnumTriggerEvent.零部件最终检验;
+ await _qcCheckPlanService.CreateTask(entity);
+
+ await _db.Updateable()
+ .SetColumns(x => x.is_check == EnumCheckConclusion.检验中.ParseToInt().ToString())
+ .Where(x => x.id == wmsCarryH.id)
+ .ExecuteCommandAsync();
+
+ isCheckFlag = true;
+
+ }else if (wmsCarryH.is_check==EnumCheckConclusion.检验中.ParseToInt().ToString())
+ {
+ return "检验中,请稍后提报";
+ }
- row = await db.Insertable(report).ExecuteCommandAsync();
#endregion
_ = prdMoTask.reported_work_qty == null
@@ -2028,9 +2095,58 @@ namespace Tnb.ProductionMgr
// }
// }
-
-
+ if(!isCheckFlag){
+ List prdVisionResultRecords = await _db.Queryable()
+ .Where(x => x.status == 0 && x.result.ToUpper()=="OK").OrderByDescending(x => x.create_time).Take(report.reported_qty.Value).ToListAsync();
+ List ids = prdVisionResultRecords.Select(x => x.id).ToList();
+
+ await db.Updateable().SetColumns(x => x.status == 1).Where(x => ids.Contains(x.id)).ExecuteCommandAsync();
+ await ReportInstock(new CheckCompleteInput()
+ {
+ report_id = report.id,
+ pqty = report.reported_qty.ParseToDecimal(),
+ rqty = 0,
+ records = prdVisionResultRecords,
+ });
+ }
+
+
+
+ await _db.Ado.CommitTranAsync();
+
+ }
+ catch (Exception ex)
+ {
+ Log.Error("提报失败", ex);
+ await _db.Ado.RollbackTranAsync();
+ throw Oops.Bah("提报失败:"+ex.Message);
+ }
+ finally{
+ prdreportSemaphore.Release();
+ }
+
+ return "提报成功";
+ }
+
+ public async Task ReportInstock(CheckCompleteInput input)
+ {
+ try
+ {
+ var db = _repository.AsSugarClient();
+ PrdReport report = await db.Queryable().FirstAsync(it => it.id==input.report_id);
+ PrdMoTask? prdMoTask = await db.Queryable().SingleAsync(x => x.id == report.mo_task_id);
+ EqpEquipment equip = await db.Queryable().SingleAsync(x => x.id == prdMoTask.eqp_id);
+ BasMaterial basMaterial = await db.Queryable().SingleAsync(x => x.id == prdMoTask.material_id);
+ WmsCarryH wmsCarryH = await db.Queryable().FirstAsync(x=>x.carry_code==report.material_box_code);
+ BasLocation location = await db.Queryable().FirstAsync(x=>x.location_code==report.location_code);
+ PrdMo prdMo = await db.Queryable().SingleAsync(x => x.id == prdMoTask.mo_id);
+
+ await db.Updateable()
+ .SetColumns(x => x.check_result == input.check_result)
+ .Where(x => x.id == input.report_id)
+ .ExecuteCommandAsync();
+
BindCarryCodeInput bindCarryCodeInput = new BindCarryCodeInput();
bindCarryCodeInput.carry_id = wmsCarryH.id;
@@ -2058,8 +2174,8 @@ namespace Tnb.ProductionMgr
wmsPrdInstockInput.material_name = basMaterial.name;
wmsPrdInstockInput.material_spec = basMaterial.material_specification;
wmsPrdInstockInput.planqty = prdMoTask.scheduled_qty.Value;
- wmsPrdInstockInput.pqty = input.reported_qty;
- wmsPrdInstockInput.rqty = 0;
+ wmsPrdInstockInput.pqty = input.pqty;
+ wmsPrdInstockInput.rqty = input.rqty;
wmsPrdInstockInput.type = prdMo.mo_type;
wmsPrdInstockInput.create_id = report.create_id;
wmsPrdInstockInput.prdInstockDs = new List();
@@ -2077,35 +2193,28 @@ namespace Tnb.ProductionMgr
wmsPrdInstockInput.prdInstockCodes.Add(new WmsPrdInstockCodeInput()
{
planqty = prdMoTask.scheduled_qty.Value,
- pqty = input.reported_qty,
- code_batch = batch,
+ pqty = input.pqty,
+ code_batch = report.batch,
code = report.barcode,
unit_id = prdMoTask.unit_id,
carry_id = wmsCarryH.id,
});
}
- else
- {
- List prdVisionResultRecords = await _db.Queryable()
- .Where(x => x.status == 0 && x.result.ToUpper()=="OK").OrderByDescending(x => x.create_time).Take(report.reported_qty.Value).ToListAsync();
- List ids = prdVisionResultRecords.Select(x => x.id).ToList();
-
- foreach (var record in prdVisionResultRecords)
+ if (input.records != null)
+ {
+ foreach (var record in input.records)
{
wmsPrdInstockInput.prdInstockCodes.Add(new WmsPrdInstockCodeInput()
{
planqty = prdMoTask.scheduled_qty.Value,
pqty = 1,
- code_batch = batch,
+ code_batch = report.batch,
code = record.info,
unit_id = prdMoTask.unit_id,
carry_id = wmsCarryH.id,
});
}
-
- await db.Updateable()
- .SetColumns(x => x.status == 1).Where(x => ids.Contains(x.id)).ExecuteCommandAsync();
}
@@ -2130,7 +2239,7 @@ namespace Tnb.ProductionMgr
erpExtendIds.Add(WmsWareHouseConst.AdministratorOrgId);
erpExtendIds.Add(report.material_id);
erpExtendIds.Add(report.unit_id);
-
+
List erpExtendFields = await _db.Queryable().Where(x=>erpExtendIds.Contains(x.table_id)).ToListAsync();
string erpCreateId = erpExtendFields.Find(x=>x.table_id==_userManager.UserId)?.user_id ?? "";
ErpExtendField erpOrg = erpExtendFields.Find(x => x.table_id == (WmsWareHouseConst.AdministratorOrgId));
@@ -2181,12 +2290,13 @@ namespace Tnb.ProductionMgr
erpRequestData.Add("AggWrDtl",erpRequestDataDetails);
requestData.Add(erpRequestData);
+ BasFactoryConfig config = await _db.Queryable().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.BIPURL);
ThirdWebapiRecord thirdWebapiRecord = new ThirdWebapiRecord();
thirdWebapiRecord.id = SnowflakeIdHelper.NextId();
thirdWebapiRecord.third_name = WmsWareHouseConst.BIP;
thirdWebapiRecord.name = "生产报告";
thirdWebapiRecord.method = "POST";
- thirdWebapiRecord.url = WmsWareHouseConst.BIP_DOMAIN+"uapws/rest/pwrnew/save";
+ thirdWebapiRecord.url = config.value+"uapws/rest/pwrnew/save";
thirdWebapiRecord.request_data = JsonConvert.SerializeObject(erpRequestData);
thirdWebapiRecord.create_time = DateTime.Now;
@@ -2256,51 +2366,15 @@ namespace Tnb.ProductionMgr
throw Oops.Bah(x2ServerResult.Msg);
}
}
-
-
- await _db.Ado.CommitTranAsync();
-
}
- catch (Exception ex)
+ catch (Exception e)
{
- Log.Error("提报失败", ex);
- await _db.Ado.RollbackTranAsync();
- throw Oops.Bah("提报失败:"+ex.Message);
+ Log.Error("提报入库任务下发失败", e);
+ throw Oops.Bah("提报入库任务下发失败:"+e.Message);
}
- finally{
- prdreportSemaphore.Release();
- }
-
- // DbResult result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
- // {
- //
- //
- //
- // });
- // if (result.IsSuccess)
- // {
- // if (!string.IsNullOrEmpty(basMaterial.category_id))
- // {
- // string[] arr = JsonConvert.DeserializeObject(basMaterial.category_id);
- // if (arr.Length > 0 && arr.Contains("DGJCJ"))//短管挤出件入库申请
- // {
- // // string resultMsg = await _prdInstockService.InstockTubeOne(report);
- // // return resultMsg == "true" ? (dynamic)true : throw Oops.Bah(resultMsg);
- // return true;
- // }
- //
- // if (arr.Length > 0 && arr.Contains("CGJCJ"))//短管挤出件入库申请
- // {
- // string resultMsg = await _prdInstockService.InstockTubeThree(report);
- // return resultMsg == "true" ? (dynamic)true : throw Oops.Bah(resultMsg);
- // }
- // }
- //
- //
- // }
+ return "入库任务下发成功";
- return "提报成功";
}
///
@@ -2652,14 +2726,14 @@ namespace Tnb.ProductionMgr
.LeftJoin((a, b, c, d, e, f) => a.mo_id == f.id)
.LeftJoin((a, b, c, d, e, f, g) => a.workline_id == g.Id)
.LeftJoin((a, b, c, d, e, f, g, h) => a.eqp_id == h.id)
- .LeftJoin((a, b, c, d, e, f, g, h,i)=>a.worker_id==i.Id)
+ // .LeftJoin((a, b, c, d, e, f, g, h,i)=>a.worker_id==i.Id)
.WhereIF(!string.IsNullOrEmpty(moTaskCode), (a, b, c, d) => a.mo_task_code.Contains(moTaskCode))
.WhereIF(!string.IsNullOrEmpty(eqpId) && equipIds.Count <= 0 && worklineIds.Count <= 0,
(a, b, c, d) => a.workline_id == eqpId || a.eqp_id == eqpId)
.WhereIF(worklineIds.Count > 0, (a, b, c, d) => worklineIds.Contains(a.workline_id))
.WhereIF(equipIds.Count > 0, (a, b, c, d) => equipIds.Contains(a.eqp_id))
.Where((a) => a.mo_task_status == DictConst.ToBeStartedEnCode || a.mo_task_code == DictConst.ToBeScheduledEncode || a.mo_task_code == DictConst.MoStatusPauseCode)
- .Select((a, b, c, d, e, f, g, h,i) => new WorkOrderAdjustmentListOutput
+ .Select((a, b, c, d, e, f, g, h) => new WorkOrderAdjustmentListOutput
{
id = a.id,
mo_task_code = a.mo_task_code,
@@ -2679,8 +2753,25 @@ namespace Tnb.ProductionMgr
eqp_id_id = a.eqp_id,
create_time = a.create_time == null ? "" : a.create_time.Value.ToString(DbTimeFormat.SS),
schedule_type = a.schedule_type,
- worker_id = i.RealName
+ // worker_id = i.RealName
+ dayshift_worker_id = a.dayshift_worker_id,
+ dayshiftafter_worker_id = a.dayshiftafter_worker_id,
+ nightshift_worker_id = a.nightshift_worker_id,
+ nightshiftafter_worker_id = a.nightshiftafter_worker_id,
}).OrderByDescending(a => a.create_time).ToPagedListAsync(input.currentPage, input.pageSize);
+
+ List userIdList = result.list.Select(x => x.dayshift_worker_id).Distinct().ToList();
+ userIdList.AddRange(result.list.Select(x => x.dayshiftafter_worker_id).Distinct().ToList());
+ userIdList.AddRange(result.list.Select(x => x.nightshift_worker_id).Distinct().ToList());
+ userIdList.AddRange(result.list.Select(x => x.nightshiftafter_worker_id).Distinct().ToList());
+ List userEntities = await db.Queryable().Where(x=>userIdList.Contains(x.Id)).ToListAsync();
+ foreach (var item in result.list)
+ {
+ item.dayshift_worker_id = userEntities.Find(x=>x.Id==item.dayshift_worker_id)?.RealName ?? item.dayshift_worker_id;
+ item.dayshiftafter_worker_id = userEntities.Find(x=>x.Id==item.dayshiftafter_worker_id)?.RealName ?? item.dayshiftafter_worker_id;
+ item.nightshift_worker_id = userEntities.Find(x=>x.Id==item.nightshift_worker_id)?.RealName ?? item.nightshift_worker_id;
+ item.nightshiftafter_worker_id = userEntities.Find(x=>x.Id==item.nightshiftafter_worker_id)?.RealName ?? item.nightshiftafter_worker_id;
+ }
return PageResult.SqlSugarPageResult(result);
}
@@ -3654,13 +3745,56 @@ namespace Tnb.ProductionMgr
{
string ids = input.GetOrDefault("ids");
string[] idList = ids.Split(",");
- string workerId = input.GetOrDefault("worker_id");
+ // string workerId = input.GetOrDefault("worker_id");
+ string dayshiftWorkerId = input.GetOrDefault("dayshift_worker_id");
+ string nightshiftWorkerId = input.GetOrDefault("nightshift_worker_id");
+ string dayshiftafterWorkerId = input.GetOrDefault("dayshiftafter_worker_id");
+ string nightshiftafterWorkerId = input.GetOrDefault("nightshiftafter_worker_id");
int row = await _db.Updateable()
- .SetColumns(x => x.worker_id == workerId)
+ .SetColumns(x => x.dayshift_worker_id == dayshiftWorkerId)
+ .SetColumns(x => x.nightshift_worker_id == nightshiftWorkerId)
+ .SetColumns(x => x.dayshiftafter_worker_id == dayshiftafterWorkerId)
+ .SetColumns(x => x.nightshiftafter_worker_id == nightshiftafterWorkerId)
.Where(x => idList.Contains(x.id))
.ExecuteCommandAsync();
return row>0 ? "分配成功" : "分配失败";
}
+
+ ///
+ /// 末检
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task LastCheck(Dictionary input)
+ {
+ string moTaskId = input.GetOrDefault("mo_task_id");
+ PrdMoTask task = await _db.Queryable().SingleAsync(x => x.id == moTaskId);
+ if (task.has_last_check == 1)
+ {
+ throw Oops.Bah("已经生成过质检任务");
+ }
+ DbResult result = await _db.Ado.UseTranAsync(async () =>
+ {
+ await _db.Updateable()
+ .SetColumns(x => x.has_last_check==1)
+ .Where(x => x.id == moTaskId)
+ .ExecuteCommandAsync();
+
+ TriggerPlanEntity entity = new()
+ {
+ materialid = task.material_id,
+ processid = task.process_id,
+ workid = task.workstation_id,
+ triggerevent = EnumTriggerEvent.末检质检方案,
+ mo_task_code = task.mo_task_code,
+ };
+
+ await _qcCheckPlanService.CreateTask(entity);
+ });
+ return !result.IsSuccess ? throw Oops.Oh(ErrorCode.COM1008) : (dynamic)(result.IsSuccess ? "操作成功" : result.ErrorMessage);
+
+ }
}
diff --git a/QcMgr/Tnb.QcMgr.Entities/Dto/CheckTask.cs b/QcMgr/Tnb.QcMgr.Entities/Dto/CheckTask.cs
index e575ead8..6b6e8083 100644
--- a/QcMgr/Tnb.QcMgr.Entities/Dto/CheckTask.cs
+++ b/QcMgr/Tnb.QcMgr.Entities/Dto/CheckTask.cs
@@ -14,6 +14,11 @@
public string? tasktime { get; set; }
public string? exectime { get; set; }
public string? execuser { get; set; }
+
+ public string mo_task_code { get; set; }
+ public string batch { get; set; }
+ public int? qty { get; set; }
+ public string bill_code { get; set; }
}
public class CheckTaskOut
@@ -23,6 +28,15 @@
public string? workname { get; set; }
public string? wareid { get; set; }
public string? status { get; set; }
+ public string mo_task_code { get; set; }
+ public string material_id { get; set; }
+ public string material_code { get; set; }
+ public string material_name { get; set; }
+ public int checknum { get; set; }
+
+ public string worker_name { get; set; }
+ public string bill_code { get; set; }
+ public string carry_code { get; set; }
public List? checktypes { get; set; }
}
public class CheckExecTypeOut
diff --git a/QcMgr/Tnb.QcMgr.Entities/Dto/Trigger.cs b/QcMgr/Tnb.QcMgr.Entities/Dto/Trigger.cs
index 1ac31664..e10f7bc4 100644
--- a/QcMgr/Tnb.QcMgr.Entities/Dto/Trigger.cs
+++ b/QcMgr/Tnb.QcMgr.Entities/Dto/Trigger.cs
@@ -44,6 +44,17 @@ namespace Tnb.QcMgr.Entities
/// 生产次数
///
public int? pronum { get; set; }
+
+ public string mo_task_code { get; set; }
+
+ public string carry_code { get; set; }
+
+ ///
+ /// 提报记录id
+ ///
+ public string report_id { get; set; }
+ public string check_type { get; set; }
+ public string batch { get; set; }
}
diff --git a/QcMgr/Tnb.QcMgr.Entities/Entity/QcCheckExecD.cs b/QcMgr/Tnb.QcMgr.Entities/Entity/QcCheckExecD.cs
index b15ec47c..f7d4309d 100644
--- a/QcMgr/Tnb.QcMgr.Entities/Entity/QcCheckExecD.cs
+++ b/QcMgr/Tnb.QcMgr.Entities/Entity/QcCheckExecD.cs
@@ -106,7 +106,10 @@ namespace Tnb.QcMgr.Entities
///
public string? checkindex { get; set; }
-
+ ///
+ /// 不合格数量
+ ///
+ public int qty { get; set; }
}
diff --git a/QcMgr/Tnb.QcMgr.Entities/Entity/QcCheckExecH.cs b/QcMgr/Tnb.QcMgr.Entities/Entity/QcCheckExecH.cs
index 6b40831b..d68799c3 100644
--- a/QcMgr/Tnb.QcMgr.Entities/Entity/QcCheckExecH.cs
+++ b/QcMgr/Tnb.QcMgr.Entities/Entity/QcCheckExecH.cs
@@ -43,6 +43,11 @@ namespace Tnb.QcMgr.Entities
/// 抽样数
///
public string? checknum { get; set; }
+
+ ///
+ /// 合格数
+ ///
+ public int? qty { get; set; }
///
/// 状态
@@ -93,5 +98,36 @@ namespace Tnb.QcMgr.Entities
/// 修改时间
///
public DateTime? modify_time { get; set; }
+
+ ///
+ /// 单据编号
+ ///
+ public string bill_code { get; set; }
+
+ ///
+ /// 生产任务单编号
+ ///
+ public string mo_task_code { get; set; }
+
+ ///
+ /// 载具编号
+ ///
+ public string carry_code { get; set; }
+
+ ///
+ /// 提报记录id
+ ///
+ public string report_id { get; set; }
+
+ ///
+ /// 抽样方式
+ ///
+ public string check_type { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string remark { get; set; }
+ public string batch { get; set; }
}
}
diff --git a/QcMgr/Tnb.QcMgr.Entities/Enums/EnumTriggerType.cs b/QcMgr/Tnb.QcMgr.Entities/Enums/EnumTriggerType.cs
index 103670f4..38e6964b 100644
--- a/QcMgr/Tnb.QcMgr.Entities/Enums/EnumTriggerType.cs
+++ b/QcMgr/Tnb.QcMgr.Entities/Enums/EnumTriggerType.cs
@@ -36,8 +36,12 @@ namespace Tnb.QcMgr.Entities.Enums
生产检固定次数 = 12,
[Remark("生产检", "按流转卡")]
生产检按流转卡 = 13,
- [Remark("零部件最终检验", "零部件最终检验事件")]
- 零部件最终检验事件 = 14
+ [Remark("零部件最终检验", "零部件最终检验")]
+ 零部件最终检验 = 14,
+ [Remark("首检", "开工检")]
+ 开工首件检 = 15,
+ [Remark("末检", "末检触发事件")]
+ 末检质检方案 = 16
}
public class RemarkAttribute : Attribute
{
diff --git a/QcMgr/Tnb.QcMgr/QcCheckPlanService.cs b/QcMgr/Tnb.QcMgr/QcCheckPlanService.cs
index df2c6565..712ff6a7 100644
--- a/QcMgr/Tnb.QcMgr/QcCheckPlanService.cs
+++ b/QcMgr/Tnb.QcMgr/QcCheckPlanService.cs
@@ -6,6 +6,7 @@ using JNPF.DynamicApiController;
using JNPF.FriendlyException;
using JNPF.JsonSerialization;
using JNPF.Systems.Entitys.System;
+using JNPF.Systems.Interfaces.System;
using JNPF.TaskScheduler;
using JNPF.TaskScheduler.Entitys.Dto.TaskScheduler;
using JNPF.TaskScheduler.Entitys.Model;
@@ -16,6 +17,8 @@ using Tnb.QcMgr.Entities;
using Tnb.QcMgr.Entities.Entity;
using Tnb.QcMgr.Entities.Enums;
using Tnb.QcMgr.Interfaces;
+using Tnb.WarehouseMgr.Entities.Consts;
+using Tnb.BasicData;
namespace Tnb.QcMgr
{
@@ -31,11 +34,24 @@ namespace Tnb.QcMgr
private readonly ISqlSugarRepository _repository;
private readonly IUserManager _userManager;
private readonly TimeTaskService _timeTaskService;
+ private readonly IBillRullService _billRullService;
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
- public QcCheckPlanService(ISqlSugarRepository repository, IUserManager userManager, TimeTaskService timeTaskService)
+
+ private static Dictionary _dicBillCodes = new Dictionary()
+ {
+ [WmsWareHouseConst.SHOUJIAN_ID] = CodeTemplateConst.SHOUJIAN_CODE,
+ [WmsWareHouseConst.XUNJIAN_ID] = CodeTemplateConst.XUNJIAN_CODE,
+ [WmsWareHouseConst.MOJIAN_ID] = CodeTemplateConst.MOJIAN_CODE,
+ [WmsWareHouseConst.LINGBUJIANZUIZHONGJIANYAN_ID] = CodeTemplateConst.LINGBUJIANZUIZHONGJIANYAN_CODE,
+ [WmsWareHouseConst.CHENGPINJIANYAN_ID] = CodeTemplateConst.CHENGPINJIANYAN_CODE,
+ };
+ public QcCheckPlanService(ISqlSugarRepository repository,
+ IBillRullService billRullService,
+ IUserManager userManager, TimeTaskService timeTaskService)
{
_repository = repository;
_userManager = userManager;
+ _billRullService = billRullService;
_timeTaskService = timeTaskService;
OverideFuncs.DeleteAsync = Delete;
}
@@ -512,13 +528,17 @@ namespace Tnb.QcMgr
removePlanHs.Add(plan);
}
}
- if (enumTriggerEvent == EnumTriggerEvent.零部件最终检验事件)
+ if (enumTriggerEvent == EnumTriggerEvent.零部件最终检验)
{
int? number = _repository.AsSugarClient().Queryable().Where(p => p.mainid == plan.id).First().number;
if ((entity.newpronum + (entity.oldpronum / number)) <= (entity.oldpronum / number))
{
removePlanHs.Add(plan);
}
+ }
+ if (enumTriggerEvent == EnumTriggerEvent.开工首件检)
+ {
+
}
if (enumTriggerEvent == EnumTriggerEvent.生产检定码)
{
@@ -552,9 +572,11 @@ namespace Tnb.QcMgr
foreach (QcCheckPlanH planh in planhs)
{
DateTime time = DateTime.Now;
+ string billCode = await _billRullService.GetBillNumber(_dicBillCodes[planh.checktype]);
QcCheckExecH qcCheckExecH = new()
{
id = SnowflakeIdHelper.NextId(),
+ bill_code = billCode,
checktype = planh.checktype,
status = DictionaryData.Id,
tasktime = time.ToString("yyyy-MM-dd HH:mm:ss"),
@@ -562,8 +584,17 @@ namespace Tnb.QcMgr
processid = entity.processid,
workid = entity.workid,
create_id = _userManager.UserId,
- create_time = time
+ create_time = time,
+ mo_task_code = entity.mo_task_code,
+ carry_code = entity.carry_code,
+ report_id = entity.report_id,
+ check_type = entity.check_type,
+ batch = entity.batch
};
+ if (entity.triggerevent == EnumTriggerEvent.零部件最终检验)
+ {
+ qcCheckExecH.checknum = entity.newpronum.ToString();
+ }
List ExecDs = new();
foreach (QcCheckPlanD? pland in plands.Where(p => p.mainid == planh.id).ToList())
{
diff --git a/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs b/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs
index 4b8c36ee..b3bb384f 100644
--- a/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs
+++ b/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs
@@ -39,7 +39,7 @@ namespace Tnb.QcMgr
{
{ "ok", "合格" },
{ "no", "不合格" },
- { "barelyok", "让步合格" },
+ { "barelyok", "让步接收" },
{ "await", "待检" },
{ "temporarily", "暂控" }
};
@@ -93,7 +93,7 @@ namespace Tnb.QcMgr
{
{ "ok", "合格" },
{ "no", "不合格" },
- { "barelyOk", "让步合格" },
+ { "barelyOk", "让步接收" },
{ "await", "待检" },
{ "temporarily", "暂控" }
};
@@ -120,6 +120,7 @@ namespace Tnb.QcMgr
.Select((a, b, c, d, e) => new QcCheckExecHOut
{
id = a.id,
+ bill_code = a.bill_code,
materialid = b.name,
checktype = a.checktype,
workid = d.FullName,
diff --git a/QcMgr/Tnb.QcMgr/QcCheckTaskService.cs b/QcMgr/Tnb.QcMgr/QcCheckTaskService.cs
index 70ef769b..651ba769 100644
--- a/QcMgr/Tnb.QcMgr/QcCheckTaskService.cs
+++ b/QcMgr/Tnb.QcMgr/QcCheckTaskService.cs
@@ -5,6 +5,7 @@ using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.FriendlyException;
using JNPF.JsonSerialization;
+using JNPF.Logging;
using JNPF.Systems.Entitys.Permission;
using JNPF.Systems.Entitys.System;
using JNPF.VisualDev;
@@ -13,10 +14,17 @@ using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using SqlSugar;
using Tnb.BasicData.Entities;
+using Tnb.ProductionMgr.Entities.Dto.PrdManage;
using Tnb.QcMgr.Entities;
using Tnb.QcMgr.Interfaces;
+using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
using Tnb.WarehouseMgr.Interfaces;
+using Tnb.ProductionMgr.Interfaces;
+using Tnb.ProductionMgr.Entities;
+using Tnb.WarehouseMgr.Entities.Enums;
+using Tnb.ProductionMgr.Entities.Dto.PrdManage;
+using Tnb.WarehouseMgr.Entities;
namespace Tnb.QcMgr
{
@@ -33,13 +41,19 @@ namespace Tnb.QcMgr
private readonly IUserManager _userManager;
private readonly IWmsSaleService _wmsSaleService;
private readonly IWmsPurchaseService _wmsPurchaseService;
+ private readonly IPrdMoTaskService _prdMoTaskService;
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
- public QcCheckTaskService(ISqlSugarRepository repository, IUserManager userManager, IWmsSaleService wmsSaleService, IWmsPurchaseService wmsPurchaseService)
+ public QcCheckTaskService(ISqlSugarRepository repository,
+ IUserManager userManager,
+ IWmsSaleService wmsSaleService,
+ IPrdMoTaskService prdMoTaskService,
+ IWmsPurchaseService wmsPurchaseService)
{
_repository = repository;
_userManager = userManager;
OverideFuncs.GetListAsync = GetListAsync;
_wmsSaleService= wmsSaleService;
+ _prdMoTaskService = prdMoTaskService;
_wmsPurchaseService= wmsPurchaseService;
}
@@ -50,7 +64,7 @@ namespace Tnb.QcMgr
{
{ "ok", "合格" },
{ "no", "不合格" },
- { "barelyOk", "让步合格" },
+ { "barelyOk", "让步接收" },
{ "await", "待检" },
{ "temporarily", "暂控" }
};
@@ -67,11 +81,12 @@ namespace Tnb.QcMgr
.LeftJoin((a, b, c) => a.processid == c.id)
.LeftJoin((a, b, c, d) => a.workid == d.Id)
.LeftJoin((a, b, c, d, e) => a.execuser == e.Id)
+ .LeftJoin((a,b,c,d,e,f)=>a.report_id==f.id)
.WhereIF(!string.IsNullOrEmpty(materialid), (a, b, c, d,e) => b.name.Contains(materialid))
.WhereIF(!string.IsNullOrEmpty(checktype), (a, b, c, d, e) => a.checktype == checktype)
.WhereIF(!string.IsNullOrEmpty(status), (a, b, c, d, e) => a.status == status)
.Where((a, b, c, d, e) => a.status == list.Where(p => p.FullName == "待执行").First().Id)
- .Select((a, b, c, d, e) => new QcCheckExecHOut
+ .Select((a, b, c, d, e,f) => new QcCheckExecHOut
{
id = a.id,
materialid = b.name,
@@ -85,6 +100,9 @@ namespace Tnb.QcMgr
tasktime = a.tasktime ?? "",
exectime = a.exectime ?? "",
execuser = e.RealName ?? "",
+ mo_task_code = a.mo_task_code,
+ batch = a.batch,
+ qty = a.qty
}).OrderByDescending(a => DateTime.Parse(a.tasktime)).ToPagedListAsync(input.currentPage, input.pageSize);
foreach (QcCheckExecHOut? item in result.list)
{
@@ -111,12 +129,33 @@ namespace Tnb.QcMgr
List QcErrorCauses = await db.Queryable().ToListAsync();
List QcErrorLevels = await db.Queryable().ToListAsync();
+ PrdMoTask moTask = await db.Queryable().Where(x => x.mo_task_code == QcCheckExecH.mo_task_code).FirstAsync();
+ if (moTask == null)
+ {
+ throw Oops.Bah($"未找到任务单{QcCheckExecH.mo_task_code}");
+ }
+
+ if (string.IsNullOrEmpty(QcCheckExecH.report_id))
+ {
+ throw Oops.Bah($"未找到提报记录{QcCheckExecH.report_id}");
+ }
+ BasMaterial basMaterial = await db.Queryable().Where(x=>x.id==moTask.material_id).FirstAsync();
+ PrdReport prdReport = await db.Queryable().SingleAsync(x => x.id == QcCheckExecH.report_id);
+ UserEntity userEntity = await db.Queryable().SingleAsync(x => x.Id == prdReport.create_id);
CheckTaskOut CheckTaskOut = new()
{
mainid = id,
wareid = QcCheckExecH.wareid!,
workid = QcCheckExecH.workid!,
- status = QcCheckExecH.status!
+ status = QcCheckExecH.status!,
+ mo_task_code = QcCheckExecH.mo_task_code,
+ material_id = moTask.material_id,
+ material_code = basMaterial.code,
+ material_name = basMaterial.name,
+ checknum = !string.IsNullOrEmpty(QcCheckExecH.checknum) ? int.Parse(QcCheckExecH.checknum) : 0,
+ worker_name = userEntity?.RealName ?? "",
+ bill_code = QcCheckExecH.bill_code,
+ carry_code = prdReport.material_box_code,
};
if (!string.IsNullOrEmpty(CheckTaskOut.workid))
{
@@ -204,13 +243,14 @@ namespace Tnb.QcMgr
try
{
Dictionary dic = new()
- {
- { "ok", 1 },
- { "no", 2 },
- { "barelyOk", 4 },
- { "await", 8 },
- { "temporarily", 16 }
- };
+ {
+ { "ok", 1 },
+ { "no", 2 },
+ { "barelyOk", 4 },
+ { "await", 8 },
+ { "temporarily", 16 },
+ { "checking", 32 },
+ };
QcCheckExecH QcCheckExecH = await db.Queryable().Where(p => p.id == CheckTaskInput.mainid).FirstAsync();
DictionaryTypeEntity DictionaryType = await db.Queryable().Where(p => p.FullName == "质检状态").FirstAsync();
DictionaryDataEntity DictionaryData = await db.Queryable().Where(p => p.DictionaryTypeId == DictionaryType.Id && p.FullName == "已完成").FirstAsync();
@@ -219,7 +259,11 @@ namespace Tnb.QcMgr
QcCheckExecH.result = CheckTaskInput.result;
QcCheckExecH.execuser = _userManager.UserId;
QcCheckExecH.exectime = DateTime.Now.ToString();
+ QcCheckExecH.check_type = CheckTaskInput.check_type;
+ QcCheckExecH.remark = CheckTaskInput.remark;
List QcCheckExecDs = await db.Queryable().Where(p => p.mainid == CheckTaskInput.mainid).ToListAsync();
+
+ int rqty = 0;
List QcCheckExecDdel = new();
List QcCheckExecDinsert = new();
if (CheckTaskInput.checktypes?.Count > 0)
@@ -268,9 +312,12 @@ namespace Tnb.QcMgr
create_time = QcCheckExecD.create_time,
postdata = item.postItemForm,
result = item.result,
- checkindex = (i + 1).ToString()
+ checkindex = (i + 1).ToString(),
+ qty = item.qty
};
QcCheckExecDinsert.Add(insert);
+
+ rqty += item.qty;
}
}
}
@@ -278,6 +325,7 @@ namespace Tnb.QcMgr
}
}
await db.Ado.BeginTranAsync();
+ QcCheckExecH.qty = int.Parse(CheckTaskInput.checknum) - rqty;
_ = await db.Updateable(QcCheckExecH).ExecuteCommandAsync();
_ = await db.Deleteable(QcCheckExecDdel).ExecuteCommandAsync();
_ = await db.Insertable(QcCheckExecDinsert).ExecuteCommandAsync();
@@ -296,12 +344,39 @@ namespace Tnb.QcMgr
mesCheckdCallbackUpinput.maintableid = QcCheckExecH.extras;
mesCheckdCallbackUpinput.check_conclusion = dic.Where(p => p.Key == CheckTaskInput.result).Any() ? dic.Where(p => p.Key == CheckTaskInput.result).First().Value : 0;
await _wmsPurchaseService.MesCheckdPurchaseCallback(mesCheckdCallbackUpinput);
+ }else if (QcCheckExecH.checktype == WmsWareHouseConst.LINGBUJIANZUIZHONGJIANYAN_ID)
+ {
+ PrdReport prdReport = await db.Queryable().SingleAsync(x=>x.id==QcCheckExecH.report_id);
+ int pqty = prdReport.reported_qty.Value - rqty;
+ if (rqty > Decimal.Parse(QcCheckExecH.checknum))
+ {
+ throw Oops.Bah("不合格数不能大于抽样数");
+ }
+
+ if (CheckTaskInput.result != "await")
+ {
+ string isCheck = dic[CheckTaskInput.result].ToString();
+ await db.Updateable()
+ .SetColumns(x => x.is_check == isCheck)
+ .Where(x => x.carry_code == prdReport.material_box_code)
+ .ExecuteCommandAsync();
+
+ _prdMoTaskService.ReportInstock(new CheckCompleteInput()
+ {
+ report_id = QcCheckExecH.report_id,
+ pqty = pqty,
+ rqty = rqty,
+ check_result = ((EnumCheckConclusion)dic[CheckTaskInput.result]).ToString(),
+ });
+ }
}
await db.Ado.CommitTranAsync();
}
- catch (Exception)
+ catch (Exception e)
{
- throw Oops.Oh("执行失败");
+ await db.Ado.RollbackTranAsync();
+ Log.Error(e.Message,e);
+ throw Oops.Oh("执行失败:"+e.Message);
}
}
diff --git a/QcMgr/Tnb.QcMgr/Tnb.QcMgr.csproj b/QcMgr/Tnb.QcMgr/Tnb.QcMgr.csproj
index 1cf08455..2aca6871 100644
--- a/QcMgr/Tnb.QcMgr/Tnb.QcMgr.csproj
+++ b/QcMgr/Tnb.QcMgr/Tnb.QcMgr.csproj
@@ -8,6 +8,7 @@
+
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs
index 73f2b7b5..b6e8bad5 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs
@@ -72,9 +72,9 @@ public partial class WmsCarryH : BaseEntity
public string out_status { get; set; }
///
- /// 检验状态 0 未检验 1 检验中 2 合格 3 不合格
+ /// 检验状态 同质量结果
///
- public int is_check { get; set; }
+ public string is_check { get; set; }
///
/// 来源单据ID
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Enums/EnumCheckConclusion.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Enums/EnumCheckConclusion.cs
index 880b317d..6ececb02 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Enums/EnumCheckConclusion.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Enums/EnumCheckConclusion.cs
@@ -10,13 +10,15 @@ namespace Tnb.WarehouseMgr.Entities.Enums
{
[Description("合格")]
合格 = 1,
- [Description("让步合格")]
- 让步合格 = 2,
+ [Description("让步接收")]
+ 让步接收 = 2,
[Description("不合格")]
不合格 = 4,
[Description("待检")]
待检 = 8,
[Description("暂控")]
暂控 = 16,
+ [Description("检验中")]
+ 检验中 = 32,
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Mapper/Mapper.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Mapper/Mapper.cs
index ea946732..c8e0893e 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Mapper/Mapper.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Mapper/Mapper.cs
@@ -18,8 +18,8 @@ namespace Tnb.WarehouseMgr.Entities.Mapper
config.ForType()
.Map(dest => dest.carryId, src => src.carry_code)
;
- config.ForType()
- .Map(dest => dest.qc_status, src => src.is_check == 0 ? "不合格" : "合格");
+ // config.ForType()
+ // .Map(dest => dest.qc_status, src => src.is_check == 0 ? "不合格" : "合格");
config.ForType()
.Map(dest => dest.check_conclusion, src => GenericEnumDicionary.GetEnumDesc(src.check_conclusion));
config.ForType()
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs
index e8afb39c..c9e01b9e 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs
@@ -1,4 +1,5 @@
using JNPF.Common.Core.Manager;
+using JNPF.Common.Extension;
using JNPF.Common.Security;
using JNPF.FriendlyException;
using JNPF.VisualDev;
@@ -8,6 +9,7 @@ using Mapster;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using Tnb.BasicData.Entities;
+using Tnb.ProductionMgr.Entities.Enums;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
using Tnb.WarehouseMgr.Entities.Enums;
@@ -86,7 +88,7 @@ namespace Tnb.WarehouseMgr
}
x.out_status = ((int)EnumOutStatus.正常).ToString();
- x.is_check = 1;
+ x.is_check = EnumCheckConclusion.待检.ParseToInt().ToString();
x.create_id = _userManager.UserId;
x.modify_id = null;
x.modify_time = null;
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs
index 7677dda4..fdc68a70 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs
@@ -20,6 +20,7 @@ using Npgsql;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.Common.Utils;
+using Tnb.ProductionMgr.Entities.Enums;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Dto;
@@ -185,7 +186,7 @@ namespace Tnb.WarehouseMgr
carryObj.location_id = null;
carryObj.location_code = null;
carryObj.out_status = "0";
- carryObj.is_check = 1;
+ carryObj.is_check = EnumCheckConclusion.待检.ParseToInt().ToString();
carryObj.status = 1;
carryObj.bale_num = null;
carryObj.collocation_scheme_id = null;
@@ -282,7 +283,7 @@ namespace Tnb.WarehouseMgr
carry.id = SnowflakeIdHelper.NextId();
carry.carry_name = carryCode;
carry.carry_code = carryCode;
- carry.is_check = 1;
+ carry.is_check = EnumCheckConclusion.待检.ParseToInt().ToString();
carry.status = 1;
carry.create_id = "25398501929509";
carry.create_time = DateTime.Now;
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseAndSaleCommonService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseAndSaleCommonService.cs
index a558483d..67f5f10f 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseAndSaleCommonService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseAndSaleCommonService.cs
@@ -21,6 +21,7 @@ using Tnb.WarehouseMgr.Entities.Dto.Inputs;
using Tnb.WarehouseMgr.Entities.Entity.Constraints;
using Tnb.WarehouseMgr.Entities.Enums;
using Tnb.WarehouseMgr.Interfaces;
+using Tnb.ProductionMgr.Entities.Enums;
namespace Tnb.WarehouseMgr
{
@@ -149,7 +150,7 @@ namespace Tnb.WarehouseMgr
if (carry != null)
{
carry.check_conclusion = input.check_conclusion;
- carry.is_check = 1;
+ carry.is_check = EnumCheckConclusion.待检.ParseToInt().ToString();
isOk = await _db.Updateable(carry).UpdateColumns(it => new { it.check_conclusion, it.is_check }).ExecuteCommandHasChangeAsync();
}
}
diff --git a/system/Tnb.Systems/System/OnlineUserService.cs b/system/Tnb.Systems/System/OnlineUserService.cs
index 7f99e4dd..4d7a1ff5 100644
--- a/system/Tnb.Systems/System/OnlineUserService.cs
+++ b/system/Tnb.Systems/System/OnlineUserService.cs
@@ -79,6 +79,8 @@ public class OnlineUserService : IDynamicApiController, ITransient
{
var tenantId = _userManager.TenantId;
var list = await GetOnlineUserList(tenantId);
+ if (list == null)
+ return;
var user = list.Find(it => it.tenantId == tenantId && it.userId == id);
if (user != null)
{