dengjunjie
6 天以前 2ab458954c670502814c08543ec43c2cf983eb73
н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/Business.cs
@@ -15,28 +15,34 @@
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_WMSServer
namespace WIDESEA_SquareCabinServices
{
    public class Business : IBusiness
    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, IMessageInfoService messageInfoService)
        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-09-10 00:00:00";
        static string SearchInDate = "2025-10-30 00:00:00";
        /// <summary>
        /// èŽ·å–ä¸Šæ¸¸ç³»ç»Ÿçš„å…¥åº“å•
        /// </summary>
@@ -58,17 +64,17 @@
                    searchDate = SearchInDate
                    //searchDate = "2022-10-10 20:45:16"  // æ­£ç¡®çš„æ ¼å¼
                };
                SearchInDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd HH:mm:ss");
                SearchInDate = DateTime.Now.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")
                if (response == null || response.resultCode != "0")
                {
                    // è°ƒç”¨å¼‚常接口
                    SendErrorToUpstream(1, "", response.resultMsg ?? "上游接口返回失败", "");
                    //SendErrorToUpstream(1, "", response.resultMsg ?? "上游接口返回失败", "");
                    return responseContent.Error(response.resultMsg ?? "上游接口返回失败");
                }
@@ -76,8 +82,10 @@
                {
                    return responseContent.OK("无新入库单数据");
                }
                var ordernos = response.data.Select(x => x.order_no).ToList();
                // èŽ·å–æ‰€æœ‰å·²å­˜åœ¨çš„å…¥åº“å•å·
                var existingOrderNos = _cabinOrderServices.Db.Queryable<Dt_CabinOrder>()
                var existingOrderNos = _cabinOrderServices.Db.CopyNew().Queryable<Dt_CabinOrder>()
                    .Where(x => ordernos.Contains(x.Order_no))
                    .Select(x => x.Order_no)
                    .Distinct().ToList();
@@ -86,7 +94,7 @@
                    .Where(order => !existingOrderNos.Contains(order.order_no))
                    .ToList();
                if (!newOrders.Any())
                if (newOrders.Count < 1)
                {
                    return responseContent.OK("所有入库单已存在,无需新增");
                }
@@ -100,7 +108,6 @@
                {
                    try
                    {
                        _unitOfWorkManage.BeginTran();
                        if (order.order_type == "1") //正常入库
                        {
                            name = "创建正常入库单";
@@ -145,14 +152,12 @@
                            var content = _cabinOrderServices.CreateCheckInOrder(order);
                            if (!content.Status) throw new Exception(content.Message);
                        }
                        _unitOfWorkManage.CommitTran();
                    }
                    catch (Exception ex)
                    {
                        _unitOfWorkManage.RollbackTran();
                        _messageInfoService.AddMessageInfo(messageGroupBy, name, ex.Message, messageStatus);
                        SendErrorToUpstream(1, "", ex.Message, "");
                        return responseContent.Error("同步失败: " + ex.Message);
                        //SendErrorToUpstream(1, "", ex.Message, "");
                        //return responseContent.Error("同步失败: " + ex.Message);
                    }
                };
                return responseContent.OK("同步入库单成功");
@@ -161,21 +166,21 @@
            catch (Exception ex)
            {
                // å…¨å±€å¼‚常时,也推送异常给上游
                SendErrorToUpstream(1, "", ex.Message, "");
                //SendErrorToUpstream(1, "", ex.Message, "");
                return responseContent.Error("同步失败: " + ex.Message);
            }
        }
        #endregion
        #region èŽ·å–ERP出库单
        static string SearchOutDate = "2025-09-10 00:00:00";
        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";
                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
