diff --git a/antis-ncc-admin/src/views/lqTkjlb/ExportBox.vue b/antis-ncc-admin/src/views/lqTkjlb/ExportBox.vue index 4fc5c07..90faab6 100644 --- a/antis-ncc-admin/src/views/lqTkjlb/ExportBox.vue +++ b/antis-ncc-admin/src/views/lqTkjlb/ExportBox.vue @@ -1,60 +1,111 @@ - - - - - 当前页面数据 - 全部页面数据 - + + + + + + + + 留空则导出所有活动的数据 - - 全选 - - - {{item.label}} - - + + + + 留空则导出所有时间的数据 + + + + • 导出包含15个字段:拓客编号、拓客时间、拓客人员、顾客姓名、电话号码、购买张数、支付方式、是否加微信、备注、门店名称、活动名称等 + • 所有字段都会显示中文名称,无需手动选择 + • 支持从下拉框选择活动编号,或按截止时间进行筛选 + • 活动编号显示格式:编号 - 活动名称 + 取 消 - 导 出 + 导 出 + + diff --git a/netcore/src/Application/NCC.API/appsettings.json b/netcore/src/Application/NCC.API/appsettings.json index 2db5c77..d3d8657 100644 --- a/netcore/src/Application/NCC.API/appsettings.json +++ b/netcore/src/Application/NCC.API/appsettings.json @@ -184,7 +184,7 @@ "NCC_App": { "CodeAreasName": "SubDev,Food,Extend,test", //系统文件路径(末尾必须带斜杆) - "SystemPath": "C:\\web\\NCC\\uu-resources\\", + "SystemPath": "Files/", //微信公众号允许上传文件类型 "MPUploadFileType": "bmp,png,jpeg,jpg,gif,mp3,wma,wav,amr,mp4", //微信允许上传文件类型 diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkjlb/LqTkjlbListOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkjlb/LqTkjlbListOutput.cs index 52ce8f9..3d2a112 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkjlb/LqTkjlbListOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkjlb/LqTkjlbListOutput.cs @@ -23,6 +23,16 @@ namespace NCC.Extend.Entitys.Dto.LqTkjlb public string expansionUserId { get; set; } /// + /// 所属部门ID + /// + public string depId { get; set; } + + /// + /// 所属部门名称 + /// + public string depName { get; set; } + + /// /// 拓客人员 /// public string expansionUserName { get; set; } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkjlb/TkjlbExportModel.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkjlb/TkjlbExportModel.cs new file mode 100644 index 0000000..e1fc4c4 --- /dev/null +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkjlb/TkjlbExportModel.cs @@ -0,0 +1,85 @@ +using System; + +namespace NCC.Extend.Entitys.Dto.LqTkjlb +{ + /// + /// 拓客管理导出数据模型 + /// + public class TkjlbExportModel + { + /// + /// 拓客编号 + /// + public string id { get; set; } + + /// + /// 拓客时间 + /// + public DateTime expansionTime { get; set; } + + /// + /// 拓客人员ID + /// + public string expansionUserId { get; set; } + + /// + /// 拓客人员姓名 + /// + public string expansionUserName { get; set; } + + /// + /// 顾客姓名 + /// + public string customerName { get; set; } + + /// + /// 顾客电话 + /// + public string customerPhone { get; set; } + + /// + /// 购买张数 + /// + public int buyNumber { get; set; } + + /// + /// 支付方式 + /// + public string paymentMethod { get; set; } + + /// + /// 是否加微信 + /// + public string isAddWeChat { get; set; } + + /// + /// 备注 + /// + public string remarks { get; set; } + + /// + /// 门店ID + /// + public string storeId { get; set; } + + /// + /// 门店名称 + /// + public string storeName { get; set; } + + /// + /// 战队名称 + /// + public string teamName { get; set; } + + /// + /// 活动ID + /// + public string eventId { get; set; } + + /// + /// 活动名称 + /// + public string eventName { get; set; } + } +} diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs index c5cbe93..f235ff0 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs @@ -351,11 +351,6 @@ namespace NCC.Extend.LqKdKdjlb } } - // 处理健康师姓名,去除最后的逗号并赋值给实体 - if (!string.IsNullOrEmpty(HealthInstructorNames)) - { - HealthInstructorNames = HealthInstructorNames.TrimEnd(','); - } //通过会员id查询会员信息 var memberInfo = await _db.Queryable().Where(u => u.Id == entity.Kdhy).FirstAsync(); diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs index eb22cfa..11f7505 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs @@ -133,6 +133,8 @@ namespace NCC.Extend.LqTkjlb teamName = it.TeamName, eventId = it.EventId, eventName = SqlFunc.Subqueryable().Where(u => u.Id == it.EventId).Select(u => u.EventName), + depId = it.DepId, + depName = SqlFunc.Subqueryable().Where(u => u.Id == it.DepId).Select(u => u.FullName), }) .MergeTable() .OrderBy(sidx + " " + input.sort) @@ -256,48 +258,109 @@ namespace NCC.Extend.LqTkjlb } #endregion - #region 导出拓客管理 + #region 获取拓客管理带中文名称的数据(简化版) /// - /// 导出拓客管理 + /// 获取拓客管理带中文名称的数据(简化版,用于导出) /// - /// 请求参数 + /// 活动编号(可选) + /// 截止时间(可选) /// + [NonAction] + public async Task> GetTkjlbWithChineseNamesSimple(string eventId = null, DateTime? endTime = null) + { + var data = await _db.Queryable( + (tk, md, ev, user) => tk.StoreId == md.Id && tk.EventId == ev.Id && tk.ExpansionUserId == user.Id + ) + .WhereIF(!string.IsNullOrEmpty(eventId), (tk, md, ev, user) => tk.EventId == eventId) + .WhereIF(endTime.HasValue, (tk, md, ev, user) => tk.ExpansionTime <= endTime.Value) + .Select((tk, md, ev, user) => new TkjlbExportModel + { + id = tk.Id, + expansionTime = tk.ExpansionTime, + expansionUserId = tk.ExpansionUserId, + expansionUserName = user.RealName, + customerName = tk.CustomerName, + customerPhone = tk.CustomerPhone, + buyNumber = tk.BuyNumber, + paymentMethod = tk.PaymentMethod, + isAddWeChat = tk.IsAddWeChat, + remarks = tk.Remarks, + storeId = tk.StoreId, + storeName = md.Dm, + teamName = tk.TeamName, + eventId = tk.EventId, + eventName = ev.EventName, + }) + .MergeTable() + .OrderBy("expansionTime desc") + .ToListAsync(); + + return data; + } + #endregion + + #region 导出拓客管理 + /// + /// 导出拓客管理(固定字段,显示中文名称) + /// + /// 活动编号(可选) + /// 截止时间(可选) + /// 导出文件信息 [HttpGet("Actions/Export")] - public async Task Export([FromQuery] LqTkjlbListQueryInput input) + public async Task Export([FromQuery] string eventId = null, [FromQuery] DateTime? endTime = null) { - var userInfo = await _userManager.GetUserInfo(); - var exportData = new List(); - if (input.dataType == 0) + try { - var data = Clay.Object(await this.GetList(input)); - exportData = data.Solidify>().list; - } - else - { - exportData = await this.GetNoPagingList(input); - } - List paramList = - "[{\"value\":\"拓客编号\",\"field\":\"id\"},{\"value\":\"拓客人员\",\"field\":\"tkry\"},{\"value\":\"拓客时间\",\"field\":\"tksj\"},{\"value\":\"顾客姓名\",\"field\":\"gkxm\"},{\"value\":\"电话号码\",\"field\":\"dhhm\"},{\"value\":\"购买张数\",\"field\":\"gmzs\"},{\"value\":\"支付方式\",\"field\":\"zffs\"},{\"value\":\"是否加微信\",\"field\":\"sfjwx\"},{\"value\":\"备注\",\"field\":\"bz\"},{\"value\":\"所属门店\",\"field\":\"ssmd\"},{\"value\":\"所属战队\",\"field\":\"sszd\"},]".ToList(); - ExcelConfig excelconfig = new ExcelConfig(); - excelconfig.FileName = "拓客管理.xls"; - excelconfig.HeadFont = "微软雅黑"; - excelconfig.HeadPoint = 10; - excelconfig.IsAllSizeColumn = true; - excelconfig.ColumnModel = new List(); - List selectKeyList = input.selectKey.Split(',').ToList(); - foreach (var item in selectKeyList) - { - var isExist = paramList.Find(p => p.field == item); - if (isExist != null) + var userInfo = await _userManager.GetUserInfo(); + + // 使用联合查询获取带中文名称的数据 + var exportData = await GetTkjlbWithChineseNamesSimple(eventId, endTime); + + // 检查数据是否为空 + if (exportData == null || exportData.Count == 0) + { + return new { name = "拓客管理.xls", url = "", message = "没有找到符合条件的数据" }; + } + + // 固定导出字段 + List paramList = + "[{\"value\":\"拓客编号\",\"field\":\"id\"},{\"value\":\"拓客时间\",\"field\":\"expansionTime\"},{\"value\":\"拓客人员ID\",\"field\":\"expansionUserId\"},{\"value\":\"拓客人员姓名\",\"field\":\"expansionUserName\"},{\"value\":\"顾客姓名\",\"field\":\"customerName\"},{\"value\":\"顾客电话\",\"field\":\"customerPhone\"},{\"value\":\"购买张数\",\"field\":\"buyNumber\"},{\"value\":\"支付方式\",\"field\":\"paymentMethod\"},{\"value\":\"是否加微信\",\"field\":\"isAddWeChat\"},{\"value\":\"备注\",\"field\":\"remarks\"},{\"value\":\"门店ID\",\"field\":\"storeId\"},{\"value\":\"门店名称\",\"field\":\"storeName\"},{\"value\":\"战队名称\",\"field\":\"teamName\"},{\"value\":\"活动ID\",\"field\":\"eventId\"},{\"value\":\"活动名称\",\"field\":\"eventName\"}]".ToList(); + + // 检查paramList是否为空 + if (paramList == null || paramList.Count == 0) { - excelconfig.ColumnModel.Add(new ExcelColumnModel() { Column = isExist.field, ExcelColumn = isExist.value }); + return new { name = "拓客管理.xls", url = "", message = "参数列表解析失败" }; } + + ExcelConfig excelconfig = new ExcelConfig(); + excelconfig.FileName = "拓客管理" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls"; + excelconfig.HeadFont = "微软雅黑"; + excelconfig.HeadPoint = 10; + excelconfig.IsAllSizeColumn = true; + excelconfig.ColumnModel = new List(); + + // 固定字段列表 + List selectKeyList = new List { "id", "expansionTime", "expansionUserId", "expansionUserName", "customerName", "customerPhone", "buyNumber", "paymentMethod", "isAddWeChat", "remarks", "storeId", "storeName", "teamName", "eventId", "eventName" }; + + foreach (var item in selectKeyList) + { + var isExist = paramList.Find(p => p.field == item); + if (isExist != null) + { + excelconfig.ColumnModel.Add(new ExcelColumnModel() { Column = isExist.field, ExcelColumn = isExist.value }); + } + } + + var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName; + ExcelExportHelper.Export(exportData, excelconfig, addPath); + var fileName = _userManager.UserId + "|" + excelconfig.FileName + "|temporary"; + var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") }; + return output; + } + catch (Exception ex) + { + return new { name = "拓客管理" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls", url = "", message = $"导出失败: {ex.Message}", stackTrace = ex.StackTrace }; } - var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName; - ExcelExportHelper.Export(exportData, excelconfig, addPath); - var fileName = _userManager.UserId + "|" + addPath + "|xls"; - var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") }; - return output; } #endregion
• 导出包含15个字段:拓客编号、拓客时间、拓客人员、顾客姓名、电话号码、购买张数、支付方式、是否加微信、备注、门店名称、活动名称等
• 所有字段都会显示中文名称,无需手动选择
• 支持从下拉框选择活动编号,或按截止时间进行筛选
• 活动编号显示格式:编号 - 活动名称