username@email.com
2024-04-24 85405ca125ae7c139e7dbc2dc56a997f3f196e30
计划订单功能
5个文件已修改
16个文件已添加
4018 ■■■■■ 已修改文件
CoreCms.Net.Configuration/GlobalEnumVars.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.IRepository/Order/ICoreCmsPlanOrderItemRepository.cs 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.IRepository/Order/ICoreCmsPlanOrderRepository.cs 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.IServices/Order/ICoreCmsPlanOrderItemServices.cs 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.IServices/Order/ICoreCmsPlanOrderServices.cs 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Model/Entities/Order/CoreCmsPlanOrder.cs 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Model/Entities/Order/CoreCmsPlanOrderItem.cs 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Model/ViewModels/DTO/OrderDTO.cs 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Repository/Order/CoreCmsPlanOrderItemRepository.cs 224 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Repository/Order/CoreCmsPlanOrderRepository.cs 230 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Services/Order/CoreCmsPlanOrderItemServices.cs 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Services/Order/CoreCmsPlanOrderServices.cs 383 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Utility/Helper/CommonHelper.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Web.Admin/Controllers/Com/ToolsController.cs 261 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Web.Admin/Controllers/Order/CoreCmsPlanOrderController.cs 975 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Web.Admin/wwwroot/static/jihuageshi/上传计划订单.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Web.Admin/wwwroot/views/corecmsplanorder/create.html 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Web.Admin/wwwroot/views/corecmsplanorder/details.html 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Web.Admin/wwwroot/views/corecmsplanorder/edit.html 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Web.Admin/wwwroot/views/corecmsplanorder/index.html 495 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Web.WebApi/Controllers/OrderController.cs 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CoreCms.Net.Configuration/GlobalEnumVars.cs
@@ -72,6 +72,8 @@
            æœåŠ¡è®¢å•ç¼–å· = 10,
            [Description("服务券兑换码")]
            æœåŠ¡åˆ¸å…‘æ¢ç  = 11,
            [Description("计划订单编号")]
            è®¡åˆ’订单编号 = 12,
        }
        /// <summary>
        /// æ¥æº
@@ -659,6 +661,18 @@
            TransactionComponent = 10,
        }
        /// <summary>
        /// è®¡åˆ’订单是否提交
        /// </summary>
        public enum PlanOrderTiJiao
        {
            [Description("未提交")]
            æœªæäº¤ = 1,
            [Description("已提交")]
            æäº¤ = 2
        }
        /// <summary>
        /// å‘货单状态
        /// </summary>