@@ -183,24 +188,25 @@
                    searchDate = SearchOutDate
                    //searchDate = "2022-10-10 20:45:16"  // æ­£ç¡®çš„æ ¼å¼
                };
                SearchOutDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd HH:mm:ss");
                SearchOutDate = DateTime.Now.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")
                if (response == null || response.resultCode != "0")
                {
                    SendErrorToUpstream(3, "", response.resultMsg ?? "上游接口返回失败", "");
                    return responseContent.Error(response.resultMsg ?? "上游接口返回失败");
                    //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.Queryable<Dt_DeliveryOrder>()
                var existingOutOrderNos = _deliveryOrderServices.Db.CopyNew().Queryable<Dt_DeliveryOrder>()
                    .Where(x => ordernos.Contains(x.Out_no))
                    .Select(x => x.Out_no)
                    .Distinct().ToList();
@@ -211,7 +217,7 @@
                List<string> order_no = newOutOrders.Select(x => x.order_no).ToList();
                if (!newOutOrders.Any())
                if (newOutOrders.Count < 1)
                {
                    return responseContent.OK("所有出库单已存在,无需新增");
                }
@@ -225,7 +231,6 @@
                {
                    try
                    {
                        _unitOfWorkManage.BeginTran();
                        if (outorder.order_type == "1") // æ­£å¸¸å‡ºåº“单
                        {
                            name = "创建正常出库单";
@@ -262,7 +267,7 @@
                            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();
                                _cabinOrderServices.Db.CopyNew().InsertNav(dt_CabinOrders).Include(x => x.Details).ExecuteCommand();
                            #endregion
                        }
                        else if (outorder.order_type == "6")//报损出库
@@ -272,21 +277,19 @@
                            var content = _deliveryOrderServices.CreateCheckOutOrder(outorder);
                            if (!content.Status) throw new Exception(content.Message);
                        }
                        _unitOfWorkManage.CommitTran();
                    }
                    catch (Exception ex)
                    {
                        _unitOfWorkManage.RollbackTran();
                        _messageInfoService.AddMessageInfo(messageGroupBy, name, ex.Message, messageStatus);
                        SendErrorToUpstream(3, "", ex.Message, "");
                        return responseContent.Error("同步失败: " + ex.Message);
                        //SendErrorToUpstream(3, "", ex.Message, "");
                        //return responseContent.Error("同步失败: " + ex.Message);
                    }
                }
                return responseContent.OK($"同步出库单成功,共{_DeliveryOrders.Count}条");
            }
            catch (Exception ex)
            {
                SendErrorToUpstream(3, "", ex.Message, "");
                //SendErrorToUpstream(3, "", ex.Message, "");
                return responseContent.Error("同步失败: " + ex.Message);
            }
        }
@@ -297,44 +300,23 @@
        {
            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)
                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)
                {
                    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
                    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",
                        //物料类型
@@ -354,61 +336,234 @@
                            //产品
                            productCode = d.Goods_no,
                            //sku名称
                            productName = d.MedicineGoods?.MaterielName,
                            productName = d.MedicineGoods.MaterielName,
                            //sku规格
                            productSpecifications = d.MedicineGoods?.MaterielSpec,
                            productSpecifications = d.MedicineGoods.MaterielSpec,
                            //数量
                            quantity = (int)d.Order_qty,
                            //效期
                            validityPeriod = d.Exp_date,
                            //生产厂家
                            manufacturer = d.MedicineGoods?.Factory,
                            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} æŽ¨é€æˆåŠŸ");
                        order.OdrderStatus = "开始";
                        foreach (var item in cabinOrderDetails.Where(x => x.OrderId == order.Id))
                        {
                            item.Status = 1;
                            item.OrderDetailStatus = "开始";
                        }
                    }
                    else
                    {
                        SendErrorToUpstream(3, order.Order_no, resp?.msg ?? "WCS æŽ¨é€å¤±è´¥", "");
                        Console.WriteLine($"订单 {order.Order_no} æŽ¨é€å¤±è´¥ï¼š{resp?.msg}");
                        return new WebResponseContent { Status = false, Message = "订单推送失败" };
                    }
                    #endregion
                }
                return new WebResponseContent { Status = true, Message = "推送成功" };
                _cabinOrderServices.UpdateData(orders);
                _cabinDetailServices.UpdateData(cabinOrderDetails);
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                Console.WriteLine("EdiIn å¼‚常:" + ex.Message);
                return new WebResponseContent { Status = false, Message = ex.Message };
                Console.WriteLine("下发WCS入库单异常:" + ex.Message);
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        #region MyRegion
        //public WebResponseContent EdiIn1()
        //{
        //    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.Count < 1)
        //        {
        //            //Console.WriteLine("没有符合条件的订单需要推送");
        //            return WebResponseContent.Instance.Error("没有符合条件的订单需要推送");
        //        }
        //        List<Dt_CabinOrderDetail> cabinOrderDetails = new List<Dt_CabinOrderDetail>();
        //        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<TowcsResponse<object>>(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<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
        //            {
        //                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<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);
            }
        }
        #region MyRegion
        public WebResponseContent EdiOut1()
        {
            var responseContent = new WebResponseContent();
            var WarehouseLk = WarehouseEnum.立库.ObjToInt().ToString("000");
@@ -426,12 +581,13 @@
                    order.Details = order.Details.Where(d => d.Status == 0).ToList();
                }
                if (outOrders == null || !outOrders.Any())
                if (outOrders.Count < 1)
                {
                    Console.WriteLine("没有符合条件的订单需要推送");
                    //Console.WriteLine("没有符合条件的订单需要推送");
                    return responseContent.Error("没有符合条件的订单需要推送");
                }
                List<Dt_DeliveryOrderDetail> deliveryOrderDetails = new List<Dt_DeliveryOrderDetail>();
                var url = "http://172.16.1.2:9357/file-admin/api/out/ediOut";
                foreach (var order in outOrders)
                {
                    try
@@ -480,7 +636,6 @@
                        };
                        // 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());
