采购/委外调整

This commit is contained in:
2024-10-18 13:42:03 +08:00
parent abe6bd70b3
commit 8ae060e8d6
17 changed files with 149 additions and 70 deletions

View File

@@ -3091,8 +3091,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
MaterialTransferDDistributeToZCCInput input = new MaterialTransferDDistributeToZCCInput(); MaterialTransferDDistributeToZCCInput input = new MaterialTransferDDistributeToZCCInput();
input.source_id = _wmsMaterialTransferD.id; input.source_id = _wmsMaterialTransferD.id;
input.xf_qty = can_qty; input.xf_qty = can_qty;
input.dbConn = db_WmsMaterialkit; WarehouseMgr.Entities.Dto.Outputs.Result result = await _wmsMaterialTransferService.DistributeDetailToZCC(input, db_WmsMaterialkit);
WarehouseMgr.Entities.Dto.Outputs.Result result = await _wmsMaterialTransferService.DistributeDetailToZCC(input);
if (result.code.ToString() != "OK") if (result.code.ToString() != "OK")
{ {
LoggerWmsMaterialkit.LogWarning($"转库单{wmsMaterialTransfer.bill_code} 明细id{_wmsMaterialTransferD.id} 物料{_wmsMaterialTransferD.material_code} 批次{_wmsMaterialTransferD.code_batch} 中储仓出库时数量不匹配!"); LoggerWmsMaterialkit.LogWarning($"转库单{wmsMaterialTransfer.bill_code} 明细id{_wmsMaterialTransferD.id} 物料{_wmsMaterialTransferD.material_code} 批次{_wmsMaterialTransferD.code_batch} 中储仓出库时数量不匹配!");

View File

@@ -293,7 +293,7 @@ public class ModuleConsts
/// <summary> /// <summary>
/// 模块标识-委外收货 /// 模块标识-委外收货
/// </summary> /// </summary>
public const string MODULE_WMSOUTSOURCE_ID = "36207808903445"; public const string MODULE_WMSOUTSOURCE_ID = "37513122815509";
/// <summary> /// <summary>
/// 模块标识-委外收货子表 /// 模块标识-委外收货子表
/// </summary> /// </summary>

View File

@@ -26,6 +26,6 @@ namespace Tnb.WarehouseMgr.Entities.Dto
/// </summary> /// </summary>
public decimal? xf_qty { get; set; } public decimal? xf_qty { get; set; }
public ISqlSugarClient dbConn { get; set; } = null; //public ISqlSugarClient dbConn { get; set; } = null;
} }
} }

View File

@@ -38,6 +38,6 @@ namespace Tnb.WarehouseMgr.Entities.Dto
public string PolicyCode { get; set; } public string PolicyCode { get; set; }
// 策略编号 // 策略编号
public ISqlSugarClient dbConn { get; set; } = null; //public ISqlSugarClient dbConn { get; set; } = null;
} }
} }

View File

@@ -60,6 +60,6 @@ namespace Tnb.WarehouseMgr.Entities.Dto
/// </summary> /// </summary>
public List<string> qcres_list { get; set; } public List<string> qcres_list { get; set; }
public ISqlSugarClient dbConn { get; set; } = null; //public ISqlSugarClient dbConn { get; set; } = null;
} }
} }

View File

@@ -56,6 +56,6 @@ namespace Tnb.WarehouseMgr.Entities.Dto
/// </summary> /// </summary>
public string[] endlocations { get; set; } public string[] endlocations { get; set; }
public ISqlSugarClient dbConn { get; set; } = null; //public ISqlSugarClient dbConn { get; set; } = null;
} }
} }

View File

