增加PC载具物料绑定记录表(载具绑定)、erp调拨订单、报表bug

This commit is contained in:
2024-08-15 16:21:24 +08:00
parent e9795f4cb9
commit 454b39d8f9
8 changed files with 431 additions and 23 deletions

View File

@@ -0,0 +1,80 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs
{
public class TransferOrderInput
{
/// <summary>
/// 单号
/// </summary>
public string? transfer_order { get; set; }
/// <summary>
/// 部门编码
/// </summary>
public string? dept_code { get; set; }
/// <summary>
/// 业务员编码
/// </summary>
public string? biller { get; set; }
/// <summary>
/// 入库组织编号
/// </summary>
public string? instockorg_code { get; set; }
/// <summary>
/// 供货日期
/// </summary>
public DateTime? ship_date { get; set; }
/// <summary>
/// 主表pk
/// </summary>
public string? erp_pk { get; set; }
public List<TransferOrderInputDetail> details { get; set; }
}
public class TransferOrderInputDetail
{
/// <summary>
/// 行号
/// </summary>
public string? lineno { get; set; }
/// <summary>
/// 物品代码
/// </summary>
public string? material_code { get; set; }
/// <summary>
/// 单位代码
/// </summary>
public string? unit_code { get; set; }
/// <summary>
/// 采购数量
/// </summary>
public decimal? qty { get; set; }
/// <summary>
/// 批次
/// </summary>
public string? code_batch { get; set; }
/// <summary>
/// 交货日期
/// </summary>
public DateTime? delivery_date { get; set; }
/// <summary>
/// 子表主键
/// </summary>
public string erp_line_pk { get; set; }
}
}

View File

