齐套等
This commit is contained in:
@@ -36,6 +36,8 @@ using Org.BouncyCastle.Asn1.X509.Qualified;
|
||||
using Qiniu.Util;
|
||||
using Senparc.CO2NET.Helpers.Serializers;
|
||||
using SqlSugar;
|
||||
using Tnb.BasicData;
|
||||
|
||||
//using Swashbuckle.AspNetCore.SwaggerGen;
|
||||
using Tnb.BasicData.Entities;
|
||||
using Tnb.Common.Extension;
|
||||
@@ -95,6 +97,8 @@ namespace Tnb.ProductionMgr
|
||||
private static Timer? F2KTPsupplementtimer;
|
||||
// 原材料仓内转移
|
||||
private static Timer? YCLInternalTransfertimer;
|
||||
// 生成物料齐套配送计划
|
||||
private static Timer? WmsMaterialkittimer;
|
||||
|
||||
// 电梯
|
||||
private static Timer? elevatorTimer;
|
||||
@@ -118,6 +122,8 @@ namespace Tnb.ProductionMgr
|
||||
public SemaphoreSlim s_taskFloor4DMC2CPKService = new(1);
|
||||
public SemaphoreSlim s_taskF2KTPsupplement = new(1);
|
||||
public SemaphoreSlim s_taskYCLInternalTransfer = new(1);
|
||||
public SemaphoreSlim s_taskWmsMaterialkit = new(1);
|
||||
|
||||
/// <summary>
|
||||
/// AGV到电梯任务
|
||||
/// </summary>
|
||||
@@ -144,6 +150,7 @@ namespace Tnb.ProductionMgr
|
||||
private ISqlSugarClient db_Floor4DMC2CPK;
|
||||
private ISqlSugarClient db_F2KTPsupplement;
|
||||
private ISqlSugarClient db_YCLInternalTransfer;
|
||||
private ISqlSugarClient db_WmsMaterialkit;
|
||||
|
||||
|
||||
|
||||
@@ -202,6 +209,7 @@ namespace Tnb.ProductionMgr
|
||||
db_Floor4DMC2CPK = repository.CopyNew();
|
||||
db_F2KTPsupplement = repository.CopyNew();
|
||||
db_YCLInternalTransfer = repository.CopyNew();
|
||||
db_WmsMaterialkit = repository.CopyNew();
|
||||
|
||||
List<string> elevatorAreas = repository.CopyNew().Queryable<WmsElevatorH>().Select(r => r.area_code).Distinct().ToList();
|
||||
foreach (var s_elevatorArea in elevatorAreas)
|
||||
@@ -2700,7 +2708,233 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
// 物料齐套配送记录
|
||||
private async void WmsMaterialkit(object? args)
|
||||
{
|
||||
if (s_taskWmsMaterialkit.CurrentCount == 0)
|
||||
return;
|
||||
await s_taskWmsMaterialkit.WaitAsync();
|
||||
Stopwatch stopwatch = new Stopwatch();
|
||||
stopwatch.Start();
|
||||
try
|
||||
{
|
||||
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行生成物料齐套配送记录");
|
||||
LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行生成物料齐套配送记录");
|
||||
|
||||
List<PrdMoTask> prdMoTasks = await db_WmsMaterialkit.Queryable<PrdMoTask>().Where(r => r.mo_task_status == DictConst.InProgressEnCode
|
||||
&& !string.IsNullOrEmpty(r.parent_id)).ToListAsync();
|
||||
LoggerWmsMaterialkit.LogInformation($"查找到进行中的任务单:{string.Join(',', prdMoTasks.Select(r => r.mo_task_code))}");
|
||||
foreach (PrdMoTask prdMoTask in prdMoTasks)
|
||||
{
|
||||
List<PrdMoTask> rep_prdMoTasks = prdMoTasks.Where(r => r.workline_id == prdMoTask.workline_id && r.id != prdMoTask.id).ToList();
|
||||
if (rep_prdMoTasks.Count() > 0)
|
||||
{
|
||||
LoggerWmsMaterialkit.LogWarning($"存在与任务单{prdMoTask.mo_task_code}相同产线的状态为进行中的任务单{string.Join(',', rep_prdMoTasks.Select(r => r.mo_task_code))}");
|
||||
continue;
|
||||
}
|
||||
await db_WmsMaterialkit.Ado.BeginTranAsync();
|
||||
|
||||
WmsMaterialkitRecordH wmsMaterialkitRecordH = await db_WmsMaterialkit.Queryable<WmsMaterialkitRecordH>().Where(r => (r.status == WmsWareHouseConst.BILLSTATUS_ADD_ID || r.status == WmsWareHouseConst.BILLSTATUS_ON_ID)
|
||||
&& r.workline_id == prdMoTask.workline_id).FirstAsync();
|
||||
LoggerWmsMaterialkit.LogInformation($"查找任务单{prdMoTask.mo_task_code}的物料配送记录:{JsonConvert.SerializeObject(wmsMaterialkitRecordH)}");
|
||||
|
||||
if (wmsMaterialkitRecordH == null || (wmsMaterialkitRecordH != null && prdMoTask.id != wmsMaterialkitRecordH.mo_task_id))
|
||||
{
|
||||
if (wmsMaterialkitRecordH != null && prdMoTask.id != wmsMaterialkitRecordH.mo_task_id)
|
||||
{
|
||||
LoggerWmsMaterialkit.LogInformation($"取消任务单{prdMoTask.mo_task_code}的旧物料配送记录:{wmsMaterialkitRecordH.bill_code}");
|
||||
// 取消旧物料配送记录
|
||||
await db_WmsMaterialkit.Updateable<WmsMaterialkitRecordH>().SetColumns(r =>
|
||||
new WmsMaterialkitRecordH { status = WmsWareHouseConst.BILLSTATUS_CANCEL_ID, remark = $"由于任务单切换取消 {wmsMaterialkitRecordH.mo_task_code} -> {prdMoTask.mo_task_code}" })
|
||||
.Where(r => r.id == wmsMaterialkitRecordH.id).ExecuteCommandAsync();
|
||||
}
|
||||
// 生成物料配送记录
|
||||
BasMaterial basMaterial = await db_WmsMaterialkit.Queryable<BasMaterial>().Where(r => r.id == prdMoTask.material_id).FirstAsync();
|
||||
string Code = await _billRullService.GetBillNumber("WmsMaterialkitRecordH");
|
||||
wmsMaterialkitRecordH = new WmsMaterialkitRecordH();
|
||||
wmsMaterialkitRecordH.org_id = WmsWareHouseConst.AdministratorOrgId;
|
||||
wmsMaterialkitRecordH.create_id = WmsWareHouseConst.AdministratorUserId;
|
||||
wmsMaterialkitRecordH.create_time = DateTime.Now;
|
||||
wmsMaterialkitRecordH.bill_code = Code;
|
||||
wmsMaterialkitRecordH.mo_task_id = prdMoTask.id;
|
||||
wmsMaterialkitRecordH.mo_task_code = prdMoTask.mo_task_code;
|
||||
wmsMaterialkitRecordH.bom_id = prdMoTask.bom_id;
|
||||
wmsMaterialkitRecordH.material_id = prdMoTask.material_id;
|
||||
wmsMaterialkitRecordH.material_code = basMaterial.code;
|
||||
wmsMaterialkitRecordH.material_name = basMaterial.name;
|
||||
wmsMaterialkitRecordH.material_specification = basMaterial.material_specification;
|
||||
wmsMaterialkitRecordH.unit_code = prdMoTask.unit_id;
|
||||
wmsMaterialkitRecordH.qty = prdMoTask.scheduled_qty;
|
||||
wmsMaterialkitRecordH.workline_id = prdMoTask.workline_id;
|
||||
wmsMaterialkitRecordH.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
|
||||
wmsMaterialkitRecordH.times = 0;
|
||||
wmsMaterialkitRecordH.total_time = 0;
|
||||
|
||||
BasMbom basMbom = await db_WmsMaterialkit.Queryable<BasMbom>().Where(r => r.id == prdMoTask.bom_id).FirstAsync();
|
||||
if (basMbom == null)
|
||||
{
|
||||
LoggerWmsMaterialkit.LogWarning($"任务单{prdMoTask.mo_task_code}绑定的生产Bom id{prdMoTask.bom_id}找不到对应的生产Bom资料");
|
||||
continue;
|
||||
}
|
||||
|
||||
List<BasMbomInput> basMbomInputs = await db_WmsMaterialkit.Queryable<BasMbomInput>().Where(r => r.mbom_id == basMbom.id).ToListAsync();
|
||||
List<BasMaterial> materials = await db_WmsMaterialkit.Queryable<BasMaterial>().Where(r => basMbomInputs.Select(x => x.material_id).Contains(r.id)).ToListAsync();
|
||||
LoggerWmsMaterialkit.LogWarning($"任务单{prdMoTask.mo_task_code}绑定的生产Bom{prdMoTask.bom_id}找到对应的生产Bom清单{string.Join(',', basMbomInputs.Select(r => r.material_id))}");
|
||||
List<WmsMaterialkitRecordD> wmsMaterialkitRecordDs = new List<WmsMaterialkitRecordD>();
|
||||
foreach (BasMbomInput input in basMbomInputs)
|
||||
{
|
||||
BasMaterial material = materials.Where(r => r.id == input.material_id).First();
|
||||
if (material == null)
|
||||
{
|
||||
LoggerWmsMaterialkit.LogWarning($"任务单{prdMoTask.mo_task_code}绑定的生产Bom id{prdMoTask.bom_id}下的物料id{input.material_id}在物料档案中不存在");
|
||||
continue;
|
||||
}
|
||||
WmsMaterialkitRecordD wmsMaterialkitRecordD = new WmsMaterialkitRecordD();
|
||||
wmsMaterialkitRecordD.create_id = WmsWareHouseConst.AdministratorUserId;
|
||||
wmsMaterialkitRecordD.create_time = DateTime.Now;
|
||||
wmsMaterialkitRecordD.bill_id = wmsMaterialkitRecordH.id;
|
||||
wmsMaterialkitRecordD.material_id = material.id;
|
||||
wmsMaterialkitRecordD.material_code = material.code;
|
||||
wmsMaterialkitRecordD.material_name = material.name;
|
||||
wmsMaterialkitRecordD.material_specification = material.material_specification;
|
||||
wmsMaterialkitRecordD.unit_code = material.unit_id;
|
||||
wmsMaterialkitRecordD.plan_qty = prdMoTask.scheduled_qty * input.denominator / input.molecule;
|
||||
wmsMaterialkitRecordD.yxf_qty = 0;
|
||||
wmsMaterialkitRecordD.molecule = input.molecule;
|
||||
wmsMaterialkitRecordD.denominator = input.denominator;
|
||||
wmsMaterialkitRecordD.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
|
||||
wmsMaterialkitRecordD.times = 0;
|
||||
wmsMaterialkitRecordD.total_time = 0;
|
||||
wmsMaterialkitRecordDs.Add(wmsMaterialkitRecordD);
|
||||
}
|
||||
|
||||
await db_WmsMaterialkit.Insertable(wmsMaterialkitRecordH).ExecuteCommandAsync();
|
||||
await db_WmsMaterialkit.Insertable(wmsMaterialkitRecordDs).ExecuteCommandAsync();
|
||||
LoggerWmsMaterialkit.LogInformation($"生成任务单{prdMoTask.mo_task_code}的新物料配送记录:{wmsMaterialkitRecordH.bill_code}");
|
||||
}
|
||||
|
||||
await db_WmsMaterialkit.Ado.CommitTranAsync();
|
||||
}
|
||||
|
||||
List<WmsMaterialkitRecordH> wmsMaterialkitRecordHs = await db_WmsMaterialkit.Queryable<WmsMaterialkitRecordH>().Where(r => (r.status == WmsWareHouseConst.BILLSTATUS_ADD_ID
|
||||
|| r.status == WmsWareHouseConst.BILLSTATUS_ON_ID)).ToListAsync();
|
||||
LoggerWmsMaterialkit.LogInformation($"查找到需要运算的物料配送记录:{JsonConvert.SerializeObject(string.Join(',', wmsMaterialkitRecordHs.Select(r => r.bill_code)))}");
|
||||
|
||||
if (wmsMaterialkitRecordHs.Count == 0)
|
||||
return;
|
||||
|
||||
Stopwatch stopwatch_inv = new Stopwatch();
|
||||
stopwatch_inv.Start();
|
||||
// 暂存仓库存
|
||||
var zccinventory = await db_WmsMaterialkit.Queryable<WmsCarryH>()
|
||||
.InnerJoin<BasLocation>((a, b) => a.location_id == b.id)
|
||||
.InnerJoin<WmsCarryD>((a, b, c) => a.id == c.carry_id)
|
||||
.InnerJoin<WmsCarryCode>((a, b, c, d) => c.membercarry_id == d.carry_id)
|
||||
.InnerJoin<BasMaterial>((a, b, c, d, e) => d.material_id == e.id)
|
||||
.Where((a, b, c, d, e) => b.wh_id == WmsWareHouseConst.WAREHOUSE_ZCC_ID)
|
||||
.Select((a, b, c, d, e) => new customInventoryEntity
|
||||
{
|
||||
material_id = e.id,
|
||||
material_code = e.code,
|
||||
material_name = e.name,
|
||||
material_specification = e.material_specification,
|
||||
codeqty = d.codeqty,
|
||||
unit_code = d.unit_id
|
||||
}).ToListAsync();
|
||||
|
||||
// 正在配送
|
||||
var inroadinventory = await db_WmsMaterialkit.Queryable<WmsPretaskH>()
|
||||
.InnerJoin<WmsCarryH>((a, b) => a.carry_id == b.id)
|
||||
.InnerJoin<WmsCarryCode>((a, b, c) => c.carry_id == b.id)
|
||||
.InnerJoin<BasMaterial>((a, b, c, d) => d.id == c.material_id)
|
||||
.Where((a, b, c, d) => a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID && a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID
|
||||
&& (a.endlocation_id == WmsWareHouseConst.ZZCSSX111011 || a.endlocation_id == WmsWareHouseConst.ZZCSSX111012))
|
||||
.Select((a, b, c, d) => new customInventoryEntity
|
||||
{
|
||||
material_id = d.id,
|
||||
material_code = d.code,
|
||||
material_name = d.name,
|
||||
material_specification = d.material_specification,
|
||||
codeqty = c.codeqty,
|
||||
unit_code = c.unit_id
|
||||
}).ToListAsync();
|
||||
|
||||
// 中储仓库存
|
||||
var inventory_中储 = await db_WmsMaterialkit.Queryable<WmsCarryH>()
|
||||
.InnerJoin<BasLocation>((a, b) => a.location_id == b.id)
|
||||
.InnerJoin<WmsCarryD>((a, b, c) => a.id == c.carry_id)
|
||||
.InnerJoin<WmsCarryCode>((a, b, c, d) => c.membercarry_id == d.carry_id)
|
||||
.InnerJoin<BasMaterial>((a, b, c, d, e) => d.material_id == e.id)
|
||||
.Where((a, b, c, d, e) => b.wh_id == WmsWareHouseConst.WAREHOUSE_ZC_ID)
|
||||
.Select((a, b, c, d, e) => new customInventoryEntity
|
||||
{
|
||||
material_id = e.id,
|
||||
material_code = e.code,
|
||||
material_name = e.name,
|
||||
material_specification = e.material_specification,
|
||||
codeqty = d.codeqty,
|
||||
unit_code = d.unit_id
|
||||
}).ToListAsync();
|
||||
|
||||
List<customInventoryEntity> inventory = new List<customInventoryEntity>();
|
||||
inventory.AddRange(zccinventory);
|
||||
inventory.AddRange(inroadinventory);
|
||||
|
||||
inventory.GroupBy(g => new { g.material_id, g.material_code, g.material_name, g.material_specification, g.unit_code }).Select(g =>
|
||||
{
|
||||
customInventoryEntity newinventory = new customInventoryEntity();
|
||||
newinventory.material_id = g.Key.material_id;
|
||||
newinventory.material_code = g.Key.material_code;
|
||||
newinventory.material_name = g.Key.material_name;
|
||||
newinventory.material_specification = g.Key.material_specification;
|
||||
newinventory.unit_code = g.Key.unit_code;
|
||||
newinventory.codeqty = inventory.Where(r => r.material_id == newinventory.material_id && r.unit_code == newinventory.unit_code).Sum(s => s.codeqty);
|
||||
|
||||
return newinventory;
|
||||
});
|
||||
stopwatch_inv.Stop();
|
||||
LoggerWmsMaterialkit.LogInformation($"中储仓与暂存仓库存查询完成,耗时{stopwatch_inv.ElapsedMilliseconds} ms");
|
||||
|
||||
// 执行暂存仓库存检查与转库单下发
|
||||
foreach (WmsMaterialkitRecordH wmsMaterialkitRecord in wmsMaterialkitRecordHs)
|
||||
{
|
||||
Stopwatch stopwatch2 = new Stopwatch();
|
||||
stopwatch2.Start();
|
||||
await db_WmsMaterialkit.Ado.BeginTranAsync();
|
||||
|
||||
|
||||
|
||||
await db_WmsMaterialkit.Ado.CommitTranAsync();
|
||||
stopwatch2.Stop();
|
||||
LoggerWmsMaterialkit.LogInformation($"物料配送记录{wmsMaterialkitRecord.bill_code}已下发,耗时{stopwatch2.ElapsedMilliseconds} ms");
|
||||
}
|
||||
}
|
||||
catch (ObjectDisposedException ex)
|
||||
{
|
||||
LoggerWmsMaterialkit.LogWarning($"【物料齐套配送】 数据库连接异常:{ex.Message}");
|
||||
LoggerWmsMaterialkit.LogWarning($"【物料齐套配送】 数据库连接异常:{ex.StackTrace}");
|
||||
if (ex.Source == "Npgsql")
|
||||
db_WmsMaterialkit = _repository.AsSugarClient().CopyNew();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("【物料齐套配送】" + ex.Message);
|
||||
LoggerWmsMaterialkit.LogWarning($"【物料齐套配送】 {ex.Message}");
|
||||
LoggerWmsMaterialkit.LogWarning($"【物料齐套配送】 {ex.StackTrace}");
|
||||
// 数据库连接断开时会报错
|
||||
try { await db_WmsMaterialkit.Ado.RollbackTranAsync(); } catch { };
|
||||
}
|
||||
finally
|
||||
{
|
||||
s_taskWmsMaterialkit.Release();
|
||||
if (!db_WmsMaterialkit.Ado.Transaction.IsNull())
|
||||
try { await db_WmsMaterialkit.Ado.CommitTranAsync(); } catch { };
|
||||
_wareHouseService.GenTaskExecute();
|
||||
stopwatch.Stop();
|
||||
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束物料齐套配送记录 {stopwatch.ElapsedMilliseconds} ms");
|
||||
LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束物料齐套配送记录 {stopwatch.ElapsedMilliseconds} ms");
|
||||
}
|
||||
}
|
||||
|
||||
public Task StartAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
@@ -2740,6 +2974,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
elevatorTimer = new Timer(ElevatorTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10));
|
||||
agvelevatorTimer = new Timer(AgvelevatorTimerTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10));
|
||||
|
||||
//WmsMaterialkittimer = new Timer(WmsMaterialkit, null, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(3600));
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
@@ -2773,7 +3009,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
YCLInternalTransfertimer?.Dispose();
|
||||
elevatorTimer?.Dispose();
|
||||
agvelevatorTimer?.Dispose();
|
||||
|
||||
WmsMaterialkittimer?.Dispose();
|
||||
}
|
||||
|
||||
#region 日志
|
||||
@@ -3197,7 +3433,49 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
return _LoggerYCLInternalTransfer;
|
||||
}
|
||||
}
|
||||
protected string _LoggerWmsMaterialkitFileName = "";
|
||||
protected ILogger _LoggerWmsMaterialkit;
|
||||
protected ILogger LoggerWmsMaterialkit
|
||||
{
|
||||
get
|
||||
{
|
||||
string newFileName = $"{AppContext.BaseDirectory}/logs/{DateTime.Now:yyyyMMdd}/齐套配送/custom{DateTime.Now:yyyyMMdd}齐套配送.log";
|
||||
if (_LoggerWmsMaterialkitFileName != newFileName)
|
||||
{
|
||||
ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts =>
|
||||
{
|
||||
|
||||
//cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff";
|
||||
cfgOpts.MessageFormat = (logMsg) =>
|
||||
{
|
||||
var logLevel = s_logLevelMap[logMsg.LogLevel];
|
||||
var sb = new StringBuilder();
|
||||
_ = sb.Append($"[{logLevel}] ");
|
||||
_ = sb.Append($"{logMsg.LogName} ");
|
||||
_ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} ");
|
||||
_ = sb.Append($"#{logMsg.EventId.Id} ");
|
||||
_ = sb.Append(logMsg.Message + " ");
|
||||
_ = sb.Append(logMsg.Exception?.ToString());
|
||||
return sb.ToString();
|
||||
};
|
||||
|
||||
}));
|
||||
_LoggerWmsMaterialkit = loggerFactory.CreateLogger(this.GetType());
|
||||
_LoggerWmsMaterialkitFileName = newFileName;
|
||||
}
|
||||
return _LoggerWmsMaterialkit;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
public class customInventoryEntity
|
||||
{
|
||||
public string material_id { get; set; }
|
||||
public string material_code { get; set; }
|
||||
public string material_name { get; set; }
|
||||
public string material_specification { get; set; }
|
||||
public decimal? codeqty { get; set; }
|
||||
public string unit_code { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -348,6 +348,10 @@
|
||||
/// </summary>
|
||||
public const string BIZTYPE_WMSMATERIALTRANSFER_ID = "34354738929685";
|
||||
/// <summary>
|
||||
/// 预任务生成业务类型-物料齐套配送记录 todo
|
||||
/// </summary>
|
||||
public const string BIZTYPE_WmsMaterialkitRecordHService_ID = "WmsMaterialkitRecordHService";
|
||||
/// <summary>
|
||||
/// 预任务生成业务类型-调拨出库单(原材料)
|
||||
/// </summary>
|
||||
public const string BIZTYPE_WmsRawmatTransferoutstock_ID = "36318854044437";
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Entity;
|
||||
|
||||
/// <summary>
|
||||
/// 物料齐套配送记录明细
|
||||
/// </summary>
|
||||
[SugarTable("wms_materialkit_record_d")]
|
||||
public partial class WmsMaterialkitRecordD : BaseEntity<string>
|
||||
{
|
||||
public WmsMaterialkitRecordD()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
/// <summary>
|
||||
/// 创建用户
|
||||
/// </summary>
|
||||
public string? create_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime? create_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 修改用户
|
||||
/// </summary>
|
||||
public string? modify_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 修改时间
|
||||
/// </summary>
|
||||
public DateTime? modify_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 记录表id
|
||||
/// </summary>
|
||||
public string? bill_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料id
|
||||
/// </summary>
|
||||
public string? material_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料编码
|
||||
/// </summary>
|
||||
public string? material_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料名称
|
||||
/// </summary>
|
||||
public string? material_name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 规格型号
|
||||
/// </summary>
|
||||
public string? material_specification { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 单位
|
||||
/// </summary>
|
||||
public string? unit_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计划数量
|
||||
/// </summary>
|
||||
public decimal? plan_qty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 已下发数量
|
||||
/// </summary>
|
||||
public decimal? yxf_qty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 分子
|
||||
/// </summary>
|
||||
public decimal? molecule { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 分母
|
||||
/// </summary>
|
||||
public decimal? denominator { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 状态
|
||||
/// </summary>
|
||||
public string? status { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 开始时间
|
||||
/// </summary>
|
||||
public DateTime? start_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 结束时间
|
||||
/// </summary>
|
||||
public DateTime? end_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 运行次数
|
||||
/// </summary>
|
||||
public int? times { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 运行总时长(毫秒)
|
||||
/// </summary>
|
||||
public int? total_time { get; set; }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Entity;
|
||||
|
||||
/// <summary>
|
||||
/// 物料齐套配送记录表
|
||||
/// </summary>
|
||||
[SugarTable("wms_materialkit_record_h")]
|
||||
public partial class WmsMaterialkitRecordH : BaseEntity<string>
|
||||
{
|
||||
public WmsMaterialkitRecordH()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
/// <summary>
|
||||
/// 所属组织
|
||||
/// </summary>
|
||||
public string? org_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 修改用户
|
||||
/// </summary>
|
||||
public string? modify_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 修改时间
|
||||
/// </summary>
|
||||
public DateTime? modify_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建用户
|
||||
/// </summary>
|
||||
public string? create_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime? create_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 备注
|
||||
/// </summary>
|
||||
public string? remark { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 记录单号
|
||||
/// </summary>
|
||||
public string? bill_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务单id
|
||||
/// </summary>
|
||||
public string? mo_task_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务单号
|
||||
/// </summary>
|
||||
public string? mo_task_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 生产bom id
|
||||
/// </summary>
|
||||
public string? bom_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料id
|
||||
/// </summary>
|
||||
public string? material_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料编码
|
||||
/// </summary>
|
||||
public string? material_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料名称
|
||||
/// </summary>
|
||||
public string? material_name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 规格型号
|
||||
/// </summary>
|
||||
public string? material_specification { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 单位
|
||||
/// </summary>
|
||||
public string? unit_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 数量
|
||||
/// </summary>
|
||||
public decimal? qty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 产线id
|
||||
/// </summary>
|
||||
public string? workline_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 状态(开始 执行中 完成)
|
||||
/// </summary>
|
||||
public string? status { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 开始时间
|
||||
/// </summary>
|
||||
public DateTime? start_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 完成时间
|
||||
/// </summary>
|
||||
public DateTime? complete_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 运行次数
|
||||
/// </summary>
|
||||
public int? times { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 运行总时长(毫秒)
|
||||
/// </summary>
|
||||
public int? total_time { get; set; }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Entity;
|
||||
|
||||
/// <summary>
|
||||
/// 物料齐套配送详情
|
||||
/// </summary>
|
||||
[SugarTable("wms_materialkit_record_t")]
|
||||
public partial class WmsMaterialkitRecordT : BaseEntity<string>
|
||||
{
|
||||
public WmsMaterialkitRecordT()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
/// <summary>
|
||||
/// 创建用户
|
||||
/// </summary>
|
||||
public string? create_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime? create_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 修改用户
|
||||
/// </summary>
|
||||
public string? modify_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 修改时间
|
||||
/// </summary>
|
||||
public DateTime? modify_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 记录表id
|
||||
/// </summary>
|
||||
public string? bill_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 记录明细id
|
||||
/// </summary>
|
||||
public string? bill_d_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 转库单id
|
||||
/// </summary>
|
||||
public string? materialtransfer_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 转库单单号
|
||||
/// </summary>
|
||||
public string? materialtransfer_billcode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 转库单明细id
|
||||
/// </summary>
|
||||
public string? materialtransfer_d_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 下发前数量
|
||||
/// </summary>
|
||||
public decimal? oldqty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 下发后数量
|
||||
/// </summary>
|
||||
public decimal? newqty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料id
|
||||
/// </summary>
|
||||
public string? material_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料编码
|
||||
/// </summary>
|
||||
public string? material_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料名称
|
||||
/// </summary>
|
||||
public string? material_name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 规格型号
|
||||
/// </summary>
|
||||
public string? material_specification { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 批次
|
||||
/// </summary>
|
||||
public string? code_batch { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 单位
|
||||
/// </summary>
|
||||
public string? unit_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 下发数量
|
||||
/// </summary>
|
||||
public decimal? xf_qty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 开始时间
|
||||
/// </summary>
|
||||
public DateTime? start_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 结束时间
|
||||
/// </summary>
|
||||
public DateTime? end_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 运行时长(毫秒)
|
||||
/// </summary>
|
||||
public int? total_time { get; set; }
|
||||
|
||||
}
|
||||
@@ -160,4 +160,8 @@ public partial class WmsPurchaseH : BaseEntity<string>, IPurchaseAndSaleAuitEnti
|
||||
/// </summary>
|
||||
public string erp_arriveorder_pk { get;set; }
|
||||
|
||||
/// <summary>
|
||||
/// 制单方式(自制 同步)
|
||||
/// </summary>
|
||||
public string make_method { get; set; }
|
||||
}
|
||||
|
||||
@@ -573,7 +573,8 @@ namespace Tnb.WarehouseMgr
|
||||
#region 当前任务后续未开始的任务全取消,并解锁库位
|
||||
WmsPretaskH curWmsPretaskH = await _db.Queryable<WmsPretaskH>().Where(r => r.bill_code == wmsDistaskH.pretask_code).FirstAsync();
|
||||
List<WmsPretaskH> nextWmsPretaskHs = _db.Queryable<WmsPretaskH>().Where(r => r.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID
|
||||
&& r.status != WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID && r.carry_code == wmsDistaskH.carry_code && long.Parse(r.id) > long.Parse(curWmsPretaskH.id)).ToList();
|
||||
&& r.status != WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID && r.carry_code == wmsDistaskH.carry_code && long.Parse(r.id) > long.Parse(curWmsPretaskH.id)
|
||||
&& new string[3] { "A", "F", "FC" }.Contains(r.area_code)).ToList();
|
||||
Logger.Information($"即将取消{wmsDistaskH.bill_code}的后续预任务{nextWmsPretaskHs.Count}条");
|
||||
foreach (WmsPretaskH wmsPretaskH in nextWmsPretaskHs)
|
||||
{
|
||||
@@ -704,7 +705,8 @@ namespace Tnb.WarehouseMgr
|
||||
#region 当前任务后续未开始的任务全取消,并解锁库位
|
||||
WmsPretaskH curWmsPretaskH = await _db.Queryable<WmsPretaskH>().Where(r => r.bill_code == wmsDistaskH.pretask_code).FirstAsync();
|
||||
List<WmsPretaskH> nextWmsPretaskHs = _db.Queryable<WmsPretaskH>().Where(r => r.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID
|
||||
&& r.status != WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID && r.carry_code == wmsDistaskH.carry_code && long.Parse(r.id) > long.Parse(curWmsPretaskH.id)).ToList();
|
||||
&& r.status != WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID && r.carry_code == wmsDistaskH.carry_code && long.Parse(r.id) > long.Parse(curWmsPretaskH.id)
|
||||
&& new string[3] { "A", "F", "FC" }.Contains(r.area_code)).ToList();
|
||||
Logger.Information($"即将取消{wmsDistaskH.bill_code}的后续预任务{nextWmsPretaskHs.Count}条");
|
||||
foreach (WmsPretaskH wmsPretaskH in nextWmsPretaskHs)
|
||||
{
|
||||
@@ -836,7 +838,7 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
//根据Agv传递的参数获取,对应的电梯
|
||||
|
||||
if (!input.sourceName.IsNullOrWhiteSpace() && (input.sourceName.Contains("DT-R", StringComparison.OrdinalIgnoreCase)))
|
||||
if (!input.sourceName.IsNullOrWhiteSpace() && (input.sourceName.Contains("DT-", StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
Logger.Information($"【TaskCallback】 开始根据任务单查找电梯 {input.sourceName}");
|
||||
ElevagorInfoQuery q = new() { taskCode = input.taskCode };
|
||||
@@ -1023,7 +1025,7 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
|
||||
List<WmsDistaskH> elevatorTasks = _db.Queryable<WmsDistaskH>()
|
||||
.Where(r => r.startlocation_code.Contains($"DT") && r.endlocation_code.Contains($"DT") && r.act_start_date == null && r.act_end_date == null
|
||||
.Where(r => r.startlocation_code.Contains($"DT") && r.endlocation_code.Contains($"DT") && r.area_code == wmsElevatorH.area_code && r.act_start_date == null && r.act_end_date == null
|
||||
&& r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList();
|
||||
|
||||
int eleUpdateRow = 0;
|
||||
|
||||
@@ -304,7 +304,10 @@ namespace Tnb.WarehouseMgr
|
||||
int index = 0;
|
||||
items.ForEach(x =>
|
||||
{
|
||||
if (x.carry_code == "TP0599")
|
||||
{
|
||||
|
||||
}
|
||||
index++;
|
||||
WmsCarryStockReportExcel wmsCarryStockReportCode = x.Adapt<WmsCarryStockReportExcel>();
|
||||
wmsCarryStockReportCode.index = index;
|
||||
|
||||
@@ -345,7 +345,6 @@ namespace Tnb.WarehouseMgr
|
||||
material_id = wmsMaterialTransferD.material_id,
|
||||
code_batch = input.code_batch,
|
||||
Size = input.palletCount,
|
||||
Region_id = WmsWareHouseConst.REGION_Purchase_ID,
|
||||
PolicyCode = WmsWareHouseConst.POLICY_YCLOUTSTOCK
|
||||
};
|
||||
List<WmsCarryH> items = await _wareHouseService.OutStockStrategy(outStockStrategyInput);
|
||||
@@ -1028,7 +1027,7 @@ namespace Tnb.WarehouseMgr
|
||||
if (input.wmsDistaskH.task_type == WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID)
|
||||
{
|
||||
List<WmsMaterialTransferD> wmsMaterialTransferDs = _db.Queryable<WmsMaterialTransferD>()
|
||||
.Where(a => a.bill_id == wmsMaterialTransferd.bill_id && a.yxfqty_rk < a.yzqty_rk).ToList();
|
||||
.Where(a => a.bill_id == wmsMaterialTransferd.bill_id && a.yxfqty_rk <= a.yzqty_rk).ToList();
|
||||
if (wmsMaterialTransferDs.Count == 0)
|
||||
{
|
||||
isOk2 = await _db.Updateable<WmsMaterialTransfer>().SetColumns(it => new WmsMaterialTransfer { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID })
|
||||
@@ -1039,7 +1038,7 @@ namespace Tnb.WarehouseMgr
|
||||
else
|
||||
{
|
||||
List<WmsMaterialTransferD> wmsMaterialTransferDs = _db.Queryable<WmsMaterialTransferD>()
|
||||
.Where(a => a.bill_id == wmsMaterialTransferd.bill_id && a.yzqty < a.qty).ToList();
|
||||
.Where(a => a.bill_id == wmsMaterialTransferd.bill_id && a.yzqty <= a.qty).ToList();
|
||||
if (wmsMaterialTransferDs.Count == 0)
|
||||
{
|
||||
isOk2 = await _db.Updateable<WmsMaterialTransfer>().SetColumns(it => new WmsMaterialTransfer { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID })
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using JNPF.Common.Core.Manager;
|
||||
using JNPF.EventBus;
|
||||
using JNPF.Systems.Interfaces.Permission;
|
||||
using JNPF.Systems.Interfaces.System;
|
||||
using JNPF.VisualDev;
|
||||
using JNPF.VisualDev.Interfaces;
|
||||
using NPOI.Util;
|
||||
using SqlSugar;
|
||||
using Tnb.WarehouseMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities.Attributes;
|
||||
using Tnb.WarehouseMgr.Entities.Consts;
|
||||
using Tnb.WarehouseMgr.Interfaces;
|
||||
|
||||
namespace Tnb.WarehouseMgr
|
||||
{
|
||||
[OverideVisualDev(ModuleConsts.MODULE_WMSMATERIALTRANSFER_ID)]
|
||||
[ServiceModule(BizTypeId)]
|
||||
public class WmsMaterialkitRecordHService
|
||||
{
|
||||
private const string BizTypeId = WmsWareHouseConst.BIZTYPE_WmsMaterialkitRecordHService_ID;
|
||||
private readonly ISqlSugarClient _db;
|
||||
private readonly IRunService _runService;
|
||||
private readonly IVisualDevService _visualDevService;
|
||||
private readonly IWareHouseService _wareHouseService;
|
||||
private readonly IBillRullService _billRullService;
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly IWmsCarryBindService _wmsCarryBindService;
|
||||
private readonly IWmsCarryUnbindService _wmsCarryUnbindService;
|
||||
private readonly IOrganizeService _organizeService;
|
||||
private readonly IWmsCarryQueryService _wmsCarryQueryService;
|
||||
public WmsMaterialkitRecordHService(
|
||||
ISqlSugarRepository<WmsCarryH> repository,
|
||||
IRunService runService,
|
||||
IVisualDevService visualDevService,
|
||||
IWareHouseService wareHouseService,
|
||||
IUserManager userManager,
|
||||
IBillRullService billRullService,
|
||||
IEventPublisher eventPublisher,
|
||||
IWmsCarryUnbindService wmsCarryUnbindService,
|
||||
IOrganizeService organizeService,
|
||||
IWmsCarryQueryService wmsCarryQueryService,
|
||||
IWmsCarryBindService wmsCarryBindService)
|
||||
{
|
||||
_db = repository.AsSugarClient();
|
||||
_runService = runService;
|
||||
_visualDevService = visualDevService;
|
||||
_wareHouseService = wareHouseService;
|
||||
_userManager = userManager;
|
||||
_billRullService = billRullService;
|
||||
_wmsCarryBindService = wmsCarryBindService;
|
||||
_wmsCarryUnbindService = wmsCarryUnbindService;
|
||||
_organizeService = organizeService;
|
||||
_wmsCarryQueryService = wmsCarryQueryService;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -71,7 +71,10 @@ namespace Tnb.WarehouseMgr
|
||||
WmsPurchaseD wmsPurchaseD = await _db.Queryable<WmsPurchaseD>().SingleAsync(x => x.id == id);
|
||||
string purchaseHId = wmsPurchaseD?.bill_id ?? "";
|
||||
WmsPurchaseH wmsPurchaseH = await _db.Queryable<WmsPurchaseH>().SingleAsync(x => x.id == purchaseHId);
|
||||
|
||||
if (wmsPurchaseH.make_method == "自制")
|
||||
{
|
||||
throw Oops.Bah("自制采购收货单不需要操作此按钮");
|
||||
}
|
||||
#region 插入质检记录
|
||||
|
||||
string? create_id = _userManager.User.Id;
|
||||
@@ -273,6 +276,7 @@ namespace Tnb.WarehouseMgr
|
||||
{
|
||||
await _db.Ado.RollbackTranAsync();
|
||||
Log.Error(e.Message,e);
|
||||
throw Oops.Bah(e.Message);
|
||||
}
|
||||
|
||||
return "保存成功";
|
||||
|
||||
@@ -38,6 +38,8 @@ using Microsoft.AspNetCore.Authorization;
|
||||
using JNPF.VisualDev.Interfaces;
|
||||
using JNPF.VisualDev.Entitys;
|
||||
using Tnb.BasicData.Interfaces;
|
||||
using JNPF.Common.Enums;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Tnb.WarehouseMgr
|
||||
{
|
||||
@@ -47,6 +49,7 @@ namespace Tnb.WarehouseMgr
|
||||
[OverideVisualDev(ModuleConsts.MODULE_WMSPURCHASE_ID)]
|
||||
public class WmsPurchaseService : WmsPurchaseAndSaleCommonService<WmsPurchaseD>, IWmsPurchaseService
|
||||
{
|
||||
private const string ModuleId = "29975280336405";
|
||||
private readonly IBillRullService _billRullService;
|
||||
private readonly ISqlSugarClient _db;
|
||||
private readonly IUserManager _userManager;
|
||||
@@ -67,10 +70,32 @@ namespace Tnb.WarehouseMgr
|
||||
_runService = runService;
|
||||
_thirdApiRecordService = thirdApiRecordService;
|
||||
_visualDevService = visualDevService;
|
||||
|
||||
OverideFuncs.CreateAsync += Create;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 保存工序工位关联表
|
||||
/// </summary>
|
||||
[HttpPost]
|
||||
public async Task<dynamic> Create(VisualDevModelDataCrInput visualDevModelDataCrInput)
|
||||
{
|
||||
string purchase_order = visualDevModelDataCrInput.data["erp_bill_code"].ToString();
|
||||
VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true);
|
||||
await _runService.Create(templateEntity, visualDevModelDataCrInput);
|
||||
|
||||
string id = visualDevModelDataCrInput.data["ReturnIdentity"].ToString();
|
||||
string type = "";
|
||||
if (string.IsNullOrEmpty(purchase_order))
|
||||
{
|
||||
await _db.Updateable<WmsPurchaseH>().SetColumns(r => r.make_method == "自制").Where(r => r.id == id).ExecuteCommandAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
await _db.Updateable<WmsPurchaseH>().SetColumns(r => r.make_method == "同步").Where(r => r.id == id).ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
return "保存成功";
|
||||
}
|
||||
|
||||
|
||||
private async Task<dynamic> xxx(VisualDevModelDataCrInput input)
|
||||
@@ -106,6 +131,11 @@ namespace Tnb.WarehouseMgr
|
||||
var blFlag = true;
|
||||
try
|
||||
{
|
||||
WmsPurchaseH wmsPurchaseH = await _db.Queryable<WmsPurchaseH>().Where(r => r.bill_code == input.bill_code).FirstAsync();
|
||||
if (wmsPurchaseH.make_method == "自制")
|
||||
{
|
||||
throw Oops.Bah("自制采购收货单不能操作此按钮");
|
||||
}
|
||||
await _db.Ado.BeginTranAsync();
|
||||
WmsInstockH? instock = null;
|
||||
var purchaseDs = await PurchaseAndSaleUpdate(input);
|
||||
|
||||
@@ -460,7 +460,7 @@ namespace JNPF.VisualDev
|
||||
async Task<dynamic> ReportExcel(VisualDevModelListQueryInput input)
|
||||
{
|
||||
// 全部页面导出 限制条数
|
||||
if (input.dataType == "1") input.pageSize = 9999;
|
||||
if (input.dataType == "1") input.pageSize = 999999;
|
||||
dynamic reqBody = new ExpandoObject();
|
||||
CancellationTokenSource Ctu = new();
|
||||
reqBody.currentPage = input.currentPage;
|
||||
|
||||
Reference in New Issue
Block a user