@@ -64,25 +64,25 @@ namespace Tnb.WarehouseMgr.Interfaces
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
Task<List<BasLocation>> InStockStrategy([FromQuery] InStockStrategyQuery input); Task<List<BasLocation>> InStockStrategy([FromQuery] InStockStrategyQuery input, ISqlSugarClient dbConn = null);
/// <summary> /// <summary>
/// 入库策略(包材库) /// 入库策略(包材库)
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
Task<List<BasLocation>> InStockStrategyBCK([FromQuery] InStockStrategyQuery input); Task<List<BasLocation>> InStockStrategyBCK([FromQuery] InStockStrategyQuery input, ISqlSugarClient dbConn = null);
/// <summary> /// <summary>
/// 包材库2楼入库策略 /// 包材库2楼入库策略
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
Task<List<BasLocation>> BCKF2InStockStrategy([FromQuery] InStockStrategyQuery input); Task<List<BasLocation>> BCKF2InStockStrategy([FromQuery] InStockStrategyQuery input, ISqlSugarClient dbConn = null);
/// <summary> /// <summary>
/// 出库策略 /// 出库策略
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
Task<List<WmsCarryH>> OutStockStrategy([FromQuery] OutStockStrategyQuery input); Task<List<WmsCarryH>> OutStockStrategy([FromQuery] OutStockStrategyQuery input, ISqlSugarClient dbConn = null);
/// <summary> /// <summary>
/// 缓存仓出库策略 /// 缓存仓出库策略
/// </summary> /// </summary>
@@ -96,14 +96,14 @@ namespace Tnb.WarehouseMgr.Interfaces
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
/// <exception cref="AppFriendlyException"></exception> /// <exception cref="AppFriendlyException"></exception>
Task<List<Tuple<WmsCarryH, decimal, BasLocation>>> OutStockStrategyZCC2Floor2([FromQuery] OutStockStrategyZCC2Floor2Query input); Task<List<Tuple<WmsCarryH, decimal, BasLocation>>> OutStockStrategyZCC2Floor2([FromQuery] OutStockStrategyZCC2Floor2Query input, ISqlSugarClient dbConn = null);
/// <summary> /// <summary>
/// 出库策略-销售出库下发 /// 出库策略-销售出库下发
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
Task<List<Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>>> OutStockStrategy_saleRelease([FromQuery] OutStockStrategyQuery input); Task<List<Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>>> OutStockStrategy_saleRelease([FromQuery] OutStockStrategyQuery input, ISqlSugarClient dbConn = null);
/// <summary> /// <summary>
/// 路径算法 /// 路径算法
/// </summary> /// </summary>

View File

@@ -5,6 +5,7 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using Tnb.WarehouseMgr.Entities.Dto; using Tnb.WarehouseMgr.Entities.Dto;
namespace Tnb.WarehouseMgr.Interfaces namespace Tnb.WarehouseMgr.Interfaces
@@ -18,6 +19,6 @@ namespace Tnb.WarehouseMgr.Interfaces
/// <returns></returns> /// <returns></returns>
/// <exception cref="AppFriendlyException"></exception> /// <exception cref="AppFriendlyException"></exception>
[HttpPost, NonUnify, AllowAnonymous] [HttpPost, NonUnify, AllowAnonymous]
Task<Entities.Dto.Outputs.Result> DistributeDetailToZCC(MaterialTransferDDistributeToZCCInput input); Task<Entities.Dto.Outputs.Result> DistributeDetailToZCC(MaterialTransferDDistributeToZCCInput input, ISqlSugarClient dbConn = null);
} }
} }

View File

