From c573732636815e569d24aacff11a82f93602585a Mon Sep 17 00:00:00 2001
From: 移动系统liao <liaoxujun@qq.com>
Date: 星期三, 11 十二月 2024 09:10:43 +0800
Subject: [PATCH] 完成配送订单处理

---
 CoreCms.Net.Web.WebApi/Properties/PublishProfiles/FolderProfile.pubxml.user |    2 
 CoreCms.Net.Web.WebApi/Controllers/CyinOsAPI/CyDriverController.cs          |    7 
 CoreCms.Net.RedisMQ/CyPlanOderMq.cs                                         |   50 +
 CoreCms.Net.IServices/CYOAServices/DTO.cs                                   |   57 +
 CoreCms.Net.Model/CyinOAModel/CoreDeliverOrder.cs                           |    7 
 CoreCms.Net.Web.WebApi/Controllers/CyinOsAPI/CyDeliverMangerController.cs   |   23 
 CoreCms.Net.Configuration/GlobalEnumVars.cs                                 |    7 
 CoreCms.Net.RedisMQ/WeChatPayShippingSubscribe.cs                           |    1 
 CoreCms.Net.Model/CyinOAModel/CoreCmsPlanOrderItem.cs                       |    9 
 CoreCms.Net.Web.WebApi/Controllers/CyinOsAPI/CySchoolController.cs          |   59 +
 CoreCms.Net.IServices/CYOAServices/ICyinOAService.cs                        |   59 +
 CoreCms.Net.Model/CyinOAModel/CoreCmsPlanOrder.cs                           |   10 
 CoreCms.Net.Services/CYOAServices/CyinOAService.cs                          | 1471 ++++++++++++++++++++++++++++++++++++++++--------
 13 files changed, 1,462 insertions(+), 300 deletions(-)

diff --git a/CoreCms.Net.Configuration/GlobalEnumVars.cs b/CoreCms.Net.Configuration/GlobalEnumVars.cs
index 42a8a21..e09fb55 100644
--- a/CoreCms.Net.Configuration/GlobalEnumVars.cs
+++ b/CoreCms.Net.Configuration/GlobalEnumVars.cs
@@ -845,7 +845,12 @@
             /// 闂ㄥ簵鑷彁
             /// </summary>
             [Description("<button type='button' class='layui-btn  layui-btn-warm layui-btn-xs'>闂ㄥ簵鑷彁</button>")]
-            SelfDelivery = 3
+            SelfDelivery = 3,
+            /// <summary>
+            /// 缁忛攢鍟嗛厤閫�
+            /// </summary>
+            [Description("<button type='button' class='layui-btn  layui-btn-warm layui-btn-xs'>缁忛攢鍟嗛厤閫�</button>")]
+            DistributorDelivery = 4
         }
 
         #endregion
diff --git a/CoreCms.Net.IServices/CYOAServices/DTO.cs b/CoreCms.Net.IServices/CYOAServices/DTO.cs
index 037f524..c4a7d5d 100644
--- a/CoreCms.Net.IServices/CYOAServices/DTO.cs
+++ b/CoreCms.Net.IServices/CYOAServices/DTO.cs
@@ -2,6 +2,7 @@
 using SqlSugar;
 using System;
 using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
 namespace CoreCms.Net.IServices.CYOAServices
 {
     /// <summary>
@@ -264,12 +265,28 @@
         /// 璁㈠崟璇存槑
         /// </summary>
         public string DeliverRemark { get; set; }
+
+        /// <summary>
+        /// 灏侀潰
+        /// </summary>
+        public string fengmian { get; set; }
+        /// <summary>
+        /// 鍐呴〉
+        /// </summary>
+        public string neiye { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓鏂拌鍗曠殑鏃跺�欏繀濉�
+        /// </summary>
+        public int? orderkeyid { get; set; }
+
     }
     /// <summary>
     ///  瀛︽牎璁㈠崟璇︽儏
     /// </summary>
     public class CoreCmsPlanOrderItemDto()
     {
+
         /// <summary>
         /// id
         /// </summary>
@@ -331,6 +348,14 @@
         /// </summary>
         public int? Number { get; set; }
 
+        /// <summary>
+        /// 搴撳瓨
+        /// </summary>
+        public int ? Inventory {  get; set; }
+
+
+
+
     }
 
     /// <summary>
@@ -389,8 +414,16 @@
         /// </summary>
         public CoreCmsPlanOrderInfoDto? PlanOrdInfo { get; set; }
 
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string Remarke { get; set; }
 
-     
+        /// <summary>
+        /// 鏄惁鍙互瀹屾垚璁㈠崟
+        /// </summary>
+        public bool? CanFinishOrder { get; set; }
+
 
 
 
@@ -398,7 +431,27 @@
 
     }
 
- 
+    /// <summary>
+    /// 鎵归噺瀹夋帓閫佽揣鍗�
+    /// </summary>
+    public class MakeMultiDeliveryOrderDto()
+    {
+        /// <summary>
+        /// 瀛︽牎璁㈠崟ID鏁扮粍
+        /// </summary>
+        public List<int> ids { get; set; }
+        /// <summary>
+        /// 閫佽揣鏃堕棿
+        /// </summary>
+        public DateTime Time { get; set; }
+        /// <summary>
+        /// 閫佽揣鍛樼數璇� 鍙告満鐢佃瘽
+        /// </summary>
+        [Required(ErrorMessage = "鎵嬫満鍙风爜涓嶈兘涓虹┖")]
+        [RegularExpression(@"^1[3-9]\d{9}$", ErrorMessage = "璇疯緭鍏ユ湁鏁堢殑鎵嬫満鍙风爜")]
+        public string DeliveryMoble { get; set; }
+
+    }
 
     /// <summary>
     /// 璁剧疆閫佽揣璇存槑
diff --git a/CoreCms.Net.IServices/CYOAServices/ICyinOAService.cs b/CoreCms.Net.IServices/CYOAServices/ICyinOAService.cs
index 2f5fb9c..e4ea9b6 100644
--- a/CoreCms.Net.IServices/CYOAServices/ICyinOAService.cs
+++ b/CoreCms.Net.IServices/CYOAServices/ICyinOAService.cs
@@ -15,14 +15,18 @@
         /// 鏄惁鏄鏍℃柟
         /// </summary>
         /// <returns></returns>
-        public  Task<bool> IsSchooler();
-       
+        public Task<bool> IsSchooler();
 
+        /// <summary>
+        ///鏄惁鏄窛鍗板鎴峰垪琛�
+        /// </summary>
+        /// <returns></returns>
+        public Task<bool> IsSchoolManger();
         /// <summary>
         /// 鏄惁鏄徃鏈�
         /// </summary>
         /// <returns></returns>
-        public  Task<bool > IsDrive();
+        public Task<bool> IsDrive();
 
         /// <summary>
         /// 鏄惁鏄厤閫佺鐞嗗憳
@@ -31,8 +35,12 @@
         public Task<bool> IsDeliverManage();
         #region 瀛︽牎閮ㄥ垎
 
-
-
+        /// <summary>
+        /// 瀛︽牎绠$悊鍛樻煡璇�
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        public Task<WebApiCallBack> GetOderListOfSchoolManager(FMPageByWhereOrder entity);
         /// <summary>
         /// 鑾峰彇鍒楄〃
         /// </summary>
@@ -57,7 +65,7 @@
         /// </summary>
         /// <param name="entity"></param>
         /// <returns></returns>
-        public  Task<WebApiCallBack> SetDeliveryDataOfschool(SetDeliveryDataDto entity);
+        public Task<WebApiCallBack> SetDeliveryDataOfschool(SetDeliveryDataDto entity);
 
         /// <summary>
         /// 鑾峰彇鐗╂祦鍦板潃浣嶇疆淇℃伅
@@ -78,7 +86,12 @@
         /// <param name="entity"></param>
         /// <returns></returns>
         public Task<WebApiCallBack> GetOderInfo(FMIntId entity);
+
+      
+
         #endregion
+
+     
 
         #region 鍙告満閮ㄥ垎
 
@@ -132,6 +145,8 @@
         /// <returns></returns>
         public Task<WebApiCallBack> SetTarcks(TracksDto entity);
 
+       
+
         #endregion
 
 
@@ -161,6 +176,20 @@
         /// <param name="entity"></param>
         /// <returns></returns>
         public Task<WebApiCallBack> SetDeliveryOderOfDeliveryManage(DeliveryOrderDto entity);
+
+        /// <summary>
+        /// 鎵归噺瀹夋帓閫佽揣
+        /// </summary>
+        /// <param name="ids"></param>
+        /// <returns></returns>
+        public Task<WebApiCallBack> MakeMultiDeliveryOderOfDeliveryManage(MakeMultiDeliveryOrderDto entitly);
+
+        /// <summary>
+        /// 鐩樼偣瀛︽牎搴撳瓨
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        public Task<WebApiCallBack> GetSchoolInventory(FMIntId entity);
         #endregion
 
 
@@ -169,5 +198,23 @@
         public Task<List<Sys_CitySite>> GetZoneListALL();
         #endregion
 
+        #region 瀛︽牎绠$悊绔�
+        /// <summary>
+        /// 澧炲姞瀛︽牎璁㈠崟
+        /// </summary>
+        /// <returns></returns>
+        public Task<WebApiCallBack> CreatSchoolOfSchoolManage(CoreCmsPlanOrderInfoDto entity);
+        /// <summary>
+        /// 澧炲姞瀛︽牎璁㈠崟
+        /// </summary>
+        /// <returns></returns>
+        public Task<WebApiCallBack> GetCreatSchoolOfSchoolManage();
+        /// <summary>
+        /// 鍒犻櫎瀛︽牎
+        /// </summary>
+        /// <returns></returns>
+        public Task<WebApiCallBack> DelSchoolOfSchoolManage(FMIntId entity);
+        #endregion
+
     }
 }
diff --git a/CoreCms.Net.Model/CyinOAModel/CoreCmsPlanOrder.cs b/CoreCms.Net.Model/CyinOAModel/CoreCmsPlanOrder.cs
index a7c5fba..f111a88 100644
--- a/CoreCms.Net.Model/CyinOAModel/CoreCmsPlanOrder.cs
+++ b/CoreCms.Net.Model/CyinOAModel/CoreCmsPlanOrder.cs
@@ -222,6 +222,16 @@
         /// </summary>
         public string DeliverRemark {  get; set; }
 
+        /// <summary>
+        /// 渚涘簲鍟咺D
+        /// </summary>
+        public string FirmId { get; set; }
+        /// <summary>
+        /// 宸插畨鎺掑徃鏈�
+        /// </summary>
+        [SugarColumn(IsIgnore = true)]
+        public string DeliveryMoble { get; set; }
+
     }
 
 
diff --git a/CoreCms.Net.Model/CyinOAModel/CoreCmsPlanOrderItem.cs b/CoreCms.Net.Model/CyinOAModel/CoreCmsPlanOrderItem.cs
index c848267..9287066 100644
--- a/CoreCms.Net.Model/CyinOAModel/CoreCmsPlanOrderItem.cs
+++ b/CoreCms.Net.Model/CyinOAModel/CoreCmsPlanOrderItem.cs
@@ -119,5 +119,14 @@
         [SugarColumn(IsIgnore = true)]
         public int? DeliveredCount { get; set; }
 
+        /// <summary>
+        /// 灏侀潰
+        /// </summary>
+        public string fengmian { get; set; }
+        /// <summary>
+        /// 鍐呴〉
+        /// </summary>
+        public string neiye { get; set; }
+
     }
 }
diff --git a/CoreCms.Net.Model/CyinOAModel/CoreDeliverOrder.cs b/CoreCms.Net.Model/CyinOAModel/CoreDeliverOrder.cs
index 350db09..f4bd015 100644
--- a/CoreCms.Net.Model/CyinOAModel/CoreDeliverOrder.cs
+++ b/CoreCms.Net.Model/CyinOAModel/CoreDeliverOrder.cs
@@ -85,7 +85,7 @@
            /// Default:
            /// Nullable:True
            /// </summary>           
-           public CoreDeliverOrderType OrderState {get;set;} = CoreDeliverOrderType.Start;
+           public CoreDeliverOrderType OrderState {get;set;} = CoreDeliverOrderType.UnStart;
 
         /// <summary>
         /// 浣滀笟鏈厤閫佽〃
@@ -117,6 +117,11 @@
         /// 缁撴潫鏃堕棿
         /// </summary>
         public DateTime? OverTime { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string Remarke { get;set;}
     }
     /// <summary>
     /// 閰嶉�佸崟鐘舵��
diff --git a/CoreCms.Net.RedisMQ/CyPlanOderMq.cs b/CoreCms.Net.RedisMQ/CyPlanOderMq.cs
index 388dc8c..a3f8806 100644
--- a/CoreCms.Net.RedisMQ/CyPlanOderMq.cs
+++ b/CoreCms.Net.RedisMQ/CyPlanOderMq.cs
@@ -90,44 +90,54 @@
                 // 鍒涘缓 HTTP POST 璇锋眰
                 var request = new HttpRequestMessage(HttpMethod.Post, url);
 
-                // 鍙戦�佽姹傚苟鑾峰彇鍝嶅簲
-                using (var response = await client.SendAsync(request))
-                {
-                    // 纭繚璇锋眰鎴愬姛
-                    response.EnsureSuccessStatusCode();
 
-                    try
+                // 鍙戦�佽姹傚苟鑾峰彇鍝嶅簲
+                try
+                {
+                    using (var response = await client.SendAsync(request))
                     {
-                        // 璇诲彇鍝嶅簲鍐呭
-                        string responseBody = await response.Content.ReadAsStringAsync();
+                        // 纭繚璇锋眰鎴愬姛
+                        response.EnsureSuccessStatusCode();
 
                         try
                         {
-                            JObject jsonObject = JObject.Parse(responseBody.ToLower());
-                          
-                            if ("True" == (string)jsonObject["status"])
+                            // 璇诲彇鍝嶅簲鍐呭
+                            string responseBody = await response.Content.ReadAsStringAsync();
+
+                            try
                             {
-                                return;
+                                JObject jsonObject = JObject.Parse(responseBody.ToLower());
+
+                                if ("True" == (string)jsonObject["status"])
+                                {
+                                    return;
+                                }
+                                else
+                                {
+                                    NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.PcWeb, "璋冪敤CYOA鍚庡彴杩斿洖閿欒", JsonConvert.SerializeObject(new { url, responseBody }));
+                                }
                             }
-                            else
+                            catch (Exception e)
                             {
+
                                 NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.PcWeb, "璋冪敤CYOA鍚庡彴杩斿洖閿欒", JsonConvert.SerializeObject(new { url, responseBody }));
                             }
+
                         }
                         catch (Exception e)
                         {
 
-                            NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.PcWeb, "璋冪敤CYOA鍚庡彴杩斿洖閿欒", JsonConvert.SerializeObject(new { url, responseBody }));
+                            NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.PcWeb, "璋冪敤CYOA鍚庡彴閾炬帴閿欒", JsonConvert.SerializeObject(new { url, e.Message, e.StackTrace }));
                         }
