Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
@@ -44,6 +44,9 @@ using Newtonsoft.Json;
|
|||||||
using Tnb.BasicData.Entities.Dto;
|
using Tnb.BasicData.Entities.Dto;
|
||||||
using NPOI.SS.Formula.Functions;
|
using NPOI.SS.Formula.Functions;
|
||||||
using Tnb.PerMgr.Entities;
|
using Tnb.PerMgr.Entities;
|
||||||
|
using Tnb.QcMgr.Interfaces;
|
||||||
|
using Tnb.QcMgr.Entities.Dto;
|
||||||
|
using Tnb.QcMgr.Entities.Enums;
|
||||||
|
|
||||||
// using Tnb.PerMgr.Entities;
|
// using Tnb.PerMgr.Entities;
|
||||||
|
|
||||||
@@ -67,7 +70,7 @@ namespace Tnb.ProductionMgr
|
|||||||
private static Dictionary<string, object> _dicProcess = new Dictionary<string, object>();
|
private static Dictionary<string, object> _dicProcess = new Dictionary<string, object>();
|
||||||
private readonly ISqlSugarClient _db;
|
private readonly ISqlSugarClient _db;
|
||||||
private readonly IBillRullService _billRuleService;
|
private readonly IBillRullService _billRuleService;
|
||||||
|
private readonly IQcCheckPlanService _qcCheckPlanService;
|
||||||
|
|
||||||
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
|
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
|
||||||
public PrdMoTaskService(
|
public PrdMoTaskService(
|
||||||
@@ -76,7 +79,8 @@ namespace Tnb.ProductionMgr
|
|||||||
IDictionaryDataService dictionaryDataService,
|
IDictionaryDataService dictionaryDataService,
|
||||||
IRunService runService,
|
IRunService runService,
|
||||||
IBillRullService billRullService,
|
IBillRullService billRullService,
|
||||||
IVisualDevService visualDevService
|
IVisualDevService visualDevService,
|
||||||
|
IQcCheckPlanService qcCheckPlanService
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
_repository = repository;
|
_repository = repository;
|
||||||
@@ -88,7 +92,7 @@ namespace Tnb.ProductionMgr
|
|||||||
OverideFuncs.DeleteAsync = Delete;
|
OverideFuncs.DeleteAsync = Delete;
|
||||||
OverideFuncs.GetListAsync = GetList;
|
OverideFuncs.GetListAsync = GetList;
|
||||||
_billRuleService = billRullService;
|
_billRuleService = billRullService;
|
||||||
|
_qcCheckPlanService=qcCheckPlanService;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Get
|
#region Get
|
||||||
@@ -1299,7 +1303,19 @@ namespace Tnb.ProductionMgr
|
|||||||
|
|
||||||
row = await db.Insertable(report).ExecuteCommandAsync();
|
row = await db.Insertable(report).ExecuteCommandAsync();
|
||||||
|
|
||||||
|
#region 质检模块
|
||||||
|
//质检模块
|
||||||
|
TriggerPlanEntity entity = new TriggerPlanEntity();
|
||||||
|
entity.materialid = prdMoTask.material_id;
|
||||||
|
entity.processid = prdMoTask.process_id;
|
||||||
|
entity.workid = prdMoTask.workstation_id;
|
||||||
|
var reported = prdMoTask.reported_work_qty == null ? 0 : prdMoTask.reported_work_qty;
|
||||||
|
var scrap = prdMoTask.scrap_qty == null ? 0 : prdMoTask.scrap_qty;
|
||||||
|
entity.oldpronum = reported+ scrap;
|
||||||
|
entity.newpronum = input.reported_qty;
|
||||||
|
entity.triggerevent = EnumTriggerEvent.生产检定量;
|
||||||
|
await _qcCheckPlanService.CreateTask(entity);
|
||||||
|
#endregion
|
||||||
if (prdMoTask.reported_work_qty == null)
|
if (prdMoTask.reported_work_qty == null)
|
||||||
{
|
{
|
||||||
await db.Updateable<PrdMoTask>()
|
await db.Updateable<PrdMoTask>()
|
||||||
@@ -1482,6 +1498,20 @@ namespace Tnb.ProductionMgr
|
|||||||
var scrapQty = db.Queryable<PrdMoTaskDefect>().Where(it => it.mo_task_id == input.mo_task_id)?.Sum(d => d.defective_item_qty);
|
var scrapQty = db.Queryable<PrdMoTaskDefect>().Where(it => it.mo_task_id == input.mo_task_id)?.Sum(d => d.defective_item_qty);
|
||||||
if (scrapQty.HasValue && scrapQty.Value > 0)//更新生产任务表报废数量
|
if (scrapQty.HasValue && scrapQty.Value > 0)//更新生产任务表报废数量
|
||||||
{
|
{
|
||||||
|
#region 质检模块
|
||||||
|
//质检模块
|
||||||
|
var prdMoTask = await db.Queryable<PrdMoTask>().SingleAsync(x => x.id == input.mo_task_id);
|
||||||
|
TriggerPlanEntity entity = new TriggerPlanEntity();
|
||||||
|
entity.materialid = prdMoTask.material_id;
|
||||||
|
entity.processid = prdMoTask.process_id;
|
||||||
|
entity.workid = prdMoTask.workstation_id;
|
||||||
|
var reported = prdMoTask.reported_work_qty == null ? 0 : prdMoTask.reported_work_qty;
|
||||||
|
var scrap = prdMoTask.scrap_qty == null ? 0 : prdMoTask.scrap_qty;
|
||||||
|
entity.oldpronum = reported + scrap;
|
||||||
|
entity.newpronum = input.scrap_qty;
|
||||||
|
entity.triggerevent = EnumTriggerEvent.生产检定量;
|
||||||
|
await _qcCheckPlanService.CreateTask(entity);
|
||||||
|
#endregion
|
||||||
await db.Updateable<PrdMoTask>().SetColumns(it => new PrdMoTask { scrap_qty = scrapQty.Value }).Where(it => it.id == input.mo_task_id).ExecuteCommandAsync();
|
await db.Updateable<PrdMoTask>().SetColumns(it => new PrdMoTask { scrap_qty = scrapQty.Value }).Where(it => it.id == input.mo_task_id).ExecuteCommandAsync();
|
||||||
}
|
}
|
||||||
var defectRecord = await db.Queryable<PrdMoTaskDefectRecord>().FirstAsync(it => it.mo_task_id == input.mo_task_id);
|
var defectRecord = await db.Queryable<PrdMoTaskDefectRecord>().FirstAsync(it => it.mo_task_id == input.mo_task_id);
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
<ProjectReference Include="..\..\EquipMgr\Tnb.EquipMgr.Interfaces\Tnb.EquipMgr.Interfaces.csproj" />
|
<ProjectReference Include="..\..\EquipMgr\Tnb.EquipMgr.Interfaces\Tnb.EquipMgr.Interfaces.csproj" />
|
||||||
<ProjectReference Include="..\..\message\Tnb.Message\Tnb.Message.csproj" />
|
<ProjectReference Include="..\..\message\Tnb.Message\Tnb.Message.csproj" />
|
||||||
<ProjectReference Include="..\..\PerMgr\Tnb.PerMgr.Entities\Tnb.PerMgr.Entities.csproj" />
|
<ProjectReference Include="..\..\PerMgr\Tnb.PerMgr.Entities\Tnb.PerMgr.Entities.csproj" />
|
||||||
|
<ProjectReference Include="..\..\QcMgr\Tnb.QcMgr.Interfaces\Tnb.QcMgr.Interfaces.csproj" />
|
||||||
<ProjectReference Include="..\..\taskschedule\Tnb.TaskScheduler\Tnb.TaskScheduler.csproj" />
|
<ProjectReference Include="..\..\taskschedule\Tnb.TaskScheduler\Tnb.TaskScheduler.csproj" />
|
||||||
<ProjectReference Include="..\..\visualdev\Tnb.VisualDev.Engine\Tnb.VisualDev.Engine.csproj" />
|
<ProjectReference Include="..\..\visualdev\Tnb.VisualDev.Engine\Tnb.VisualDev.Engine.csproj" />
|
||||||
<ProjectReference Include="..\..\WarehouseMgr\Tnb.WarehouseMgr.Entities\Tnb.WarehouseMgr.Entities.csproj" />
|
<ProjectReference Include="..\..\WarehouseMgr\Tnb.WarehouseMgr.Entities\Tnb.WarehouseMgr.Entities.csproj" />
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ namespace Tnb.QcMgr.Entities
|
|||||||
public string? addid { get; set; }
|
public string? addid { get; set; }
|
||||||
public string? triggertype { get; set; }
|
public string? triggertype { get; set; }
|
||||||
public string? content { get; set; }
|
public string? content { get; set; }
|
||||||
|
public int? number { get; set; }
|
||||||
public List<CheckPlanTypeInput>? checktypes { get; set; }
|
public List<CheckPlanTypeInput>? checktypes { get; set; }
|
||||||
}
|
}
|
||||||
public class CheckPlanTypeInput
|
public class CheckPlanTypeInput
|
||||||
@@ -42,6 +43,7 @@ namespace Tnb.QcMgr.Entities
|
|||||||
public string? addid { get; set; }
|
public string? addid { get; set; }
|
||||||
public string? triggertype { get; set; }
|
public string? triggertype { get; set; }
|
||||||
public string? content { get; set; }
|
public string? content { get; set; }
|
||||||
|
public int? number { get; set; }
|
||||||
public List<CheckPlanTypeOut>? checktypes { get; set; }
|
public List<CheckPlanTypeOut>? checktypes { get; set; }
|
||||||
}
|
}
|
||||||
public class CheckPlanTypeOut
|
public class CheckPlanTypeOut
|
||||||
|
|||||||
@@ -37,5 +37,18 @@ namespace Tnb.QcMgr.Entities.Dto
|
|||||||
/// 触发条件
|
/// 触发条件
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public EnumTriggerEvent? triggerevent { get; set; }
|
public EnumTriggerEvent? triggerevent { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 原先生产数量
|
||||||
|
/// </summary>
|
||||||
|
public int? oldpronum { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 新生产数量
|
||||||
|
/// </summary>
|
||||||
|
public int? newpronum { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 生产次数
|
||||||
|
/// </summary>
|
||||||
|
public int? pronum { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,5 +34,10 @@ namespace Tnb.QcMgr.Entities
|
|||||||
/// 主表编号
|
/// 主表编号
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? mainid { get; set; }
|
public string? mainid { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 频次/数量
|
||||||
|
/// </summary>
|
||||||
|
public int? number { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
@@ -14,18 +16,48 @@ namespace Tnb.QcMgr.Entities.Enums
|
|||||||
}
|
}
|
||||||
public enum EnumTriggerEvent
|
public enum EnumTriggerEvent
|
||||||
{
|
{
|
||||||
|
[Remark("首件检", "换模具")]
|
||||||
首件检换模具 = 1,
|
首件检换模具 = 1,
|
||||||
|
[Remark("首件检", "换物料批号")]
|
||||||
首件检换物料批号 = 2,
|
首件检换物料批号 = 2,
|
||||||
|
[Remark("首件检", "换物料编号")]
|
||||||
首件检换物料编号 = 3,
|
首件检换物料编号 = 3,
|
||||||
|
[Remark("首件检", "新的生产任务")]
|
||||||
首件检新的生产任务 = 4,
|
首件检新的生产任务 = 4,
|
||||||
|
[Remark("首件检", "生产任务暂停")]
|
||||||
首件检生产任务暂停 = 5,
|
首件检生产任务暂停 = 5,
|
||||||
|
[Remark("出厂检", "按入厂频次")]
|
||||||
出厂检按入厂频次 = 6,
|
出厂检按入厂频次 = 6,
|
||||||
|
[Remark("入厂检", "按物料频次")]
|
||||||
入厂检按物料频次 = 7,
|
入厂检按物料频次 = 7,
|
||||||
|
[Remark("入厂检", "按物料编号")]
|
||||||
入厂检按物料编号 = 8,
|
入厂检按物料编号 = 8,
|
||||||
|
[Remark("生产检", "定量")]
|
||||||
生产检定量 = 9,
|
生产检定量 = 9,
|
||||||
|
[Remark("生产检", "定码")]
|
||||||
生产检定码 = 10,
|
生产检定码 = 10,
|
||||||
|
[Remark("生产检", "产出频次")]
|
||||||
生产检产出频次 = 11,
|
生产检产出频次 = 11,
|
||||||
|
[Remark("生产检", "固定次数")]
|
||||||
生产检固定次数 = 12,
|
生产检固定次数 = 12,
|
||||||
|
[Remark("生产检", "按流转卡")]
|
||||||
生产检按流转卡 = 13
|
生产检按流转卡 = 13
|
||||||
}
|
}
|
||||||
|
public class RemarkAttribute : Attribute
|
||||||
|
{
|
||||||
|
public string CheckType { get; set; }
|
||||||
|
public string CheckContent { get; set; }
|
||||||
|
|
||||||
|
public RemarkAttribute(string checkType, string checkContent)
|
||||||
|
{
|
||||||
|
this.CheckType = checkType;
|
||||||
|
this.CheckContent = checkContent;
|
||||||
|
}
|
||||||
|
public static RemarkAttribute GetRemark(EnumTriggerEvent? enumTriggerEvent)
|
||||||
|
{
|
||||||
|
FieldInfo fi = enumTriggerEvent!.GetType().GetField(enumTriggerEvent.ToString()!)!;
|
||||||
|
object[] attributes = fi.GetCustomAttributes(typeof(RemarkAttribute), false);
|
||||||
|
return ((RemarkAttribute)attributes[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,5 +31,12 @@ namespace Tnb.QcMgr.Interfaces
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public Task<dynamic> GetTriggerPlans();
|
public Task<dynamic> GetTriggerPlans();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 根据计划生成任务
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="TriggerPlanEntity"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public Task CreateTask(TriggerPlanEntity entity);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ using System.Text;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Aspose.Cells.Drawing;
|
using Aspose.Cells.Drawing;
|
||||||
using COSXML.Model.Tag;
|
using COSXML.Model.Tag;
|
||||||
|
using JNPF.Common.Contracts;
|
||||||
using JNPF.Common.Core.Manager;
|
using JNPF.Common.Core.Manager;
|
||||||
using JNPF.Common.Enums;
|
using JNPF.Common.Enums;
|
||||||
using JNPF.Common.Security;
|
using JNPF.Common.Security;
|
||||||
@@ -93,6 +94,7 @@ namespace Tnb.QcMgr
|
|||||||
CheckPlansOut.addid = QcCheckPlanAdd.id;
|
CheckPlansOut.addid = QcCheckPlanAdd.id;
|
||||||
CheckPlansOut.triggertype = QcCheckPlanAdd.triggertype!;
|
CheckPlansOut.triggertype = QcCheckPlanAdd.triggertype!;
|
||||||
CheckPlansOut.content = QcCheckPlanAdd.content!;
|
CheckPlansOut.content = QcCheckPlanAdd.content!;
|
||||||
|
CheckPlansOut.number= QcCheckPlanAdd.number;
|
||||||
}
|
}
|
||||||
if (QcCheckPlanDs != null && QcCheckPlanDs.Count > 0)
|
if (QcCheckPlanDs != null && QcCheckPlanDs.Count > 0)
|
||||||
{
|
{
|
||||||
@@ -191,6 +193,7 @@ namespace Tnb.QcMgr
|
|||||||
QcCheckPlanAdd.mainid = CheckPlanInput.mainid;
|
QcCheckPlanAdd.mainid = CheckPlanInput.mainid;
|
||||||
QcCheckPlanAdd.triggertype = CheckPlanInput.triggertype;
|
QcCheckPlanAdd.triggertype = CheckPlanInput.triggertype;
|
||||||
QcCheckPlanAdd.content = CheckPlanInput.content;
|
QcCheckPlanAdd.content = CheckPlanInput.content;
|
||||||
|
QcCheckPlanAdd.number = CheckPlanInput.number;
|
||||||
List<QcCheckPlanD> QcCheckPlanDs = new List<QcCheckPlanD>();
|
List<QcCheckPlanD> QcCheckPlanDs = new List<QcCheckPlanD>();
|
||||||
if (CheckPlanInput.checktypes != null)
|
if (CheckPlanInput.checktypes != null)
|
||||||
{
|
{
|
||||||
@@ -276,49 +279,93 @@ namespace Tnb.QcMgr
|
|||||||
JoinType.Left,a.id == d.planid,
|
JoinType.Left,a.id == d.planid,
|
||||||
JoinType.Left,a.id == e.planid,
|
JoinType.Left,a.id == e.planid,
|
||||||
});
|
});
|
||||||
GetQuery(Query, entity.triggerevent);
|
GetQuery(Query, entity);
|
||||||
var list = await Query
|
var list = await Query
|
||||||
.WhereIF(!string.IsNullOrEmpty(entity.materialid), (a, b, c, d, e) => c.materialid == entity.materialid)
|
.WhereIF(!string.IsNullOrEmpty(entity.materialid), (a, b, c, d, e) => c.materialid == entity.materialid)
|
||||||
.WhereIF(!string.IsNullOrEmpty(entity.processid), (a, b, c, d, e) => d.processid == entity.processid)
|
.WhereIF(!string.IsNullOrEmpty(entity.processid), (a, b, c, d, e) => d.processid == entity.processid)
|
||||||
.WhereIF(!string.IsNullOrEmpty(entity.workid), (a, b, c, d, e) => e.workid == entity.workid).ToListAsync();
|
.WhereIF(!string.IsNullOrEmpty(entity.workid), (a, b, c, d, e) => e.workid == entity.workid).ToListAsync();
|
||||||
|
Filter(list, entity);
|
||||||
if (list.Count > 0)
|
if (list.Count > 0)
|
||||||
await SaveTask(list, entity);
|
await SaveTask(list, entity);
|
||||||
}
|
}
|
||||||
private void GetQuery(ISugarQueryable<QcCheckPlanH, QcCheckPlanAdd, QcCheckPlanMaterial, QcCheckPlanProcess, QcCheckPlanWork> Query, EnumTriggerEvent? enumTriggerEvent)
|
private void GetQuery(ISugarQueryable<QcCheckPlanH, QcCheckPlanAdd, QcCheckPlanMaterial, QcCheckPlanProcess, QcCheckPlanWork> Query, TriggerPlanEntity entity)
|
||||||
{
|
{
|
||||||
|
|
||||||
var DictionaryData = _repository.AsSugarClient().Queryable<DictionaryDataEntity, DictionaryTypeEntity>
|
var DictionaryData = _repository.AsSugarClient().Queryable<DictionaryDataEntity, DictionaryTypeEntity>
|
||||||
((a, b) => new object[] { JoinType.Left, a.DictionaryTypeId == b.Id, })
|
((a, b) => new object[] { JoinType.Left, a.DictionaryTypeId == b.Id, })
|
||||||
.Where((a, b) => b.FullName == "质量方案类型").ToList();
|
.Where((a, b) => b.FullName == "质量方案类型").ToList();
|
||||||
var TriggerEvent = new QcTriggerEvent();
|
var TriggerEvent = new QcTriggerEvent();
|
||||||
if (enumTriggerEvent == EnumTriggerEvent.首件检换模具)
|
var enumTriggerEvent = entity.triggerevent;
|
||||||
TriggerEvent = _repository.AsSugarClient().Queryable<QcTriggerEvent>().Where(p => p.type == DictionaryData.Where(p => p.FullName == "首件检").First().Id && p.name == "换模具").First();
|
var remark = RemarkAttribute.GetRemark(enumTriggerEvent);
|
||||||
if (enumTriggerEvent == EnumTriggerEvent.首件检换物料批号)
|
TriggerEvent = _repository.AsSugarClient().Queryable<QcTriggerEvent>().Where(p => p.type == DictionaryData.Where(p => p.FullName == remark.CheckType).First().Id && p.name == remark.CheckContent).First();
|
||||||
TriggerEvent = _repository.AsSugarClient().Queryable<QcTriggerEvent>().Where(p => p.type == DictionaryData.Where(p => p.FullName == "首件检").First().Id && p.name == "换物料批号").First();
|
|
||||||
if (enumTriggerEvent == EnumTriggerEvent.首件检换物料编号)
|
|
||||||
TriggerEvent = _repository.AsSugarClient().Queryable<QcTriggerEvent>().Where(p => p.type == DictionaryData.Where(p => p.FullName == "首件检").First().Id && p.name == "换物料编号").First();
|
|
||||||
if (enumTriggerEvent == EnumTriggerEvent.首件检新的生产任务)
|
|
||||||
TriggerEvent = _repository.AsSugarClient().Queryable<QcTriggerEvent>().Where(p => p.type == DictionaryData.Where(p => p.FullName == "首件检").First().Id && p.name == "新的生产任务").First();
|
|
||||||
if (enumTriggerEvent == EnumTriggerEvent.首件检生产任务暂停)
|
|
||||||
TriggerEvent = _repository.AsSugarClient().Queryable<QcTriggerEvent>().Where(p => p.type == DictionaryData.Where(p => p.FullName == "首件检").First().Id && p.name == "生产任务暂停").First();
|
|
||||||
if (enumTriggerEvent == EnumTriggerEvent.出厂检按入厂频次)
|
|
||||||
TriggerEvent = _repository.AsSugarClient().Queryable<QcTriggerEvent>().Where(p => p.type == DictionaryData.Where(p => p.FullName == "出厂检").First().Id && p.name == "按入厂频次").First();
|
|
||||||
if (enumTriggerEvent == EnumTriggerEvent.入厂检按物料频次)
|
|
||||||
TriggerEvent = _repository.AsSugarClient().Queryable<QcTriggerEvent>().Where(p => p.type == DictionaryData.Where(p => p.FullName == "入厂检").First().Id && p.name == "按物料频次").First();
|
|
||||||
if (enumTriggerEvent == EnumTriggerEvent.入厂检按物料编号)
|
|
||||||
TriggerEvent = _repository.AsSugarClient().Queryable<QcTriggerEvent>().Where(p => p.type == DictionaryData.Where(p => p.FullName == "入厂检").First().Id && p.name == "按物料编号").First();
|
|
||||||
if (enumTriggerEvent == EnumTriggerEvent.生产检定量)
|
|
||||||
TriggerEvent = _repository.AsSugarClient().Queryable<QcTriggerEvent>().Where(p => p.type == DictionaryData.Where(p => p.FullName == "生产检").First().Id && p.name == "定量").First();
|
|
||||||
if (enumTriggerEvent == EnumTriggerEvent.生产检定码)
|
|
||||||
TriggerEvent = _repository.AsSugarClient().Queryable<QcTriggerEvent>().Where(p => p.type == DictionaryData.Where(p => p.FullName == "生产检").First().Id && p.name == "定码").First();
|
|
||||||
if (enumTriggerEvent == EnumTriggerEvent.生产检产出频次)
|
|
||||||
TriggerEvent = _repository.AsSugarClient().Queryable<QcTriggerEvent>().Where(p => p.type == DictionaryData.Where(p => p.FullName == "生产检").First().Id && p.name == "产出频次").First();
|
|
||||||
if (enumTriggerEvent == EnumTriggerEvent.生产检固定次数)
|
|
||||||
TriggerEvent = _repository.AsSugarClient().Queryable<QcTriggerEvent>().Where(p => p.type == DictionaryData.Where(p => p.FullName == "生产检").First().Id && p.name == "固定次数").First();
|
|
||||||
if (enumTriggerEvent == EnumTriggerEvent.生产检按流转卡)
|
|
||||||
TriggerEvent = _repository.AsSugarClient().Queryable<QcTriggerEvent>().Where(p => p.type == DictionaryData.Where(p => p.FullName == "生产检").First().Id && p.name == "按流转卡").First();
|
|
||||||
Query = Query.Where((a, b, c, d, e) => b.triggertype == "3" && b.content!.Contains(TriggerEvent.id));
|
Query = Query.Where((a, b, c, d, e) => b.triggertype == "3" && b.content!.Contains(TriggerEvent.id));
|
||||||
}
|
}
|
||||||
|
private void Filter(List<QcCheckPlanH> QcCheckPlanHs, TriggerPlanEntity entity)
|
||||||
|
{
|
||||||
|
var removePlanHs = new List<QcCheckPlanH>();
|
||||||
|
var enumTriggerEvent = entity.triggerevent;
|
||||||
|
foreach (var plan in QcCheckPlanHs)
|
||||||
|
{
|
||||||
|
if (enumTriggerEvent == EnumTriggerEvent.首件检换模具)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
if (enumTriggerEvent == EnumTriggerEvent.首件检换物料批号)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enumTriggerEvent == EnumTriggerEvent.首件检换物料编号)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
if (enumTriggerEvent == EnumTriggerEvent.首件检新的生产任务)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
if (enumTriggerEvent == EnumTriggerEvent.首件检生产任务暂停)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enumTriggerEvent == EnumTriggerEvent.出厂检按入厂频次)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
if (enumTriggerEvent == EnumTriggerEvent.入厂检按物料频次)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
if (enumTriggerEvent == EnumTriggerEvent.入厂检按物料编号)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
if (enumTriggerEvent == EnumTriggerEvent.生产检定量)
|
||||||
|
{
|
||||||
|
var 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.生产检产出频次)
|
||||||
|
{
|
||||||
|
var number = _repository.AsSugarClient().Queryable<QcCheckPlanAdd>().Where(p => p.mainid == plan.id).First().number;
|
||||||
|
if ((entity.pronum % number) != 0)
|
||||||
|
removePlanHs.Add(plan);
|
||||||
|
}
|
||||||
|
if (enumTriggerEvent == EnumTriggerEvent.生产检固定次数)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
if (enumTriggerEvent == EnumTriggerEvent.生产检按流转卡)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
removePlanHs.ForEach(p => { QcCheckPlanHs.Remove(p); });
|
||||||
|
}
|
||||||
private async Task SaveTask(List<QcCheckPlanH> planhs, TriggerPlanEntity entity)
|
private async Task SaveTask(List<QcCheckPlanH> planhs, TriggerPlanEntity entity)
|
||||||
{
|
{
|
||||||
var DictionaryData = _repository.AsSugarClient().Queryable<DictionaryDataEntity, DictionaryTypeEntity>
|
var DictionaryData = _repository.AsSugarClient().Queryable<DictionaryDataEntity, DictionaryTypeEntity>
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ namespace Tnb.WarehouseMgr.Entities.Dto.Outputs
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 齐套明细Json
|
/// 齐套明细Json
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string CollocationSchemeDsJson { get; set; }
|
public string CollocationSchemeDsJson { get; set; }=string.Empty;
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public List<WmsCollocationSchemeD>? list { get; set; }
|
public List<WmsCollocationSchemeD>? list { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ using Mapster;
|
|||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.CodeAnalysis;
|
using Microsoft.CodeAnalysis;
|
||||||
|
using NPOI.HPSF;
|
||||||
using NPOI.OpenXmlFormats.Wordprocessing;
|
using NPOI.OpenXmlFormats.Wordprocessing;
|
||||||
using Polly.Timeout;
|
using Polly.Timeout;
|
||||||
using Senparc.Weixin.Work.AdvancedAPIs.OaDataOpen;
|
using Senparc.Weixin.Work.AdvancedAPIs.OaDataOpen;
|
||||||
@@ -187,6 +188,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
//任务链属性处理内部函数
|
//任务链属性处理内部函数
|
||||||
async Task _taskChainAttrHandle(List<WmsDistaskH> items, List<WmsPretaskH> areaPreTasks, int moveNum)
|
async Task _taskChainAttrHandle(List<WmsDistaskH> items, List<WmsPretaskH> areaPreTasks, int moveNum)
|
||||||
{
|
{
|
||||||
|
var groupCode = await _billRullService.GetBillNumber(WmsWareHouseConst.WMS_TASK_EXECUTE_ENCODE);
|
||||||
await Task.Run(() =>
|
await Task.Run(() =>
|
||||||
{
|
{
|
||||||
if (moveNum == 1 || (moveNum > areaPreTasks.Count && areaPreTasks.Count == 1))
|
if (moveNum == 1 || (moveNum > areaPreTasks.Count && areaPreTasks.Count == 1))
|
||||||
@@ -194,19 +196,34 @@ namespace Tnb.WarehouseMgr
|
|||||||
items.ForEach(x =>
|
items.ForEach(x =>
|
||||||
{
|
{
|
||||||
x.is_chain = 0;
|
x.is_chain = 0;
|
||||||
|
|
||||||
});
|
});
|
||||||
|
items[^items.Count].groups = $"{groupCode}-1";
|
||||||
}
|
}
|
||||||
else if ((moveNum > areaPreTasks.Count && areaPreTasks.Count > 1) || moveNum < areaPreTasks.Count)
|
else if ((moveNum > areaPreTasks.Count && areaPreTasks.Count > 1) || moveNum < areaPreTasks.Count)
|
||||||
{
|
{
|
||||||
items.ForEach(x => x.is_chain = 1);
|
items.ForEach(x => x.is_chain = 1);
|
||||||
//items[0].chain_type = "1";
|
var mod = items.Count % moveNum > 0 ? items.Count / moveNum + 1 : items.Count / moveNum;
|
||||||
//for (int i = 0; i < items.Count; i++)
|
int start = 0, end = moveNum;
|
||||||
//{
|
var arrary = items.ToArray();
|
||||||
// if (i == 0 || i == items.Count - 1) continue;
|
var itemsCount = items.Count;
|
||||||
// items[i].chain_type = "2";
|
for (int i = 1; i <= mod; i++)
|
||||||
//}
|
{
|
||||||
//items[^1].chain_type = "3";
|
if (start >= itemsCount) break;
|
||||||
|
var subArray = arrary[start..end];
|
||||||
|
for (int j = 0, arrLen = subArray.Length; j < arrLen; j++)
|
||||||
|
{
|
||||||
|
subArray[j].groups = $"{groupCode}-{i}";
|
||||||
|
}
|
||||||
|
start = end;
|
||||||
|
if ((end + moveNum) >= arrary.Length)
|
||||||
|
{
|
||||||
|
end = arrary.Length;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
end = end + moveNum;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -234,12 +251,12 @@ namespace Tnb.WarehouseMgr
|
|||||||
{
|
{
|
||||||
var moveNum = itGroup.First().move_num;
|
var moveNum = itGroup.First().move_num;
|
||||||
var items = itGroup.Adapt<List<WmsDistaskH>>();
|
var items = itGroup.Adapt<List<WmsDistaskH>>();
|
||||||
items.ForEach(x =>
|
for (int i = 0, cnt = items.Count; i < cnt; i++)
|
||||||
{
|
{
|
||||||
x.id = SnowflakeIdHelper.NextId();
|
items[i].id = SnowflakeIdHelper.NextId();
|
||||||
x.status = WmsWareHouseConst.TASK_BILL_STATUS_DZX_ID;
|
items[i].status = WmsWareHouseConst.TASK_BILL_STATUS_DZX_ID;
|
||||||
x.bill_code = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_TASK_EXECUTE_ENCODE).GetAwaiter().GetResult();
|
items[i].bill_code = await _billRullService.GetBillNumber(WmsWareHouseConst.WMS_TASK_EXECUTE_ENCODE);
|
||||||
});
|
}
|
||||||
|
|
||||||
if (moveNum == 1)
|
if (moveNum == 1)
|
||||||
{
|
{
|
||||||
@@ -508,7 +525,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
if (arr.Length > 1)
|
if (arr.Length > 1)
|
||||||
{
|
{
|
||||||
var subArr = arr[..^1];
|
var subArr = arr[..^1];
|
||||||
Array.ForEach(subArr, a => a.chain_type = "1");
|
System.Array.ForEach(subArr, a => a.chain_type = "1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,7 +67,9 @@ namespace Tnb.WarehouseMgr
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var carry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.carry_code == input.carry_code);
|
var carry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.carry_code == input.carry_code);
|
||||||
var carryCodes = await _db.Queryable<WmsCarryCode>().Where(it => it.carry_id == carry.id).ToListAsync();
|
var carryDs = await _db.Queryable<WmsCarryD>().Where(it => it.carry_id == carry.id).ToListAsync();
|
||||||
|
var mCarryIds = carryDs.Select(x=>x.membercarry_id).ToList();
|
||||||
|
var carryCodes = await _db.Queryable<WmsCarryCode>().Where(it => mCarryIds.Contains(it.carry_id)).ToListAsync();
|
||||||
data = carry.Adapt<CarryQueryOutput>();
|
data = carry.Adapt<CarryQueryOutput>();
|
||||||
data.wmsCarryCodes = carryCodes.Adapt<List<CarryCodeQueryOutput>>();
|
data.wmsCarryCodes = carryCodes.Adapt<List<CarryCodeQueryOutput>>();
|
||||||
|
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
[NonAction]
|
[NonAction]
|
||||||
public async Task<int> UpdateNullCarry(WmsCarryH carryObj)
|
public async Task<int> UpdateNullCarry(WmsCarryH carryObj)
|
||||||
{
|
{
|
||||||
var row = -1;
|
var row = 1;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
carryObj.status = 0;
|
carryObj.status = 0;
|
||||||
@@ -172,7 +172,8 @@ namespace Tnb.WarehouseMgr
|
|||||||
carryObj.collocation_scheme_code = null;
|
carryObj.collocation_scheme_code = null;
|
||||||
carryObj.source_id = null;
|
carryObj.source_id = null;
|
||||||
carryObj.source_code = null;
|
carryObj.source_code = null;
|
||||||
row = await _db.CopyNew().Updateable(carryObj).ExecuteCommandAsync();
|
Task<int>.Run(() => _db.CopyNew().Updateable(carryObj).ExecuteCommandAsync());
|
||||||
|
//row = await _db.CopyNew().Updateable(carryObj).ExecuteCommandAsync();
|
||||||
//删除对应明细表
|
//删除对应明细表
|
||||||
//删除载具明细
|
//删除载具明细
|
||||||
await _db.CopyNew().Deleteable<WmsCarryD>().Where(it => it.carry_id == carryObj.id).ExecuteCommandHasChangeAsync();
|
await _db.CopyNew().Deleteable<WmsCarryD>().Where(it => it.carry_id == carryObj.id).ExecuteCommandHasChangeAsync();
|
||||||
@@ -183,12 +184,14 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
row = 0;
|
||||||
Log.Error("更新空载具出错", ex);
|
Log.Error("更新空载具出错", ex);
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
return row;
|
return row;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private async Task<bool> _updateSubCarry<T>(ExChangeCarryInput input) where T : BaseEntity<string>, IWmsCarryEntity, new()
|
private async Task<bool> _updateSubCarry<T>(ExChangeCarryInput input) where T : BaseEntity<string>, IWmsCarryEntity, new()
|
||||||
{
|
{
|
||||||
var row = -1;
|
var row = -1;
|
||||||
|
|||||||
@@ -341,15 +341,26 @@ namespace Tnb.WarehouseMgr
|
|||||||
if (input.IsNull()) throw new ArgumentNullException(nameof(input));
|
if (input.IsNull()) throw new ArgumentNullException(nameof(input));
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var kittingOut = input[^1];
|
//var kittingOut = input[^1];
|
||||||
var curCarry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == kittingOut.carry_id);
|
//if ((!kittingOut.carry_id.IsNullOrEmpty() || !kittingOut.carry_code.IsNullOrEmpty()) && !kittingOut.location_code.IsNullOrEmpty())
|
||||||
var endLocation = await _db.Queryable<BasLocation>().SingleAsync(it => it.id == kittingOut.location_id);
|
//{
|
||||||
var isMatch = await IsCarryAndLocationMatchByCarryStd(curCarry, endLocation);
|
// WmsCarryH? curCarry = null;
|
||||||
if (!isMatch) throw new AppFriendlyException("该载具无法放置到目标库位", 500);
|
// if (!kittingOut.carry_id.IsNullOrEmpty())
|
||||||
|
// curCarry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == kittingOut.carry_id);
|
||||||
|
// else
|
||||||
|
// curCarry = await _db.Queryable<WmsCarryH>().FirstAsync(it => it.carry_code == kittingOut.carry_code);
|
||||||
|
|
||||||
|
// var endLocation = await _db.Queryable<BasLocation>().SingleAsync(it => it.id == kittingOut.location_code);
|
||||||
|
// var isMatch = await IsCarryAndLocationMatchByCarryStd(curCarry, endLocation);
|
||||||
|
// if (!isMatch) throw new AppFriendlyException("该载具无法放置到目标库位", 500);
|
||||||
|
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
await _db.Ado.BeginTranAsync();
|
await _db.Ado.BeginTranAsync();
|
||||||
List<WmsKittingoutD> kittingOutDs = new();
|
List<WmsKittingoutD> kittingOutDs = new();
|
||||||
var kittingOuts = input.Adapt<List<WmsKittingoutH>>();
|
var kittingOuts = input.Adapt<List<WmsKittingoutH>>();
|
||||||
|
var ids = input.Select(x => x.location_code).ToArray();
|
||||||
|
|
||||||
for (int i = 0; i < kittingOuts.Count; i++)
|
for (int i = 0; i < kittingOuts.Count; i++)
|
||||||
{
|
{
|
||||||
@@ -360,6 +371,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
x.bill_type = WmsWareHouseConst.BIZTYPE_WMSKITTINGOUTSTK_ID;
|
x.bill_type = WmsWareHouseConst.BIZTYPE_WMSKITTINGOUTSTK_ID;
|
||||||
x.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
|
x.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
|
||||||
x.biz_type = WmsWareHouseConst.BIZTYPE_WMSKITTINGOUTSTK_ID;
|
x.biz_type = WmsWareHouseConst.BIZTYPE_WMSKITTINGOUTSTK_ID;
|
||||||
|
x.location_id = ids[i];
|
||||||
var d = input[i]?.wmsKittingoutDs?.Adapt<List<WmsKittingoutD>>();
|
var d = input[i]?.wmsKittingoutDs?.Adapt<List<WmsKittingoutD>>();
|
||||||
d?.ForEach(it =>
|
d?.ForEach(it =>
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user