username@email.com
2024-05-15 5591c18dc3500bd3e0719bb6b28b26f7f9e7cb58
计划订单
18个文件已修改
773 ■■■■ 已修改文件
CoreCms.Net.Configuration/GlobalEnumVars.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.IServices/Order/ICoreCmsOrderServices.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.IServices/Order/ICoreCmsPlanOrderServices.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Model/Entities/Order/CoreCmsOrder.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Model/Entities/Order/CoreCmsPlanOrder.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Model/Entities/Order/CoreCmsPlanOrderItem.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Model/Entities/User/CoreCmsUser.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Model/ViewModels/DTO/OrderDTO.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Repository/Order/CoreCmsPlanOrderRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Services/Bill/CoreCmsBillRefundServices.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Services/Order/CoreCmsOrderServices.cs 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Services/Order/CoreCmsPlanOrderServices.cs 183 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Web.Admin/Controllers/Order/CoreCmsPlanOrderController.cs 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Web.Admin/wwwroot/views/corecmsplanorder/details.html 107 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Web.Admin/wwwroot/views/corecmsplanorder/edit.html 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Web.Admin/wwwroot/views/corecmsplanorder/index.html 71 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Web.WebApi/Controllers/OrderController.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Web.WebApi/Controllers/UserController.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Configuration/GlobalEnumVars.cs
@@ -667,10 +667,10 @@
        /// </summary>
        public enum PlanOrderTiJiao
        {
            [Description("未提交")]
            未提交 = 1,
            [Description("已提交")]
            提交 = 2
            [Description("未锁单")]
            未锁单 = 1,
            [Description("已锁单")]
            已锁单 = 2
        }
        /// <summary>
@@ -1025,7 +1025,12 @@
            /// 余额支付
            /// </summary>
            [Description("余额支付")]
            balancepay = 4
            balancepay = 4,
            /// <summary>
            /// 计划订单支付
            /// </summary>
            [Description("计划订单支付")]
            planorderpay = 5
        }
        #endregion
CoreCms.Net.IServices/Order/ICoreCmsOrderServices.cs
@@ -81,10 +81,11 @@
        /// <param name="requireOrder">微信自定义组件(是否需要推单,1:需要,0:不需要)</param>
        /// <param name="requiredFundType">微信自定义组件(requireOrder = 1时生效,0,非二级商户号订单,1,二级商户号订单,2,两种方式皆可(后续只会存在1))</param>
        /// <param name="traceId">微信自定义组件(跟踪ID,有效期十分钟,会影响主播归因、分享员归因等,需创建订单前调用,调用生成订单 api 时需传入该参数)</param>
        ///  <param name="planorderId">计划订单id</param>
        /// <returns></returns>
        Task<WebApiCallBack> ToAdd(int userId, int orderType, string cartIds, int receiptType, int ushipId, int storeId,
            string ladingName, string ladingMobile, string memo, int point, string couponCode,
            int source, int scene, int taxType, string taxName, string taxCode, int objectId, int teamId, int requireOrder, int requiredFundType, string traceId);
            int source, int scene, int taxType, string taxName, string taxCode, int objectId, int teamId, int requireOrder, int requiredFundType, string traceId, string planorderId);
        /// <summary>
        ///     获取订单信息
CoreCms.Net.IServices/Order/ICoreCmsPlanOrderServices.cs
@@ -55,14 +55,14 @@
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> DeleteByIdAsync(object id);
        Task<AdminUiCallBack> DeleteByIdAsync(object id, string userName);
        /// <summary>
        /// 重写删除指定ID集合的数据(批量删除)
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids);
        Task<AdminUiCallBack> DeleteByIdsAsync(string[] ids, string userName);
        #endregion
@@ -98,7 +98,7 @@
        ///     获取计划订单列表微信小程序
        /// </summary>
        /// <returns></returns>
        Task<WebApiCallBack> GetOrderList(int status = -1, int userId = 0, int page = 1, int limit = 5);
        Task<WebApiCallBack> GetOrderList(int status = -1, int userId = 0, int page = 1, int limit = 5,int money = 0);
        /// <summary>
CoreCms.Net.Model/Entities/Order/CoreCmsOrder.cs
@@ -551,5 +551,18 @@
        public System.DateTime? updateTime  { get; set; }
        
        
        /// <summary>
        /// 计划订单id    ALTER TABLE [CoreCmsOrder] ADD  [planorderId] [nvarchar](255) NULL;
        /// </summary>
        [Display(Name = "计划订单id")]
        [StringLength(maximumLength: 255, ErrorMessage = "{0}不能超过{1}字")]
        public System.String planorderId { get; set; }
    }
}
CoreCms.Net.Model/Entities/Order/CoreCmsPlanOrder.cs
@@ -213,5 +213,17 @@
        /// </summary>
        [SugarColumn(IsIgnore = true)]
        public string statusText { get; set; }
        /// <summary>
        /// 已花费金额
        /// </summary>
        [Display(Name = "已花费金额")]
        [Required(ErrorMessage = "请输入{0}")]
        public System.Decimal huaFeiAmount { get; set; }
    }
}
CoreCms.Net.Model/Entities/Order/CoreCmsPlanOrderItem.cs
@@ -94,5 +94,23 @@
        /// <summary>
        /// 数量
        /// </summary>
        [SugarColumn(IsIgnore = true)]
        public System.Int32 numsnew { get; set; }
        /// <summary>
        /// 数量
        /// </summary>
        [SugarColumn(IsIgnore = true)]
        public System.Decimal amountnew { get; set; }
        /// <summary>
        /// id
        /// </summary>
        [SugarColumn(IsIgnore = true)]
        public System.Int32 idnew { get; set; }
    }
}
CoreCms.Net.Model/Entities/User/CoreCmsUser.cs
@@ -153,5 +153,17 @@
        [SugarColumn(ColumnDescription = "删除标志 有数据就是删除")]
        [Required(ErrorMessage = "请输入{0}")]
        public System.Boolean isDelete { get; set; }
        /// <summary>
        /// 是否是计划订单用户    ALTER TABLE [CoreCmsUser] ADD  [isplanorder] [nvarchar](255) NULL;
        /// </summary>
        [Display(Name = "计划订单id")]
        [StringLength(maximumLength: 255, ErrorMessage = "{0}不能超过{1}字")]
        public System.String isplanorder { get; set; }
    }
}
CoreCms.Net.Model/ViewModels/DTO/OrderDTO.cs
@@ -185,6 +185,10 @@
        public int[] itemNumarray { get; set; }
        /// <summary>
        ///     计划订单id
        /// </summary>
        public string planorderId { get; set; }
    }
    /// <summary>
@@ -243,6 +247,11 @@
        ///     状态
        /// </summary>
        public int status { get; set; } = 0;
        /// <summary>
        ///     是否大于0
        /// </summary>
        public int money { get; set; } = 0;
    }
    /// <summary>
CoreCms.Net.Repository/Order/CoreCmsPlanOrderRepository.cs
@@ -83,6 +83,7 @@
            oldModel.createBy = entity.createBy;
            oldModel.upDataBy = entity.upDataBy;
            oldModel.isdelete = entity.isdelete;
            oldModel.huaFeiAmount = entity.huaFeiAmount;
            
            //事物处理过程结束
            var bl = await DbClient.Updateable(oldModel).ExecuteCommandHasChangeAsync();