-                      
-                    }
-                    catch (Exception e)
-                    {
 
-                        NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.PcWeb, "璋冪敤CYOA鍚庡彴閾炬帴閿欒", JsonConvert.SerializeObject(new { url, e.Message, e.StackTrace }));
                     }
-                  
                 }
+                catch (Exception e)
+                {
+
+                    NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.PcWeb, "璋冪敤CYOA鍚庡彴閾炬帴閿欒", JsonConvert.SerializeObject(new { url, e.Message, e.StackTrace }));
+                }
+                
             }
         }
     }
diff --git a/CoreCms.Net.RedisMQ/WeChatPayShippingSubscribe.cs b/CoreCms.Net.RedisMQ/WeChatPayShippingSubscribe.cs
index ce0a1e9..3e834a2 100644
--- a/CoreCms.Net.RedisMQ/WeChatPayShippingSubscribe.cs
+++ b/CoreCms.Net.RedisMQ/WeChatPayShippingSubscribe.cs
@@ -204,6 +204,7 @@
                                 (int)GlobalEnumVars.OrderReceiptType.SelfDelivery => (int)GlobalEnumVars.WeChatShippingLogisticsType.鐢ㄦ埛鑷彁,
                                 (int)GlobalEnumVars.OrderReceiptType.IntraCityService => (int)GlobalEnumVars.WeChatShippingLogisticsType.鍚屽煄閰嶉��,
                                 (int)GlobalEnumVars.OrderReceiptType.Logistics => (int)GlobalEnumVars.WeChatShippingLogisticsType.鐗╂祦閰嶉��,
+                                (int)GlobalEnumVars.OrderReceiptType.DistributorDelivery=> (int)GlobalEnumVars.WeChatShippingLogisticsType.鍚屽煄閰嶉��,//缁忛攢鍟嗛厤閫佽涓哄悓鍩�
                                 _ => request.LogisticsType
                             };
 
diff --git a/CoreCms.Net.Services/CYOAServices/CyinOAService.cs b/CoreCms.Net.Services/CYOAServices/CyinOAService.cs
index 09f18ef..bff2835 100644
--- a/CoreCms.Net.Services/CYOAServices/CyinOAService.cs
+++ b/CoreCms.Net.Services/CYOAServices/CyinOAService.cs
@@ -12,8 +12,10 @@
 using EC_SeckillInfo;
 using EnumsNET;
 using Essensoft.Paylink.Alipay.Domain;
+using Microsoft.OpenApi.Validations;
 using Nest;
 using Newtonsoft.Json;
+using NPOI.HPSF;
 using NPOI.SS.Formula.Functions;
 using SqlSugar;
 using SqlSugar.Extensions;
@@ -23,13 +25,16 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using System.Xml.Linq;
 using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinExpressDeliveryOpenMessageGetDeliveryListResponse.Types;
 using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinGetCurrentSelfMenuInfoResponse.Types;
 using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinQrcodeCreateRequest.Types.Action.Types;
 using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinTagsMembersGetBlackListResponse.Types;
 using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinUserInfoBatchGetRequest.Types;
+using static SKIT.FlurlHttpClient.Wechat.Api.Models.ComponentTCBBatchCreateContainerServiceVersionRequest.Types;
 using static SKIT.FlurlHttpClient.Wechat.Api.Models.ScanProductAddV2Request.Types.Product.Types;
 using static SKIT.FlurlHttpClient.Wechat.Api.Models.SemanticSemproxySearchResponse.Types;
+using static SKIT.FlurlHttpClient.Wechat.Api.Models.WxaSecOrderUploadCombinedShippingInfoRequest.Types.SubOrder.Types;
 using static SKIT.FlurlHttpClient.Wechat.Api.Models.WxaServiceMarketServiceGetServiceBuyerListResponse.Types.Buyer.Types;
 
 namespace CoreCms.Net.Services.CYOAServices
@@ -37,18 +42,22 @@
     /// <summary>
     /// 宸濆嵃鐩稿叧鏈嶅姟
     /// </summary>
-    public class CyinOAService: ICyinOAService
+    public class CyinOAService : ICyinOAService
     {
         /// <summary>
         /// 鏄惁鏄徃鏈簁ey
         /// </summary>
         const string IsCYDbDbKey = "IsCYDbDbKey:";
-
+        /// <summary>
+        /// 鍙告満璁㈠崟寮�濮嬪悗閿佸崟key
+        /// </summary>
+        const string LockFilshDeliverOderKey = "LockFilshDeliverOderKey:";
+        const string LockFilshDeliverOderString = "GOODLuck:";
         /// <summary>
         /// 鏄惁鎷ユ湁宸濆嵃鏁欒偛灞�璁㈠崟绠$悊
         /// </summary>
         const string IsSchoolID = "IsShoodsID:";
-
+        const string IsSchoolMangerID = "IsSchoolManger:";
         const string IsDeliverManageKey = "IsDeliverManageKey:";
         private readonly ISqlSugarClient _CyDbClient;
         private readonly IUnitOfWork _UnitOfWork;
@@ -57,29 +66,34 @@
         private readonly IRedisOperationRepository _redisOperationRepository;
         private readonly string _UserMoble;
         private string? _DriveName { get; set; }
-        
-       
-        public CyinOAService( IUnitOfWork unitOfWork,IHttpContextUser contextUser,ICoreCmsUserServices coreCmsUserServices,
-            IRedisOperationRepository redisOperationRepository,ICoreCmsUserServices coreCmsUser) {         
-           
+
+        /// <summary>
+        /// 瀛︽牎绠$悊鍛業D,鏈夊垯鏄紝娌℃湁鍒欎笉鏄�
+        /// </summary>
+        private Guid? _SchoolManagerKeyId { get; set; } = null;
+
+        public CyinOAService(IUnitOfWork unitOfWork, IHttpContextUser contextUser, ICoreCmsUserServices coreCmsUserServices,
+            IRedisOperationRepository redisOperationRepository, ICoreCmsUserServices coreCmsUser)
+        {
+
             _UnitOfWork = unitOfWork;
             _CyDbClient = unitOfWork.GetDbClient().GetConnection(AppSettingsConstVars.CYDbDbID);
             _User = contextUser;
             _coreCmsUserServices = coreCmsUserServices;
             _redisOperationRepository = redisOperationRepository;
-            _coreCmsUserServices= coreCmsUserServices;
+            _coreCmsUserServices = coreCmsUserServices;
 
-            _UserMoble = _coreCmsUserServices.QueryById(_User.ID).mobile??"娌℃湁鎵惧埌鐢ㄦ埛";
+            _UserMoble = _coreCmsUserServices.QueryById(_User.ID).mobile ?? "娌℃湁鎵惧埌鐢ㄦ埛";
         }
 
-       
+
         /// <summary>
         /// 鏄惁鏄鏍℃柟
         /// </summary>
         /// <returns></returns>
-        public async Task<bool > IsSchooler()
+        public async Task<bool> IsSchooler()
         {
-           
+
             if (_User?.ID == null)
             {
 
@@ -87,7 +101,7 @@
                 throw new Exception("鐧诲綍淇℃伅閿欒锛岃閲嶆柊鐧诲綍");
 
             }
-         
+
 
             var user = _coreCmsUserServices.QueryById(_User.ID);
             if (user == null)
@@ -99,12 +113,12 @@
             if (string.IsNullOrEmpty(isdrive))
             {
                 //娌℃湁閿��
-           
 
 
 
 
-                var data = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(x => x.userMobile == user.mobile).FirstAsync();
+
+                var data = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(x => x.shipMobile == user.mobile&&x.isdelete==false).FirstAsync();
 
                 if (data != null)
                 {
@@ -127,7 +141,85 @@
             {
                 return false;
             }
-           
+
+        }
+        public async Task<bool> IsSchoolManger()
+        {
+
+            if (_User?.ID == null)
+            {
+
+
+                throw new Exception("鐧诲綍淇℃伅閿欒锛岃閲嶆柊鐧诲綍");
+
+            }
+
+
+            var user = _coreCmsUserServices.QueryById(_User.ID);
+            if (user == null)
+            {
+
+                throw new Exception("鐧诲綍淇℃伅閿欒锛岃閲嶆柊鐧诲綍");
+            }
+            var isdrive = await _redisOperationRepository.Get(IsSchoolMangerID + user.mobile);
+
+            if (string.IsNullOrEmpty(isdrive))
+            {
+                //娌℃湁閿��
+
+
+
+
+
+                var data = await _CyDbClient.Queryable<OA_CustomerCommunications>().Where(x => x.CompanyPhone == user.mobile).FirstAsync();
+
+                if (data != null)
+                {
+                    _SchoolManagerKeyId = data.Keyid;
+                    isdrive = _SchoolManagerKeyId.ToString();
+
+                }
+                else
+                    isdrive = "false";
+                await _redisOperationRepository.StringSetAsync(IsSchoolMangerID + user.mobile, isdrive, TimeSpan.FromMinutes(1));
+            }
+            else
+            {
+                Guid keyid;
+                 if( Guid.TryParse(isdrive,out keyid))
+                {
+                    _SchoolManagerKeyId = keyid;
+                }
+                 else
+                {
+
+                    var data = await _CyDbClient.Queryable<OA_CustomerCommunications>().Where(x => x.CompanyPhone == user.mobile).FirstAsync();
+
+                    if (data != null)
+                    {
+                        _SchoolManagerKeyId = data.Keyid;
+                        isdrive = _SchoolManagerKeyId.ToString();
+
+                    }
+                    else
+                        isdrive = "false";
+                    await _redisOperationRepository.StringSetAsync(IsSchoolMangerID + user.mobile, isdrive, TimeSpan.FromMinutes(1));
+                }
+            }
+
+            //db.DbFirst.IsCreateAttribute().CreateClassFile("c:\\Demo\\5", "EC_SeckillInfo"); ;
+            //var data= db.Queryable<EC_PrizeInfo>().ToList();
+            //ret.data= data;
+            if (isdrive != "false")
+            {
+               
+                return true;
+
+            }
+            else
+            {
+                return false;
+            }
         }
         /// <summary>
         /// 鏄惁鏄�佽揣绠$悊鍛�
@@ -182,11 +274,12 @@
                 return false;
             }
         }
+
         /// <summary>
         /// 鏄惁鏄徃鏈�
         /// </summary>
         /// <returns></returns>
-        public async Task<bool > IsDrive()
+        public async Task<bool> IsDrive()
         {
             var ret = new WebApiCallBack();
             if (_User?.ID == null)
@@ -204,13 +297,13 @@
             var isdrive = await _redisOperationRepository.Get(IsCYDbDbKey + user.mobile);
             if (string.IsNullOrEmpty(isdrive))
             {
-             
+
 
                 var FirmIds = AppSettingsConstVars.CyOsFirmIds;
                 var firmidlist = FirmIds?.Split(",")?.Select(x => new Guid(x));
 
 
-                var data = await _CyDbClient.Queryable<OA_Staff>().Where(x => x.Status == "鍦ㄨ亴" && x.MobieNum == user.mobile && x.BF_IsDriver==true).FirstAsync();
+                var data = await _CyDbClient.Queryable<OA_Staff>().Where(x => x.Status == "鍦ㄨ亴" && x.MobieNum == user.mobile && x.BF_IsDriver == true).FirstAsync();
 
                 if (data != null)
                 {
@@ -219,7 +312,7 @@
                 }
                 else
                 {
-                    _DriveName =null;
+                    _DriveName = null;
                     isdrive = "false";
                 }
 
@@ -231,7 +324,7 @@
             //ret.data= data;
             if (isdrive == "true")
             {
-           
+
 
                 return true;
 
@@ -240,39 +333,46 @@
             {
                 return false;
             }
-            
+
 
         }
         #region 瀛︽牎绔垪琛�
-        /// <summary>
-        /// 鑾峰彇瀛︽牎璐﹀彿绔殑School
-        /// </summary>
-        /// <param name="entity"></param>
-        /// <returns></returns>
-        public async Task<WebApiCallBack> GetOderListOfSchool(FMPageByWhereOrder entity)
+
+        public async Task<WebApiCallBack> GetOderListOfSchoolManager(FMPageByWhereOrder entity)
         {
 
-            var rt = await IsSchooler();
+            var rt = await IsSchoolManger();
+            //var rt2 = await IsSchooler();
             if (rt == false)
             {
-                throw new Exception("娌℃湁鏉冮檺璁块棶");
+
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "浣犳病鏈夋潈闄愭搷浣�"
+                };
             }
             var user = await _coreCmsUserServices.QueryByIdAsync(_User.ID);
             if (user == null)
             {
-                throw new Exception("娌℃湁鏉冮檺璁块棶");
+
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "浣犳病鏈夋潈闄愭搷浣�"
+                };
             }
 
             var where = PredicateBuilder.True<CoreCmsPlanOrder>();
-
+            where = where.And(p => p.isdelete == false);
             if (!string.IsNullOrWhiteSpace(entity.where))
             {
                 var obj = JsonConvert.DeserializeAnonymousType(entity.where, new
                 {
                     quxianId = "",
                     sheng = "",
-                    shi="",
-                    quxian="",
+                    shi = "",
+                    quxian = "",
                     pianqu = "",
                     shipAddress = "",
                     DeliverState = ""
@@ -280,10 +380,11 @@
                 });
                 if (!string.IsNullOrWhiteSpace(obj.sheng))
                 {
-                 
 
-                        where = where.And(p => p.sheng == obj.sheng);
-                    
+
+                    where = where.And(p => p.sheng == obj.sheng);
+
+
                 }
                 if (!string.IsNullOrWhiteSpace(obj.shi))
                 {
@@ -291,12 +392,14 @@
 
                     where = where.And(p => p.shi == obj.shi);
 
+
                 }
                 if (!string.IsNullOrWhiteSpace(obj.quxian))
                 {
 
 
                     where = where.And(p => p.quxian == obj.quxian);
+
 
                 }
 
@@ -307,6 +410,7 @@
                     {
 
                         where = where.And(p => p.quxianId == quxianId);
+
                     }
                 }
 
@@ -315,7 +419,8 @@
                     var pianqu = obj.pianqu;
 
 
-                    where = where.And(p => pianqu.Contains(p.pianqu));
+                    where = where.And(p => p.pianqu.Contains(pianqu));
+
 
                 }
                 if (!string.IsNullOrWhiteSpace(obj.shipAddress))
@@ -323,7 +428,8 @@
                     var shipAddress = obj.shipAddress;
 
 
-                    where = where.And(p => shipAddress.Contains(p.shipAddress));
+                    where = where.And(p => p.shipAddress.Contains(shipAddress));
+
                 }
 
                 if (!string.IsNullOrWhiteSpace(obj.DeliverState))
@@ -332,23 +438,189 @@
                     if (Enum.TryParse(obj.DeliverState, out DeliverStateType result))
                     {
                         where = where.And(p => p.DeliverState == result);
+
                     }
 
 
 
                 }
 
