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;
|
using WIDESEA_Common;
|
using System.Xml.Linq;
|
using WIDESEA_Common.OrderEnum;
|
using static WIDESEA_DTO.SquareCabin.AlarmDto;
|
using OfficeOpenXml.Style;
|
using System.Security.Policy;
|
using SqlSugar;
|
|
namespace WIDESEA_SquareCabinServices
|
{
|
public partial class Business : IBusiness
|
{
|
private readonly ICabinOrderServices _cabinOrderServices;
|
private readonly ICabinOrderDetailServices _cabinDetailServices;
|
private readonly IDeliveryOrderServices _deliveryOrderServices;
|
private readonly IDeliveryOrderDetailServices _deliveryOrderDetailServices;
|
private readonly IMaterielInfoService _materielInfoService;
|
private readonly IMessageInfoService _messageInfoService;
|
private readonly IUnitOfWorkManage _unitOfWorkManage;
|
public Business(IDeliveryOrderServices deliveryOrderServices, IUnitOfWorkManage unitOfWorkManage, IDeliveryOrderDetailServices deliveryOrderDetailServices, ICabinOrderServices cabinOrderServices, ICabinOrderDetailServices cabinDetailServices, IMaterielInfoService materielInfoService, IMessageInfoService messageInfoService)
|
{
|
_deliveryOrderServices = deliveryOrderServices;
|
_unitOfWorkManage = unitOfWorkManage;
|
_deliveryOrderDetailServices = deliveryOrderDetailServices;
|
_cabinOrderServices = cabinOrderServices;
|
_cabinDetailServices = cabinDetailServices;
|
_materielInfoService = materielInfoService;
|
_messageInfoService = messageInfoService;
|
}
|
|
#region 下发立库入库单
|
//public WebResponseContent EdiIn()
|
//{
|
// try
|
// {
|
// var reslut = WarehouseEnum.立库.ObjToInt().ToString("000");
|
// var orders = _cabinOrderServices.Repository.QueryData(x => x.OdrderStatus == "新建" && x.Warehouse_no == reslut).ToList();
|
// if (orders.Count < 1) return WebResponseContent.Instance.OK();
|
// //string url = "http://172.16.1.2:9357/file-admin/api/in/ediIn";
|
// var cabinOrderDetails = _cabinDetailServices.Repository.QueryData(x => orders.Select(x => x.Id).ToList().Contains(x.OrderId)).ToList();
|
// var materielInfos = _materielInfoService.Repository.QueryData(x => cabinOrderDetails.Select(x => x.Goods_no).Contains(x.MaterielCode)).ToList();
|
// foreach (var order in orders)
|
// {
|
// order.Details = cabinOrderDetails.Where(x => x.OrderId == order.Id).ToList();
|
// foreach (var item in order.Details)
|
// {
|
// item.MedicineGoods = materielInfos.Where(x => x.MaterielCode == item.Goods_no).First();
|
// }
|
// #region 下发WCS
|
// string materialCode = order.Details.FirstOrDefault()?.MedicineGoods?.MaterielErpType ?? "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 result = HttpHelper.Post(url, ediDto.ToJsonString());
|
// var resp = JsonConvert.DeserializeObject<TowcsResponse<object>>(result);
|
// if (resp != null && resp.code == "0")
|
// {
|
// order.OdrderStatus = "开始";
|
// foreach (var item in cabinOrderDetails.Where(x => x.OrderId == order.Id))
|
// {
|
// item.Status = 1;
|
// item.OrderDetailStatus = "开始";
|
// }
|
// }
|
// #endregion
|
// }
|
// _cabinOrderServices.UpdateData(orders);
|
// _cabinDetailServices.UpdateData(cabinOrderDetails);
|
// return WebResponseContent.Instance.OK();
|
// }
|
// catch (Exception ex)
|
// {
|
// Console.WriteLine("下发WCS入库单异常:" + ex.Message);
|
// return WebResponseContent.Instance.Error(ex.Message);
|
// }
|
//}
|
#endregion
|
|
#region 下发立库出库单
|
//public WebResponseContent EdiOut()
|
//{
|
// try
|
// {
|
// var reslut = WarehouseEnum.立库.ObjToInt().ToString("000");
|
// var orders = _deliveryOrderServices.Repository.QueryData(x => x.OutStatus == "新建" && x.Warehouse_no == reslut).ToList();
|
// if (orders.Count < 1) return WebResponseContent.Instance.OK();
|
// string url = "http://172.16.1.2:9357/file-admin/api/out/ediOut";
|
// var deliveryOrderDetails = _deliveryOrderDetailServices.Repository.QueryData(x => orders.Select(x => x.Id).ToList().Contains(x.DeliveryOrderId)).ToList();
|
// var materielInfos = _materielInfoService.Repository.QueryData(x => deliveryOrderDetails.Select(x => x.Goods_no).Contains(x.MaterielCode)).ToList();
|
// foreach (var order in orders)
|
// {
|
// order.Details = deliveryOrderDetails.Where(x => x.DeliveryOrderId == order.Id).ToList();
|
// foreach (var item in order.Details)
|
// {
|
// item.MedicineGoods = materielInfos.Where(x => x.MaterielCode == item.Goods_no).First();
|
// }
|
// #region 下发WCS
|
// string materialCode = order.Details.FirstOrDefault()?.MedicineGoods?.MaterielErpType ?? "YY";
|
// var ediDto = new ToediOutInfo
|
// {
|
// //客户代码
|
// customerCode = "905",
|
// //物料类型
|
// materialCode = materialCode,
|
// externalOrderNo = order.Out_no,
|
// outOrderType = order.Out_type,
|
// priority = 1,
|
// Is_cancel = 0,
|
// details = order.Details.Select(d => new ToeOutdiInDetail
|
// {
|
// batchNo = d.Batch_num,
|
// productCode = d.Goods_no,
|
// productName = d.MedicineGoods.MaterielName,
|
// productSpecifications = d.MedicineGoods.MaterielModel,
|
// quantity = (int)d.Order_qty,
|
// }).ToList()
|
// };
|
// switch (order.Out_type)
|
// {
|
// case "1"://正常出库
|
// case "3"://入库退货
|
// ediDto.outOrderType = "10";//一般交易出库单
|
// break;
|
// case "6"://盘亏出库
|
// ediDto.outOrderType = "30";//盘亏出库单
|
// break;
|
// }
|
// var result = HttpHelper.Post(url, ediDto.ToJsonString());
|
// var resp = JsonConvert.DeserializeObject<TowcsResponse<object>>(result);
|
// if (resp != null && resp.code == "0")
|
// {
|
// order.OutStatus = "开始";
|
// foreach (var item in deliveryOrderDetails.Where(x => x.DeliveryOrderId == order.Id))
|
// {
|
// item.Status = 1;
|
// item.OotDetailStatus = "开始";
|
// }
|
// }
|
// #endregion
|
// }
|
// _deliveryOrderServices.UpdateData(orders);
|
// _deliveryOrderDetailServices.UpdateData(deliveryOrderDetails);
|
// return WebResponseContent.Instance.OK();
|
// }
|
// catch (Exception ex)
|
// {
|
// Console.WriteLine("下发WCS出库单异常:" + ex.Message);
|
// return WebResponseContent.Instance.Error(ex.Message);
|
// }
|
//}
|
#endregion
|
|
|
|
|
|
// 使用 SqlSugar 的 Ado.Connection 手动管理
|
#region 下发立库入库单
|
public WebResponseContent EdiIn()
|
{
|
// 创建独立的 SqlSugarClient
|
using (var db = new SqlSugarClient(new ConnectionConfig
|
{
|
ConnectionString = "Data Source=.;Initial Catalog=WIDESEA_WMSDBF_Z22;User ID=sa;Password=48PYX_h7KS@f;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
|
DbType = DbType.SqlServer,
|
IsAutoCloseConnection = true, // 关键配置,自动关闭连接
|
MoreSettings = new ConnMoreSettings()
|
{
|
IsAutoRemoveDataCache = true
|
}
|
}))
|
{
|
try
|
{
|
var reslut = WarehouseEnum.立库.ObjToInt().ToString("000");
|
|
// 使用新的 db 实例执行所有查询
|
var orders = db.Queryable<Dt_CabinOrder>()
|
.Where(x => x.OdrderStatus == "新建" && x.Warehouse_no == reslut)
|
.ToList();
|
|
if (orders.Count < 1) return WebResponseContent.Instance.OK();
|
string url = "http://172.16.1.2:9357/file-admin/api/in/ediIn";
|
var orderIds = orders.Select(x => x.Id).ToList();
|
|
|
var cabinOrderDetails = db.Queryable<Dt_CabinOrderDetail>()
|
.Where(x => orderIds.Contains(x.OrderId))
|
.ToList();
|
|
|
var goodsCodes = cabinOrderDetails.Select(x => x.Goods_no).Distinct().ToList();
|
|
var materielInfos = db.Queryable<Dt_MaterielInfo>()
|
.Where(x => goodsCodes.Contains(x.MaterielCode))
|
.ToList();
|
|
|
foreach (var order in orders)
|
{
|
order.Details = cabinOrderDetails.Where(x => x.OrderId == order.Id).ToList();
|
foreach (var item in order.Details) //手动创建与物料表的连接
|
{
|
item.MedicineGoods = materielInfos.Where(x => x.MaterielCode == item.Goods_no).First();
|
}
|
#region 下发WCS
|
string materialCode = order.Details.FirstOrDefault()?.MedicineGoods?.MaterielErpType ?? "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,
|
productName = d.MedicineGoods.MaterielName,
|
productSpecifications = d.MedicineGoods.MaterielSpec,
|
quantity = (int)d.Order_qty,
|
validityPeriod = d.Exp_date,
|
manufacturer = d.MedicineGoods.Factory,
|
libraryNo = order.Warehouse_no,
|
}).ToList()
|
};
|
var result = HttpHelper.Post(url, ediDto.ToJsonString());
|
var resp = JsonConvert.DeserializeObject<TowcsResponse<object>>(result);
|
if (resp != null && resp.code == "0")
|
{
|
order.OdrderStatus = "开始";
|
foreach (var item in cabinOrderDetails.Where(x => x.OrderId == order.Id))
|
{
|
item.Status = 1;
|
item.OrderDetailStatus = "开始";
|
}
|
}
|
#endregion
|
}
|
|
// 使用同一个 db 实例执行更新
|
db.Updateable(orders).ExecuteCommand();
|
db.Updateable(cabinOrderDetails).ExecuteCommand();
|
|
return WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
Console.WriteLine("下发WCS入库单异常:" + ex.Message);
|
return WebResponseContent.Instance.Error(ex.Message);
|
}
|
} // 这里会自动关闭连接,不需要手动管理
|
}
|
#endregion
|
|
#region 下发立库出库单
|
public WebResponseContent EdiOut()
|
{
|
using (var db = new SqlSugarClient(new ConnectionConfig
|
{
|
ConnectionString = "Data Source=.;Initial Catalog=WIDESEA_WMSDBF_Z22;User ID=sa;Password=48PYX_h7KS@f;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
|
DbType = DbType.SqlServer,
|
IsAutoCloseConnection = true, // 关键配置,自动关闭连接
|
MoreSettings = new ConnMoreSettings()
|
{
|
IsAutoRemoveDataCache = true
|
}
|
}))
|
{
|
try
|
{
|
var reslut = WarehouseEnum.立库.ObjToInt().ToString("000");
|
var orders = db.Queryable<Dt_DeliveryOrder>().Where(x => x.OutStatus == "新建" && x.Warehouse_no == reslut).ToList();
|
if (orders.Count < 1)
|
{
|
return WebResponseContent.Instance.OK();
|
}
|
string url = "http://172.16.1.2:9357/file-admin/api/out/ediOut";
|
var deliveryOrderDetails = db.Queryable<Dt_DeliveryOrderDetail>().Where(x => orders.Select(x => x.Id).ToList().Contains(x.DeliveryOrderId)).ToList();
|
var materielInfos = db.Queryable<Dt_MaterielInfo>().Where(x => deliveryOrderDetails.Select(x => x.Goods_no).Contains(x.MaterielCode)).ToList();
|
foreach (var order in orders)
|
{
|
order.Details = deliveryOrderDetails.Where(x => x.DeliveryOrderId == order.Id).ToList();
|
#region 下发WCS
|
foreach (var item in order.Details) //手动创建与物料表的连接
|
{
|
item.MedicineGoods = materielInfos.Where(x => x.MaterielCode == item.Goods_no).First();
|
}
|
string materialCode = order.Details.FirstOrDefault()?.MedicineGoods?.MaterielErpType ?? "YY";
|
var ediDto = new ToediOutInfo
|
{
|
//客户代码
|
customerCode = "905",
|
//物料类型
|
materialCode = materialCode,
|
externalOrderNo = order.Out_no,
|
outOrderType = order.Out_type,
|
priority = 1,
|
Is_cancel = 0,
|
details = order.Details.Select(d => new ToeOutdiInDetail
|
{
|
batchNo = d.Batch_num,
|
productCode = d.Goods_no,
|
productName = d.MedicineGoods.MaterielName,
|
productSpecifications = d.MedicineGoods.MaterielModel,
|
quantity = (int)d.Order_qty,
|
}).ToList()
|
};
|
switch (order.Out_type)
|
{
|
case "1"://正常出库
|
case "3"://入库退货
|
ediDto.outOrderType = "10";//一般交易出库单
|
break;
|
case "6"://盘亏出库
|
ediDto.outOrderType = "30";//盘亏出库单
|
break;
|
}
|
var result = HttpHelper.Post(url, ediDto.ToJsonString());
|
var resp = JsonConvert.DeserializeObject<TowcsResponse<object>>(result);
|
if (resp != null && resp.code == "0")
|
{
|
order.OutStatus = "开始";
|
foreach (var item in deliveryOrderDetails.Where(x => x.DeliveryOrderId == order.Id))
|
{
|
item.Status = 1;
|
item.OotDetailStatus = "开始";
|
}
|
}
|
#endregion
|
}
|
db.Updateable(orders).ExecuteCommand();
|
db.Updateable(deliveryOrderDetails).ExecuteCommand();
|
|
return WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
Console.WriteLine("下发WCS出库单异常:" + ex.Message);
|
return WebResponseContent.Instance.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();
|
var Orders = _cabinOrderServices.Db.Queryable<Dt_CabinOrder>().Where(x => inorders.Contains(x.Order_no)).Includes(x => x.Details).ToList();
|
List<Dt_CabinOrder> cabinOrders = new List<Dt_CabinOrder>();
|
List<Dt_CabinOrderDetail> cabinOrderDetails = new List<Dt_CabinOrderDetail>();
|
var url = "http://121.37.118.63:80/GYZ2/95fck/inOrderOk";
|
foreach (var item in Orders.GroupBy(x => x.Order_no))
|
{
|
//只有当该订单号下的所有记录都是"已完成"状态时,才继续处理
|
if (!item.Where(x => x.OdrderStatus != "已完成").Any())
|
{
|
if (item.First().Order_type == InOrderTypeEnum.Allocat.ObjToInt().ToString())
|
{
|
foreach (var a in item)
|
{
|
if (a.Details != null) cabinOrderDetails.AddRange(a.Details);
|
a.Details = null;
|
cabinOrders.Add(a);
|
}
|
}
|
else
|
{
|
if (item.First().Order_type == "2") url = "http://121.37.118.63:80/GYZ2/95fck/outOrderOk";//出库退货
|
var result = HttpHelper.Post(url, new { order_no = item.Key }.ToJsonString());
|
var response = JsonConvert.DeserializeObject<UpstreamOrderResponse>(result);
|
if (response != null && response.resultCode == "0")
|
{
|
foreach (var a in item)
|
{
|
if (a.Details != null) cabinOrderDetails.AddRange(a.Details);
|
a.Details = null;
|
cabinOrders.Add(a);
|
}
|
}
|
else
|
{
|
string mess = "上报ERP无响应";
|
if (response != null) mess = response.resultMsg;
|
_messageInfoService.AddMessageInfo(MessageGroupByEnum.InOrderAlarm, $"入库单号【{item.Key}】完成上报ERP失败", mess);
|
continue;
|
}
|
}
|
}
|
}
|
_cabinDetailServices.Repository.DeleteAndMoveIntoHty(cabinOrderDetails, OperateTypeEnum.自动完成);
|
_cabinOrderServices.Repository.DeleteAndMoveIntoHty(cabinOrders, OperateTypeEnum.自动完成);
|
#endregion
|
return responseContent.OK();
|
}
|
catch (Exception ex)
|
{
|
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();
|
var Orders = _deliveryOrderServices.Db.Queryable<Dt_DeliveryOrder>().Where(x => outorders.Contains(x.Out_no)).Includes(x => x.Details).ToList();
|
List<Dt_DeliveryOrder> cabinOrders = new List<Dt_DeliveryOrder>();
|
List<Dt_DeliveryOrderDetail> cabinOrderDetails = new List<Dt_DeliveryOrderDetail>();
|
var url = "http://121.37.118.63:80/GYZ2/95fck/outOrderOk";
|
foreach (var item in Orders.GroupBy(x => x.Out_no))
|
{
|
if (!item.Where(x => x.OutStatus != "已完成").Any())
|
{
|
if (item.First().Out_type == OutOrderTypeEnum.Allocate.ObjToInt().ToString())
|
{
|
foreach (var a in item)
|
{
|
if (a.Details != null) cabinOrderDetails.AddRange(a.Details);
|
a.Details = null;
|
cabinOrders.Add(a);
|
}
|
}
|
else
|
{
|
if (item.First().Out_type == "3") url = "http://121.37.118.63:80/GYZ2/95fck/inOrderOk";//入库退货 出库单
|
var result = HttpHelper.Post(url, new { order_no = item.Key }.ToJsonString());
|
var response = JsonConvert.DeserializeObject<UpstreamOrderResponse>(result);
|
if (response != null && response.resultCode == "0")
|
{
|
foreach (var a in item)
|
{
|
if (a.Details != null) cabinOrderDetails.AddRange(a.Details);
|
a.Details = null;
|
cabinOrders.Add(a);
|
}
|
}
|
else
|
{
|
string mess = "上报ERP无响应";
|
if (response != null) mess = response.resultMsg;
|
_messageInfoService.AddMessageInfo(MessageGroupByEnum.InOrderAlarm, $"出库单号【{item.Key}】完成上报ERP失败", mess);
|
continue;
|
}
|
}
|
}
|
}
|
_deliveryOrderDetailServices.Repository.DeleteAndMoveIntoHty(cabinOrderDetails, OperateTypeEnum.自动完成);
|
_deliveryOrderServices.Repository.DeleteAndMoveIntoHty(cabinOrders, OperateTypeEnum.自动完成);
|
|
#endregion
|
return responseContent.OK();
|
}
|
catch (Exception ex)
|
{
|
return responseContent.Error("批量处理失败:" + ex.Message);
|
}
|
}
|
#endregion
|
|
}
|
}
|