@@ -189,6 +190,7 @@
                shipMobile = p.shipMobile,
                oldOrderAmount = p.oldOrderAmount,
                keYongAmount = p.keYongAmount,
                huaFeiAmount = p.huaFeiAmount,
                createTime = p.createTime,
                upDataTime = p.upDataTime,
                createBy = p.createBy,
@@ -218,6 +220,7 @@
                shipMobile = p.shipMobile,
                oldOrderAmount = p.oldOrderAmount,
                keYongAmount = p.keYongAmount,
                    huaFeiAmount = p.huaFeiAmount,
                createTime = p.createTime,
                upDataTime = p.upDataTime,
                createBy = p.createBy,
CoreCms.Net.Services/Bill/CoreCmsBillRefundServices.cs
@@ -39,10 +39,15 @@
        private readonly IBalancePayServices _balancePayServices;
        private readonly IAliPayServices _aliPayServices;
        private readonly IWeChatPayServices _weChatPayServices;
        private readonly ICoreCmsPlanOrderServices _planOrderServices;
        //private readonly ICoreCmsOrderServices _orderServices;
        private readonly IUnitOfWork _unitOfWork;
        public CoreCmsBillRefundServices(IUnitOfWork unitOfWork, ICoreCmsBillRefundRepository dal, ICoreCmsBillPaymentsServices billPaymentsServices, ICoreCmsMessageCenterServices messageCenterServices, ICoreCmsPaymentsServices paymentsServices, IBalancePayServices balancePayServices, IAliPayServices aliPayServices, IWeChatPayServices weChatPayServices)
        public CoreCmsBillRefundServices(IUnitOfWork unitOfWork, ICoreCmsBillRefundRepository dal, ICoreCmsBillPaymentsServices billPaymentsServices, ICoreCmsMessageCenterServices messageCenterServices, ICoreCmsPaymentsServices paymentsServices, IBalancePayServices balancePayServices, IAliPayServices aliPayServices, IWeChatPayServices weChatPayServices
            , ICoreCmsPlanOrderServices planOrderServices
            //, ICoreCmsOrderServices orderServices
            )
        {
            this._dal = dal;
            base.BaseDal = dal;
@@ -53,6 +58,8 @@
            _balancePayServices = balancePayServices;
            _aliPayServices = aliPayServices;
            _weChatPayServices = weChatPayServices;
            _planOrderServices = planOrderServices;
            //_orderServices = orderServices;
        }
@@ -236,6 +243,33 @@
            {
                jm = await _balancePayServices.Refund(info, panyMentsInfo);
            }
            ////计划订单退款
            else if (panyMentsInfo.paymentCode == GlobalEnumVars.PaymentsTypes.planorderpay.ToString())
            {
                //    //查询订单
                //  var order  =   await _orderServices.QueryByIdAsync(info.sourceId);
                var order = await _unitOfWork.GetDbClient().Queryable<CoreCmsOrder>().Where(p => p.orderId == info.sourceId).FirstAsync();
                if (order == null)
                {
                    _unitOfWork.RollbackTran();
                    jm.msg = "订单获取失败";
                    return jm;
                }
                //查询计划订单
                var planOrder = await _planOrderServices.QueryByIdAsync(order.planorderId);
                //上面保存好订单表,下面保存订单的其他信息
                if (planOrder == null || planOrder.isdelete == true)
                {
                    _unitOfWork.RollbackTran();
                    jm.msg = "计划订单获取失败";
                    return jm;
                }
                planOrder.huaFeiAmount = planOrder.huaFeiAmount - panyMentsInfo.money;
                //修改计划订单的已花费金额
                await _planOrderServices.UpdateAsync(planOrder);
            }
            if (jm.status)
            {
CoreCms.Net.Services/Order/CoreCmsOrderServices.cs
@@ -81,6 +81,7 @@
        private readonly IRedisOperationRepository _redisOperationRepository;
        private readonly ICoreCmsUserWeChatInfoServices _userWeChatInfoServices;
        private readonly WeChat.Service.HttpClients.IWeChatApiHttpClientFactory _weChatApiHttpClientFactory;
        private readonly ICoreCmsPlanOrderServices _planOrderServices;
        private IUnitOfWork _unitOfWork;
@@ -108,7 +109,8 @@
            , ICoreCmsPaymentsServices paymentsServices
            , ICoreCmsBillRefundServices billRefundServices
            , ICoreCmsBillLadingServices billLadingServices
            , ICoreCmsBillReshipServices billReshipServices, ICoreCmsMessageCenterServices messageCenterServices, ICoreCmsGoodsCommentServices goodsCommentServices, ISysTaskLogServices taskLogServices, ICoreCmsPromotionRecordServices promotionRecordServices, IRedisOperationRepository redisOperationRepository, ICoreCmsUserWeChatInfoServices userWeChatInfoServices, IWeChatApiHttpClientFactory weChatApiHttpClientFactory, IUnitOfWork unitOfWork)
            , ICoreCmsBillReshipServices billReshipServices, ICoreCmsMessageCenterServices messageCenterServices, ICoreCmsGoodsCommentServices goodsCommentServices, ISysTaskLogServices taskLogServices, ICoreCmsPromotionRecordServices promotionRecordServices, IRedisOperationRepository redisOperationRepository, ICoreCmsUserWeChatInfoServices userWeChatInfoServices, IWeChatApiHttpClientFactory weChatApiHttpClientFactory, IUnitOfWork unitOfWork
            , ICoreCmsPlanOrderServices planOrderServices)
        {
            this._dal = dal;
            base.BaseDal = dal;
@@ -145,6 +147,7 @@
            _userWeChatInfoServices = userWeChatInfoServices;
            _weChatApiHttpClientFactory = weChatApiHttpClientFactory;
            _unitOfWork = unitOfWork;
            _planOrderServices = planOrderServices;
        }
        #region 查询团购秒杀下单数量(获取货品的秒杀团购数据)
