现场问题处理
This commit is contained in:
@@ -939,7 +939,284 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 转库单
|
||||
/// </summary>
|
||||
[HttpPost, NonUnify, AllowAnonymous]
|
||||
public async Task<Entities.Dto.Outputs.Result> MaterialTransferBatch(List<MaterialTransferInput> inputs)
|
||||
{
|
||||
LoggerErp2Mes.LogInformation($"【MaterialTransfer】ERP传入数据:{JsonConvert.SerializeObject(inputs)}");
|
||||
var db = _repository.AsSugarClient();
|
||||
|
||||
List<string> error_erpbillcodes = new List<string>();
|
||||
foreach (MaterialTransferInput input in inputs)
|
||||
{
|
||||
try
|
||||
{
|
||||
WmsErpWarehouserelaH wmsErpWarehouserelaHout = await db.Queryable<WmsErpWarehouserelaH>().Where(r => r.erp_warehousecode == input.warehouse_outstock).FirstAsync();
|
||||
if (wmsErpWarehouserelaHout == null)
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【TransferOrder】不存在erp仓库类型{input.warehouse_outstock}对应wms系统的映射关系!");
|
||||
throw new AppFriendlyException($@"不存在erp仓库类型{input.warehouse_outstock}对应wms系统的映射关系!", 500);
|
||||
}
|
||||
|
||||
WmsErpWarehouserelaH wmsErpWarehouserelaHin = await db.Queryable<WmsErpWarehouserelaH>().Where(r => r.erp_warehousecode == input.warehouse_instock).FirstAsync();
|
||||
if (wmsErpWarehouserelaHin == null)
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【TransferOrder】不存在erp仓库类型{input.warehouse_instock}对应wms系统的映射关系!");
|
||||
throw new AppFriendlyException($@"不存在erp仓库类型{input.warehouse_instock}对应wms系统的映射关系!", 500);
|
||||
}
|
||||
|
||||
string warehouse_outstock_code = wmsErpWarehouserelaHout.wms_warehousecode;
|
||||
string warehouse_instock_code = wmsErpWarehouserelaHin.wms_warehousecode;
|
||||
|
||||
BasWarehouse warehouse_outstock = await db.Queryable<BasWarehouse>().Where(r => r.whcode == warehouse_outstock_code).FirstAsync();
|
||||
BasWarehouse warehouse_instock = await db.Queryable<BasWarehouse>().Where(r => r.whcode == warehouse_instock_code).FirstAsync();
|
||||
if (warehouse_outstock == null)
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($"【MaterialTransfer】无法查询到出库仓库{input.warehouse_outstock}的档案记录!");
|
||||
throw new AppFriendlyException($"无法查询到出库仓库{input.warehouse_outstock}的档案记录!", 500);
|
||||
}
|
||||
if (warehouse_instock == null)
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($"【MaterialTransfer】无法查询到入库仓库{input.warehouse_instock}的档案记录!");
|
||||
throw new AppFriendlyException($"无法查询到入库仓库{input.warehouse_instock}的档案记录!", 500);
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(input.erp_pk))
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($"【MaterialTransfer】主表主键不能为空!");
|
||||
throw new AppFriendlyException($@"主表主键不能为空!", 500);
|
||||
}
|
||||
|
||||
int count_erp_line_pk = input.details.Where(r => string.IsNullOrEmpty(r.erp_line_pk)).Count();
|
||||
if (count_erp_line_pk > 0)
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【MaterialTransfer】子表主键不能为空!");
|
||||
throw new AppFriendlyException($@"子表主键不能为空!", 500);
|
||||
}
|
||||
|
||||
string transfer_type = "";
|
||||
// 中储仓到暂存仓
|
||||
if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_ZC_ID
|
||||
&& (warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZCC_ID || warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_HCC_ID))
|
||||
{
|
||||
int count = input.details.Where(r => string.IsNullOrEmpty(r.station_code)).Count();
|
||||
if (count > 0)
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体存在未填写工位的明细!");
|
||||
throw new AppFriendlyException($@"表体存在未填写工位的明细!", 500);
|
||||
}
|
||||
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_CGCK_CODE;
|
||||
}
|
||||
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_CPCRK_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_CP_ID)
|
||||
{
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_WXDBRK_CODE;
|
||||
}
|
||||
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_JZGL_ID)
|
||||
{
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_JZGLRK_CODE;
|
||||
}
|
||||
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZZXBK_ID)
|
||||
{
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_CROSSLAYER_CODE;
|
||||
}
|
||||
|
||||
// 暂时其他情况都算齐套出入库类型(未定)
|
||||
else
|
||||
{
|
||||
int count = input.details.Where(r => string.IsNullOrEmpty(r.station_code)).Count();
|
||||
if (count > 0)
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体存在未填写工位的明细!");
|
||||
throw new AppFriendlyException($@"表体存在未填写工位的明细!", 500);
|
||||
}
|
||||
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_QTCRK_CODE;
|
||||
}
|
||||
|
||||
|
||||
//var wmsMaterialTransferdsDistinct = input.details.Select(r => new
|
||||
//{
|
||||
// material_id = r.material_code,
|
||||
// code_batch = r.code_batch,
|
||||
//}).Distinct();
|
||||
//if (wmsMaterialTransferdsDistinct.Count() < input.details.Count)
|
||||
//{
|
||||
// _LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体存在物料和批号重复的明细!");
|
||||
// throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500);
|
||||
//}
|
||||
|
||||
await db.Ado.BeginTranAsync();
|
||||
|
||||
// 判断是否重复传输
|
||||
WmsMaterialTransfer wmsMaterialTransferRep = await db.Queryable<WmsMaterialTransfer>().Where(r => r.erp_bill_code == input.bill_code).FirstAsync();
|
||||
if (wmsMaterialTransferRep != null)
|
||||
{
|
||||
// 判断单据是否已经下发
|
||||
List<WmsMaterialTransferD> _wmsMaterialTransferDs = await db.Queryable<WmsMaterialTransferD>().Where(r => r.bill_id == wmsMaterialTransferRep.id).ToListAsync();
|
||||
bool isxf = _wmsMaterialTransferDs.Where(r => r.yxfqty > 0).Any();
|
||||
if (isxf)
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】wms已下发使用转库单{input.bill_code}!");
|
||||
throw new AppFriendlyException($@"wms已下发使用转库单{input.bill_code}!", 500);
|
||||
}
|
||||
else // 删除数据重新插入
|
||||
{
|
||||
await db.Deleteable<WmsMaterialTransfer>().Where(r => r.id == wmsMaterialTransferRep.id).ExecuteCommandAsync();
|
||||
await db.Deleteable<WmsMaterialTransferD>().Where(r => r.bill_id == wmsMaterialTransferRep.id).ExecuteCommandAsync();
|
||||
}
|
||||
}
|
||||
|
||||
List<MaterialTransferDetail> details = input.details.Where(r => r.qty > 0).ToList();
|
||||
List<MaterialTransferDetail> details_return = input.details.Where(r => r.qty < 0).ToList();
|
||||
|
||||
if (details.Count > 0)
|
||||
{
|
||||
WmsMaterialTransfer wmsMaterialTransfer = new WmsMaterialTransfer();
|
||||
string Code = await _billRuleService.GetBillNumber("MaterialTransfer");
|
||||
wmsMaterialTransfer.bill_code = Code;
|
||||
wmsMaterialTransfer.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
|
||||
wmsMaterialTransfer.bill_date = DateTime.Now;
|
||||
wmsMaterialTransfer.warehouse_outstock = warehouse_outstock.id;
|
||||
wmsMaterialTransfer.warehouse_instock = warehouse_instock.id;
|
||||
wmsMaterialTransfer.biller_out = input.biller_out;
|
||||
wmsMaterialTransfer.depart_out = input.depart_out;
|
||||
wmsMaterialTransfer.biller_in = input.biller_in;
|
||||
wmsMaterialTransfer.depart_in = input.depart_in;
|
||||
wmsMaterialTransfer.deliver_date = input.deliver_date;
|
||||
wmsMaterialTransfer.arrival_date = input.arrival_date;
|
||||
wmsMaterialTransfer.create_id = WmsWareHouseConst.ErpUserId;
|
||||
wmsMaterialTransfer.create_time = DateTime.Now;
|
||||
wmsMaterialTransfer.org_id = WmsWareHouseConst.AdministratorOrgId;
|
||||
wmsMaterialTransfer.erp_bill_code = input.bill_code;
|
||||
wmsMaterialTransfer.type = transfer_type;
|
||||
wmsMaterialTransfer.erp_pk = input.erp_pk;
|
||||
|
||||
await db.Insertable(wmsMaterialTransfer).ExecuteCommandAsync();
|
||||
|
||||
List<WmsMaterialTransferD> wmsMaterialTransferDs = new List<WmsMaterialTransferD>();
|
||||
foreach (var detail in details)
|
||||
{
|
||||
WmsMaterialTransferD wmsMaterialTransferD = new WmsMaterialTransferD();
|
||||
wmsMaterialTransferD.lineno = detail.lineno;
|
||||
wmsMaterialTransferD.material_code = detail.material_code;
|
||||
wmsMaterialTransferD.code_batch = detail.code_batch;
|
||||
wmsMaterialTransferD.station_code = detail.station_code;
|
||||
wmsMaterialTransferD.qty = detail.qty;
|
||||
wmsMaterialTransferD.bill_id = wmsMaterialTransfer.id;
|
||||
|
||||
wmsMaterialTransferD.yxfqty = 0;
|
||||
wmsMaterialTransferD.yzqty = 0;
|
||||
wmsMaterialTransferD.yxfqty_rk = 0;
|
||||
wmsMaterialTransferD.yzqty_rk = 0;
|
||||
wmsMaterialTransferD.erp_line_pk = detail.erp_line_pk;
|
||||
|
||||
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
|
||||
if (material != null)
|
||||
{
|
||||
wmsMaterialTransferD.material_id = material.id;
|
||||
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();
|
||||
if (erpExtendField != null)
|
||||
{
|
||||
wmsMaterialTransferD.unit_id = erpExtendField.Id;
|
||||
wmsMaterialTransferD.unit_code = erpExtendField.EnCode;
|
||||
}
|
||||
else
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体明细中单位{detail.unit_code}在wms系统中未找到!");
|
||||
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500);
|
||||
}
|
||||
|
||||
wmsMaterialTransferDs.Add(wmsMaterialTransferD);
|
||||
}
|
||||
|
||||
await db.Insertable(wmsMaterialTransferDs).ExecuteCommandAsync();
|
||||
LoggerErp2Mes.LogInformation($"【MaterialTransfer】成功生成单据:{Code}");
|
||||
}
|
||||
|
||||
if (details_return.Count > 0)
|
||||
{
|
||||
WmsPrdReturnH wmsPrdReturnH = new WmsPrdReturnH();
|
||||
string Code = await _billRuleService.GetBillNumber("WMSPRDRETURN");
|
||||
wmsPrdReturnH.bill_code = Code;
|
||||
wmsPrdReturnH.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
|
||||
wmsPrdReturnH.warehouse_id = warehouse_instock.id;
|
||||
wmsPrdReturnH.create_id = WmsWareHouseConst.ErpUserId;
|
||||
wmsPrdReturnH.create_time = DateTime.Now;
|
||||
wmsPrdReturnH.erp_bill_code = input.bill_code;
|
||||
wmsPrdReturnH.transfer_type = transfer_type;
|
||||
wmsPrdReturnH.erp_pk = input.erp_pk;
|
||||
|
||||
await db.Insertable(wmsPrdReturnH).ExecuteCommandAsync();
|
||||
|
||||
List<WmsPrdReturnD> wmsPrdReturnDs = new List<WmsPrdReturnD>();
|
||||
foreach (var detail in details_return)
|
||||
{
|
||||
WmsPrdReturnD wmsPrdReturnD = new WmsPrdReturnD();
|
||||
wmsPrdReturnD.lineno = detail.lineno;
|
||||
wmsPrdReturnD.material_code = detail.material_code;
|
||||
wmsPrdReturnD.code_batch = detail.code_batch;
|
||||
wmsPrdReturnD.qty = -detail.qty;
|
||||
wmsPrdReturnD.bill_id = wmsPrdReturnH.id;
|
||||
|
||||
wmsPrdReturnD.ytqty = 0;
|
||||
wmsPrdReturnD.erp_line_pk = detail.erp_line_pk;
|
||||
|
||||
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
|
||||
if (material != null)
|
||||
{
|
||||
wmsPrdReturnD.material_id = material.id;
|
||||
wmsPrdReturnD.material_code = material.code;
|
||||
wmsPrdReturnD.material_name = material.name;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
wmsPrdReturnD.unit_id = erpExtendField.Id;
|
||||
}
|
||||
else
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体明细中单位{detail.unit_code}在wms系统中未找到!");
|
||||
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500);
|
||||
}
|
||||
|
||||
wmsPrdReturnDs.Add(wmsPrdReturnD);
|
||||
}
|
||||
|
||||
await db.Insertable(wmsPrdReturnDs).ExecuteCommandAsync();
|
||||
LoggerErp2Mes.LogInformation($"【MaterialTransfer】成功生成单据:{Code}");
|
||||
}
|
||||
|
||||
await db.Ado.CommitTranAsync();
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
error_erpbillcodes.Add($"bip单据号{input.bill_code}: {ex.Message}");
|
||||
LoggerErp2Mes.LogWarning($"【MaterialTransfer】{ex.Message}");
|
||||
LoggerErp2Mes.LogWarning($"【MaterialTransfer】{ex.StackTrace}");
|
||||
await db.Ado.RollbackTranAsync();
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (error_erpbillcodes.Count > 0)
|
||||
{
|
||||
LoggerErp2Mes.LogWarning($"同步失败信息:{string.Join(',', error_erpbillcodes)}");
|
||||
return await ToApiResult(HttpStatusCode.InternalServerError, $"同步失败信息:{string.Join(',', error_erpbillcodes)}");
|
||||
}
|
||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||
}
|
||||
/// <summary>
|
||||
/// 销售发货单
|
||||
/// </summary>
|
||||
@@ -1017,6 +1294,7 @@ namespace Tnb.WarehouseMgr
|
||||
string Code = await _billRuleService.GetBillNumber("WmsSale");
|
||||
|
||||
wmsSaleH.bill_code = Code;
|
||||
wmsSaleH.org_id = WmsWareHouseConst.AdministratorOrgId;
|
||||
wmsSaleH.erp_bill_code = input.bill_code;
|
||||
wmsSaleH.bill_type = "25103439022357";//销售出库单
|
||||
wmsSaleH.audit_status = 0;
|
||||
@@ -1032,7 +1310,7 @@ namespace Tnb.WarehouseMgr
|
||||
wmsSaleH.customer_name = customer.customer_name;
|
||||
}
|
||||
|
||||
wmsSaleH.ship_date = input.ship_date.Value;
|
||||
//wmsSaleH.ship_date = input.ship_date.Value;
|
||||
wmsSaleH.erp_pk = input.erp_pk;
|
||||
wmsSaleH.create_id = WmsWareHouseConst.ErpUserId;
|
||||
wmsSaleH.create_time = DateTime.Now;
|
||||
|
||||
Reference in New Issue
Block a user