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 NPOI.SS.Formula.Functions;
|
||||
using Tnb.PerMgr.Entities;
|
||||
using Tnb.QcMgr.Interfaces;
|
||||
using Tnb.QcMgr.Entities.Dto;
|
||||
using Tnb.QcMgr.Entities.Enums;
|
||||
|
||||
// using Tnb.PerMgr.Entities;
|
||||
|
||||
@@ -67,7 +70,7 @@ namespace Tnb.ProductionMgr
|
||||
private static Dictionary<string, object> _dicProcess = new Dictionary<string, object>();
|
||||
private readonly ISqlSugarClient _db;
|
||||
private readonly IBillRullService _billRuleService;
|
||||
|
||||
private readonly IQcCheckPlanService _qcCheckPlanService;
|
||||
|
||||
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
|
||||
public PrdMoTaskService(
|
||||
@@ -76,7 +79,8 @@ namespace Tnb.ProductionMgr
|
||||
IDictionaryDataService dictionaryDataService,
|
||||
IRunService runService,
|
||||
IBillRullService billRullService,
|
||||
IVisualDevService visualDevService
|
||||
IVisualDevService visualDevService,
|
||||
IQcCheckPlanService qcCheckPlanService
|
||||
)
|
||||
{
|
||||
_repository = repository;
|
||||
@@ -88,7 +92,7 @@ namespace Tnb.ProductionMgr
|
||||
OverideFuncs.DeleteAsync = Delete;
|
||||
OverideFuncs.GetListAsync = GetList;
|
||||
_billRuleService = billRullService;
|
||||
|
||||
_qcCheckPlanService=qcCheckPlanService;
|
||||
}
|
||||
|
||||
#region Get
|
||||
@@ -1299,7 +1303,19 @@ namespace Tnb.ProductionMgr
|
||||
|
||||
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)
|
||||
{
|
||||
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);
|
||||
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();
|
||||
}
|
||||
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="..\..\message\Tnb.Message\Tnb.Message.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="..\..\visualdev\Tnb.VisualDev.Engine\Tnb.VisualDev.Engine.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? triggertype { get; set; }
|
||||
public string? content { get; set; }
|
||||
public int? number { get; set; }
|
||||
public List<CheckPlanTypeInput>? checktypes { get; set; }
|
||||
}
|
||||
public class CheckPlanTypeInput
|
||||
@@ -38,10 +39,11 @@ namespace Tnb.QcMgr.Entities
|
||||
{
|
||||
public string? id { get; set; }
|
||||
public bool hasadd { get; set; }
|
||||
public bool hasitem{ get; set; }
|
||||
public bool hasitem { get; set; }
|
||||
public string? addid { get; set; }
|
||||
public string? triggertype { get; set; }
|
||||
public string? content { get; set; }
|
||||
public int? number { get; set; }
|
||||
public List<CheckPlanTypeOut>? checktypes { get; set; }
|
||||
}
|
||||
public class CheckPlanTypeOut
|
||||
|
||||
@@ -37,5 +37,18 @@ namespace Tnb.QcMgr.Entities.Dto
|
||||
/// 触发条件
|
||||
/// </summary>
|
||||
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>
|
||||
public string? mainid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 频次/数量
|
||||
/// </summary>
|
||||
public int? number { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
@@ -14,18 +16,48 @@ namespace Tnb.QcMgr.Entities.Enums
|
||||
}
|
||||
public enum EnumTriggerEvent
|
||||
{
|
||||
[Remark("首件检", "换模具")]
|
||||
首件检换模具 = 1,
|
||||
[Remark("首件检", "换物料批号")]
|
||||
首件检换物料批号 = 2,
|
||||
[Remark("首件检", "换物料编号")]
|
||||
首件检换物料编号 = 3,
|
||||
[Remark("首件检", "新的生产任务")]
|
||||
首件检新的生产任务 = 4,
|
||||
[Remark("首件检", "生产任务暂停")]
|
||||
首件检生产任务暂停 = 5,
|
||||
[Remark("出厂检", "按入厂频次")]
|
||||
出厂检按入厂频次 = 6,
|
||||
[Remark("入厂检", "按物料频次")]
|
||||
入厂检按物料频次 = 7,
|
||||
[Remark("入厂检", "按物料编号")]
|
||||
入厂检按物料编号 = 8,
|
||||
[Remark("生产检", "定量")]
|
||||
生产检定量 = 9,
|
||||
[Remark("生产检", "定码")]
|
||||
生产检定码 = 10,
|
||||
[Remark("生产检", "产出频次")]
|
||||
生产检产出频次 = 11,
|
||||
[Remark("生产检", "固定次数")]
|
||||
生产检固定次数 = 12,
|
||||
[Remark("生产检", "按流转卡")]
|
||||
生产检按流转卡 = 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>
|
||||
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 Aspose.Cells.Drawing;
|
||||
using COSXML.Model.Tag;
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Core.Manager;
|
||||
using JNPF.Common.Enums;
|
||||
using JNPF.Common.Security;
|
||||
@@ -93,6 +94,7 @@ namespace Tnb.QcMgr
|
||||
CheckPlansOut.addid = QcCheckPlanAdd.id;
|
||||
CheckPlansOut.triggertype = QcCheckPlanAdd.triggertype!;
|
||||
CheckPlansOut.content = QcCheckPlanAdd.content!;
|
||||
CheckPlansOut.number= QcCheckPlanAdd.number;
|
||||
}
|
||||
if (QcCheckPlanDs != null && QcCheckPlanDs.Count > 0)
|
||||
{
|
||||
@@ -191,6 +193,7 @@ namespace Tnb.QcMgr
|
||||
QcCheckPlanAdd.mainid = CheckPlanInput.mainid;
|
||||
QcCheckPlanAdd.triggertype = CheckPlanInput.triggertype;
|
||||
QcCheckPlanAdd.content = CheckPlanInput.content;
|
||||
QcCheckPlanAdd.number = CheckPlanInput.number;
|
||||
List<QcCheckPlanD> QcCheckPlanDs = new List<QcCheckPlanD>();
|
||||
if (CheckPlanInput.checktypes != null)
|
||||
{
|
||||
@@ -276,49 +279,93 @@ namespace Tnb.QcMgr
|
||||
JoinType.Left,a.id == d.planid,
|
||||
JoinType.Left,a.id == e.planid,
|
||||
});
|
||||
GetQuery(Query, entity.triggerevent);
|
||||
GetQuery(Query, entity);
|
||||
var list = await Query
|
||||
.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.workid), (a, b, c, d, e) => e.workid == entity.workid).ToListAsync();
|
||||
Filter(list, entity);
|
||||
if (list.Count > 0)
|
||||
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>
|
||||
((a, b) => new object[] { JoinType.Left, a.DictionaryTypeId == b.Id, })
|
||||
.Where((a, b) => b.FullName == "质量方案类型").ToList();
|
||||
var TriggerEvent = new QcTriggerEvent();
|
||||
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();
|
||||
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();
|
||||
var enumTriggerEvent = entity.triggerevent;
|
||||
var remark = RemarkAttribute.GetRemark(enumTriggerEvent);
|
||||
TriggerEvent = _repository.AsSugarClient().Queryable<QcTriggerEvent>().Where(p => p.type == DictionaryData.Where(p => p.FullName == remark.CheckType).First().Id && p.name == remark.CheckContent).First();
|
||||
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)
|
||||
{
|
||||
var DictionaryData = _repository.AsSugarClient().Queryable<DictionaryDataEntity, DictionaryTypeEntity>
|
||||
|
||||
@@ -70,7 +70,7 @@ namespace Tnb.WarehouseMgr.Entities.Dto.Outputs
|
||||
/// <summary>
|
||||
/// 齐套明细Json
|
||||
/// </summary>
|
||||
public string CollocationSchemeDsJson { get; set; }
|
||||
public string CollocationSchemeDsJson { get; set; }=string.Empty;
|
||||
[JsonIgnore]
|
||||
public List<WmsCollocationSchemeD>? list { get; set; }
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ using Mapster;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using NPOI.HPSF;
|
||||
using NPOI.OpenXmlFormats.Wordprocessing;
|
||||
using Polly.Timeout;
|
||||
using Senparc.Weixin.Work.AdvancedAPIs.OaDataOpen;
|
||||
@@ -187,6 +188,7 @@ namespace Tnb.WarehouseMgr
|
||||
//任务链属性处理内部函数
|
||||
async Task _taskChainAttrHandle(List<WmsDistaskH> items, List<WmsPretaskH> areaPreTasks, int moveNum)
|
||||
{
|
||||
var groupCode = await _billRullService.GetBillNumber(WmsWareHouseConst.WMS_TASK_EXECUTE_ENCODE);
|
||||
await Task.Run(() =>
|
||||
{
|
||||
if (moveNum == 1 || (moveNum > areaPreTasks.Count && areaPreTasks.Count == 1))
|
||||
@@ -194,19 +196,34 @@ namespace Tnb.WarehouseMgr
|
||||
items.ForEach(x =>
|
||||
{
|
||||
x.is_chain = 0;
|
||||
|
||||
});
|
||||
items[^items.Count].groups = $"{groupCode}-1";
|
||||
}
|
||||
else if ((moveNum > areaPreTasks.Count && areaPreTasks.Count > 1) || moveNum < areaPreTasks.Count)
|
||||
{
|
||||
items.ForEach(x => x.is_chain = 1);
|
||||
//items[0].chain_type = "1";
|
||||
//for (int i = 0; i < items.Count; i++)
|
||||
//{
|
||||
// if (i == 0 || i == items.Count - 1) continue;
|
||||
// items[i].chain_type = "2";
|
||||
//}
|
||||
//items[^1].chain_type = "3";
|
||||
var mod = items.Count % moveNum > 0 ? items.Count / moveNum + 1 : items.Count / moveNum;
|
||||
int start = 0, end = moveNum;
|
||||
var arrary = items.ToArray();
|
||||
var itemsCount = items.Count;
|
||||
for (int i = 1; i <= mod; i++)
|
||||
{
|
||||
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 items = itGroup.Adapt<List<WmsDistaskH>>();
|
||||
items.ForEach(x =>
|
||||
for (int i = 0, cnt = items.Count; i < cnt; i++)
|
||||
{
|
||||
x.id = SnowflakeIdHelper.NextId();
|
||||
x.status = WmsWareHouseConst.TASK_BILL_STATUS_DZX_ID;
|
||||
x.bill_code = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_TASK_EXECUTE_ENCODE).GetAwaiter().GetResult();
|
||||
});
|
||||
items[i].id = SnowflakeIdHelper.NextId();
|
||||
items[i].status = WmsWareHouseConst.TASK_BILL_STATUS_DZX_ID;
|
||||
items[i].bill_code = await _billRullService.GetBillNumber(WmsWareHouseConst.WMS_TASK_EXECUTE_ENCODE);
|
||||
}
|
||||
|
||||
if (moveNum == 1)
|
||||
{
|
||||
@@ -508,7 +525,7 @@ namespace Tnb.WarehouseMgr
|
||||
if (arr.Length > 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
|
||||
{
|
||||
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.wmsCarryCodes = carryCodes.Adapt<List<CarryCodeQueryOutput>>();
|
||||
|
||||
|
||||
@@ -157,7 +157,7 @@ namespace Tnb.WarehouseMgr
|
||||
[NonAction]
|
||||
public async Task<int> UpdateNullCarry(WmsCarryH carryObj)
|
||||
{
|
||||
var row = -1;
|
||||
var row = 1;
|
||||
try
|
||||
{
|
||||
carryObj.status = 0;
|
||||
@@ -172,7 +172,8 @@ namespace Tnb.WarehouseMgr
|
||||
carryObj.collocation_scheme_code = null;
|
||||
carryObj.source_id = 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();
|
||||
@@ -183,12 +184,14 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error("更新空载具出错",ex);
|
||||
row = 0;
|
||||
Log.Error("更新空载具出错", ex);
|
||||
throw;
|
||||
}
|
||||
return row;
|
||||
}
|
||||
|
||||
|
||||
private async Task<bool> _updateSubCarry<T>(ExChangeCarryInput input) where T : BaseEntity<string>, IWmsCarryEntity, new()
|
||||
{
|
||||
var row = -1;
|
||||
|
||||
@@ -341,15 +341,26 @@ namespace Tnb.WarehouseMgr
|
||||
if (input.IsNull()) throw new ArgumentNullException(nameof(input));
|
||||
try
|
||||
{
|
||||
var kittingOut = input[^1];
|
||||
var curCarry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == kittingOut.carry_id);
|
||||
var endLocation = await _db.Queryable<BasLocation>().SingleAsync(it => it.id == kittingOut.location_id);
|
||||
var isMatch = await IsCarryAndLocationMatchByCarryStd(curCarry, endLocation);
|
||||
if (!isMatch) throw new AppFriendlyException("该载具无法放置到目标库位", 500);
|
||||
//var kittingOut = input[^1];
|
||||
//if ((!kittingOut.carry_id.IsNullOrEmpty() || !kittingOut.carry_code.IsNullOrEmpty()) && !kittingOut.location_code.IsNullOrEmpty())
|
||||
//{
|
||||
// WmsCarryH? curCarry = null;
|
||||
// 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();
|
||||
List<WmsKittingoutD> kittingOutDs = new();
|
||||
var kittingOuts = input.Adapt<List<WmsKittingoutH>>();
|
||||
var ids = input.Select(x => x.location_code).ToArray();
|
||||
|
||||
for (int i = 0; i < kittingOuts.Count; i++)
|
||||
{
|
||||
@@ -360,6 +371,7 @@ namespace Tnb.WarehouseMgr
|
||||
x.bill_type = WmsWareHouseConst.BIZTYPE_WMSKITTINGOUTSTK_ID;
|
||||
x.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
|
||||
x.biz_type = WmsWareHouseConst.BIZTYPE_WMSKITTINGOUTSTK_ID;
|
||||
x.location_id = ids[i];
|
||||
var d = input[i]?.wmsKittingoutDs?.Adapt<List<WmsKittingoutD>>();
|
||||
d?.ForEach(it =>
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user