@@ -285,13 +285,13 @@ namespace Tnb.WarehouseMgr
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpGet] [HttpGet]
public async Task<List<BasLocation>> InStockStrategy([FromQuery] InStockStrategyQuery input) public async Task<List<BasLocation>> InStockStrategy([FromQuery] InStockStrategyQuery input, ISqlSugarClient dbConn = null)
{ {
List<BasLocation> items = new(); List<BasLocation> items = new();
try try
{ {
var db = input.dbConn; var db = dbConn;
if (input.dbConn == null) if (dbConn == null)
{ {
db = _db.CopyNew(); db = _db.CopyNew();
} }
@@ -340,13 +340,13 @@ namespace Tnb.WarehouseMgr
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpGet] [HttpGet]
public async Task<List<BasLocation>> InStockStrategyBCK([FromQuery] InStockStrategyQuery input) public async Task<List<BasLocation>> InStockStrategyBCK([FromQuery] InStockStrategyQuery input, ISqlSugarClient dbConn = null)
{ {
List<BasLocation> items = new(); List<BasLocation> items = new();
try try
{ {
var db = input.dbConn; var db = dbConn;
if (input.dbConn == null) if (dbConn == null)
{ {
db = _db.CopyNew(); db = _db.CopyNew();
} }
@@ -376,13 +376,13 @@ namespace Tnb.WarehouseMgr
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpGet] [HttpGet]
public async Task<List<BasLocation>> BCKF2InStockStrategy([FromQuery] InStockStrategyQuery input) public async Task<List<BasLocation>> BCKF2InStockStrategy([FromQuery] InStockStrategyQuery input, ISqlSugarClient dbConn = null)
{ {
List<BasLocation> items = new(); List<BasLocation> items = new();
try try
{ {
var db = input.dbConn; var db = dbConn;
if (input.dbConn == null) if (dbConn == null)
{ {
db = _db.CopyNew(); db = _db.CopyNew();
} }
@@ -482,7 +482,7 @@ namespace Tnb.WarehouseMgr
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpGet] [HttpGet]
public async Task<List<Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>>> OutStockStrategy_saleRelease([FromQuery] OutStockStrategyQuery input) public async Task<List<Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>>> OutStockStrategy_saleRelease([FromQuery] OutStockStrategyQuery input, ISqlSugarClient dbConn = null)
{ {
Expressionable<WmsCarryH, WmsCarryCode, BasLocation> whereExprable = Expressionable.Create<WmsCarryH, WmsCarryCode, BasLocation>() Expressionable<WmsCarryH, WmsCarryCode, BasLocation> whereExprable = Expressionable.Create<WmsCarryH, WmsCarryCode, BasLocation>()
.And((a, b, c) => a.is_lock == 0 && c.is_lock == 0) .And((a, b, c) => a.is_lock == 0 && c.is_lock == 0)
@@ -502,8 +502,8 @@ namespace Tnb.WarehouseMgr
_ = whereExprable.And(carryStatusFilterExp); _ = whereExprable.And(carryStatusFilterExp);
Expression<Func<WmsCarryH, WmsCarryCode, BasLocation, bool>> whereExpr = whereExprable.ToExpression(); Expression<Func<WmsCarryH, WmsCarryCode, BasLocation, bool>> whereExpr = whereExprable.ToExpression();
var cyDb = input.dbConn; var cyDb = dbConn;
if (input.dbConn == null) if (dbConn == null)
{ {
cyDb = _db.CopyNew(); cyDb = _db.CopyNew();
} }
@@ -545,10 +545,10 @@ namespace Tnb.WarehouseMgr
return items; return items;
} }
public async Task<List<WmsCarryH>> OutStockStrategy([FromQuery] OutStockStrategyQuery input) public async Task<List<WmsCarryH>> OutStockStrategy([FromQuery] OutStockStrategyQuery input, ISqlSugarClient dbConn = null)
{ {
var cyDb = input.dbConn; var cyDb = dbConn;
if (input.dbConn == null) if (dbConn == null)
{ {
cyDb = _db.CopyNew(); cyDb = _db.CopyNew();
} }
@@ -662,10 +662,10 @@ namespace Tnb.WarehouseMgr
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
/// <exception cref="AppFriendlyException"></exception> /// <exception cref="AppFriendlyException"></exception>
public async Task<List<Tuple<WmsCarryH, decimal, BasLocation>>> OutStockStrategyZCC2Floor2([FromQuery] OutStockStrategyZCC2Floor2Query input) public async Task<List<Tuple<WmsCarryH, decimal, BasLocation>>> OutStockStrategyZCC2Floor2([FromQuery] OutStockStrategyZCC2Floor2Query input, ISqlSugarClient dbConn = null)
{ {
var cyDb = input.dbConn; var cyDb = dbConn;
if (input.dbConn == null) if (dbConn == null)
{ {
cyDb = _db.CopyNew(); cyDb = _db.CopyNew();
} }
@@ -3689,7 +3689,7 @@ namespace Tnb.WarehouseMgr
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-C-04-0{elevatorSno}").First()); points.Add(wmsPointHs.Where(r => r.point_code == $"DT-C-04-0{elevatorSno}").First());
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-4-{elevatorSno}").First()); points.Add(wmsPointHs.Where(r => r.point_code == $"DT-4-{elevatorSno}").First());
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-3-{elevatorSno}").First()); points.Add(wmsPointHs.Where(r => r.point_code == $"DT-3-{elevatorSno}").First());
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-R-03-0{elevatorSno}").First()); points.Add(wmsPointHs.Where(r => r.point_code == $"DT-03-0{elevatorSno}").First());
points.Add(wmsPointHs.Where(r => r.id == pEndId).First()); points.Add(wmsPointHs.Where(r => r.id == pEndId).First());
} }
else else

View File

@@ -485,7 +485,7 @@ namespace Tnb.WarehouseMgr
/// <param name="wmsMaterialTransfer"></param> /// <param name="wmsMaterialTransfer"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<Entities.Dto.Outputs.Result> DistributeJZCToCPC(DistributeF4JXCInput input) public async Task<dynamic> DistributeJZCToCPC(DistributeF4JXCInput input)
{ {
SemaphoreSlim semaphoreSlim_MJC = null; SemaphoreSlim semaphoreSlim_MJC = null;
SemaphoreSlim semaphoreSlim_CPK = null; SemaphoreSlim semaphoreSlim_CPK = null;
@@ -512,6 +512,7 @@ namespace Tnb.WarehouseMgr
await _db.Ado.BeginTranAsync(); await _db.Ado.BeginTranAsync();
int xfCarrysCount = 0;
foreach (WmsMaterialTransferD wmsMaterialTransferD in wmsMaterialTransferDs) foreach (WmsMaterialTransferD wmsMaterialTransferD in wmsMaterialTransferDs)
{ {
// 转库单载具子表 // 转库单载具子表
@@ -526,10 +527,9 @@ namespace Tnb.WarehouseMgr
warehouse_id = WmsWareHouseConst.WAREHOUSE_MJC_ID, warehouse_id = WmsWareHouseConst.WAREHOUSE_MJC_ID,
material_id = wmsMaterialTransferD.material_id, material_id = wmsMaterialTransferD.material_id,
code_batch = wmsMaterialTransferD.code_batch, code_batch = wmsMaterialTransferD.code_batch,
qty = needOut, qty = needOut
dbConn = _db
}; };
List<Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>> carryitems = await _wareHouseService.OutStockStrategy_saleRelease(outStockStrategyInput); List<Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>> carryitems = await _wareHouseService.OutStockStrategy_saleRelease(outStockStrategyInput, _db);
List<Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>> items_pretask = carryitems.Where(r => r.Item1 == "预任务").ToList(); List<Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>> items_pretask = carryitems.Where(r => r.Item1 == "预任务").ToList();
decimal canOutstockQty = items_pretask.Sum(r => r.Item3.codeqty).ParseToDecimal(); decimal canOutstockQty = items_pretask.Sum(r => r.Item3.codeqty).ParseToDecimal();
@@ -554,21 +554,18 @@ namespace Tnb.WarehouseMgr
&& r.status == WmsWareHouseConst.BILLSTATUS_ADD_ID && r.origin == "外协调拨入库").FirstAsync(); && r.status == WmsWareHouseConst.BILLSTATUS_ADD_ID && r.origin == "外协调拨入库").FirstAsync();
if (wmsSterilizationInstockH == null) if (wmsSterilizationInstockH == null)
{ {
Logger.LogWarning($"【四楼静置仓到成品库】载具{wmsCarryH.carry_code}没有找到新增状态且来源是外协调拨入库的灭菌入库记录!"); throw new Exception($"【四楼静置仓到成品库】载具{wmsCarryH.carry_code}没有找到新增状态且来源是外协调拨入库的灭菌入库记录!");
continue;
} }
if (wmsCarryH.location_id != wmsSterilizationInstockH.location_id) if (wmsCarryH.location_id != wmsSterilizationInstockH.location_id)
{ {
Logger.LogWarning($"【四楼静置仓到成品库】载具{wmsCarryH.carry_code}实际位置与灭菌入库记录位置不一致"); throw new Exception($"【四楼静置仓到成品库】载具{wmsCarryH.carry_code}实际位置与灭菌入库记录位置不一致");
continue;
} }
BasLocation startlocation = await _db.Queryable<BasLocation>().Where(r => r.id == wmsCarryH.location_id).FirstAsync(); BasLocation startlocation = await _db.Queryable<BasLocation>().Where(r => r.id == wmsCarryH.location_id).FirstAsync();
if (startlocation.is_lock == 1) if (startlocation.is_lock == 1)
{ {
Logger.LogWarning($"【四楼静置仓到成品库】 起点库位{startlocation.location_code}已锁定"); throw new Exception($"【四楼静置仓到成品库】 起点库位{startlocation.location_code}已锁定");
continue;
} }
wmsSterilizationInstockH.status = WmsWareHouseConst.BILLSTATUS_ON_ID; wmsSterilizationInstockH.status = WmsWareHouseConst.BILLSTATUS_ON_ID;
@@ -633,13 +630,16 @@ namespace Tnb.WarehouseMgr
await _db.Insertable(wmsMaterialTransferCarrys).ExecuteCommandAsync(); await _db.Insertable(wmsMaterialTransferCarrys).ExecuteCommandAsync();
Logger.LogInformation($"【DistributeF4JXC】插入转库单{wmsMaterialTransfer.bill_code}载具表的数据"); Logger.LogInformation($"【DistributeF4JXC】插入转库单{wmsMaterialTransfer.bill_code}载具表的数据");
xfCarrysCount += wmsMaterialTransferCarrys.Count;
Logger.LogInformation($"转库单{wmsMaterialTransfer.bill_code} 行号 {wmsMaterialTransferD.lineno}预任务{wmsMaterialTransferCarrys.Count}条全部生成成功"); Logger.LogInformation($"转库单{wmsMaterialTransfer.bill_code} 行号 {wmsMaterialTransferD.lineno}预任务{wmsMaterialTransferCarrys.Count}条全部生成成功");
} }
if (xfCarrysCount == 0)
{
throw new AppFriendlyException($"可下发数量为0", 500);
}
await _db.Ado.CommitTranAsync(); await _db.Ado.CommitTranAsync();
} }
catch(Exception ex) catch(Exception ex)
{ {
@@ -1590,10 +1590,9 @@ namespace Tnb.WarehouseMgr
needOut = needOut, needOut = needOut,
material_code = wmsMaterialTransferD.material_code, material_code = wmsMaterialTransferD.material_code,
endlocations = new string[2] { WmsWareHouseConst.ZZCSSX121009, WmsWareHouseConst.ZZCSSX121010 }, endlocations = new string[2] { WmsWareHouseConst.ZZCSSX121009, WmsWareHouseConst.ZZCSSX121010 },
dbConn = _db
}; };
List<Tuple<WmsCarryH, decimal, BasLocation>>? carrys = await _wareHouseService.OutStockStrategyZCC2Floor2(OutStockStrategyInput); List<Tuple<WmsCarryH, decimal, BasLocation>>? carrys = await _wareHouseService.OutStockStrategyZCC2Floor2(OutStockStrategyInput, _db);
foreach (var item in carrys) foreach (var item in carrys)
{ {
@@ -1682,11 +1681,11 @@ namespace Tnb.WarehouseMgr
/// <returns></returns> /// <returns></returns>
/// <exception cref="AppFriendlyException"></exception> /// <exception cref="AppFriendlyException"></exception>
[HttpPost, NonUnify, AllowAnonymous] [HttpPost, NonUnify, AllowAnonymous]
public async Task<Entities.Dto.Outputs.Result> DistributeDetailToZCC(MaterialTransferDDistributeToZCCInput input) public async Task<Entities.Dto.Outputs.Result> DistributeDetailToZCC(MaterialTransferDDistributeToZCCInput input, ISqlSugarClient dbConn = null)
{ {
await _s_taskExecuteSemaphore_F1ZCCOutstock.WaitAsync(); await _s_taskExecuteSemaphore_F1ZCCOutstock.WaitAsync();
var db = input.dbConn; var db = dbConn;
if (input.dbConn == null) if (dbConn == null)
db = _db; db = _db;
Logger.LogInformation($"中储仓下发到二楼暂存仓"); Logger.LogInformation($"中储仓下发到二楼暂存仓");

View File

@@ -90,7 +90,7 @@ namespace Tnb.WarehouseMgr
if (qcRes != (wmsOutsourceD.qc_res ?? "")) if (qcRes != (wmsOutsourceD.qc_res ?? ""))
{ {
BasMaterial basMaterial = await _db.Queryable<BasMaterial>().Where(r => r.id == wmsOutsourceD.matcode_id).FirstAsync(); BasMaterial basMaterial = await _db.Queryable<BasMaterial>().Where(r => r.code == wmsOutsourceD.matcode).FirstAsync();
WmsPurchaseQcrecord wmsPurchaseQcrecord = new WmsPurchaseQcrecord(); WmsPurchaseQcrecord wmsPurchaseQcrecord = new WmsPurchaseQcrecord();
wmsPurchaseQcrecord.create_id = create_id; wmsPurchaseQcrecord.create_id = create_id;
wmsPurchaseQcrecord.create_time = DateTime.Now; wmsPurchaseQcrecord.create_time = DateTime.Now;
@@ -122,7 +122,7 @@ namespace Tnb.WarehouseMgr
// 托盘对应入库单 // 托盘对应入库单
List<WmsInstockH> instock_mains = await _db.Queryable<WmsInstockH>().Where(x => x.source_id == wmsOutsourceD.fk_wms_outsource_order_id).ToListAsync(); List<WmsInstockH> instock_mains = await _db.Queryable<WmsInstockH>().Where(x => x.source_id == wmsOutsourceD.fk_wms_outsource_order_id).ToListAsync();
List<WmsInstockD> allInstockDetails = await _db.Queryable<WmsInstockD>().Where(it => instock_mains.Select(r => r.id).Contains(it.bill_id) && it.material_id == wmsOutsourceD.matcode_id && it.code_batch == wmsOutsourceD.code_batch).OrderBy(x=>x.id).ToListAsync(); List<WmsInstockD> allInstockDetails = await _db.Queryable<WmsInstockD>().Where(it => instock_mains.Select(r => r.id).Contains(it.bill_id) && it.material_code == wmsOutsourceD.matcode && it.code_batch == wmsOutsourceD.code_batch).OrderBy(x=>x.id).ToListAsync();
List<Dictionary<string, object>> requestData = new List<Dictionary<string, object>>(); List<Dictionary<string, object>> requestData = new List<Dictionary<string, object>>();
List<string> carryIds = instock_mains.Select(x => x.carry_id).ToList(); List<string> carryIds = instock_mains.Select(x => x.carry_id).ToList();

View File

@@ -1,5 +1,6 @@
using System.Text; using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using COSXML.Model.Tag;
using JNPF.Common.Contracts; using JNPF.Common.Contracts;
using JNPF.Common.Core.Manager; using JNPF.Common.Core.Manager;
using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Dtos.VisualDev;
@@ -11,6 +12,7 @@ using JNPF.Logging;
using JNPF.Systems.Entitys.System; using JNPF.Systems.Entitys.System;
using JNPF.Systems.Interfaces.System; using JNPF.Systems.Interfaces.System;
using JNPF.VisualDev; using JNPF.VisualDev;
using JNPF.VisualDev.Entitys;
using JNPF.VisualDev.Interfaces; using JNPF.VisualDev.Interfaces;
using Mapster; using Mapster;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
@@ -64,8 +66,60 @@ namespace Tnb.WarehouseMgr
_visualDevService = visualDevService; _visualDevService = visualDevService;
_wareHouseService = wareHouseService; _wareHouseService = wareHouseService;
_thirdApiRecordService = thirdApiRecordService; _thirdApiRecordService = thirdApiRecordService;
OverideFuncs.CreateAsync += Create;
OverideFuncs.DeleteAsync = Delete;
} }
[HttpPost]
public async Task<dynamic> Create(VisualDevModelDataCrInput visualDevModelDataCrInput)
{
string outsource_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(outsource_order))
{
await _db.Updateable<WmsOutsourceH>().SetColumns(r => r.make_method == "自制").Where(r => r.id == id).ExecuteCommandAsync();
}
else
{
await _db.Updateable<WmsOutsourceH>().SetColumns(r => r.make_method == "同步").Where(r => r.id == id).ExecuteCommandAsync();
}
await _db.Updateable<WmsOutsourceD>().SetColumns(r => r.qc_res == "await").Where(r => r.fk_wms_outsource_order_id == id).ExecuteCommandAsync();
return "保存成功";
}
// List<WmsDistaskH> wmsDistaskH = await _db.Queryable<WmsDistaskH>().Where(r => r.source_id == id).ToListAsync();
private async Task Delete(string id)
{
await _db.Ado.BeginTranAsync();
WmsOutsourceH wmsOutsourceH = await _db.Queryable<WmsOutsourceH>().Where(r => r.id == id).FirstAsync();
if (wmsOutsourceH != null)
{
_ = await _db.Deleteable(wmsOutsourceH).ExecuteCommandAsync();
List<WmsOutsourceD> wmsoutsourceDs = await _db.Queryable<WmsOutsourceD>().Where(r => r.fk_wms_outsource_order_id == id).ToListAsync();
Logger.Information($"删除委外收货单{wmsOutsourceH.bill_code} 收货明细{wmsoutsourceDs.Count}条");
foreach (WmsOutsourceD wmsOutsourceD in wmsoutsourceDs)
{
WmsOutsourceOrderD wmsOutsourceOrderD = await _db.Queryable<WmsOutsourceOrderD>().Where(r => r.erp_line_pk == wmsOutsourceD.erp_outsource_order_d_pk).FirstAsync();
if (wmsOutsourceOrderD != null)
{
Logger.Information($"委外收货单{wmsOutsourceH.bill_code} 收货明细id{wmsOutsourceOrderD.id} 删除后回退委外订单明细id{wmsOutsourceOrderD.id}已到货数量 {wmsOutsourceOrderD.actual_quantity} -> {wmsOutsourceOrderD.actual_quantity - wmsOutsourceD.outsource_arriveqty}");
wmsOutsourceOrderD.actual_quantity -= wmsOutsourceD.actual_quantity;
await _db.Updateable(wmsOutsourceOrderD).UpdateColumns(r => r.actual_quantity).ExecuteCommandAsync();
}
}
_ = await _db.Deleteable(wmsoutsourceDs).ExecuteCommandAsync();
}
await _db.Ado.CommitTranAsync();
}
public override async Task ModifyAsync(WareHouseUpInput input) public override async Task ModifyAsync(WareHouseUpInput input)
{ {
if (input == null) if (input == null)
@@ -103,10 +157,10 @@ namespace Tnb.WarehouseMgr
}; };
List<WmsTempCode> wmsTempCodes = new(); List<WmsTempCode> wmsTempCodes = new();
decimal? minPacking = (await _db.Queryable<BasMaterial>().FirstAsync(it => it.id == WmsOutsourceD.matcode_id))?.minpacking; decimal? minPacking = (await _db.Queryable<BasMaterial>().FirstAsync(it => it.code == WmsOutsourceD.matcode))?.minpacking;
if (!minPacking.HasValue || minPacking.Value <= 0) if (!minPacking.HasValue || minPacking.Value <= 0)
{ {
throw new AppFriendlyException($"物料{WmsOutsourceD.matcode} {WmsOutsourceD.matcode_id} 包装数量为空或者等于0无法打印", 500); throw new AppFriendlyException($"物料{WmsOutsourceD.matcode} 包装数量为空或者等于0无法打印", 500);
}; };
int codeNum = 0; int codeNum = 0;
@@ -124,7 +178,7 @@ namespace Tnb.WarehouseMgr
} }
BasMaterial basMaterial = await _db.Queryable<BasMaterial>().Where(r => r.id == WmsOutsourceD.matcode_id).FirstAsync(); BasMaterial basMaterial = await _db.Queryable<BasMaterial>().Where(r => r.code == WmsOutsourceD.matcode).FirstAsync();
for (int j = 0; j < codeNum; j++) for (int j = 0; j < codeNum; j++)
{ {
int index = j + 1; int index = j + 1;
@@ -140,7 +194,7 @@ namespace Tnb.WarehouseMgr
string code = $"{WmsOutsourceD.matcode}-{WmsOutsourceD.code_batch}-{watercode}"; string code = $"{WmsOutsourceD.matcode}-{WmsOutsourceD.code_batch}-{watercode}";
WmsTempCode barCode = new() WmsTempCode barCode = new()
{ {
material_id = WmsOutsourceD.matcode_id, material_id = basMaterial.id,
material_code = WmsOutsourceD.matcode, material_code = WmsOutsourceD.matcode,
barcode = code, barcode = code,
code_batch = WmsOutsourceD.code_batch, code_batch = WmsOutsourceD.code_batch,

View File

@@ -430,7 +430,7 @@ namespace Tnb.WarehouseMgr
case WmsWareHouseConst.BILLTYPE_OUTSOURCE_ID: case WmsWareHouseConst.BILLTYPE_OUTSOURCE_ID:
{ {
bill_type = WmsWareHouseConst.BILLTYPE_OUTSOURCEINSTOCK_ID; bill_type = WmsWareHouseConst.BILLTYPE_OUTSOURCEINSTOCK_ID;
biz_type = WmsWareHouseConst.BIZTYPE_OUTSOURCE_ID; source_main_id = (await _dbScanInStockByRedis.Queryable<WmsOutsourceD>().FirstAsync(it => it.id == source_id)).erp_outsource_order_d_pk;
break; break;
} }
case WmsWareHouseConst.BILLTYPE_RAWMATTRANSFERINSTOCK_ID: case WmsWareHouseConst.BILLTYPE_RAWMATTRANSFERINSTOCK_ID:

View File

@@ -79,7 +79,8 @@ namespace Tnb.WarehouseMgr
batchno = JObject.Parse(input.queryJson).Value<string>("batchno"); batchno = JObject.Parse(input.queryJson).Value<string>("batchno");
material_specification = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.material_specification)); material_specification = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.material_specification));
container_no = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.container_no)); container_no = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.container_no));
time = JObject.Parse(input.queryJson).Value<JArray>("time"); if (JObject.Parse(input.queryJson).ContainsKey("time"))
time = JObject.Parse(input.queryJson).Value<JArray>("time");
} }
decimal total_qty = 0; decimal total_qty = 0;

View File

@@ -41,6 +41,7 @@ using Tnb.BasicData.Interfaces;
using JNPF.Common.Enums; using JNPF.Common.Enums;
using System.Reflection; using System.Reflection;
using Aop.Api.Domain; using Aop.Api.Domain;
using Tnb.EquipMgr.Entities;
namespace Tnb.WarehouseMgr namespace Tnb.WarehouseMgr
{ {
@@ -72,11 +73,10 @@ namespace Tnb.WarehouseMgr
_thirdApiRecordService = thirdApiRecordService; _thirdApiRecordService = thirdApiRecordService;
_visualDevService = visualDevService; _visualDevService = visualDevService;
OverideFuncs.CreateAsync += Create; OverideFuncs.CreateAsync += Create;
OverideFuncs.DeleteAsync = Delete;
} }
/// <summary>
/// 保存工序工位关联表
/// </summary>
[HttpPost] [HttpPost]
public async Task<dynamic> Create(VisualDevModelDataCrInput visualDevModelDataCrInput) public async Task<dynamic> Create(VisualDevModelDataCrInput visualDevModelDataCrInput)
{ {
@@ -100,6 +100,31 @@ namespace Tnb.WarehouseMgr
return "保存成功"; return "保存成功";
} }
// List<WmsDistaskH> wmsDistaskH = await _db.Queryable<WmsDistaskH>().Where(r => r.source_id == id).ToListAsync();
private async Task Delete(string id)
{
await _db.Ado.BeginTranAsync();
WmsPurchaseH wmsPurchaseH = await _db.Queryable<WmsPurchaseH>().Where(r => r.id == id).FirstAsync();
if (wmsPurchaseH != null)
{
_ = await _db.Deleteable(wmsPurchaseH).ExecuteCommandAsync();
List<WmsPurchaseD> wmsPurchaseDs = await _db.Queryable<WmsPurchaseD>().Where(r => r.bill_id == id).ToListAsync();
Logger.Information($"删除采购收货单{wmsPurchaseH.bill_code} 收货明细{wmsPurchaseDs.Count}条");
foreach (WmsPurchaseD wmsPurchaseD in wmsPurchaseDs)
{
WmsPurchaseOrderD wmsPurchaseOrderD = await _db.Queryable<WmsPurchaseOrderD>().Where(r => r.erp_line_pk == wmsPurchaseD.erp_purchase_order_d_pk).FirstAsync();
if (wmsPurchaseOrderD != null)
{
Logger.Information($"采购收货单{wmsPurchaseH.bill_code} 收货明细id{wmsPurchaseOrderD.id} 删除后回退采购订单明细id{wmsPurchaseOrderD.id}已到货数量 {wmsPurchaseOrderD.actual_quantity} -> {wmsPurchaseOrderD.actual_quantity - wmsPurchaseD.purchase_arriveqty}");
wmsPurchaseOrderD.actual_quantity -= wmsPurchaseD.purchase_prqty;
await _db.Updateable(wmsPurchaseOrderD).UpdateColumns(r => r.actual_quantity).ExecuteCommandAsync();
}
}
_ = await _db.Deleteable(wmsPurchaseDs).ExecuteCommandAsync();
}
await _db.Ado.CommitTranAsync();
}
private async Task<dynamic> xxx(VisualDevModelDataCrInput input) private async Task<dynamic> xxx(VisualDevModelDataCrInput input)
{ {

View File

@@ -180,8 +180,8 @@ namespace Tnb.WarehouseMgr
} }
await _db.Ado.BeginTranAsync(); await _db.Ado.BeginTranAsync();
//入库取终点 //出库起点 //入库取终点 //出库起点
OutStockStrategyQuery outStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, material_id = wmsOutstockD.material_id, qty = input.qty, code_batch = wmsOutstockD.code_batch, Region_id = WmsWareHouseConst.REGION_CPOutstock_ID, dbConn = _db }; OutStockStrategyQuery outStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, material_id = wmsOutstockD.material_id, qty = input.qty, code_batch = wmsOutstockD.code_batch, Region_id = WmsWareHouseConst.REGION_CPOutstock_ID };
List<Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>> items = await _wareHouseService.OutStockStrategy_saleRelease(outStockStrategyInput); List<Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>> items = await _wareHouseService.OutStockStrategy_saleRelease(outStockStrategyInput, _db);
decimal canOutstockQty = items.Sum(r => r.Item3.codeqty).ParseToDecimal(); decimal canOutstockQty = items.Sum(r => r.Item3.codeqty).ParseToDecimal();
if (canOutstockQty < input.qty) if (canOutstockQty < input.qty)
@@ -215,8 +215,8 @@ namespace Tnb.WarehouseMgr
//人工发货 //人工发货
else else
{ {
InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, Size = items_pretask.Count, Region_id = WmsWareHouseConst.REGION_CPManualOutstock_ID, dbConn = _db }; InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, Size = items_pretask.Count, Region_id = WmsWareHouseConst.REGION_CPManualOutstock_ID };
endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput); endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput, _db);
if (endLocations.Count < items_pretask.Count) if (endLocations.Count < items_pretask.Count)
{ {
@@ -267,8 +267,8 @@ namespace Tnb.WarehouseMgr
//人工发货 //人工发货
else else
{ {
InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, Size = 1, Region_id = WmsWareHouseConst.REGION_CPManualOutstock_ID, dbConn = _db }; InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, Size = 1, Region_id = WmsWareHouseConst.REGION_CPManualOutstock_ID };
endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput); endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput, _db);
if (endLocations.Count < 1) if (endLocations.Count < 1)
{ {

View File

@@ -96,8 +96,8 @@ namespace Tnb.WarehouseMgr
WmsTransferOutstockD wmsOutstockD = await _db.Queryable<WmsTransferOutstockD>().FirstAsync(it => it.id == input.source_id); WmsTransferOutstockD wmsOutstockD = await _db.Queryable<WmsTransferOutstockD>().FirstAsync(it => it.id == input.source_id);
await _db.Ado.BeginTranAsync(); await _db.Ado.BeginTranAsync();
//入库取终点 //出库起点 //入库取终点 //出库起点
OutStockStrategyQuery outStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, material_id = wmsOutstockD.material_id, qty = input.qty, code_batch = wmsOutstockD.pi_code, Region_id = WmsWareHouseConst.REGION_CPOutstock_ID, dbConn = _db }; OutStockStrategyQuery outStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, material_id = wmsOutstockD.material_id, qty = input.qty, code_batch = wmsOutstockD.pi_code, Region_id = WmsWareHouseConst.REGION_CPOutstock_ID };
List<Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>> items = await _wareHouseService.OutStockStrategy_saleRelease(outStockStrategyInput); List<Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>> items = await _wareHouseService.OutStockStrategy_saleRelease(outStockStrategyInput, _db);
decimal canOutstockQty = items.Sum(r => r.Item3.codeqty).ParseToDecimal(); decimal canOutstockQty = items.Sum(r => r.Item3.codeqty).ParseToDecimal();
if (canOutstockQty < input.qty) if (canOutstockQty < input.qty)