diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs
new file mode 100644
index 00000000..682b0448
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs
@@ -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
+ {
+ ///
+ /// 单号
+ ///
+ public string? transfer_order { get; set; }
+
+ ///
+ /// 部门编码
+ ///
+ public string? dept_code { get; set; }
+
+ ///
+ /// 业务员编码
+ ///
+ public string? biller { get; set; }
+
+ ///
+ /// 入库组织编号
+ ///
+ public string? instockorg_code { get; set; }
+
+ ///
+ /// 供货日期
+ ///
+ public DateTime? ship_date { get; set; }
+
+ ///
+ /// 主表pk
+ ///
+ public string? erp_pk { get; set; }
+
+ public List details { get; set; }
+ }
+ public class TransferOrderInputDetail
+ {
+ ///
+ /// 行号
+ ///
+ public string? lineno { get; set; }
+
+ ///
+ /// 物品代码
+ ///
+ public string? material_code { get; set; }
+
+ ///
+ /// 单位代码
+ ///
+ public string? unit_code { get; set; }
+
+ ///
+ /// 采购数量
+ ///
+ public decimal? qty { get; set; }
+
+ ///
+ /// 批次
+ ///
+ public string? code_batch { get; set; }
+
+ ///
+ /// 交货日期
+ ///
+ public DateTime? delivery_date { get; set; }
+
+ ///
+ /// 子表主键
+ ///
+ public string erp_line_pk { get; set; }
+ }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderD.cs
new file mode 100644
index 00000000..958f5d16
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderD.cs
@@ -0,0 +1,97 @@
+using JNPF.Common.Contracts;
+using JNPF.Common.Security;
+using SqlSugar;
+
+namespace Tnb.WarehouseMgr.Entities.Entity;
+
+///
+/// 调拨订单(子表)
+///
+[SugarTable("wms_transfer_order_d")]
+public partial class WmsTransferOrderD : BaseEntity
+{
+ public WmsTransferOrderD()
+ {
+ id = SnowflakeIdHelper.NextId();
+ }
+ ///
+ /// 主表id
+ ///
+ public string? bill_id { get; set; }
+
+ ///
+ /// 创建用户
+ ///
+ public string? create_id { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? create_time { get; set; }
+
+ ///
+ /// 修改用户
+ ///
+ public string? modify_id { get; set; }
+
+ ///
+ /// 修改时间
+ ///
+ public DateTime? modify_time { get; set; }
+
+ ///
+ /// 所属组织
+ ///
+ public string? org_id { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string? remark { get; set; }
+
+ ///
+ /// 物料id
+ ///
+ 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 string? unit { get; set; }
+
+ ///
+ /// 批号
+ ///
+ public string? batchno { get; set; }
+
+ ///
+ /// 数量
+ ///
+ public decimal? qty { get; set; }
+
+ ///
+ /// erp_line_pk
+ ///
+ public string? erp_line_pk { get; set; }
+
+ ///
+ /// 行号
+ ///
+ public string? lineno { get; set; }
+
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderH.cs
new file mode 100644
index 00000000..bdfc9d82
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderH.cs
@@ -0,0 +1,82 @@
+using JNPF.Common.Contracts;
+using JNPF.Common.Security;
+using SqlSugar;
+
+namespace Tnb.WarehouseMgr.Entities.Entity;
+
+///
+/// 调拨订单
+///
+[SugarTable("wms_transfer_order_h")]
+public partial class WmsTransferOrderH : BaseEntity
+{
+ public WmsTransferOrderH()
+ {
+ id = SnowflakeIdHelper.NextId();
+ }
+ ///
+ /// 创建用户
+ ///
+ public string? create_id { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? create_time { get; set; }
+
+ ///
+ /// 修改用户
+ ///
+ public string? modify_id { get; set; }
+
+ ///
+ /// 修改时间
+ ///
+ public DateTime? modify_time { get; set; }
+
+ ///
+ /// 流程任务Id
+ ///
+ public string? f_flowtaskid { get; set; }
+
+ ///
+ /// 流程引擎Id
+ ///
+ public string? f_flowid { get; set; }
+
+ ///
+ /// erp_pk
+ ///
+ public string? erp_pk { get; set; }
+
+ ///
+ /// erp_bill_code
+ ///
+ public string? erp_bill_code { get; set; }
+
+ ///
+ /// 所属组织
+ ///
+ public string? org_id { get; set; }
+
+ ///
+ /// 单号
+ ///
+ public string? bill_code { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string? remark { get; set; }
+
+ ///
+ /// 部门编码
+ ///
+ public string? dept_code { get; set; }
+
+ ///
+ /// 业务员编码
+ ///
+ public string? biller { get; set; }
+
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs
index 7e49f8ff..31f21d2d 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs
@@ -946,6 +946,116 @@ namespace Tnb.WarehouseMgr
}
}
+ ///
+ /// 调拨订单
+ ///
+ [HttpPost, NonUnify, AllowAnonymous]
+ public async Task 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 wmsTransferOrderDs = new List();
+ 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().InnerJoin((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().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 ToApiResult(HttpStatusCode statusCode, string msg)
{
Entities.Dto.Outputs.Result result = new()
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
index ae11a9a0..c848cc61 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
@@ -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.电梯载两托货;
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs
index 018755a3..2d74bd06 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs
@@ -308,7 +308,6 @@ namespace Tnb.WarehouseMgr
db = dbConn;
try
{
-
WmsCarryH? carry = await db.Queryable().SingleAsync(it => it.carry_code == input.carrycode);
if (carry == null)
{
@@ -316,6 +315,18 @@ namespace Tnb.WarehouseMgr
}
List WmsCarryCodes = new List();
+
+ 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 wmsCarrybindCodes = new List();
+
foreach (var detail in input.details)
{
var WmsCarryCode = detail.Adapt();
@@ -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.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() };
- //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 wmsCarrybindCodes = new List();
+
+ List WmsCarryCodes = db.Queryable().Where(r => r.carry_id == input.membercarry_id).ToList();
+ foreach (var detail in WmsCarryCodes)
+ {
+ var wmsCarrybindCode = detail.Adapt();
+ 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()
{
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs
index 7016f16f..540761f6 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs
@@ -46,7 +46,7 @@ namespace Tnb.WarehouseMgr
material_specification = JObject.Parse(input.queryJson).Value(nameof(WmsCarryCode.material_specification));
}
- IEnumerable result;
+ List result = new List();
if (string.IsNullOrEmpty(supplier_code))
{
List items = await _db.Queryable().InnerJoin((a, b) => a.carry_id == b.id)
@@ -76,12 +76,14 @@ namespace Tnb.WarehouseMgr
List carryCodes = await _db.Queryable().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 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 carryCodes = await _db.Queryable().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 curCarryCodes = carryCodes.Adapt>().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);
+ }
}
diff --git a/visualdev/Tnb.VisualDev/VisualDevModelDataService.cs b/visualdev/Tnb.VisualDev/VisualDevModelDataService.cs
index 180ec555..0a48095a 100644
--- a/visualdev/Tnb.VisualDev/VisualDevModelDataService.cs
+++ b/visualdev/Tnb.VisualDev/VisualDevModelDataService.cs
@@ -500,7 +500,7 @@ namespace JNPF.VisualDev
foreach (JObject row in respBodyList)
{
Dictionary keyValuePairs = new Dictionary();
- foreach (JProperty jProperty in firstRow.Properties())
+ foreach (JProperty jProperty in row.Properties())
{
keyValuePairs.Add(jProperty.Name, jProperty.Value);
}