-               
+
 
 
 
 
             }
-            where = where.And(p => user.mobile == p.userMobile);
-            where = where.And(n => n.isdelete == false);
+            //where = where.And(p => user.mobile == p.userMobile);
+            //whereManger = whereManger.And(p => p.DeliverState == result);
+            where = where.And(p => p.isdelete == false);
             RefAsync<int> totalNumbe = 0;
+            //var listSchool = _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(where).OrderBy(p => p.quxianId).Select(p => new CoreCmsPlanOrderListDto(), true);
+            //var listSchoolManger = _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(where).OrderBy(p => p.quxianId).Select(p => new CoreCmsPlanOrderListDto(), true);
+            var list = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(where).
+                LeftJoin<EC_OrderBasic>((p, or) => p.orderkeyid == or.Keyid)
+                .LeftJoin<OA_CustomerCommunications>((p, or, cus) => or.BuyerId == cus.Keyid)
+                .Where((p, or, cus) => cus.Keyid == _SchoolManagerKeyId)
+                .OrderBy((p, or, cus) => p.quxianId).Select((p, or, cus) => p, true).MergeTable().Select(p => new CoreCmsPlanOrderListDto(), true).ToPageListAsync(entity.page, entity.limit, totalNumbe);
 
-            var list = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(where).OrderBy(p => p.quxianId).Select(p => new CoreCmsPlanOrderListDto(), true).ToPageListAsync(entity.page, entity.limit, totalNumbe);
+            //.QueryPageByDTOAsync(where, entity.page, entity.limit, true);
+            return new WebApiCallBack()
+            {
+                status = true,
+                data = new
+                {
+                    list,
+                    entity.page,
+                    totalNumbe,
+                    entity.limit,
+                    entity.where,
+
+                }
+
+            };
+        }
+
+        /// <summary>
+        /// 鑾峰彇瀛︽牎璐﹀彿绔殑School
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        public async Task<WebApiCallBack> GetOderListOfSchool(FMPageByWhereOrder entity)
+        {
+
+            var rt = await IsSchooler();
+            var rt2 = await IsSchoolManger();
+            if (rt == false && rt2 == false)
+            {
+
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "浣犳病鏈夋潈闄愭搷浣�"
+                };
+            }
+            var user = await _coreCmsUserServices.QueryByIdAsync(_User.ID);
+            if (user == null)
+            {
+
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "浣犳病鏈夋潈闄愭搷浣�"
+                };
+            }
+
+            var where = PredicateBuilder.True<CoreCmsPlanOrder>();
+
+            where= where.And(p => p.isdelete == false);
+            if (!string.IsNullOrWhiteSpace(entity.where))
+            {
+               
+                var obj = JsonConvert.DeserializeAnonymousType(entity.where, new
+                {
+                    quxianId = "",
+                    sheng = "",
+                    shi = "",
+                    quxian = "",
+                    pianqu = "",
+                    shipAddress = "",
+                    DeliverState = ""
+
+                });
+                if (!string.IsNullOrWhiteSpace(obj.sheng))
+                {
+
+
+                    where = where.And(p => p.sheng == obj.sheng);
+
+
+                }
+                if (!string.IsNullOrWhiteSpace(obj.shi))
+                {
+
+
+                    where = where.And(p => p.shi == obj.shi);
+
+
+                }
+                if (!string.IsNullOrWhiteSpace(obj.quxian))
+                {
+
+
+                    where = where.And(p => p.quxian == obj.quxian);
+
+
+                }
+
+                if (!string.IsNullOrWhiteSpace(obj.quxianId))
+                {
+                    var quxianId = obj.quxianId.ObjToInt(0);
+                    if (quxianId >= 0)
+                    {
+
+                        where = where.And(p => p.quxianId == quxianId);
+
+                    }
+                }
+
+                if (!string.IsNullOrWhiteSpace(obj.pianqu))
+                {
+                    var pianqu = obj.pianqu;
+
+
+                    where = where.And(p => p.pianqu.Contains(pianqu));
+
+
+                }
+                if (!string.IsNullOrWhiteSpace(obj.shipAddress))
+                {
+                    var shipAddress = obj.shipAddress;
+
+
+                    where = where.And(p => p.shipAddress.Contains(shipAddress));
+
+                }
+
+                if (!string.IsNullOrWhiteSpace(obj.DeliverState))
+                {
+
+                    if (Enum.TryParse(obj.DeliverState, out DeliverStateType result))
+                    {
+                        where = where.And(p => p.DeliverState == result);
+
+                    }
+
+
+
+                }
+
+
+
+
+
+
+            }
+            //where = where.And(p => user.mobile == p.userMobile);
+            //whereManger = whereManger.And(p => p.DeliverState == result);
+            where = where.And(p => p.isdelete == false);
+            RefAsync<int> totalNumbe = 0;
+            var listSchool = _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(where).Where(p => user.mobile == p.shipMobile).Select(p => new CoreCmsPlanOrderListDto(), true);
+            var listmager = _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(where).
+                 LeftJoin<EC_OrderBasic>((p, or) => p.orderkeyid == or.Keyid)
+                 .LeftJoin<OA_CustomerCommunications>((p, or, cus) => or.BuyerId == cus.Keyid)
+                 .Where((p, or, cus) => cus.Keyid == _SchoolManagerKeyId)
+                 .Select((p, or, cus) => p, true).Select(p => new CoreCmsPlanOrderListDto(), true);
+
+            List<CoreCmsPlanOrderListDto> list = new List<CoreCmsPlanOrderListDto>();
+            if (rt && rt2)
+                list = await _CyDbClient.Union(listSchool, listmager).OrderBy(p => p.quxianId).ToPageListAsync(entity.page, entity.limit, totalNumbe);
+            else
+                if (rt)
+                list = await listSchool.OrderBy(p => p.quxianId).ToPageListAsync(entity.page, entity.limit, totalNumbe);
+            else if (rt2)
+                list = await listmager.OrderBy(p => p.quxianId).ToPageListAsync(entity.page, entity.limit, totalNumbe);
+
+            //var list = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(where).OrderBy(p => p.quxianId).Select(p => new CoreCmsPlanOrderListDto(), true).ToPageListAsync(entity.page, entity.limit, totalNumbe);
 
             //.QueryPageByDTOAsync(where, entity.page, entity.limit, true);
             return new WebApiCallBack()
@@ -379,20 +651,36 @@
         {
             var rt = await IsSchooler();
             var rtb = await IsDrive();
+
+            var rt2 = await IsSchoolManger();
+            if (rt == false && rt2 == false && rt2 == false)
+            {
+
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "浣犳病鏈夋潈闄愭搷浣�"
+                };
+            }
             if (rt == false && rtb == false)
             {
-                throw new Exception("娌℃湁鏉冮檺璁块棶");
+
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "浣犳病鏈夋潈闄愭搷浣�"
+                };
             }
 
 
-            var list = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Includes(x=>x.items)
-                .Includes(x=>x.DeliverOrderItems,o=>o.items)
+            var list = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Includes(x => x.items)
+                .Includes(x => x.DeliverOrderItems, o => o.items)
                 .Where(x => x.id == entity.id)
-          .Mapper(x=>
+          .Mapper(x =>
             {
 
-              
-                x.deliverOrder = x.DeliverOrderItems.OrderByDescending(de=>de.CreateTime).FirstOrDefault();
+               
+                x.deliverOrder = x.DeliverOrderItems.OrderByDescending(de => de.CreateTime).FirstOrDefault();
             }).FirstAsync();
 
             var countList = await CountLessCount(list.DeliverOrderItems);
@@ -415,25 +703,31 @@
                     status = true,
                     data = list,
                 };
-        }     
+        }
 
-     
+
 
         public async Task<WebApiCallBack> SetOderOfSchool(CoreCmsPlanOrderInfoDto planOrderInfoDto)
         {
-
             var rt = await IsSchooler();
-            if (rt == false)
+            var rt2 = await IsSchoolManger();
+            if (rt == false && rt2 == false)
             {
-               
                 return new WebApiCallBack
                 {
                     status = false,
                     msg = "浣犳病鏈夋潈闄愭搷浣�"
                 };
             }
+            if (string.IsNullOrEmpty(planOrderInfoDto.shipMobile) || !planOrderInfoDto.shipMobile.IsPhoneNumberValid())
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg="鑱旂郴浜虹數璇濆繀椤绘槸鎵嬫満鍙风爜"
+                };
+
             var oldOder = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Includes(x => x.items).Where(x => x.id == planOrderInfoDto.id).FirstAsync();
-            if(oldOder.status==2)
+            if (oldOder.status == 2)
             {
                 return new WebApiCallBack
                 {
@@ -441,6 +735,13 @@
                     msg = "宸茬粡閿佸崟"
                 };
             }
+            if (oldOder.isdelete == true)
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "璁㈠崟宸插垹闄�"
+                };
+
             decimal auturo = 0;
             foreach (var item in oldOder.items)
             {
@@ -451,6 +752,7 @@
 
             }
             oldOder.shipMobile = planOrderInfoDto.shipMobile;
+            oldOder.userMobile = planOrderInfoDto.shipMobile;
             oldOder.shipName = planOrderInfoDto.shipName;
             oldOder.orderAmount = auturo;
 
@@ -461,11 +763,11 @@
                 await _CyDbClient.Updateable(oldOder.items).ExecuteCommandAsync();
                 await _CyDbClient.AsTenant().CommitTranAsync();
             }
-            catch (Exception )
+            catch (Exception)
             {
 
                 await _CyDbClient.AsTenant().RollbackTranAsync();
-                throw ;
+                throw;
             }
             //await _CyDbClient.UpdateNav(oldOder).Include(x => x.items,new UpdateNavOptions
             //{
@@ -473,7 +775,7 @@
             //}).ExecuteCommandAsync();
 
 
-            await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.CyDeliverOAjisuanjine,oldOder.orderkeyid?.ToString());
+            await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.CyDeliverOAjisuanjine, oldOder.orderkeyid?.ToString());
             return new WebApiCallBack()
             {
                 status = true,
@@ -485,28 +787,33 @@
         {
 
             var rt = await IsSchooler();
-            if (rt == false)
+            var rt2 = await IsSchoolManger();
+            if (rt == false && rt2 == false)
             {
-                throw new Exception("娌℃湁鏉冮檺璁块棶");
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "浣犳病鏈夋潈闄愭搷浣�"
+                };
             }
             var data = _CyDbClient.Queryable<CoreDeliverOrder>()
-                .Where(x=>x.id==new Guid(entity.id))
+                .Where(x => x.id == new Guid(entity.id))
                 .Includes(x => x.items)
                 .Includes(x => x.tracks)
-                .Includes(x=>x.Oreder,o=>o.items)
+                .Includes(x => x.Oreder, o => o.items)
                  .Includes(x => x.Oreder, o => o.DeliverOrderItems)
                 .Select(x => new CoreDeliverOrder()
-            {
-                DeliveryMoble = "",
+                {
+                    DeliveryMoble = "",
 
-                 
 
-            }, true).Mapper(x=>
-            {
-               
-            }).FirstAsync();
 
-         
+                }, true).Mapper(x =>
+                {
+
+                }).FirstAsync();
+
+
 
             return new WebApiCallBack()
             {
@@ -515,27 +822,28 @@
             };
         }
 
