原材料仓逻辑、看板调整

This commit is contained in:
2024-07-31 09:04:20 +08:00
parent ac43e1edf4
commit 9221113607
17 changed files with 743 additions and 45 deletions

View File

@@ -251,5 +251,15 @@ public class ModuleConsts
/// 模块标识-生产入库单
/// </summary>
public const string MODULE_WMSPRDINSTOCK_ID = "34467501190677";
/// <summary>
/// 模块标识-委外收货 todo
/// </summary>
public const string MODULE_WMSOUTSOURCEORDER_ID = "MODULE_WMSOUTSOURCEORDER_ID";//
/// <summary>
/// 模块标识-原材料调拨入库 todo
/// </summary>
public const string MODULE_WMSRAWMATTRANSFERINSTOCK_ID = "MODULE_WMSRAWMATTRANSFERINSTOCK_ID";//
}

View File

@@ -113,6 +113,14 @@
/// 采购收料物料流水号
/// </summary>
public const string WMS_PURCHASE_MAT_ENCODE = "PurchaseMat";
/// <summary>
/// 委外收料物料流水号
/// </summary>
public const string WMS_OUTSOURCE_MAT_ENCODE = "OutsourceMat";
/// <summary>
/// 原材料调拨入库物料流水号
/// </summary>
public const string WMS_TRANSFER_RAWMAT_ENCODE = "RawMatTransfer";
/// 齐套出库生成Encode
/// </summary>
public const string WMS_KITTINGOUTSTK_ENCODE = "WmsKittingOutStk";
@@ -396,6 +404,21 @@
/// </summary>
public const string BILLTYPE_PRDINSTOCK_ID = "27410834411541";
/// <summary>
/// 单据类型-采购收货
/// </summary>
public const string BILLTYPE_PURCHASE_ID = "35882440181525";
/// <summary>
/// 单据类型-委外收货
/// </summary>
public const string BILLTYPE_OUTSOURCE_ID = "35882444276245";
/// <summary>
/// 单据类型-原材料调拨入库
/// </summary>
public const string BILLTYPE_RAWMATTRANSFERINSTOCK_ID = "35882449537813";
/// <summary>
/// 管理员Id天益4厂管理员
/// </summary>

View File

