Merge branch 'dev' of https://git.tuotong-tech.com/tnb/tnb.server into dev
This commit is contained in:
@@ -54,6 +54,31 @@ namespace Tnb.BasicData
|
||||
/// 料仓原料条码单
|
||||
/// </summary>
|
||||
public const string PRDRAWMATERIALBARCODE_CODE = "PrdRawMaterialBarcode";
|
||||
|
||||
/// <summary>
|
||||
/// 首检单号
|
||||
/// </summary>
|
||||
public const string SHOUJIAN_CODE = "shoujian";
|
||||
|
||||
/// <summary>
|
||||
/// 巡检单号
|
||||
/// </summary>
|
||||
public const string XUNJIAN_CODE = "xunjian";
|
||||
|
||||
/// <summary>
|
||||
/// 末检单号
|
||||
/// </summary>
|
||||
public const string MOJIAN_CODE = "mojian";
|
||||
|
||||
/// <summary>
|
||||
/// 零部件最终检验单号
|
||||
/// </summary>
|
||||
public const string LINGBUJIANZUIZHONGJIANYAN_CODE = "lingbujianzuizhongjianyan";
|
||||
|
||||
/// <summary>
|
||||
/// 成品检验单号
|
||||
/// </summary>
|
||||
public const string CHENGPINJIANYAN_CODE = "chengpinjianyan";
|
||||
|
||||
}
|
||||
}
|
||||
26
BasicData/Tnb.BasicData.Interfaces/IBasWorkgroupService.cs
Normal file
26
BasicData/Tnb.BasicData.Interfaces/IBasWorkgroupService.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
namespace Tnb.BasicData.Interfaces
|
||||
{
|
||||
public interface IBasWorkgroupService
|
||||
{
|
||||
/// <summary>
|
||||
/// 根据workGroupId获取员工ids
|
||||
/// </summary>
|
||||
/// <param name="workGroupId"></param>
|
||||
/// <returns></returns>
|
||||
public Task<List<string>> GetEmployeeIds(string workGroupId);
|
||||
|
||||
// /// <summary>
|
||||
// /// 根据获取同组员工的ids
|
||||
// /// </summary>
|
||||
// /// <param name="userId"></param>
|
||||
// /// <returns></returns>
|
||||
// public Task<List<string>> GetEmployeeIdsByUserId(string userId);
|
||||
|
||||
/// <summary>
|
||||
/// 根据获取员工的班组ids
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
public Task<List<string>> GetWorkgroupIdsByUserId(string userId);
|
||||
}
|
||||
}
|
||||
49
BasicData/Tnb.BasicData/BasWorkgroupService.cs
Normal file
49
BasicData/Tnb.BasicData/BasWorkgroupService.cs
Normal file
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// 班组服务
|
||||
/// </summary>
|
||||
[ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 1102)]
|
||||
[Route("api/[area]/[controller]/[action]")]
|
||||
public class BasWorkgroupService : IBasWorkgroupService, IDynamicApiController, ITransient
|
||||
{
|
||||
private readonly ISqlSugarRepository<BasWorkgroup> _repository;
|
||||
private readonly DataBaseManager _dbManager;
|
||||
private readonly IDictionaryDataService _dictionaryDataService;
|
||||
|
||||
public BasWorkgroupService(
|
||||
ISqlSugarRepository<BasWorkgroup> repository, DataBaseManager dbManager, IDictionaryDataService dictionaryDataService)
|
||||
{
|
||||
_repository = repository;
|
||||
_dbManager = dbManager;
|
||||
_dictionaryDataService = dictionaryDataService;
|
||||
}
|
||||
|
||||
public async Task<List<string>> GetEmployeeIds(string workGroupId)
|
||||
{
|
||||
return await _repository.AsSugarClient().Queryable<BasWorkgroup>()
|
||||
.InnerJoin<BasWorkgroupEmployee>((a, b) => a.id == b.group_id)
|
||||
.Where((a,b)=>a.id==workGroupId)
|
||||
.Select((a, b) => b.employee_id)
|
||||
.ToListAsync();
|
||||
}
|
||||
|
||||
public async Task<List<string>> GetWorkgroupIdsByUserId(string userId)
|
||||
{
|
||||
return await _repository.AsSugarClient().Queryable<BasWorkgroupEmployee>()
|
||||
.InnerJoin<BasWorkgroup>((a, b) => a.group_id == b.id)
|
||||
.Where((a,b)=>a.employee_id==userId)
|
||||
.Select((a, b) => b.id)
|
||||
.ToListAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
|
||||
{
|
||||
public class CheckCompleteInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 提报id
|
||||
/// </summary>
|
||||
public string report_id { get; set; }
|
||||
/// <summary>
|
||||
/// 合格数
|
||||
/// </summary>
|
||||
public decimal pqty { get; set; }
|
||||
/// <summary>
|
||||
/// 不合格数
|
||||
/// </summary>
|
||||
public decimal rqty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 质检结果
|
||||
/// </summary>
|
||||
public string check_result { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 视觉记录
|
||||
/// </summary>
|
||||
public List<PrdVisionResultRecord> records { get; set; } = null;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -83,6 +83,26 @@
|
||||
|
||||
public string workstation_name { get; set; }
|
||||
public string worker_name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 白班人员id/白班前人员id/
|
||||
/// </summary>
|
||||
public string dayshift_worker_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 夜班人员id/夜班前人员id/
|
||||
/// </summary>
|
||||
public string nightshift_worker_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 白班后人员id/
|
||||
/// </summary>
|
||||
public string dayshiftafter_worker_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 夜班后人员id/
|
||||
/// </summary>
|
||||
public string nightshiftafter_worker_id { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
|
||||
/// <summary>
|
||||
/// 白班人员id/白班前人员id/
|
||||
/// </summary>
|
||||
public string dayshift_worker_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 夜班人员id/夜班前人员id/
|
||||
/// </summary>
|
||||
public string nightshift_worker_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 白班后人员id/
|
||||
/// </summary>
|
||||
public string dayshiftafter_worker_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 夜班后人员id/
|
||||
/// </summary>
|
||||
public string nightshiftafter_worker_id { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -25,5 +25,25 @@ namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
|
||||
public string create_time { get; set; }
|
||||
|
||||
public int? schedule_type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 白班人员id/白班前人员id/
|
||||
/// </summary>
|
||||
public string dayshift_worker_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 夜班人员id/夜班前人员id/
|
||||
/// </summary>
|
||||
public string nightshift_worker_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 白班后人员id/
|
||||
/// </summary>
|
||||
public string dayshiftafter_worker_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 夜班后人员id/
|
||||
/// </summary>
|
||||
public string nightshiftafter_worker_id { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -207,8 +207,38 @@ public partial class PrdMoTask : BaseEntity<string>
|
||||
/// </summary>
|
||||
public string? pause_reason { get; set; }
|
||||
/// <summary>
|
||||
/// 分配员工id
|
||||
/// 分配员工id 废弃
|
||||
/// </summary>
|
||||
public string worker_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否已末检
|
||||
/// </summary>
|
||||
public int has_last_check { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 排班类型
|
||||
/// </summary>
|
||||
public string scheduling_class_type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 白班人员id/白班前人员id
|
||||
/// </summary>
|
||||
public string dayshift_worker_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 夜班人员id/夜班前人员id
|
||||
/// </summary>
|
||||
public string nightshift_worker_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 白班后人员id
|
||||
/// </summary>
|
||||
public string dayshiftafter_worker_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 夜班后人员id
|
||||
/// </summary>
|
||||
public string nightshiftafter_worker_id { get; set; }
|
||||
|
||||
}
|
||||
|
||||
@@ -154,5 +154,10 @@ public partial class PrdReport : BaseEntity<string>
|
||||
/// 称重重量
|
||||
/// </summary>
|
||||
public decimal weight { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 质检结果
|
||||
/// </summary>
|
||||
public string check_result { get; set; }
|
||||
|
||||
}
|
||||
|
||||
@@ -53,5 +53,11 @@ namespace Tnb.ProductionMgr.Interfaces
|
||||
|
||||
Task<string> PrdReport(PrdReportCrInput input);
|
||||
|
||||
/// <summary>
|
||||
/// 提报的质检任务执行完成后
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
Task<string> ReportInstock(CheckCompleteInput input);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<PrdMaterialReceiptH> 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<PrdMaterialReceiptH> insertHList = new List<PrdMaterialReceiptH>();
|
||||
List<PrdMaterialReceiptD> insertDList = new List<PrdMaterialReceiptD>();
|
||||
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<WmsCarryH>().SingleAsync(x => x.id == carryId);
|
||||
|
||||
@@ -105,11 +105,11 @@ namespace Tnb.ProductionMgr
|
||||
.LeftJoin<PrdMo>((a, b, c, d, e, f) => a.mo_id == f.id)
|
||||
.LeftJoin<EqpEquipment>((a, b, c, d, e, f, g) => g.id == a.eqp_id)
|
||||
.LeftJoin<OrganizeEntity>((a, b, c, d, e, f, g,h)=>a.workstation_id==h.Id)
|
||||
.LeftJoin<UserEntity>((a, b, c, d, e, f, g,h,i)=>a.worker_id==i.Id)
|
||||
//.LeftJoin<UserEntity>((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<string> 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<UserEntity> userEntities = await db.Queryable<UserEntity>().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<PrdMoTaskIssueListOutput>.SqlSugarPageResult(result);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<PrdMo>((a, b, c, d) => a.mo_id == d.id)
|
||||
.LeftJoin<BasProcess>((a, b, c, d, e) => a.process_id == e.id)
|
||||
.LeftJoin<OrganizeEntity>((a, b,c,d,e,f) => a.workstation_id == f.Id)
|
||||
.LeftJoin<UserEntity>((a, b,c,d,e,f,g)=>a.worker_id==g.Id)
|
||||
// .LeftJoin<UserEntity>((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<BasMbom>().Where(it => it.material_id == a.material_id).Select(it => it.version)
|
||||
bom_version = SqlFunc.Subqueryable<BasMbom>().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<string> 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<UserEntity> userEntities = await _db.Queryable<UserEntity>().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;
|
||||
}
|
||||
// /// <summary>
|
||||
@@ -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<string, object> dic = (Dictionary<string, object>)args;
|
||||
List<PrdMoTask> prdTaskList = (List<PrdMoTask>)(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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生产任务单修改
|
||||
@@ -1556,55 +1620,6 @@ namespace Tnb.ProductionMgr
|
||||
return row > 0;
|
||||
}
|
||||
|
||||
// /// <summary>
|
||||
// /// 生产提报
|
||||
// /// </summary>
|
||||
// /// <param name="input"></param>
|
||||
// /// <remarks>
|
||||
// /// input:
|
||||
// /// <br/>{
|
||||
// /// <br/> icmo_id:生产任务ID
|
||||
// /// <br/> icmo_code:任务单号
|
||||
// /// <br/> prd_qty:生产数量
|
||||
// /// <br/> reported_work_qty:已报工数量
|
||||
// /// <br/> reported_qty:提报数量
|
||||
// /// <br/> icmo_qty:生产任务量
|
||||
// /// <br/>}
|
||||
// /// </remarks>
|
||||
// [HttpPost]
|
||||
// public async Task<dynamic> PrdReport(PrdReportCrInput input)
|
||||
// {
|
||||
// var row = -1;
|
||||
// var db = _repository.AsSugarClient();
|
||||
// var report = await db.Queryable<PrdReport>().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<PrdReport>();
|
||||
// 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<PrdReportRecord>().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;
|
||||
// }
|
||||
|
||||
/// <summary>
|
||||
/// 生产提报
|
||||
/// </summary>
|
||||
@@ -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<BasFactoryConfig>().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.IS_SURPASS);
|
||||
if (config1?.value == "1")
|
||||
{
|
||||
BasFactoryConfig? config2 = await db.Queryable<BasFactoryConfig>().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<PrdMoTask>()
|
||||
.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<WmsCarryH>().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<WmsCarryH>()
|
||||
.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<PrdVisionResultRecord> prdVisionResultRecords = await _db.Queryable<PrdVisionResultRecord>()
|
||||
.Where(x => x.status == 0 && x.result.ToUpper()=="OK").OrderByDescending(x => x.create_time).Take(report.reported_qty.Value).ToListAsync();
|
||||
|
||||
List<string> ids = prdVisionResultRecords.Select(x => x.id).ToList();
|
||||
|
||||
await db.Updateable<PrdVisionResultRecord>().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<string> ReportInstock(CheckCompleteInput input)
|
||||
{
|
||||
try
|
||||
{
|
||||
var db = _repository.AsSugarClient();
|
||||
PrdReport report = await db.Queryable<PrdReport>().FirstAsync(it => it.id==input.report_id);
|
||||
PrdMoTask? prdMoTask = await db.Queryable<PrdMoTask>().SingleAsync(x => x.id == report.mo_task_id);
|
||||
EqpEquipment equip = await db.Queryable<EqpEquipment>().SingleAsync(x => x.id == prdMoTask.eqp_id);
|
||||
BasMaterial basMaterial = await db.Queryable<BasMaterial>().SingleAsync(x => x.id == prdMoTask.material_id);
|
||||
WmsCarryH wmsCarryH = await db.Queryable<WmsCarryH>().FirstAsync(x=>x.carry_code==report.material_box_code);
|
||||
BasLocation location = await db.Queryable<BasLocation>().FirstAsync(x=>x.location_code==report.location_code);
|
||||
PrdMo prdMo = await db.Queryable<PrdMo>().SingleAsync(x => x.id == prdMoTask.mo_id);
|
||||
|
||||
await db.Updateable<PrdReport>()
|
||||
.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<WmsPrdInstockDInput>();
|
||||
@@ -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<PrdVisionResultRecord> prdVisionResultRecords = await _db.Queryable<PrdVisionResultRecord>()
|
||||
.Where(x => x.status == 0 && x.result.ToUpper()=="OK").OrderByDescending(x => x.create_time).Take(report.reported_qty.Value).ToListAsync();
|
||||
|
||||
List<string> 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<PrdVisionResultRecord>()
|
||||
.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<ErpExtendField> erpExtendFields = await _db.Queryable<ErpExtendField>().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<BasFactoryConfig>().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<bool> result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
|
||||
// {
|
||||
//
|
||||
//
|
||||
//
|
||||
// });
|
||||
|
||||
// if (result.IsSuccess)
|
||||
// {
|
||||
// if (!string.IsNullOrEmpty(basMaterial.category_id))
|
||||
// {
|
||||
// string[] arr = JsonConvert.DeserializeObject<string[]>(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 "提报成功";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -2652,14 +2726,14 @@ namespace Tnb.ProductionMgr
|
||||
.LeftJoin<PrdMo>((a, b, c, d, e, f) => a.mo_id == f.id)
|
||||
.LeftJoin<OrganizeEntity>((a, b, c, d, e, f, g) => a.workline_id == g.Id)
|
||||
.LeftJoin<EqpEquipment>((a, b, c, d, e, f, g, h) => a.eqp_id == h.id)
|
||||
.LeftJoin<UserEntity>((a, b, c, d, e, f, g, h,i)=>a.worker_id==i.Id)
|
||||
// .LeftJoin<UserEntity>((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<string> 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<UserEntity> userEntities = await db.Queryable<UserEntity>().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<WorkOrderAdjustmentListOutput>.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<PrdMoTask>()
|
||||
.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 ? "分配成功" : "分配失败";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 末检
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<dynamic> LastCheck(Dictionary<String,String> input)
|
||||
{
|
||||
string moTaskId = input.GetOrDefault("mo_task_id");
|
||||
PrdMoTask task = await _db.Queryable<PrdMoTask>().SingleAsync(x => x.id == moTaskId);
|
||||
if (task.has_last_check == 1)
|
||||
{
|
||||
throw Oops.Bah("已经生成过质检任务");
|
||||
}
|
||||
DbResult<bool> result = await _db.Ado.UseTranAsync(async () =>
|
||||
{
|
||||
await _db.Updateable<PrdMoTask>()
|
||||
.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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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<CheckExecTypeOut>? checktypes { get; set; }
|
||||
}
|
||||
public class CheckExecTypeOut
|
||||
|
||||
@@ -44,6 +44,17 @@ namespace Tnb.QcMgr.Entities
|
||||
/// 生产次数
|
||||
/// </summary>
|
||||
public int? pronum { get; set; }
|
||||
|
||||
public string mo_task_code { get; set; }
|
||||
|
||||
public string carry_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 提报记录id
|
||||
/// </summary>
|
||||
public string report_id { get; set; }
|
||||
public string check_type { get; set; }
|
||||
public string batch { get; set; }
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -106,7 +106,10 @@ namespace Tnb.QcMgr.Entities
|
||||
/// </summary>
|
||||
public string? checkindex { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 不合格数量
|
||||
/// </summary>
|
||||
public int qty { get; set; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -43,6 +43,11 @@ namespace Tnb.QcMgr.Entities
|
||||
/// 抽样数
|
||||
/// </summary>
|
||||
public string? checknum { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 合格数
|
||||
/// </summary>
|
||||
public int? qty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 状态
|
||||
@@ -93,5 +98,36 @@ namespace Tnb.QcMgr.Entities
|
||||
/// 修改时间
|
||||
/// </summary>
|
||||
public DateTime? modify_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 单据编号
|
||||
/// </summary>
|
||||
public string bill_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 生产任务单编号
|
||||
/// </summary>
|
||||
public string mo_task_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 载具编号
|
||||
/// </summary>
|
||||
public string carry_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 提报记录id
|
||||
/// </summary>
|
||||
public string report_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 抽样方式
|
||||
/// </summary>
|
||||
public string check_type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 备注
|
||||
/// </summary>
|
||||
public string remark { get; set; }
|
||||
public string batch { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,8 +36,12 @@ namespace Tnb.QcMgr.Entities.Enums
|
||||
生产检固定次数 = 12,
|
||||
[Remark("生产检", "按流转卡")]
|
||||
生产检按流转卡 = 13,
|
||||
[Remark("零部件最终检验", "零部件最终检验事件")]
|
||||
零部件最终检验事件 = 14
|
||||
[Remark("零部件最终检验", "零部件最终检验")]
|
||||
零部件最终检验 = 14,
|
||||
[Remark("首检", "开工检")]
|
||||
开工首件检 = 15,
|
||||
[Remark("末检", "末检触发事件")]
|
||||
末检质检方案 = 16
|
||||
}
|
||||
public class RemarkAttribute : Attribute
|
||||
{
|
||||
|
||||
@@ -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<QcCheckPlanH> _repository;
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly TimeTaskService _timeTaskService;
|
||||
private readonly IBillRullService _billRullService;
|
||||
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
|
||||
public QcCheckPlanService(ISqlSugarRepository<QcCheckPlanH> repository, IUserManager userManager, TimeTaskService timeTaskService)
|
||||
|
||||
private static Dictionary<string, string> _dicBillCodes = new Dictionary<string, string>()
|
||||
{
|
||||
[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<QcCheckPlanH> 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<QcCheckPlanAdd>().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<QcCheckExecD> ExecDs = new();
|
||||
foreach (QcCheckPlanD? pland in plands.Where(p => p.mainid == planh.id).ToList())
|
||||
{
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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<QcCheckExecH> repository, IUserManager userManager, IWmsSaleService wmsSaleService, IWmsPurchaseService wmsPurchaseService)
|
||||
public QcCheckTaskService(ISqlSugarRepository<QcCheckExecH> 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<BasProcess>((a, b, c) => a.processid == c.id)
|
||||
.LeftJoin<OrganizeEntity>((a, b, c, d) => a.workid == d.Id)
|
||||
.LeftJoin<UserEntity>((a, b, c, d, e) => a.execuser == e.Id)
|
||||
.LeftJoin<PrdReport>((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<QcErrorCause> QcErrorCauses = await db.Queryable<QcErrorCause>().ToListAsync();
|
||||
List<QcErrorLevel> QcErrorLevels = await db.Queryable<QcErrorLevel>().ToListAsync();
|
||||
|
||||
PrdMoTask moTask = await db.Queryable<PrdMoTask>().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<BasMaterial>().Where(x=>x.id==moTask.material_id).FirstAsync();
|
||||
PrdReport prdReport = await db.Queryable<PrdReport>().SingleAsync(x => x.id == QcCheckExecH.report_id);
|
||||
UserEntity userEntity = await db.Queryable<UserEntity>().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<string, int> 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<QcCheckExecH>().Where(p => p.id == CheckTaskInput.mainid).FirstAsync();
|
||||
DictionaryTypeEntity DictionaryType = await db.Queryable<DictionaryTypeEntity>().Where(p => p.FullName == "质检状态").FirstAsync();
|
||||
DictionaryDataEntity DictionaryData = await db.Queryable<DictionaryDataEntity>().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<QcCheckExecD> QcCheckExecDs = await db.Queryable<QcCheckExecD>().Where(p => p.mainid == CheckTaskInput.mainid).ToListAsync();
|
||||
|
||||
int rqty = 0;
|
||||
List<QcCheckExecD> QcCheckExecDdel = new();
|
||||
List<QcCheckExecD> 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<PrdReport>().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<WmsCarryH>()
|
||||
.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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\ProductionMgr\Tnb.ProductionMgr.Interfaces\Tnb.ProductionMgr.Interfaces.csproj" />
|
||||
<ProjectReference Include="..\..\taskschedule\Tnb.TaskScheduler\Tnb.TaskScheduler.csproj" />
|
||||
<ProjectReference Include="..\..\visualdev\Tnb.VisualDev.Engine\Tnb.VisualDev.Engine.csproj" />
|
||||
<ProjectReference Include="..\..\WarehouseMgr\Tnb.WarehouseMgr.Interfaces\Tnb.WarehouseMgr.Interfaces.csproj" />
|
||||
|
||||
@@ -72,9 +72,9 @@ public partial class WmsCarryH : BaseEntity<string>
|
||||
public string out_status { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 检验状态 0 未检验 1 检验中 2 合格 3 不合格
|
||||
/// 检验状态 同质量结果
|
||||
/// </summary>
|
||||
public int is_check { get; set; }
|
||||
public string is_check { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 来源单据ID
|
||||
|
||||
@@ -10,13 +10,15 @@ namespace Tnb.WarehouseMgr.Entities.Enums
|
||||
{
|
||||
[Description("合格")]
|
||||
合格 = 1,
|
||||
[Description("让步合格")]
|
||||
让步合格 = 2,
|
||||
[Description("让步接收")]
|
||||
让步接收 = 2,
|
||||
[Description("不合格")]
|
||||
不合格 = 4,
|
||||
[Description("待检")]
|
||||
待检 = 8,
|
||||
[Description("暂控")]
|
||||
暂控 = 16,
|
||||
[Description("检验中")]
|
||||
检验中 = 32,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,8 +18,8 @@ namespace Tnb.WarehouseMgr.Entities.Mapper
|
||||
config.ForType<MESCarrySignInput, SignForDeliveryInput>()
|
||||
.Map(dest => dest.carryId, src => src.carry_code)
|
||||
;
|
||||
config.ForType<WmsCarryH, CarryQueryOutput>()
|
||||
.Map(dest => dest.qc_status, src => src.is_check == 0 ? "不合格" : "合格");
|
||||
// config.ForType<WmsCarryH, CarryQueryOutput>()
|
||||
// .Map(dest => dest.qc_status, src => src.is_check == 0 ? "不合格" : "合格");
|
||||
config.ForType<WmsCarryCode, CarryCodeQueryOutput>()
|
||||
.Map(dest => dest.check_conclusion, src => GenericEnumDicionary<EnumCheckConclusion>.GetEnumDesc(src.check_conclusion));
|
||||
config.ForType<WmsPurchaseD, WmsInstockD>()
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user