CoreCms.Net.IRepository/Order/ICoreCmsPlanOrderItemRepository.cs
New file
@@ -0,0 +1,99 @@
/***********************************************************************
 *            Project: baifenBinfa
 *        ProjectName: ç™¾åˆ†å…µæ³•管理系统
 *                Web: http://chuanyin.com
 *             Author:
 *              Email:
 *         CreateTime: 2024/4/17 13:28:37
 *        Description: æš‚æ— 
 ***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.Entities.Order;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using SqlSugar;
namespace CoreCms.Net.IRepository
{
    /// <summary>
    /// è®¡åˆ’订单明细表 å·¥åŽ‚æŽ¥å£
    /// </summary>
    public interface ICoreCmsPlanOrderItemRepository : IBaseRepository<CoreCmsPlanOrderItem>
    {
        #region é‡å†™å¢žåˆ æ”¹æŸ¥æ“ä½œ===========================================================
        /// <summary>
        /// é‡å†™å¼‚步插入方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> InsertAsync(CoreCmsPlanOrderItem entity);
        /// <summary>
        /// é‡å†™å¼‚步更新方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> UpdateAsync(CoreCmsPlanOrderItem entity);
        /// <summary>
        /// é‡å†™å¼‚步更新方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> UpdateAsync(List<CoreCmsPlanOrderItem> entity);
        /// <summary>
        /// é‡å†™åˆ é™¤æŒ‡å®šID的数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> DeleteByIdAsync(object id);
        /// <summary>
        /// é‡å†™åˆ é™¤æŒ‡å®šID集合的数据(批量删除)
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids);
        #endregion
        #region èŽ·å–ç¼“å­˜çš„æ‰€æœ‰æ•°æ®==========================================================
        /// <summary>
        /// èŽ·å–ç¼“å­˜çš„æ‰€æœ‰æ•°æ®
        /// </summary>
        /// <returns></returns>
        Task<List<CoreCmsPlanOrderItem>> GetCaChe();
        #endregion
        /// <summary>
        ///     é‡å†™æ ¹æ®æ¡ä»¶æŸ¥è¯¢åˆ†é¡µæ•°æ®
        /// </summary>
        /// <param name="predicate">判断集合</param>
        /// <param name="orderByType">排序方式</param>
        /// <param name="pageIndex">当前页面索引</param>
        /// <param name="pageSize">分布大小</param>
        /// <param name="orderByExpression"></param>
        /// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
        /// <returns></returns>
        Task<IPageList<CoreCmsPlanOrderItem>> QueryPageAsync(
            Expression<Func<CoreCmsPlanOrderItem, bool>> predicate,
            Expression<Func<CoreCmsPlanOrderItem, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
            int pageSize = 20, bool blUseNoLock = false);
    }
}
CoreCms.Net.IRepository/Order/ICoreCmsPlanOrderRepository.cs
New file
@@ -0,0 +1,99 @@
/***********************************************************************
 *            Project: baifenBinfa
 *        ProjectName: ç™¾åˆ†å…µæ³•管理系统
 *                Web: http://chuanyin.com
 *             Author:
 *              Email:
 *         CreateTime: 2024/4/17 13:28:20
 *        Description: æš‚æ— 
 ***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.Entities.Order;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using SqlSugar;
namespace CoreCms.Net.IRepository
{
    /// <summary>
    /// è®¡åˆ’订单表 å·¥åŽ‚æŽ¥å£
    /// </summary>
    public interface ICoreCmsPlanOrderRepository : IBaseRepository<CoreCmsPlanOrder>
    {
        #region é‡å†™å¢žåˆ æ”¹æŸ¥æ“ä½œ===========================================================
        /// <summary>
        /// é‡å†™å¼‚步插入方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> InsertAsync(CoreCmsPlanOrder entity);
        /// <summary>
        /// é‡å†™å¼‚步更新方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> UpdateAsync(CoreCmsPlanOrder entity);
        /// <summary>
        /// é‡å†™å¼‚步更新方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> UpdateAsync(List<CoreCmsPlanOrder> entity);
        /// <summary>
        /// é‡å†™åˆ é™¤æŒ‡å®šID的数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> DeleteByIdAsync(object id);
        /// <summary>
        /// é‡å†™åˆ é™¤æŒ‡å®šID集合的数据(批量删除)
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids);
        #endregion
        #region èŽ·å–ç¼“å­˜çš„æ‰€æœ‰æ•°æ®==========================================================
        /// <summary>
        /// èŽ·å–ç¼“å­˜çš„æ‰€æœ‰æ•°æ®
        /// </summary>
        /// <returns></returns>
        Task<List<CoreCmsPlanOrder>> GetCaChe();
        #endregion
        /// <summary>
        ///     é‡å†™æ ¹æ®æ¡ä»¶æŸ¥è¯¢åˆ†é¡µæ•°æ®
        /// </summary>
        /// <param name="predicate">判断集合</param>
        /// <param name="orderByType">排序方式</param>
        /// <param name="pageIndex">当前页面索引</param>
        /// <param name="pageSize">分布大小</param>
        /// <param name="orderByExpression"></param>
        /// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
        /// <returns></returns>
        Task<IPageList<CoreCmsPlanOrder>> QueryPageAsync(
            Expression<Func<CoreCmsPlanOrder, bool>> predicate,
            Expression<Func<CoreCmsPlanOrder, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
            int pageSize = 20, bool blUseNoLock = false);
    }
}
CoreCms.Net.IServices/Order/ICoreCmsPlanOrderItemServices.cs
New file
@@ -0,0 +1,95 @@
/***********************************************************************
 *            Project: baifenBinfa
 *        ProjectName: ç™¾åˆ†å…µæ³•管理系统
 *                Web: http://chuanyin.com
 *             Author:
 *              Email:
 *         CreateTime: 2024/4/17 13:28:37
 *        Description: æš‚æ— 
 ***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.Entities.Order;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using SqlSugar;
namespace CoreCms.Net.IServices
{
    /// <summary>
    /// è®¡åˆ’订单明细表 æœåŠ¡å·¥åŽ‚æŽ¥å£
    /// </summary>
    public interface ICoreCmsPlanOrderItemServices : IBaseServices<CoreCmsPlanOrderItem>
    {
        #region é‡å†™å¢žåˆ æ”¹æŸ¥æ“ä½œ===========================================================
        /// <summary>
        /// é‡å†™å¼‚步插入方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> InsertAsync(CoreCmsPlanOrderItem entity);
        /// <summary>
        /// é‡å†™å¼‚步更新方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> UpdateAsync(CoreCmsPlanOrderItem entity);
        /// <summary>
        /// é‡å†™å¼‚步更新方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> UpdateAsync(List<CoreCmsPlanOrderItem> entity);
        /// <summary>
        /// é‡å†™åˆ é™¤æŒ‡å®šID的数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> DeleteByIdAsync(object id);
        /// <summary>
        /// é‡å†™åˆ é™¤æŒ‡å®šID集合的数据(批量删除)
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids);
        #endregion
        #region èŽ·å–ç¼“å­˜çš„æ‰€æœ‰æ•°æ®==========================================================
        /// <summary>
        /// èŽ·å–ç¼“å­˜çš„æ‰€æœ‰æ•°æ®
        /// </summary>
        /// <returns></returns>
        Task<List<CoreCmsPlanOrderItem>> GetCaChe();
        #endregion
        #region é‡å†™æ ¹æ®æ¡ä»¶æŸ¥è¯¢åˆ†é¡µæ•°æ®
        /// <summary>
        ///     é‡å†™æ ¹æ®æ¡ä»¶æŸ¥è¯¢åˆ†é¡µæ•°æ®
        /// </summary>
        /// <param name="predicate">判断集合</param>
        /// <param name="orderByType">排序方式</param>
        /// <param name="pageIndex">当前页面索引</param>
        /// <param name="pageSize">分布大小</param>
        /// <param name="orderByExpression"></param>
        /// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
        /// <returns></returns>
        Task<IPageList<CoreCmsPlanOrderItem>> QueryPageAsync(
            Expression<Func<CoreCmsPlanOrderItem, bool>> predicate,
            Expression<Func<CoreCmsPlanOrderItem, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
            int pageSize = 20, bool blUseNoLock = false);
        #endregion
    }
}
CoreCms.Net.IServices/Order/ICoreCmsPlanOrderServices.cs
New file
@@ -0,0 +1,126 @@
/***********************************************************************
 *            Project: baifenBinfa
 *        ProjectName: ç™¾åˆ†å…µæ³•管理系统
 *                Web: http://chuanyin.com
 *             Author:
 *              Email:
 *         CreateTime: 2024/4/17 13:28:20
 *        Description: æš‚æ— 
 ***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.Entities.Order;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.DTO;
using CoreCms.Net.Model.ViewModels.UI;
using SqlSugar;
using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinUserInfoBatchGetRequest.Types;
namespace CoreCms.Net.IServices
{
    /// <summary>
    /// è®¡åˆ’订单表 æœåŠ¡å·¥åŽ‚æŽ¥å£
    /// </summary>
    public interface ICoreCmsPlanOrderServices : IBaseServices<CoreCmsPlanOrder>
    {
        #region é‡å†™å¢žåˆ æ”¹æŸ¥æ“ä½œ===========================================================
        /// <summary>
        /// é‡å†™å¼‚步插入方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> InsertAsync(CoreCmsPlanOrder entity);
        /// <summary>
        /// é‡å†™å¼‚步更新方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> UpdateAsync(CoreCmsPlanOrder entity);
        /// <summary>
        /// é‡å†™å¼‚步更新方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> UpdateAsync(List<CoreCmsPlanOrder> entity);
        /// <summary>
        /// é‡å†™åˆ é™¤æŒ‡å®šID的数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> DeleteByIdAsync(object id);
        /// <summary>
        /// é‡å†™åˆ é™¤æŒ‡å®šID集合的数据(批量删除)
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids);
        #endregion
        #region èŽ·å–ç¼“å­˜çš„æ‰€æœ‰æ•°æ®==========================================================
        /// <summary>
        /// èŽ·å–ç¼“å­˜çš„æ‰€æœ‰æ•°æ®
        /// </summary>
        /// <returns></returns>
        Task<List<CoreCmsPlanOrder>> GetCaChe();
        #endregion
        #region é‡å†™æ ¹æ®æ¡ä»¶æŸ¥è¯¢åˆ†é¡µæ•°æ®
        /// <summary>
        ///     é‡å†™æ ¹æ®æ¡ä»¶æŸ¥è¯¢åˆ†é¡µæ•°æ®
        /// </summary>
        /// <param name="predicate">判断集合</param>
        /// <param name="orderByType">排序方式</param>
        /// <param name="pageIndex">当前页面索引</param>
        /// <param name="pageSize">分布大小</param>
        /// <param name="orderByExpression"></param>
        /// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
        /// <returns></returns>
        Task<IPageList<CoreCmsPlanOrder>> QueryPageAsync(
            Expression<Func<CoreCmsPlanOrder, bool>> predicate,
            Expression<Func<CoreCmsPlanOrder, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
            int pageSize = 20, bool blUseNoLock = false);
        #endregion
        /// <summary>
        ///     èŽ·å–è®¡åˆ’è®¢å•åˆ—è¡¨å¾®ä¿¡å°ç¨‹åº
        /// </summary>
        /// <returns></returns>
        Task<WebApiCallBack> GetOrderList(int status = -1, int userId = 0, int page = 1, int limit = 5);
        /// <summary>
        ///     åˆ›å»ºè®¢å•
        /// </summary>
        /// <param name="orderId">用户序列</param>
        /// <param name="userId">用户序列</param>
        /// <param name="userName">用户昵称</param>
        /// <param name="status">计划订单状态</param>
        /// <param name="itemIds">明细id</param>
        /// <param name="itemNums">明细数量</param>
        /// <returns></returns>
        Task<WebApiCallBack> ToUpdate(string orderId ,int userId, string userName, int status, string itemIds, string itemNums);
        /// <summary>
        ///     åˆ›å»ºè®¡åˆ’订单
        /// </summary>
        /// <param name="jiHuaOrders">计划订单</param>
        /// <param name="userId">用户序列</param>
        /// <param name="userName">用户昵称</param>
        /// <returns></returns>
        Task<AdminUiCallBack> ToAddJiHua(List<JiHuaOrder> jiHuaOrders,int userId, string userName);
    }
}
CoreCms.Net.Model/Entities/Order/CoreCmsPlanOrder.cs
New file
@@ -0,0 +1,152 @@
using Chuanyin.Attribute;
using CoreCms.Net.Model.Entities.baseModel;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CoreCms.Net.Model.Entities.Order
{
    /// <summary>
    /// è®¡åˆ’订单表
    /// </summary>
    [SqlCodeFirst]
    public class CoreCmsPlanOrder : BFBaseModel
    {
        /// <summary>
        /// æž„造函数
        /// </summary>
        public CoreCmsPlanOrder()
        {
        }
        /// <summary>
        /// è®¢å•号
        /// </summary>
        [Display(Name = "订单号")]
        [SugarColumn(IsPrimaryKey = true)]
        [Required(ErrorMessage = "请输入{0}")]
        [StringLength(maximumLength: 50, ErrorMessage = "{0}不能超过{1}字")]
        public System.String orderId { get; set; }
        /// <summary>
        /// è°ƒæ•´è®¢å•金额
        /// </summary>
        [Display(Name = "调整订单金额")]
        [Required(ErrorMessage = "请输入{0}")]
        public System.Decimal orderAmount { get; set; }
        /// <summary>
        /// è®¢å•状态
        /// </summary>
        [Display(Name = "订单状态")]
        [Required(ErrorMessage = "请输入{0}")]
        public System.Int32 status { get; set; }
        /// <summary>
        /// ç”¨æˆ·ID å…³è”user.id
        /// </summary>
        [Display(Name = "用户ID å…³è”user.id")]
        [Required(ErrorMessage = "请输入{0}")]
        public System.Int32 userId { get; set; }
        /// <summary>
        /// å­¦æ ¡
        /// </summary>
        [Display(Name = "学校")]
        [StringLength(maximumLength: 200, ErrorMessage = "{0}不能超过{1}字")]
        public System.String shipAddress { get; set; }
        /// <summary>
        /// è”系人
        /// </summary>
        [Display(Name = "联系人")]
        [StringLength(maximumLength: 50, ErrorMessage = "{0}不能超过{1}字")]
        public System.String shipName { get; set; }
        /// <summary>
        /// æ”¶è´§ç”µè¯
        /// </summary>
        [Display(Name = "联系电话")]
        [StringLength(maximumLength: 50, ErrorMessage = "{0}不能超过{1}字")]
        public System.String shipMobile { get; set; }
        /// <summary>
        /// è®¡åˆ’订单金额
        /// </summary>
        [Display(Name = "计划订单金额")]
        [Required(ErrorMessage = "请输入{0}")]
        public System.Decimal oldOrderAmount { get; set; }
        /// <summary>
        /// å¯ç”¨ä½™é¢
        /// </summary>
        [Display(Name = "可用余额")]
        [Required(ErrorMessage = "请输入{0}")]
        public System.Decimal keYongAmount { get; set; }
        /// <summary>
        ///     çŠ¶æ€è¯´æ˜Ž
        /// </summary>
        [SugarColumn(IsIgnore = true)]
        public string statusText { get; set; }
    }
}
CoreCms.Net.Model/Entities/Order/CoreCmsPlanOrderItem.cs
New file
@@ -0,0 +1,92 @@
using Chuanyin.Attribute;
using CoreCms.Net.Model.Entities.baseModel;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CoreCms.Net.Model.Entities.Order
{
    /// <summary>
    /// è®¢å•明细表
    /// </summary>
    [SqlCodeFirst]
    [SugarTable("CoreCmsPlanOrderItem", TableDescription = "计划订单明细表")]
    public class CoreCmsPlanOrderItem : BFBaseModel
    {
        /// <summary>
        /// è®¡åˆ’订单明细表
        /// </summary>
        public CoreCmsPlanOrderItem()
        {
        }
        /// <summary>
        /// åºå·
        /// </summary>
        [Display(Name = "序号")]
        [SugarColumn(ColumnDescription = "序号", IsPrimaryKey = true, IsIdentity = true)]
        [Required(ErrorMessage = "请输入{0}")]
        public System.Int32 id { get; set; }
        /// <summary>
        /// è®¢å•ID å…³è”order.id
        /// </summary>
        [Display(Name = "订单ID å…³è”order.id")]
        [SugarColumn(ColumnDescription = "订单ID å…³è”order.id")]
        [Required(ErrorMessage = "请输入{0}")]
        [StringLength(50, ErrorMessage = "【{0}】不能超过{1}字符长度")]
        public System.String orderId { get; set; }
        /// <summary>
        /// å•†å“åç§°
        /// </summary>
        [Display(Name = "商品名称")]
        [SugarColumn(ColumnDescription = "商品名称")]
        [Required(ErrorMessage = "请输入{0}")]
        [StringLength(200, ErrorMessage = "【{0}】不能超过{1}字符长度")]
        public System.String name { get; set; }
        /// <summary>
        /// å•†å“è§„æ ¼
        /// </summary>
        [Display(Name = "商品规格")]
        [SugarColumn(ColumnDescription = "商品规格")]
        [Required(ErrorMessage = "请输入{0}")]
        [StringLength(200, ErrorMessage = "【{0}】不能超过{1}字符长度")]
        public System.String specification { get; set; }
        /// <summary>
        /// è´§å“ä»·æ ¼å•ä»·
        /// </summary>
        [Display(Name = "货品价格单价")]
        [SugarColumn(ColumnDescription = "货品价格单价")]
        [Required(ErrorMessage = "请输入{0}")]
        public System.Decimal price { get; set; }
        /// <summary>
        /// æ•°é‡
        /// </summary>
        [Display(Name = "数量")]
        [SugarColumn(ColumnDescription = "数量")]
        [Required(ErrorMessage = "请输入{0}")]
        public System.Int32 nums { get; set; }
        /// <summary>
        /// æ€»ä»·
        /// </summary>
        [Display(Name = "总价")]
        [SugarColumn(ColumnDescription = "总价")]
        [Required(ErrorMessage = "请输入{0}")]
        public System.Decimal amount { get; set; }
    }
}
CoreCms.Net.Model/ViewModels/DTO/OrderDTO.cs
@@ -11,8 +11,10 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using CoreCms.Net.Model.Entities;
using Newtonsoft.Json.Linq;
using SqlSugar;
namespace CoreCms.Net.Model.ViewModels.DTO
{
@@ -52,6 +54,26 @@
        ///     åŒºåŸŸåºåˆ—
        /// </summary>
        public int areaId { get; set; }
        /// <summary>
        ///     è®¢å•编号
        /// </summary>
        public string orderId { get; set; }
        /// <summary>
        ///     çŠ¶æ€
        /// </summary>
        public int status { get; set; } = 0;
        /// <summary>
        ///     æ˜Žç»†id
        /// </summary>
        public string itemIds { get; set; }
        /// <summary>
        ///     æ˜Žç»†æ•°é‡
        /// </summary>
        public string itemNums { get; set; }
        /// <summary>
        ///     è´­ç‰©è½¦åºåˆ—
@@ -458,4 +480,92 @@
        /// </summary>
        public decimal refund { get; set; } = 0;
    }
    /// <summary>
    ///     è®¡åˆ’订单
    /// </summary>
    public class JiHuaOrder
    {
        /// <summary>
        /// å­¦æ ¡
        /// </summary>
        public System.String shipAddress { get; set; }
        /// <summary>
        /// è”系人
        /// </summary>
        public System.String shipName { get; set; }
        /// <summary>
        /// è”系电话
        /// </summary>
        public System.String shipMobile { get; set; }
        /// <summary>
        /// å•†å“åç§°
        /// </summary>
        public System.String name { get; set; }
        /// <summary>
        /// å•†å“è§„æ ¼
        /// </summary>
        public System.String specification { get; set; }
        /// <summary>
        /// è´§å“ä»·æ ¼å•ä»·
        /// </summary>
        public System.Decimal price { get; set; }
        /// <summary>
        /// æ•°é‡
        /// </summary>
        public System.Int32 nums { get; set; }
    }
}
CoreCms.Net.Repository/Order/CoreCmsPlanOrderItemRepository.cs
New file
@@ -0,0 +1,224 @@
/***********************************************************************
 *            Project: baifenBinfa
 *        ProjectName: ç™¾åˆ†å…µæ³•管理系统
 *                Web: http://chuanyin.com
 *             Author:
 *              Email:
 *         CreateTime: 2024/4/17 13:28:37
 *        Description: æš‚æ— 
 ***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Caching.Manual;
using CoreCms.Net.Configuration;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.Model.ViewModels.UI;
using SqlSugar;
using CoreCms.Net.Model.Entities.Order;
namespace CoreCms.Net.Repository
{
    /// <summary>
    /// è®¡åˆ’订单明细表 æŽ¥å£å®žçް
    /// </summary>
    public class CoreCmsPlanOrderItemRepository : BaseRepository<CoreCmsPlanOrderItem>, ICoreCmsPlanOrderItemRepository
    {
        private readonly IUnitOfWork _unitOfWork;
        public CoreCmsPlanOrderItemRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
        {
            _unitOfWork = unitOfWork;
        }
       #region å®žçŽ°é‡å†™å¢žåˆ æ”¹æŸ¥æ“ä½œ==========================================================
        /// <summary>
        /// é‡å†™å¼‚步插入方法
        /// </summary>
        /// <param name="entity">实体数据</param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> InsertAsync(CoreCmsPlanOrderItem entity)
        {
            var jm = new AdminUiCallBack();
            var bl = await DbClient.Insertable(entity).ExecuteReturnIdentityAsync() > 0;
            jm.code = bl ? 0 : 1;
            jm.msg = bl ? GlobalConstVars.CreateSuccess : GlobalConstVars.CreateFailure;
            return jm;
        }
        /// <summary>
        /// é‡å†™å¼‚步更新方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> UpdateAsync(CoreCmsPlanOrderItem entity)
        {
            var jm = new AdminUiCallBack();
            var oldModel = await DbClient.Queryable<CoreCmsPlanOrderItem>().In(entity.id).SingleAsync();
            if (oldModel == null)
            {
            jm.msg = "不存在此信息";
            return jm;
            }
            //事物处理过程开始
            oldModel.id = entity.id;
            oldModel.orderId = entity.orderId;
            oldModel.name = entity.name;
            oldModel.specification = entity.specification;
            oldModel.price = entity.price;
            oldModel.nums = entity.nums;
            oldModel.amount = entity.amount;
            oldModel.createTime = entity.createTime;
            oldModel.upDataTime = entity.upDataTime;
            oldModel.createBy = entity.createBy;
            oldModel.upDataBy = entity.upDataBy;
            oldModel.isdelete = entity.isdelete;
            //事物处理过程结束
            var bl = await DbClient.Updateable(oldModel).ExecuteCommandHasChangeAsync();
            jm.code = bl ? 0 : 1;
            jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
            return jm;
        }
        /// <summary>
        /// é‡å†™å¼‚步更新方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> UpdateAsync(List<CoreCmsPlanOrderItem> entity)
        {
            var jm = new AdminUiCallBack();
            var bl = await DbClient.Updateable(entity).ExecuteCommandHasChangeAsync();
            jm.code = bl ? 0 : 1;
            jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
            return jm;
        }
        /// <summary>
        /// é‡å†™åˆ é™¤æŒ‡å®šID的数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> DeleteByIdAsync(object id)
        {
            var jm = new AdminUiCallBack();
            var bl = await DbClient.Deleteable<CoreCmsPlanOrderItem>(id).ExecuteCommandHasChangeAsync();
            jm.code = bl ? 0 : 1;
            jm.msg = bl ? GlobalConstVars.DeleteSuccess : GlobalConstVars.DeleteFailure;
            return jm;
        }
        /// <summary>
        /// é‡å†™åˆ é™¤æŒ‡å®šID集合的数据(批量删除)
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids)
        {
            var jm = new AdminUiCallBack();
            var bl = await DbClient.Deleteable<CoreCmsPlanOrderItem>().In(ids).ExecuteCommandHasChangeAsync();
            jm.code = bl ? 0 : 1;
            jm.msg = bl ? GlobalConstVars.DeleteSuccess : GlobalConstVars.DeleteFailure;
            return jm;
        }
        #endregion
       #region èŽ·å–ç¼“å­˜çš„æ‰€æœ‰æ•°æ®==========================================================
        /// <summary>
        /// èŽ·å–ç¼“å­˜çš„æ‰€æœ‰æ•°æ®
        /// </summary>
        /// <returns></returns>
        public async Task<List<CoreCmsPlanOrderItem>> GetCaChe()
        {
           var list = await DbClient.Queryable<CoreCmsPlanOrderItem>().With(SqlWith.NoLock).WithCache().ToListAsync();
            return list;
        }
        #endregion
        #region é‡å†™æ ¹æ®æ¡ä»¶æŸ¥è¯¢åˆ†é¡µæ•°æ®
        /// <summary>
        ///     é‡å†™æ ¹æ®æ¡ä»¶æŸ¥è¯¢åˆ†é¡µæ•°æ®
        /// </summary>
        /// <param name="predicate">判断集合</param>
        /// <param name="orderByType">排序方式</param>
        /// <param name="pageIndex">当前页面索引</param>
        /// <param name="pageSize">分布大小</param>
        /// <param name="orderByExpression"></param>
        /// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
        /// <returns></returns>
        public async Task<IPageList<CoreCmsPlanOrderItem>> QueryPageAsync(Expression<Func<CoreCmsPlanOrderItem, bool>> predicate,
            Expression<Func<CoreCmsPlanOrderItem, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
            int pageSize = 20, bool blUseNoLock = false)
        {
            RefAsync<int> totalCount = 0;
            List<CoreCmsPlanOrderItem> page;
            if (blUseNoLock)
            {
                page = await DbClient.Queryable<CoreCmsPlanOrderItem>()
                .OrderByIF(orderByExpression != null, orderByExpression, orderByType)
                .WhereIF(predicate != null, predicate).Select(p => new CoreCmsPlanOrderItem
                {
                      id = p.id,
                orderId = p.orderId,
                name = p.name,
                specification = p.specification,
                price = p.price,
                nums = p.nums,
                amount = p.amount,
                createTime = p.createTime,
                upDataTime = p.upDataTime,
                createBy = p.createBy,
                upDataBy = p.upDataBy,
                isdelete = p.isdelete,
                }).With(SqlWith.NoLock).ToPageListAsync(pageIndex, pageSize, totalCount);
            }
            else
            {
                page = await DbClient.Queryable<CoreCmsPlanOrderItem>()
                .OrderByIF(orderByExpression != null, orderByExpression, orderByType)
                .WhereIF(predicate != null, predicate).Select(p => new CoreCmsPlanOrderItem
                {
                      id = p.id,
                orderId = p.orderId,
                name = p.name,
                specification = p.specification,
                price = p.price,
                nums = p.nums,
                amount = p.amount,
                createTime = p.createTime,
                upDataTime = p.upDataTime,
                createBy = p.createBy,
                upDataBy = p.upDataBy,
                isdelete = p.isdelete,
                }).ToPageListAsync(pageIndex, pageSize, totalCount);
            }
            var list = new PageList<CoreCmsPlanOrderItem>(page, pageIndex, pageSize, totalCount);
            return list;
        }
        #endregion
    }
}
CoreCms.Net.Repository/Order/CoreCmsPlanOrderRepository.cs
New file
@@ -0,0 +1,230 @@
/***********************************************************************
 *            Project: baifenBinfa
 *        ProjectName: ç™¾åˆ†å…µæ³•管理系统
 *                Web: http://chuanyin.com
 *             Author:
 *              Email:
 *         CreateTime: 2024/4/17 13:28:20
 *        Description: æš‚æ— 
 ***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Caching.Manual;
using CoreCms.Net.Configuration;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.Model.ViewModels.UI;
using SqlSugar;
using CoreCms.Net.Model.Entities.Order;
namespace CoreCms.Net.Repository
{
    /// <summary>
    /// è®¡åˆ’订单表 æŽ¥å£å®žçް
    /// </summary>
    public class CoreCmsPlanOrderRepository : BaseRepository<CoreCmsPlanOrder>, ICoreCmsPlanOrderRepository
    {
        private readonly IUnitOfWork _unitOfWork;
        public CoreCmsPlanOrderRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
        {
            _unitOfWork = unitOfWork;
        }
       #region å®žçŽ°é‡å†™å¢žåˆ æ”¹æŸ¥æ“ä½œ==========================================================
        /// <summary>
        /// é‡å†™å¼‚步插入方法
        /// </summary>
        /// <param name="entity">实体数据</param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> InsertAsync(CoreCmsPlanOrder entity)
        {
            var jm = new AdminUiCallBack();
            var bl = await DbClient.Insertable(entity).ExecuteReturnIdentityAsync() > 0;
            jm.code = bl ? 0 : 1;
            jm.msg = bl ? GlobalConstVars.CreateSuccess : GlobalConstVars.CreateFailure;
            return jm;
        }
        /// <summary>
        /// é‡å†™å¼‚步更新方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> UpdateAsync(CoreCmsPlanOrder entity)
        {
            var jm = new AdminUiCallBack();
            var oldModel = await DbClient.Queryable<CoreCmsPlanOrder>().In(entity.orderId).SingleAsync();
            if (oldModel == null)
            {
            jm.msg = "不存在此信息";
            return jm;
            }
            //事物处理过程开始
            oldModel.orderId = entity.orderId;
            oldModel.orderAmount = entity.orderAmount;
            oldModel.status = entity.status;
            oldModel.userId = entity.userId;
            oldModel.shipAddress = entity.shipAddress;
            oldModel.shipName = entity.shipName;
            oldModel.shipMobile = entity.shipMobile;
            oldModel.oldOrderAmount = entity.oldOrderAmount;
            oldModel.keYongAmount = entity.keYongAmount;
            oldModel.createTime = entity.createTime;
            oldModel.upDataTime = entity.upDataTime;
            oldModel.createBy = entity.createBy;
            oldModel.upDataBy = entity.upDataBy;
            oldModel.isdelete = entity.isdelete;
            //事物处理过程结束
            var bl = await DbClient.Updateable(oldModel).ExecuteCommandHasChangeAsync();
            jm.code = bl ? 0 : 1;
            jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
            return jm;
        }
        /// <summary>
        /// é‡å†™å¼‚步更新方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> UpdateAsync(List<CoreCmsPlanOrder> entity)
        {
            var jm = new AdminUiCallBack();
            var bl = await DbClient.Updateable(entity).ExecuteCommandHasChangeAsync();
            jm.code = bl ? 0 : 1;
            jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
            return jm;
        }
        /// <summary>
        /// é‡å†™åˆ é™¤æŒ‡å®šID的数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> DeleteByIdAsync(object id)
        {
            var jm = new AdminUiCallBack();
            var bl = await DbClient.Deleteable<CoreCmsPlanOrder>(id).ExecuteCommandHasChangeAsync();
            jm.code = bl ? 0 : 1;
            jm.msg = bl ? GlobalConstVars.DeleteSuccess : GlobalConstVars.DeleteFailure;
            return jm;
        }
        /// <summary>
        /// é‡å†™åˆ é™¤æŒ‡å®šID集合的数据(批量删除)
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids)
        {
            var jm = new AdminUiCallBack();
            var bl = await DbClient.Deleteable<CoreCmsPlanOrder>().In(ids).ExecuteCommandHasChangeAsync();
            jm.code = bl ? 0 : 1;
            jm.msg = bl ? GlobalConstVars.DeleteSuccess : GlobalConstVars.DeleteFailure;
            return jm;
        }
        #endregion
       #region èŽ·å–ç¼“å­˜çš„æ‰€æœ‰æ•°æ®==========================================================
        /// <summary>
        /// èŽ·å–ç¼“å­˜çš„æ‰€æœ‰æ•°æ®
        /// </summary>
        /// <returns></returns>
        public async Task<List<CoreCmsPlanOrder>> GetCaChe()
        {
           var list = await DbClient.Queryable<CoreCmsPlanOrder>().With(SqlWith.NoLock).WithCache().ToListAsync();
            return list;
        }
        #endregion
        #region é‡å†™æ ¹æ®æ¡ä»¶æŸ¥è¯¢åˆ†é¡µæ•°æ®
        /// <summary>
        ///     é‡å†™æ ¹æ®æ¡ä»¶æŸ¥è¯¢åˆ†é¡µæ•°æ®
        /// </summary>
        /// <param name="predicate">判断集合</param>
        /// <param name="orderByType">排序方式</param>
        /// <param name="pageIndex">当前页面索引</param>
        /// <param name="pageSize">分布大小</param>
        /// <param name="orderByExpression"></param>
        /// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
        /// <returns></returns>
        public async Task<IPageList<CoreCmsPlanOrder>> QueryPageAsync(Expression<Func<CoreCmsPlanOrder, bool>> predicate,
            Expression<Func<CoreCmsPlanOrder, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
            int pageSize = 20, bool blUseNoLock = false)
        {
            RefAsync<int> totalCount = 0;
            List<CoreCmsPlanOrder> page;
            if (blUseNoLock)
            {
                page = await DbClient.Queryable<CoreCmsPlanOrder>()
                .OrderByIF(orderByExpression != null, orderByExpression, orderByType)
                .WhereIF(predicate != null, predicate).Select(p => new CoreCmsPlanOrder
                {
                      orderId = p.orderId,
                orderAmount = p.orderAmount,
                status = p.status,
                userId = p.userId,
                shipAddress = p.shipAddress,
                shipName = p.shipName,
                shipMobile = p.shipMobile,
                oldOrderAmount = p.oldOrderAmount,
                keYongAmount = p.keYongAmount,
                createTime = p.createTime,
                upDataTime = p.upDataTime,
                createBy = p.createBy,
                upDataBy = p.upDataBy,
                isdelete = p.isdelete,
                }).With(SqlWith.NoLock).ToPageListAsync(pageIndex, pageSize, totalCount);
            }
            else
            {
                page = await DbClient.Queryable<CoreCmsPlanOrder>()
                .OrderByIF(orderByExpression != null, orderByExpression, orderByType)
                .WhereIF(predicate != null, predicate).Select(p => new CoreCmsPlanOrder
                {
                      orderId = p.orderId,
                orderAmount = p.orderAmount,
                status = p.status,
                userId = p.userId,
                shipAddress = p.shipAddress,
                shipName = p.shipName,
                shipMobile = p.shipMobile,
                oldOrderAmount = p.oldOrderAmount,
                keYongAmount = p.keYongAmount,
                createTime = p.createTime,
                upDataTime = p.upDataTime,
                createBy = p.createBy,
                upDataBy = p.upDataBy,
                isdelete = p.isdelete,
                }).ToPageListAsync(pageIndex, pageSize, totalCount);
            }
            var list = new PageList<CoreCmsPlanOrder>(page, pageIndex, pageSize, totalCount);
            return list;
        }
        #endregion
    }
}
CoreCms.Net.Services/Order/CoreCmsPlanOrderItemServices.cs
New file
@@ -0,0 +1,130 @@
/***********************************************************************
 *            Project: baifenBinfa
 *        ProjectName: ç™¾åˆ†å…µæ³•管理系统
 *                Web: http://chuanyin.com
 *             Author:
 *              Email:
 *         CreateTime: 2024/4/17 13:28:37
 *        Description: æš‚æ— 
 ***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.IServices;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.Entities.Order;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using SqlSugar;
namespace CoreCms.Net.Services
{
    /// <summary>
    /// è®¡åˆ’订单明细表 æŽ¥å£å®žçް
    /// </summary>
    public class CoreCmsPlanOrderItemServices : BaseServices<CoreCmsPlanOrderItem>, ICoreCmsPlanOrderItemServices
    {
        private readonly ICoreCmsPlanOrderItemRepository _dal;
        private readonly IUnitOfWork _unitOfWork;
        public CoreCmsPlanOrderItemServices(IUnitOfWork unitOfWork, ICoreCmsPlanOrderItemRepository dal)
        {
            this._dal = dal;
            base.BaseDal = dal;
            _unitOfWork = unitOfWork;
        }
        #region å®žçŽ°é‡å†™å¢žåˆ æ”¹æŸ¥æ“ä½œ==========================================================
        /// <summary>
        /// é‡å†™å¼‚步插入方法
        /// </summary>
        /// <param name="entity">实体数据</param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> InsertAsync(CoreCmsPlanOrderItem entity)
        {
            return await _dal.InsertAsync(entity);
        }
        /// <summary>
        /// é‡å†™å¼‚步更新方法方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> UpdateAsync(CoreCmsPlanOrderItem entity)
        {
            return await _dal.UpdateAsync(entity);
        }
        /// <summary>
        /// é‡å†™å¼‚步更新方法方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> UpdateAsync(List<CoreCmsPlanOrderItem> entity)
        {
            return await _dal.UpdateAsync(entity);
        }
        /// <summary>
        /// é‡å†™åˆ é™¤æŒ‡å®šID的数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> DeleteByIdAsync(object id)
        {
            return await _dal.DeleteByIdAsync(id);
        }
        /// <summary>
        /// é‡å†™åˆ é™¤æŒ‡å®šID集合的数据(批量删除)
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids)
        {
            return await _dal.DeleteByIdsAsync(ids);
        }
        #endregion
        #region èŽ·å–ç¼“å­˜çš„æ‰€æœ‰æ•°æ®==========================================================
        /// <summary>
        /// èŽ·å–ç¼“å­˜çš„æ‰€æœ‰æ•°æ®
        /// </summary>
        /// <returns></returns>
        public async Task<List<CoreCmsPlanOrderItem>> GetCaChe()
        {
            return await _dal.GetCaChe();
        }
        #endregion
       #region é‡å†™æ ¹æ®æ¡ä»¶æŸ¥è¯¢åˆ†é¡µæ•°æ®
        /// <summary>
        ///     é‡å†™æ ¹æ®æ¡ä»¶æŸ¥è¯¢åˆ†é¡µæ•°æ®
        /// </summary>
        /// <param name="predicate">判断集合</param>
        /// <param name="orderByType">排序方式</param>
        /// <param name="pageIndex">当前页面索引</param>
        /// <param name="pageSize">分布大小</param>
        /// <param name="orderByExpression"></param>
        /// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
        /// <returns></returns>
        public async Task<IPageList<CoreCmsPlanOrderItem>> QueryPageAsync(Expression<Func<CoreCmsPlanOrderItem, bool>> predicate,
            Expression<Func<CoreCmsPlanOrderItem, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
            int pageSize = 20, bool blUseNoLock = false)
        {
            return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
        }
        #endregion
    }
}
CoreCms.Net.Services/Order/CoreCmsPlanOrderServices.cs
New file
@@ -0,0 +1,383 @@
/***********************************************************************
 *            Project: baifenBinfa
 *        ProjectName: ç™¾åˆ†å…µæ³•管理系统
 *                Web: http://chuanyin.com
 *             Author:
 *              Email:
 *         CreateTime: 2024/4/17 13:28:20
 *        Description: æš‚æ— 
 ***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using System.Xml.Linq;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.IServices;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.Entities.Expression;
using CoreCms.Net.Model.Entities.Order;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Utility.Helper;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using SqlSugar;
using static CoreCms.Net.Configuration.GlobalEnumVars;
using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinExpressIntracityQueryStoreResponse.Types;
using static SKIT.FlurlHttpClient.Wechat.Api.Models.ProductSPUAddRequest.Types;
using System.Linq;
using CoreCms.Net.Model.Entities.baifenbingfa.apply;
using CoreCms.Net.Model.ViewModels.DTO;
using CoreCms.Net.Model.Entities.baifenbingfa.Promote;
using static SKIT.FlurlHttpClient.Wechat.Api.Models.ScanProductAddV2Request.Types.Product.Types;
using NPOI.SS.Formula.Functions;
namespace CoreCms.Net.Services
{
    /// <summary>
    /// è®¡åˆ’订单表 æŽ¥å£å®žçް
    /// </summary>
    public class CoreCmsPlanOrderServices : BaseServices<CoreCmsPlanOrder>, ICoreCmsPlanOrderServices
    {
        private readonly ICoreCmsPlanOrderRepository _dal;
        private readonly IUnitOfWork _unitOfWork;
        private readonly ICoreCmsPlanOrderItemRepository _itemDal;
        private readonly ICoreCmsUserServices _coreCmsUserServices;
        public CoreCmsPlanOrderServices(IUnitOfWork unitOfWork, ICoreCmsPlanOrderRepository dal
            , ICoreCmsPlanOrderItemRepository itemDal
            , ICoreCmsUserServices coreCmsUserServices)
        {
            this._dal = dal;
            base.BaseDal = dal;
            _unitOfWork = unitOfWork;
            _itemDal = itemDal;
            _coreCmsUserServices = coreCmsUserServices;
        }
        #region å®žçŽ°é‡å†™å¢žåˆ æ”¹æŸ¥æ“ä½œ==========================================================
        /// <summary>
        /// é‡å†™å¼‚步插入方法
        /// </summary>
        /// <param name="entity">实体数据</param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> InsertAsync(CoreCmsPlanOrder entity)
        {
            return await _dal.InsertAsync(entity);
        }
        /// <summary>
        /// é‡å†™å¼‚步更新方法方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> UpdateAsync(CoreCmsPlanOrder entity)
        {
            return await _dal.UpdateAsync(entity);
        }
        /// <summary>
        /// é‡å†™å¼‚步更新方法方法
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> UpdateAsync(List<CoreCmsPlanOrder> entity)
        {
            return await _dal.UpdateAsync(entity);
        }
        /// <summary>
        /// é‡å†™åˆ é™¤æŒ‡å®šID的数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> DeleteByIdAsync(object id)
        {
            return await _dal.DeleteByIdAsync(id);
        }
        /// <summary>
        /// é‡å†™åˆ é™¤æŒ‡å®šID集合的数据(批量删除)
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids)
        {
            return await _dal.DeleteByIdsAsync(ids);
        }
        #endregion
        #region èŽ·å–ç¼“å­˜çš„æ‰€æœ‰æ•°æ®==========================================================
        /// <summary>
        /// èŽ·å–ç¼“å­˜çš„æ‰€æœ‰æ•°æ®
        /// </summary>
        /// <returns></returns>
        public async Task<List<CoreCmsPlanOrder>> GetCaChe()
        {
            return await _dal.GetCaChe();
        }
        #endregion
       #region é‡å†™æ ¹æ®æ¡ä»¶æŸ¥è¯¢åˆ†é¡µæ•°æ®
        /// <summary>
        ///     é‡å†™æ ¹æ®æ¡ä»¶æŸ¥è¯¢åˆ†é¡µæ•°æ®
        /// </summary>
        /// <param name="predicate">判断集合</param>
        /// <param name="orderByType">排序方式</param>
        /// <param name="pageIndex">当前页面索引</param>
        /// <param name="pageSize">分布大小</param>
        /// <param name="orderByExpression"></param>
        /// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
        /// <returns></returns>
        public async Task<IPageList<CoreCmsPlanOrder>> QueryPageAsync(Expression<Func<CoreCmsPlanOrder, bool>> predicate,
            Expression<Func<CoreCmsPlanOrder, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
            int pageSize = 20, bool blUseNoLock = false)
        {
            return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
        }
        #endregion
        #region èŽ·å–è®¡åˆ’è®¢å•åˆ—è¡¨å¾®ä¿¡å°ç¨‹åº
        /// <summary>
        /// èŽ·å–è®¡åˆ’è®¢å•åˆ—è¡¨å¾®ä¿¡å°ç¨‹åº
        /// </summary>
        /// <returns></returns>
        public async Task<WebApiCallBack> GetOrderList(int status = -1, int userId = 0, int page = 1, int limit = 5)
        {
            var jm = new WebApiCallBack { status = true };
            var where = PredicateBuilder.True<CoreCmsPlanOrder>();
            if (status > -1)
            {
                where = where.And(p => p.status == status);
            }
            if (userId > 0)
            {
                where = where.And(p => p.userId == userId);
            }
            var list = await _dal.QueryPageAsync(where, p => p.createTime, OrderByType.Desc, page, limit);
            if (list!=null && list.Count>0)
            {
                foreach (var order in list)
                {
                    //获取相关状态描述说明转换
                    order.statusText = EnumHelper.GetEnumDescriptionByValue<GlobalEnumVars.PlanOrderTiJiao>(order.status);
                }
            }
            jm.data = new
            {
                list,
                count = list.TotalCount,
                page,
                limit,
                status
            };
            return jm;
        }
        #endregion
        /// <summary>
        ///     åˆ›å»ºè®¢å•
        /// </summary>
        /// <param name="userId">用户序列</param>
        /// <param name="userName">用户昵称</param>
        /// <param name="status">计划订单状态</param>
        /// <param name="itemIds">明细id</param>
        /// <param name="itemNums">明细数量</param>
        /// <returns></returns>
        public async Task<WebApiCallBack> ToUpdate(string orderId, int userId, string userName, int status, string itemIds, string itemNums)
        {
            var jm = new WebApiCallBack() { methodDescription = "修改计划订单" };
            try
            {
                //开始事务处理
                _unitOfWork.BeginTran();
                var order  = await _dal.QueryByIdAsync(orderId);
                order.upDataBy = userName;
                order.upDataTime = DateTime.Now;
                List<CoreCmsPlanOrderItem> orderItems;
                var ids = CommonHelper.StringToIntArray(itemIds);
                var nums = CommonHelper.StringToStringArray(itemNums);
                orderItems = await _itemDal.QueryListByClauseAsync(x => x.orderId == orderId);
                decimal orderAmount = 0;
                for (int i=0;i< ids.Length; i++)
                {
                    var id = ids[i];
                    int num = 0;
                    int.TryParse(nums[i], out num);
                   var item = orderItems.Where(p => p.id == id).FirstOrDefault();
                    item.nums = num;
                    item.amount = item.price * (decimal)num;
                    var jms = await _itemDal.UpdateAsync(item);
                    orderAmount += item.amount;
                }
                order.orderAmount = orderAmount;
                order.keYongAmount = order.oldOrderAmount - order.orderAmount;
                if (order.keYongAmount < 0)
                {
                    _unitOfWork.RollbackTran();
                    jm.status = false;
                    jm.otherData = "可用余额不能为负";
                }
                if (status == 2)
                {
                    order.status = 2;
                    if (order.keYongAmount > 0)
                    {
                        //修改用户余额
                        var jmsss = await _coreCmsUserServices.UpdateBalance(order.userId, order.keYongAmount, "用户计划订单款项结余");
                    }
                }
                //校验后再创建订单
                var jmss = await _dal.UpdateAsync(order);
                _unitOfWork.CommitTran();
                jm.status = true;
                jm.data = order;
                jm.msg = "修改成功";
            }
            catch (Exception e)
            {
                _unitOfWork.RollbackTran();
                jm.status = false;
                jm.otherData = e.ToString();
            }
            return jm;
        }
        /// <summary>
        ///     åˆ›å»ºè®¢å•
        /// </summary>
        /// <param name="jiHuaOrders">计划订单</param>
        /// <param name="userId">用户序列</param>
        /// <param name="userName">用户昵称</param>
        /// <returns></returns>
        public async Task<AdminUiCallBack> ToAddJiHua(List<JiHuaOrder> jiHuaOrders, int userId, string userName)
        {
            var jm = new AdminUiCallBack() ;
            try
            {
                //开始事务处理
                _unitOfWork.BeginTran();
                CoreCmsPlanOrder order = new CoreCmsPlanOrder();
                order.orderId = CommonHelper.GetSerialNumberType((int)GlobalEnumVars.SerialNumberType.计划订单编号);
                order.status = 1;
                order.shipMobile = jiHuaOrders[0].shipMobile;
                order.shipAddress = jiHuaOrders[0].shipAddress;
                order.shipName = jiHuaOrders[0].shipName; ;
                var user = await _unitOfWork.GetDbClient().Queryable<CoreCmsUser>().Where(x => x.mobile == order.shipMobile && x.isDelete == false && x.status == 1).FirstAsync();
                if (user != null)
                {
                    order.userId = user.id;
                }
                else
                {
                    jm.code = 1;
                    jm.msg = order.shipMobile + "没有找到用户";
                    return jm;
                }
                order.createBy = userName;
                order.createTime = DateTime.Now;
                order.upDataBy = userName;
                order.upDataTime = DateTime.Now;
                order.isdelete = false;
                decimal orderAmount = 0;
                for (int i = 0; i < jiHuaOrders.Count; i++)
                {
                    var item = new CoreCmsPlanOrderItem();
                    item.orderId = order.orderId;
                    item.name = jiHuaOrders[i].name;
                    item.specification = jiHuaOrders[i].specification;
                    item.price = jiHuaOrders[i].price;
                    item.nums = jiHuaOrders[i].nums; ;
                    item.amount = item.price * (decimal)jiHuaOrders[i].nums;
                    item.createBy = userName;
                    item.createTime = DateTime.Now;
                    item.upDataBy = userName;
                    item.upDataTime = DateTime.Now;
                    item.isdelete = false;
                    var jms = await _itemDal.InsertAsync(item);
                    orderAmount += item.amount;
                }
                order.orderAmount = orderAmount;
                order.oldOrderAmount = orderAmount;
                order.keYongAmount = 0;
                //校验后再创建订单
                var jmss = await _dal.InsertAsync(order);
                _unitOfWork.CommitTran();
                jm.code = 0;
                jm.data = order;
                jm.msg = "导入成功";
            }
            catch (Exception e)
            {
                _unitOfWork.RollbackTran();
                jm.code = 0;
                jm.otherData = e.ToString();
            }
            return jm;
        }
    }
}
CoreCms.Net.Utility/Helper/CommonHelper.cs
@@ -312,6 +312,9 @@
                        str += charsStr2[rand.Next(0, charsLen2)];
                    }
                    break;
                case (int)GlobalEnumVars.SerialNumberType.计划订单编号:         //计划订单编号
                    str = type + YitIdHelper.NextId().ToString();
                    break;
                default:
                    str = 'T' + YitIdHelper.NextId().ToString();
                    break;
CoreCms.Net.Web.Admin/Controllers/Com/ToolsController.cs
@@ -37,8 +37,12 @@
using COSXML.Auth;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using SKIT.FlurlHttpClient.Wechat.Api;
using SKIT.FlurlHttpClient.Wechat.Api.Models;
using SqlSugar;
@@ -89,6 +93,7 @@
        private readonly IWeChatApiHttpClientFactory _weChatApiHttpClientFactory;
        private readonly SemaphoreSlim _semaphore;
        private readonly ICoreCmsPlanOrderServices _coreCmsPlanOrderServices;
        /// <summary>
        ///     æž„造函数
@@ -111,7 +116,8 @@
            , ISysUserRoleServices sysUserRoleServices
            , ISysOrganizationServices sysOrganizationServices,
            ICoreCmsLogisticsServices logisticsServices, ISysLoginRecordServices sysLoginRecordServices, ISysNLogRecordsServices sysNLogRecordsServices, ICoreCmsBillPaymentsServices paymentsServices, ICoreCmsBillDeliveryServices billDeliveryServices, ICoreCmsUserServices userServices, ICoreCmsOrderServices orderServices, ICoreCmsBillAftersalesServices aftersalesServices, ICoreCmsSettingServices settingServices, ICoreCmsProductsServices productsServices, ICoreCmsServicesServices servicesServices, ISysRoleMenuServices sysRoleMenuServices
            , IWeChatApiHttpClientFactory weChatApiHttpClientFactory, ICoreCmsPagesServices pagesServices, IToolsServices toolsServices, ICoreCmsReportsServices reportsServices, ICoreCmsGoodsCategoryServices goodsCategoryServices)
            , IWeChatApiHttpClientFactory weChatApiHttpClientFactory, ICoreCmsPagesServices pagesServices, IToolsServices toolsServices, ICoreCmsReportsServices reportsServices, ICoreCmsGoodsCategoryServices goodsCategoryServices
            , ICoreCmsPlanOrderServices  coreCmsPlanOrderServices )
        {
            _user = user;
            _webHostEnvironment = webHostEnvironment;
@@ -148,6 +154,7 @@
            _toolsServices = toolsServices;
            _reportsServices = reportsServices;
            _goodsCategoryServices = goodsCategoryServices;
            _coreCmsPlanOrderServices = coreCmsPlanOrderServices;
            //最多允许2个线程同时访问;
            _semaphore = new SemaphoreSlim(2);
@@ -363,6 +370,258 @@
        //通用操作=========================================================================
        #region è®¡åˆ’订单上传接口====================================================
        /// <summary>
        /// è®¡åˆ’订单上传接口
        /// </summary>
        /// <returns></returns>
        [Authorize]
        [HttpPost]
        public async Task<AdminUiCallBack> UploadFilesXls()
        {
            var jm = new AdminUiCallBack();
            await _semaphore.WaitAsync();
            try
            {
                var filesStorageOptions = await _coreCmsSettingServices.GetFilesStorageOptions();
                //初始化上传参数
                var maxSize = 1024 * 1024 * filesStorageOptions.MaxSize; //上传大小5M
                var file = Request.Form.Files["file"];
                if (file == null)
                {
                    jm.msg = "请选择文件";
                    return jm;
                }
                var fileName = file.FileName;
                var fileExt = Path.GetExtension(fileName).ToLowerInvariant();
                //检查大小
                if (file.Length > maxSize)
                {
                    jm.msg = "上传文件大小超过限制,最大允许上传" + filesStorageOptions.MaxSize + "M";
                    return jm;
                }
                //检查文件扩展名
                if (string.IsNullOrEmpty(fileExt) ||
                    Array.IndexOf(filesStorageOptions.FileTypes.Split(','), fileExt.Substring(1).ToLower()) == -1)
                {
                    jm.msg = "上传文件扩展名是不允许的扩展名,请上传后缀名为:" + filesStorageOptions.FileTypes;
                    return jm;
                }
                var lie = new List<JiHuaOrder>();
                using (var fileStream = file.OpenReadStream())
                {
                    // ä½¿ç”¨HSSFWorkbook打开.xls格式的文件
                    IWorkbook workbook = new XSSFWorkbook(fileStream);
                    // èŽ·å–ç¬¬ä¸€ä¸ªå·¥ä½œè¡¨
                    ISheet sheet = workbook.GetSheetAt(0);
                    // è¿­ä»£å·¥ä½œè¡¨ä¸­çš„æ‰€æœ‰è¡Œ
                    for (int i = 1; i <= sheet.LastRowNum; i++)
                    {
                        var hang = new JiHuaOrder();
                        IRow row = sheet.GetRow(i);
                        if (row == null) continue; // è·³è¿‡ç©ºè¡Œ
                        ICell cell1 = row.GetCell(1);
                        if (cell1 == null)
                        {
                            jm.msg ="第" +(i+1) + "学校不能为空";
                            return jm;
                        }
                        hang.shipAddress = getcellvalue(cell1);
                        ICell cell2 = row.GetCell(2);
                        if (cell2 == null)
                        {
                            jm.msg = "第" + (i + 1) + "联系人不能为空";
                            return jm;
                        }
                        hang.shipName = getcellvalue(cell2);
                        ICell cell3 = row.GetCell(3);
                        if (cell3 == null)
                        {
                            jm.msg = "第" + (i + 1) + "联系电话不能为空";
                            return jm;
                        }
                        hang.shipMobile = getcellvalue(cell3);
                        ICell cell4 = row.GetCell(4);
                        if (cell4 == null)
                        {
                            jm.msg = "第" + (i + 1) + "商品名称不能为空";
                            return jm;
                        }
                        hang.name = getcellvalue(cell4);
                        ICell cell5 = row.GetCell(5);
                        if (cell5 == null)
                        {
                            jm.msg = "第" + (i + 1) + "规格不能为空";
                            return jm;
                        }
                        hang.specification = getcellvalue(cell5);
                        ICell cell6 = row.GetCell(6);
                        if (cell6 == null)
                        {
                            jm.msg = "第" + (i + 1) + "单价(元)不能为空";
                            return jm;
                        }
                        hang.price = decimal.Parse(getcellvalue(cell6));
                        ICell cell7 = row.GetCell(7);
                        if (cell7 == null)
                        {
                            jm.msg = "第" + (i + 1) + "数量不能为空";
                            return jm;
                        }
                        hang.nums = int.Parse(getcellvalue(cell7)); ;
                        lie.Add(hang);
                    }
                }
                lie = lie.OrderBy(x => x.shipAddress).ThenBy(x => x.specification).ToList();
                string url = string.Empty;
                url = "121212";
                if (lie!=null && lie.Count > 0)
                {
                   var  order = new List<JiHuaOrder>();
                    for(int i=0;i< lie.Count; i++)
                    {
                        if (i == 0 )
                        {
                            order.Add(lie[i]);
                            //if(lie.Count == 1)
                            //{
                            //    //保存订单
                            //    jm = await  _coreCmsPlanOrderServices.ToAddJiHua(lie,_user.ID, _user.Name);
                            //    if (jm.code == 1)
                            //    {
                            //        return jm;
                            //    }
                            //}
                        }
                        else
                        {
                            if(lie[i].shipAddress  == lie[i - 1].shipAddress)
                            {
                                order.Add(lie[i]);
                            }
                            else
                            {
                                //保存订单
                                jm = await _coreCmsPlanOrderServices.ToAddJiHua(lie, _user.ID, _user.Name);
                                if (jm.code == 1)
                                {
                                    return jm;
                                }
                                order = new List<JiHuaOrder>();
                                order.Add(lie[i]);
                            }
                        }
                        if (i == lie.Count - 1)
                        {
                            //保存订单
                            jm = await _coreCmsPlanOrderServices.ToAddJiHua(lie, _user.ID, _user.Name);
                            if (jm.code == 1)
                            {
                                return jm;
                            }
                        }
                    }
                }
                else
                {
                    jm.code =1;
                    jm.msg = "表格无数据";
                    jm.data = new
                    {
                        fileUrl = url,
                        src = url
                    };
                }
                var bl = !string.IsNullOrEmpty(url);
                jm.code = bl ? 0 : 1;
                jm.msg = bl ? "上传成功!" : "上传失败";
                jm.data = new
                {
                    fileUrl = url,
                    src = url
                };
            }
            catch (Exception e)
            {
                jm.code = 1;
                jm.msg = "数据异常";
                jm.data = e;
            }
            finally
            {
                _semaphore.Release(); // é‡Šæ”¾è®¿é—®
            }
            return jm;
        }
        /// <summary>
        /// è®¡åˆ’订单上传接口
        /// </summary>
        /// <returns></returns>
        public string getcellvalue(ICell cell)
        {
            string cellvalue = "";
            switch (cell.CellType)
            {
                case CellType.String:
                    // Console.WriteLine(cell.StringCellValue);
                    cellvalue = cell.StringCellValue.Trim();
                    break;
                case CellType.Numeric:
                    //Console.WriteLine(cell.NumericCellValue);
                    cellvalue = cell.NumericCellValue.ToString().Trim();
                    break;
                case CellType.Boolean:
                    //Console.WriteLine(cell.BooleanCellValue);
                    cellvalue = cell.BooleanCellValue.ToString().Trim();
                    break;
                case CellType.Error:
                    // Console.WriteLine(cell.ErrorCellValue);
                    cellvalue = cell.ErrorCellValue.ToString().Trim();
                    break;
                    // å¯ä»¥æ·»åŠ å…¶ä»–ç±»åž‹çš„case
            }
            return cellvalue;
        }
        #endregion
        #region é€šç”¨ä¸Šä¼ æŽ¥å£====================================================
        /// <summary>
CoreCms.Net.Web.Admin/Controllers/Order/CoreCmsPlanOrderController.cs
New file
@@ -0,0 +1,975 @@
/***********************************************************************
 *            Project: baifenBinfa
 *        ProjectName: ç™¾åˆ†å…µæ³•管理系统
 *                Web: http://chuanyin.com
 *             Author:
 *              Email:
 *         CreateTime: 2024/4/17 13:28:20
 *        Description: æš‚æ— 
 ***********************************************************************/