-        public async Task <WebApiCallBack> SetDeliveryDataOfschool(SetDeliveryDataDto entity)
+        public async Task<WebApiCallBack> SetDeliveryDataOfschool(SetDeliveryDataDto entity)
         {
-            if(await IsSchooler()==false)
+            var rt = await IsSchooler();
+            var rt2 = await IsSchoolManger();
+            if (rt == false && rt2 == false)
             {
-                return new WebApiCallBack()
+                return new WebApiCallBack
                 {
-                    status = true,
-                    msg = "鏃犳潈闄�"
+                    status = false,
+                    msg = "浣犳病鏈夋潈闄愭搷浣�"
                 };
-
             }
 
 
-          var olddata=  await _CyDbClient.Queryable<CoreCmsPlanOrder>()
-                .Includes(x=>x.items)
-                .Includes(x=>x.DeliverOrderItems,de=>de.items)
-                . Where(x => x.id == entity.PlanOrderId)
-                .Mapper(x=>x.deliverOrder= x.DeliverOrderItems.Where(y=>y.OrderState== CoreDeliverOrderType.UnStart).FirstOrDefault())
+            var olddata = await _CyDbClient.Queryable<CoreCmsPlanOrder>()
+                .Includes(x => x.items)
+                .Includes(x => x.DeliverOrderItems, de => de.items)
+                .Where(x => x.id == entity.PlanOrderId)
+                .Mapper(x => x.deliverOrder = x.DeliverOrderItems.Where(y => y.OrderState == CoreDeliverOrderType.UnStart).FirstOrDefault())
                 .FirstAsync();
 
-            if(olddata==null)
+            if (olddata == null)
             {
                 return new WebApiCallBack()
                 {
@@ -543,7 +851,7 @@
                     msg = "娌℃湁鎵惧埌鐩稿叧璁㈠崟"
                 };
             }
-            if(olddata.DeliverState == DeliverStateType.CompletedDelivery)
+            if (olddata.DeliverState == DeliverStateType.CompletedDelivery)
             {
                 return new WebApiCallBack()
                 {
@@ -552,19 +860,19 @@
                 };
             }
             var user = await _coreCmsUserServices.QueryByIdAsync(_User.ID);
-          await  _CyDbClient.AsTenant().BeginTranAsync();
+            await _CyDbClient.AsTenant().BeginTranAsync();
             try
             {
                 if (entity.MakeTime != null)
                 {
-                    if(olddata.deliverOrder==null)
+                    if (olddata.deliverOrder == null)
                     {
                         //娌℃湁閰嶉�佸崟 鏂板缓
                         olddata.deliverOrder = await CreatDeliverItem(olddata);
-                        olddata.deliverOrder.MakeTime=entity.MakeTime;
-                  
-                        await  _CyDbClient.InsertNav(olddata.deliverOrder).Include(x => x.items).ExecuteCommandAsync();
-                       
+                        olddata.deliverOrder.MakeTime = entity.MakeTime;
+
+                        await _CyDbClient.InsertNav(olddata.deliverOrder).Include(x => x.items).ExecuteCommandAsync();
+
                     }
                     else
                     {
@@ -582,15 +890,15 @@
 
                 {
                     olddata.DeliverRemark = entity.DeliverRemark;
-                    olddata.upDataBy=_UserMoble;
-                    olddata.upDataTime= DateTime.Now;
+                    olddata.upDataBy = _UserMoble;
+                    olddata.upDataTime = DateTime.Now;
                     await _CyDbClient.Updateable(olddata).ExecuteCommandAsync();
                 }
                 await _CyDbClient.AsTenant().CommitTranAsync();
                 return new WebApiCallBack()
                 {
                     status = true,
-                   
+
                 };
             }
             catch (Exception)
@@ -598,17 +906,23 @@
                 await _CyDbClient.AsTenant().RollbackTranAsync();
                 throw;
             }
-    
-          
+
+
         }
         public async Task<WebApiCallBack> GetDeliveryTracksOfSchool(FMStringId entity)
         {
             var rt = await IsSchooler();
-            if (rt == false)
+            var rt2 = await IsSchoolManger();
+            if (rt == false && rt2 == false)
             {
-                throw new Exception("娌℃湁鏉冮檺璁块棶");
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "浣犳病鏈夋潈闄愭搷浣�"
+                };
             }
-            var data = await _CyDbClient.Queryable<CoreDeliveryOrderTracks>().Where(x => x.OrderID == new Guid(entity.id)).ToListAsync();
+            var data = await _CyDbClient.Queryable<CoreDeliveryOrderTracks>().Where(x => x.OrderID == new Guid(entity.id)).OrderByDescending(x=>x.CreateTime)
+                .ToListAsync();
 
             return new WebApiCallBack()
             {
@@ -617,11 +931,21 @@
             };
         }
 
-    
+
 
         public async Task<WebApiCallBack> GetDriverPhoneOfSchool(FMStringId entity)
         {
 
+            var rt = await IsSchooler();
+            var rt2 = await IsSchoolManger();
+            if (rt == false && rt2 == false)
+            {
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "浣犳病鏈夋潈闄愭搷浣�"
+                };
+            }
             if (!Guid.TryParse(entity.id, out Guid guid))
             {
                 return new WebApiCallBack
@@ -736,18 +1060,20 @@
             }
             where = where.And(n => n.isdelete == false);
             RefAsync<int> totalNumbe = 0;
-            var dlist = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(n => n.DeliverState != DeliverStateType.CompletedDelivery)
+            var dlist = await _CyDbClient.Queryable<CoreCmsPlanOrder>()
+                  //.Where(n => n.DeliverState != DeliverStateType.CompletedDelivery)
+                  //.Where(n => n.isdelete ==false)
                   .Select((n) => new CoreCmsPlanOrder
                   {
 
                       IngDeliverOrderID = SqlFunc.Subqueryable<CoreDeliverOrder>().Where(x => x.OrderId == n.id
                     && x.OrderState != CoreDeliverOrderType.Faile
                     && x.OrderState != CoreDeliverOrderType.Completed
-                    && (x.DeliveryMoble != "" || x.DeliveryMoble != null)).OrderByDesc(x => x.CreateTime).Select(x=>x.id),
+                    && (x.DeliveryMoble != "" && x.DeliveryMoble != null)).OrderByDesc(x => x.CreateTime).Select(x => x.id),
                       deliverOrder = SqlFunc.Subqueryable<CoreDeliverOrder>().Where(x => x.OrderId == n.id
                     && x.OrderState != CoreDeliverOrderType.Faile
                     && x.OrderState != CoreDeliverOrderType.Completed
-                    && (x.DeliveryMoble != "" || x.DeliveryMoble != null)).OrderByDesc(x => x.CreateTime).First()
+                    && (x.DeliveryMoble != "" && x.DeliveryMoble != null)).OrderByDesc(x => x.CreateTime).First()
                   },
 
                   true
@@ -759,17 +1085,18 @@
                 MakeTime = x.deliverOrder?.MakeTime,
                 shipAddress = x.shipAddress,
                 isScheduled = x.deliverOrder != null ? "1" : "0",
+                x.DeliverState
 
             }).ToList();
             return new WebApiCallBack
             {
                 status = true,
-                data= new
+                data = new
                 {
                     totalNumbe,
                     data,
                 }
-           
+
             };
         }
         public async Task<WebApiCallBack> GetSendDeliveryOderListOfDeliveryManage(FMPageByWhereOrder entity)
@@ -793,9 +1120,14 @@
                     sheng = "",
                     shi = "",
                     quxian = "",
+                    DeliveryMoble="",
 
 
                 });
+                if(!string.IsNullOrEmpty(obj.DeliveryMoble))
+                {
+                    where = where.And(n => n.DeliveryMoble == obj.DeliveryMoble);
+                }
                 if (!string.IsNullOrWhiteSpace(obj.sheng))
                 {
 
@@ -857,28 +1189,39 @@
             }
             where = where.And(n => n.isdelete == false);
             RefAsync<int> totalNumbe = 0;
-            var dlist = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(n => n.DeliverState != DeliverStateType.CompletedDelivery)
+            var dlist = await _CyDbClient.Queryable<CoreCmsPlanOrder>()
+                  //.Where(n => n.DeliverState != DeliverStateType.CompletedDelivery)
                   .Select((n) => new CoreCmsPlanOrder
                   {
-                     
+
                       deliverOrder = SqlFunc.Subqueryable<CoreDeliverOrder>().Where(x => x.OrderId == n.id
                     && x.OrderState != CoreDeliverOrderType.Faile
                     && x.OrderState != CoreDeliverOrderType.Completed
                     && (x.DeliveryMoble != "" || x.DeliveryMoble != null)).OrderByDesc(x => x.CreateTime).First(),
-                      MakeTime= SqlFunc.Subqueryable<CoreDeliverOrder>().Where(x => x.OrderId == n.id
+                      MakeTime = SqlFunc.Subqueryable<CoreDeliverOrder>().Where(x => x.OrderId == n.id
                     && x.OrderState != CoreDeliverOrderType.Faile
                     && x.OrderState != CoreDeliverOrderType.Completed
-                    && (x.DeliveryMoble != "" || x.DeliveryMoble != null)).OrderByDesc(x => x.CreateTime).Select(x=>x.MakeTime)
+                    && (x.DeliveryMoble != "" || x.DeliveryMoble != null)).OrderByDesc(x => x.CreateTime).Select(x => x.MakeTime),
+
+                      DeliveryMoble = SqlFunc.Subqueryable<CoreDeliverOrder>().Where(x => x.OrderId == n.id
+                    && x.OrderState != CoreDeliverOrderType.Faile
+                    && x.OrderState != CoreDeliverOrderType.Completed
+                    && (x.DeliveryMoble != "" || x.DeliveryMoble != null)).OrderByDesc(x => x.CreateTime).Select(x => x.DeliveryMoble)
                   }
 
-                  ,true
+                  , true
                   ).MergeTable().Where(where).ToPageListAsync(entity.page, entity.limit, totalNumbe);
 
+            var deliveryList = await _CyDbClient.Queryable<OA_Staff>().Where(x => x.Status == "鍦ㄨ亴" && x.BF_IsDriver == true).Select(x => new
+            {
+                deliveryMoble = x.MobieNum,
+                name = x.Name,
 
+            }).ToListAsync();
             return new WebApiCallBack
             {
                 status = true,
-                data =  new
+                data = new
                 {
                     totalNumbe,
                     data = dlist.Select(x => new
@@ -887,10 +1230,15 @@
                         x.shipAddress,
                         x.quxian,
                         x.pianqu,
-                        x.deliverOrder
+                        x.deliverOrder,
+                        x.DeliverState,
+                        x.DeliveryMoble
 
 
-                    }).ToList()
+                    }).ToList(),
+
+                    deliveryList
+
                 }
             };
         }
@@ -903,15 +1251,15 @@
                     msg = "浣犳病鏈夋潈闄愭搷浣�"
                 };
 
-         var data= await   _CyDbClient.Queryable<CoreCmsPlanOrder>().Includes(x=>x.items).Includes(x=>x.DeliverOrderItems,itm=>itm.items)
-                .Where(x=>x.isdelete==false&&x.id==entity.id)
-                .FirstAsync();
-            if(data==null)
+            var data = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Includes(x => x.items).Includes(x => x.DeliverOrderItems, itm => itm.items)
+                   .Where(x => x.isdelete == false && x.id == entity.id)
+                   .FirstAsync();
+            if (data == null)
             {
                 return new WebApiCallBack
                 {
                     status = false,
-                    msg = "璁㈠崟宸插け鏁堟垨鑰呬笉鍙洿鏀�"
+                    msg = "璁㈠崟宸插畬鎴�"
                 };
             };
 
@@ -936,17 +1284,17 @@
                 })
                 .ToList();
             ///鏈夊苟涓旀湭鎵ц閰嶉�佺殑璁㈠崟
-           var UndoDeliver = DeliverOrderlist.Where(x => x.OrderState == CoreDeliverOrderType.UnStart).FirstOrDefault();
+            var UndoDeliver = data.DeliverOrderItems.Where(x => x.OrderState == CoreDeliverOrderType.UnStart).FirstOrDefault();
             //閰嶉�佸崟鍒楄〃璇︽儏
             var orderItm = new List<CoreCmsPlanOrderItemDto>();
-            
+
             foreach (var item in data.items)
             {
                 var unDeliver = groupedItems.Where(x => x.ZYBName == item.name && x.ZYBSpecification == item.specification).FirstOrDefault()?.Number ?? 0;
-                 unDeliver = item.nums - unDeliver;
+                unDeliver = item.nums - unDeliver;
                 if (unDeliver < 0)
                     unDeliver = 0;
-                int DeliveredCount = UndoDeliver?.items.Where(x=>x.ZYBSpecification== item.name&&x.ZYBName==item.name).FirstOrDefault()?.Number??
+                int DeliveredCount = UndoDeliver?.items.Where(x => x.ZYBSpecification == item.name && x.ZYBName == item.name).FirstOrDefault()?.Number ??
                    unDeliver;
                 orderItm.Add(new CoreCmsPlanOrderItemDto
                 {
@@ -954,6 +1302,7 @@
                     id = item.id,
                     name = item.name,
                     nums = item.nums,
+                    Number = DeliveredCount,
                     price = item.price,
                     specification = item.specification,
                     isOld = item.isOld,
@@ -962,20 +1311,20 @@
                 });
             }
 
-            var  deliveryList = await _CyDbClient.Queryable<OA_Staff>().Where(x => x.Status == "鍦ㄨ亴"  && x.BF_IsDriver == true).Select(x=>new
+            var deliveryList = await _CyDbClient.Queryable<OA_Staff>().Where(x => x.Status == "鍦ㄨ亴" && x.BF_IsDriver == true).Select(x => new
             {
-                deliveryMoble= x.MobieNum,
-                name= x.Name,
+                deliveryMoble = x.MobieNum,
+                name = x.Name,
 
             }).ToListAsync();
 
             return new WebApiCallBack
             {
                 status = true,
-                data = new 
+                data = new
                 {
-                    id =UndoDeliver?.id,
-                     OrderId = data.id,
+                    id = UndoDeliver?.id,
+                    OrderId = data.id,
                     //鍙告満鐢佃瘽
                     DeliveryMoble = UndoDeliver?.DeliveryMoble,
                     items = orderItm,
@@ -995,8 +1344,21 @@
                     status = false,
                     msg = "浣犳病鏈夋潈闄愭搷浣�"
                 };
-
-           var planOrder= await  _CyDbClient.Queryable<CoreCmsPlanOrder>().Includes(x=>x.items).Where(x => x.id == entity.OrderId).FirstAsync();
+            bool isallZone = true;
+            foreach (var item in entity.items)
+            {
+                if (item.Number != 0)
+                    isallZone = false;
+            }
+            if (isallZone)
+            {
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "閰嶉�佽揣鐗╀负0"
+                };
+            }
+            var planOrder = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Includes(x => x.items).Where(x => x.id == entity.OrderId).FirstAsync();
             if (planOrder == null)
             {
                 return new WebApiCallBack
@@ -1006,13 +1368,13 @@
                 };
             }
 
