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; 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 获取ERP入库单 static string SearchInDate = "2025-10-30 00:00:00"; /// /// 获取上游系统的入库单 /// /// /// 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.ToString("yyyy-MM-dd HH:mm:ss"); // 发起请求 var result = HttpHelper.Post(url, requestData.ToJsonString()); // 反序列化 var response = JsonConvert.DeserializeObject>(result); if (response == null || response.resultCode != "0") { // 调用异常接口 //SendErrorToUpstream(1, "", response.resultMsg ?? "上游接口返回失败", ""); return responseContent.Error(response.resultMsg ?? "上游接口返回失败"); } if (response.data == null || !response.data.Any()) { return responseContent.OK("无新入库单数据"); } var ordernos = response.data.Select(x => x.order_no).ToList(); // 获取所有已存在的入库单号 var existingOrderNos = _cabinOrderServices.Db.CopyNew().Queryable() .Where(x => ordernos.Contains(x.Order_no)) .Select(x => x.Order_no) .Distinct().ToList(); // 过滤掉已存在的入库单 var newOrders = response.data .Where(order => !existingOrderNos.Contains(order.order_no)) .ToList(); if (newOrders.Count < 1) { return responseContent.OK("所有入库单已存在,无需新增"); } //存储入库单号 List orderNos = new List(); string name = string.Empty; MessageGroupByEnum messageGroupBy = MessageGroupByEnum.InOrderAlarm; MessageStatusEnum messageStatus = MessageStatusEnum.Emergency; foreach (var order in newOrders) { try { if (order.order_type == "1") //正常入库 { name = "创建正常入库单"; responseContent = _cabinOrderServices.CreateInboundOrder(order); if (!responseContent.Status) throw new Exception(responseContent.Message); List? dt_CabinOrders = responseContent.Data as List; if (dt_CabinOrders != null) _cabinOrderServices.Db.InsertNav(dt_CabinOrders).Include(x => x.Details).ExecuteCommand(); } else if (order.order_type == "3")//入库退料 { messageGroupBy = MessageGroupByEnum.OutOrderAlarm; name = "创建入库退货单"; //创建出库单 #region 转换为出库单 UpstramOutOrderInfo upstramOutOrderInfo = new UpstramOutOrderInfo() { order_no = order.order_no, order_type = order.order_type, warehouse_no = order.warehouse_no, details = new List() }; 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")//报溢入库 { name = "创建盘盈入库单"; messageStatus = MessageStatusEnum.Undisposed; var content = _cabinOrderServices.CreateCheckInOrder(order); if (!content.Status) throw new Exception(content.Message); } } catch (Exception ex) { _messageInfoService.AddMessageInfo(messageGroupBy, name, ex.Message, messageStatus); //SendErrorToUpstream(1, "", ex.Message, ""); //return responseContent.Error("同步失败: " + ex.Message); } }; return responseContent.OK("同步入库单成功"); } catch (Exception ex) { // 全局异常时,也推送异常给上游 //SendErrorToUpstream(1, "", ex.Message, ""); return responseContent.Error("同步失败: " + ex.Message); } } #endregion #region 获取ERP出库单 static string SearchOutDate = "2025-10-30 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.ToString("yyyy-MM-dd HH:mm:ss"); var result = HttpHelper.Post(url, requestData.ToJsonString()); var response = JsonConvert.DeserializeObject>(result); if (response == null || response.resultCode != "0") { //SendErrorToUpstream(3, "", response.resultMsg ?? "上游接口返回失败", ""); return responseContent.Error(response?.resultMsg ?? "上游接口返回失败"); } if (response.data == null || !response.data.Any()) { return responseContent.OK("无新出库单数据"); } var ordernos = response.data.Select(x => x.order_no).ToList(); // 已存在出库单号 var existingOutOrderNos = _deliveryOrderServices.Db.CopyNew().Queryable() .Where(x => ordernos.Contains(x.Out_no)) .Select(x => x.Out_no) .Distinct().ToList(); // 新出库单 var newOutOrders = response.data .Where(outorder => !existingOutOrderNos.Contains(outorder.order_no)) .ToList(); List order_no = newOutOrders.Select(x => x.order_no).ToList(); if (newOutOrders.Count < 1) { return responseContent.OK("所有出库单已存在,无需新增"); } List _DeliveryOrders = new List(); List orderNos = new List(); string name = string.Empty; MessageGroupByEnum messageGroupBy = MessageGroupByEnum.OutOrderAlarm; MessageStatusEnum messageStatus = MessageStatusEnum.Emergency; foreach (var outorder in newOutOrders) { try { if (outorder.order_type == "1") // 正常出库单 { name = "创建正常出库单"; var content = _deliveryOrderServices.CreateOutboundOrder(outorder); if (!content.Status) throw new Exception(content.Message); } else if (outorder.order_type == "2")//出库退货 { name = "创建出库退货单"; messageGroupBy = MessageGroupByEnum.InOrderAlarm; // 创建出库退货单 - 这里需要根据业务逻辑实现 // 暂时跳过或实现退货逻辑 //continue; #region 转换成入库单 UpstreamOrderInfo order = new UpstreamOrderInfo() { order_no = outorder.order_no, order_type = outorder.order_type, warehouse_no = outorder.warehouse_no, details = new List() }; 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_CabinOrders = responseContent.Data as List; if (dt_CabinOrders != null && dt_CabinOrders.Count > 0) _cabinOrderServices.Db.CopyNew().InsertNav(dt_CabinOrders).Include(x => x.Details).ExecuteCommand(); #endregion } else if (outorder.order_type == "6")//报损出库 { name = "创建盘损出库单"; messageStatus = MessageStatusEnum.Undisposed; var content = _deliveryOrderServices.CreateCheckOutOrder(outorder); if (!content.Status) throw new Exception(content.Message); } } catch (Exception ex) { _messageInfoService.AddMessageInfo(messageGroupBy, name, ex.Message, messageStatus); //SendErrorToUpstream(3, "", ex.Message, ""); //return responseContent.Error("同步失败: " + ex.Message); } } return responseContent.OK($"同步出库单成功,共{_DeliveryOrders.Count}条"); } catch (Exception ex) { //SendErrorToUpstream(3, "", ex.Message, ""); return responseContent.Error("同步失败: " + ex.Message); } } #endregion #region 下发立库入库单 public WebResponseContent EdiIn() { try { var reslut = WarehouseEnum.立库.ObjToInt().ToString("000"); var orders = _cabinOrderServices.Repository.QueryData(x => x.OdrderStatus == "新建" && x.Warehouse_no == reslut); 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)); var materielInfos = _materielInfoService.Repository.QueryData(x => cabinOrderDetails.Select(x => x.Goods_no).Contains(x.MaterielCode)); 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>(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); } } #region MyRegion //public WebResponseContent EdiIn1() //{ // try // { // //2.查询符合条件的订单(表头 = 新建 && 包含有效明细) // //var orders = BaseDal.Db.Queryable() // // .Where(o => o.OdrderStatus == "新建") // // .Includes(o => o.Details, d => d.MedicineGoods) // // .ToList(); // //查出包含全部的入库单,包含全部明细+一个明细对应一个商品 // var reslut = WarehouseEnum.立库.ObjToInt().ToString("000"); // var orders = _cabinOrderServices.Db.CopyNew() // .Queryable() // .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.Count < 1) // { // //Console.WriteLine("没有符合条件的订单需要推送"); // return WebResponseContent.Instance.Error("没有符合条件的订单需要推送"); // } // List cabinOrderDetails = new List(); // var url = "http://172.16.1.2:9357/file-admin/api/in/ediIn"; // // 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://127.0.0.1:4523/m2/5660322-5340849-default/363019549"; // var result = HttpHelper.Post(url, ediDto.ToJsonString()); // var resp = JsonConvert.DeserializeObject>(result); // if (resp != null && resp.code == "0") // { // order.OdrderStatus = "开始"; // foreach (var item in order.Details) // { // item.Status = 1; // item.OrderDetailStatus = "开始"; // } // cabinOrderDetails.AddRange(order.Details); // // 更新表头状态 // //_cabinOrderServices.Db.Updateable() // // .SetColumns(o => new Dt_CabinOrder { OdrderStatus = "开始" }) // // .Where(o => o.Id == order.Id) // // .ExecuteCommand(); // // 更新明细状态为已同步 //这里要是将新建--》开始状态,在后端接口返回我们的时候在返回已完成 // //_cabinDetailServices.Db.Updateable() // // .SetColumns(d => new Dt_CabinOrderDetail { Status = 1, OrderDetailStatus = "开始" }) // // .Where(d => d.OrderId == order.Id && d.Status == 0) // // .ExecuteCommand(); // //Console.WriteLine($"订单 {order.Order_no} 推送成功"); // } // else // { // continue; // //SendErrorToUpstream(3, order.Order_no, resp?.msg ?? "WCS 推送失败", ""); // //Console.WriteLine($"订单 {order.Order_no} 推送失败:{resp?.msg}"); // //return new WebResponseContent { Status = false, Message = "订单推送失败" }; // } // } // _cabinOrderServices.UpdateData(orders); // _cabinDetailServices.UpdateData(cabinOrderDetails); // return new WebResponseContent { Status = true, Message = "推送成功" }; // } // catch (Exception ex) // { // Console.WriteLine("EdiIn 异常:" + ex.Message); // return new WebResponseContent { Status = false, Message = ex.Message }; // } //} #endregion #endregion #region 下发立库出库单 public WebResponseContent EdiOut() { try { var reslut = WarehouseEnum.立库.ObjToInt().ToString("000"); var orders = _deliveryOrderServices.Repository.QueryData(x => x.OutStatus == "新建" && x.Warehouse_no == reslut); 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)); var materielInfos = _materielInfoService.Repository.QueryData(x => deliveryOrderDetails.Select(x => x.Goods_no).Contains(x.MaterielCode)); 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 == "6" ? "30" : "10", 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() }; var result = HttpHelper.Post(url, ediDto.ToJsonString()); var resp = JsonConvert.DeserializeObject>(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); } } #region MyRegion public WebResponseContent EdiOut1() { var responseContent = new WebResponseContent(); var WarehouseLk = WarehouseEnum.立库.ObjToInt().ToString("000"); try { // 1. 查询符合条件的订单(表头=新建 && 包含有效明细) var outOrders = _deliveryOrderServices.Db.CopyNew().Queryable() .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.Count < 1) { //Console.WriteLine("没有符合条件的订单需要推送"); return responseContent.Error("没有符合条件的订单需要推送"); } List deliveryOrderDetails = new List(); var url = "http://172.16.1.2:9357/file-admin/api/out/ediOut"; 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 // { // new ToOutediInStock { palletCode = "FC00001", quantity = d.Order_qty.ToString() } // } // : null }).ToList() }; // 4. 调用接口 //var url = "http://127.0.0.1:4523/m2/5660322-5340849-default/363076920"; var result = HttpHelper.Post(url, ediDto.ToJsonString()); var resp = JsonConvert.DeserializeObject>(result); if (resp != null && resp.code == "0") { order.OutStatus = "开始"; foreach (var item in order.Details) { item.Status = 1; item.OotDetailStatus = "开始"; } deliveryOrderDetails.AddRange(order.Details); // 更新表头状态 //_cabinDetailServices.Db.CopyNew().Updateable() // .SetColumns(o => new Dt_DeliveryOrder { OutStatus = "开始" }) // .Where(o => o.Id == order.Id) // .ExecuteCommand(); // 更新明细状态 //_deliveryOrderDetailServices.Db.CopyNew().Updateable() // .SetColumns(d => new Dt_DeliveryOrderDetail { Status = 1, OotDetailStatus = "开始" }) // .Where(d => d.DeliveryOrderId == order.Id && d.Status == 0) // .ExecuteCommand(); //Console.WriteLine($"订单 {order.Out_no} 推送成功"); } else { continue; //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}"); } } _deliveryOrderServices.UpdateData(outOrders); _deliveryOrderDetailServices.UpdateData(deliveryOrderDetails); return responseContent.OK("出库订单推送完成"); } catch (Exception ex) { //Console.WriteLine("EdiOut 异常:" + ex.Message); return responseContent.Error("出库订单推送失败:" + ex.Message); } } #endregion #endregion #region 入库完成上报ERP /// /// 入库报完成接口 /// /// 入库单号 //先检查是否所有明细都已完成,如果是,那么更新表头状态为已完成 /// 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().Where(x => inorders.Contains(x.Order_no)).Includes(x => x.Details).ToList(); List cabinOrders = new List(); List cabinOrderDetails = new List(); 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 { var result = HttpHelper.Post(url, new { order_no = item.Key }.ToJsonString()); var response = JsonConvert.DeserializeObject(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 /// /// 出库报完成接口 /// /// 出库单号 /// 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().Where(x => outorders.Contains(x.Out_no)).Includes(x => x.Details).ToList(); List cabinOrders = new List(); List cabinOrderDetails = new List(); 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 { var result = HttpHelper.Post(url, new { order_no = item.Key }.ToJsonString()); var response = JsonConvert.DeserializeObject(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 #region 推送异常上报ERP /// /// 推送异常信息给上游系统1.入库单接口;2.入库单报完成接口;3.出库单接口;4.出库报完成接口;5.药品基础信息同步接口;6.供应商信息接口;7.客户信息接口;8.库存 /// 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 } }