using System;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.Entities.Expression;
using CoreCms.Net.Model.FromBody;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Filter;
using CoreCms.Net.Loging;
using CoreCms.Net.IServices;
using CoreCms.Net.Utility.Helper;
using CoreCms.Net.Utility.Extensions;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using NPOI.HSSF.UserModel;
using SqlSugar;
using CoreCms.Net.Web.Admin.Infrastructure;
using CoreCms.Net.Model.Entities.Order;
using CoreCms.Net.Services;
using System.Threading;
namespace CoreCms.Net.Web.Admin.Controllers
{
    /// <summary>
    /// è®¡åˆ’订单表
    ///</summary>
    [Description("计划订单表")]
    [Route("api/[controller]/[action]")]
    [ApiController]
    [RequiredErrorForAdmin]
    [Authorize(Permissions.Name)]
    public class CoreCmsPlanOrderController : ControllerBase
    {
        private readonly IWebHostEnvironment _webHostEnvironment;
        private readonly ICoreCmsPlanOrderServices _CoreCmsPlanOrderServices;
        private readonly ICoreCmsPlanOrderItemServices _planOrderItemServices;
        private readonly ICoreCmsSettingServices _coreCmsSettingServices;
        private readonly SemaphoreSlim _semaphore;
        /// <summary>
        /// æž„造函数
        ///</summary>
        public CoreCmsPlanOrderController(IWebHostEnvironment webHostEnvironment
            ,ICoreCmsPlanOrderServices CoreCmsPlanOrderServices
             , ICoreCmsPlanOrderItemServices planOrderItemServices
            , ICoreCmsSettingServices coreCmsSettingServices
            )
        {
            _webHostEnvironment = webHostEnvironment;
            _CoreCmsPlanOrderServices = CoreCmsPlanOrderServices;
            _planOrderItemServices = planOrderItemServices;
            _coreCmsSettingServices = coreCmsSettingServices;
        }
        #region èŽ·å–åˆ—è¡¨============================================================
        // POST: Api/CoreCmsPlanOrder/GetPageList
         /// <summary>
        /// èŽ·å–åˆ—è¡¨
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [Description("获取列表")]
        public async Task<AdminUiCallBack> GetPageList()
        {
            var jm = new AdminUiCallBack();
            var pageCurrent = Request.Form["page"].FirstOrDefault().ObjectToInt(1);
            var pageSize = Request.Form["limit"].FirstOrDefault().ObjectToInt(30);
            var where = PredicateBuilder.True<CoreCmsPlanOrder>();
            //获取排序字段
            var orderField = Request.Form["orderField"].FirstOrDefault();
            Expression<Func<CoreCmsPlanOrder, object>> orderEx = orderField switch
            {
                "orderId" => p => p.orderId,"orderAmount" => p => p.orderAmount,"status" => p => p.status,"userId" => p => p.userId,"shipAddress" => p => p.shipAddress,"shipName" => p => p.shipName,"shipMobile" => p => p.shipMobile,"oldOrderAmount" => p => p.oldOrderAmount,"keYongAmount" => p => p.keYongAmount,"createTime" => p => p.createTime,"upDataTime" => p => p.upDataTime,"createBy" => p => p.createBy,"upDataBy" => p => p.upDataBy,"isdelete" => p => p.isdelete,
                _ => p => p.orderId
            };
            //设置排序方式
            var orderDirection = Request.Form["orderDirection"].FirstOrDefault();
            var orderBy = orderDirection switch
            {
                "asc" => OrderByType.Asc,
                "desc" => OrderByType.Desc,
                _ => OrderByType.Desc
            };
            //查询筛选
            //订单号 varchar
            var orderId = Request.Form["orderId"].FirstOrDefault();
            if (!string.IsNullOrEmpty(orderId))
            {
                where = where.And(p => p.orderId.Contains(orderId));
            }
            //调整订单金额 decimal
            var orderAmount = Request.Form["orderAmount"].FirstOrDefault().ObjectToDecimal(0);
            if (orderAmount > 0)
            {
                where = where.And(p => p.orderAmount == orderAmount);
            }
            //订单状态 int
            var status = Request.Form["status"].FirstOrDefault().ObjectToInt(0);
            if (status > 0)
            {
                where = where.And(p => p.status == status);
            }
            //用户ID å…³è”user.id int
            var userId = Request.Form["userId"].FirstOrDefault().ObjectToInt(0);
            if (userId > 0)
            {
                where = where.And(p => p.userId == userId);
            }
            //学校 varchar
            var shipAddress = Request.Form["shipAddress"].FirstOrDefault();
            if (!string.IsNullOrEmpty(shipAddress))
            {
                where = where.And(p => p.shipAddress.Contains(shipAddress));
            }
            //联系人 varchar
            var shipName = Request.Form["shipName"].FirstOrDefault();
            if (!string.IsNullOrEmpty(shipName))
            {
                where = where.And(p => p.shipName.Contains(shipName));
            }
            //收货电话 varchar
            var shipMobile = Request.Form["shipMobile"].FirstOrDefault();
            if (!string.IsNullOrEmpty(shipMobile))
            {
                where = where.And(p => p.shipMobile.Contains(shipMobile));
            }
            //计划订单金额 decimal
            var oldOrderAmount = Request.Form["oldOrderAmount"].FirstOrDefault().ObjectToDecimal(0);
            if (oldOrderAmount > 0)
            {
                where = where.And(p => p.oldOrderAmount == oldOrderAmount);
            }
            //可用余额 decimal
            var keYongAmount = Request.Form["keYongAmount"].FirstOrDefault().ObjectToDecimal(0);
            if (keYongAmount > 0)
            {
                where = where.And(p => p.keYongAmount == keYongAmount);
            }
            //建立时间 datetime
            var createTime = Request.Form["createTime"].FirstOrDefault();
            if (!string.IsNullOrEmpty(createTime))
            {
                if (createTime.Contains("到"))
                {
                    var dts = createTime.Split("到");
                    var dtStart = dts[0].Trim().ObjectToDate();
                    where = where.And(p => p.createTime > dtStart);
                    var dtEnd = dts[1].Trim().ObjectToDate();
                    where = where.And(p => p.createTime < dtEnd);
                }
                else
                {
                    var dt = createTime.ObjectToDate();
                    where = where.And(p => p.createTime > dt);
                }
            }
            //修改时间 datetime
            var upDataTime = Request.Form["upDataTime"].FirstOrDefault();
            if (!string.IsNullOrEmpty(upDataTime))
            {
                if (upDataTime.Contains("到"))
                {
                    var dts = upDataTime.Split("到");
                    var dtStart = dts[0].Trim().ObjectToDate();
                    where = where.And(p => p.upDataTime > dtStart);
                    var dtEnd = dts[1].Trim().ObjectToDate();
                    where = where.And(p => p.upDataTime < dtEnd);
                }
                else
                {
                    var dt = upDataTime.ObjectToDate();
                    where = where.And(p => p.upDataTime > dt);
                }
            }
            //创建人 varchar
            var createBy = Request.Form["createBy"].FirstOrDefault();
            if (!string.IsNullOrEmpty(createBy))
            {
                where = where.And(p => p.createBy.Contains(createBy));
            }
            //修改人 varchar
            var upDataBy = Request.Form["upDataBy"].FirstOrDefault();
            if (!string.IsNullOrEmpty(upDataBy))
            {
                where = where.And(p => p.upDataBy.Contains(upDataBy));
            }
            //删除标志 bit
            var isdelete = Request.Form["isdelete"].FirstOrDefault();
            if (!string.IsNullOrEmpty(isdelete) && isdelete.ToLowerInvariant() == "true")
            {
                where = where.And(p => p.isdelete == true);
            }
            else if (!string.IsNullOrEmpty(isdelete) && isdelete.ToLowerInvariant() == "false")
            {
                where = where.And(p => p.isdelete == false);
            }
            //获取数据
            var list = await _CoreCmsPlanOrderServices.QueryPageAsync(where, orderEx, orderBy, pageCurrent, pageSize, true);
            if (list != null && list.Count > 0)
            {
                foreach (var order in list)
                {
                    //获取相关状态描述说明转换
                    order.statusText = EnumHelper.GetEnumDescriptionByValue<GlobalEnumVars.PlanOrderTiJiao>(order.status);
                }
            }
            //返回数据
            jm.data = list;
            jm.code = 0;
            jm.count = list.TotalCount;
            jm.msg = "数据调用成功!";
            return jm;
        }
        #endregion
        #region é¦–页数据============================================================
        // POST: Api/CoreCmsPlanOrder/GetIndex
        /// <summary>
        /// é¦–页数据
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [Description("首页数据")]
        public AdminUiCallBack GetIndex()
        {
            //返回数据
            var jm = new AdminUiCallBack { code = 0 };
            return jm;
        }
        #endregion
        #region åˆ›å»ºæ•°æ®============================================================
        // POST: Api/CoreCmsPlanOrder/GetCreate
        /// <summary>
        /// åˆ›å»ºæ•°æ®
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [Description("创建数据")]
        public AdminUiCallBack GetCreate()
        {
            //返回数据
            var jm = new AdminUiCallBack { code = 0 };
            return jm;
        }
        #endregion
        #region åˆ›å»ºæäº¤============================================================
        // POST: Api/CoreCmsPlanOrder/DoCreate
        /// <summary>
        /// åˆ›å»ºæäº¤
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        [HttpPost]
        [Description("创建提交")]
        public async Task<AdminUiCallBack> DoCreate([FromBody]CoreCmsPlanOrder entity)
        {
            var jm = await _CoreCmsPlanOrderServices.InsertAsync(entity);
            return jm;
        }
        #endregion
        #region ç¼–辑数据============================================================
        // POST: Api/CoreCmsPlanOrder/GetEdit
        /// <summary>
        /// ç¼–辑数据
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        [HttpPost]
        [Description("编辑数据")]
        public async Task<AdminUiCallBack> GetEdit([FromBody]FMIntId entity)
        {
            var jm = new AdminUiCallBack();
            var model = await _CoreCmsPlanOrderServices.QueryByIdAsync(entity.id, false);
            if (model == null)
            {
                jm.msg = "不存在此信息";
                return jm;
            }
            jm.code = 0;
            jm.data = model;
            return jm;
        }
        #endregion
        #region ç¼–辑提交============================================================
        // POST: Api/CoreCmsPlanOrder/Edit
        /// <summary>
        /// ç¼–辑提交
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        [HttpPost]
        [Description("编辑提交")]
        public async Task<AdminUiCallBack> DoEdit([FromBody]CoreCmsPlanOrder entity)
        {
            var jm = await _CoreCmsPlanOrderServices.UpdateAsync(entity);
            return jm;
        }
        #endregion
        #region åˆ é™¤æ•°æ®============================================================
        // POST: Api/CoreCmsPlanOrder/DoDelete/10
        /// <summary>
        /// å•选删除
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        [HttpPost]
        [Description("单选删除")]
        public async Task<AdminUiCallBack> DoDelete([FromBody]FMStringId entity)
        {
            var jm = new AdminUiCallBack();
            var model = await _CoreCmsPlanOrderServices.ExistsAsync(p => p.orderId == entity.id, true);
            if (!model)
            {
                jm.msg = GlobalConstVars.DataisNo;
                return jm;
            }
            jm = await _CoreCmsPlanOrderServices.DeleteByIdAsync(entity.id);
            return jm;
        }
        #endregion
        #region æ‰¹é‡åˆ é™¤============================================================
        // POST: Api/CoreCmsPlanOrder/DoBatchDelete/10,11,20
        /// <summary>
        /// æ‰¹é‡åˆ é™¤
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        [HttpPost]
        [Description("批量删除")]
        public async Task<AdminUiCallBack> DoBatchDelete([FromBody]FMArrayIntIds entity)
        {
            var jm = await _CoreCmsPlanOrderServices.DeleteByIdsAsync(entity.id);
            return jm;
        }
        #endregion
        #region é¢„览数据============================================================
        // POST: Api/CoreCmsPlanOrder/GetDetails/10
        /// <summary>
        /// é¢„览数据
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        [HttpPost]
        [Description("预览数据")]
        public async Task<AdminUiCallBack> GetDetails([FromBody]FMStringId entity)
        {
            var jm = new AdminUiCallBack();
            var model = await _CoreCmsPlanOrderServices.QueryByIdAsync(entity.id, false);
            if (model == null)
            {
                jm.msg = "不存在此信息";
                return jm;
            }
            //获取相关状态描述说明转换
            model.statusText = EnumHelper.GetEnumDescriptionByValue<GlobalEnumVars.PlanOrderTiJiao>(model.status);
            var modelItem = await _planOrderItemServices.QueryListByClauseAsync(p => p.orderId == entity.id, p => p.specification, OrderByType.Asc);
            jm.data = new
            {
                model,
                modelItem,
            };
            jm.code = 0;
            //jm.data = model;
            return jm;
        }
        #endregion
        #region é€‰æ‹©å¯¼å‡º============================================================
        // POST: Api/CoreCmsPlanOrder/SelectExportExcel/10
        /// <summary>
        /// é€‰æ‹©å¯¼å‡º
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        [HttpPost]
        [Description("选择导出")]
        public async Task<AdminUiCallBack> SelectExportExcel([FromBody]FMArrayStringIds entity)
        {
            var jm = new AdminUiCallBack();
            //创建Excel文件的对象
            var book = new HSSFWorkbook();
            //添加一个sheet
            var mySheet = book.CreateSheet("Sheet1");
            //获取list数据
            var listModel = await _CoreCmsPlanOrderServices.QueryListByClauseAsync(p => entity.id.Contains(p.orderId), p => p.orderId, OrderByType.Asc, true);
            //给sheet1添加第一行的头部标题
            var headerRow = mySheet.CreateRow(0);
            var headerStyle = ExcelHelper.GetHeaderStyle(book);
            var cellNum = 0;
            var cell0 = headerRow.CreateCell(cellNum);
            cell0.SetCellValue("订单号");
            cell0.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell1 = headerRow.CreateCell(cellNum);
            cell1.SetCellValue("调整订单金额");
            cell1.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell2 = headerRow.CreateCell(cellNum);
            cell2.SetCellValue("订单状态");
            cell2.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell3 = headerRow.CreateCell(cellNum);
            cell3.SetCellValue("用户ID å…³è”user.id");
            cell3.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell4 = headerRow.CreateCell(cellNum);
            cell4.SetCellValue("学校");
            cell4.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell5 = headerRow.CreateCell(cellNum);
            cell5.SetCellValue("联系人");
            cell5.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell6 = headerRow.CreateCell(cellNum);
            cell6.SetCellValue("收货电话");
            cell6.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell7 = headerRow.CreateCell(cellNum);
            cell7.SetCellValue("计划订单金额");
            cell7.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell8 = headerRow.CreateCell(cellNum);
            cell8.SetCellValue("可用余额");
            cell8.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell9 = headerRow.CreateCell(cellNum);
            cell9.SetCellValue("建立时间");
            cell9.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell10 = headerRow.CreateCell(cellNum);
            cell10.SetCellValue("修改时间");
            cell10.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell11 = headerRow.CreateCell(cellNum);
            cell11.SetCellValue("创建人");
            cell11.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell12 = headerRow.CreateCell(cellNum);
            cell12.SetCellValue("修改人");
            cell12.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell13 = headerRow.CreateCell(cellNum);
            cell13.SetCellValue("删除标志");
            cell13.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            headerRow.Height = 30 * 20;
            var commonCellStyle = ExcelHelper.GetCommonStyle(book);
            //将数据逐步写入sheet1各个行
            for (var i = 0; i < listModel.Count; i++)
            {
                var rowTemp = mySheet.CreateRow(i + 1);
                var cellNumTemp = 0;
                    var rowTemp0 = rowTemp.CreateCell(cellNumTemp);
                        rowTemp0.SetCellValue(listModel[i].orderId.ToString());
                        rowTemp0.CellStyle = commonCellStyle;
                        cellNumTemp++;
                    var rowTemp1 = rowTemp.CreateCell(cellNumTemp);
                        rowTemp1.SetCellValue(listModel[i].orderAmount.ToString());
                        rowTemp1.CellStyle = commonCellStyle;
                        cellNumTemp++;
                    var rowTemp2 = rowTemp.CreateCell(cellNumTemp);
                        rowTemp2.SetCellValue(listModel[i].status.ToString());
                        rowTemp2.CellStyle = commonCellStyle;
                        cellNumTemp++;
                    var rowTemp3 = rowTemp.CreateCell(cellNumTemp);
                        rowTemp3.SetCellValue(listModel[i].userId.ToString());
                        rowTemp3.CellStyle = commonCellStyle;
                        cellNumTemp++;
                    var rowTemp4 = rowTemp.CreateCell(cellNumTemp);
                        rowTemp4.SetCellValue(listModel[i].shipAddress.ToString());
                        rowTemp4.CellStyle = commonCellStyle;
                        cellNumTemp++;
                    var rowTemp5 = rowTemp.CreateCell(cellNumTemp);
                        rowTemp5.SetCellValue(listModel[i].shipName.ToString());
                        rowTemp5.CellStyle = commonCellStyle;
                        cellNumTemp++;
                    var rowTemp6 = rowTemp.CreateCell(cellNumTemp);
                        rowTemp6.SetCellValue(listModel[i].shipMobile.ToString());
                        rowTemp6.CellStyle = commonCellStyle;
                        cellNumTemp++;
                    var rowTemp7 = rowTemp.CreateCell(cellNumTemp);
                        rowTemp7.SetCellValue(listModel[i].oldOrderAmount.ToString());
                        rowTemp7.CellStyle = commonCellStyle;
                        cellNumTemp++;
                    var rowTemp8 = rowTemp.CreateCell(cellNumTemp);
                        rowTemp8.SetCellValue(listModel[i].keYongAmount.ToString());
                        rowTemp8.CellStyle = commonCellStyle;
                        cellNumTemp++;
                    var rowTemp9 = rowTemp.CreateCell(cellNumTemp);
                        rowTemp9.SetCellValue(listModel[i].createTime.ToString());
                        rowTemp9.CellStyle = commonCellStyle;
                        cellNumTemp++;
                    var rowTemp10 = rowTemp.CreateCell(cellNumTemp);
                        rowTemp10.SetCellValue(listModel[i].upDataTime.ToString());
                        rowTemp10.CellStyle = commonCellStyle;
                        cellNumTemp++;
                    var rowTemp11 = rowTemp.CreateCell(cellNumTemp);
                        rowTemp11.SetCellValue(listModel[i].createBy.ToString());
                        rowTemp11.CellStyle = commonCellStyle;
                        cellNumTemp++;
                    var rowTemp12 = rowTemp.CreateCell(cellNumTemp);
                        rowTemp12.SetCellValue(listModel[i].upDataBy.ToString());
                        rowTemp12.CellStyle = commonCellStyle;
                        cellNumTemp++;
                    var rowTemp13 = rowTemp.CreateCell(cellNumTemp);
                        rowTemp13.SetCellValue(listModel[i].isdelete.ToString());
                        rowTemp13.CellStyle = commonCellStyle;
                        cellNumTemp++;
            }
            // å¯¼å‡ºexcel
            string webRootPath = _webHostEnvironment.WebRootPath;
            string tpath = "/files/" + DateTime.Now.ToString("yyyy-MM-dd") + "/";
            string fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "-CoreCmsPlanOrder导出(选择结果).xls";
            string filePath = webRootPath + tpath;
            DirectoryInfo di = new DirectoryInfo(filePath);
            if (!di.Exists)
            {
                di.Create();
            }
            FileStream fileHssf = new FileStream(filePath + fileName, FileMode.Create);
            book.Write(fileHssf);
            fileHssf.Close();
            jm.code = 0;
            jm.msg = GlobalConstVars.ExcelExportSuccess;
            jm.data = tpath + fileName;
            return jm;
        }
        #endregion
        #region æŸ¥è¯¢å¯¼å‡º============================================================
        // POST: Api/CoreCmsPlanOrder/QueryExportExcel/10
        /// <summary>
        /// æŸ¥è¯¢å¯¼å‡º
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [Description("查询导出")]
        public async Task<AdminUiCallBack> QueryExportExcel()
        {
            var jm = new AdminUiCallBack();
            var where = PredicateBuilder.True<CoreCmsPlanOrder>();
                //查询筛选
            //订单号 varchar
            var orderId = Request.Form["orderId"].FirstOrDefault();
            if (!string.IsNullOrEmpty(orderId))
            {
                where = where.And(p => p.orderId.Contains(orderId));
            }
            //调整订单金额 decimal
            var orderAmount = Request.Form["orderAmount"].FirstOrDefault().ObjectToDecimal(0);
            if (orderAmount > 0)
            {
                where = where.And(p => p.orderAmount == orderAmount);
            }
            //订单状态 int
            var status = Request.Form["status"].FirstOrDefault().ObjectToInt(0);
            if (status > 0)
            {
                where = where.And(p => p.status == status);
            }
            //用户ID å…³è”user.id int
            var userId = Request.Form["userId"].FirstOrDefault().ObjectToInt(0);
            if (userId > 0)
            {
                where = where.And(p => p.userId == userId);
            }
            //学校 varchar
            var shipAddress = Request.Form["shipAddress"].FirstOrDefault();
            if (!string.IsNullOrEmpty(shipAddress))
            {
                where = where.And(p => p.shipAddress.Contains(shipAddress));
            }
            //联系人 varchar
            var shipName = Request.Form["shipName"].FirstOrDefault();
            if (!string.IsNullOrEmpty(shipName))
            {
                where = where.And(p => p.shipName.Contains(shipName));
            }
            //收货电话 varchar
            var shipMobile = Request.Form["shipMobile"].FirstOrDefault();
            if (!string.IsNullOrEmpty(shipMobile))
            {
                where = where.And(p => p.shipMobile.Contains(shipMobile));
            }
            //计划订单金额 decimal
            var oldOrderAmount = Request.Form["oldOrderAmount"].FirstOrDefault().ObjectToDecimal(0);
            if (oldOrderAmount > 0)
            {
                where = where.And(p => p.oldOrderAmount == oldOrderAmount);
            }
            //可用余额 decimal
            var keYongAmount = Request.Form["keYongAmount"].FirstOrDefault().ObjectToDecimal(0);
            if (keYongAmount > 0)
            {
                where = where.And(p => p.keYongAmount == keYongAmount);
            }
            //建立时间 datetime
            var createTime = Request.Form["createTime"].FirstOrDefault();
            if (!string.IsNullOrEmpty(createTime))
            {
                if (createTime.Contains("到"))
                {
                    var dts = createTime.Split("到");
                    var dtStart = dts[0].Trim().ObjectToDate();
                    where = where.And(p => p.createTime > dtStart);
                    var dtEnd = dts[1].Trim().ObjectToDate();
                    where = where.And(p => p.createTime < dtEnd);
                }
                else
                {
                    var dt = createTime.ObjectToDate();
                    where = where.And(p => p.createTime > dt);
                }
            }
            //修改时间 datetime
            var upDataTime = Request.Form["upDataTime"].FirstOrDefault();
            if (!string.IsNullOrEmpty(upDataTime))
            {
                if (upDataTime.Contains("到"))
                {
                    var dts = upDataTime.Split("到");
                    var dtStart = dts[0].Trim().ObjectToDate();
                    where = where.And(p => p.upDataTime > dtStart);
                    var dtEnd = dts[1].Trim().ObjectToDate();
                    where = where.And(p => p.upDataTime < dtEnd);
                }
                else
                {
                    var dt = upDataTime.ObjectToDate();
                    where = where.And(p => p.upDataTime > dt);
                }
            }
            //创建人 varchar
            var createBy = Request.Form["createBy"].FirstOrDefault();
            if (!string.IsNullOrEmpty(createBy))
            {
                where = where.And(p => p.createBy.Contains(createBy));
            }
            //修改人 varchar
            var upDataBy = Request.Form["upDataBy"].FirstOrDefault();
            if (!string.IsNullOrEmpty(upDataBy))
            {
                where = where.And(p => p.upDataBy.Contains(upDataBy));
            }
            //删除标志 bit
            var isdelete = Request.Form["isdelete"].FirstOrDefault();
            if (!string.IsNullOrEmpty(isdelete) && isdelete.ToLowerInvariant() == "true")
            {
                where = where.And(p => p.isdelete == true);
            }
            else if (!string.IsNullOrEmpty(isdelete) && isdelete.ToLowerInvariant() == "false")
            {
                where = where.And(p => p.isdelete == false);
            }
            //获取数据
            //创建Excel文件的对象
            var book = new HSSFWorkbook();
            //添加一个sheet
            var mySheet = book.CreateSheet("Sheet1");
            //获取list数据
            var listModel = await _CoreCmsPlanOrderServices.QueryListByClauseAsync(where, p => p.orderId, OrderByType.Asc, true);
            //给sheet1添加第一行的头部标题
                var headerRow = mySheet.CreateRow(0);
            var headerStyle = ExcelHelper.GetHeaderStyle(book);
            var cellNum = 0;
            var cell0 = headerRow.CreateCell(cellNum);
            cell0.SetCellValue("订单号");
            cell0.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell1 = headerRow.CreateCell(cellNum);
            cell1.SetCellValue("调整订单金额");
            cell1.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell2 = headerRow.CreateCell(cellNum);
            cell2.SetCellValue("订单状态");
            cell2.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell3 = headerRow.CreateCell(cellNum);
            cell3.SetCellValue("用户ID å…³è”user.id");
            cell3.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell4 = headerRow.CreateCell(cellNum);
            cell4.SetCellValue("学校");
            cell4.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell5 = headerRow.CreateCell(cellNum);
            cell5.SetCellValue("联系人");
            cell5.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell6 = headerRow.CreateCell(cellNum);
            cell6.SetCellValue("收货电话");
            cell6.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell7 = headerRow.CreateCell(cellNum);
            cell7.SetCellValue("计划订单金额");
            cell7.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell8 = headerRow.CreateCell(cellNum);
            cell8.SetCellValue("可用余额");
            cell8.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell9 = headerRow.CreateCell(cellNum);
            cell9.SetCellValue("建立时间");
            cell9.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell10 = headerRow.CreateCell(cellNum);
            cell10.SetCellValue("修改时间");
            cell10.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell11 = headerRow.CreateCell(cellNum);
            cell11.SetCellValue("创建人");
            cell11.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell12 = headerRow.CreateCell(cellNum);
            cell12.SetCellValue("修改人");
            cell12.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            var cell13 = headerRow.CreateCell(cellNum);
            cell13.SetCellValue("删除标志");
            cell13.CellStyle = headerStyle;
            mySheet.SetColumnWidth(cellNum, 10 * 256);
            cellNum++;
            headerRow.Height = 30 * 20;
            var commonCellStyle = ExcelHelper.GetCommonStyle(book);
            //将数据逐步写入sheet1各个行
            for (var i = 0; i < listModel.Count; i++)
            {
                var rowTemp = mySheet.CreateRow(i + 1);
                var cellNumTemp = 0;
            var rowTemp0 = rowTemp.CreateCell(cellNumTemp);
                rowTemp0.SetCellValue(listModel[i].orderId.ToString());
                rowTemp0.CellStyle = commonCellStyle;
                cellNumTemp++;
            var rowTemp1 = rowTemp.CreateCell(cellNumTemp);
                rowTemp1.SetCellValue(listModel[i].orderAmount.ToString());
                rowTemp1.CellStyle = commonCellStyle;
                cellNumTemp++;
            var rowTemp2 = rowTemp.CreateCell(cellNumTemp);
                rowTemp2.SetCellValue(listModel[i].status.ToString());
                rowTemp2.CellStyle = commonCellStyle;
                cellNumTemp++;
            var rowTemp3 = rowTemp.CreateCell(cellNumTemp);
                rowTemp3.SetCellValue(listModel[i].userId.ToString());
                rowTemp3.CellStyle = commonCellStyle;
                cellNumTemp++;
            var rowTemp4 = rowTemp.CreateCell(cellNumTemp);
                rowTemp4.SetCellValue(listModel[i].shipAddress.ToString());
                rowTemp4.CellStyle = commonCellStyle;
                cellNumTemp++;
            var rowTemp5 = rowTemp.CreateCell(cellNumTemp);
                rowTemp5.SetCellValue(listModel[i].shipName.ToString());
                rowTemp5.CellStyle = commonCellStyle;
                cellNumTemp++;
            var rowTemp6 = rowTemp.CreateCell(cellNumTemp);
                rowTemp6.SetCellValue(listModel[i].shipMobile.ToString());
                rowTemp6.CellStyle = commonCellStyle;
                cellNumTemp++;
            var rowTemp7 = rowTemp.CreateCell(cellNumTemp);
                rowTemp7.SetCellValue(listModel[i].oldOrderAmount.ToString());
                rowTemp7.CellStyle = commonCellStyle;
                cellNumTemp++;
            var rowTemp8 = rowTemp.CreateCell(cellNumTemp);
                rowTemp8.SetCellValue(listModel[i].keYongAmount.ToString());
                rowTemp8.CellStyle = commonCellStyle;
                cellNumTemp++;
            var rowTemp9 = rowTemp.CreateCell(cellNumTemp);
                rowTemp9.SetCellValue(listModel[i].createTime.ToString());
                rowTemp9.CellStyle = commonCellStyle;
                cellNumTemp++;
            var rowTemp10 = rowTemp.CreateCell(cellNumTemp);
                rowTemp10.SetCellValue(listModel[i].upDataTime.ToString());
                rowTemp10.CellStyle = commonCellStyle;
                cellNumTemp++;
            var rowTemp11 = rowTemp.CreateCell(cellNumTemp);
                rowTemp11.SetCellValue(listModel[i].createBy.ToString());
                rowTemp11.CellStyle = commonCellStyle;
                cellNumTemp++;
            var rowTemp12 = rowTemp.CreateCell(cellNumTemp);
                rowTemp12.SetCellValue(listModel[i].upDataBy.ToString());
                rowTemp12.CellStyle = commonCellStyle;
                cellNumTemp++;
            var rowTemp13 = rowTemp.CreateCell(cellNumTemp);
                rowTemp13.SetCellValue(listModel[i].isdelete.ToString());
                rowTemp13.CellStyle = commonCellStyle;
                cellNumTemp++;
            }
            // å†™å…¥åˆ°excel
            string webRootPath = _webHostEnvironment.WebRootPath;
            string tpath = "/files/" + DateTime.Now.ToString("yyyy-MM-dd") + "/";
            string fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "-CoreCmsPlanOrder导出(查询结果).xls";
            string filePath = webRootPath + tpath;
            DirectoryInfo di = new DirectoryInfo(filePath);
            if (!di.Exists)
            {
                di.Create();
            }
            FileStream fileHssf = new FileStream(filePath + fileName, FileMode.Create);
            book.Write(fileHssf);
            fileHssf.Close();
            jm.code = 0;
            jm.msg = GlobalConstVars.ExcelExportSuccess;
            jm.data = tpath + fileName;
            return jm;
        }
        #endregion
        #region è®¾ç½®åˆ é™¤æ ‡å¿—============================================================
        // POST: Api/CoreCmsPlanOrder/DoSetisdelete/10
        /// <summary>
        /// è®¾ç½®åˆ é™¤æ ‡å¿—
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        [HttpPost]
        [Description("设置删除标志")]
        public async Task<AdminUiCallBack> DoSetisdelete([FromBody]FMUpdateBoolDataByIntId entity)
        {
            var jm = new AdminUiCallBack();
            var oldModel = await _CoreCmsPlanOrderServices.QueryByIdAsync(entity.id, false);
            if (oldModel == null)
            {
                jm.msg = "不存在此信息";
                return jm;
            }
            oldModel.isdelete = (bool)entity.data;
            var bl = await _CoreCmsPlanOrderServices.UpdateAsync(p => new CoreCmsPlanOrder() { isdelete = oldModel.isdelete }, p => p.orderId == oldModel.orderId);
            jm.code = bl ? 0 : 1;
            jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
            return jm;
        }
        #endregion
    }
}
CoreCms.Net.Web.Admin/wwwroot/static/jihuageshi/ÉÏ´«¼Æ»®¶©µ¥.xlsx
Binary files differ
CoreCms.Net.Web.Admin/wwwroot/views/corecmsplanorder/create.html
New file
@@ -0,0 +1,141 @@
<script type="text/html" template lay-done="layui.data.done(d);">
<div class="layui-form coreshop-form layui-form-pane" lay-filter="LAY-app-CoreCmsPlanOrder-createForm" id="LAY-app-CoreCmsPlanOrder-createForm">
    <div class="layui-form-item">
        <label for="orderId" class="layui-form-label  layui-form-required">订单号</label>
        <div class="layui-input-block">
            <input name="orderId"   lay-verType="tips" lay-verify="required" class="layui-input"  placeholder="请输入订单号" lay-reqText="请输入订单号"  />
        </div>
    </div>
    <div class="layui-form-item">
        <label for="orderAmount" class="layui-form-label  layui-form-required">调整订单金额</label>
        <div class="layui-input-block">
            <input name="orderAmount"   lay-verType="tips" lay-verify="required" class="layui-input"  placeholder="请输入调整订单金额" lay-reqText="请输入调整订单金额"  />
        </div>
    </div>
    <div class="layui-form-item">
        <label for="status" class="layui-form-label  layui-form-required">订单状态</label>
        <div class="layui-input-block">
            <input  type="number" min="0" max="999999" name="status"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" placeholder="请输入订单状态" lay-reqText="请输入订单状态并为数字"  />
        </div>
    </div>
    <div class="layui-form-item">
        <label for="userId" class="layui-form-label  layui-form-required">用户ID å…³è”user.id</label>
        <div class="layui-input-block">
            <input  type="number" min="0" max="999999" name="userId"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" placeholder="请输入用户ID å…³è”user.id" lay-reqText="请输入用户ID å…³è”user.id并为数字"  />
        </div>
    </div>
    <div class="layui-form-item">
        <label for="shipAddress" class="layui-form-label  layui-form-required">学校</label>
        <div class="layui-input-block">
            <input name="shipAddress"   lay-verType="tips" lay-verify="required" class="layui-input"  placeholder="请输入学校" lay-reqText="请输入学校"  />
        </div>
    </div>
    <div class="layui-form-item">
        <label for="shipName" class="layui-form-label  layui-form-required">联系人</label>
        <div class="layui-input-block">
            <input name="shipName"   lay-verType="tips" lay-verify="required" class="layui-input"  placeholder="请输入联系人" lay-reqText="请输入联系人"  />
        </div>
    </div>
    <div class="layui-form-item">
        <label for="shipMobile" class="layui-form-label  layui-form-required">收货电话</label>
        <div class="layui-input-block">
            <input name="shipMobile"   lay-verType="tips" lay-verify="required" class="layui-input"  placeholder="请输入收货电话" lay-reqText="请输入收货电话"  />
        </div>
    </div>
    <div class="layui-form-item">
        <label for="oldOrderAmount" class="layui-form-label  layui-form-required">计划订单金额</label>
        <div class="layui-input-block">
            <input name="oldOrderAmount"   lay-verType="tips" lay-verify="required" class="layui-input"  placeholder="请输入计划订单金额" lay-reqText="请输入计划订单金额"  />
        </div>
    </div>
    <div class="layui-form-item">
        <label for="keYongAmount" class="layui-form-label  layui-form-required">可用余额</label>
        <div class="layui-input-block">
            <input name="keYongAmount"   lay-verType="tips" lay-verify="required" class="layui-input"  placeholder="请输入可用余额" lay-reqText="请输入可用余额"  />
        </div>
    </div>
    <div class="layui-form-item">
        <label for="createTime" class="layui-form-label  layui-form-required">建立时间</label>
        <div class="layui-input-block">
            <input name="createTime"  id="createTime-CoreCmsPlanOrder-createTime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" placeholder="请输入建立时间" lay-reqText="请输入建立时间"  />
        </div>
    </div>
    <div class="layui-form-item">
        <label for="upDataTime" class="layui-form-label  layui-form-required">修改时间</label>
        <div class="layui-input-block">
            <input name="upDataTime"  id="createTime-CoreCmsPlanOrder-upDataTime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" placeholder="请输入修改时间" lay-reqText="请输入修改时间"  />
        </div>
    </div>
    <div class="layui-form-item">
        <label for="createBy" class="layui-form-label  layui-form-required">创建人</label>
        <div class="layui-input-block">
            <input name="createBy"   lay-verType="tips" lay-verify="required" class="layui-input"  placeholder="请输入创建人" lay-reqText="请输入创建人"  />
        </div>
    </div>
    <div class="layui-form-item">
        <label for="upDataBy" class="layui-form-label  layui-form-required">修改人</label>
        <div class="layui-input-block">
            <input name="upDataBy"   lay-verType="tips" lay-verify="required" class="layui-input"  placeholder="请输入修改人" lay-reqText="请输入修改人"  />
        </div>
    </div>
    <div class="layui-form-item" pane>
        <label for="isdelete" class="layui-form-label  layui-form-required">删除标志</label>
        <div class="layui-input-block">
            <input type="checkbox" lay-filter="switch" name="isdelete"   lay-skin="switch" lay-text="开启|关闭">
        </div>
    </div>
      <div class="layui-form-item text-right core-hidden">
        <input type="button" class="layui-btn" lay-submit lay-filter="LAY-app-CoreCmsPlanOrder-createForm-submit" id="LAY-app-CoreCmsPlanOrder-createForm-submit" value="确认添加">
    </div>
