using HslCommunication;
|
using Newtonsoft.Json;
|
using WIDESEA_Core;
|
using WIDESEA_Core.BaseRepository;
|
using WIDESEA_Core.Enums;
|
using WIDESEA_Core.Helper;
|
using WIDESEA_IBasicService;
|
using WIDESEA_ISquareCabinServices;
|
using WIDESEA_IWMsInfoServices;
|
using static WIDESEA_DTO.SquareCabin.OrderDto;
|
using WIDESEA_Model.Models;
|
using WIDESEA_SquareCabinServices;
|
using static WIDESEA_DTO.SquareCabin.TowcsDto;
|
using WIDESEA_Common.WareHouseEnum;
|
using WIDESEA_DTO.SquareCabin;
|
|
namespace WIDESEA_WMSServer
|
{
|
public class Business : IBusiness
|
{
|
private readonly ICabinOrderServices _cabinOrderServices;
|
private readonly ICabinOrderDetailServices _cabinDetailServices;
|
private readonly IDeliveryOrderServices _deliveryOrderServices;
|
private readonly IDeliveryOrderDetailServices _deliveryOrderDetailServices;
|
private readonly IBasicService _basicService;
|
private readonly IUnitOfWorkManage _unitOfWorkManage;
|
private readonly IInventory_BatchServices _inventory_BatchServices;
|
private readonly IInventoryInfoService _inventoryInfoService;
|
private readonly ISupplyTaskService _supplyTaskService;
|
private readonly ITacticsService _tacticsService;
|
public Business(IDeliveryOrderServices deliveryOrderServices, IBasicService basicService, IUnitOfWorkManage unitOfWorkManage, IInventory_BatchServices inventory_BatchServices, IInventoryInfoService inventoryInfoService, IDeliveryOrderDetailServices deliveryOrderDetailServices, ISupplyTaskService supplyTaskService, ICabinOrderServices cabinOrderServices, ITacticsService tacticsService, ICabinOrderDetailServices cabinDetailServices)
|
{
|
_deliveryOrderServices = deliveryOrderServices;
|
_basicService = basicService;
|
_unitOfWorkManage = unitOfWorkManage;
|
_inventory_BatchServices = inventory_BatchServices;
|
_inventoryInfoService = inventoryInfoService;
|
_deliveryOrderDetailServices = deliveryOrderDetailServices;
|
_supplyTaskService = supplyTaskService;
|
_cabinOrderServices = cabinOrderServices;
|
_tacticsService = tacticsService;
|
_cabinDetailServices = cabinDetailServices;
|
}
|
#region 获取ERP入库单
|
static string SearchInDate = "2025-09-10 00:00:00";
|
/// <summary>
|
/// 获取上游系统的入库单
|
/// </summary>
|
/// <param name="SearchInDate"></param>
|
/// <returns></returns>
|
public WebResponseContent GetUpstreamOrder()
|
{
|
var responseContent = new WebResponseContent();
|
try
|
{
|
// 请求地址
|
var url = "http://121.37.118.63:80/GYZ2/95fck/inOrder";
|
//var url = "http://127.0.0.1:4523/m2/5660322-5340849-default/363009261";
|
|
if (string.IsNullOrEmpty(SearchInDate)) SearchInDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
//// 请求参数
|
var requestData = new
|
{
|
searchDate = SearchInDate
|
//searchDate = "2022-10-10 20:45:16" // 正确的格式
|
};
|
SearchInDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd HH:mm:ss");
|
// 发起请求
|
var result = HttpHelper.Post(url, requestData.ToJsonString());
|
|
// 反序列化
|
var response = JsonConvert.DeserializeObject<UpstreamResponse<UpstreamOrderInfo>>(result);
|
|
if (response.resultCode != "0")
|
{
|
// 调用异常接口
|
SendErrorToUpstream(1, "", response.resultMsg ?? "上游接口返回失败", "");
|
return responseContent.Error(response.resultMsg ?? "上游接口返回失败");
|
}
|
|
if (response.data == null || !response.data.Any())
|
{
|
return responseContent.OK("无新入库单数据");
|
}
|
// 获取所有已存在的入库单号
|
var existingOrderNos = _cabinOrderServices.Db.Queryable<Dt_CabinOrder>()
|
.Select(x => x.Order_no)
|
.Distinct().ToList();
|
|
// 过滤掉已存在的入库单
|
var newOrders = response.data
|
.Where(order => !existingOrderNos.Contains(order.order_no))
|
.ToList();
|
|
if (!newOrders.Any())
|
{
|
return responseContent.OK("所有入库单已存在,无需新增");
|
}
|
|
//存储入库单号
|
List<string> orderNos = new List<string>();
|
|
foreach (var order in newOrders)
|
{
|
try
|
{
|
_unitOfWorkManage.BeginTran();
|
if (order.order_type == "1") //正常入库
|
{
|
responseContent = _cabinOrderServices.CreateInboundOrder(order);
|
if (!responseContent.Status) throw new Exception(responseContent.Message);
|
List<Dt_CabinOrder>? dt_CabinOrders = responseContent.Data as List<Dt_CabinOrder>;
|
if (dt_CabinOrders != null)
|
_cabinOrderServices.Db.InsertNav(dt_CabinOrders).Include(x => x.Details).ExecuteCommand();
|
}
|
else if (order.order_type == "3")//入库退料
|
{
|
//创建出库单
|
#region 转换为出库单
|
UpstramOutOrderInfo upstramOutOrderInfo = new UpstramOutOrderInfo()
|
{
|
order_no = order.order_no,
|
order_type = order.order_type,
|
warehouse_no = order.warehouse_no,
|
details = new List<UpstreamOutOrderDetail>()
|
};
|
foreach (var item in order.details)
|
{
|
UpstreamOutOrderDetail detail = new UpstreamOutOrderDetail()
|
{
|
batch_num = item.batch_num,
|
goods_no = item.goods_no,
|
order_qty = item.order_qty,
|
exp_date = item.exp_date,
|
};
|
upstramOutOrderInfo.details.Add(detail);
|
}
|
var content = _deliveryOrderServices.CreateOutboundOrder(upstramOutOrderInfo);
|
if (!content.Status) throw new Exception(content.Message);
|
#endregion
|
}
|
else if (order.order_type == "5")//报溢入库
|
{
|
var content = _cabinOrderServices.CreateCheckInOrder(order);
|
if (!content.Status) throw new Exception(content.Message);
|
}
|
_unitOfWorkManage.CommitTran();
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
SendErrorToUpstream(1, "", ex.Message, "");
|
return responseContent.Error("同步失败: " + ex.Message);
|
}
|
};
|
|
//在下发给wcs
|
//EdiIn(); //发给下游
|
//如果这个方法成功了,那么就调用CompleteOrder接口,然后改变
|
return responseContent.OK("同步入库单成功");
|
|
}
|
catch (Exception ex)
|
{
|
// 全局异常时,也推送异常给上游
|
SendErrorToUpstream(1, "", ex.Message, "");
|
return responseContent.Error("同步失败: " + ex.Message);
|
}
|
}
|
#endregion
|
|
#region 获取ERP出库单
|
static string SearchOutDate = "2025-09-10 00:00:00";
|
public WebResponseContent GetUpstreamOutOrder()
|
{
|
var responseContent = new WebResponseContent();
|
try
|
{
|
//var url = "http://121.37.118.63:80/GYZ2/95fck/outOrder";
|
var url = "http://127.0.0.1:4523/m1/5660322-5340849-default/GYZ2/95fck/outOrder";
|
if (string.IsNullOrEmpty(SearchOutDate)) SearchOutDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
//// 请求参数
|
var requestData = new
|
{
|
searchDate = SearchOutDate
|
//searchDate = "2022-10-10 20:45:16" // 正确的格式
|
};
|
SearchOutDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd HH:mm:ss");
|
|
var result = HttpHelper.Post(url, requestData.ToJsonString());
|
var response = JsonConvert.DeserializeObject<UpstreamResponse<UpstramOutOrderInfo>>(result);
|
|
if (response.resultCode != "0")
|
{
|
SendErrorToUpstream(3, "", response.resultMsg ?? "上游接口返回失败", "");
|
return responseContent.Error(response.resultMsg ?? "上游接口返回失败");
|
}
|
|
if (response.data == null || !response.data.Any())
|
{
|
return responseContent.OK("无新出库单数据");
|
}
|
|
// 已存在出库单号
|
var existingOutOrderNos = _deliveryOrderServices.Db.Queryable<Dt_DeliveryOrder>()
|
.Select(x => x.Out_no)
|
.Distinct().ToList();
|
|
// 新出库单
|
var newOutOrders = response.data
|
.Where(outorder => !existingOutOrderNos.Contains(outorder.order_no))
|
.ToList();
|
|
List<string> order_no = newOutOrders.Select(x => x.order_no).ToList();
|
|
if (!newOutOrders.Any())
|
{
|
return responseContent.OK("所有出库单已存在,无需新增");
|
}
|
|
_unitOfWorkManage.BeginTran();
|
try
|
{
|
List<Dt_DeliveryOrder> _DeliveryOrders = new List<Dt_DeliveryOrder>();
|
List<string> orderNos = new List<string>();
|
|
foreach (var outorder in newOutOrders)
|
{
|
if (outorder.order_type == "1") // 正常出库单
|
{
|
var content = _deliveryOrderServices.CreateOutboundOrder(outorder);
|
if (!content.Status) throw new Exception(content.Message);
|
}
|
else if (outorder.order_type == "2")//出库退货
|
{
|
// 创建出库退货单 - 这里需要根据业务逻辑实现
|
// 暂时跳过或实现退货逻辑
|
//continue;
|
#region 转换成入库单
|
UpstreamOrderInfo order = new UpstreamOrderInfo()
|
{
|
order_no = outorder.order_no,
|
order_type = outorder.order_type,
|
warehouse_no = outorder.warehouse_no,
|
details = new List<UpstreamOrderDetail>()
|
};
|
foreach (var item in outorder.details)
|
{
|
UpstreamOrderDetail detail = new UpstreamOrderDetail()
|
{
|
batch_num = item.batch_num,
|
goods_no = item.goods_no,
|
order_qty = item.order_qty,
|
exp_date = item.exp_date,
|
};
|
order.details.Add(detail);
|
}
|
responseContent = _cabinOrderServices.CreateInboundOrder(order);
|
if (!responseContent.Status) throw new Exception(responseContent.Message);
|
List<Dt_CabinOrder>? dt_CabinOrders = responseContent.Data as List<Dt_CabinOrder>;
|
if (dt_CabinOrders != null && dt_CabinOrders.Count > 0)
|
_cabinOrderServices.Db.InsertNav(dt_CabinOrders).Include(x => x.Details).ExecuteCommand();
|
#endregion
|
}
|
else if (outorder.order_type == "6")//报损出库
|
{
|
var content = _deliveryOrderServices.CreateCheckOutOrder(outorder);
|
if (!content.Status) throw new Exception(content.Message);
|
}
|
}
|
|
// 批量插入出库单和明细
|
//if (_DeliveryOrders.Any())
|
//{
|
// BaseDal.Db.InsertNav(_DeliveryOrders).Include(x => x.Details).ExecuteCommand();
|
//}
|
//下发出库单任务给wcs
|
|
|
_unitOfWorkManage.CommitTran();
|
//var tex = CreateSupplyTask(order_no);
|
//if (!tex)
|
//{
|
// return responseContent.Error("创建供应任务失败");
|
//}
|
return responseContent.OK($"同步出库单成功,共{_DeliveryOrders.Count}条");
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
SendErrorToUpstream(3, "", ex.Message, "");
|
return responseContent.Error("同步失败: " + ex.Message);
|
}
|
}
|
catch (Exception ex)
|
{
|
SendErrorToUpstream(3, "", ex.Message, "");
|
return responseContent.Error("同步失败: " + ex.Message);
|
}
|
}
|
#endregion
|
|
#region 下发立库入库单
|
public WebResponseContent EdiIn()
|
{
|
try
|
{
|
//2.查询符合条件的订单(表头 = 新建 && 包含有效明细)
|
//var orders = BaseDal.Db.Queryable<Dt_CabinOrder>()
|
// .Where(o => o.OdrderStatus == "新建")
|
// .Includes(o => o.Details, d => d.MedicineGoods)
|
// .ToList();
|
//查出包含全部的入库单,包含全部明细+一个明细对应一个商品
|
var reslut = WarehouseEnum.立库.ObjToInt().ToString("000");
|
var orders = _cabinOrderServices.Db.CopyNew()
|
.Queryable<Dt_CabinOrder>()
|
.Where(o => o.OdrderStatus == "新建" && o.Warehouse_no == reslut)
|
.Includes(o => o.Details, d => d.MedicineGoods)
|
.ToList();
|
// 3. 再过滤掉不符合条件的明细(只保留 Status=0)
|
foreach (var order in orders)
|
{
|
Console.WriteLine($"订单 {order.Order_no} 原明细数:{order.Details.Count}");
|
order.Details = order.Details.Where(d => d.Status == 0).ToList();
|
Console.WriteLine($"订单 {order.Order_no} 过滤后明细数:{order.Details.Count}");
|
}
|
|
|
if (orders == null || !orders.Any())
|
{
|
Console.WriteLine("没有符合条件的订单需要推送");
|
return WebResponseContent.Instance.Error("没有符合条件的订单需要推送");
|
}
|
|
// 4. 遍历订单,组装 DTO 并推送
|
foreach (var order in orders)
|
{
|
// 从第一个有 MedicineGoods 的明细中取出 MaterielErpType
|
string materialCode = order.Details
|
.Select(d => d.MedicineGoods?.MaterielErpType)
|
.FirstOrDefault(x => !string.IsNullOrEmpty(x)) ?? "YY"; // 默认值YY
|
|
var ediDto = new ToediInInfo
|
{
|
|
//客户代码
|
customerCode = "905",
|
//物料类型
|
materialCode = materialCode,
|
//入库单号
|
externalOrderNo = order.Order_no,
|
//入库单类型
|
inOrderType = order.Order_type == "5" ? "20" : "10",
|
//优先级
|
priority = 0,
|
//是否取消
|
Is_cancel = 0,
|
details = order.Details.Select(d => new ToediInDetail
|
{
|
//批号
|
batchNo = d.Batch_num,
|
//产品
|
productCode = d.Goods_no,
|
//sku名称
|
productName = d.MedicineGoods?.MaterielName,
|
//sku规格
|
productSpecifications = d.MedicineGoods?.MaterielSpec,
|
//数量
|
quantity = (int)d.Order_qty,
|
//效期
|
validityPeriod = d.Exp_date,
|
//生产厂家
|
manufacturer = d.MedicineGoods?.Factory,
|
//房号
|
libraryNo = order.Warehouse_no,
|
}).ToList()
|
};
|
|
var url = "http://172.16.1.2:9357/file-admin/api/in/ediIn";
|
//var url = "http://127.0.0.1:4523/m2/5660322-5340849-default/363019549";
|
var result = HttpHelper.Post(url, ediDto.ToJsonString());
|
var resp = JsonConvert.DeserializeObject<TowcsResponse<object>>(result);
|
|
if (resp != null && resp.code == "0")
|
{
|
// 更新表头状态
|
_cabinOrderServices.Db.Updateable<Dt_CabinOrder>()
|
.SetColumns(o => new Dt_CabinOrder { OdrderStatus = "开始" })
|
.Where(o => o.Id == order.Id)
|
.ExecuteCommand();
|
|
// 更新明细状态为已同步 //这里要是将新建--》开始状态,在后端接口返回我们的时候在返回已完成
|
_cabinDetailServices.Db.Updateable<Dt_CabinOrderDetail>()
|
.SetColumns(d => new Dt_CabinOrderDetail { Status = 1, OrderDetailStatus = "开始" })
|
.Where(d => d.OrderId == order.Id && d.Status == 0)
|
.ExecuteCommand();
|
|
Console.WriteLine($"订单 {order.Order_no} 推送成功");
|
}
|
else
|
{
|
SendErrorToUpstream(3, order.Order_no, resp?.msg ?? "WCS 推送失败", "");
|
Console.WriteLine($"订单 {order.Order_no} 推送失败:{resp?.msg}");
|
return new WebResponseContent { Status = false, Message = "订单推送失败" };
|
}
|
}
|
return new WebResponseContent { Status = true, Message = "推送成功" };
|
}
|
catch (Exception ex)
|
{
|
|
Console.WriteLine("EdiIn 异常:" + ex.Message);
|
return new WebResponseContent { Status = false, Message = ex.Message };
|
}
|
}
|
#endregion
|
|
#region 下发立库出库单
|
public WebResponseContent EdiOut()
|
{
|
var responseContent = new WebResponseContent();
|
var WarehouseLk = WarehouseEnum.立库.ObjToInt().ToString("000");
|
try
|
{
|
// 1. 查询符合条件的订单(表头=新建 && 包含有效明细)
|
var outOrders = _deliveryOrderServices.Db.CopyNew().Queryable<Dt_DeliveryOrder>()
|
.Where(o => o.OutStatus == "新建" && o.Warehouse_no == WarehouseLk)
|
.Includes(o => o.Details, d => d.MedicineGoods)
|
.ToList();
|
|
// 2. 再过滤掉不符合条件的明细(只保留 Status=0 )
|
foreach (var order in outOrders)
|
{
|
order.Details = order.Details.Where(d => d.Status == 0).ToList();
|
}
|
|
if (outOrders == null || !outOrders.Any())
|
{
|
Console.WriteLine("没有符合条件的订单需要推送");
|
return responseContent.Error("没有符合条件的订单需要推送");
|
}
|
|
foreach (var order in outOrders)
|
{
|
try
|
{
|
string materialCode = "YY";//默认值
|
//获取当前订单的第一个明细项
|
var firstDetail = order.Details.FirstOrDefault();
|
if (firstDetail?.MedicineGoods != null && !string.IsNullOrEmpty(firstDetail.MedicineGoods.MaterielErpType))
|
{
|
//如果条件满足,将物料代码设置为第一个明细项对应的药品物料代码
|
materialCode = firstDetail.MedicineGoods.MaterielErpType;
|
}
|
switch (order.Out_type)
|
{
|
case "1"://正常出库
|
case "3"://入库退货
|
order.Out_type = "10";//一般交易出库单
|
break;
|
case "6"://盘亏出库
|
order.Out_type = "30";//盘亏出库单
|
break;
|
}
|
// 3. 组装 DTO
|
var ediDto = new TowcsDto.ToediOutInfo
|
{
|
customerCode = "905",
|
materialCode = materialCode,
|
externalOrderNo = order.Out_no,
|
outOrderType = order.Out_type,//20是盘点出库单
|
priority = 1,
|
Is_cancel = 0,
|
details = order.Details.Select(d => new TowcsDto.ToeOutdiInDetail
|
{
|
batchNo = d.Batch_num,
|
productCode = d.Goods_no,
|
productName = d.MedicineGoods?.MaterielName,
|
productSpecifications = d.MedicineGoods?.MaterielModel,
|
quantity = (int)d.Order_qty,
|
//stocktakingDetails = order.Out_type == "3"
|
// ? new List<ToOutediInStock>
|
// {
|
// new ToOutediInStock { palletCode = "FC00001", quantity = d.Order_qty.ToString() }
|
// }
|
// : null
|
}).ToList()
|
};
|
|
// 4. 调用接口
|
//var url = "http://172.16.1.2:9357/file-admin/api/out/ediOut";
|
var url = "http://127.0.0.1:4523/m2/5660322-5340849-default/363076920";
|
|
var result = HttpHelper.Post(url, ediDto.ToJsonString());
|
var resp = JsonConvert.DeserializeObject<TowcsDto.TowcsResponse<object>>(result);
|
|
if (resp != null && resp.code == "0")
|
{
|
// 更新表头状态
|
_cabinDetailServices.Db.Updateable<Dt_DeliveryOrder>()
|
.SetColumns(o => new Dt_DeliveryOrder { OutStatus = "开始" })
|
.Where(o => o.Id == order.Id)
|
.ExecuteCommand();
|
|
// 更新明细状态
|
_deliveryOrderDetailServices.Db.Updateable<Dt_DeliveryOrderDetail>()
|
.SetColumns(d => new Dt_DeliveryOrderDetail { Status = 1, OotDetailStatus = "开始" })
|
.Where(d => d.DeliveryOrderId == order.Id && d.Status == 0)
|
.ExecuteCommand();
|
Console.WriteLine($"订单 {order.Out_no} 推送成功");
|
}
|
else
|
{
|
SendErrorToUpstream(3, order.Out_no, resp?.msg ?? "WCS 推送失败", "");
|
Console.WriteLine($"订单 {order.Out_no} 推送失败:{resp?.msg}");
|
}
|
//删除全部状为已完成的明细和表头,移入历史表
|
}
|
catch (Exception ex)
|
{
|
SendErrorToUpstream(3, order.Out_no, ex.Message, "");
|
Console.WriteLine($"订单 {order.Out_no} 推送异常:{ex.Message}");
|
}
|
}
|
|
return responseContent.OK("出库订单推送完成");
|
}
|
catch (Exception ex)
|
{
|
Console.WriteLine("EdiOut 异常:" + ex.Message);
|
return responseContent.Error("出库订单推送失败:" + ex.Message);
|
}
|
}
|
#endregion
|
|
#region 入库完成上报ERP
|
/// <summary>
|
/// 入库报完成接口
|
/// </summary>
|
/// <param name="order_no">入库单号</param> //先检查是否所有明细都已完成,如果是,那么更新表头状态为已完成
|
/// <returns></returns>
|
public WebResponseContent CompleteAllOrders()
|
{
|
var responseContent = new WebResponseContent();
|
try
|
{
|
#region 查找所有已完成入库单
|
var inorders = _cabinOrderServices.Repository.QueryData(x => x.OdrderStatus == "已完成").Select(x => x.Order_no).Distinct().ToList();
|
foreach (var inorder in inorders)
|
{
|
//var Orders = BaseDal.QueryData(x => x.Order_no == inorder);
|
var Orders = _cabinOrderServices.Db.Queryable<Dt_CabinOrder>().Where(x => x.Order_no == inorder).Includes(x => x.Details).ToList();
|
if (!Orders.Where(x => x.OdrderStatus != "已完成").Any())
|
{
|
_unitOfWorkManage.BeginTran();
|
_cabinOrderServices.Repository.DeleteAndMoveIntoHty(Orders, OperateTypeEnum.自动完成);
|
foreach (var item in Orders)
|
{
|
_cabinDetailServices.Repository.DeleteAndMoveIntoHty(item.Details, OperateTypeEnum.自动完成);
|
}
|
// 调用上游接口
|
var url = "http://121.37.118.63:80/GYZ2/95fck/inOrderOk";
|
var result = HttpHelper.Post(url, new { order_no = inorder }.ToJsonString());
|
var response = JsonConvert.DeserializeObject<UpstreamOrderResponse>(result);
|
if (response.resultCode == "0")
|
{
|
// 提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
else
|
{
|
_unitOfWorkManage.RollbackTran();
|
SendErrorToUpstream(2, "", $"上游接口返回失败: {response.resultMsg}", inorder);
|
}
|
}
|
}
|
#endregion
|
return responseContent.OK();
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return responseContent.Error("批量处理失败:" + ex.Message);
|
}
|
}
|
#endregion
|
|
#region 出库完成上报ERP
|
/// <summary>
|
/// 出库报完成接口
|
/// </summary>
|
/// <param name="out_no">出库单号</param>
|
/// <returns></returns>
|
public WebResponseContent CompleteAllOutOrders()
|
{
|
var responseContent = new WebResponseContent();
|
try
|
{
|
#region 查找所有已完成出库单
|
var outorders = _deliveryOrderServices.Repository.QueryData(x => x.OutStatus == "已完成").Select(x => x.Out_no).Distinct().ToList();
|
foreach (var outorder in outorders)
|
{
|
var Orders = _deliveryOrderServices.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == outorder).Includes(x => x.Details).ToList();
|
if (!Orders.Where(x => x.OutStatus != "已完成").Any())
|
{
|
_unitOfWorkManage.BeginTran();
|
_deliveryOrderServices.Repository.DeleteAndMoveIntoHty(Orders, OperateTypeEnum.自动完成);
|
foreach (var item in Orders)
|
{
|
_deliveryOrderDetailServices.Repository.DeleteAndMoveIntoHty(item.Details, OperateTypeEnum.自动完成);
|
}
|
var url = "http://121.37.118.63:80/GYZ2/95fck/outOrderOk";
|
var requestDate = new
|
{
|
order_no = outorder
|
};
|
var result = HttpHelper.Post(url, requestDate.ToJsonString());
|
var response = JsonConvert.DeserializeObject<UpstreamOrderResponse>(result);
|
if (response.resultCode == "0") _unitOfWorkManage.CommitTran();
|
else
|
{
|
_unitOfWorkManage.RollbackTran();
|
SendErrorToUpstream(4, "", $"上游接口返回失败: {response.resultMsg}", outorder);
|
}
|
}
|
}
|
#endregion
|
|
return responseContent.OK();
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return responseContent.Error("批量处理失败:" + ex.Message);
|
}
|
}
|
#endregion
|
|
#region 推送异常上报ERP
|
/// <summary>
|
/// 推送异常信息给上游系统1.入库单接口;2.入库单报完成接口;3.出库单接口;4.出库报完成接口;5.药品基础信息同步接口;6.供应商信息接口;7.客户信息接口;8.库存
|
/// </summary>
|
public void SendErrorToUpstream(int type, string code, string message, string remark)
|
{
|
try
|
{
|
var url = "http://121.37.118.63:80/GYZ2/95fck/lexceptionLogog";
|
|
var requestData = new
|
{
|
type = type.ToString(),
|
code = code,
|
message = message,
|
remark = remark
|
};
|
|
var result = HttpHelper.Post(url, requestData.ToJsonString());
|
// 可以反序列化检查 resultCode 是否为0
|
}
|
catch (Exception e)
|
{
|
// 这里不要再抛异常了,避免死循环
|
Console.WriteLine("异常接口推送失败:" + e.Message);
|
}
|
}
|
#endregion
|
}
|
}
|