@@ -13,8 +13,15 @@ namespace Tnb.WarehouseMgr.Entities.Dto
public int layers { get; set; }
public string carry_code { get; set; }
public string material_code { get; set; }
public string material_name { get; set; }
public string code_batch { get; set; }
public decimal num { get; set; }
/// <summary>
/// 0 空库包括已锁定1 空载具码垛 2 合格品 3 待检 4 让步接受 5 不合格
/// </summary>
public int status { get; set; }
/// </summary>
public string barcode { get; set; }
}
public class ZsjOutput
{

View File

@@ -8,9 +8,9 @@ namespace Tnb.WarehouseMgr.Entities.Entity;
/// 委外订单表子表
/// </summary>
[SugarTable("wms_outsource_order_d")]
public partial class WmsOutsourceOrderD : BaseEntity<string>
public partial class WmsOutsourceD : BaseEntity<string>
{
public WmsOutsourceOrderD()
public WmsOutsourceD()
{
id = SnowflakeIdHelper.NextId();
}

View File

@@ -8,14 +8,14 @@ namespace Tnb.WarehouseMgr.Entities.Entity;
/// 委外订单
/// </summary>
[SugarTable("wms_outsource_order_h")]
public partial class WmsOutsourceOrderH : BaseEntity<string>
public partial class WmsOutsourceH : BaseEntity<string>
{
public WmsOutsourceOrderH()
public WmsOutsourceH()
{
id = SnowflakeIdHelper.NextId();
}
/// <summary>
/// 采购订单号
/// 委外订单号
/// </summary>
public string? outsource_order { get; set; }

View File

@@ -108,4 +108,9 @@ public partial class WmsPurchaseD : BaseEntity<string>
/// </summary>
[SugarColumn(IsIgnore = true)]
public string? container_no { get; set; }
/// <summary>
/// 质检结果
/// </summary>
public string? qc_res { get; set; }
}

View File

@@ -0,0 +1,122 @@
using JNPF.Common.Contracts;
using JNPF.Common.Security;
using SqlSugar;
namespace Tnb.WarehouseMgr.Entities.Entity;
/// <summary>
/// 原材料调拨入库表子表
/// </summary>
[SugarTable("wms_rawmat_transferinstock_d")]
public partial class WmsRawmatTransferinstockD : BaseEntity<string>
{
public WmsRawmatTransferinstockD()
{
id = SnowflakeIdHelper.NextId();
}
/// <summary>
/// 主表id
/// </summary>
public string? bill_id { get; set; }
/// <summary>
/// 物料id
/// </summary>
public string? matcode_id { get; set; }
/// <summary>
/// 物料编号
/// </summary>
public string? matcode { get; set; }
/// <summary>
/// 物料描述
/// </summary>
public string? matspecification { get; set; }
/// <summary>
/// 单位
/// </summary>
public string? unit { get; set; }
/// <summary>
/// 入库数量
/// </summary>
public decimal? qty { get; set; }
/// <summary>
/// 实入数量
/// </summary>
public decimal? actual_qty { get; set; }
/// <summary>
/// 库存地点ID
/// </summary>
public string? stock_location_id { get; set; }
/// <summary>
/// 库存地点
/// </summary>
public string? stock_location { get; set; }
/// <summary>
/// 批次
/// </summary>
public string? code_batch { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? remark { get; set; }
/// <summary>
/// 扩展字段
/// </summary>
public string? extras { get; set; }
/// <summary>
/// 交货日期
/// </summary>
public string? delivery_date { get; set; }
/// <summary>
/// 净价
/// </summary>
public string? net_price { get; set; }
/// <summary>
/// 货币
/// </summary>
public string? currency { get; set; }
/// <summary>
/// 工厂
/// </summary>
public string? factory { get; set; }
/// <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>
/// erp_line_pk
/// </summary>
public string? erp_line_pk { get; set; }
}

View File

@@ -0,0 +1,112 @@
using JNPF.Common.Contracts;
using JNPF.Common.Security;
using SqlSugar;
namespace Tnb.WarehouseMgr.Entities.Entity;
/// <summary>
/// 原材料调拨入库
/// </summary>
[SugarTable("wms_rawmat_transferinstock_h")]
public partial class WmsRawmatTransferinstockH : BaseEntity<string>
{
public WmsRawmatTransferinstockH()
{
id = SnowflakeIdHelper.NextId();
}
/// <summary>
/// 原材料调拨入库单号
/// </summary>
public string? bill_code { get; set; }
/// <summary>
/// 联系人
/// </summary>
public string? contact_person { get; set; }
/// <summary>
/// 电话
/// </summary>
public string? tel { get; set; }
/// <summary>
/// 出库组织id
/// </summary>
public string? outstockorg_id { get; set; }
/// <summary>
/// 出库组织编号
/// </summary>
public string? outstockorg_code { get; set; }
/// <summary>
/// 出库组织名称
/// </summary>
public string? outstockorg_name { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? remark { get; set; }
/// <summary>
/// 扩展字段
/// </summary>
public string? extras { get; set; }
/// <summary>
/// 时间戳
/// </summary>
public string? time_stamp { get; set; }
/// <summary>
/// 单据类型
/// </summary>
public string? document_type { get; set; }
/// <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>
/// 所属组织
/// </summary>
public string? org_id { get; set; }
/// <summary>
/// 流程任务Id
/// </summary>
public string? f_flowtaskid { get; set; }
/// <summary>
/// 流程引擎Id
/// </summary>
public string? f_flowid { get; set; }
/// <summary>
/// erp_pk
/// </summary>
public string? erp_pk { get; set; }
/// <summary>
/// erp_bill_code
/// </summary>
public string? erp_bill_code { get; set; }
}

View File

@@ -111,5 +111,9 @@ public partial class WmsTempCode : BaseEntity<string>
/// 规格型号
/// </summary>
public string? container_no { get; set; }
/// <summary>
/// 需求单据类型
/// </summary>
public string? required_type { get; set; }
}

View File

@@ -479,15 +479,18 @@ namespace Tnb.WarehouseMgr
{
// 排除电梯任务 其他任务取消时自动解锁起点和终点库位
//int unlockStartRow = await _db.Updateable<BasLocation>().SetColumns(r => r.is_lock == 0).Where(r => r.location_code == wmsDistaskH.startlocation_code).ExecuteCommandAsync();
//if (unlockStartRow > 0)
//{
// Logger.Information($"成功解锁起点库位{wmsDistaskH.startlocation_code}");
//}
//else
//{
// Logger.Information($"未成功解锁起点库位{wmsDistaskH.startlocation_code}");
//}
if (wmsDistaskH.act_start_date == null)
{
int unlockStartRow = await _db.Updateable<BasLocation>().SetColumns(r => r.is_lock == 0).Where(r => r.location_code == wmsDistaskH.startlocation_code).ExecuteCommandAsync();
if (unlockStartRow > 0)
{
Logger.Information($"成功解锁起点库位{wmsDistaskH.startlocation_code}");
}
else
{
Logger.Information($"未成功解锁起点库位{wmsDistaskH.startlocation_code}");
}
}
int unlockEndRow = await _db.Updateable<BasLocation>().SetColumns(r => r.is_lock == 0).Where(r => r.location_code == wmsDistaskH.endlocation_code).ExecuteCommandAsync();
if (unlockEndRow > 0)
@@ -502,8 +505,8 @@ namespace Tnb.WarehouseMgr
int unlockCarryRow = await _db.Updateable<WmsCarryH>().SetColumns(r => new WmsCarryH
{
is_lock = 0,
//location_id = wmsDistaskH.startlocation_code.Contains("BGWRKYCL0") ? WmsWareHouseConst.LOCATION_YCLBGWDRK : r.location_id,
//location_code = wmsDistaskH.startlocation_code.Contains("BGWRKYCL0") ? "YCLBGWDRK" : r.location_code
location_id = wmsDistaskH.startlocation_code.Contains("BGWRKYCL0") ? WmsWareHouseConst.LOCATION_YCLBGWDRK : r.location_id,
location_code = wmsDistaskH.startlocation_code.Contains("BGWRKYCL0") ? "YCLBGWDRK" : r.location_code
}).Where(r => r.carry_code == wmsDistaskH.carry_code).ExecuteCommandAsync();
if (unlockCarryRow > 0)
{
@@ -557,15 +560,18 @@ namespace Tnb.WarehouseMgr
{
// 排除电梯任务 其他任务取消时自动解锁起点和终点库位
//int unlockStartRow = await _db.Updateable<BasLocation>().SetColumns(r => r.is_lock == 0).Where(r => r.location_code == wmsDistaskH.startlocation_code).ExecuteCommandAsync();
//if (unlockStartRow > 0)
//{
// Logger.Information($"成功起点解锁库位{wmsDistaskH.startlocation_code}");
//}
//else
//{
// Logger.Information($"未成功解锁起点库位{wmsDistaskH.startlocation_code}");
//}
if (wmsDistaskH.act_start_date == null)
{
int unlockStartRow = await _db.Updateable<BasLocation>().SetColumns(r => r.is_lock == 0).Where(r => r.location_code == wmsDistaskH.startlocation_code).ExecuteCommandAsync();
if (unlockStartRow > 0)
{
Logger.Information($"成功起点解锁库位{wmsDistaskH.startlocation_code}");
}
else
{
Logger.Information($"未成功解锁起点库位{wmsDistaskH.startlocation_code}");
}
}
int unlockEndRow = await _db.Updateable<BasLocation>().SetColumns(r => r.is_lock == 0).Where(r => r.location_code == wmsDistaskH.endlocation_code).ExecuteCommandAsync();
if (unlockEndRow > 0)
@@ -580,8 +586,8 @@ namespace Tnb.WarehouseMgr
int unlockCarryRow = await _db.Updateable<WmsCarryH>().SetColumns(r => new WmsCarryH
{
is_lock = 0,
//location_id = wmsDistaskH.startlocation_code.Contains("BGWRKYCL0") ? WmsWareHouseConst.LOCATION_YCLBGWDRK : wmsDistaskH.startlocation_id,
//location_code = wmsDistaskH.startlocation_code.Contains("BGWRKYCL0") ? "YCLBGWDRK" : wmsDistaskH.startlocation_code
location_id = wmsDistaskH.startlocation_code.Contains("BGWRKYCL0") ? WmsWareHouseConst.LOCATION_YCLBGWDRK : r.location_id,
location_code = wmsDistaskH.startlocation_code.Contains("BGWRKYCL0") ? "YCLBGWDRK" : r.location_code
}).Where(r => r.carry_code == wmsDistaskH.carry_code).ExecuteCommandAsync();
if (unlockCarryRow > 0)
{

View File

@@ -437,7 +437,7 @@ namespace Tnb.WarehouseMgr
try
{
await db.Ado.BeginTranAsync();
WmsOutsourceOrderH wmsOutsourceOrderH = new WmsOutsourceOrderH();
WmsOutsourceH wmsOutsourceOrderH = new WmsOutsourceH();
string Code = await _billRuleService.GetBillNumber("Purchase");
wmsOutsourceOrderH.outsource_order = Code;
@@ -460,10 +460,10 @@ namespace Tnb.WarehouseMgr
await db.Insertable(wmsOutsourceOrderH).ExecuteCommandAsync();
List<WmsOutsourceOrderD> wmsOutsourceOrderDs = new List<WmsOutsourceOrderD>();
List<WmsOutsourceD> wmsOutsourceOrderDs = new List<WmsOutsourceD>();
foreach (var detail in input.details)
{
WmsOutsourceOrderD wmsOutsourceOrderD = new WmsOutsourceOrderD();
WmsOutsourceD wmsOutsourceOrderD = new WmsOutsourceD();
wmsOutsourceOrderD.fk_wms_outsource_order_id = wmsOutsourceOrderH.id;
wmsOutsourceOrderD.matcode = detail.material_code;
@@ -721,6 +721,8 @@ namespace Tnb.WarehouseMgr
wmsSaleH.bill_code = Code;
wmsSaleH.erp_bill_code = input.bill_code;
wmsSaleH.bill_type = "25103439022357";//销售出库单
wmsSaleH.audit_status = 0;
wmsSaleH.generate_type = "1";
wmsSaleH.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
wmsSaleH.warehouse_id = warehouse_outstock.id;
wmsSaleH.customer_code = input.customer_code;

View File

@@ -174,10 +174,21 @@ namespace Tnb.WarehouseMgr
public async Task<dynamic> GetYCLlocation()
{
List<List<LocationOutput>> LocationOutputss=new List<List<LocationOutput>>();
var list =await _db.Queryable<BasLocation>().Where(p=> p.wh_id == "1" && p.is_type == "0" && !p.location_code.Contains("-3")).OrderBy(p=>p.location_code).ToListAsync();
var carrys=await _db.Queryable<WmsCarryH>().ToListAsync();
var carrycodes=await _db.Queryable<WmsCarryCode>().ToListAsync();
var lastdata=string.Empty;
var list =await _db.Queryable<BasLocation>().Where(p=> p.wh_id == "1" && p.is_type == "0" && !p.location_code.Contains("-3"))
.OrderBy(p=>p.location_code).ToListAsync();
var carrys = await _db.Queryable<WmsCarryH>().ToListAsync();
var carrycodes = await _db.Queryable<WmsCarryCode>().ToListAsync();
var mats = await _db.Queryable<BasMaterial>().ToListAsync();
var qcresults = await _db.Queryable<WmsCarryCode>()
.InnerJoin<WmsTempCode>((a, b) => a.barcode == b.barcode)
.InnerJoin<WmsPurchaseD>((a, b, c) => c.id == b.require_id)
.Where((a, b, c) => !string.IsNullOrEmpty(c.qc_res)).Select((a,b,c)=>new
{
barcode = a.barcode,
qc_res = c.qc_res
}).ToListAsync();
var lastdata = string.Empty;
List<LocationOutput> LocationOutputs = new List<LocationOutput>();
foreach (var data in list)
{
@@ -190,6 +201,7 @@ namespace Tnb.WarehouseMgr
locationOutput.location_code = data.location_code.Replace("YCL-", "");
locationOutput.layers = data.layers;
locationOutput.type = 0;
int status = 0;
if (carrys.Where(p => p.location_id == data.id).Any())
{
var carry= carrys.Where(p => p.location_id == data.id).First();
@@ -200,11 +212,69 @@ namespace Tnb.WarehouseMgr
var carrycode = carrycodes.Where(p => p.carry_id == carry.id).First();
locationOutput.type = 2;
locationOutput.material_code = carrycode.material_code;
locationOutput.barcode = carrycode.barcode;
if (mats.Where(p => p.id == carrycode.material_id).Any())
{
var mat = mats.Where(p => p.id == carrycode.material_id).First();
locationOutput.material_name = mat.name;
}
locationOutput.code_batch = carrycode.code_batch;
locationOutput.num = carrycode.codeqty;
if (qcresults.Where(p => p.barcode == carrycode.barcode).Any())
{
var qcresult = qcresults.Where(p => p.barcode == carrycode.barcode).First();
string qc_result = qcresult.qc_res;
switch (qc_result)
{
case "await":
{
status = 3;
break;
}
case "vergeOk":
{
status = 4;
break;
}
case "no":
{
status = 5;
break;
}
case "ok":
{
status = 2;
break;
}
default:
{
status = 3;
break;
}
}
}
else
{
status = 3;
}
}
else
{
if (data.is_use == "1")
{
status = 1;
}
else
{
status = 0;
}
}
}
lastdata = data.location_code;
locationOutput.status = status;
LocationOutputs.Add(locationOutput);
// 。。。。。。
@@ -243,6 +313,7 @@ namespace Tnb.WarehouseMgr
if (carrycodes.Where(p => p.carry_id == carry.id).Any())
{
var carrycode = carrycodes.Where(p => p.carry_id == carry.id).First();
locationOutput.barcode = carrycode.barcode;
locationOutput.type = 2;
locationOutput.material_code = carrycode.material_code;
locationOutput.num = carrycode.codeqty;

View File

@@ -3218,6 +3218,7 @@ namespace Tnb.WarehouseMgr
{
try
{
await s_floor2CreatePretask.WaitAsync();
List<WmsCarryD> wmsCarryCodes = _db.Queryable<WmsCarryD>().Where(r => r.carry_id == rackid).ToList();
int move_num = 6;
@@ -3225,17 +3226,16 @@ namespace Tnb.WarehouseMgr
BasLocation startLocation = null;
int index = 0;
await _db.Ado.BeginTranAsync();
foreach (WmsCarryD wmsCarryD in wmsCarryCodes)
{
await s_floor2CreatePretask.WaitAsync();
//入库取终点 //出库起点
InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_ZC_ID, Size = 1 };
List<BasLocation> endLocations = await InStockStrategy(inStockStrategyInput);
if (endLocations.Count == 0)
{
Logger.LogWarning("没有可用的入库库位");
continue;
throw new Exception("没有可用的入库库位");
}
// 每6个重新获取一次起点
@@ -3256,8 +3256,7 @@ namespace Tnb.WarehouseMgr
bool isMatch = await IsCarryAndLocationMatchByCarryStd(carry, endLocation);
if (!isMatch)
{
Logger.LogWarning("库位与载具规格不匹配");
continue;
throw new Exception("库位与载具规格不匹配");
}
CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput();
@@ -3293,25 +3292,26 @@ namespace Tnb.WarehouseMgr
await _db.Updateable<BasLocation>().SetColumns(it => it.is_lock == 1).Where(r => r.id == endLocations[0].id).ExecuteCommandAsync();
await _db.Updateable<BasLocation>().SetColumns(it => it.task_nums == it.task_nums + 1).Where(r => r.id == startLocation.id).ExecuteCommandAsync();
Entities.Dto.Outputs.Result res = await CommonCreatePretask(commonCreatePretaskInput);
Entities.Dto.Outputs.Result res = await CommonCreatePretask(commonCreatePretaskInput, _db);
if (res.code == JNPF.Common.Enums.HttpStatusCode.OK)
{
}
else
{
Logger.LogInformation($"【二楼kiva把料架送到下升降机后生成中储仓入库任务】 未成功生成预任务 起点{startLocation.location_code} 终点{endLocation.location_code} 料箱 {wmsCarryD.membercarry_code}");
throw new Exception($"【二楼kiva把料架送到下升降机后生成中储仓入库任务】 未成功生成预任务 起点{startLocation.location_code} 终点{endLocation.location_code} 料箱 {wmsCarryD.membercarry_code}");
}
index++;
s_floor2CreatePretask.Release();
}
await _db.Ado.CommitTranAsync();
return true;
}
catch(Exception ex)
{
Logger.LogInformation($"【二楼kiva把料架送到下升降机后生成中储仓入库任务】{ex}");
s_floor2CreatePretask.Release();
await _db.Ado.RollbackTranAsync();
return false;
}
finally

View File

@@ -176,6 +176,12 @@ namespace Tnb.WarehouseMgr
throw new Exception($"托盘{input.carrycode}已绑定物料!");
}
var WmsTempCodes = await _db.Queryable<WmsTempCode>().Where(it => input.details.Select(r => r.barcode).Contains(it.barcode)).ToListAsync();
if (WmsTempCodes.DistinctBy(r => r.required_type).Count() == 1)
{
throw new Exception($"不能绑定多个不同类型单据打印的条码!:{string.Join(',', WmsTempCodes.DistinctBy(r => r.required_type))}");
}
List<WmsCarryCode> WmsCarryCodes = new List<WmsCarryCode>();
foreach (var detail in input.details)
{

View File

@@ -0,0 +1,157 @@
using System.Text;
using System.Text.RegularExpressions;
using JNPF.Common.Contracts;
using JNPF.Common.Core.Manager;
using JNPF.Common.Dtos.VisualDev;
using JNPF.Common.Enums;
using JNPF.Common.Extension;
using JNPF.Common.Security;
using JNPF.FriendlyException;
using JNPF.Logging;
using JNPF.Systems.Interfaces.System;
using JNPF.VisualDev;
using JNPF.VisualDev.Interfaces;
using Mapster;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Npgsql;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.Common.Utils;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Dto;
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
using Tnb.WarehouseMgr.Entities.Dto.Outputs;
using Tnb.WarehouseMgr.Entities.Entity;
using Tnb.WarehouseMgr.Entities.Enums;
using Tnb.WarehouseMgr.Interfaces;
namespace Tnb.WarehouseMgr
{
/// <summary>
/// 委外收货订单
/// </summary>
[OverideVisualDev(ModuleConsts.MODULE_WMSOUTSOURCEORDER_ID)]
public class WmsOutsourceService : BaseWareHouseService
{
private readonly ISqlSugarClient _db;
private readonly IUserManager _userManager;
private readonly IBillRullService _billRullService;
private readonly IRunService _runService;
private readonly IVisualDevService _visualDevService;
public WmsOutsourceService(
ISqlSugarRepository<WmsOutsourceH> repository,
IUserManager userManager,
IBillRullService billRullService,
IRunService runService,
IVisualDevService visualDevService)
{
_db = repository.AsSugarClient();
_userManager = userManager;
_billRullService = billRullService;
_runService = runService;
_visualDevService = visualDevService;
}
public override async Task ModifyAsync(WareHouseUpInput input)
{
if (input == null)
{
throw new ArgumentNullException(nameof(input));
}
//if (!isOk)
//{
// throw Oops.Oh(ErrorCode.COM1001);
//}
}
[HttpPost]
public async Task BarCodePrint(BarCodeInput input)
{
if (input == null)
{
throw new AppFriendlyException(nameof(input), 500);
}
List<string> barcodes = new();
try
{
await _db.Ado.BeginTranAsync();
if (_db.Queryable<WmsTempCode>().Where(it => input.BillId == it.require_id).Any())
{
throw new AppFriendlyException("条码已生成", 500);
};
WmsOutsourceD WmsOutsourceD = await _db.Queryable<WmsOutsourceD>().Where(it => input.BillId == it.id).FirstAsync();
WmsOutsourceH WmsOutsourceH = await _db.Queryable<WmsOutsourceH>().Where(it => WmsOutsourceD.fk_wms_outsource_order_id == it.id).FirstAsync();
if (WmsOutsourceD.actual_quantity == 0)
{
throw new AppFriendlyException("到货数量为0没有物料可以打印", 500);
};
List<WmsTempCode> wmsTempCodes = new();
decimal? minPacking = (await _db.Queryable<BasMaterial>().FirstAsync(it => it.id == WmsOutsourceD.matcode_id))?.minpacking;
if (!minPacking.HasValue || minPacking.Value <= 0)
{
throw new AppFriendlyException($"物料{WmsOutsourceD.matcode} {WmsOutsourceD.matcode_id} 包装数量为空或者等于0无法打印", 500);
};
int codeNum = 0;
if (minPacking.HasValue && minPacking.Value > 0)
{
int mod = (int)(WmsOutsourceD.actual_quantity % minPacking.Value);
codeNum = (int)(mod > 0 ? (WmsOutsourceD.actual_quantity / minPacking.Value) + 1 : WmsOutsourceD.actual_quantity / minPacking.Value);
for (int j = 0; j < codeNum; j++)
{
int index = j + 1;
//string code = $"{WmsPurchaseD.material_code}-{WmsPurchaseD.code_batch}-{index.ToString().PadLeft(4, '0')}";
// 变更加流水号
string watercode = await _billRullService.GetBillNumber(WmsWareHouseConst.WMS_OUTSOURCE_MAT_ENCODE);
string code = $"WWSH{watercode}";
WmsTempCode barCode = new()
{
material_id = WmsOutsourceD.matcode_id,
material_code = WmsOutsourceD.matcode,
barcode = code,
code_batch = WmsOutsourceD.code_batch,
material_specification = WmsOutsourceD.matspecification,
codeqty = minPacking,
unit_id = WmsOutsourceD.unit,
is_lock = 0,
is_end = 0,
require_id = WmsOutsourceD.id,
require_code = WmsOutsourceH.outsource_order,
create_id = _userManager.UserId,
create_time = DateTime.Now,
required_type = WmsWareHouseConst.BILLTYPE_OUTSOURCE_ID
};
if (index == codeNum)
barCode.codeqty = mod == 0 ? minPacking : mod;
wmsTempCodes.Add(barCode);
}
await _db.Insertable(wmsTempCodes).ExecuteCommandAsync();
}
await _db.Ado.CommitTranAsync();
barcodes.AddRange(wmsTempCodes.Select(p => p.barcode).ToList());
if (barcodes?.Count > 0)
{
var ip = _db.Queryable<BasFactoryConfig>().Where(p => p.key == "printerip").FirstAsync().Result.value;
base.BarCodePrint(barcodes, 1, ip);
}
}
catch (Exception ex)
{
Logger.LogError($"【BarCodePrint】" + ex.Message);
Logger.LogError($"【BarCodePrint】" + ex.StackTrace);
await _db.Ado.RollbackTranAsync();
throw;
}
}
}
}

View File

@@ -63,6 +63,19 @@ namespace Tnb.WarehouseMgr
return await Task.FromResult(sss);
}
public override async Task ModifyAsync(WareHouseUpInput input)
{
if (input == null)
{
throw new ArgumentNullException(nameof(input));
}
//if (!isOk)
//{
// throw Oops.Oh(ErrorCode.COM1001);
//}
}
/// <summary>
/// 采购收货
/// </summary>
@@ -284,6 +297,7 @@ namespace Tnb.WarehouseMgr
throw new AppFriendlyException("条码已生成", 500);
};
WmsPurchaseD WmsPurchaseD = await _db.Queryable<WmsPurchaseD>().Where(it => input.BillId == it.id).FirstAsync();
WmsPurchaseH WmsPurchaseH = await _db.Queryable<WmsPurchaseH>().Where(it => WmsPurchaseD.bill_id == it.id).FirstAsync();
if (WmsPurchaseD.purchase_arriveqty == 0)
{
@@ -324,9 +338,10 @@ namespace Tnb.WarehouseMgr
is_lock = 0,
is_end = 0,
require_id = WmsPurchaseD.id,
require_code = WmsPurchaseD.id,
require_code = WmsPurchaseH.bill_code,
create_id = _userManager.UserId,
create_time = DateTime.Now
create_time = DateTime.Now,
required_type = WmsWareHouseConst.BILLTYPE_PURCHASE_ID
};
if (index == codeNum)
barCode.codeqty = mod == 0 ? minPacking : mod;

View File

@@ -0,0 +1,158 @@
using System.Text;
using System.Text.RegularExpressions;
using JNPF.Common.Contracts;
using JNPF.Common.Core.Manager;
using JNPF.Common.Dtos.VisualDev;
using JNPF.Common.Enums;
using JNPF.Common.Extension;
using JNPF.Common.Security;
using JNPF.FriendlyException;
using JNPF.Logging;
using JNPF.Systems.Interfaces.System;
using JNPF.VisualDev;
using JNPF.VisualDev.Interfaces;
using Mapster;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Npgsql;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.Common.Utils;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Dto;
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
using Tnb.WarehouseMgr.Entities.Dto.Outputs;
using Tnb.WarehouseMgr.Entities.Entity;
using Tnb.WarehouseMgr.Entities.Enums;
using Tnb.WarehouseMgr.Interfaces;
namespace Tnb.WarehouseMgr
{
/// <summary>
/// 原材料调拨入库单
/// </summary>
[OverideVisualDev(ModuleConsts.MODULE_WMSRAWMATTRANSFERINSTOCK_ID)]
public class WmsRawmatTransferinstockService : BaseWareHouseService
{
private readonly ISqlSugarClient _db;
private readonly IUserManager _userManager;
private readonly IBillRullService _billRullService;
private readonly IRunService _runService;
private readonly IVisualDevService _visualDevService;
public WmsRawmatTransferinstockService(
ISqlSugarRepository<WmsRawmatTransferinstockH> repository,
IUserManager userManager,
IBillRullService billRullService,
IRunService runService,
IVisualDevService visualDevService)
{
_db = repository.AsSugarClient();
_userManager = userManager;
_billRullService = billRullService;
_runService = runService;
_visualDevService = visualDevService;
}
public override async Task ModifyAsync(WareHouseUpInput input)
{
if (input == null)
{
throw new ArgumentNullException(nameof(input));
}
//if (!isOk)
//{
// throw Oops.Oh(ErrorCode.COM1001);
//}
}
[HttpPost]
public async Task BarCodePrint(BarCodeInput input)
{
if (input == null)
{
throw new AppFriendlyException(nameof(input), 500);
}
List<string> barcodes = new();
try
{
await _db.Ado.BeginTranAsync();
if (_db.Queryable<WmsTempCode>().Where(it => input.BillId == it.require_id).Any())
{
throw new AppFriendlyException("条码已生成", 500);
};
WmsRawmatTransferinstockD WmsRawmatTransferinstockD = await _db.Queryable<WmsRawmatTransferinstockD>().Where(it => input.BillId == it.id).FirstAsync();
WmsRawmatTransferinstockH WmsRawmatTransferinstockH = await _db.Queryable<WmsRawmatTransferinstockH>().Where(it => WmsRawmatTransferinstockD.bill_id == it.id).FirstAsync();
if (WmsRawmatTransferinstockD.actual_qty == 0)
{
throw new AppFriendlyException("到货数量为0没有物料可以打印", 500);
};
List<WmsTempCode> wmsTempCodes = new();
decimal? minPacking = (await _db.Queryable<BasMaterial>().FirstAsync(it => it.id == WmsRawmatTransferinstockD.matcode_id))?.minpacking;
if (!minPacking.HasValue || minPacking.Value <= 0)
{
throw new AppFriendlyException($"物料{WmsRawmatTransferinstockD.matcode} {WmsRawmatTransferinstockD.matcode_id} 包装数量为空或者等于0无法打印", 500);
};
int codeNum = 0;
if (minPacking.HasValue && minPacking.Value > 0)
{
int mod = (int)(WmsRawmatTransferinstockD.actual_qty % minPacking.Value);
codeNum = (int)(mod > 0 ? (WmsRawmatTransferinstockD.actual_qty / minPacking.Value) + 1 : WmsRawmatTransferinstockD.actual_qty / minPacking.Value);
for (int j = 0; j < codeNum; j++)
{
int index = j + 1;
//string code = $"{WmsPurchaseD.material_code}-{WmsPurchaseD.code_batch}-{index.ToString().PadLeft(4, '0')}";
// 变更加流水号
string watercode = await _billRullService.GetBillNumber(WmsWareHouseConst.WMS_TRANSFER_RAWMAT_ENCODE);
string code = $"YCLDBRK{watercode}";
WmsTempCode barCode = new()
{
material_id = WmsRawmatTransferinstockD.matcode_id,
material_code = WmsRawmatTransferinstockD.matcode,
barcode = code,
code_batch = WmsRawmatTransferinstockD.code_batch,
material_specification = WmsRawmatTransferinstockD.matspecification,
codeqty = minPacking,
unit_id = WmsRawmatTransferinstockD.unit,
is_lock = 0,
is_end = 0,
require_id = WmsRawmatTransferinstockD.id,
require_code = WmsRawmatTransferinstockH.bill_code,
create_id = _userManager.UserId,
create_time = DateTime.Now,
required_type = WmsWareHouseConst.BILLTYPE_RAWMATTRANSFERINSTOCK_ID
};
if (index == codeNum)
barCode.codeqty = mod == 0 ? minPacking : mod;
wmsTempCodes.Add(barCode);
}
await _db.Insertable(wmsTempCodes).ExecuteCommandAsync();
}
await _db.Ado.CommitTranAsync();
barcodes.AddRange(wmsTempCodes.Select(p => p.barcode).ToList());
if (barcodes?.Count > 0)
{
var ip = _db.Queryable<BasFactoryConfig>().Where(p => p.key == "printerip").FirstAsync().Result.value;
base.BarCodePrint(barcodes, 1, ip);
}
}
catch (Exception ex)
{
Logger.LogError($"【BarCodePrint】" + ex.Message);
Logger.LogError($"【BarCodePrint】" + ex.StackTrace);
await _db.Ado.RollbackTranAsync();
throw;
}
}
}
}