</div>
</script>
<script>
    var debug= layui.setter.debug;
    layui.data.done = function (d) {
        //开启调试情况下获取接口赋值数据
        if (debug) { console.log(d.params.data); }
        layui.use(['admin', 'form', 'laydate', 'upload', 'coreHelper', 'cropperImg'],
        function () {
            var $ = layui.$
                , form = layui.form
                , admin = layui.admin
                , laydate = layui.laydate
                , upload = layui.upload
                , cropperImg = layui.cropperImg
                , coreHelper = layui.coreHelper;
            laydate.render({
                elem: '#createTime-CoreCmsPlanOrder-createTime',
                type: 'datetime',
                value: new Date(),
                fullPanel: true
            });
            laydate.render({
                elem: '#createTime-CoreCmsPlanOrder-upDataTime',
                type: 'datetime',
                value: new Date(),
                fullPanel: true
            });
            form.verify({
            });
            //重载form
            form.render(null, 'LAY-app-CoreCmsPlanOrder-createForm');
        })
    };
</script>
CoreCms.Net.Web.Admin/wwwroot/views/corecmsplanorder/details.html
New file
@@ -0,0 +1,144 @@
<script type="text/html" template  lay-done="layui.data.done(d);">
    <table class="layui-table layui-form" lay-filter="LAY-app-CoreCmsPlanOrder-detailsForm" id="LAY-app-CoreCmsPlanOrder-detailsForm">
        <colgroup>
            <col width="100">
            <col>
        </colgroup>
        <tbody>
            <tr>
                <td width="25%">
                    <label for="orderId">订单号</label>
                </td>
                <td width="25%">
                    {{ d.params.data.model.orderId || '' }}
                </td>
                <td width="25%">
                    <label for="shipAddress">学校</label>
                </td>
                <td width="25%">
                    {{ d.params.data.model.shipAddress || '' }}
                </td>
            </tr>
            <tr>
                <td>
                    <label for="shipName">联系人</label>
                </td>
                <td>
                    {{ d.params.data.model.shipName || '' }}
                </td>
                <td>
                    <label for="shipMobile">联系电话</label>
                </td>
                <td>
                    {{ d.params.data.model.shipMobile || '' }}
                </td>
            </tr>
            <tr>
                <td>
                    <label for="oldOrderAmount">计划金额</label>
                </td>
                <td>
                    {{ d.params.data.model.oldOrderAmount || '' }}
                </td>
                <td>
                    <label for="orderAmount">调整金额</label>
                </td>
                <td>
                    {{ d.params.data.model.orderAmount || '' }}
                </td>
            </tr>
            <tr>
                <td>
                    <label for="keYongAmount">可用余额</label>
                </td>
                <td>
                    {{ d.params.data.model.keYongAmount || '' }}
                </td>
                <td>
                    <label for="status">订单状态</label>
                </td>
                <td>
                    {{ d.params.data.model.statusText || '' }}
                </td>
            </tr>
            <tr>
                <td>
                    <label for="createTime">建立时间</label>
                </td>
                <td>
                    {{ d.params.data.model.createTime || '' }}
                </td>
                <td>
                    <label for="upDataTime">修改时间</label>
                </td>
                <td>
                    {{ d.params.data.model.upDataTime || '' }}
                </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>
            </tr>
            {{# layui.each(d.params.data.modelItem, function(index, item){ }}
            <tr>
                <td>
                    {{ item.name }}   {{ item.specification }}
                </td>
                <td>
                    {{ item.price }}
                </td>
                <td>
                    {{ item.nums }}
                </td>
                <td>
                    {{ item.amount }}
                </td>
            </tr>
            {{# }); }}
        </tbody>
    </table>
</script>
<script>
    var debug= layui.setter.debug;
    layui.data.done = function (d) {
        //开启调试情况下获取接口赋值数据
        if (debug) { console.log(d.params.data); }
        layui.use(['admin', 'form', 'coreHelper'], function () {
            var $ = layui.$
                , setter = layui.setter
                , admin = layui.admin
                , coreHelper = layui.coreHelper
                , form = layui.form;
            form.render(null, 'LAY-app-CoreCmsPlanOrder-detailsForm');
        });
    };
</script>
CoreCms.Net.Web.Admin/wwwroot/views/corecmsplanorder/edit.html
New file
@@ -0,0 +1,139 @@
<script type="text/html" template lay-done="layui.data.sendParams(d);">
    <div class="layui-form coreshop-form layui-form-pane" lay-filter="LAY-app-CoreCmsPlanOrder-editForm" id="LAY-app-CoreCmsPlanOrder-editForm">
        <div class="layui-form-item">
            <label for="orderId" class="layui-form-label  layui-form-required">订单号</label>
            <div class="layui-input-block">
                <input name="orderId"   lay-verType="tips" lay-verify="required" class="layui-input" placeholder="请输入订单号" lay-reqText="请输入订单号"  value="{{d.params.data.orderId || '' }}" />
            </div>
        </div>
        <div class="layui-form-item">
            <label for="orderAmount" class="layui-form-label  layui-form-required">调整订单金额</label>
            <div class="layui-input-block">
                <input name="orderAmount"   lay-verType="tips" lay-verify="required" class="layui-input" placeholder="请输入调整订单金额" lay-reqText="请输入调整订单金额"  value="{{d.params.data.orderAmount || '' }}" />
            </div>
        </div>
        <div class="layui-form-item">
            <label for="status" class="layui-form-label  layui-form-required">订单状态</label>
            <div class="layui-input-block">
                <input  type="number" min="0" max="999999" name="status"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.status || '' }}" placeholder="请输入订单状态" lay-reqText="请输入订单状态并为数字"  />
            </div>
        </div>
        <div class="layui-form-item">
            <label for="userId" class="layui-form-label  layui-form-required">用户ID å…³è”user.id</label>
            <div class="layui-input-block">
                <input  type="number" min="0" max="999999" name="userId"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.userId || '' }}" placeholder="请输入用户ID å…³è”user.id" lay-reqText="请输入用户ID å…³è”user.id并为数字"  />
            </div>
        </div>
        <div class="layui-form-item">
            <label for="shipAddress" class="layui-form-label  layui-form-required">学校</label>
            <div class="layui-input-block">
                <input name="shipAddress"   lay-verType="tips" lay-verify="required" class="layui-input" placeholder="请输入学校" lay-reqText="请输入学校"  value="{{d.params.data.shipAddress || '' }}" />
            </div>
        </div>
        <div class="layui-form-item">
            <label for="shipName" class="layui-form-label  layui-form-required">联系人</label>
            <div class="layui-input-block">
                <input name="shipName"   lay-verType="tips" lay-verify="required" class="layui-input" placeholder="请输入联系人" lay-reqText="请输入联系人"  value="{{d.params.data.shipName || '' }}" />
            </div>
        </div>
        <div class="layui-form-item">
            <label for="shipMobile" class="layui-form-label  layui-form-required">收货电话</label>
            <div class="layui-input-block">
                <input name="shipMobile"   lay-verType="tips" lay-verify="required" class="layui-input" placeholder="请输入收货电话" lay-reqText="请输入收货电话"  value="{{d.params.data.shipMobile || '' }}" />
            </div>
        </div>
        <div class="layui-form-item">
            <label for="oldOrderAmount" class="layui-form-label  layui-form-required">计划订单金额</label>
            <div class="layui-input-block">
                <input name="oldOrderAmount"   lay-verType="tips" lay-verify="required" class="layui-input" placeholder="请输入计划订单金额" lay-reqText="请输入计划订单金额"  value="{{d.params.data.oldOrderAmount || '' }}" />
            </div>
        </div>
        <div class="layui-form-item">
            <label for="keYongAmount" class="layui-form-label  layui-form-required">可用余额</label>
            <div class="layui-input-block">
                <input name="keYongAmount"   lay-verType="tips" lay-verify="required" class="layui-input" placeholder="请输入可用余额" lay-reqText="请输入可用余额"  value="{{d.params.data.keYongAmount || '' }}" />
            </div>
        </div>
        <div class="layui-form-item">
            <label for="createTime" class="layui-form-label  layui-form-required">建立时间</label>
            <div class="layui-input-block">
                <input name="createTime"  id="editTime-CoreCmsPlanOrder-createTime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" placeholder="请输入建立时间" lay-reqText="请输入建立时间"   value="{{d.params.data.createTime || '' }}"/>
            </div>
        </div>
        <div class="layui-form-item">
            <label for="upDataTime" class="layui-form-label  layui-form-required">修改时间</label>
            <div class="layui-input-block">
                <input name="upDataTime"  id="editTime-CoreCmsPlanOrder-upDataTime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" placeholder="请输入修改时间" lay-reqText="请输入修改时间"   value="{{d.params.data.upDataTime || '' }}"/>
            </div>
        </div>
        <div class="layui-form-item">
            <label for="createBy" class="layui-form-label  layui-form-required">创建人</label>
            <div class="layui-input-block">
                <input name="createBy"   lay-verType="tips" lay-verify="required" class="layui-input" placeholder="请输入创建人" lay-reqText="请输入创建人"  value="{{d.params.data.createBy || '' }}" />
            </div>
        </div>
        <div class="layui-form-item">
            <label for="upDataBy" class="layui-form-label  layui-form-required">修改人</label>
            <div class="layui-input-block">
                <input name="upDataBy"   lay-verType="tips" lay-verify="required" class="layui-input" placeholder="请输入修改人" lay-reqText="请输入修改人"  value="{{d.params.data.upDataBy || '' }}" />
            </div>
        </div>
        <div class="layui-form-item" pane>
            <label for="isdelete" class="layui-form-label  layui-form-required">删除标志</label>
            <div class="layui-input-block">
                <input type="checkbox" lay-filter="switch" name="isdelete"   {{ d.params.data.isdelete ? 'checked' : '' }} lay-skin="switch" lay-text="开启|关闭">
            </div>
        </div>
        <div class="layui-form-item text-right core-hidden">
            <input type="button" class="layui-btn" lay-submit lay-filter="LAY-app-CoreCmsPlanOrder-editForm-submit" id="LAY-app-CoreCmsPlanOrder-editForm-submit" value="确认编辑">
        </div>
    </div>