@@ -226,8 +229,9 @@
        /// <param name="requireOrder">微信自定义组件(是否需要推单,1:需要,0:不需要)</param>
        /// <param name="requiredFundType">微信自定义组件(requireOrder = 1时生效,0,非二级商户号订单,1,二级商户号订单,2,两种方式皆可(后续只会存在1))</param>
        /// <param name="traceId">微信自定义组件(跟踪ID,有效期十分钟,会影响主播归因、分享员归因等,需创建订单前调用,调用生成订单 api 时需传入该参数)</param>
        /// <param name="planorderId">计划订单id</param>
        /// <returns></returns>
        public async Task<WebApiCallBack> ToAdd(int userId, int orderType, string cartIds, int receiptType, int ushipId, int storeId, string ladingName, string ladingMobile, string memo, int point, string couponCode, int source, int scene, int taxType, string taxName, string taxCode, int objectId, int teamId, int requireOrder, int requiredFundType, string traceId)
        public async Task<WebApiCallBack> ToAdd(int userId, int orderType, string cartIds, int receiptType, int ushipId, int storeId, string ladingName, string ladingMobile, string memo, int point, string couponCode, int source, int scene, int taxType, string taxName, string taxCode, int objectId, int teamId, int requireOrder, int requiredFundType, string traceId, string planorderId)
        {
            var jm = new WebApiCallBack() { methodDescription = "创建订单" };
            try
@@ -283,6 +287,7 @@
                order.confirmStatus = (int)GlobalEnumVars.OrderConfirmStatus.ReceiptNotConfirmed;
                order.createTime = DateTime.Now;
                order.scene = scene;
                order.planorderId = planorderId;
                //上面保存好订单表,下面保存订单的其他信息
                if (orderItems == null)
@@ -510,9 +515,107 @@
                }
                else
                {
                    if (!string.IsNullOrEmpty(planorderId))
                    {
                        //查询计划订单
                      var planOrder = await _planOrderServices.QueryByIdAsync(planorderId);
                        //上面保存好订单表,下面保存订单的其他信息
                        if (planOrder == null || planOrder.isdelete == true)
                        {
                            _unitOfWork.RollbackTran();
                            jm.msg = "计划订单获取失败";
                            return jm;
                        }
                        if (planOrder.status != 2)
                        {
                            _unitOfWork.RollbackTran();
                            jm.msg = "计划订单没有锁单";
                            return jm;
                        }
                        if ((planOrder.keYongAmount - planOrder.huaFeiAmount - order.orderAmount)<0)
                        {
                            _unitOfWork.RollbackTran();
                            jm.msg = "计划订单可用余额不足";
                            return jm;
                        }
                        planOrder.huaFeiAmount = planOrder.huaFeiAmount + order.orderAmount;
                        //修改计划订单的已花费金额
                       var crr  = await _planOrderServices.UpdateAsync(planOrder);
                        //创建支付单
                        var billPayments = new CoreCmsBillPayments();
                        billPayments.paymentId = CommonHelper.GetSerialNumberType((int)GlobalEnumVars.SerialNumberType.支付单编号);
                        billPayments.sourceId = order.orderId;
                        billPayments.money = order.orderAmount;
                        billPayments.userId = userId;
                        billPayments.type = order.orderType;
                        billPayments.status = (int)GlobalEnumVars.BillPaymentsStatus.Payed;
                        billPayments.paymentCode = GlobalEnumVars.PaymentsTypes.planorderpay.ToString();
                        billPayments.ip = _httpContextAccessor.HttpContext?.Connection.RemoteIpAddress != null ? _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString() : "127.0.0.1";
                        billPayments.payedMsg = "计划订单直接支付成功";
                        billPayments.parameters = "";
                        billPayments.createTime = DateTime.Now;
                        billPayments.updateTime = DateTime.Now;
                        await _billPaymentsServices.InsertAsync(billPayments);
                        //调整直接支付成功
                        await _dal.UpdateAsync(p => new CoreCmsOrder()
                        {
                            payedAmount = order.orderAmount,
                            paymentTime = DateTime.Now,
                            updateTime = DateTime.Now,
                            paymentCode = GlobalEnumVars.PaymentsTypes.planorderpay.ToString(),
                            payStatus = (int)GlobalEnumVars.OrderPayStatus.Yes,
                            orderAmount = order.orderAmount
                        }, p => p.orderId == order.orderId);
                        //记录订单日志
                        orderLog = new CoreCmsOrderLog
                        {
                            userId = userId,
                            orderId = order.orderId,
                            type = (int)GlobalEnumVars.OrderLogTypes.LOG_TYPE_PAY,
                            msg = "计划订单直接支付成功",
                            data = JsonConvert.SerializeObject(order),
                            createTime = DateTime.Now
                        };
                        await _orderLogServices.InsertAsync(orderLog);
                        //如果是门店自提,应该自动跳过发货,生成提货单信息,使用提货单核销。
                        if (order.receiptType == (int)GlobalEnumVars.OrderReceiptType.SelfDelivery)
                        {
                            var allConfigs = await _settingServices.GetConfigDictionaries();
                            var storeOrderAutomaticDelivery = CommonHelper
                                .GetConfigDictionary(allConfigs, SystemSettingConstVars.StoreOrderAutomaticDelivery)
                                .ObjectToInt(1);
                            if (storeOrderAutomaticDelivery == 1)
                            {
                                //订单自动发货
                                await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.OrderAutomaticDelivery, JsonConvert.SerializeObject(order));
                            }
                        }
                        //用户升级处理
                       // await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.UserUpGrade, JsonConvert.SerializeObject(order));
                        //发送支付成功信息,增加发送内容
                        await _messageCenterServices.SendMessage(order.userId, GlobalEnumVars.PlatformMessageTypes.OrderPayed.ToString(), JObject.FromObject(order));
                        await _messageCenterServices.SendMessage(order.userId, GlobalEnumVars.PlatformMessageTypes.SellerOrderNotice.ToString(), JObject.FromObject(order));
                        //易联云打印机打印
                        await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.OrderPrint, JsonConvert.SerializeObject(order));
                    }
                    else
                    {
                    await _messageCenterServices.SendMessage(order.userId, GlobalEnumVars.PlatformMessageTypes.CreateOrder.ToString(), JObject.FromObject(order));
                }
                }
                _unitOfWork.CommitTran();
                jm.status = true;
CoreCms.Net.Services/Order/CoreCmsPlanOrderServices.cs
@@ -36,6 +36,7 @@
using static SKIT.FlurlHttpClient.Wechat.Api.Models.ScanProductAddV2Request.Types.Product.Types;
using NPOI.SS.Formula.Functions;
using CoreCms.Net.Model.FromBody;
using Essensoft.Paylink.Alipay.Domain;
namespace CoreCms.Net.Services
@@ -101,9 +102,72 @@
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> DeleteByIdAsync(object id)
        public async Task<AdminUiCallBack> DeleteByIdAsync(object id,string userName)
        {
            return await _dal.DeleteByIdAsync(id);
            var jm = new AdminUiCallBack() ;
            try
            {
                //开始事务处理
                _unitOfWork.BeginTran();
                var order = await _dal.QueryByIdAsync(id);
                if (order.status == 2)  //&& string.IsNullOrEmpty(houtai)
                {
                    _unitOfWork.RollbackTran();
                    jm.code = 1;
                    jm.msg = "订单已经锁单不能重复锁单";
                    return jm;
                }
                order.upDataBy = userName;
                order.upDataTime = DateTime.Now;
                //order.keYongAmount = order.oldOrderAmount - order.orderAmount;
                    order.status = 2;
                //if (order.keYongAmount > 0)
                //{
                //    //修改用户余额
                //    var jmsss = await _coreCmsUserServices.UpdateBalance(order.userId, order.keYongAmount, "用户计划订单" + order.orderId + "款项结余");
                //}
                //}
                //校验后再创建订单
                var jmss = await _dal.UpdateAsync(order);
                _unitOfWork.CommitTran();
                jm.code = 0;
                jm.data = order;
                jm.msg = "锁单成功";
            }
            catch (Exception e)
            {
                _unitOfWork.RollbackTran();
                jm.code = 1;
                jm.msg = e.ToString();
            }
            return jm;
            //return await _dal.DeleteByIdAsync(id);
        }
        /// <summary>