-    
-            if (entity.id!=null)
+
+            if (entity.id != null)
             {
                 //鏄慨鏀�
 
-                var DeliverOrder = await _CyDbClient.Queryable<CoreDeliverOrder>().Includes(x=>x.items).Where(x => x.id == entity.id ).FirstAsync();
-                if(DeliverOrder== null)
+                var DeliverOrder = await _CyDbClient.Queryable<CoreDeliverOrder>().Includes(x => x.items).Where(x => x.id == entity.id).FirstAsync();
+                if (DeliverOrder == null)
                 {
                     return new WebApiCallBack
                     {
@@ -1020,35 +1382,35 @@
                         msg = "娌℃壘鍒拌鍗�",
                     };
                 }
-                if(entity.MakeTime!=null) 
+                if (entity.MakeTime != null)
 
-                 DeliverOrder.MakeTime = entity.MakeTime;
-                if(entity.items!=null&&entity.items.Count>0)
+                    DeliverOrder.MakeTime = entity.MakeTime;
+                if (entity.items != null && entity.items.Count > 0)
                 {
                     foreach (var item in DeliverOrder.items)
                     {
-                         var newitem= entity.items.Where(x=>x.name==item.ZYBName&&x.specification==item.ZYBSpecification).FirstOrDefault();
-                        if(newitem!=null)
+                        var newitem = entity.items.Where(x => x.name == item.ZYBName && x.specification == item.ZYBSpecification).FirstOrDefault();
+                        if (newitem != null)
                         {
-                            if (item.Number != newitem.nums)
+                            if (item.Number != newitem.Number)
                             {
-                                item.Number = newitem.nums;
+                                item.Number = newitem.Number ?? 0;
                                 item.UpDataBy = _UserMoble;
                                 item.UpdataTime = DateTime.Now;
                             }
-                           
-                            
+
+
                         }
                     }
                 }
-                    //DeliverOrder.items= entity.items;
-               if(!string.IsNullOrEmpty( entity.DeliveryMoble))
+                //DeliverOrder.items= entity.items;
+                if (!string.IsNullOrEmpty(entity.DeliveryMoble))
                     DeliverOrder.DeliveryMoble = entity.DeliveryMoble;
-                DeliverOrder.UpDataBy =  _coreCmsUserServices.QueryById(_User.ID)?.mobile;
-             
+                DeliverOrder.UpDataBy = _coreCmsUserServices.QueryById(_User.ID)?.mobile;
+
                 DeliverOrder.UpdataTime = DateTime.Now;
 
-               await  _CyDbClient.UpdateNav(DeliverOrder).Include(x => x.items).ExecuteCommandAsync();
+                await _CyDbClient.UpdateNav(DeliverOrder).Include(x => x.items).ExecuteCommandAsync();
 
 
 
@@ -1057,7 +1419,7 @@
 
             {
 
-                var olddeliver = await _CyDbClient.Queryable<CoreDeliverOrder>().Includes(x => x.items).Where(x => x.OrderId==entity.OrderId&&x.OrderState== CoreDeliverOrderType.UnStart).FirstAsync();
+                var olddeliver = await _CyDbClient.Queryable<CoreDeliverOrder>().Includes(x => x.items).Where(x => x.OrderId == entity.OrderId && x.OrderState == CoreDeliverOrderType.UnStart).FirstAsync();
                 if (olddeliver != null)
                 {
                     return new WebApiCallBack
@@ -1076,7 +1438,7 @@
                     DeliveryMoble = entity.DeliveryMoble,
                     id = Guid.NewGuid(),
                     OrderState = CoreDeliverOrderType.UnStart,
-                    items =  new List<CoreDeliverOrderItem>()
+                    items = new List<CoreDeliverOrderItem>()
                 };
                 if (entity.items != null && entity.items.Count > 0)
                 {
@@ -1087,25 +1449,175 @@
                             CreateBy = _UserMoble,
                             CreateTime = DateTime.Now,
                             id = Guid.NewGuid(),
-                            Number = item.nums,
-                             OrderID= DeliverOrder.id,
-                              ZYBName= item.name,
-                              ZYBSpecification= item.specification,
-                               
-                              
+                            Number = item.Number ?? 0,
+                            OrderID = DeliverOrder.id,
+                            ZYBName = item.name,
+                            ZYBSpecification = item.specification,
+
+
                         });
 
                     }
-                   
+
                 }
 
-                    await _CyDbClient.InsertNav(DeliverOrder).Include(x => x.items).ExecuteCommandAsync();
+                await _CyDbClient.InsertNav(DeliverOrder).Include(x => x.items).ExecuteCommandAsync();
             }
             return new WebApiCallBack()
             {
                 status = true,
                 data = true
             };
+
+        }
+
+        public async Task<WebApiCallBack> GetSchoolInventory(FMIntId entity)
+        {
+            var rt = await IsDeliverManage();
+            if (rt == false)
+            {
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "浣犳病鏈夋潈闄愭搷浣�"
+                };
+            }
+            var data = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Includes(x => x.items).Includes(x => x.DeliverOrderItems, de => de.items).Where(x => x.isdelete == false && x.id == entity.id).FirstAsync();
+            if (data == null)
+            {
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "璁㈠崟宸插け鏁�"
+                };
+            }
+            var DataCountlist = await CountLessCount(data.DeliverOrderItems);
+            List<CoreCmsPlanOrderItemDto> datalist = new List<CoreCmsPlanOrderItemDto>();
+
+            foreach (var item in data.items)
+            {
+                var overCount = DataCountlist.Where(x => x.name == item.name && x.Specification == item.specification).Select(x => x.OverCount).FirstOrDefault(0);
+                datalist.Add(new CoreCmsPlanOrderItemDto()
+                {
+                    amount = item.amount,
+                    nums = item.nums,
+                     name=item.name,
+                     specification=item.specification,
+                     price= item.price,
+
+                    DeliveredCount = overCount,
+                    unDeliveredCount = item.nums - overCount,
+                    LessNumber = DataCountlist.Where(x => x.name == item.name && x.Specification == item.specification).Select(x => x.LessCount).FirstOrDefault(0),
+                    Inventory=0
+
+
+                });
+
+
+            }
+            return new WebApiCallBack
+            {
+                status = true,
+                data = new
+                {
+                    data.shipAddress,
+                    data.shipMobile,
+                    data.shipName,
+                    data.shouhuoAddress,
+                    data.status,
+                    data.DeliverState,
+                    data.DeliverRemark,
+                    data.keYongAmount,
+                    items = datalist,
+
+
+                }
+            };
+
+
+        }
+        public async Task<WebApiCallBack> MakeMultiDeliveryOderOfDeliveryManage(MakeMultiDeliveryOrderDto entity)
+        {
+
+
+            var oder = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(x => entity.ids.Contains(x.id) && x.isdelete == false).Select(x => new CoreCmsPlanOrder()
+            {
+                deliverOrder = SqlFunc.Subqueryable<CoreDeliverOrder>().Where(y => y.OrderId == x.id && y.OrderState != CoreDeliverOrderType.Completed).First()
+            }
+     ).ToListAsync();
+            if (oder == null || oder.Count == 0)
+                return new WebApiCallBack()
+                {
+                    status = true,
+                    data = true
+
+                };
+            //妫�楠�
+            foreach (var item in oder)
+            {
+                if (item.deliverOrder != null && item.deliverOrder.OrderState != CoreDeliverOrderType.UnStart)
+                    return new WebApiCallBack()
+                    {
+                        status = false,
+                        msg = $"瀛︽牎锛歿item.shipAddress} 璁㈠崟宸茬粡鍦ㄩ�佽揣涓紝涓嶈兘瀹夋帓閫佽揣"
+                    };
+            };
+
+
+            //瀹夋帓閫佽揣
+
+            await _CyDbClient.AsTenant().BeginTranAsync();
+            try
+            {
+                foreach (var item in oder)
+                {
+
+                    if (item.deliverOrder != null && item.deliverOrder.OrderState == CoreDeliverOrderType.UnStart)
+                    {
+                        if (item.deliverOrder.MakeTime != entity.Time || item.deliverOrder.DeliveryMoble != entity.DeliveryMoble)
+
+                        {
+                            item.deliverOrder.MakeTime = entity.Time;
+                            item.deliverOrder.DeliveryMoble = entity.DeliveryMoble;
+                            item.deliverOrder.UpDataBy = _UserMoble;
+                            item.deliverOrder.UpdataTime = DateTime.Now;
+                            await _CyDbClient.Updateable(item.deliverOrder).ExecuteCommandAsync();
+                        }
+                    }
+                    else if (item.deliverOrder == null)
+                    {
+                        var oderold = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Includes(x => x.items).Includes(x => x.DeliverOrderItems, devs => devs.items).Where(x => x.id == item.id).FirstAsync();
+                        //鍒涘缓鏂拌〃
+                        var deliverOrder = await CreatDeliverItem(oderold);
+                        deliverOrder.MakeTime = DateTime.Now;
+                        deliverOrder.DeliveryMoble = entity.DeliveryMoble;
+
+                        await _CyDbClient.InsertNav(deliverOrder).Include(x => x.items).ExecuteCommandAsync();
+                    }
+
+
+
+                }
+                await _CyDbClient.AsTenant().CommitTranAsync();
+
+                return new WebApiCallBack
+                {
+                    status = true,
+                    data = true,
+                };
+            }
+            catch (Exception)
+            {
+                await _CyDbClient.AsTenant().RollbackTranAsync();
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "绯荤粺澶勭悊澶辫触"
+
+                };
+            }
+
+
 
         }
 
@@ -1126,12 +1638,12 @@
                 var obj = JsonConvert.DeserializeAnonymousType(entity.where, new
                 {
                     quxianId = "",
-                    sheng="",
+                    sheng = "",
                     pianqu = "",
-                    shipAddress = "",                   
+                    shipAddress = "",
                     shi = "",
                     quxian = "",
-                    DeliverState=""
+                    DeliverState = ""
 
 
 
@@ -1140,7 +1652,7 @@
                 {
                     var ad = obj.DeliverState.ToInt32OrDefault(0);
 
-                    where = where.And(n => n.DeliverState ==  (DeliverStateType)ad  );
+                    where = where.And(n => n.DeliverState == (DeliverStateType)ad);
 
                 }
                 if (!string.IsNullOrWhiteSpace(obj.sheng))
@@ -1150,7 +1662,7 @@
                     where = where.And(n => n.sheng == obj.sheng);
 
                 }
-              
+
                 if (!string.IsNullOrWhiteSpace(obj.shi))
                 {
 
@@ -1212,14 +1724,14 @@
                 deliverOrder = SqlFunc.Subqueryable<CoreDeliverOrder>().Where(x => x.OrderId == n.id && (x.OrderState == CoreDeliverOrderType.UnStart || x.OrderState == CoreDeliverOrderType.Start)
                  && x.DeliveryMoble == user.mobile).First()
 
-            }, true).MergeTable().Where(x=>x.IngDeliverOrderID != null).ToPageListAsync( entity.page,entity.limit, totalNumbe);
+            }, true).MergeTable().Where(x => x.IngDeliverOrderID != null).ToPageListAsync(entity.page, entity.limit, totalNumbe);
             return new WebApiCallBack
             {
                 status = true,
-                data =  new
+                data = new
                 {
                     totalNumbe,
-                    data= lisdata
+                    data = lisdata
                 }
             };
         }
@@ -1244,16 +1756,16 @@
                     shi = "",
                     quxian = "",
                     OrderState = "",
-                    StartTimeZone="",                
-                    EndTimeStartZone= "",
-                 
+                    StartTimeZone = "",
+                    EndTimeStartZone = "",
+
 
                 });
                 if (!string.IsNullOrWhiteSpace(obj.OrderState))
                 {
                     var ad = obj.OrderState.ToInt32OrDefault(0);
 
-                    where = where.And(n => n.OrderState ==  (CoreDeliverOrderType)ad);
+                    where = where.And(n => n.OrderState == (CoreDeliverOrderType)ad);
 
                 }
                 if (!string.IsNullOrWhiteSpace(obj.sheng))
@@ -1268,7 +1780,7 @@
                 {
 
 
-                    where = where.And(n => n.Oreder.shi  == obj.shi);
+                    where = where.And(n => n.Oreder.shi == obj.shi);
 
                 }
                 if (!string.IsNullOrWhiteSpace(obj.quxian))
@@ -1278,7 +1790,7 @@
                     where = where.And(n => n.Oreder.quxian == obj.quxian);
 
                 }
-               
+
 
 
                 if (!string.IsNullOrEmpty(obj.pianqu))
@@ -1295,7 +1807,7 @@
                     where = where.And(n => n.Oreder.shipAddress.Contains(obj.shipAddress));
 
 
-                }         
+                }
 
 
                 if (!string.IsNullOrEmpty(obj.EndTimeStartZone))
@@ -1303,7 +1815,7 @@
                     var date = obj.EndTimeStartZone.ParseDateTimeRange();
                     if (date.StartDate != null && date.EndDate != null)
 
-                        where = where.And(n => n.OverTime<date.EndDate&&n.OverTime>date.EndDate);
+                        where = where.And(n => n.OverTime < date.EndDate && n.OverTime > date.EndDate);
 
 
                 }
@@ -1318,8 +1830,9 @@
 
             }
             where = where.And(n => n.DeliveryMoble == _UserMoble);
+            where = where.And(n => n.OrderState == CoreDeliverOrderType.Completed);
             RefAsync<int> totalNumbe = 0;
-            var data= await _CyDbClient.Queryable<CoreDeliverOrder>().Includes(n=>n.Oreder).Where(where).OrderByDescending(n=>n.StartTime).ToPageListAsync( entity.page,entity.limit, totalNumbe);
+            var data = await _CyDbClient.Queryable<CoreDeliverOrder>().Includes(n => n.Oreder).Where(where).Where(x=>x.Oreder.isdelete==false).OrderByDescending(n => n.StartTime).ToPageListAsync(entity.page, entity.limit, totalNumbe);
             //var datalist= await _CyDbClient.Queryable<CoreCmsPlanOrder>().Includes(x => x.DeliverOrderItems).Where(where).Select(x => new CoreCmsPlanOrder
             //{
             //    IngDeliverOrderID = SqlFunc.Subqueryable<CoreDeliverOrder>().Where(ide => ide.DeliveryMoble == _UserMoble && ide.OrderId == x.id).Select(ide => ide.id)