</script>
<script>
    var debug= layui.setter.debug;
    layui.data.sendParams = function (d) {
        //开启调试情况下获取接口赋值数据
        if (debug) { console.log(d.params.data); }
        layui.use(['admin', 'form', 'laydate', 'upload', 'coreHelper', 'cropperImg'],
        function () {
            var $ = layui.$
                , form = layui.form
                , admin = layui.admin
                , laydate = layui.laydate
                , upload = layui.upload
                , cropperImg = layui.cropperImg
                , coreHelper = layui.coreHelper;
            laydate.render({
                elem: '#editTime-CoreCmsPlanOrder-createTime',
                type: 'datetime',
                fullPanel: true
            });
            laydate.render({
                elem: '#editTime-CoreCmsPlanOrder-upDataTime',
                type: 'datetime',
                fullPanel: true
            });
            form.verify({
            });
            //重载form
            form.render(null, 'LAY-app-CoreCmsPlanOrder-editForm');
        })
    };
</script>
CoreCms.Net.Web.Admin/wwwroot/views/corecmsplanorder/index.html
New file
@@ -0,0 +1,495 @@
<title>计划订单表</title>
<!--当前位置开始-->
<div class="layui-card layadmin-header">
    <div class="layui-breadcrumb" lay-filter="breadcrumb">
        <script type="text/html" template lay-done="layui.data.updateMainBreadcrumb();">
        </script>
    </div>