@@ -111,9 +175,77 @@
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids)
        public async Task<AdminUiCallBack> DeleteByIdsAsync(string[] ids, string userName)
        {
            return await _dal.DeleteByIdsAsync(ids);
            var jm = new AdminUiCallBack();
            try
            {
                //开始事务处理
                _unitOfWork.BeginTran();
                var orders = await _dal.QueryListByClauseAsync(p => ids.Contains(p.orderId), p => p.orderId, OrderByType.Asc, true);
                foreach (var order in orders)
                {
                    if (order.status != 2)  //&& string.IsNullOrEmpty(houtai)
                    {
                        order.upDataBy = userName;
                        order.upDataTime = DateTime.Now;
                        order.status = 2;
                        //校验后再创建订单
                        var jmss = await _dal.UpdateAsync(order);
                    }
                    //order.keYongAmount = order.oldOrderAmount - order.orderAmount;
                    //if (order.keYongAmount > 0)
                    //{
                    //    //修改用户余额
                    //    var jmsss = await _coreCmsUserServices.UpdateBalance(order.userId, order.keYongAmount, "用户计划订单" + order.orderId + "款项结余");
                    //}
                    //}
                }
                _unitOfWork.CommitTran();
                jm.code = 0;
                jm.data = orders;
                jm.msg = "锁单成功";
            }
            catch (Exception e)
            {
                _unitOfWork.RollbackTran();
                jm.code = 1;
                jm.msg = e.ToString();
            }
            return jm;
            //return await _dal.DeleteByIdsAsync(ids);
        }
        #endregion
@@ -155,7 +287,7 @@
        /// 获取计划订单列表微信小程序
        /// </summary>
        /// <returns></returns>
        public async Task<WebApiCallBack> GetOrderList(int status = -1, int userId = 0, int page = 1, int limit = 5)
        public async Task<WebApiCallBack> GetOrderList(int status = -1, int userId = 0, int page = 1, int limit = 5, int money = 0)
        {
            var jm = new WebApiCallBack { status = true };
@@ -171,6 +303,10 @@
                where = where.And(p => p.userId == userId);
            }
            if (money > 0)
            {
                where = where.And(p => p.keYongAmount > p.huaFeiAmount);
            }
            var list = await _dal.QueryPageAsync(where, p => p.createTime, OrderByType.Desc, page, limit);
            if (list!=null && list.Count>0)
@@ -179,7 +315,7 @@
                {
                    //获取相关状态描述说明转换
                    order.statusText = EnumHelper.GetEnumDescriptionByValue<GlobalEnumVars.PlanOrderTiJiao>(order.status);
                    order.keYongAmount = order.keYongAmount - order.huaFeiAmount;
                }
            }
            jm.data = new
@@ -223,7 +359,7 @@
                {
                    _unitOfWork.RollbackTran();
                    jm.status = false;
                    jm.otherData = "订单已经提交不能修改";
                    jm.otherData = "订单已经锁单不能修改";
                    return jm;
                }
@@ -251,30 +387,34 @@
                order.orderAmount = orderAmount;
                order.keYongAmount = order.oldOrderAmount - order.orderAmount;
                if (order.keYongAmount < 0)
                if (order.keYongAmount < order.huaFeiAmount)
                {
                    _unitOfWork.RollbackTran();
                    jm.status = false;
                    jm.otherData = "订单金额超出计划金额";
                    jm.otherData = "可用余额不足";
                    return jm;
                }
                var keYongAmount = oldorderAmount - orderAmount;
                //var keYongAmount = oldorderAmount - orderAmount;
                //if (order.status == 1)
                //{
                //    keYongAmount = order.oldOrderAmount - order.orderAmount;
                //}
                if (status == 2)
                {
                    order.status = 2;
                //if (status == 2)
                //{
                //    order.status = 2;
                    if (keYongAmount != 0)
                    {
                        //修改用户余额
                //    if (keYongAmount != 0)
                //    {
                //        //修改用户余额
                        var jmsss = await _coreCmsUserServices.UpdateBalance(order.userId, keYongAmount, "用户计划订单"+ order.orderId + "款项结余");
                    }
                //        var jmsss = await _coreCmsUserServices.UpdateBalance(order.userId, keYongAmount, "用户计划订单"+ order.orderId + "款项结余");
                //    }
                        
                    
                    
                }
                //}
                //校验后再创建订单
@@ -337,6 +477,8 @@
                if (user != null)
                {
                    order.userId = user.id;
                    user.isplanorder = "是";
                  var users = await _unitOfWork.GetDbClient().Updateable(user).ExecuteCommandAsync();
                }
                else
                {
@@ -353,6 +495,8 @@
                    if (user != null)
                    {
                        order.userId = user.id;
                        user.isplanorder = "是";
                        var users = await _unitOfWork.GetDbClient().Updateable(user).ExecuteCommandAsync();
                    }
                    else
                    {
@@ -428,6 +572,7 @@
                order.orderAmount = orderAmount;
                order.oldOrderAmount = orderAmount;
                order.keYongAmount = 0;
                order.huaFeiAmount = 0;
                //校验后再创建订单
CoreCms.Net.Web.Admin/Controllers/Order/CoreCmsPlanOrderController.cs
@@ -43,6 +43,7 @@
using static SKIT.FlurlHttpClient.Wechat.Api.Models.CardCreateRequest.Types.MembershipCard.Types.Base.Types;
using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinExpressDeliveryOpenMessageGetDeliveryListResponse.Types;
using System.Threading.Channels;
using System.Collections.Generic;
namespace CoreCms.Net.Web.Admin.Controllers
{
@@ -64,6 +65,8 @@
        private readonly IHttpContextUser _user;
        private readonly ICoreCmsPlanOrderServices _planOrderServices;
        private readonly ICoreCmsAreaServices _areaServices;
        private readonly ICoreCmsOrderServices _orderServices;
        private readonly ICoreCmsOrderItemServices _orderItemServices;
        /// <summary>
@@ -76,6 +79,8 @@
            , IHttpContextUser user
            , ICoreCmsPlanOrderServices planOrderServices
            , ICoreCmsAreaServices areaServices
              , ICoreCmsOrderServices orderServices
         , ICoreCmsOrderItemServices orderItemServices
            )
        {
            _webHostEnvironment = webHostEnvironment;
@@ -85,6 +90,9 @@
            _user = user;
            _planOrderServices = planOrderServices;
            _areaServices = areaServices;
            _orderServices = orderServices;
            _orderItemServices = orderItemServices;
        }
        #region 获取列表============================================================
@@ -259,7 +267,7 @@
                {
                    //获取相关状态描述说明转换
                    order.statusText = EnumHelper.GetEnumDescriptionByValue<GlobalEnumVars.PlanOrderTiJiao>(order.status);
                    order.keYongAmount = order.keYongAmount - order.huaFeiAmount;
                }
            }
@@ -368,17 +376,27 @@
            }
            //获取相关状态描述说明转换
            model.statusText = EnumHelper.GetEnumDescriptionByValue<GlobalEnumVars.PlanOrderTiJiao>(model.status);
            model.keYongAmount = model.keYongAmount - model.huaFeiAmount;
            var modelItem1 = await _planOrderItemServices.QueryListByClauseAsync(p => p.orderId == entity.id && p.isOld == true, p => p.specification, OrderByType.Asc);
            var modelItem2 = await _planOrderItemServices.QueryListByClauseAsync(p => p.orderId == entity.id && p.isOld == false, p => p.specification, OrderByType.Asc);
            foreach (var coreCmsPlanOrderItem in modelItem1)
            {
                var coreCmsPlanOrderItem1 = modelItem2.Where(p => p.name == coreCmsPlanOrderItem.name && p.specification == coreCmsPlanOrderItem.specification).FirstOrDefault();
                if (coreCmsPlanOrderItem1 != null)
                {
                    coreCmsPlanOrderItem.idnew = coreCmsPlanOrderItem1.id;
                    coreCmsPlanOrderItem.numsnew = coreCmsPlanOrderItem1.nums;
                    coreCmsPlanOrderItem.amountnew = coreCmsPlanOrderItem1.amount;
                }
            }
            jm.data = new
            {
                model,
                modelItem1,
                modelItem2
                modelItem1
            };
            jm.code = 0;
           // jm.data = model;
