移动系统liao
2025-02-11 23518b1198cfb79c5a8f9d7d7921fb888c48a692
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>
        /// 是否是司机key
        /// </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>
        /// 学校管理员ID,有则是,没有则不是
        /// </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,22 +1060,28 @@
            }
            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(),
                      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)
                  },
                  true
                  ).MergeTable().Where(where).ToPageListAsync(entity.page, entity.limit, totalNumbe);
                  ).MergeTable().Where(where).OrderBy(n=>n.MakeTime).ToPageListAsync(entity.page, entity.limit, totalNumbe);
            var data = dlist.Select(x => new
            {
@@ -759,17 +1089,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 +1124,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 +1193,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
                  ).MergeTable().Where(where).ToPageListAsync(entity.page, entity.limit, totalNumbe);
                  , true
                  ).MergeTable().Where(where).OrderBy(x=>x.MakeTime).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 +1234,15 @@
                        x.shipAddress,
                        x.quxian,
                        x.pianqu,
                        x.deliverOrder
                        x.deliverOrder,
                        x.DeliverState,
                        x.DeliveryMoble
                    }).ToList()
                    }).ToList(),
                    deliveryList
                }
            };
        }
@@ -903,15 +1255,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 +1288,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 +1306,7 @@
                    id = item.id,
                    name = item.name,
                    nums = item.nums,
                    Number = DeliveredCount,
                    price = item.price,
                    specification = item.specification,
                    isOld = item.isOld,
@@ -962,20 +1315,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 +1348,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 +1372,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 +1386,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 +1423,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 +1442,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 +1453,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 +1642,12 @@
                var obj = JsonConvert.DeserializeAnonymousType(entity.where, new
                {
                    quxianId = "",
                    sheng="",
                    sheng = "",
                    pianqu = "",
                    shipAddress = "",
                    shipAddress = "",
                    shi = "",
                    quxian = "",
                    DeliverState=""
                    DeliverState = ""
@@ -1140,7 +1656,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 +1666,7 @@
                    where = where.And(n => n.sheng == obj.sheng);
                }
                if (!string.IsNullOrWhiteSpace(obj.shi))
                {
@@ -1212,14 +1728,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 +1760,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 +1784,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 +1794,7 @@
                    where = where.And(n => n.Oreder.quxian == obj.quxian);
                }
                if (!string.IsNullOrEmpty(obj.pianqu))
@@ -1295,7 +1811,7 @@
                    where = where.And(n => n.Oreder.shipAddress.Contains(obj.shipAddress));
                }
                }
                if (!string.IsNullOrEmpty(obj.EndTimeStartZone))
@@ -1303,7 +1819,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 +1834,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 +1848,17 @@
            return new WebApiCallBack()
            {
                status = true,
                data = new
                data = new
                {
                     list= data,
                    list = data,
                    totalNumbe
                }
            };
        }
        public async Task<WebApiCallBack> GetDeliverInfoOfDrver(FMStringId entity)
        {
@@ -1353,11 +1873,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 +1887,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 +1912,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 +1939,7 @@
                    DeliveredCount = count,
                    Number = thisNumber?.Number ?? count,
                    unDeliveredCount = item.nums > count ? item.nums - count : 0,
                    LessNumber= thisNumber.LessNumber,
                    LessNumber = thisNumber.LessNumber,
                });
@@ -1432,7 +1966,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 +1976,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 +1996,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 +2020,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 +2092,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 +2100,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 +2122,7 @@
                };
            }
            var countlist = await CountLessCount(order.DeliverOrderItems);
          await   _CyDbClient.AsTenant().BeginTranAsync();
            await _CyDbClient.AsTenant().BeginTranAsync();
            try
            {
                if (countlist != null)
@@ -1611,22 +2180,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 +2209,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 +2223,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 +2234,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 +2248,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 +2267,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 +2279,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 +2302,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 +2319,7 @@
                ingCountlistdata.AddRange(item.items);
            }
          var inglist=  ingCountlistdata.GroupBy(x => new
            var inglist = ingCountlistdata.GroupBy(x => new
            {
                x.ZYBName,
                x.ZYBSpecification
@@ -1756,36 +2327,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>
        /// 解析xml图片
        /// </summary>
        /// <param name="xmlstr"></param>
        /// <returns></returns>
        private  List<InquiryWorkBookModel> ParseXml( string xmlstr)
        {
            // 解析 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 +2709,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; }
    }
}