</div>
<!--当前位置结束-->
<style>
    /* é‡å†™æ ·å¼ */
</style>
<script type="text/html" template lay-type="Post" lay-url="Api/CoreCmsPlanOrder/GetIndex" lay-done="layui.data.done(d);">
</script>
<div class="table-body">
    <table  id="LAY-app-CoreCmsPlanOrder-tableBox" lay-filter="LAY-app-CoreCmsPlanOrder-tableBox"></table>
</div>
<script type="text/html" id="LAY-app-CoreCmsPlanOrder-toolbar">
    <div class="layui-form coreshop-toolbar-search-form">
        <div class="layui-form-item">
            <div class="layui-inline">
                <label class="layui-form-label" for="orderId">订单号</label>
                <div class="layui-input-inline">
                    <input type="text" name="orderId" placeholder="请输入订单号" class="layui-input">
                </div>
            </div>
            <!--<div class="layui-inline">
        <label class="layui-form-label" for="orderAmount">调整订单金额</label>
        <div class="layui-input-inline">
            <input type="text" name="orderAmount"  placeholder="请输入调整订单金额" class="layui-input">
        </div>
    </div>-->
            <div class="layui-inline">
                <label class="layui-form-label" for="status">订单状态</label>
        <div class="layui-input-inline">
            <select name="status">
                <option value="">请选择</option>
                <option value="1">未提交</option>
                <option value="2">已提交</option>
            </select>
        </div>
    </div>
            <!--<div class="layui-inline">
        <label class="layui-form-label" for="userId">用户ID å…³è”user.id</label>
        <div class="layui-input-inline">
            <input type="text" name="userId"  placeholder="请输入用户ID å…³è”user.id" class="layui-input">
        </div>
    </div>-->
            <div class="layui-inline">
                <label class="layui-form-label" for="shipAddress">学校</label>
                <div class="layui-input-inline">
                    <input type="text" name="shipAddress" placeholder="请输入学校" class="layui-input">
                </div>
            </div>
            <div class="layui-inline">
                <label class="layui-form-label" for="shipName">联系人</label>
                <div class="layui-input-inline">
                    <input type="text" name="shipName" placeholder="请输入联系人" class="layui-input">
                </div>
            </div>
            <div class="layui-inline">
                <label class="layui-form-label" for="shipMobile">联系电话</label>
                <div class="layui-input-inline">
                    <input type="text" name="shipMobile" placeholder="请输入联系电话" class="layui-input">
                </div>
            </div>
            <!--<div class="layui-inline">
        <label class="layui-form-label" for="oldOrderAmount">计划订单金额</label>
        <div class="layui-input-inline">
            <input type="text" name="oldOrderAmount"  placeholder="请输入计划订单金额" class="layui-input">
        </div>
    </div>-->
            <!--<div class="layui-inline">
        <label class="layui-form-label" for="keYongAmount">可用余额</label>
        <div class="layui-input-inline">
            <input type="text" name="keYongAmount"  placeholder="请输入可用余额" class="layui-input">
        </div>
    </div>-->
            <div class="layui-inline">
                <label class="layui-form-label" for="createTime">建立时间</label>
                <div class="layui-input-inline" style="width: 260px;">
                    <input type="text" name="createTime" id="searchTime-CoreCmsPlanOrder-createTime" placeholder="请输入建立时间" class="layui-input">
                </div>
            </div>
            <div class="layui-inline">
                <label class="layui-form-label" for="upDataTime">修改时间</label>
                <div class="layui-input-inline" style="width: 260px;">
                    <input type="text" name="upDataTime" id="searchTime-CoreCmsPlanOrder-upDataTime" placeholder="请输入修改时间" class="layui-input">
                </div>
            </div>
            <!--<div class="layui-inline">
        <label class="layui-form-label" for="createBy">创建人</label>
        <div class="layui-input-inline">
            <input type="text" name="createBy"  placeholder="请输入创建人" class="layui-input">
        </div>
    </div>-->
            <!--<div class="layui-inline">
        <label class="layui-form-label" for="upDataBy">修改人</label>
        <div class="layui-input-inline">
            <input type="text" name="upDataBy"  placeholder="请输入修改人" class="layui-input">
        </div>
    </div>-->
            <!--<div class="layui-inline">
        <label class="layui-form-label" for="isdelete">删除标志</label>
        <div class="layui-input-inline">
            <select name="isdelete">
                <option value="">请选择</option>
                <option value="True">是</option>
                <option value="False">否</option>
            </select>
        </div>
    </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>
            </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 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>
    </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-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;">
        <div class="dropdown-anchor"></div>
        <div class="dropdown-popconfirm-title">
            <i class="layui-icon layui-icon-help"></i>
            ç¡®å®šè¦åˆ é™¤å—?
        </div>
        <div class="dropdown-popconfirm-btn">
            <a class="layui-btn layui-btn-primary cursor" btn-cancel>取消</a>
            <a class="layui-btn layui-btn-normal cursor" lay-event="del">确定</a>
        </div>
    </div>