@@ -1331,14 +1844,17 @@
             return new WebApiCallBack()
             {
                 status = true,
-                data = new 
+                data = new
                 {
-                     list= data,
+                    list = data,
                     totalNumbe
                 }
             };
 
         }
+
+
+
 
         public async Task<WebApiCallBack> GetDeliverInfoOfDrver(FMStringId entity)
         {
@@ -1353,11 +1869,11 @@
 
                 };
             }
-           
-            var data=  await _CyDbClient.Queryable<CoreDeliverOrder>()
-                .Where(x => x.id == guid  && x.OrderState != CoreDeliverOrderType.Faile)
-                .Includes(x => x.items).Includes(x=>x.Oreder,or=>or.items).FirstAsync();
-            if(data==null)
+
+            var data = await _CyDbClient.Queryable<CoreDeliverOrder>()
+                .Where(x => x.id == guid && x.OrderState != CoreDeliverOrderType.Faile)
+                .Includes(x => x.items).Includes(x => x.Oreder, or => or.items).FirstAsync();
+            if (data == null)
             {
                 return new WebApiCallBack
                 {
@@ -1367,12 +1883,23 @@
             }
             var DeliverOrderlist = await _CyDbClient.Queryable<CoreDeliverOrder>().Where(x => x.OrderId == data.OrderId).ToListAsync();
             var lessdata = await CountLessCount(DeliverOrderlist);
+            var finish = await _redisOperationRepository.Get(LockFilshDeliverOderKey + data.id);
+            var CanFinishOrder = true;
 
+            if (data.OrderState != CoreDeliverOrderType.Start)
+            {
+                CanFinishOrder = false;
+            }
+            else
+                CanFinishOrder = true;
+             if (finish == LockFilshDeliverOderString)
+                CanFinishOrder = false;
             var ret = new DeliveryOrderDto()
             {
                 MakeTime = data.MakeTime,
                 DeliveryMoble = data.DeliveryMoble,
                 OrderState = data.OrderState,
+                Remarke= data.Remarke,
                 PlanOrdInfo = new CoreCmsPlanOrderInfoDto()
                 {
                     pianqu = data.Oreder.pianqu,
@@ -1381,15 +1908,18 @@
                     shipAddress = data.Oreder.shipAddress,
                     shouhuoAddress = data.Oreder.shipAddress,
                     DeliverRemark = data.Oreder.DeliverRemark,
-                     shipName= data.Oreder.shipName,
-                     sheng= data.Oreder.sheng,
-                      shi= data.Oreder.shi,
-                      quxian= data.Oreder.quxian,
-                    DeliveryOderID=data.id,
+                    shipName = data.Oreder.shipName,
+                    sheng = data.Oreder.sheng,
+                    shi = data.Oreder.shi,
+                    quxian = data.Oreder.quxian,
+                    DeliveryOderID = data.id,
+                    
+
 
 
 
                 },
+                CanFinishOrder=CanFinishOrder,
                 items = new List<CoreCmsPlanOrderItemDto>()
 
             };
@@ -1405,7 +1935,7 @@
                     DeliveredCount = count,
                     Number = thisNumber?.Number ?? count,
                     unDeliveredCount = item.nums > count ? item.nums - count : 0,
-                    LessNumber= thisNumber.LessNumber,
+                    LessNumber = thisNumber.LessNumber,
                 });
 
 
@@ -1432,7 +1962,7 @@
             }
 
             var data = await _CyDbClient.Queryable<CoreDeliverOrder>()
-               .Where(x => x.id == guid && x.OrderState == CoreDeliverOrderType.UnStart )
+               .Where(x => x.id == guid && x.OrderState == CoreDeliverOrderType.UnStart)
                .FirstAsync();
             if (data == null)
                 return new WebApiCallBack
@@ -1442,16 +1972,17 @@
                 };
             data.OrderState = CoreDeliverOrderType.Start;
             data.UpDataBy = _UserMoble;
-             data.UpdataTime = DateTime.Now;
+            data.UpdataTime = DateTime.Now;
             data.StartTime = DateTime.Now;
-           await  _CyDbClient.Updateable(data).ExecuteCommandAsync();
+            await _CyDbClient.Updateable(data).ExecuteCommandAsync();
+             _redisOperationRepository.StringSet(LockFilshDeliverOderKey + data.id, LockFilshDeliverOderString, TimeSpan.FromMinutes(5));
             return new WebApiCallBack()
             {
                 status = true
             };
 
         }
-      
+
         public async Task<WebApiCallBack> SetDeliverOrdeOfDrver(DeliveryOrderDto entity)
         {
 
@@ -1461,8 +1992,23 @@
                     status = false,
                     msg = "娌℃湁鏉冮檺鎿嶄綔"
                 };
-            var data= await  _CyDbClient.Queryable<CoreDeliverOrder>().Includes(x=>x.items).Includes(x=>x.Oreder).Where(x => x.id == entity.id && x.OrderState != CoreDeliverOrderType.Faile && x.DeliveryMoble==_UserMoble).FirstAsync();
-            if(data==null)
+            bool isallZone = true;
+            foreach (var item in entity.items)
+            {
+                if (item.Number != 0)
+                    isallZone = false;
+            }
+            if (isallZone)
+            {
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "閰嶉�佽揣鐗╀负0"
+                };
+            }
+
+            var data = await _CyDbClient.Queryable<CoreDeliverOrder>().Includes(x => x.items).Includes(x => x.Oreder).Where(x => x.id == entity.id && x.OrderState != CoreDeliverOrderType.Faile && x.DeliveryMoble == _UserMoble).FirstAsync();
+            if (data == null)
             {
                 return new WebApiCallBack()
                 {
@@ -1470,41 +2016,50 @@
                     msg = "娌℃湁鏉冮檺鎴栬�呯姸鎬佸凡缁忛攣瀹氫笉鍙洿鏀�"
                 };
             }
-            var deliverlist = await _CyDbClient.Queryable<CoreDeliverOrder>().Includes(x=>x.items).Where(x => x.OrderId == data.OrderId).ToListAsync();
+            var deliverlist = await _CyDbClient.Queryable<CoreDeliverOrder>().Includes(x => x.items).Where(x => x.OrderId == data.OrderId).ToListAsync();
             var countlist = await CountLessCount(deliverlist);
+            //鍙告満涓嶅彲鏀�
+            //if (!string.IsNullOrEmpty(data.Oreder?.DeliverRemark))
+            //{
+            //    if (data.Oreder.DeliverRemark != data.Oreder?.DeliverRemark)
+            //    {
+            //        data.Oreder.DeliverRemark = data.Oreder?.DeliverRemark;
 
-            if(!string.IsNullOrEmpty( data.Oreder?.DeliverRemark))
+            //        data.Oreder.upDataTime = DateTime.Now;
+            //        data.Oreder.upDataBy = _UserMoble;
+            //    }
+            //}
+            if (entity.Remarke != data.Remarke)
             {
-                if (data.Oreder.DeliverRemark != data.Oreder?.DeliverRemark)
-                {
-                    data.Oreder.DeliverRemark = data.Oreder?.DeliverRemark;
-                    data.Oreder.upDataTime = DateTime.Now;
-                    data.Oreder.upDataBy = _UserMoble;
-                }
+                data.Remarke = entity.Remarke;
+                data.UpDataBy = _UserMoble;
+                data.UpdataTime = DateTime.Now;
             }
-            foreach (var item in data.items) 
+            foreach (var item in data.items)
             {
                 var it = entity.items.Where(x => x.name == item.ZYBName && x.specification == item.ZYBSpecification).FirstOrDefault();
                 if (it?.LessNumber != null)
-                    if (item.LessNumber!=it.LessNumber)
-                {
-                    item.LessNumber = it.LessNumber??0;
-                    item.UpDataBy = _UserMoble;
-                    item.UpdataTime = DateTime.Now;
+                    if (item.LessNumber != it.LessNumber)
+                    {
+                        item.LessNumber = it.LessNumber ?? 0;
+                        item.UpDataBy = _UserMoble;
+                        item.UpdataTime = DateTime.Now;
 
-                    
-                }
-             //   閫佽揣鏁伴噺鏄惁鑳借秴杩囬瀹氭暟閲忥紵
+
+                    }
+                //   閫佽揣鏁伴噺鏄惁鑳借秴杩囬瀹氭暟閲忥紵
                 //item.Number- countlist.Where(x=>x.name==item.ZYBName&&x.Specification==item.ZYBSpecification).Select(x=>x.OverCount).FirstOrDefault(0)
-                if(it?.nums!=null)
-                if (item.Number!=it.Number )
-                {
-                    item.Number = it.Number??0;
-                    item.UpDataBy = _UserMoble;
-                    item.UpdataTime = DateTime.Now;
-                }
+                if (it?.nums != null)
+                    if (item.Number != it.Number)
+                    {
+                        item.Number = it.Number ?? 0;
+                        item.UpDataBy = _UserMoble;
+                        item.UpdataTime = DateTime.Now;
+                    }
+
+           
             }
-           await  _CyDbClient.UpdateNav(data).Include(x => x.Oreder).Include(x => x.items).ExecuteCommandAsync();
+            await _CyDbClient.UpdateNav(data).Include(x => x.Oreder).Include(x => x.items).ExecuteCommandAsync();
 
             return new WebApiCallBack
             {
@@ -1533,7 +2088,7 @@
                 };
 
             var data = await _CyDbClient.Queryable<CoreDeliverOrder>()
-              .Where(x => x.id == guid && x.OrderState == CoreDeliverOrderType.Start)             
+              .Where(x => x.id == guid && x.OrderState == CoreDeliverOrderType.Start)
               .FirstAsync();
             if (data == null)
                 return new WebApiCallBack
@@ -1541,10 +2096,20 @@
                     status = false,
                     msg = "娌℃湁鏁版嵁锛屾垨鑰呮槸娌℃湁鏉冮檺鍙搷浣�"
                 };
+            var lockflg = await _redisOperationRepository.Get(LockFilshDeliverOderKey + data.id.ToString());
+            if (lockflg != null&&lockflg== LockFilshDeliverOderString)
+            {
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "寮�濮嬮厤閫佸悗5鍒嗛挓涔嬪唴涓嶈兘瀹屾垚璁㈠崟鎿嶄綔"
+                };
+            }
+
 
             var order = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(x => x.id == data.OrderId).Includes(x => x.items)
                .Includes(x => x.DeliverOrderItems, deo => deo.items).FirstAsync();
-            if(order == null)
+            if (order == null)
             {
                 return new WebApiCallBack
                 {
@@ -1553,7 +2118,7 @@
                 };
             }
             var countlist = await CountLessCount(order.DeliverOrderItems);
-          await   _CyDbClient.AsTenant().BeginTranAsync();
+            await _CyDbClient.AsTenant().BeginTranAsync();
             try
             {
                 if (countlist != null)
@@ -1611,22 +2176,22 @@
                 await _CyDbClient.AsTenant().RollbackTranAsync();
                 throw;
             }