@@ -471,7 +489,7 @@
                jm.msg = GlobalConstVars.DataisNo;
                return jm;
            }
            jm = await _CoreCmsPlanOrderServices.DeleteByIdAsync(entity.id);
            jm = await _CoreCmsPlanOrderServices.DeleteByIdAsync(entity.id , _user.Name);
            return jm;
        }
@@ -486,9 +504,9 @@
        /// <returns></returns>
        [HttpPost]
        [Description("批量删除")]
        public async Task<AdminUiCallBack> DoBatchDelete([FromBody]FMArrayIntIds entity)
        public async Task<AdminUiCallBack> DoBatchDelete([FromBody]FMArrayStringIds entity)
        {
            var jm = await _CoreCmsPlanOrderServices.DeleteByIdsAsync(entity.id);
            var jm = await _CoreCmsPlanOrderServices.DeleteByIdsAsync(entity.id, _user.Name);
            return jm;
        }
@@ -515,17 +533,46 @@
            }
            //获取相关状态描述说明转换
            model.statusText = EnumHelper.GetEnumDescriptionByValue<GlobalEnumVars.PlanOrderTiJiao>(model.status);
            model.keYongAmount = model.keYongAmount - model.huaFeiAmount;
            var modelItem1 = await _planOrderItemServices.QueryListByClauseAsync(p => p.orderId == entity.id && p.isOld == true, p => p.specification, OrderByType.Asc);
            var modelItem2 = await _planOrderItemServices.QueryListByClauseAsync(p => p.orderId == entity.id && p.isOld == false, p => p.specification, OrderByType.Asc);
          
            foreach(var coreCmsPlanOrderItem in modelItem1)
            {
             var  coreCmsPlanOrderItem1 =   modelItem2.Where(p => p.name == coreCmsPlanOrderItem.name && p.specification == coreCmsPlanOrderItem.specification).FirstOrDefault();
                if (coreCmsPlanOrderItem1 != null)
                {
                    coreCmsPlanOrderItem.idnew = coreCmsPlanOrderItem1.id;
                    coreCmsPlanOrderItem.numsnew = coreCmsPlanOrderItem1.nums;
                    coreCmsPlanOrderItem.amountnew = coreCmsPlanOrderItem1.amount;
                }
            }
            var coreCmsOrderItems = new List<CoreCmsOrderItem>();
            //查询用计划订单积分购买的订单
          var coreCmsOrders   =  await _orderServices.QueryListByClauseAsync(p => p.planorderId == model.orderId && p.isdel == false);
            if(coreCmsOrders!=null && coreCmsOrders.Count > 0)
            {
                var orderids = new List<string>();
                foreach(var coreCmsOrder in coreCmsOrders)
                {
                    orderids.Add(coreCmsOrder.orderId);
                }
                 coreCmsOrderItems = await _orderItemServices.QueryListByClauseAsync(p => orderids.Contains(p.orderId));
            }
            jm.data = new
            {
                model,
                modelItem1,
                modelItem2
                coreCmsOrderItems
            };
            jm.code = 0;
            //jm.data = model;
CoreCms.Net.Web.Admin/wwwroot/views/corecmsplanorder/details.html
@@ -7,16 +7,16 @@
        <tbody>
            <tr>
                <td width="25%">
                <td width="17%">
                    <label for="orderId">订单号</label>
                </td>
                <td width="25%">
                <td width="34%" colspan="2">
                    {{ d.params.data.model.orderId || '' }}
                </td>
                <td width="25%">
                <td width="17%">
                    <label for="shipAddress">学校</label>
                </td>
                <td width="25%">
                <td width="34%" colspan="2">
                    {{ d.params.data.model.shipAddress || '' }}
                </td>
            </tr>
@@ -27,13 +27,13 @@
                <td>
                    <label for="shi">市</label>
                </td>
                <td>
                <td colspan="2">
                    {{ d.params.data.model.shi || '' }}
                </td>
                <td>
                    <label for="quxian">区县</label>
                </td>
                <td>
                <td colspan="2">
                    {{ d.params.data.model.quxian || '' }}
                </td>
            </tr>
@@ -43,13 +43,13 @@
                <td>
                    <label for="pianqu">片区</label>
                </td>
                <td>
                <td colspan="2">
                    {{ d.params.data.model.pianqu || '' }}
                </td>
                <td>
                    <label for="quxian">收货地址</label>
                </td>
                <td>
                <td colspan="2">
                    {{ d.params.data.model.shouhuoAddress || '' }}
                </td>
            </tr>
@@ -58,13 +58,13 @@
                <td>
                    <label for="shipName">联系人</label>
                </td>
                <td>
                <td colspan="2">
                    {{ d.params.data.model.shipName || '' }}
                </td>
                <td>
                    <label for="shipMobile">联系电话</label>
                </td>
                <td>
                <td colspan="2">
                    {{ d.params.data.model.shipMobile || '' }}
                </td>
            </tr>
@@ -73,13 +73,13 @@
                <td>
                    <label for="oldOrderAmount">计划金额</label>
                </td>
                <td>
                <td colspan="2">
                    {{ d.params.data.model.oldOrderAmount || '' }}
                </td>
                <td>
                    <label for="orderAmount">调整金额</label>
                </td>
                <td>
                <td style="color:red;" colspan="2">
                    {{ d.params.data.model.orderAmount || '' }}
                </td>
            </tr>
@@ -89,13 +89,13 @@
                <td>
                    <label for="keYongAmount">可用余额</label>
                </td>
                <td>
                    {{ d.params.data.model.keYongAmount || '' }}
                <td style="color:red;" colspan="2">
                    {{ d.params.data.model.keYongAmount}}
                </td>
                <td>
                    <label for="status">订单状态</label>
                </td>
                <td>
                <td colspan="2">
                    {{ d.params.data.model.statusText || '' }}
                </td>
            </tr>
@@ -104,23 +104,23 @@
                <td>
                    <label for="createTime">建立时间</label>
                </td>
                <td>
                <td colspan="2">
                    {{ d.params.data.model.createTime || '' }}
                </td>
                <td>
                    <label for="upDataTime">修改时间</label>
                </td>
                <td>
                <td colspan="2">
                    {{ d.params.data.model.upDataTime || '' }}
                </td>
            </tr>
            <tr>
            <!--<tr>
                <td style="background-color:lightsteelblue;" colspan="4">
                    原订单
                </td>
            </tr>
    </tr>-->
            <tr>
                <td style="background-color:lightsteelblue;">
                    商品名称
@@ -129,10 +129,16 @@
                    单价(元)
                </td>
                <td style="background-color:lightsteelblue;">
                    数量
                    计划数量
                </td>
                <td style="background-color:lightsteelblue;">
                    总价(元)
                    计划金额(元)
                </td>
                <td style="background-color:lightsteelblue;">
                    调整数量
                </td>
                <td style="background-color:lightsteelblue;">
                    调整金额(元)
                </td>
            </tr>