</script>
<script>
    var indexData;
    var debug= layui.setter.debug;
    layui.data.done = function (d) {
        //开启调试情况下获取接口赋值数据
        if (debug) { console.log(d); }
        indexData = d.data;
        layui.use(['index', 'table', 'laydate', 'util', 'coredropdown', 'coreHelper', 'upload'],
            function () {
                var $ = layui.$
                    , admin = layui.admin
                    , table = layui.table
                    , form = layui.form
                    , laydate = layui.laydate
                    , setter = layui.setter
                    , coreHelper = layui.coreHelper
                    , util = layui.util
                    , view = layui.view
                    , upload = layui.upload;
                var searchwhere;
                //监听搜索
                form.on('submit(LAY-app-CoreCmsPlanOrder-search)',
                    function(data) {
                        var field = data.field;
                        searchwhere = field;
                        //执行重载
                        table.reloadData('LAY-app-CoreCmsPlanOrder-tableBox',{ where: field });
                    });
                //数据绑定
                table.render({
                    elem: '#LAY-app-CoreCmsPlanOrder-tableBox',
                    url: layui.setter.apiUrl + 'Api/CoreCmsPlanOrder/GetPageList',
                    method: 'POST',
                    toolbar: '#LAY-app-CoreCmsPlanOrder-toolbar',
                    pagebar: '#LAY-app-CoreCmsPlanOrder-pagebar',
                    className: 'pagebarbox',
                    defaultToolbar: ['filter', 'print', 'exports'],
                    height: 'full-127',//面包屑142px,搜索框4行172,3行137,2行102,1行67
                    page: true,
                    limit: 30,
                    limits: [10, 15, 20, 25, 30, 50, 100, 200],
                    text: {none: '暂无相关数据'},
                    cols: [
                        [
                            { type: "checkbox", fixed: "left" },
                            { field: 'orderId', title: '订单号', sort: false,width: 115 },
                         /*   { field: 'userId', title: '用户ID å…³è”user.id', sort: false,width: 105 },*/
                            { field: 'shipAddress', title: '学校', sort: false,width: 335 },
                            { field: 'shipName', title: '联系人', sort: false,width: 115 },
                            { field: 'shipMobile', 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: '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 },
                            { width: 172, align: 'center', title:'操作', fixed: 'right', toolbar: '#LAY-app-CoreCmsPlanOrder-tableBox-bar' }
                        ]
                    ]
                });
                //监听排序事件
                table.on('sort(LAY-app-CoreCmsPlanOrder-tableBox)', function(obj){
                    table.reloadData('LAY-app-CoreCmsPlanOrder-tableBox', {
                        initSort: obj, //记录初始排序,如果不设的话,将无法标记表头的排序状态。
                        where: { //请求参数(注意:这里面的参数可任意定义,并非下面固定的格式)
                            orderField: obj.field, //排序字段
                            orderDirection: obj.type //排序方式
                        }
                    });
                });
                //监听行双击事件
                table.on('rowDouble(LAY-app-CoreCmsPlanOrder-tableBox)', function (obj) {
                    //查看详情
                    doDetails(obj);
                });
                //头工具栏事件
                table.on('pagebar(LAY-app-CoreCmsPlanOrder-tableBox)', function (obj) {
                    var checkStatus = table.checkStatus(obj.config.id);
                    switch (obj.event) {
                    case 'addData':
                        doCreate();
                        break;
                    case 'batchDelete':
                        doBatchDelete(checkStatus);
                        break;
                    case 'selectExportExcel':
                        doSelectExportExcel(checkStatus);
                        break;
                    case 'queryExportExcel':
                        doQueryExportexcel();
                        break;
                    };
                });
                //监听工具条
                table.on('tool(LAY-app-CoreCmsPlanOrder-tableBox)',
                    function(obj) {
                        if (obj.event === 'detail') {
                            doDetails(obj);
                        } else if (obj.event === 'del') {
                            doDelete(obj);
                        } else if (obj.event === 'edit') {
                            doEdit(obj)
                        }
                    });
                //执行创建操作
                function doCreate(){
                    coreHelper.Post("Api/CoreCmsPlanOrder/GetCreate", null, function (e) {
                            if (e.code === 0) {
                                admin.popup({
                                    shadeClose: false,
                                    title: '创建数据',
                                    area: ['1200px', '90%'],
                                    id: 'LAY-popup-CoreCmsPlanOrder-create',
                                    success: function (layero, index) {
                                        view(this.id).render('base/CoreCmsPlanOrder/create', { data: e.data }).done(function () {
                                            //监听提交
                                            form.on('submit(LAY-app-CoreCmsPlanOrder-createForm-submit)',
                                                function(data) {
                                                    var field = data.field; //获取提交的字段
                                                    field.isdelete = field.isdelete == 'on';
                                                    if (debug) { console.log(field); } //开启调试返回数据
                                                    //提交 Ajax æˆåŠŸåŽï¼Œå…³é—­å½“å‰å¼¹å±‚å¹¶é‡è½½è¡¨æ ¼
                                                    coreHelper.Post("Api/CoreCmsPlanOrder/DoCreate", field, function (e) {
                                                            console.log(e)
                                                            if (e.code === 0) {
                                                                layui.table.reloadData('LAY-app-CoreCmsPlanOrder-tableBox'); //重载表格
                                                                layer.close(index); //再执行关闭
                                                                layer.msg(e.msg);
                                                            } else {
                                                                layer.msg(e.msg);
                                                            }
                                                        });
                                                });
                                        });
                                        // ç¦æ­¢å¼¹çª—出现滚动条
                                        $(layero).children('.layui-layer-content').css('overflow', 'visible');
                                    }
                                    , btn: ['确定', '取消']
                                    , yes: function (index, layero) {
                                        layero.contents().find("#LAY-app-CoreCmsPlanOrder-createForm-submit").click();
                                    }
                                });
                            } else {
                                layer.msg(e.msg);
                            }
                        });
                }
                //执行编辑操作
                function doEdit(obj){
                    coreHelper.Post("Api/CoreCmsPlanOrder/GetEdit", {id:obj.data.id}, function (e) {
                        if (e.code === 0) {
                            admin.popup({
                                shadeClose: false,
                                title: '编辑数据',
                                area: ['1200px', '90%'],
                                id: 'LAY-popup-CoreCmsPlanOrder-edit',
                                success: function (layero, index) {
                                    view(this.id).render('base/CoreCmsPlanOrder/edit', { data: e.data }).done(function () {
                                        //监听提交
                                        form.on('submit(LAY-app-CoreCmsPlanOrder-editForm-submit)',
                                            function(data) {
                                                var field = data.field; //获取提交的字段
                                                field.isdelete = field.isdelete == 'on';
                                                if (debug) { console.log(field); } //开启调试返回数据
                                                //提交 Ajax æˆåŠŸåŽï¼Œå…³é—­å½“å‰å¼¹å±‚å¹¶é‡è½½è¡¨æ ¼
                                                coreHelper.Post("Api/CoreCmsPlanOrder/DoEdit", field, function (e) {
                                                        console.log(e)
                                                        if (e.code === 0) {
                                                            layui.table.reloadData('LAY-app-CoreCmsPlanOrder-tableBox'); //重载表格
                                                            layer.close(index); //再执行关闭
                                                            layer.msg(e.msg);
                                                        } else {
                                                            layer.msg(e.msg);
                                                        }
                                                    });
                                            });
                                    })
                                    // ç¦æ­¢å¼¹çª—出现滚动条
                                    $(layero).children('.layui-layer-content').css('overflow', 'visible');
                                }
                                 , btn: ['确定', '取消']
                                , yes: function (index, layero) {
                                     layero.contents().find("#LAY-app-CoreCmsPlanOrder-editForm-submit").click();
                                }
                            });
                        } else {
                            layer.msg(e.msg);
                        }
                    });
                }
                //执行预览操作
                function doDetails(obj) {
                    coreHelper.Post("Api/CoreCmsPlanOrder/GetDetails", { id: obj.data.orderId }, function (e) {
                        if (e.code === 0) {
                            admin.popup({
                                shadeClose: false,
                                title: '查看详情',
                                area: ['1200px', '90%'],
                                id: 'LAY-popup-CoreCmsPlanOrder-details',
                                success: function (layero, index) {
                                    view(this.id).render('CoreCmsPlanOrder/details', { data: e.data }).done(function () {
                                        form.render();
                                    });
                                    // ç¦æ­¢å¼¹çª—出现滚动条
                                    $(layero).children('.layui-layer-content').css('overflow', 'visible');
                                }
                            });
                        } else {
                            layer.msg(e.msg);
                        }
                    });
                }
                //执行单个删除
                function doDelete(obj){
                    coreHelper.Post("Api/CoreCmsPlanOrder/DoDelete", { id: obj.data.id }, 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('请选择要删除的数据');
                    }
                    layer.confirm('确定删除吗?删除后将无法恢复。',
                        function(index) {
                            var delidsStr = [];
                            layui.each(checkData,
                                function(index, item) {
                                    delidsStr.push(item.id);
                                });
                            coreHelper.Post("Api/CoreCmsPlanOrder/DoBatchDelete", { id: delidsStr }, function (e) {
                                    if (debug) { console.log(e); } //开启调试返回数据
                                    table.reloadData('LAY-app-CoreCmsPlanOrder-tableBox');
                                    layer.msg(e.msg);
                                });
                        });
                }
                //执行查询条件导出excel
                function doQueryExportexcel(){
                    layer.confirm('确定根据当前的查询条件导出数据吗?',
                        function(index) {
                            var field = searchwhere;
                            coreHelper.PostForm("Api/CoreCmsPlanOrder/QueryExportExcel", field, function (e) {
                                    if (debug) { console.log(e); } //开启调试返回数据
                                    if (e.code === 0) {
                                        window.open(e.data);
                                    } else {
                                        layer.msg(e.msg);
                                    }
                                });
                        });
                }
                //执行选择目录导出数据
                function doSelectExportExcel(checkStatus){
                    var checkData = checkStatus.data;
                    if (checkData.length === 0) {
                        return layer.msg('请选择您要导出的数据');
                    }
                    layer.confirm('确定导出选择的内容吗?',
                        function(index) {
                            var delidsStr = [];
                            layui.each(checkData,
                                function(index, item) {
                                    delidsStr.push(item.id);
                                });
                            layer.close(index);
                            coreHelper.Post("Api/CoreCmsPlanOrder/SelectExportExcel", { id: delidsStr }, function (e) {
                                    if (debug) { console.log(e); } //开启调试返回数据
                                    if (e.code === 0) {
                                        window.open(e.data);
                                    } else {
                                        layer.msg(e.msg);
                                    }
                                });
                        });
                }
                laydate.render({
                    elem: '#searchTime-CoreCmsPlanOrder-createTime',
                    type: 'datetime',
                    range: '到',
                });
                laydate.render({
                    elem: '#searchTime-CoreCmsPlanOrder-upDataTime',
                    type: 'datetime',
                    range: '到',
                });
                //监听 è¡¨æ ¼å¤é€‰æ¡†æ“ä½œ
                layui.form.on('switch(switch_isdelete)', function (obj) {
                    coreHelper.Post("Api/CoreCmsPlanOrder/DoSetisdelete", { id: this.value, data: obj.elem.checked }, function (e) {
                        if (debug) { console.log(e); } //开启调试返回数据
                        //table.reloadData('LAY-app-CoreCmsPlanOrder-tableBox');
                        layer.msg(e.msg);
                    });
                });
                //首页弹窗广告图片
                upload.render({
                    elem: '#upIndexPopupWindowImageUrlBtn'
                    , url: layui.setter.apiUrl + 'Api/Tools/UploadFilesXls'
                    , accept: 'file' // å…è®¸ä¸Šä¼ æ–‡ä»¶
                    , exts: 'xlsx|xls' // åªå…è®¸ä¸Šä¼ Excel文件
                    , done: function (res) {
                        if (res.code > 0) {
                            return layer.msg(res.msg);
                        }
                        layer.msg(res.msg);
                        layui.table.reloadData('LAY-app-CoreCmsPlanOrder-tableBox'); //重载表格
                    }
                    , error: function () {
                        return layer.msg('上传失败');
                    }
                });
                //重载form
                form.render();
            });
    };
</script>
<!--设置删除标志-->
<script type="text/html" id="switch_isdelete">
    <input type="checkbox" name="switch_isdelete" value="{{d.id}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="switch_isdelete" {{ d.isdelete ? 'checked' : '' }}>
</script>
CoreCms.Net.Web.WebApi/Controllers/OrderController.cs
@@ -22,6 +22,7 @@
using CoreCms.Net.Model.FromBody;
using CoreCms.Net.Model.ViewModels.DTO;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Services;
using CoreCms.Net.Utility.Extensions;
using CoreCms.Net.Utility.Helper;
using Microsoft.AspNetCore.Authorization;
@@ -51,7 +52,8 @@
        private readonly ICoreCmsUserServices _userServices;
        private readonly ICoreCmsClerkServices _clerkServices;
        private readonly ICoreCmsInvoiceServices _invoiceServices;
        private readonly ICoreCmsPlanOrderServices _planOrderServices;
        private readonly ICoreCmsPlanOrderItemServices _planOrderItemServices;
        /// <summary>
        /// æž„造函数
@@ -61,7 +63,9 @@
        , ICoreCmsBillAftersalesServices aftersalesServices
        , ICoreCmsSettingServices settingServices
        , ICoreCmsAreaServices areaServices
        , ICoreCmsBillReshipServices reshipServices, ICoreCmsShipServices shipServices, ICoreCmsLogisticsServices logisticsServices, ICoreCmsOrderDistributionModelServices orderDistributionModelServices, IRedisOperationRepository redisOperationRepository, ICoreCmsUserServices userServices, ICoreCmsClerkServices clerkServices, ICoreCmsInvoiceServices invoiceServices)
        , ICoreCmsBillReshipServices reshipServices, ICoreCmsShipServices shipServices, ICoreCmsLogisticsServices logisticsServices, ICoreCmsOrderDistributionModelServices orderDistributionModelServices, IRedisOperationRepository redisOperationRepository, ICoreCmsUserServices userServices, ICoreCmsClerkServices clerkServices, ICoreCmsInvoiceServices invoiceServices
          , ICoreCmsPlanOrderServices planOrderServices
            , ICoreCmsPlanOrderItemServices planOrderItemServices)
        {
            _user = user;
            _orderServices = orderServices;
@@ -76,6 +80,8 @@
            _userServices = userServices;
            _clerkServices = clerkServices;
            _invoiceServices = invoiceServices;
            _planOrderServices = planOrderServices;
            _planOrderItemServices = planOrderItemServices;
        }