@@ -0,0 +1,97 @@
using JNPF.Common.Contracts;
using JNPF.Common.Security;
using SqlSugar;
namespace Tnb.WarehouseMgr.Entities.Entity;
/// <summary>
/// 调拨订单(子表)
/// </summary>
[SugarTable("wms_transfer_order_d")]
public partial class WmsTransferOrderD : BaseEntity<string>
{
public WmsTransferOrderD()
{
id = SnowflakeIdHelper.NextId();
}
/// <summary>
/// 主表id
/// </summary>
public string? bill_id { 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>
/// 备注
/// </summary>
public string? remark { 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 { get; set; }
/// <summary>
/// 批号
/// </summary>
public string? batchno { get; set; }
/// <summary>
/// 数量
/// </summary>
public decimal? qty { get; set; }
/// <summary>
/// erp_line_pk
/// </summary>
public string? erp_line_pk { get; set; }
/// <summary>
/// 行号
/// </summary>
public string? lineno { get; set; }
}

View File

@@ -0,0 +1,82 @@
using JNPF.Common.Contracts;
using JNPF.Common.Security;
using SqlSugar;
namespace Tnb.WarehouseMgr.Entities.Entity;
/// <summary>
/// 调拨订单
/// </summary>
[SugarTable("wms_transfer_order_h")]
public partial class WmsTransferOrderH : BaseEntity<string>
{
public WmsTransferOrderH()
{
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? 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; }
/// <summary>
/// 所属组织
/// </summary>
public string? org_id { get; set; }
/// <summary>
/// 单号
/// </summary>
public string? bill_code { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? remark { get; set; }
/// <summary>
/// 部门编码
/// </summary>
public string? dept_code { get; set; }
/// <summary>
/// 业务员编码
/// </summary>
public string? biller { get; set; }
}

View File

@@ -946,6 +946,116 @@ namespace Tnb.WarehouseMgr
}
}
/// <summary>
/// 调拨订单
/// </summary>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Entities.Dto.Outputs.Result> TransferOrder(TransferOrderInput input)
{
LoggerErp2Mes.LogInformation($"【TransferOrder】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【TransferOrder】主表主键不能为空");
return await ToApiResult(HttpStatusCode.InternalServerError, $"主表主键不能为空!");
}
int count_erp_line_pk = input.details.Where(r => string.IsNullOrEmpty(r.erp_line_pk)).Count();
if (count_erp_line_pk > 0)
{
_LoggerErp2Mes.LogWarning($@"【TransferOrder】子表主键不能为空");
throw new AppFriendlyException($@"子表主键不能为空!", 500);
}
var wmsTransferOrdersDistinct = input.details.Select(r => new
{
material_id = r.material_code,
code_batch = r.code_batch,
}).Distinct();
if (wmsTransferOrdersDistinct.Count() < input.details.Count)
{
_LoggerErp2Mes.LogWarning($@"【TransferOrder】表体存在物料和批号重复的明细");
throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500);
}
try
{
await db.Ado.BeginTranAsync();
WmsTransferOrderH wmsTransferOrderH = new WmsTransferOrderH();
string Code = await _billRuleService.GetBillNumber("WmsTransferOrder");
wmsTransferOrderH.bill_code = Code;
wmsTransferOrderH.erp_bill_code = input.transfer_order;
wmsTransferOrderH.biller = input.biller;
wmsTransferOrderH.dept_code = input.dept_code;
wmsTransferOrderH.erp_pk = input.erp_pk;
wmsTransferOrderH.create_id = WmsWareHouseConst.ErpUserId;
wmsTransferOrderH.create_time = DateTime.Now;
wmsTransferOrderH.org_id = WmsWareHouseConst.AdministratorOrgId;
await db.Insertable(wmsTransferOrderH).ExecuteCommandAsync();
List<WmsTransferOrderD> wmsTransferOrderDs = new List<WmsTransferOrderD>();
foreach (var detail in input.details)
{
WmsTransferOrderD wmsTransferOrderD = new WmsTransferOrderD();
wmsTransferOrderD.bill_id = wmsTransferOrderD.id;
wmsTransferOrderD.unit = detail.unit_code;
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync();
if (erpExtendField != null)
{
wmsTransferOrderD.unit = erpExtendField.EnCode;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOrder】表体明细中单位{detail.unit_code}在wms系统中未找到");
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到", 500);
}
wmsTransferOrderD.qty = detail.qty;
wmsTransferOrderD.batchno = detail.code_batch;
wmsTransferOrderD.erp_line_pk = detail.erp_line_pk;
wmsTransferOrderD.create_id = WmsWareHouseConst.ErpUserId;
wmsTransferOrderD.create_time = DateTime.Now;
wmsTransferOrderD.lineno = detail.lineno;
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsTransferOrderD.material_id = material.id;
wmsTransferOrderD.material_code = material.code;
wmsTransferOrderD.material_name = material.name;
wmsTransferOrderD.material_specification = material.material_specification;
}
wmsTransferOrderDs.Add(wmsTransferOrderD);
}
await db.Insertable(wmsTransferOrderDs).ExecuteCommandAsync();
await db.Ado.CommitTranAsync();
LoggerErp2Mes.LogInformation($"【TransferOrder】成功生成单据:{Code}");
return await ToApiResult(HttpStatusCode.OK, "成功");
}
catch (Exception ex)
{
LoggerErp2Mes.LogError($"【TransferOrder】{ex.Message}");
LoggerErp2Mes.LogError($"【TransferOrder】{ex.StackTrace}");
await db.Ado.RollbackTranAsync();
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
}
finally
{
}
}
protected Task<Entities.Dto.Outputs.Result> ToApiResult(HttpStatusCode statusCode, string msg)
{
Entities.Dto.Outputs.Result result = new()

View File

@@ -2339,7 +2339,7 @@ namespace Tnb.WarehouseMgr
}
// 三四号电梯出货 暂存仓到三楼电梯以及一楼电梯出库任务发type5
if ((doubleCarryRunElevators.Contains(dis.device_id) && dis.endlocation_code.Contains("DT")) || doubleCarryRunElevatorsF1Code.Contains(dis.startlocation_code))
if ((dis.startlocation_code.Contains("CPOutstockCache") && dis.endlocation_code.Contains("DT")) || doubleCarryRunElevatorsF1Code.Contains(dis.startlocation_code))
{
reqBody.type = (int)EnumTaskChainType.;
}

View File

