委外订单接口,原材料移库策略调整
This commit is contained in:
@@ -664,7 +664,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
foreach (WmsCarryH wmsCarryH in items)
|
||||
{
|
||||
BasLocation startlocation = await db_YCLInternalTransfer.Queryable<BasLocation>().Where(r => r.id == wmsCarryH.location_id).FirstAsync();
|
||||
InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = "1", Size = 1, passage = startlocation.passage, AvoidBusyPassage = true, Region_id = WmsWareHouseConst.REGION_Purchase_ID };
|
||||
InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = "1", Size = 1, passage = startlocation.passage, AvoidBusyPassage = true, Region_id = WmsWareHouseConst.REGION_Purchase_ID, PolicyCode = WmsWareHouseConst.POLICY_YCLINSTOCK };
|
||||
List<BasLocation> endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput);
|
||||
if (endLocations.Count() == 0)
|
||||
|
||||
|
||||
@@ -537,5 +537,10 @@
|
||||
/// 原材料八工位待入库
|
||||
/// </summary>
|
||||
public const string LOCATION_YCLBGWDRK = "35750287617301";
|
||||
|
||||
/// <summary>
|
||||
/// 原材料仓内转移策略
|
||||
/// </summary>
|
||||
public const string POLICY_YCLINSTOCK = "WISP202407250001";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs
|
||||
{
|
||||
public class OutsourceOrderInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 单号
|
||||
/// </summary>
|
||||
public string? outsource_order { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 联系人
|
||||
/// </summary>
|
||||
public string? contact_person { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 电话
|
||||
/// </summary>
|
||||
public string? tel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 供应商编号
|
||||
/// </summary>
|
||||
public string? supplier_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 凭证日期
|
||||
/// </summary>
|
||||
public DateTime? certificate_date { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 供货日期
|
||||
/// </summary>
|
||||
public DateTime? ship_date { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 主表pk
|
||||
/// </summary>
|
||||
public string? erp_pk { get; set; }
|
||||
|
||||
public List<OutsourceOrderDetail> details { get; set; }
|
||||
}
|
||||
public class OutsourceOrderDetail
|
||||
{
|
||||
/// <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? outsource_quantity { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 库存地点编号
|
||||
/// </summary>
|
||||
public string? stock_location { 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; }
|
||||
}
|
||||
}
|
||||
@@ -31,5 +31,8 @@
|
||||
|
||||
// 巷道
|
||||
public string passage { get; set; }
|
||||
|
||||
// 策略编号
|
||||
public string PolicyCode { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Entity;
|
||||
|
||||
/// <summary>
|
||||
/// 委外订单表子表
|
||||
/// </summary>
|
||||
[SugarTable("wms_outsource_order_d")]
|
||||
public partial class WmsOutsourceOrderD : BaseEntity<string>
|
||||
{
|
||||
public WmsOutsourceOrderD()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
/// <summary>
|
||||
/// 主表id
|
||||
/// </summary>
|
||||
public string? fk_wms_outsource_order_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? outsource_quantity { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 实收数量
|
||||
/// </summary>
|
||||
public decimal? actual_quantity { 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; }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Entity;
|
||||
|
||||
/// <summary>
|
||||
/// 委外订单
|
||||
/// </summary>
|
||||
[SugarTable("wms_outsource_order_h")]
|
||||
public partial class WmsOutsourceOrderH : BaseEntity<string>
|
||||
{
|
||||
public WmsOutsourceOrderH()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
/// <summary>
|
||||
/// 采购订单号
|
||||
/// </summary>
|
||||
public string? outsource_order { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 联系人
|
||||
/// </summary>
|
||||
public string? contact_person { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 电话
|
||||
/// </summary>
|
||||
public string? tel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 供应商ID
|
||||
/// </summary>
|
||||
public string? supplier_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 供应商编号
|
||||
/// </summary>
|
||||
public string? supplier_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 供应商名称
|
||||
/// </summary>
|
||||
public string? supplier_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? certificate_date { 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; }
|
||||
|
||||
/// <summary>
|
||||
/// 供货日期
|
||||
/// </summary>
|
||||
public DateTime? ship_date { get; set; }
|
||||
|
||||
}
|
||||
@@ -42,12 +42,12 @@ public partial class WmsPurchaseOrderD : BaseEntity<string>
|
||||
/// <summary>
|
||||
/// 采购数量
|
||||
/// </summary>
|
||||
public string? purchase_quantity { get; set; }
|
||||
public decimal? purchase_quantity { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 实收数量
|
||||
/// </summary>
|
||||
public string? actual_quantity { get; set; }
|
||||
public decimal? actual_quantity { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 库存地点ID
|
||||
|
||||
@@ -362,14 +362,14 @@ namespace Tnb.WarehouseMgr
|
||||
wmsPurchaseOrderD.fk_wms_purchase_order_id = wmsPurchaseOrderH.id;
|
||||
wmsPurchaseOrderD.matcode = detail.material_code;
|
||||
wmsPurchaseOrderD.unit = detail.unit_code;
|
||||
wmsPurchaseOrderD.purchase_quantity = detail.purchase_quantity.ToString();
|
||||
wmsPurchaseOrderD.purchase_quantity = detail.purchase_quantity;
|
||||
wmsPurchaseOrderD.stock_location = detail.stock_location;
|
||||
wmsPurchaseOrderD.code_batch = detail.code_batch;
|
||||
wmsPurchaseOrderD.delivery_date = detail.delivery_date.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
wmsPurchaseOrderD.erp_line_pk = detail.erp_line_pk;
|
||||
wmsPurchaseOrderD.create_id = WmsWareHouseConst.ErpUserId;
|
||||
wmsPurchaseOrderD.create_time = DateTime.Now;
|
||||
wmsPurchaseOrderD.actual_quantity = "0";
|
||||
wmsPurchaseOrderD.actual_quantity = 0;
|
||||
|
||||
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
|
||||
if (material != null)
|
||||
@@ -401,6 +401,112 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 委外订单
|
||||
/// </summary>
|
||||
[HttpPost, NonUnify, AllowAnonymous]
|
||||
public async Task<Entities.Dto.Outputs.Result> OutsourceOrder(OutsourceOrderInput input)
|
||||
{
|
||||
LoggerErp2Mes.LogInformation($"【OutsourceOrderInput】ERP传入数据:{JsonConvert.SerializeObject(input)}");
|
||||
var db = _repository.AsSugarClient();
|
||||
|
||||
if (string.IsNullOrEmpty(input.erp_pk))
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($"【OutsourceOrderInput】主表主键不能为空!");
|
||||
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($@"【OutsourceOrderInput】子表主键不能为空!");
|
||||
throw new AppFriendlyException($@"子表主键不能为空!", 500);
|
||||
}
|
||||
|
||||
var wmsPurchaseOrdersDistinct = input.details.Select(r => new
|
||||
{
|
||||
material_id = r.material_code,
|
||||
code_batch = r.code_batch,
|
||||
}).Distinct();
|
||||
if (wmsPurchaseOrdersDistinct.Count() < input.details.Count)
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【OutsourceOrderInput】表体存在物料和批号重复的明细!");
|
||||
throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
await db.Ado.BeginTranAsync();
|
||||
WmsOutsourceOrderH wmsOutsourceOrderH = new WmsOutsourceOrderH();
|
||||
string Code = await _billRuleService.GetBillNumber("Purchase");
|
||||
|
||||
wmsOutsourceOrderH.outsource_order = Code;
|
||||
wmsOutsourceOrderH.erp_bill_code = input.outsource_order;
|
||||
wmsOutsourceOrderH.contact_person = input.contact_person;
|
||||
wmsOutsourceOrderH.tel = input.tel;
|
||||
wmsOutsourceOrderH.supplier_code = input.supplier_code;
|
||||
wmsOutsourceOrderH.certificate_date = input.certificate_date.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
wmsOutsourceOrderH.ship_date = input.ship_date;
|
||||
wmsOutsourceOrderH.erp_pk = input.erp_pk;
|
||||
wmsOutsourceOrderH.create_id = WmsWareHouseConst.ErpUserId;
|
||||
wmsOutsourceOrderH.create_time = DateTime.Now;
|
||||
var supplier = await db.Queryable<BasSupplier>().Where(p => p.supplier_code == input.supplier_code).FirstAsync();
|
||||
if (supplier != null)
|
||||
{
|
||||
wmsOutsourceOrderH.supplier_id = supplier.id;
|
||||
wmsOutsourceOrderH.supplier_name = supplier.supplier_name;
|
||||
}
|
||||
|
||||
await db.Insertable(wmsOutsourceOrderH).ExecuteCommandAsync();
|
||||
|
||||
|
||||
List<WmsOutsourceOrderD> wmsOutsourceOrderDs = new List<WmsOutsourceOrderD>();
|
||||
foreach (var detail in input.details)
|
||||
{
|
||||
WmsOutsourceOrderD wmsOutsourceOrderD = new WmsOutsourceOrderD();
|
||||
|
||||
wmsOutsourceOrderD.fk_wms_outsource_order_id = wmsOutsourceOrderH.id;
|
||||
wmsOutsourceOrderD.matcode = detail.material_code;
|
||||
wmsOutsourceOrderD.unit = detail.unit_code;
|
||||
wmsOutsourceOrderD.outsource_quantity = detail.outsource_quantity;
|
||||
wmsOutsourceOrderD.stock_location = detail.stock_location;
|
||||
wmsOutsourceOrderD.code_batch = detail.code_batch;
|
||||
wmsOutsourceOrderD.delivery_date = detail.delivery_date.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
wmsOutsourceOrderD.erp_line_pk = detail.erp_line_pk;
|
||||
wmsOutsourceOrderD.create_id = WmsWareHouseConst.ErpUserId;
|
||||
wmsOutsourceOrderD.create_time = DateTime.Now;
|
||||
wmsOutsourceOrderD.actual_quantity = 0;
|
||||
|
||||
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
|
||||
if (material != null)
|
||||
{
|
||||
wmsOutsourceOrderD.matcode_id = material.id;
|
||||
wmsOutsourceOrderD.matspecification = material.material_specification;
|
||||
}
|
||||
|
||||
wmsOutsourceOrderDs.Add(wmsOutsourceOrderD);
|
||||
}
|
||||
|
||||
await db.Insertable(wmsOutsourceOrderDs).ExecuteCommandAsync();
|
||||
|
||||
await db.Ado.CommitTranAsync();
|
||||
|
||||
LoggerErp2Mes.LogInformation($"【OutsourceOrderInput】成功生成单据:{Code}");
|
||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LoggerErp2Mes.LogError($"【OutsourceOrderInput】{ex.Message}");
|
||||
LoggerErp2Mes.LogError($"【OutsourceOrderInput】{ex.StackTrace}");
|
||||
await db.Ado.RollbackTranAsync();
|
||||
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 转库单
|
||||
/// </summary>
|
||||
|
||||
@@ -216,7 +216,8 @@ namespace Tnb.WarehouseMgr
|
||||
try
|
||||
{
|
||||
var db = _db.CopyNew();
|
||||
WmsInstockPolicies policy = await db.Queryable<WmsInstockPolicies>().Where(it => it.status == 1).FirstAsync();
|
||||
WmsInstockPolicies policy = await db.Queryable<WmsInstockPolicies>().Where(it => it.status == 1 && (string.IsNullOrEmpty(input.PolicyCode)||
|
||||
it.bill_code == input.PolicyCode)).FirstAsync();
|
||||
if (policy == null)
|
||||
{
|
||||
throw new AppFriendlyException("没有可用的策略", 500);
|
||||
|
||||
Reference in New Issue
Block a user