-           
+
         }
         public async Task<WebApiCallBack> SetTarcks(TracksDto entity)
         {
 
-          if(  ! await IsDrive())
+            if (!await IsDrive())
             {
 
                 return new WebApiCallBack()
                 {
-                     status= false,
-                     
-                     msg= "闈炲徃鏈虹涓嶉泦鍧愭爣鏁版嵁",
+                    status = false,
+
+                    msg = "闈炲徃鏈虹涓嶉泦鍧愭爣鏁版嵁",
                 };
             }
-           entity.Moble = _UserMoble;
+            entity.Moble = _UserMoble;
             await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.CyDeliverOrderTarcks, JsonConvert.SerializeObject(entity));
             return new WebApiCallBack()
             {
@@ -1640,13 +2205,13 @@
         public async Task<List<Sys_CitySite>> GetZoneList(Sys_CitySite cyte = null)
         {
             if (cyte == null)
-            return await   _CyDbClient.Queryable<Sys_CitySite>().Where(x => x.CityLevel == 1 && x.IsDisplay == true && x.ProvinceId == 0&&x.CityId==0).OrderBy(x => x.OrderNum).ToListAsync();
+                return await _CyDbClient.Queryable<Sys_CitySite>().Where(x => x.CityLevel == 1 && x.IsDisplay == true && x.ProvinceId == 0 && x.CityId == 0).OrderBy(x => x.OrderNum).ToListAsync();
             if (cyte.CityLevel == 3)
                 return new List<Sys_CitySite>();
-            if(cyte.CityLevel==2)
+            if (cyte.CityLevel == 2)
                 //鍖�
-            return await _CyDbClient.Queryable<Sys_CitySite>().Where(x => x.CityLevel == 3 && x.IsDisplay == true && x.ProvinceId == cyte.ProvinceId && x.CityId == cyte.Keyid).OrderBy(x => x.OrderNum).ToListAsync();
-            if (cyte.CityLevel == 1) 
+                return await _CyDbClient.Queryable<Sys_CitySite>().Where(x => x.CityLevel == 3 && x.IsDisplay == true && x.ProvinceId == cyte.ProvinceId && x.CityId == cyte.Keyid).OrderBy(x => x.OrderNum).ToListAsync();
+            if (cyte.CityLevel == 1)
                 //鏌ュ競绾�
                 return await _CyDbClient.Queryable<Sys_CitySite>().Where(x => x.CityLevel == 2 && x.IsDisplay == true && x.ProvinceId == cyte.Keyid && x.CityId == 0).OrderBy(x => x.OrderNum).ToListAsync();
             return new List<Sys_CitySite>();
@@ -1654,7 +2219,7 @@
 
         public async Task<List<Sys_CitySite>> GetZoneListALL()
         {
-            return await _CyDbClient.Queryable<Sys_CitySite>().Where(x => x.IsDisplay == true ).ToListAsync();
+            return await _CyDbClient.Queryable<Sys_CitySite>().Where(x => x.IsDisplay == true).ToListAsync();
         }
 
         #endregion
@@ -1665,13 +2230,13 @@
         /// </summary>
         /// <param name="order"></param>
         /// <returns></returns>
-        private async Task< CoreDeliverOrder> CreatDeliverItem( CoreCmsPlanOrder order)
+        private async Task<CoreDeliverOrder> CreatDeliverItem(CoreCmsPlanOrder order)
         {
-            if(order.items==null)
-              order.items= await  _CyDbClient.Queryable<CoreCmsPlanOrderItem>().Where(x=>x.orderId==order.id).ToListAsync();
-            if(order.DeliverOrderItems == null)
-              order.DeliverOrderItems= await  _CyDbClient.Queryable<CoreDeliverOrder>().Where(x=>x.OrderId==order.id).Includes(x=>x.items).ToListAsync();
-            
+            if (order.items == null)
+                order.items = await _CyDbClient.Queryable<CoreCmsPlanOrderItem>().Where(x => x.orderId == order.id).ToListAsync();
+            if (order.DeliverOrderItems == null)
+                order.DeliverOrderItems = await _CyDbClient.Queryable<CoreDeliverOrder>().Where(x => x.OrderId == order.id).Includes(x => x.items).ToListAsync();
+
             var countlist = await CountLessCount(order.DeliverOrderItems);
             var DeliverOrder = new CoreDeliverOrder()
             {
@@ -1679,14 +2244,15 @@
                 CreateTime = DateTime.Now,
                 OrderId = order.id,
                 id = Guid.NewGuid(),
+                OrderState= CoreDeliverOrderType.UnStart,
 
             };
-            var ret= new List<CoreDeliverOrderItem>();
+            var ret = new List<CoreDeliverOrderItem>();
 
             foreach (var item in order.items)
             {
-                var Number = item.nums -= countlist.Where(x => x.name == item.name && x.Specification == item.specification).Select(x => x.OverCount + x.IngCount).FirstOrDefault(0);
-                if(Number<0)
+                var Number = item.nums - countlist.Where(x => x.name == item.name && x.Specification == item.specification).Select(x => x.OverCount ).FirstOrDefault(0);
+                if (Number < 0)
                     Number = 0;
 
                 ret.Add(new CoreDeliverOrderItem()
@@ -1697,11 +2263,11 @@
                     ZYBName = item.name,
                     ZYBSpecification = item.specification,
                     id = Guid.NewGuid(),
-                    OrderID= DeliverOrder.id,
+                    OrderID = DeliverOrder.id,
 
                 });
             }
-            DeliverOrder.items= ret;
+            DeliverOrder.items = ret;
             return DeliverOrder;
         }
         /// <summary>
@@ -1709,22 +2275,22 @@
         /// </summary>
         /// <param name=""></param>
         /// <returns></returns>
-        private async Task< List<SendCountDto> > CountLessCount(List<CoreDeliverOrder> datain)
+        private async Task<List<SendCountDto>> CountLessCount(List<CoreDeliverOrder> datain)
         {
 
             var OverCountlistdata = new List<CoreDeliverOrderItem>();
             //缁熻宸茬粡瀹岀粨鐨勫崟
-            foreach (var item in datain.Where(x=>x.OrderState== CoreDeliverOrderType.Completed).ToList())
+            foreach (var item in datain.Where(x => x.OrderState == CoreDeliverOrderType.Completed).ToList())
             {
                 //鍏堢粺璁″凡缁忓畬缁撶殑閰嶉�佸崟
-                if(item.items==null||item.items.Count==0)
+                if (item.items == null || item.items.Count == 0)
                 {
-                    item.items= await _CyDbClient.Queryable<CoreDeliverOrderItem>().Where(x=>x.OrderID==item.id).ToListAsync();
+                    item.items = await _CyDbClient.Queryable<CoreDeliverOrderItem>().Where(x => x.OrderID == item.id).ToListAsync();
                 }
                 OverCountlistdata.AddRange(item.items);
             }
 
-         var overlist=   OverCountlistdata.GroupBy(x => new
+            var overlist = OverCountlistdata.GroupBy(x => new
             {
                 x.ZYBName,
                 x.ZYBSpecification
@@ -1732,13 +2298,14 @@
             {
                 name = x.Key.ZYBName,
                 Specification = x.Key.ZYBSpecification,
-                num = x.Sum(x => x.Number)
+                num = x.Sum(x => x.Number),
+                lessCount = x.Sum(x => x.LessNumber)
 
             }).ToList();
-            
+
             //缁熻鏈畬鎴愮殑鍗�
             var ingCountlistdata = new List<CoreDeliverOrderItem>();
-            foreach (var item in datain.Where(x => x.OrderState == CoreDeliverOrderType.UnStart||x.OrderState== CoreDeliverOrderType.Start).ToList())
+            foreach (var item in datain.Where(x => x.OrderState == CoreDeliverOrderType.UnStart || x.OrderState == CoreDeliverOrderType.Start).ToList())
             {
                 //鍏堢粺璁″凡缁忓畬缁撶殑閰嶉�佸崟
                 if (item.items == null || item.items.Count == 0)
@@ -1748,7 +2315,7 @@
                 ingCountlistdata.AddRange(item.items);
             }
 
-          var inglist=  ingCountlistdata.GroupBy(x => new
+            var inglist = ingCountlistdata.GroupBy(x => new
             {
                 x.ZYBName,
                 x.ZYBSpecification
@@ -1756,36 +2323,377 @@
             {
                 name = x.Key.ZYBName,
                 Specification = x.Key.ZYBSpecification,
-                num = x.Sum(x => x.Number)
+                num = x.Sum(x => x.Number),
+                lessCount = x.Sum(x => x.LessNumber)
 
             }).ToList();
-            var retlist = new  List<SendCountDto>();
-            foreach (var item in overlist)
+            var retlist = new List<SendCountDto>();
+            var countlist = overlist;
+            //杩欎竴鍙ユ槸闃叉娌℃湁宸插畬鎴愯鍗曢�犳垚鐨勭┖杞
+            if (countlist.Count == 0)
+                countlist = inglist;
+            foreach (var item in countlist)
             {
                 retlist.Add(new SendCountDto
                 {
                     name = item.name,
                     Specification = item.Specification,
-                    OverCount = item.num,
-                    IngCount = inglist.Where(x => x.name == item.name && x.Specification == item.Specification).Select(x => x.num).FirstOrDefault(0)
+                    OverCount = overlist.Where(x => x.name == item.name && x.Specification == item.Specification).Select(x => x.num).FirstOrDefault(0),
+                    IngCount = inglist.Where(x => x.name == item.name && x.Specification == item.Specification).Select(x => x.num).FirstOrDefault(0),
+                    LessCount = overlist.Where(x => x.name == item.name && x.Specification == item.Specification).Select(x => x.lessCount).FirstOrDefault(0)
                 });
             }
-           
+
             return retlist;
 
         }
 
-     
+
+        /// <summary>
+        /// 瑙f瀽xml鍥剧墖
+        /// </summary>
+        /// <param name="xmlstr"></param>
+        /// <returns></returns>
+        private  List<InquiryWorkBookModel> ParseXml( string xmlstr)
+        {
+            // 瑙f瀽 XML 瀛楃涓�
+            XDocument doc = XDocument.Parse(xmlstr);
+
+            // 鎻愬彇 InquiryWorkBookList 涓殑鏁版嵁
+            var inquiryWorkBookList = doc.Descendants("InquiryWorkBookModel");
+
+            // 杞崲涓� List<InquiryWorkBookModel>
+            List<InquiryWorkBookModel> inquiryWorkBookModels = new List<InquiryWorkBookModel>();
+
+            foreach (var item in inquiryWorkBookList)
+            {
+                var model = new InquiryWorkBookModel
+                {
+                    WorkBookName = item.Element("WorkBookName")?.Value ?? "",
+                    WorkBookNameTxt = item.Element("WorkBookNameTxt")?.Value ?? "",
+                    WorkBookSize = item.Element("WorkBookSize")?.Value ?? "",
+                    WorkBookSizeTxt = item.Element("WorkBookSizeTxt")?.Value ?? "",
+                    WorkBookCount = item.Element("WorkBookCount")?.Value ?? "",
+                    ysUnit = item.Element("ysUnit")?.Value ?? "",
+                    ysUnitTxt = item.Element("ysUnitTxt")?.Value ?? "",
+                    WorkBookPrice = item.Element("WorkBookPrice")?.Value ?? "",
+                    WorkBookMoney = item.Element("WorkBookMoney")?.Value ?? "",
+                    WorkBookFengMian = item.Element("WorkBookFengMian")?.Value ?? "",
+                    WorkBookFengMianTxt = item.Element("WorkBookFengMianTxt")?.Value ?? "",
+                    FengMianYaoqiu = item.Element("FengMianYaoqiu")?.Value ?? "",
+                    FengMianYaoqiuTxt = item.Element("FengMianYaoqiuTxt")?.Value ?? "",
+                    WorkBookNeiXing = item.Element("WorkBookNeiXing")?.Value ?? "",
+                    WorkBookNeiXingTxt = item.Element("WorkBookNeiXingTxt")?.Value ?? "",
+                    NeiXingYaoqiu = item.Element("NeiXingYaoqiu")?.Value ?? "",
+                    NeiXingYaoqiuTxt = item.Element("NeiXingYaoqiuTxt")?.Value ?? "",
+                    WorkBookpageNum = item.Element("WorkBookpageNum")?.Value ?? "",
+                    fengmian = item.Element("fengmian")?.Value ?? "",
+                    neiye = item.Element("neiye")?.Value ?? ""
+                };
+
+                inquiryWorkBookModels.Add(model);
+            }
+            return inquiryWorkBookModels;
+        }
+    
+
+
 
 
         #endregion
+     
+        #region 瀛︽牎绠$悊绔�
+        /// <summary>
+        /// 鑾峰彇鏂板缓璁㈠崟瀛︽牎璁㈠崟鍒楄〃
+        /// </summary>
+        /// <param name="Oderid"></param>
+        /// <returns></returns>
+        /// <exception cref="NotImplementedException"></exception>
+        public async Task<WebApiCallBack> CreatSchoolOfSchoolManage(CoreCmsPlanOrderInfoDto entity)
+        {
+
+            if (!await IsDeliverManage())
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "浣犳病鏈夋潈闄愭搷浣�"
+                };
+
+            if(entity.orderkeyid==null||entity.orderkeyid==0)
+            {
+                  return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "娌℃湁瀵瑰簲璁㈠崟"
+                };
+            }
+            if(string.IsNullOrEmpty(entity.shipAddress))
+            {
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "瀛︽牎鍦板潃蹇呭~"
+                };
+            }
+            if (string.IsNullOrEmpty(entity.shipMobile)&&(!entity.shipMobile.IsPhoneNumberValid()))
+            {
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "瀛︽牎鑱旂郴浜虹數璇濆繀濉笖蹇呴』鏄數璇濆彿鐮�"
+                };
+            }
+            if (string.IsNullOrEmpty(entity.shipName))
+            {
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "鑱旂郴浜哄繀濉�"
+                };
+            }
+            if (string.IsNullOrEmpty(entity.pianqu))
+            {
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "鐗囧尯蹇呭~"
+                };
+            }
+            var Oder = await _CyDbClient.Queryable<EC_OrderBasic>().Where(x => x.Keyid == entity.orderkeyid&&x.OrderState>0).FirstAsync();
+            if(Oder==null)
+            {
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = $"璁㈠崟澶辨晥鎴栬�呭凡缁忓畬缁�"
+                };
+            }
+            var Oderxml= await _CyDbClient.Queryable<EC_OrderPrintParameter>().Where(x => x.OrderId == entity.orderkeyid).Select(x => x.PrintParameter).FirstAsync();
+            if(string.IsNullOrEmpty(Oderxml))
+            {
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "璁㈠崟閿欒(0)"
+                };
+            }
+            var custinfo = await _CyDbClient.Queryable<OA_CustomerCommunications>().Where(x => x.CompanyPhone == _UserMoble).FirstAsync();
+            if(custinfo ==null)
+            {
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "鎿嶄綔鐢ㄦ埛娌℃湁缁戝畾鐪佸競鍖�"
+                };
+            }
+
+            var xmlist= ParseXml(Oderxml);
+
+            if (  entity.items.Count>0)
+            {
+                var data = new CoreCmsPlanOrder
+                {
+                    orderkeyid = entity.orderkeyid,
+                    items = new List<CoreCmsPlanOrderItem>(),
+                    createBy = _UserMoble,
+                    createTime = DateTime.Now,
+                    huaFeiAmount = 0,
+                    DeliverState = DeliverStateType.NoDelivery,
+                    keYongAmount = 0,
+                    pianqu = entity.pianqu,
+                    quxianId = entity.quxianId,
+                    sheng = custinfo.Province,
+                    quxian = custinfo.County,
+                    shengId = entity.shengId,
+                    shi = custinfo.City,
+                    shiId = entity.shiId,
+                    shipAddress = entity.shipAddress,
+                    shipMobile = entity.shipMobile,
+                    shipName = entity.shipName,
+                    shouhuoAddress = entity.shipAddress,
+                    status = 1,
+                    isdelete = false,
+                    userMobile = entity.shipMobile,
+                    FirmId = Oder.SellerId.ToString()
+
+
+
+
+                };
+                foreach (var item in entity.items)
+                {
+                    var inxml = xmlist.Where(x => x.WorkBookNameTxt == item.name && x.WorkBookSizeTxt == item.specification).FirstOrDefault();
+                    decimal price = 0m;
+                    decimal.TryParse(inxml.WorkBookPrice, out price);
+                    
+                   
+                    data.items.Add(new CoreCmsPlanOrderItem
+                    {
+                          isOld=false,
+                           amount = item.nums*price,
+                            createBy = _UserMoble,
+                             createTime=DateTime.Now,
+                              fengmian=inxml.fengmian,
+                               neiye=inxml.neiye,
+                                price=price,
+                                 name=item.name,
+                                  specification=item.specification,
+                                   nums=item.nums,                              
+                                    
+
+                    });
+                }
+
+                data.orderAmount= data.items.Sum(x => x.amount);
+                data.oldOrderAmount = data.items.Sum(x => x.amount);
+                await  _CyDbClient.InsertNav(data).Include(x => x.items).ExecuteCommandAsync();
+
+                await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.CyDeliverOAjisuanjine, entity.orderkeyid?.ToString());
+                return new WebApiCallBack
+                {
+                    status = true,
+                    data = true,
+                };
+
+            }
+          else
+            {
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "娌℃湁浣滀笟鏈鎯呰〃"
+                };
+            }
+
+
+        }
+
+        public async Task<WebApiCallBack> GetCreatSchoolOfSchoolManage()
+        {
+
+            if (!await IsSchoolManger())
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "浣犳病鏈夋潈闄愭搷浣�"
+                };
+            if(_SchoolManagerKeyId==null)
+                
+                     return new WebApiCallBack
+                     {
+                         status = false,
+                         msg = "浣犳病鏈夋潈闄愭搷浣�"
+                     };
+
+            var listmager = await _CyDbClient.Queryable<CoreCmsPlanOrder>().
+               LeftJoin<EC_OrderBasic>((p, or) => p.orderkeyid == or.Keyid)
+               .LeftJoin<OA_CustomerCommunications>((p, or, cus) => or.BuyerId == cus.Keyid)
+               .Where((p, or, cus) => cus.Keyid == _SchoolManagerKeyId)
+               .Select((p, or, cus) => p, true).ToListAsync();
+            if(listmager == null||listmager.Count==0)
+            {
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "鏈壘鎷ユ湁璁㈠崟"
+                };
+            }
+            var ListZoneKeyID = listmager.GroupBy(x => x.orderkeyid).Select(x => new
+            {
+                keyid = x.Key.Value,
+                count = x.Count(),
+            }).ToList();
+
+            if(ListZoneKeyID.Count==0)
+            {
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "鏈壘鎷ユ湁璁㈠崟"
+                };
+            }
+            //璁㈠崟璇︽儏鍒楄〃
+                var ZoneOderList = await _CyDbClient.Queryable<EC_OrderBasic>().In(ListZoneKeyID.Select(y=>y.keyid).ToList()).Select(x => new zongoderinfo
+                {
+                Keyid = x.Keyid,
+                DocumentName= x.DocumentName,
+                    WorkBooksxmlstr= SqlFunc.Subqueryable<EC_OrderPrintParameter>().Where(pa=>pa.OrderId==x.Keyid).Select(pa=>pa.PrintParameter)
+
+                }).Mapper(x=>
+                {
+                   x.WorkBooks= ParseXml(x.WorkBooksxmlstr);
+                    x.WorkBooksxmlstr = null;
+                }).ToListAsync();
+
+              
+
+            return new WebApiCallBack
+            {
+                status = true,
+                data = ZoneOderList,
+
+            };
+
+
+
+          
+        }
+
+        public async Task<WebApiCallBack> DelSchoolOfSchoolManage(FMIntId entity)
+        {
+
+            if (!await IsSchoolManger())
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "浣犳病鏈夋潈闄愭搷浣�"
+                };
+            if(entity.id==0)
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "id鏃犳晥"
+                };
+
+        var data=   await   _CyDbClient.Queryable<CoreCmsPlanOrder, EC_OrderBasic>((core, order) => new JoinQueryInfos(
+        JoinType.Left, core.orderkeyid == order.Keyid
+        )
+
+
+            ).Where((core, order) => order.BuyerId == _SchoolManagerKeyId&&core.id==entity.id).Select((core, order)=>core).FirstAsync();
+            if(data!=null)
+            {
+               data.isdelete = true;
+                data.upDataBy = _UserMoble;
+                data.upDataTime = data.upDataTime;
+            await     _CyDbClient.Updateable(data).ExecuteCommandAsync();
+                await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.CyDeliverOAjisuanjine, data.orderkeyid?.ToString());
+                return new WebApiCallBack
+                {
+                    status = true,
+                   data =true
+                };
+
+            }
+            else
+            {
+                return new WebApiCallBack
+                {
+                    status = false,
+                    msg = "娌℃湁鏉冮檺鍒犻櫎璇ヨ鍗�"
+                };
+            }
+
+
+        }
+        #endregion
     }