@@ -150,12 +156,63 @@
                <td>
                    {{ item.amount }}
                </td>
                <td>
                    {{ item.numsnew }}
                </td>
                <td>
                    {{ item.amountnew }}
                </td>
            </tr>
            {{# }); }}
            <tr>
                <td style="background-color:lightsteelblue;" colspan="6">
                    普通商品
                </td>
            </tr>
            <tr>
                <td style="background-color:lightsteelblue;">
                    商品名称
                </td>
                <td style="background-color:lightsteelblue;">
                    单价(元)
                </td>
                <td style="background-color:lightsteelblue;">
                    数量
                </td>
                <td style="background-color:lightsteelblue;">
                    金额(元)
                </td>
                <td style="background-color:lightsteelblue;">
                </td>
                <td style="background-color:lightsteelblue;">
                </td>
            </tr>
            {{# layui.each(d.params.data.coreCmsOrderItems, function(index, item){ }}
            <tr>
                <td>
                    {{ item.name }}  {{ item.addon }}
                </td>
                <td>
                    {{ item.price }}
                </td>
                <td>
                    {{ item.nums }}
                </td>
                <td>
                    {{ item.amount }}
                </td>
                <td>
                </td>
                <td>
                </td>
            </tr>
            {{# }); }}
            <tr>
            <!--<tr>
                <td style="background-color:lightsteelblue;" colspan="4">
                    修改订单
                </td>
@@ -191,7 +248,7 @@
                    {{ item.amount }}
                </td>
            </tr>
            {{# }); }}
     {{# }); }}-->
        </tbody>
    </table>
CoreCms.Net.Web.Admin/wwwroot/views/corecmsplanorder/edit.html
@@ -9,16 +9,16 @@
            <tbody>
                <tr>
                    <td width="25%">
                    <td width="17%">
                        <label for="orderId">订单号</label>
                    </td>
                    <td width="25%">
                    <td width="34%" colspan="2">
                        {{ d.params.data.model.orderId || '' }}
                    </td>
                    <td width="25%">
                    <td width="17%">
                        <label for="shipAddress">学校</label>
                    </td>
                    <td width="25%">
                    <td width="34%" colspan="2">
                        {{ d.params.data.model.shipAddress || '' }}
                    </td>
                </tr>
@@ -29,13 +29,13 @@
                    <td>
                        <label for="shi">市</label>
                    </td>
                    <td>
                    <td  colspan="2">
                        {{ d.params.data.model.shi || '' }}
                    </td>
                    <td>
                        <label for="quxian">区县</label>
                    </td>
                    <td>
                    <td  colspan="2">
                        {{ d.params.data.model.quxian || '' }}
                    </td>
                </tr>
@@ -45,13 +45,13 @@
                    <td>
                        <label for="pianqu">片区</label>
                    </td>
                    <td>
                    <td  colspan="2">
                        {{ d.params.data.model.pianqu || '' }}
                    </td>
                    <td>
                        <label for="quxian">收货地址</label>
                    </td>
                    <td>
                    <td  colspan="2">
                        {{ d.params.data.model.shouhuoAddress || '' }}
                    </td>
                </tr>
@@ -60,13 +60,13 @@
                    <td>
                        <label for="shipName">联系人</label>
                    </td>
                    <td>
                    <td  colspan="2">
                        {{ d.params.data.model.shipName || '' }}
                    </td>
                    <td>
                        <label for="shipMobile">联系电话</label>
                    </td>
                    <td>
                    <td  colspan="2">
                        {{ d.params.data.model.shipMobile || '' }}
                    </td>
                </tr>
@@ -75,14 +75,14 @@
                    <td>
                        <label for="oldOrderAmount">计划金额</label>
                    </td>
                    <td >
                    <td  colspan="2">
                        <input id="oldOrderAmount" name="oldOrderAmount" type="number" class="layui-input" value="{{ d.params.data.model.oldOrderAmount || '' }}" readonly="readonly" />   
                    </td>
                    <td>
                        <label for="orderAmount">调整金额</label>
                    </td>
                    <td>
                        <input  id="orderAmount" name="orderAmount" type="number" class="layui-input" value="{{ d.params.data.model.orderAmount || '' }}" readonly="readonly" />
                    <td  colspan="2">
                        <input  id="orderAmount" style="color:red;" name="orderAmount" type="number" class="layui-input" value="{{ d.params.data.model.orderAmount || '' }}" readonly="readonly" />
                    </td>
                </tr>
@@ -91,13 +91,14 @@
                    <td >
                        <label for="keYongAmount">可用余额</label>
                    </td>
                    <td>
                        <input id="keYongAmount" name="keYongAmount" type="number" class="layui-input" value="{{ d.params.data.model.keYongAmount || '' }}" readonly="readonly" />
                    <td colspan="2">
                        <input type="hidden" name="huaFeiAmount" id="huaFeiAmount" value="{{d.params.data.model.huaFeiAmount }}">
                        <input id="keYongAmount" style="color:red;" name="keYongAmount" type="number" class="layui-input" value="{{ d.params.data.model.keYongAmount }}" readonly="readonly" />
                    </td>
                    <td>
                        <label for="status">订单状态</label>
                    </td>
                    <td>
                    <td  colspan="2">
                        {{ d.params.data.model.statusText || '' }}
                    </td>
                </tr>
@@ -106,23 +107,23 @@
                    <td>
                        <label for="createTime">建立时间</label>
                    </td>
                    <td>
                    <td  colspan="2">
                        {{ d.params.data.model.createTime || '' }}
                    </td>
                    <td>
                        <label for="upDataTime">修改时间</label>
                    </td>
                    <td>
                    <td  colspan="2">
                        {{ d.params.data.model.upDataTime || '' }}
                    </td>
                </tr>
                <tr>
                <!--<tr>
                    <td style="background-color:lightsteelblue;" colspan="4">
                        原订单
                    </td>
                </tr>
                </tr>-->
                <tr>
                    <td style="background-color:lightsteelblue;">
                        商品名称
@@ -131,20 +132,28 @@
                        单价(元)
                    </td>
                    <td style="background-color:lightsteelblue;">
                        数量
                        计划数量
                    </td>
                    <td style="background-color:lightsteelblue;">
                        总价(元)
                        计划金额(元)
                    </td>
                    <td style="background-color:lightsteelblue;">
                        调整数量
                    </td>
                    <td style="background-color:lightsteelblue;">
                        调整金额(元)
                    </td>
                </tr>
                {{# layui.each(d.params.data.modelItem1, function(index, item){ }}
                <tr>
                    <td>
                    <input type="hidden" name="itemIdarray" value="{{item.idnew || '' }}">
                        {{ item.name }}   {{ item.specification }}
                    </td>
                    <td>
                        {{ item.price }}
                    <input type="hidden" name="price" value="{{item.price || '' }}">
                    </td>
                    <td>
                        {{ item.nums }}
@@ -152,12 +161,20 @@
                    <td>
                        {{ item.amount }}
                    </td>
                <td>
                    <input name="itemNumarray" lay-verType="tips" type="number" min="0" max="99999999" lay-verify="required|number" class="layui-input" placeholder="请输入数量" lay-reqText="请输入数量" value="{{ item.numsnew }}" onchange="changenum('{{ index }}')" />
                </td>
                <td>
                    <input name="amount" type="number" class="layui-input" value="{{ item.amountnew }}" readonly="readonly" />
                </td>
                </tr>
                {{# }); }}
                <tr>
                <!--<tr>
                    <td style="background-color:lightsteelblue;" colspan="4">
                        修改订单
                    </td>
@@ -176,6 +193,7 @@
                    <td style="background-color:lightsteelblue;">
                        总价(元)
                    </td>
                </tr>
                {{# layui.each(d.params.data.modelItem2, function(index, item){ }}
@@ -197,7 +215,7 @@
                        <input name="amount"  type="number" class="layui-input" value="{{ item.amount }}" readonly="readonly"  />
                    </td>
                </tr>
                {{# }); }}
                {{# }); }}-->
            </tbody>
        </table>
@@ -327,16 +345,19 @@
           
        }
        var huaFeiAmount = $('#huaFeiAmount').val();
        $('#orderAmount').val(zongjia);
       
      
        var yue = (parseFloat($('#oldOrderAmount').val()) - zongjia).toFixed(2);
        var yue = (parseFloat($('#oldOrderAmount').val()) - zongjia - parseFloat($('#huaFeiAmount').val())).toFixed(2);
        $('#keYongAmount').val(yue);
        if (yue < 0) {
            layer.msg("订单金额超出计划金额");
            layer.msg("可用余额不足");
        }
       
    }
CoreCms.Net.Web.Admin/wwwroot/views/corecmsplanorder/index.html
@@ -40,8 +40,8 @@
                <div class="layui-input-inline">
                    <select name="status">
                        <option value="">请选择</option>
                        <option value="1">未提交</option>
                        <option value="2">已提交</option>
                        <option value="1">未锁单</option>
                        <option value="2">已锁单</option>
                    </select>
                </div>
            </div>
@@ -146,25 +146,32 @@
    </div>-->
            <div class="layui-inline">
                <button class="layui-btn layui-btn-sm" lay-submit lay-filter="LAY-app-CoreCmsPlanOrder-search"><i class="layui-icon layui-icon-search"></i>筛选</button>
                <button class="layui-btn layui-btn-sm" lay-submit lay-filter="LAY-app-doBatchDelete"><i class="layui-icon layui-icon-add-circle"></i>批量锁单</button>
                <button type="button" class="layui-btn layui-btn-sm" id="upIndexPopupWindowImageUrlBtn">上传计划订单</button>
                <button class="layui-btn layui-btn-sm" lay-submit lay-filter="LAY-app-selectExportExcel"><i class="layui-icon layui-icon-add-circle"></i>选择导出</button>
                <button class="layui-btn layui-btn-sm" lay-submit lay-filter="LAY-app-queryExportExcel"><i class="layui-icon layui-icon-download-circle"></i>查询导出</button>
                <a class="layui-btn layui-btn-sm" href="/static/jihuageshi/上传计划订单.xlsx">上传模板</a>
            </div>
        </div>
    </div>
</script>
<script type="text/html" id="LAY-app-CoreCmsPlanOrder-pagebar">
    <div class="layui-btn-container">
        <!--<button class="layui-btn layui-btn-sm" lay-event="addData"><i class="layui-icon layui-icon-add-1"></i>添加数据</button>
    <button class="layui-btn layui-btn-sm" lay-event="batchDelete"><i class="layui-icon layui-icon-delete"></i>批量删除</button>-->
        <button type="button" class="layui-btn layui-btn-sm" id="upIndexPopupWindowImageUrlBtn">上传计划订单</button>
        <!--<button type="button" class="layui-btn layui-btn-sm" id="upIndexPopupWindowImageUrlBtn">上传计划订单</button>
        <button class="layui-btn layui-btn-sm" lay-event="selectExportExcel"><i class="layui-icon layui-icon-add-circle"></i>选择导出</button>
        <button class="layui-btn layui-btn-sm" lay-event="queryExportExcel"><i class="layui-icon layui-icon-download-circle"></i>查询导出</button>
        <a class="layui-btn layui-btn-sm" href="/static/jihuageshi/上传计划订单.xlsx"  >上传模板</a>
        <a class="layui-btn layui-btn-sm" href="/static/jihuageshi/上传计划订单.xlsx"  >上传模板</a>-->
    </div>
</script>
<script type="text/html" id="LAY-app-CoreCmsPlanOrder-tableBox-bar">
    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看</a>
    <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
    <a class="layui-btn layui-btn-xs" lay-event="edit">修改</a>
    <a class="layui-btn layui-btn-xs" lay-event="del">锁单</a>
    <!--<a class="layui-btn layui-btn-danger layui-btn-xs" data-dropdown="#CoreCmsPlanOrderTbDelDrop{{d.LAY_INDEX}}" no-shade="true">删除</a>-->
    <div class="dropdown-menu-nav dropdown-popconfirm dropdown-top-right layui-hide" id="CoreCmsPlanOrderTbDelDrop{{d.LAY_INDEX}}"
         style="max-width: 200px;white-space: normal;min-width: auto;margin-left: 10px;">
@@ -210,6 +217,26 @@
                        searchwhere = field;
                        //执行重载
                        table.reloadData('LAY-app-CoreCmsPlanOrder-tableBox',{ where: field });
                    });
                //监听搜索
                form.on('submit(LAY-app-selectExportExcel)',
                    function (data) {
                        var checkStatus = table.checkStatus("LAY-app-CoreCmsPlanOrder-tableBox");
                        doSelectExportExcel(checkStatus);
                    });
                //监听搜索
                form.on('submit(LAY-app-doBatchDelete)',
                    function (data) {
                        var checkStatus = table.checkStatus("LAY-app-CoreCmsPlanOrder-tableBox");
                        doBatchDelete(checkStatus);
                    });
                //监听搜索
                form.on('submit(LAY-app-queryExportExcel)',
                    function (data) {
                        doQueryExportexcel();
                    });
                // 监听提交事件
                form.on('select(cityFilter)', function (data) {
@@ -260,24 +287,24 @@
                    cols: [
                        [
                            { type: "checkbox", fixed: "left" },
                            { field: 'orderId', title: '订单号', sort: false,width: 115 },
                            { field: 'orderId', title: '订单号', sort: false,width: 135 },
                            { field: 'shi', title: '市', sort: false, width: 50 },
                            { field: 'quxian', title: '区县', sort: false, width: 50 },
                            { field: 'pianqu', title: '片区', sort: false, width: 115 }, 
                         /*   { field: 'userId', title: '用户ID 关联user.id', sort: false,width: 105 },*/
                            { field: 'shipAddress', title: '学校', sort: false, width: 115 },
                            { field: 'shipName', title: '联系人', sort: false,width: 115 },
                            { field: 'shipAddress', title: '学校', sort: false, width: 135 },
                            { field: 'shipName', title: '联系人', sort: false,width: 55 },
                            { field: 'shipMobile', title: '联系电话', sort: false, width: 115 },
                            { field: 'shouhuoAddress', title: '收货地址', sort: false, width: 115 },
                            { field: 'oldOrderAmount', title: '计划金额', sort: false, width: 115 },
                            { field: 'orderAmount', title: '调整金额', sort: false, width: 115 },
                            { field: 'keYongAmount', title: '可用余额', sort: false,width: 115 },
                            { field: 'createTime', title: '建立时间', width: 140, sort: false},
                            { field: 'upDataTime', title: '修改时间', width: 140, sort: false},
                            { field: 'shouhuoAddress', title: '收货地址', sort: false, width: 265 },
                            { field: 'oldOrderAmount', title: '计划金额', sort: false, width: 75 },
                            { field: 'orderAmount', title: '调整金额', sort: false, width: 75 },
                            { field: 'keYongAmount', title: '可用余额', sort: false, width: 75 },
                            { field: 'createTime', title: '建立时间', width: 95, sort: false},
                            { field: 'upDataTime', title: '修改时间', width: 95, sort: false},
                            //{ field: 'createBy', title: '创建人', sort: false,width: 105 },
                            //{ field: 'upDataBy', title: '修改人', sort: false,width: 105 },
                            //{ field: 'isdelete', title: '删除标志', width: 95, templet: '#switch_isdelete', sort: false , unresize: true},
                            { field: 'statusText', title: '订单状态', sort: false, width: 115 },
                            { field: 'statusText', title: '订单状态', sort: false, width: 65 },
                            { width: 172, align: 'center', title:'操作', fixed: 'right', toolbar: '#LAY-app-CoreCmsPlanOrder-tableBox-bar' }
                        ]
                    ]
@@ -456,24 +483,28 @@
                }
                //执行单个删除
                function doDelete(obj){
                    coreHelper.Post("Api/CoreCmsPlanOrder/DoDelete", { id: obj.data.id }, function (e) {
                    layer.confirm('确定锁单吗?删除后将无法修改。',
                        function (index) {
                            coreHelper.Post("Api/CoreCmsPlanOrder/DoDelete", { id: obj.data.orderId }, function (e) {
                            if (debug) { console.log(e); } //开启调试返回数据
                            table.reloadData('LAY-app-CoreCmsPlanOrder-tableBox');
                            layer.msg(e.msg);
                        });
});
                }
                //执行批量删除
                function doBatchDelete(checkStatus){
                    var checkData = checkStatus.data;
                    if (checkData.length === 0) {
                        return layer.msg('请选择要删除的数据');
                        return layer.msg('请选择要锁单的数据');
                    }
                    layer.confirm('确定删除吗?删除后将无法恢复。',
                    layer.confirm('确定锁单吗?锁单后将无法修改。',
                        function(index) {
                            var delidsStr = [];
                            layui.each(checkData,
                                function(index, item) {
                                    delidsStr.push(item.id);
                                    delidsStr.push(item.orderId);
                                });
                            coreHelper.Post("Api/CoreCmsPlanOrder/DoBatchDelete", { id: delidsStr }, function (e) {
                                    if (debug) { console.log(e); } //开启调试返回数据
@@ -508,7 +539,7 @@
                            var delidsStr = [];
                            layui.each(checkData,
                                function(index, item) {
                                    delidsStr.push(item.id);
                                    delidsStr.push(item.orderId);
                                });
                            layer.close(index);
                            coreHelper.Post("Api/CoreCmsPlanOrder/SelectExportExcel", { id: delidsStr }, function (e) {
CoreCms.Net.Web.WebApi/Controllers/OrderController.cs
@@ -10,6 +10,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using CoreCms.Net.Auth.HttpContextUser;
@@ -54,6 +55,7 @@
        private readonly ICoreCmsInvoiceServices _invoiceServices;
        private readonly ICoreCmsPlanOrderServices _planOrderServices;
        private readonly ICoreCmsPlanOrderItemServices _planOrderItemServices;
        private readonly ICoreCmsOrderItemServices _orderItemServices;
        /// <summary>
        /// 构造函数
@@ -65,7 +67,8 @@
        , ICoreCmsAreaServices areaServices
        , ICoreCmsBillReshipServices reshipServices, ICoreCmsShipServices shipServices, ICoreCmsLogisticsServices logisticsServices, ICoreCmsOrderDistributionModelServices orderDistributionModelServices, IRedisOperationRepository redisOperationRepository, ICoreCmsUserServices userServices, ICoreCmsClerkServices clerkServices, ICoreCmsInvoiceServices invoiceServices
          , ICoreCmsPlanOrderServices planOrderServices
            , ICoreCmsPlanOrderItemServices planOrderItemServices)
            , ICoreCmsPlanOrderItemServices planOrderItemServices
               , ICoreCmsOrderItemServices orderItemServices)
        {
            _user = user;
            _orderServices = orderServices;
@@ -82,6 +85,7 @@
            _invoiceServices = invoiceServices;
            _planOrderServices = planOrderServices;
            _planOrderItemServices = planOrderItemServices;
            _orderItemServices = orderItemServices;
        }
@@ -229,7 +233,7 @@
                        entity.ushipId, entity.storeId, entity.ladingName, entity.ladingMobile, entity.memo,
                        entity.point, entity.couponCode, entity.source, entity.scene, entity.taxType, entity.taxName,
                        entity.taxCode, entity.objectId, entity.teamId, entity.requireOrder, entity.requiredFundType,
                        entity.traceId);
                        entity.traceId, entity.planorderId);
                }
                catch (Exception e)
                {
@@ -387,7 +391,7 @@
        [Authorize]
        public async Task<WebApiCallBack> GetPlanOrderList([FromBody] GetOrderListPost entity)
        {
            var jm = await _planOrderServices.GetOrderList(entity.status, _user.ID, entity.page, entity.limit);
            var jm = await _planOrderServices.GetOrderList(entity.status, _user.ID, entity.page, entity.limit, entity.money);
            return jm;
        }
@@ -409,6 +413,7 @@
            var jm = new WebApiCallBack();
            var model = await _planOrderServices.QueryByIdAsync(entity.id);
            if (model == null)
            {
                jm.msg = "不存在此信息";
@@ -417,7 +422,34 @@
            //获取相关状态描述说明转换
            model.statusText = EnumHelper.GetEnumDescriptionByValue<GlobalEnumVars.PlanOrderTiJiao>(model.status);
            model.keYongAmount = model.keYongAmount - model.huaFeiAmount;
            var modelItem = await _planOrderItemServices.QueryListByClauseAsync(p => p.orderId == entity.id && p.isOld == false, p => p.specification, OrderByType.Asc);
            var modelItem2 = await _planOrderItemServices.QueryListByClauseAsync(p => p.orderId == entity.id && p.isOld == true, p => p.specification, OrderByType.Asc);
            foreach (var coreCmsPlanOrderItem in modelItem)
            {
                var coreCmsPlanOrderItem1 = modelItem2.Where(p => p.name == coreCmsPlanOrderItem.name && p.specification == coreCmsPlanOrderItem.specification).FirstOrDefault();
                if (coreCmsPlanOrderItem1 != null)
                {
                    coreCmsPlanOrderItem.idnew = coreCmsPlanOrderItem1.id;
                    coreCmsPlanOrderItem.numsnew = coreCmsPlanOrderItem1.nums; //原订单计划数量
                    coreCmsPlanOrderItem.amountnew = coreCmsPlanOrderItem1.amount;//原订单计划金额
                }
            }
            var coreCmsOrderItems = new List<CoreCmsOrderItem>();
            //查询用计划订单积分购买的订单
            var coreCmsOrders = await _orderServices.QueryListByClauseAsync(p => p.planorderId == model.orderId && p.isdel == false);
            if (coreCmsOrders != null && coreCmsOrders.Count > 0)
            {
                var orderids = new List<string>();
                foreach (var coreCmsOrder in coreCmsOrders)
                {
                    orderids.Add(coreCmsOrder.orderId);
                }
                coreCmsOrderItems = await _orderItemServices.QueryListByClauseAsync(p => orderids.Contains(p.orderId));
            }
            jm.code = 0;
            jm.status = true;
@@ -425,6 +457,7 @@
            {
                model,
                modelItem,
                coreCmsOrderItems
            };
            return jm;
CoreCms.Net.Web.WebApi/Controllers/UserController.cs
@@ -1009,7 +1009,8 @@
                userCouponCount,
                orderCount,
                footPrintCount,
                collectionCount
                collectionCount,
                user.isplanorder
            };
            return jm;
        }