材料出库、调拨查询重写;采购退料;生成条码接口
This commit is contained in:
@@ -137,6 +137,10 @@ public class ModuleConsts
|
||||
/// </summary>
|
||||
public const string MODULE_WmsRawmatTransferoutstock_ID = "MODULE_WmsRawmatTransferoutstock_ID";
|
||||
/// <summary>
|
||||
/// 模块标识-采购退货 todo
|
||||
/// </summary>
|
||||
public const string MODULE_WmsPurchaseReturn_ID = "MODULE_WmsPurchaseReturn_ID";
|
||||
/// <summary>
|
||||
/// 模块标识-材料出库单 todo
|
||||
/// </summary>
|
||||
public const string MODULE_WmsRawmatOutstock_ID = "MODULE_WmsRawmatOutstock_ID";
|
||||
|
||||
@@ -290,6 +290,14 @@
|
||||
/// </summary>
|
||||
public const string BIZTYPE_WMSINSTOCK_ID = "26191496816421";
|
||||
/// <summary>
|
||||
/// 预任务生成业务类型-原材料委外入库
|
||||
/// </summary>
|
||||
public const string BIZTYPE_OUTSOURCE_ID = "36366312756501";
|
||||
/// <summary>
|
||||
/// 预任务生成业务类型-原材料调拨入库
|
||||
/// </summary>
|
||||
public const string BIZTYPE_RAWMATTRANSFERINSTOCK_ID = "36366317804821";
|
||||
/// <summary>
|
||||
/// 预任务生成业务类型-一般出库
|
||||
/// </summary>
|
||||
public const string BIZTYPE_WMSOUTSTOCK_ID = "26191522660645";
|
||||
@@ -318,7 +326,7 @@
|
||||
/// </summary>
|
||||
public const string BIZTYPE_WMSSALERELEASE_ID = "25104446664213";
|
||||
/// <summary>
|
||||
/// 预任务生成业务类型-原材料转库单 todo
|
||||
/// 预任务生成业务类型-原材料转库单
|
||||
/// </summary>
|
||||
public const string BIZTYPE_WMSMATERIALTRANSFER_ID = "34354738929685";
|
||||
/// <summary>
|
||||
@@ -326,6 +334,10 @@
|
||||
/// </summary>
|
||||
public const string BIZTYPE_WmsRawmatTransferoutstock_ID = "36318854044437";
|
||||
/// <summary>
|
||||
/// 预任务生成业务类型-采购退库(原材料)
|
||||
/// </summary>
|
||||
public const string BIZTYPE_WmsPurchaseReturn_ID = "36367919005717";
|
||||
/// <summary>
|
||||
/// 预任务生成业务类型-原材料仓材料出库单
|
||||
/// </summary>
|
||||
public const string BIZTYPE_WmsRawmatOutstock_ID = "36340105558037";
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
using Tnb.WarehouseMgr.Entities.Consts;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Dto
|
||||
{
|
||||
/// <summary>
|
||||
/// 库房业务更新输入参数
|
||||
/// </summary>
|
||||
public class PurchaseReturnInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 组织ID
|
||||
/// </summary>
|
||||
public string org_id { get; set; } = WmsWareHouseConst.AdministratorOrgId;
|
||||
/// <summary>
|
||||
/// 创建用户
|
||||
/// </summary>
|
||||
public string create_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 来源单据id
|
||||
/// </summary>
|
||||
public string? source_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 载具
|
||||
/// </summary>
|
||||
public List<PurchaseReturnDetailInput> carrys { get; set; }
|
||||
}
|
||||
|
||||
public class PurchaseReturnDetailInput
|
||||
{
|
||||
public string carry_code { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Entity;
|
||||
|
||||
/// <summary>
|
||||
/// 采购退货单载具表
|
||||
/// </summary>
|
||||
[SugarTable("wms_purchase_return_c")]
|
||||
public partial class WmsPurchaseReturnC : BaseEntity<string>
|
||||
{
|
||||
public WmsPurchaseReturnC()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
/// <summary>
|
||||
/// 采购退货单id
|
||||
/// </summary>
|
||||
public string? bill_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 载具ID
|
||||
/// </summary>
|
||||
public string? carry_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 载具编号
|
||||
/// </summary>
|
||||
public string? carry_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建用户
|
||||
/// </summary>
|
||||
public string? create_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime? create_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 终点库位id
|
||||
/// </summary>
|
||||
public string? endlocation_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 终点库位编码
|
||||
/// </summary>
|
||||
public string? endlocation_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 起点库位id
|
||||
/// </summary>
|
||||
public string? startlocation_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 起点库位编码
|
||||
/// </summary>
|
||||
public string? startlocation_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 采购退货单明细id
|
||||
/// </summary>
|
||||
public string? mat_bill_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 载具数量
|
||||
/// </summary>
|
||||
public decimal? qty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 签收数量
|
||||
/// </summary>
|
||||
public decimal? sign_qty { get; set; }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Entity;
|
||||
|
||||
/// <summary>
|
||||
/// 采购退货子表
|
||||
/// </summary>
|
||||
[SugarTable("wms_purchase_return_d")]
|
||||
public partial class WmsPurchaseReturnD : BaseEntity<string>
|
||||
{
|
||||
public WmsPurchaseReturnD()
|
||||
{
|
||||
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>
|
||||
/// 批次
|
||||
/// </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? 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; }
|
||||
|
||||
/// <summary>
|
||||
/// 行号
|
||||
/// </summary>
|
||||
public string? lineno { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Entity;
|
||||
|
||||
/// <summary>
|
||||
/// 采购退货
|
||||
/// </summary>
|
||||
[SugarTable("wms_purchase_return_h")]
|
||||
public partial class WmsPurchaseReturnH : BaseEntity<string>
|
||||
{
|
||||
public WmsPurchaseReturnH()
|
||||
{
|
||||
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>
|
||||
/// 备注
|
||||
/// </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>
|
||||
/// 部门编码
|
||||
/// </summary>
|
||||
public string? dept_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 业务员编码
|
||||
/// </summary>
|
||||
public string? biller { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 下发状态
|
||||
/// </summary>
|
||||
public string? issuance_status { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 采购订单
|
||||
/// </summary>
|
||||
public string? purchase_order { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 出库类型(BIP)
|
||||
/// </summary>
|
||||
public string? outstock_type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 出库仓库
|
||||
/// </summary>
|
||||
public string? warehouse_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// erp_pk
|
||||
/// </summary>
|
||||
public string? erp_pk { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// erp_bill_code
|
||||
/// </summary>
|
||||
public string? erp_bill_code { get; set; }
|
||||
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Aop.Api.Domain;
|
||||
using JNPF.Common.Enums;
|
||||
@@ -320,104 +321,201 @@ namespace Tnb.WarehouseMgr
|
||||
throw new AppFriendlyException($@"子表主键不能为空!", 500);
|
||||
}
|
||||
|
||||
var wmsPurchaseOrdersDistinct = input.details.Select(r => new
|
||||
{
|
||||
material_id = r.material_code,
|
||||
code_batch = r.code_batch,
|
||||
}).Distinct();
|
||||
//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($@"【PurchaseOrderInput】表体存在物料和批号重复的明细!");
|
||||
// throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500);
|
||||
//}
|
||||
|
||||
|
||||
List<PurchaseOrderDetail> details = input.details.Where(r => r.purchase_quantity > 0).ToList();
|
||||
List<PurchaseOrderDetail> details_return = input.details.Where(r => r.purchase_quantity < 0).ToList();
|
||||
// purchase_quantity 是负数作为采购退料
|
||||
|
||||
await db.Ado.BeginTranAsync();
|
||||
// 判断是否为重复传输的采购订单
|
||||
WmsPurchaseOrderH wmsPurchaseOrderRep = await db.Queryable<WmsPurchaseOrderH>().Where(r => r.erp_pk == input.erp_pk).FirstAsync();
|
||||
if (wmsPurchaseOrderRep != null)
|
||||
|
||||
if (details.Count > 0)
|
||||
{
|
||||
// 判断收货单是否已经生成
|
||||
WmsPurchaseH wmsPurchaseH = await db.Queryable<WmsPurchaseH>().Where(r => r.source_id == wmsPurchaseOrderRep.id).FirstAsync();
|
||||
if (wmsPurchaseH != null)
|
||||
// 判断是否为重复传输的采购订单
|
||||
WmsPurchaseOrderH wmsPurchaseOrderRep = await db.Queryable<WmsPurchaseOrderH>().Where(r => r.erp_pk == input.erp_pk).FirstAsync();
|
||||
if (wmsPurchaseOrderRep != null)
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【PurchaseOrderInput】wms已创建收货单{wmsPurchaseH.bill_code}!");
|
||||
throw new AppFriendlyException($@"wms已创建收货单{wmsPurchaseH.bill_code}!", 500);
|
||||
// 判断收货单是否已经生成
|
||||
WmsPurchaseH wmsPurchaseH = await db.Queryable<WmsPurchaseH>().Where(r => r.source_id == wmsPurchaseOrderRep.id).FirstAsync();
|
||||
if (wmsPurchaseH != null)
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【PurchaseOrderInput】wms已创建收货单{wmsPurchaseH.bill_code}!");
|
||||
throw new AppFriendlyException($@"wms已创建收货单{wmsPurchaseH.bill_code}!", 500);
|
||||
}
|
||||
else // 删除数据重新插入
|
||||
{
|
||||
await db.Deleteable<WmsPurchaseOrderH>().Where(r => r.id == wmsPurchaseOrderRep.id).ExecuteCommandAsync();
|
||||
await db.Deleteable<WmsPurchaseOrderD>().Where(r => r.fk_wms_purchase_order_id == wmsPurchaseOrderRep.id).ExecuteCommandAsync();
|
||||
}
|
||||
}
|
||||
else // 删除数据重新插入
|
||||
|
||||
WmsPurchaseOrderH wmsPurchaseOrderH = new WmsPurchaseOrderH();
|
||||
string Code = await _billRuleService.GetBillNumber("Purchase");
|
||||
|
||||
wmsPurchaseOrderH.purchase_order = Code;
|
||||
wmsPurchaseOrderH.erp_bill_code = input.purchase_order;
|
||||
wmsPurchaseOrderH.contact_person = input.contact_person;
|
||||
wmsPurchaseOrderH.tel = input.tel;
|
||||
wmsPurchaseOrderH.supplier_code = input.supplier_code;
|
||||
wmsPurchaseOrderH.certificate_date = input.certificate_date.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
wmsPurchaseOrderH.ship_date = input.ship_date;
|
||||
wmsPurchaseOrderH.erp_pk = input.erp_pk;
|
||||
wmsPurchaseOrderH.create_id = WmsWareHouseConst.ErpUserId;
|
||||
wmsPurchaseOrderH.create_time = DateTime.Now;
|
||||
var supplier = await db.Queryable<BasSupplier>().Where(p => p.supplier_code == input.supplier_code).FirstAsync();
|
||||
if (supplier != null)
|
||||
{
|
||||
await db.Deleteable<WmsPurchaseOrderH>().Where(r => r.id == wmsPurchaseOrderRep.id).ExecuteCommandAsync();
|
||||
await db.Deleteable<WmsPurchaseOrderD>().Where(r => r.fk_wms_purchase_order_id == wmsPurchaseOrderRep.id).ExecuteCommandAsync();
|
||||
wmsPurchaseOrderH.supplier_id = supplier.id;
|
||||
wmsPurchaseOrderH.supplier_name = supplier.supplier_name;
|
||||
}
|
||||
|
||||
await db.Insertable(wmsPurchaseOrderH).ExecuteCommandAsync();
|
||||
|
||||
List<WmsPurchaseOrderD> wmsPurchaseOrderDs = new List<WmsPurchaseOrderD>();
|
||||
foreach (var detail in input.details)
|
||||
{
|
||||
WmsPurchaseOrderD wmsPurchaseOrderD = new WmsPurchaseOrderD();
|
||||
|
||||
wmsPurchaseOrderD.fk_wms_purchase_order_id = wmsPurchaseOrderH.id;
|
||||
wmsPurchaseOrderD.matcode = detail.material_code;
|
||||
wmsPurchaseOrderD.unit = detail.unit_code;
|
||||
|
||||
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => b.EnCode == detail.unit_code).Select((a, b) => b).FirstAsync();
|
||||
if (erpExtendField != null)
|
||||
{
|
||||
wmsPurchaseOrderD.unit_id = erpExtendField.Id;
|
||||
wmsPurchaseOrderD.unit = erpExtendField.EnCode;
|
||||
}
|
||||
else
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【PurchaseOrder】表体明细中单位{detail.unit_code}在wms系统中未找到!");
|
||||
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500);
|
||||
}
|
||||
|
||||
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.lineno = detail.lineno;
|
||||
wmsPurchaseOrderD.gift = detail.gift;
|
||||
|
||||
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
|
||||
if (material != null)
|
||||
{
|
||||
wmsPurchaseOrderD.matcode_id = material.id;
|
||||
wmsPurchaseOrderD.matspecification = material.material_specification;
|
||||
}
|
||||
|
||||
wmsPurchaseOrderDs.Add(wmsPurchaseOrderD);
|
||||
}
|
||||
|
||||
await db.Insertable(wmsPurchaseOrderDs).ExecuteCommandAsync();
|
||||
LoggerErp2Mes.LogInformation($"【PurchaseOrderInput】成功生成单据:{Code}");
|
||||
}
|
||||
|
||||
WmsPurchaseOrderH wmsPurchaseOrderH = new WmsPurchaseOrderH();
|
||||
string Code = await _billRuleService.GetBillNumber("Purchase");
|
||||
|
||||
wmsPurchaseOrderH.purchase_order = Code;
|
||||
wmsPurchaseOrderH.erp_bill_code = input.purchase_order;
|
||||
wmsPurchaseOrderH.contact_person = input.contact_person;
|
||||
wmsPurchaseOrderH.tel = input.tel;
|
||||
wmsPurchaseOrderH.supplier_code = input.supplier_code;
|
||||
wmsPurchaseOrderH.certificate_date = input.certificate_date.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
wmsPurchaseOrderH.ship_date = input.ship_date;
|
||||
wmsPurchaseOrderH.erp_pk = input.erp_pk;
|
||||
wmsPurchaseOrderH.create_id = WmsWareHouseConst.ErpUserId;
|
||||
wmsPurchaseOrderH.create_time = DateTime.Now;
|
||||
var supplier = await db.Queryable<BasSupplier>().Where(p => p.supplier_code == input.supplier_code).FirstAsync();
|
||||
if (supplier != null)
|
||||
if (details_return.Count > 0)
|
||||
{
|
||||
wmsPurchaseOrderH.supplier_id = supplier.id;
|
||||
wmsPurchaseOrderH.supplier_name = supplier.supplier_name;
|
||||
// 判断是否为重复传输的采购退料订单
|
||||
WmsPurchaseReturnH wmsPurchaseReturnRep = await db.Queryable<WmsPurchaseReturnH>().Where(r => r.erp_pk == input.erp_pk).FirstAsync();
|
||||
if (wmsPurchaseReturnRep != null)
|
||||
{
|
||||
// 判断采购退货是否已经下发
|
||||
List<WmsPurchaseReturnD> wmsPurchaseReturnDReps = await db.Queryable<WmsPurchaseReturnD>().Where(r => r.bill_id == wmsPurchaseReturnRep.id).ToListAsync();
|
||||
if (wmsPurchaseReturnDReps.Where(r => r.actual_qty > 0).Count() > 0)
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【PurchaseOrderInput】wms采购退货单{wmsPurchaseReturnRep.bill_code}已下发,不能退回!");
|
||||
throw new AppFriendlyException($@"wms采购退货单{wmsPurchaseReturnRep.bill_code}已下发,不能退回!", 500);
|
||||
}
|
||||
else // 删除数据重新插入
|
||||
{
|
||||
await db.Deleteable<WmsPurchaseReturnH>().Where(r => r.id == wmsPurchaseReturnRep.id).ExecuteCommandAsync();
|
||||
await db.Deleteable<WmsPurchaseReturnD>().Where(r => r.bill_id == wmsPurchaseReturnRep.id).ExecuteCommandAsync();
|
||||
}
|
||||
}
|
||||
|
||||
WmsPurchaseReturnH wmsPurchaseReturnH = new WmsPurchaseReturnH();
|
||||
string Code = await _billRuleService.GetBillNumber("WmsPurchaseReturn");
|
||||
|
||||
wmsPurchaseReturnH.purchase_order = Code;
|
||||
wmsPurchaseReturnH.erp_bill_code = input.purchase_order;
|
||||
wmsPurchaseReturnH.contact_person = input.contact_person;
|
||||
wmsPurchaseReturnH.tel = input.tel;
|
||||
//wmsPurchaseReturnH.supplier_code = input.supplier_code;
|
||||
//wmsPurchaseReturnH.certificate_date = input.certificate_date.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
//wmsPurchaseReturnH.ship_date = input.ship_date;
|
||||
wmsPurchaseReturnH.erp_pk = input.erp_pk;
|
||||
wmsPurchaseReturnH.create_id = WmsWareHouseConst.ErpUserId;
|
||||
wmsPurchaseReturnH.create_time = DateTime.Now;
|
||||
//var supplier = await db.Queryable<BasSupplier>().Where(p => p.supplier_code == input.supplier_code).FirstAsync();
|
||||
//if (supplier != null)
|
||||
//{
|
||||
// wmsPurchaseReturnH.supplier_id = supplier.id;
|
||||
// wmsPurchaseReturnH.supplier_name = supplier.supplier_name;
|
||||
//}
|
||||
|
||||
await db.Insertable(wmsPurchaseReturnH).ExecuteCommandAsync();
|
||||
|
||||
List<WmsPurchaseReturnD> wmsPurchaseReturnDs = new List<WmsPurchaseReturnD>();
|
||||
foreach (var detail in input.details)
|
||||
{
|
||||
WmsPurchaseReturnD wmsPurchaseReturnD = new WmsPurchaseReturnD();
|
||||
|
||||
wmsPurchaseReturnD.bill_id = wmsPurchaseReturnD.id;
|
||||
wmsPurchaseReturnD.matcode = detail.material_code;
|
||||
wmsPurchaseReturnD.unit = detail.unit_code;
|
||||
|
||||
|
||||
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => b.EnCode == detail.unit_code).Select((a, b) => b).FirstAsync();
|
||||
if (erpExtendField != null)
|
||||
{
|
||||
wmsPurchaseReturnD.unit = erpExtendField.EnCode;
|
||||
}
|
||||
else
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【PurchaseOrder】表体明细中单位{detail.unit_code}在wms系统中未找到!");
|
||||
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500);
|
||||
}
|
||||
|
||||
wmsPurchaseReturnD.qty = detail.purchase_quantity;
|
||||
wmsPurchaseReturnD.code_batch = detail.code_batch;
|
||||
wmsPurchaseReturnD.erp_line_pk = detail.erp_line_pk;
|
||||
wmsPurchaseReturnD.create_id = WmsWareHouseConst.ErpUserId;
|
||||
wmsPurchaseReturnD.create_time = DateTime.Now;
|
||||
wmsPurchaseReturnD.actual_qty = 0;
|
||||
wmsPurchaseReturnD.lineno = detail.lineno;
|
||||
|
||||
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
|
||||
if (material != null)
|
||||
{
|
||||
wmsPurchaseReturnD.matcode_id = material.id;
|
||||
wmsPurchaseReturnD.matspecification = material.material_specification;
|
||||
}
|
||||
|
||||
wmsPurchaseReturnDs.Add(wmsPurchaseReturnD);
|
||||
}
|
||||
|
||||
await db.Insertable(wmsPurchaseReturnDs).ExecuteCommandAsync();
|
||||
LoggerErp2Mes.LogInformation($"【PurchaseOrderInput】成功生成单据:{Code}");
|
||||
}
|
||||
|
||||
await db.Insertable(wmsPurchaseOrderH).ExecuteCommandAsync();
|
||||
|
||||
List<WmsPurchaseOrderD> wmsPurchaseOrderDs = new List<WmsPurchaseOrderD>();
|
||||
foreach (var detail in input.details)
|
||||
{
|
||||
WmsPurchaseOrderD wmsPurchaseOrderD = new WmsPurchaseOrderD();
|
||||
|
||||
wmsPurchaseOrderD.fk_wms_purchase_order_id = wmsPurchaseOrderH.id;
|
||||
wmsPurchaseOrderD.matcode = detail.material_code;
|
||||
wmsPurchaseOrderD.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)
|
||||
{
|
||||
wmsPurchaseOrderD.unit_id = erpExtendField.Id;
|
||||
wmsPurchaseOrderD.unit = erpExtendField.EnCode;
|
||||
}
|
||||
else
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【PurchaseOrder】表体明细中单位{detail.unit_code}在wms系统中未找到!");
|
||||
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500);
|
||||
}
|
||||
|
||||
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.lineno = detail.lineno;
|
||||
wmsPurchaseOrderD.gift = detail.gift;
|
||||
|
||||
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
|
||||
if (material != null)
|
||||
{
|
||||
wmsPurchaseOrderD.matcode_id = material.id;
|
||||
wmsPurchaseOrderD.matspecification = material.material_specification;
|
||||
}
|
||||
|
||||
wmsPurchaseOrderDs.Add(wmsPurchaseOrderD);
|
||||
}
|
||||
|
||||
await db.Insertable(wmsPurchaseOrderDs).ExecuteCommandAsync();
|
||||
|
||||
await db.Ado.CommitTranAsync();
|
||||
|
||||
LoggerErp2Mes.LogInformation($"【PurchaseOrderInput】成功生成单据:{Code}");
|
||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -501,7 +599,7 @@ namespace Tnb.WarehouseMgr
|
||||
wmsOutsourceOrderD.fk_wms_outsource_order_id = wmsOutsourceOrderH.id;
|
||||
wmsOutsourceOrderD.matcode = detail.material_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();
|
||||
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => b.EnCode == detail.unit_code).Select((a, b) => b).FirstAsync();
|
||||
if (erpExtendField != null)
|
||||
{
|
||||
wmsOutsourceOrderD.unit = erpExtendField.EnCode;
|
||||
@@ -679,7 +777,7 @@ namespace Tnb.WarehouseMgr
|
||||
wmsMaterialTransferD.material_specification = material.material_specification;
|
||||
}
|
||||
|
||||
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();
|
||||
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => b.EnCode == detail.unit_code).Select((a, b) => b).FirstAsync();
|
||||
if (erpExtendField != null)
|
||||
{
|
||||
wmsMaterialTransferD.unit_id = erpExtendField.Id;
|
||||
@@ -807,7 +905,7 @@ namespace Tnb.WarehouseMgr
|
||||
wmsSaleD.create_id = WmsWareHouseConst.ErpUserId;
|
||||
wmsSaleD.create_time = DateTime.Now;
|
||||
|
||||
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();
|
||||
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => b.EnCode == detail.unit_code).Select((a, b) => b).FirstAsync();
|
||||
if (erpExtendField != null)
|
||||
{
|
||||
wmsSaleD.unit_id = erpExtendField.Id;
|
||||
@@ -930,7 +1028,7 @@ namespace Tnb.WarehouseMgr
|
||||
msRawmatTransferinstockD.bill_id = wmsRawmatTransferinstockH.id;
|
||||
msRawmatTransferinstockD.matcode = detail.material_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();
|
||||
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => b.EnCode == detail.unit_code).Select((a, b) => b).FirstAsync();
|
||||
if (erpExtendField != null)
|
||||
{
|
||||
msRawmatTransferinstockD.unit = erpExtendField.EnCode;
|
||||
@@ -989,7 +1087,7 @@ namespace Tnb.WarehouseMgr
|
||||
wmsTransferInstockD.bill_id = wmsTransferInstockH.id;
|
||||
wmsTransferInstockD.material_code = detail.material_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();
|
||||
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => b.EnCode == detail.unit_code).Select((a, b) => b).FirstAsync();
|
||||
if (erpExtendField != null)
|
||||
{
|
||||
wmsTransferInstockD.unit_id = erpExtendField.Id;
|
||||
|
||||
@@ -101,8 +101,16 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
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);
|
||||
codeNum = input.barcode_qty;
|
||||
|
||||
decimal qty = (int)(codeNum * minPacking);
|
||||
|
||||
decimal mod = 0;
|
||||
decimal extra = (qty - WmsOutsourceD.actual_quantity).Value;
|
||||
if (extra > 0 && extra < minPacking)
|
||||
{
|
||||
mod = minPacking.Value - extra;
|
||||
}
|
||||
|
||||
for (int j = 0; j < codeNum; j++)
|
||||
{
|
||||
@@ -137,11 +145,11 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
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);
|
||||
}
|
||||
//if (barcodes?.Count > 0)
|
||||
//{
|
||||
// var ip = _db.Queryable<BasFactoryConfig>().Where(p => p.key == "printerip").FirstAsync().Result.value;
|
||||
// base.BarCodePrint(barcodes, 1, ip);
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -396,6 +396,7 @@ namespace Tnb.WarehouseMgr
|
||||
var whId = input.data.ContainsKey(nameof(WmsPurchaseH.warehouse_id)) ? input.data[nameof(WmsPurchaseH.warehouse_id)] : "1";
|
||||
var billCode = input.data.ContainsKey(nameof(WmsPurchaseH.bill_code)) ? input.data[nameof(WmsPurchaseH.bill_code)] : null;
|
||||
string bill_type = "";
|
||||
string biz_type = WmsWareHouseConst.BIZTYPE_WMSINSTOCK_ID;
|
||||
string required_type = (await _dbScanInStockByRedis.Queryable<WmsTempCode>().FirstAsync(it => it.barcode == input.data["物料条码"])).required_type;
|
||||
string source_id = (await _dbScanInStockByRedis.Queryable<WmsTempCode>().FirstAsync(it => it.barcode == input.data["物料条码"])).require_id;
|
||||
switch (required_type)
|
||||
@@ -407,12 +408,14 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
case WmsWareHouseConst.BILLTYPE_OUTSOURCE_ID:
|
||||
{
|
||||
bill_type = WmsWareHouseConst.BILLTYPE_OUTSOURCEINSTOCK_ID;
|
||||
bill_type = WmsWareHouseConst.BILLTYPE_OUTSOURCEINSTOCK_ID;
|
||||
biz_type = WmsWareHouseConst.BIZTYPE_OUTSOURCE_ID;
|
||||
break;
|
||||
}
|
||||
case WmsWareHouseConst.BILLTYPE_RAWMATTRANSFERINSTOCK_ID:
|
||||
{
|
||||
bill_type = WmsWareHouseConst.BILLTYPE_RAWMATTRANSFERINSTOCK_ID;
|
||||
biz_type = WmsWareHouseConst.BIZTYPE_RAWMATTRANSFERINSTOCK_ID;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -574,7 +577,7 @@ namespace Tnb.WarehouseMgr
|
||||
endpoint_code = ePoint?.point_code!,
|
||||
bill_code = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_PRETASK_H_ENCODE).GetAwaiter().GetResult(),
|
||||
status = WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID,
|
||||
biz_type = WmsWareHouseConst.BIZTYPE_WMSINSTOCK_ID,
|
||||
biz_type = biz_type,
|
||||
task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID,
|
||||
carry_id = carry.id,
|
||||
carry_code = carry.carry_code,
|
||||
|
||||
@@ -198,10 +198,10 @@ namespace Tnb.WarehouseMgr
|
||||
{ "checking", 32 },
|
||||
};
|
||||
string isCheck = dic2[qcRes].ToString();
|
||||
await _db.Updateable<WmsCarryH>()
|
||||
.SetColumns(x => x.is_check == isCheck)
|
||||
.Where(x => carryIds.Contains(x.id))
|
||||
.ExecuteCommandAsync();
|
||||
//await _db.Updateable<WmsCarryH>()
|
||||
// .SetColumns(x => x.is_check == isCheck)
|
||||
// .Where(x => carryIds.Contains(x.id))
|
||||
// .ExecuteCommandAsync();
|
||||
|
||||
BasFactoryConfig config = await _db.Queryable<BasFactoryConfig>().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.BIPURL);
|
||||
|
||||
|
||||
220
WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseReturnService.cs
Normal file
220
WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseReturnService.cs
Normal file
@@ -0,0 +1,220 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Aop.Api.Domain;
|
||||
using JNPF.Common.Core.Manager;
|
||||
using JNPF.Common.Dtos.VisualDev;
|
||||
using JNPF.Common.Enums;
|
||||
using JNPF.FriendlyException;
|
||||
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 Newtonsoft.Json.Linq;
|
||||
using NPOI.HPSF;
|
||||
using Senparc.Weixin.Work.AdvancedAPIs.OaDataOpen;
|
||||
using SqlSugar;
|
||||
using Tnb.BasicData.Entities;
|
||||
using Tnb.WarehouseMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities.Consts;
|
||||
using Tnb.WarehouseMgr.Entities.Dto;
|
||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||
using Tnb.WarehouseMgr.Entities.Entity;
|
||||
using Tnb.WarehouseMgr.Interfaces;
|
||||
|
||||
namespace Tnb.WarehouseMgr
|
||||
{
|
||||
/// <summary>
|
||||
/// 采购退货
|
||||
/// </summary>
|
||||
[OverideVisualDev(ModuleConsts.MODULE_WmsPurchaseReturn_ID)]
|
||||
public class WmsPurchaseReturnService : BaseWareHouseService
|
||||
{
|
||||
private readonly ISqlSugarClient _db;
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly IBillRullService _billRullService;
|
||||
private readonly IRunService _runService;
|
||||
private readonly IVisualDevService _visualDevService;
|
||||
private readonly IWmsPDAScanInStockService _wmsPDAScanInStock;
|
||||
private readonly IWareHouseService _wareHouseService;
|
||||
public WmsPurchaseReturnService(
|
||||
ISqlSugarRepository<WmsCarryH> repository,
|
||||
IUserManager userManager,
|
||||
IBillRullService billRullService,
|
||||
IRunService runService,
|
||||
IVisualDevService visualDevService,
|
||||
IWmsPDAScanInStockService wmsPDAScanInStock,
|
||||
IWareHouseService wareHouseService)
|
||||
{
|
||||
_db = repository.AsSugarClient();
|
||||
_userManager = userManager;
|
||||
_billRullService = billRullService;
|
||||
_runService = runService;
|
||||
_visualDevService = visualDevService;
|
||||
_wmsPDAScanInStock = wmsPDAScanInStock;
|
||||
_wareHouseService = wareHouseService;
|
||||
}
|
||||
|
||||
|
||||
public override async Task ModifyAsync(WareHouseUpInput input)
|
||||
{
|
||||
if (input == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(input));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 下发
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="AppFriendlyException"></exception>
|
||||
[HttpPost, NonUnify, AllowAnonymous]
|
||||
public async Task<Entities.Dto.Outputs.Result> Distribute(PurchaseReturnInput input)
|
||||
{
|
||||
try
|
||||
{
|
||||
await _s_taskExecuteSemaphore_YCLOutstock.WaitAsync();
|
||||
if (string.IsNullOrEmpty(input.source_id))
|
||||
{
|
||||
throw new AppFriendlyException("来源单据id不可为空", 500);
|
||||
}
|
||||
if (input.carrys.Count == 0)
|
||||
{
|
||||
throw new AppFriendlyException("至少选择一个载具", 500);
|
||||
}
|
||||
|
||||
WmsPurchaseReturnD wmsPurchaseReturnD = await _db.Queryable<WmsPurchaseReturnD>().FirstAsync(it => it.id == input.source_id);
|
||||
WmsPurchaseReturnH wmsPurchaseReturnH = await _db.Queryable<WmsPurchaseReturnH>().FirstAsync(it => it.id == wmsPurchaseReturnD.bill_id);
|
||||
|
||||
List<WmsCarryH> _items = await _db.Queryable<WmsCarryH>().Where(r => input.carrys.Select(c => c.carry_code).Contains(r.carry_code)).ToListAsync();
|
||||
|
||||
List<WmsCarryCode> wmsCarryCodes = await _db.Queryable<WmsCarryCode>().Where(r => _items.Select(c => c.id).Contains(r.carry_id)
|
||||
&& r.material_id == wmsPurchaseReturnD.matcode_id && r.code_batch == wmsPurchaseReturnD.code_batch).ToListAsync();
|
||||
|
||||
List<WmsCarryH> items = new List<WmsCarryH>();
|
||||
|
||||
foreach (var carry in input.carrys.Select(c => c.carry_code))
|
||||
{
|
||||
items.Add(_items.Where(r => r.carry_code == carry).First());
|
||||
}
|
||||
|
||||
foreach (var item in items)
|
||||
{
|
||||
if (item.is_lock == 1)
|
||||
{
|
||||
throw new AppFriendlyException($"载具{item.carry_code}已锁定", 500);
|
||||
}
|
||||
BasLocation carrryLoc = await _db.Queryable<BasLocation>().Where(r => r.id == item.location_id).FirstAsync();
|
||||
if (carrryLoc == null || carrryLoc.is_type != "0")
|
||||
{
|
||||
throw new Exception($"托盘{item.carry_code}已经不在存储库位中,不能出库!");
|
||||
}
|
||||
}
|
||||
|
||||
decimal? sign_qty = 0;
|
||||
|
||||
decimal qty = wmsCarryCodes.Sum(c => c.codeqty);
|
||||
if (wmsPurchaseReturnD.actual_qty + qty > wmsPurchaseReturnD.qty)
|
||||
{
|
||||
// 最后一个托盘的数量
|
||||
decimal lastCarryQty = wmsCarryCodes.Where(r => r.carry_id == items[items.Count - 1].id).Sum(r => r.codeqty);
|
||||
// 如果最后一个托盘数量小于超出的出库数量
|
||||
if (lastCarryQty < wmsPurchaseReturnD.actual_qty + qty - wmsPurchaseReturnD.qty)
|
||||
{
|
||||
throw new AppFriendlyException($"本次出库数量{qty}已超过可出库数量{wmsPurchaseReturnD.qty - wmsPurchaseReturnD.actual_qty} 且无需选择{items[items.Count - 1].carry_code}", 500);
|
||||
}
|
||||
// 签收数量
|
||||
sign_qty = lastCarryQty - (wmsPurchaseReturnD.actual_qty + qty - wmsPurchaseReturnD.qty);
|
||||
}
|
||||
|
||||
await _db.Ado.BeginTranAsync();
|
||||
|
||||
List<BasLocation> endLocations = new List<BasLocation>();
|
||||
|
||||
endLocations = _db.Queryable<BasLocation>().Where(r => _wareHouseService.GetFloor1YCLDBOutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0")
|
||||
.OrderBy("is_lock, task_nums, location_code").ToList();
|
||||
|
||||
if (endLocations.Count() < items.Count)
|
||||
{
|
||||
throw new AppFriendlyException($@"可用的终点库位数量为{endLocations.Count()}个 下发数量为{items.Count}个 请检查终点库位的锁定和占用状态", 500);
|
||||
}
|
||||
|
||||
foreach (var wmsCarryH in items)
|
||||
{
|
||||
BasLocation startLocation = await _db.Queryable<BasLocation>().Where(r => r.id == wmsCarryH.location_id).FirstAsync();
|
||||
|
||||
BasLocation endLocation = null;
|
||||
|
||||
endLocation = await _db.Queryable<BasLocation>().Where(r => _wareHouseService.GetFloor1YCLDBOutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0").OrderBy("is_lock, task_nums, location_code").FirstAsync();
|
||||
|
||||
if (endLocation == null)
|
||||
{
|
||||
throw new AppFriendlyException($@"没有可用的终点库位!请检查终点库位的锁定和占用状态", 500);
|
||||
}
|
||||
|
||||
WmsPurchaseReturnC wmsPurchaseReturnC = new WmsPurchaseReturnC();
|
||||
wmsPurchaseReturnC.bill_id = wmsPurchaseReturnH.id;
|
||||
wmsPurchaseReturnC.mat_bill_id = wmsPurchaseReturnD.id;
|
||||
wmsPurchaseReturnC.carry_id = wmsCarryH.id;
|
||||
wmsPurchaseReturnC.carry_code = wmsCarryH.carry_code;
|
||||
wmsPurchaseReturnC.create_id = input.create_id;
|
||||
wmsPurchaseReturnC.create_time = DateTime.Now;
|
||||
wmsPurchaseReturnC.startlocation_id = startLocation.id;
|
||||
wmsPurchaseReturnC.startlocation_code = startLocation.location_code;
|
||||
wmsPurchaseReturnC.endlocation_id = endLocation.id;
|
||||
wmsPurchaseReturnC.endlocation_code = endLocation.location_code;
|
||||
decimal carryQty = wmsCarryCodes.Where(r => r.carry_id == wmsCarryH.id).Sum(r => r.codeqty);
|
||||
wmsPurchaseReturnC.qty = carryQty;
|
||||
wmsPurchaseReturnC.sign_qty = wmsCarryH.id == items[items.Count - 1].id && sign_qty > 0 ? sign_qty : carryQty;
|
||||
|
||||
await _db.Insertable(wmsPurchaseReturnC).ExecuteCommandAsync();
|
||||
|
||||
CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput();
|
||||
commonCreatePretaskInput.startlocation_id = startLocation.id;
|
||||
commonCreatePretaskInput.endlocation_id = endLocation.id;
|
||||
commonCreatePretaskInput.task_type = WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID;
|
||||
commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_WmsPurchaseReturn_ID;
|
||||
commonCreatePretaskInput.source_id = input.source_id;
|
||||
commonCreatePretaskInput.carry_id = wmsCarryH.id;
|
||||
commonCreatePretaskInput.carry_code = wmsCarryH.carry_code;
|
||||
commonCreatePretaskInput.isExcuteMission = false;
|
||||
|
||||
Entities.Dto.Outputs.Result res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput, _db);
|
||||
|
||||
if (res.code != HttpStatusCode.OK)
|
||||
{
|
||||
Logger.LogInformation($@"生成预任务失败");
|
||||
throw new AppFriendlyException($@"生成预任务失败", 500);
|
||||
}
|
||||
}
|
||||
|
||||
// 更新子表已下发数量
|
||||
await _db.Updateable<WmsPurchaseReturnD>().SetColumns(r => r.actual_qty == r.actual_qty + qty).Where(r => r.id == input.source_id).ExecuteCommandAsync();
|
||||
|
||||
await _db.Ado.CommitTranAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
await _db.Ado.RollbackTranAsync();
|
||||
Logger.LogError("【Distribute】" + ex.Message);
|
||||
Logger.LogError("【Distribute】" + ex.StackTrace);
|
||||
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
_ = _s_taskExecuteSemaphore_YCLOutstock.Release();
|
||||
InvokeGenPretaskExcute();
|
||||
}
|
||||
|
||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -58,6 +58,8 @@ namespace Tnb.WarehouseMgr
|
||||
_visualDevService = visualDevService;
|
||||
_wmsPDAScanInStock = wmsPDAScanInStock;
|
||||
_wareHouseService = wareHouseService;
|
||||
|
||||
OverideFuncs.GetDetailsAsync = GetDetailsAsync;
|
||||
}
|
||||
|
||||
|
||||
@@ -68,10 +70,21 @@ namespace Tnb.WarehouseMgr
|
||||
throw new ArgumentNullException(nameof(input));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
[NonAction]
|
||||
private async Task<dynamic> GetDetailsAsync(string id)
|
||||
{
|
||||
try
|
||||
{
|
||||
return await Task.FromResult(_db.Queryable<WmsRawmatOutstockD>().Where(r => r.bill_id == id).ToList());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return Task.FromResult(ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 下发
|
||||
/// </summary>
|
||||
|
||||
@@ -58,6 +58,7 @@ namespace Tnb.WarehouseMgr
|
||||
_visualDevService = visualDevService;
|
||||
_wmsPDAScanInStock = wmsPDAScanInStock;
|
||||
_wareHouseService = wareHouseService;
|
||||
OverideFuncs.GetDetailsAsync = GetDetailsAsync;
|
||||
}
|
||||
|
||||
|
||||
@@ -71,7 +72,19 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
}
|
||||
|
||||
|
||||
[NonAction]
|
||||
private async Task<dynamic> GetDetailsAsync(string id)
|
||||
{
|
||||
try
|
||||
{
|
||||
return await Task.FromResult(_db.Queryable<WmsRawmatTransferoutstockD>().Where(r => r.bill_id == id).ToList());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return Task.FromResult(ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 下发
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user