@@ -488,41 +643,51 @@
                        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.Updateable<Dt_DeliveryOrder>()
                              .SetColumns(o => new Dt_DeliveryOrder { OutStatus = "开始" })
                              .Where(o => o.Id == order.Id)
                              .ExecuteCommand();
                            //_cabinDetailServices.Db.CopyNew().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} æŽ¨é€æˆåŠŸ");
                            //_deliveryOrderDetailServices.Db.CopyNew().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}");
                            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}");
                        //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);
                //Console.WriteLine("EdiOut å¼‚常:" + ex.Message);
                return responseContent.Error("出库订单推送失败:" + ex.Message);
            }
        }
        #endregion
        #endregion
        #region å…¥åº“完成上报ERP
@@ -538,42 +703,53 @@
            {
                #region æŸ¥æ‰¾æ‰€æœ‰å·²å®Œæˆå…¥åº“单
                var inorders = _cabinOrderServices.Repository.QueryData(x => x.OdrderStatus == "已完成").Select(x => x.Order_no).Distinct().ToList();
                foreach (var inorder in inorders)
                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))
                {
                    //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())
                    if (!item.Where(x => x.OdrderStatus != "已完成").Any())
                    {
                        _unitOfWorkManage.BeginTran();
                        foreach (var item in Orders)
                        if (item.First().Order_type == InOrderTypeEnum.Allocat.ObjToInt().ToString())
                        {
                            if (item.Details != null)
                                _cabinDetailServices.Repository.DeleteAndMoveIntoHty(item.Details, OperateTypeEnum.自动完成);
                            item.Details = null;
                        }
                        _cabinOrderServices.Repository.DeleteAndMoveIntoHty(Orders, 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();
                            foreach (var a in item)
                            {
                                if (a.Details != null) cabinOrderDetails.AddRange(a.Details);
                                a.Details = null;
                                cabinOrders.Add(a);
                            }
                        }
                        else
                        {
                            _unitOfWorkManage.RollbackTran();
                            SendErrorToUpstream(2, "", $"上游接口返回失败: {response.resultMsg}", inorder);
                            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)
            {
                _unitOfWorkManage.RollbackTran();
                return responseContent.Error("批量处理失败:" + ex.Message);
            }
        }
@@ -592,41 +768,54 @@
            {
                #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 => 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))
                {
                    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())
                    if (!item.Where(x => x.OutStatus != "已完成").Any())
                    {
                        _unitOfWorkManage.BeginTran();
                        foreach (var item in Orders)
                        if (item.First().Out_type == OutOrderTypeEnum.Allocate.ObjToInt().ToString())
                        {
                            if (item.Details != null)
                                _deliveryOrderDetailServices.Repository.DeleteAndMoveIntoHty(item.Details, OperateTypeEnum.自动完成);
                            item.Details = null;
                            foreach (var a in item)
                            {
                                if (a.Details != null) cabinOrderDetails.AddRange(a.Details);
                                a.Details = null;
                                cabinOrders.Add(a);
                            }
                        }
                        _deliveryOrderServices.Repository.DeleteAndMoveIntoHty(Orders, 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);
                            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;
                            }
                        }
                    }
                }
                #endregion
                _deliveryOrderDetailServices.Repository.DeleteAndMoveIntoHty(cabinOrderDetails, OperateTypeEnum.自动完成);
                _deliveryOrderServices.Repository.DeleteAndMoveIntoHty(cabinOrders, OperateTypeEnum.自动完成);
                #endregion
                return responseContent.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return responseContent.Error("批量处理失败:" + ex.Message);
            }
        }