-     class SendCountDto
+    class SendCountDto
     {
         /// <summary>
         /// 鍚嶇О
         /// </summary>
-            public string name {  get; set; }
+        public string name { get; set; }
         /// <summary>
         /// 寮�鏈�
         /// </summary>
@@ -1797,8 +2705,47 @@
         /// <summary>
         /// 宸茶缃垨鑰呮湭瀹屾垚
         /// </summary>
-        public int  IngCount { get; set; }
+        public int IngCount { get; set; }
+        /// <summary>
+        /// 鑺傜害鏁伴噺
+        /// </summary>
+        public int LessCount { get; set; }
     }
 
+    /// <summary>
+    /// 璁㈠崟鍙傛暟鍒楄〃
+    /// </summary>
+    public class zongoderinfo
+    {
+        public  int  Keyid { get; set; }
+        public string DocumentName { get; set; }
+        public List<InquiryWorkBookModel> WorkBooks { get; set; }
+        public string WorkBooksxmlstr { get; set; }
+
+    }
+
+    public class InquiryWorkBookModel
+    {
+        public string WorkBookName { get; set; }
+        public string WorkBookNameTxt { get; set; }
+        public string WorkBookSize { get; set; }
+        public string WorkBookSizeTxt { get; set; }
+        public string WorkBookCount { get; set; }
+        public string ysUnit { get; set; }
+        public string ysUnitTxt { get; set; }
+        public string WorkBookPrice { get; set; }
+        public string WorkBookMoney { get; set; }
+        public string WorkBookFengMian { get; set; }
+        public string WorkBookFengMianTxt { get; set; }
+        public string FengMianYaoqiu { get; set; }
+        public string FengMianYaoqiuTxt { get; set; }
+        public string WorkBookNeiXing { get; set; }
+        public string WorkBookNeiXingTxt { get; set; }
+        public string NeiXingYaoqiu { get; set; }
+        public string NeiXingYaoqiuTxt { get; set; }
+        public string WorkBookpageNum { get; set; }
+        public string fengmian { get; set; }
+        public string neiye { get; set; }
+    }
 
 }
diff --git a/CoreCms.Net.Web.WebApi/Controllers/CyinOsAPI/CyDeliverMangerController.cs b/CoreCms.Net.Web.WebApi/Controllers/CyinOsAPI/CyDeliverMangerController.cs
index 62b7d35..48032c7 100644
--- a/CoreCms.Net.Web.WebApi/Controllers/CyinOsAPI/CyDeliverMangerController.cs
+++ b/CoreCms.Net.Web.WebApi/Controllers/CyinOsAPI/CyDeliverMangerController.cs
@@ -52,7 +52,7 @@
         }
 
         /// <summary>
-        /// 鑾峰彇閰嶉�佺鐞嗚鍗�
+        /// 閫佽揣瀹夋帓
         /// </summary>
         /// <param name="entity"></param>
         /// <returns></returns>
@@ -72,6 +72,16 @@
         public async Task<WebApiCallBack> GetDeliveryOderInfoe(FMIntId entity)
         {
             return await _cyinOAService.GetDeliveryOderInfoOfDeliveryManage(entity);
+        }
+        /// <summary>
+        /// 瀛︽牎鐩樼偣
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<WebApiCallBack> GetShcoolInventory(FMIntId entity)
+        {
+            return await _cyinOAService.GetSchoolInventory(entity);
         }
 
         /// <summary>
@@ -98,5 +108,16 @@
             }
             return await _cyinOAService.SetDeliveryOderOfDeliveryManage(entity);
         }
+        /// <summary>
+        /// 鎵归噺璁剧疆閰嶉�佸崟
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<WebApiCallBack> MakeMultiDeliveryOder(MakeMultiDeliveryOrderDto entity)
+        {
+           
+            return await _cyinOAService.MakeMultiDeliveryOderOfDeliveryManage(entity);
+        }
     }
 }
diff --git a/CoreCms.Net.Web.WebApi/Controllers/CyinOsAPI/CyDriverController.cs b/CoreCms.Net.Web.WebApi/Controllers/CyinOsAPI/CyDriverController.cs
index ffe5286..ac30a01 100644
--- a/CoreCms.Net.Web.WebApi/Controllers/CyinOsAPI/CyDriverController.cs
+++ b/CoreCms.Net.Web.WebApi/Controllers/CyinOsAPI/CyDriverController.cs
@@ -145,11 +145,8 @@
         public async Task<WebApiCallBack> FinishDeliverOrder(FMStringId entity)
         {
 
-            return new WebApiCallBack
-            {
-                status = true,
-                data = await _cyinOAService.FinishDeliverOrdeOfDrver(entity)
-            };
+            return await _cyinOAService.FinishDeliverOrdeOfDrver(entity);
+            
 
         }
 
diff --git a/CoreCms.Net.Web.WebApi/Controllers/CyinOsAPI/CySchoolController.cs b/CoreCms.Net.Web.WebApi/Controllers/CyinOsAPI/CySchoolController.cs
index 3c703ff..f403157 100644
--- a/CoreCms.Net.Web.WebApi/Controllers/CyinOsAPI/CySchoolController.cs
+++ b/CoreCms.Net.Web.WebApi/Controllers/CyinOsAPI/CySchoolController.cs
@@ -34,10 +34,34 @@
         public async Task<WebApiCallBack> GetIsShooder()
         {
 
+            var data = await _cyinOAService.IsSchooler();
+            if (data == true)
+                return new WebApiCallBack
+                {
+                    status = true,
+                    data = data,
+                };
+          
             return new WebApiCallBack
             {
                 status = true,
-                data = await _cyinOAService.IsSchooler()
+                data = await _cyinOAService.IsSchoolManger()
+            };
+
+        }
+
+        /// <summary>
+        /// 鏄惁鏄鏍℃暀鑲插眬涓嬪崟
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        public async Task<WebApiCallBack> IsSchoolManger()
+        {
+
+            return new WebApiCallBack
+            {
+                status = true,
+                data = await _cyinOAService.IsSchoolManger()
             };
 
         }
@@ -185,6 +209,39 @@
                 }).ToList()
             };
         }
+        /// <summary>
+        /// 鑾峰彇鍒涘缓璁㈠崟鐩稿叧鍙傛暟
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        public async Task<WebApiCallBack> GetCreatOderParam()
+        {
+            return await _cyinOAService.GetCreatSchoolOfSchoolManage();
+           
+        }
+        /// <summary>
+        /// 鍒涘缓璁㈠崟
+        /// </summary>
+        /// <param name="en"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<WebApiCallBack> CreatSchoolOder(CoreCmsPlanOrderInfoDto en)
+        {
+            return await _cyinOAService.CreatSchoolOfSchoolManage(en);
+
+        }
+
+        /// <summary>
+        /// 鍒犻櫎璁㈠崟
+        /// </summary>
+        /// <param name="en"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<WebApiCallBack> DelSchoolOder(FMIntId en)
+        {
+            return await _cyinOAService.DelSchoolOfSchoolManage(en);
+
+        }
 
     }
 }
diff --git a/CoreCms.Net.Web.WebApi/Properties/PublishProfiles/FolderProfile.pubxml.user b/CoreCms.Net.Web.WebApi/Properties/PublishProfiles/FolderProfile.pubxml.user
index 72ef19d..c49e508 100644
--- a/CoreCms.Net.Web.WebApi/Properties/PublishProfiles/FolderProfile.pubxml.user
+++ b/CoreCms.Net.Web.WebApi/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -5,7 +5,7 @@
 <Project>
   <PropertyGroup>
     <_PublishTargetUrl>D:\鐧惧垎鐧惧叺娉昞API</_PublishTargetUrl>
-    <History>True|2024-11-12T01:19:24.2854122Z||;True|2024-11-08T08:59:03.7975322+08:00||;True|2024-11-07T10:49:34.2710419+08:00||;True|2024-11-07T09:10:55.4973420+08:00||;True|2024-11-06T13:12:02.1421513+08:00||;True|2024-11-06T12:25:13.6289735+08:00||;True|2024-11-06T09:05:25.0195410+08:00||;True|2024-11-05T15:57:49.9141760+08:00||;True|2024-11-05T13:20:20.2196550+08:00||;True|2024-11-04T11:14:20.0184333+08:00||;False|2024-11-04T11:13:31.2038940+08:00||;True|2024-11-01T11:09:18.4938189+08:00||;False|2024-11-01T11:08:48.5298972+08:00||;True|2024-11-01T09:16:11.5683384+08:00||;True|2024-03-22T16:31:04.2218156+08:00||;</History>
+    <History>True|2024-11-27T00:59:58.9356363Z||;True|2024-11-22T13:15:11.8552617+08:00||;True|2024-11-21T09:59:12.6413208+08:00||;True|2024-11-20T09:00:43.9977878+08:00||;True|2024-11-19T12:57:11.1723885+08:00||;True|2024-11-14T15:48:37.2147562+08:00||;True|2024-11-14T15:36:23.1725803+08:00||;True|2024-11-14T15:25:54.9253406+08:00||;True|2024-11-14T13:32:56.5401650+08:00||;True|2024-11-13T17:33:36.1938552+08:00||;True|2024-11-13T15:31:29.3869845+08:00||;True|2024-11-13T15:27:11.3974109+08:00||;True|2024-11-13T15:14:39.2933051+08:00||;True|2024-11-13T14:24:52.8582465+08:00||;True|2024-11-13T09:53:23.5894948+08:00||;True|2024-11-12T14:47:59.7284833+08:00||;True|2024-11-12T09:19:24.2854122+08:00||;True|2024-11-08T08:59:03.7975322+08:00||;True|2024-11-07T10:49:34.2710419+08:00||;True|2024-11-07T09:10:55.4973420+08:00||;True|2024-11-06T13:12:02.1421513+08:00||;True|2024-11-06T12:25:13.6289735+08:00||;True|2024-11-06T09:05:25.0195410+08:00||;True|2024-11-05T15:57:49.9141760+08:00||;True|2024-11-05T13:20:20.2196550+08:00||;True|2024-11-04T11:14:20.0184333+08:00||;False|2024-11-04T11:13:31.2038940+08:00||;True|2024-11-01T11:09:18.4938189+08:00||;False|2024-11-01T11:08:48.5298972+08:00||;True|2024-11-01T09:16:11.5683384+08:00||;True|2024-03-22T16:31:04.2218156+08:00||;</History>
     <LastFailureDetails />
   </PropertyGroup>
 </Project>
\ No newline at end of file

--
Gitblit v1.9.1