From 3212f32acdce5938956131ecfb530e361250f82f Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期六, 25 十月 2025 18:51:56 +0800
Subject: [PATCH] 优化出入库流程、盘点流程

---
 新建文件夹/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/Business.cs |  661 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 661 insertions(+), 0 deletions(-)

diff --git "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/Business.cs" "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/Business.cs"
new file mode 100644
index 0000000..2bbf5a6
--- /dev/null
+++ "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/Business.cs"
@@ -0,0 +1,661 @@
+锘縰sing 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"  // 姝g‘鐨勬牸寮�
+                };
+                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("鎵�鏈夊叆搴撳崟宸插瓨鍦紝鏃犻渶鏂板");
+                }
+
+                _unitOfWorkManage.BeginTran();
+                try
+                {
+                    List<Dt_CabinOrder> _CabinOrders = new List<Dt_CabinOrder>();
+                    //瀛樺偍鍏ュ簱鍗曞彿
+                    List<string> orderNos = new List<string>();
+
+                    foreach (var order in newOrders)
+                    {
+                        if (order.order_type == "1") //姝e父鍏ュ簱
+                        {
+                            responseContent = _cabinOrderServices.CreateInboundOrder(order);
+                            List<Dt_CabinOrder>? dt_CabinOrders = responseContent.Data as List<Dt_CabinOrder>;
+                            if (dt_CabinOrders != null) _CabinOrders.AddRange(dt_CabinOrders);
+                        }
+                        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);
+                            }
+                            _deliveryOrderServices.CreateOutboundOrder(upstramOutOrderInfo);
+                            #endregion
+                        }
+                        else if (order.order_type == "5")//鎶ユ孩鍏ュ簱
+                        {
+                            _cabinOrderServices.CreateCheckInOrder(order);
+                        }
+                    };
+                    _cabinOrderServices.Db.InsertNav(_CabinOrders).Include(x => x.Details).ExecuteCommand();
+
+                    //鍦ㄤ笅鍙戠粰wcs 
+                    //EdiIn(); //鍙戠粰涓嬫父
+                    //濡傛灉杩欎釜鏂规硶鎴愬姛浜嗭紝閭d箞灏辫皟鐢–ompleteOrder鎺ュ彛锛岀劧鍚庢敼鍙�
+                    _unitOfWorkManage.CommitTran();
+                    return responseContent.OK("鍚屾鍏ュ簱鍗曟垚鍔�");
+                }
+                catch (Exception ex)
+                {
+                    _unitOfWorkManage.RollbackTran();
+                    SendErrorToUpstream(1, "", ex.Message, "");
+                    return responseContent.Error("鍚屾澶辫触: " + ex.Message);
+                }
+            }
+            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"  // 姝g‘鐨勬牸寮�
+                };
+                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") // 姝e父鍑哄簱鍗�
+                        {
+                            _deliveryOrderServices.CreateOutboundOrder(outorder);//鍒涘缓鍑哄簱鍗曘�佸鐞嗗簱瀛樸�佹坊鍔犲嚭搴撲换鍔�
+                        }
+                        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);
+                            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")//鎶ユ崯鍑哄簱
+                        {
+                            _deliveryOrderServices.CreateCheckOutOrder(outorder);
+                        }
+                    }
+
+                    // 鎵归噺鎻掑叆鍑哄簱鍗曞拰鏄庣粏
+                    //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"; // 榛樿鍊糦Y
+
+                    var ediDto = new ToediInInfo
+                    {
+
+                        //瀹㈡埛浠g爜
+                        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();
+
+                        // 鏇存柊鏄庣粏鐘舵�佷负宸插悓姝�  //杩欓噷瑕佹槸灏嗘柊寤�--銆嬪紑濮嬬姸鎬�,鍦ㄥ悗绔帴鍙h繑鍥炴垜浠殑鏃跺�欏湪杩斿洖宸插畬鎴�
+                        _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();
+            try
+            {
+                // 1. 鏌ヨ绗﹀悎鏉′欢鐨勮鍗曪紙琛ㄥご=鏂板缓 && 鍖呭惈鏈夋晥鏄庣粏锛�
+                var outOrders = _deliveryOrderServices.Db.CopyNew().Queryable<Dt_DeliveryOrder>()
+                    .Where(o => o.OutStatus == "鏂板缓" && o.Warehouse_no == WarehouseEnum.绔嬪簱.ObjToInt().ToString("000"))
+                    .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))
+                        {
+                            //濡傛灉鏉′欢婊¤冻锛屽皢鐗╂枡浠g爜璁剧疆涓虹涓�涓槑缁嗛」瀵瑰簲鐨勮嵂鍝佺墿鏂欎唬鐮�
+                            materialCode = firstDetail.MedicineGoods.MaterielErpType;
+                        }
+                        switch (order.Out_type)
+                        {
+                            case "1"://姝e父鍑哄簱
+                            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> //鍏堟鏌ユ槸鍚︽墍鏈夋槑缁嗛兘宸插畬鎴愶紝濡傛灉鏄紝閭d箞鏇存柊琛ㄥご鐘舵�佷负宸插畬鎴�
+        /// <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 鎺ㄩ�佸紓甯镐笂鎶RP
+        /// <summary>
+        /// 鎺ㄩ�佸紓甯镐俊鎭粰涓婃父绯荤粺1.鍏ュ簱鍗曟帴鍙o紱2.鍏ュ簱鍗曟姤瀹屾垚鎺ュ彛锛�3.鍑哄簱鍗曟帴鍙o紱4.鍑哄簱鎶ュ畬鎴愭帴鍙o紱5.鑽搧鍩虹淇℃伅鍚屾鎺ュ彛锛�6.渚涘簲鍟嗕俊鎭帴鍙o紱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
+    }
+}

--
Gitblit v1.9.3