Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
2023-07-21 16:47:42 +08:00
13 changed files with 229 additions and 58 deletions

View File

@@ -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);

View File

@@ -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" />

View File

@@ -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

View File

@@ -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; }
} }
} }

View File

@@ -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; }
} }
} }

View File

@@ -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]);
}
}
} }

View File

@@ -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);
} }
} }

View File

@@ -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>

View File

@@ -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; }
} }

View File

@@ -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");
} }
} }
} }

View File

@@ -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>>();

View File

@@ -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;

View File

@@ -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 =>
{ {