@@ -308,7 +308,6 @@ namespace Tnb.WarehouseMgr
db = dbConn;
try
{
WmsCarryH? carry = await db.Queryable<WmsCarryH>().SingleAsync(it => it.carry_code == input.carrycode);
if (carry == null)
{
@@ -316,6 +315,18 @@ namespace Tnb.WarehouseMgr
}
List<WmsCarryCode> WmsCarryCodes = new List<WmsCarryCode>();
WmsCarrybindH wmsCarrybindH = new WmsCarrybindH();
wmsCarrybindH.carry_id = carry.id;
wmsCarrybindH.carry_code = carry.carry_code;
wmsCarrybindH.create_id = input.create_id;
wmsCarrybindH.create_time = DateTime.Now;
wmsCarrybindH.org_id = WmsWareHouseConst.AdministratorOrgId;
wmsCarrybindH.location_id = carry.location_id;
wmsCarrybindH.location_code = carry.location_code;
List<WmsCarrybindCode> wmsCarrybindCodes = new List<WmsCarrybindCode>();
foreach (var detail in input.details)
{
var WmsCarryCode = detail.Adapt<WmsCarryCode>();
@@ -325,10 +336,18 @@ namespace Tnb.WarehouseMgr
WmsCarryCode.create_id = input.create_id;
WmsCarryCode.create_time = DateTime.Now;
WmsCarryCodes.Add(WmsCarryCode);
var wmsCarrybindCode = detail.Adapt<WmsCarrybindCode>();
wmsCarrybindCode.carrybind_id = wmsCarrybindH.id;
wmsCarrybindCodes.Add(wmsCarrybindCode);
}
int rows = 0;
if (WmsCarryCodes.Count > 0)
{
rows = await db.Insertable(WmsCarryCodes).ExecuteCommandAsync();
await _db.Insertable(wmsCarrybindH).ExecuteCommandAsync();
await _db.Insertable(wmsCarrybindCodes).ExecuteCommandAsync();
}
if (rows == 0)
{
throw new Exception($"物料列表为空,不能提交绑定,可能的原因;1.需要检查扫码设置(新PDA) 2.未扫到有效的二维码 详细信息:接收到{input.details.Count}个条码 但是成功绑定的条码数量为0个");
@@ -378,18 +397,33 @@ namespace Tnb.WarehouseMgr
if (carry != null && subCarry != null)
{
// 插入子载具绑定记录
//VisualDevModelDataCrInput visualDevModelCrInput = new() { data = new Dictionary<string, object>() };
//visualDevModelCrInput.data[nameof(WmsCarrybindH.carry_id)] = input.carry_id;
//visualDevModelCrInput.data[nameof(WmsCarrybindH.carry_code)] = input.carry_code;
//visualDevModelCrInput.data[nameof(WmsCarrybindH.membercarry_id)] = input.membercarry_id;
//visualDevModelCrInput.data[nameof(WmsCarrybindH.membercarry_code)] = input.membercarry_code;
//visualDevModelCrInput.data[nameof(WmsCarrybindH.type)] = 0;
//visualDevModelCrInput.data[nameof(WmsCarrybindH.carrystd_id)] = carry.carrystd_id;
////visualDevModelCrInput.data[nameof(WmsCarrybindH.create_id)] = input.create_id;
//visualDevModelCrInput.data[nameof(WmsCarrybindH.create_time)] = DateTime.Now;
//visualDevModelCrInput.data[nameof(WmsCarrybindH.loc)] = 1;
//VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSCARRYBIND_ID, true);
//await _runService.Create(templateEntity, visualDevModelCrInput);
WmsCarrybindH wmsCarrybindH = new WmsCarrybindH();
wmsCarrybindH.carry_id = carry.id;
wmsCarrybindH.carry_code = carry.carry_code;
wmsCarrybindH.membercarry_id = input.membercarry_id;
wmsCarrybindH.membercarry_code = input.membercarry_code;
wmsCarrybindH.create_id = input.create_id;
wmsCarrybindH.create_time = DateTime.Now;
wmsCarrybindH.org_id = WmsWareHouseConst.AdministratorOrgId;
wmsCarrybindH.location_id = carry.location_id;
wmsCarrybindH.location_code = carry.location_code;
List<WmsCarrybindCode> wmsCarrybindCodes = new List<WmsCarrybindCode>();
List<WmsCarryCode> WmsCarryCodes = db.Queryable<WmsCarryCode>().Where(r => r.carry_id == input.membercarry_id).ToList();
foreach (var detail in WmsCarryCodes)
{
var wmsCarrybindCode = detail.Adapt<WmsCarrybindCode>();
wmsCarrybindCode.membercarry_id = input.membercarry_id;
wmsCarrybindCode.membercarry_code = input.membercarry_code;
wmsCarrybindCode.carrybind_id = wmsCarrybindH.id;
wmsCarrybindCode.org_id = WmsWareHouseConst.AdministratorOrgId;
wmsCarrybindCodes.Add(wmsCarrybindCode);
}
await db.Insertable(wmsCarrybindH).ExecuteCommandAsync();
await db.Insertable(wmsCarrybindCodes).ExecuteCommandAsync();
WmsCarryD wmsCarryD = new()
{

View File

@@ -46,7 +46,7 @@ namespace Tnb.WarehouseMgr
material_specification = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.material_specification));
}
IEnumerable<WmsStockReportH?> result;
List<WmsStockReportH?> result = new List<WmsStockReportH?>();
if (string.IsNullOrEmpty(supplier_code))
{
List<WmsStockReportH> items = await _db.Queryable<WmsCarryCode>().InnerJoin<WmsCarryH>((a, b) => a.carry_id == b.id)
@@ -76,12 +76,14 @@ namespace Tnb.WarehouseMgr
List<WmsCarryCode> carryCodes = await _db.Queryable<WmsCarryCode>().ToListAsync();
var storeMap = items.DistinctBy(x => new { x.warehouse_id, x.material_id, x.code_batch }).ToDictionary(x => new { x.warehouse_id, x.material_id, x.code_batch }, x => x);
result = items.GroupBy(g => new { g.warehouse_id, g.material_id, g.code_batch }).Select(itGroup =>
var group = items.GroupBy(g => new { g.warehouse_id, g.material_id, g.code_batch });
foreach (var itGroup in group)
{
_ = storeMap.TryGetValue(itGroup.Key, out WmsStockReportH? stockReport);
List<WmsCarryCode> curCarryCodes = carryCodes.FindAll(x => x.warehouse_id == itGroup.Key.warehouse_id && x.material_id == itGroup.Key.material_id
&& x.code_batch == itGroup.Key.code_batch);
stockReport.codeqty = 0;
curCarryCodes.ForEach(x =>
{
stockReport.codeqty += x.codeqty;
@@ -102,8 +104,9 @@ namespace Tnb.WarehouseMgr
// stockReport.codeqty += x.codeqty;
//});
return stockReport;
});
//return stockReport;
result.Add(stockReport);
}
}
else
{
@@ -134,19 +137,21 @@ namespace Tnb.WarehouseMgr
List<WmsCarryCode> carryCodes = await _db.Queryable<WmsCarryCode>().ToListAsync();
var storeMap = items.DistinctBy(x => new { x.warehouse_id, x.material_id, x.code_batch, x.supplier_code }).ToDictionary(x => new { x.warehouse_id, x.material_id, x.code_batch, x.supplier_code }, x => x);
result = items.GroupBy(g => new { g.warehouse_id, g.material_id, g.code_batch, g.supplier_code }).Select(itGroup =>
var group = items.GroupBy(g => new { g.warehouse_id, g.material_id, g.code_batch, g.supplier_code });
foreach (var itGroup in group)
{
_ = storeMap.TryGetValue(itGroup.Key, out WmsStockReportH? stockReport);
List<WmsStockReportCode> curCarryCodes = carryCodes.Adapt<List<WmsStockReportCode>>().FindAll(x => x.warehouse_id == itGroup.Key.warehouse_id && x.material_id == itGroup.Key.material_id
&& x.code_batch == itGroup.Key.code_batch && x.supplier_code == itGroup.Key.supplier_code);
stockReport.codeqty = 0;
curCarryCodes.ForEach(x =>
{
stockReport.codeqty += x.codeqty;
});
return stockReport;
});
result.Add(stockReport);
}
}

View File

@@ -500,7 +500,7 @@ namespace JNPF.VisualDev
foreach (JObject row in respBodyList)
{
Dictionary<string, object> keyValuePairs = new Dictionary<string, object>();
foreach (JProperty jProperty in firstRow.Properties())
foreach (JProperty jProperty in row.Properties())
{
keyValuePairs.Add(jProperty.Name, jProperty.Value);
}