@@ -370,6 +376,102 @@
        #endregion
        #region èŽ·å–è®¡åˆ’è®¢å•åˆ—è¡¨å¾®ä¿¡å°ç¨‹åº=======================================================
        /// <summary>
        /// èŽ·å–è®¡åˆ’è®¢å•åˆ—è¡¨å¾®ä¿¡å°ç¨‹åº
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [Authorize]
        public async Task<WebApiCallBack> GetPlanOrderList([FromBody] GetOrderListPost entity)
        {
            var jm = await _planOrderServices.GetOrderList(entity.status, _user.ID, entity.page, entity.limit);
            return jm;
        }
        #endregion
        #region èŽ·å–è®¡åˆ’è®¢å•è¯¦æƒ…=======================================================
        /// <summary>
        /// èŽ·å–è®¡åˆ’è®¢å•è¯¦æƒ…
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [Authorize]
        public async Task<WebApiCallBack> GetPlanOrder([FromBody] FMStringId entity)
        {
            var jm = new WebApiCallBack();
            var model = await _planOrderServices.QueryByIdAsync(entity.id);
            if (model == null)
            {
                jm.msg = "不存在此信息";
                return jm;
            }
            //获取相关状态描述说明转换
            model.statusText = EnumHelper.GetEnumDescriptionByValue<GlobalEnumVars.PlanOrderTiJiao>(model.status);
            var modelItem = await _planOrderItemServices.QueryListByClauseAsync(p => p.orderId == entity.id, p => p.specification, OrderByType.Asc);
            jm.code = 0;
            jm.status = true;
            jm.data = new
            {
                model,
                modelItem,
            };
            return jm;
        }
        #region ä¿®æ”¹è®¡åˆ’订单==================================================
        /// <summary>
        /// ä¿®æ”¹è®¡åˆ’订单
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [Authorize]
        public async Task<WebApiCallBack> UpdatePlanOrder([FromBody] CreateOrder entity)
        {
            var jm = new WebApiCallBack();
                try
                {
                    if (string.IsNullOrEmpty(entity.itemIds))
                    {
                        jm.data = 10000;
                        jm.msg = GlobalErrorCodeVars.Code10000;
                        return jm;
                    }
                    jm = await _planOrderServices.ToUpdate(entity.orderId , _user.ID, _user.Name, entity.status, entity.itemIds, entity.itemNums);
                }
                catch (Exception e)
                {
                    jm.msg = "数据处理异常";
                    jm.otherData = e;
                }
            return jm;
        }
        #endregion
        #endregion
        #region å–消订单====================================================
        /// <summary>