Commit 0b87d248b185391a1875e29f9f2fad51f0fa36f7

Authored by “wangming”
1 parent 66be4819

Enhance LqEventService to improve store data retrieval with aggregated target an…

…d completion statistics. Introduce new LqStatisticsService methods for saving and querying technology department performance statistics. Update LqTkjlbService to associate member information with store IDs. Refactor LqKdKdjlbStringGenerator for cleaner output formatting.
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqStatisticsTechPerformance/LqStatisticsTechPerformanceListOutput.cs 0 → 100644
  1 +using System;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqStatisticsTechPerformance
  4 +{
  5 + /// <summary>
  6 + /// 科技部开单业绩统计列表输出
  7 + /// </summary>
  8 + public class LqStatisticsTechPerformanceListOutput
  9 + {
  10 + /// <summary>
  11 + /// 主键ID
  12 + /// </summary>
  13 + public string Id { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 统计月份(YYYYMM)
  17 + /// </summary>
  18 + public string StatisticsMonth { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 科技部老师ID
  22 + /// </summary>
  23 + public string TeacherId { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 科技部老师姓名
  27 + /// </summary>
  28 + public string TeacherName { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 科技部老师账号
  32 + /// </summary>
  33 + public string TeacherAccount { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 门店ID
  37 + /// </summary>
  38 + public string StoreId { get; set; }
  39 +
  40 + /// <summary>
  41 + /// 门店名称
  42 + /// </summary>
  43 + public string StoreName { get; set; }
  44 +
  45 + /// <summary>
  46 + /// 订单数量
  47 + /// </summary>
  48 + public int OrderCount { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 总业绩金额
  52 + /// </summary>
  53 + public decimal TotalPerformance { get; set; }
  54 +
  55 + /// <summary>
  56 + /// 人工成本
  57 + /// </summary>
  58 + public decimal LaborCost { get; set; }
  59 +
  60 + /// <summary>
  61 + /// 项目次数
  62 + /// </summary>
  63 + public decimal ProjectCount { get; set; }
  64 +
  65 + /// <summary>
  66 + /// 最后订单日期
  67 + /// </summary>
  68 + public DateTime? LastOrderDate { get; set; }
  69 +
  70 + /// <summary>
  71 + /// 首次订单日期
  72 + /// </summary>
  73 + public DateTime? FirstOrderDate { get; set; }
  74 +
  75 + /// <summary>
  76 + /// 创建时间
  77 + /// </summary>
  78 + public DateTime CreateTime { get; set; }
  79 + }
  80 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqStatisticsTechPerformance/LqStatisticsTechPerformanceListQueryInput.cs 0 → 100644
  1 +using NCC.Common.Filter;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqStatisticsTechPerformance
  4 +{
  5 + /// <summary>
  6 + /// 科技部开单业绩统计列表查询输入
  7 + /// </summary>
  8 + public class LqStatisticsTechPerformanceListQueryInput : PageInputBase
  9 + {
  10 + /// <summary>
  11 + /// 统计月份(YYYYMM)
  12 + /// </summary>
  13 + public string StatisticsMonth { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 科技部老师ID
  17 + /// </summary>
  18 + public string TeacherId { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 科技部老师姓名
  22 + /// </summary>
  23 + public string TeacherName { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 门店ID
  27 + /// </summary>
  28 + public string StoreId { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 门店名称
  32 + /// </summary>
  33 + public string StoreName { get; set; }
  34 + }
  35 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_statistics_tech_performance/LqStatisticsTechPerformanceEntity.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +using System.ComponentModel.DataAnnotations.Schema;
  4 +using SqlSugar;
  5 +
  6 +namespace NCC.Extend.Entitys.lq_statistics_tech_performance
  7 +{
  8 + /// <summary>
  9 + /// 科技部开单业绩统计数据表
  10 + /// </summary>
  11 + [SugarTable("lq_statistics_tech_performance")]
  12 + public class LqStatisticsTechPerformanceEntity
  13 + {
  14 + /// <summary>
  15 + /// 主键ID
  16 + /// </summary>
  17 + [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true, Length = 50)]
  18 +
  19 + public string Id { get; set; }
  20 +
  21 + /// <summary>
  22 + /// 统计月份(YYYYMM)
  23 + /// </summary>
  24 + [Required]
  25 + [StringLength(6)]
  26 + [SugarColumn(ColumnName = "F_StatisticsMonth", Length = 6, IsNullable = false)]
  27 + public string StatisticsMonth { get; set; }
  28 +
  29 + /// <summary>
  30 + /// 科技部老师ID
  31 + /// </summary>
  32 + [Required]
  33 + [StringLength(50)]
  34 + [SugarColumn(ColumnName = "F_TeacherId", Length = 50, IsNullable = false)]
  35 + public string TeacherId { get; set; }
  36 +
  37 + /// <summary>
  38 + /// 科技部老师姓名
  39 + /// </summary>
  40 + [Required]
  41 + [StringLength(100)]
  42 + [SugarColumn(ColumnName = "F_TeacherName", Length = 100, IsNullable = false)]
  43 + public string TeacherName { get; set; }
  44 +
  45 + /// <summary>
  46 + /// 科技部老师账号
  47 + /// </summary>
  48 + [StringLength(100)]
  49 + [SugarColumn(ColumnName = "F_TeacherAccount", Length = 100, IsNullable = true)]
  50 + public string TeacherAccount { get; set; }
  51 +
  52 + /// <summary>
  53 + /// 门店ID
  54 + /// </summary>
  55 + [StringLength(50)]
  56 + [SugarColumn(ColumnName = "F_StoreId", Length = 50, IsNullable = true)]
  57 + public string StoreId { get; set; }
  58 +
  59 + /// <summary>
  60 + /// 门店名称
  61 + /// </summary>
  62 + [StringLength(100)]
  63 + [SugarColumn(ColumnName = "F_StoreName", Length = 100, IsNullable = true)]
  64 + public string StoreName { get; set; }
  65 +
  66 + /// <summary>
  67 + /// 订单数量
  68 + /// </summary>
  69 + [SugarColumn(ColumnName = "F_OrderCount", IsNullable = false)]
  70 + public int OrderCount { get; set; } = 0;
  71 +
  72 + /// <summary>
  73 + /// 总业绩金额
  74 + /// </summary>
  75 + [SugarColumn(ColumnName = "F_TotalPerformance", DecimalDigits = 2, IsNullable = false)]
  76 + public decimal TotalPerformance { get; set; } = 0.00m;
  77 +
  78 + /// <summary>
  79 + /// 人工成本
  80 + /// </summary>
  81 + [SugarColumn(ColumnName = "F_LaborCost", DecimalDigits = 2, IsNullable = false)]
  82 + public decimal LaborCost { get; set; } = 0.00m;
  83 +
  84 + /// <summary>
  85 + /// 项目次数
  86 + /// </summary>
  87 + [SugarColumn(ColumnName = "F_ProjectCount", DecimalDigits = 2, IsNullable = false)]
  88 + public decimal ProjectCount { get; set; } = 0.00m;
  89 +
  90 + /// <summary>
  91 + /// 最后订单日期
  92 + /// </summary>
  93 + [SugarColumn(ColumnName = "F_LastOrderDate", IsNullable = true)]
  94 + public DateTime? LastOrderDate { get; set; }
  95 +
  96 + /// <summary>
  97 + /// 首次订单日期
  98 + /// </summary>
  99 + [SugarColumn(ColumnName = "F_FirstOrderDate", IsNullable = true)]
  100 + public DateTime? FirstOrderDate { get; set; }
  101 +
  102 + /// <summary>
  103 + /// 创建时间
  104 + /// </summary>
  105 + [SugarColumn(ColumnName = "F_CreateTime", IsNullable = false)]
  106 + public DateTime CreateTime { get; set; } = DateTime.Now;
  107 + }
  108 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqEventService.cs
... ... @@ -729,25 +729,49 @@ namespace NCC.Extend.LqEvent
729 729  
730 730 try
731 731 {
732   - // 使用多表查询获取门店统计数据
733   - var storeData = await _db.Queryable<LqEventUserEntity, LqMdxxEntity, LqTkjlbEntity>(
  732 + // 第一步:获取门店的目标数据(所有参与活动的用户目标总和)
  733 + var storeTargets = await _db.Queryable<LqEventUserEntity, LqMdxxEntity>(
  734 + (eventUser, store) => eventUser.EventId == eventId && eventUser.StoreId == store.Id
  735 + )
  736 + .GroupBy((eventUser, store) => new { StoreId = store.Id, StoreName = store.Dm })
  737 + .Select(
  738 + (eventUser, store) =>
  739 + new
  740 + {
  741 + StoreId = store.Id,
  742 + StoreName = store.Dm,
  743 + TotalTarget = SqlFunc.AggregateSum(eventUser.EventTarget)
  744 + }
  745 + )
  746 + .ToListAsync();
  747 +
  748 + // 第二步:获取门店的完成数据(拓客记录数量)
  749 + var storeCompletions = await _db.Queryable<LqEventUserEntity, LqMdxxEntity, LqTkjlbEntity>(
734 750 (eventUser, store, tkjlb) => eventUser.EventId == eventId && eventUser.StoreId == store.Id && eventUser.UserId == tkjlb.ExpansionUserId && tkjlb.EventId == eventId
735 751 )
736 752 .GroupBy((eventUser, store, tkjlb) => new { StoreId = store.Id, StoreName = store.Dm })
737 753 .Select(
738 754 (eventUser, store, tkjlb) =>
739   - new StoreDataOutput
  755 + new
740 756 {
741 757 StoreId = store.Id,
742 758 StoreName = store.Dm,
743   - TotalTarget = SqlFunc.AggregateSum(eventUser.EventTarget),
744   - CompletedTarget = SqlFunc.AggregateCount(tkjlb.Id),
745   - CompletionRate = 0, // 将在内存中计算
746   - Ranking = 0, // 将在内存中计算
  759 + CompletedTarget = SqlFunc.AggregateCount(tkjlb.Id)
747 760 }
748 761 )
749 762 .ToListAsync();
750 763  
  764 + // 第三步:合并数据
  765 + var storeData = storeTargets.Select(target => new StoreDataOutput
  766 + {
  767 + StoreId = target.StoreId,
  768 + StoreName = target.StoreName,
  769 + TotalTarget = target.TotalTarget,
  770 + CompletedTarget = storeCompletions.FirstOrDefault(c => c.StoreId == target.StoreId)?.CompletedTarget ?? 0,
  771 + CompletionRate = 0, // 将在内存中计算
  772 + Ranking = 0, // 将在内存中计算
  773 + }).ToList();
  774 +
751 775 // 计算完成率和排名
752 776 foreach (var store in storeData)
753 777 {
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs
... ... @@ -13,6 +13,7 @@ using NCC.Dependency;
13 13 using NCC.DynamicApiController;
14 14 using NCC.Extend.Entitys.Dto.LqMdxx;
15 15 using NCC.Extend.Entitys.Dto.LqStatistics;
  16 +using NCC.Extend.Entitys.Dto.LqStatisticsTechPerformance;
16 17 using NCC.Extend.Entitys.Dto.LqYcsdJsj;
17 18 using NCC.Extend.Entitys.lq_hytk_kjbsyj;
18 19 using NCC.Extend.Entitys.lq_jinsanjiao_user;
... ... @@ -25,6 +26,7 @@ using NCC.Extend.Entitys.lq_ycsd_jsj;
25 26 using NCC.Extend.Entitys.lq_yjmxb;
26 27 using NCC.Extend.Entitys.lq_statistics_gold_triangle;
27 28 using NCC.Extend.Entitys.lq_statistics_personal_performance;
  29 +using NCC.Extend.Entitys.lq_statistics_tech_performance;
28 30 using NCC.Extend.Entitys.lq_xmzl;
29 31 using NCC.Extend.Entitys.Dto.LqStatisticsPersonalPerformance;
30 32 using NCC.Extend.Entitys.v_tech_teacher_flow;
... ... @@ -1190,7 +1192,7 @@ namespace NCC.Extend.LqStatistics
1190 1192 #region 金三角统计数据保存
1191 1193  
1192 1194 /// <summary>
1193   - /// 1、保存金三角开卡业绩统计数据
  1195 + /// 【1】保存金三角开卡业绩统计数据
1194 1196 /// </summary>
1195 1197 /// <remarks>
1196 1198 /// 根据金三角设定和开单记录统计金三角的业绩数据
... ... @@ -1366,7 +1368,7 @@ namespace NCC.Extend.LqStatistics
1366 1368 #region 个人开单业绩统计
1367 1369  
1368 1370 /// <summary>
1369   - /// 保存个人开单业绩统计数据
  1371 + /// 【2】保存健康师个人开单业绩统计数据
1370 1372 /// </summary>
1371 1373 /// <remarks>
1372 1374 /// 根据开单记录统计个人的业绩数据,包括基础业绩和合作业绩
... ... @@ -1654,5 +1656,242 @@ namespace NCC.Extend.LqStatistics
1654 1656 /// </summary>
1655 1657 public string ParentId { get; set; }
1656 1658 }
  1659 +
  1660 + #region 科技部开单业绩统计
  1661 +
  1662 + /// <summary>
  1663 + /// 【3】保存科技部开单业绩统计数据
  1664 + /// </summary>
  1665 + /// <remarks>
  1666 + /// 根据指定月份统计科技部老师的开单业绩数据,只统计开卡业绩,不包含耗卡和退卡业绩
  1667 + ///
  1668 + /// 示例请求:
  1669 + /// ```json
  1670 + /// POST /api/Extend/LqStatistics/save-tech-performance-statistics
  1671 + /// {
  1672 + /// "statisticsMonth": "202401"
  1673 + /// }
  1674 + /// ```
  1675 + ///
  1676 + /// 参数说明:
  1677 + /// - statisticsMonth: 统计月份,格式为YYYYMM
  1678 + /// </remarks>
  1679 + /// <param name="statisticsMonth">统计月份(YYYYMM格式)</param>
  1680 + /// <returns>保存结果</returns>
  1681 + /// <response code="200">成功保存统计数据</response>
  1682 + /// <response code="400">参数错误</response>
  1683 + /// <response code="500">服务器内部错误</response>
  1684 + [HttpPost("save-tech-performance-statistics")]
  1685 + public async Task<dynamic> SaveTechPerformanceStatistics(string statisticsMonth)
  1686 + {
  1687 + if (string.IsNullOrEmpty(statisticsMonth) || statisticsMonth.Length != 6)
  1688 + {
  1689 + throw NCCException.Oh("统计月份格式错误,请使用YYYYMM格式");
  1690 + }
  1691 +
  1692 + try
  1693 + {
  1694 + // 使用数据库聚合方式,只统计开单业绩(开卡流水)
  1695 + var sql = @"
  1696 + SELECT
  1697 + k.kjbls AS TeacherId,
  1698 + k.kjblsxm AS TeacherName,
  1699 + k.kjblszh AS TeacherAccount,
  1700 + NULL AS StoreId,
  1701 + NULL AS StoreName,
  1702 + COUNT(DISTINCT k.F_kdpxid) AS OrderCount,
  1703 + SUM(CAST(COALESCE(k.kjblsyj, 0) AS DECIMAL(18,2))) AS TotalPerformance,
  1704 + SUM(CAST(COALESCE(k.F_LaborCost, 0) AS DECIMAL(18,2))) AS LaborCost,
  1705 + SUM(CAST(COALESCE(pm.F_ProjectNumber, 0) AS DECIMAL(18,2))) AS ProjectCount,
  1706 + MAX(k.yjsj) AS LastOrderDate,
  1707 + MIN(k.yjsj) AS FirstOrderDate
  1708 + FROM lq_kd_kjbsyj k
  1709 + LEFT JOIN lq_kd_pxmx pm ON k.F_kdpxid = pm.F_Id
  1710 + WHERE k.kjbls IS NOT NULL
  1711 + AND k.kjblsxm IS NOT NULL
  1712 + AND k.yjsj IS NOT NULL
  1713 + AND k.kjblsyj IS NOT NULL
  1714 + AND k.kjblsyj != ''
  1715 + AND k.kjblsyj != '0'
  1716 + AND YEAR(k.yjsj) = @year
  1717 + AND MONTH(k.yjsj) = @month
  1718 + GROUP BY
  1719 + k.kjbls,
  1720 + k.kjblsxm,
  1721 + k.kjblszh
  1722 + ORDER BY TotalPerformance DESC";
  1723 +
  1724 + // 解析统计月份
  1725 + var year = int.Parse(statisticsMonth.Substring(0, 4));
  1726 + var month = int.Parse(statisticsMonth.Substring(4, 2));
  1727 +
  1728 + // 执行SQL查询
  1729 + var statisticsData = await _db.Ado.SqlQueryAsync<dynamic>(sql, new { year, month });
  1730 +
  1731 + _logger.LogInformation($"SQL查询结果数量: {statisticsData?.Count ?? 0}");
  1732 + if (statisticsData?.Any() == true)
  1733 + {
  1734 + var firstData = statisticsData.First();
  1735 + _logger.LogInformation($"第一条数据: TeacherId={firstData.TeacherId}, TeacherName={firstData.TeacherName}, TotalPerformance={firstData.TotalPerformance}");
  1736 + }
  1737 +
  1738 + if (!statisticsData.Any())
  1739 + {
  1740 + return new
  1741 + {
  1742 + Success = true,
  1743 + Message = $"未找到 {statisticsMonth} 月份的科技部开单业绩统计数据",
  1744 + SavedCount = 0
  1745 + };
  1746 + }
  1747 +
  1748 + // 转换为实体对象
  1749 + var entities = new List<LqStatisticsTechPerformanceEntity>();
  1750 + foreach (var data in statisticsData)
  1751 + {
  1752 + try
  1753 + {
  1754 + var entity = new LqStatisticsTechPerformanceEntity
  1755 + {
  1756 + Id = YitIdHelper.NextId().ToString(),
  1757 + StatisticsMonth = statisticsMonth,
  1758 + TeacherId = data.TeacherId?.ToString() ?? "",
  1759 + TeacherName = data.TeacherName?.ToString() ?? "",
  1760 + TeacherAccount = data.TeacherAccount?.ToString() ?? "",
  1761 + StoreId = data.StoreId?.ToString() ?? "",
  1762 + StoreName = data.StoreName?.ToString() ?? "",
  1763 + OrderCount = Convert.ToInt32(data.OrderCount ?? 0),
  1764 + TotalPerformance = Convert.ToDecimal(data.TotalPerformance ?? 0),
  1765 + LaborCost = Convert.ToDecimal(data.LaborCost ?? 0),
  1766 + ProjectCount = Convert.ToDecimal(data.ProjectCount ?? 0),
  1767 + LastOrderDate = data.LastOrderDate as DateTime?,
  1768 + FirstOrderDate = data.FirstOrderDate as DateTime?,
  1769 + CreateTime = DateTime.Now
  1770 + };
  1771 + entities.Add(entity);
  1772 + _logger.LogInformation($"成功转换实体: TeacherId={entity.TeacherId}, TotalPerformance={entity.TotalPerformance}");
  1773 + }
  1774 + catch (Exception ex)
  1775 + {
  1776 + _logger.LogError($"转换实体失败: TeacherId={data.TeacherId}, Error={ex.Message}");
  1777 + }
  1778 + }
  1779 +
  1780 + _logger.LogInformation($"准备插入 {entities.Count} 条实体数据");
  1781 +
  1782 + // 使用事务确保数据一致性
  1783 + var result = await _db.Ado.UseTranAsync(async () =>
  1784 + {
  1785 + try
  1786 + {
  1787 + // 先删除该月份的历史数据
  1788 + var deleteResult = await _db.Deleteable<LqStatisticsTechPerformanceEntity>()
  1789 + .Where(x => x.StatisticsMonth == statisticsMonth)
  1790 + .ExecuteCommandAsync();
  1791 + _logger.LogInformation($"删除历史数据结果: {deleteResult}");
  1792 +
  1793 + // 批量插入新数据
  1794 + var insertResult = await _db.Insertable(entities).ExecuteCommandAsync();
  1795 + _logger.LogInformation($"插入新数据结果: {insertResult}");
  1796 + return insertResult;
  1797 + }
  1798 + catch (Exception ex)
  1799 + {
  1800 + _logger.LogError($"事务执行失败: {ex.Message}");
  1801 + throw;
  1802 + }
  1803 + });
  1804 +
  1805 + _logger.LogInformation($"事务执行结果: IsSuccess={result.IsSuccess}, Data={result.Data}, ErrorMessage={result.ErrorMessage}");
  1806 + var savedCount = result.IsSuccess ? result.Data : 0;
  1807 + _logger.LogInformation($"成功保存科技部开单业绩统计数据 - 月份: {statisticsMonth}, 记录数: {savedCount}");
  1808 +
  1809 + return new
  1810 + {
  1811 + Success = true,
  1812 + Message = $"成功保存 {savedCount} 条科技部开单业绩统计数据",
  1813 + SavedCount = savedCount,
  1814 + StatisticsMonth = statisticsMonth
  1815 + };
  1816 + }
  1817 + catch (Exception ex)
  1818 + {
  1819 + _logger.LogError(ex, $"保存科技部开单业绩统计数据失败 - 月份: {statisticsMonth}");
  1820 + throw NCCException.Oh($"保存科技部开单业绩统计数据失败: {ex.Message}");
  1821 + }
  1822 + }
  1823 +
  1824 + /// <summary>
  1825 + /// 获取科技部开单业绩统计数据
  1826 + /// </summary>
  1827 + /// <remarks>
  1828 + /// 分页查询科技部开单业绩统计数据
  1829 + ///
  1830 + /// 示例请求:
  1831 + /// ```json
  1832 + /// GET /api/Extend/LqStatistics/get-tech-performance-statistics?PageIndex=1&amp;PageSize=10&amp;StatisticsMonth=202401
  1833 + /// ```
  1834 + /// </remarks>
  1835 + /// <param name="input">查询参数</param>
  1836 + /// <returns>分页数据</returns>
  1837 + /// <response code="200">查询成功</response>
  1838 + /// <response code="400">参数错误</response>
  1839 + /// <response code="500">服务器内部错误</response>
  1840 + [HttpGet("get-tech-performance-statistics")]
  1841 + public async Task<dynamic> GetTechPerformanceStatistics([FromQuery] LqStatisticsTechPerformanceListQueryInput input)
  1842 + {
  1843 + try
  1844 + {
  1845 + var query = _db.Queryable<LqStatisticsTechPerformanceEntity>();
  1846 +
  1847 + // 添加查询条件
  1848 + query = query.WhereIF(!string.IsNullOrEmpty(input.StatisticsMonth), x => x.StatisticsMonth == input.StatisticsMonth);
  1849 + query = query.WhereIF(!string.IsNullOrEmpty(input.TeacherId), x => x.TeacherId == input.TeacherId);
  1850 + query = query.WhereIF(!string.IsNullOrEmpty(input.TeacherName), x => x.TeacherName.Contains(input.TeacherName));
  1851 + query = query.WhereIF(!string.IsNullOrEmpty(input.StoreId), x => x.StoreId == input.StoreId);
  1852 + query = query.WhereIF(!string.IsNullOrEmpty(input.StoreName), x => x.StoreName.Contains(input.StoreName));
  1853 +
  1854 + // 按业绩降序排序
  1855 + query = query.OrderBy(x => x.TotalPerformance, OrderByType.Desc);
  1856 +
  1857 + // 分页查询
  1858 + var result = await query.ToPagedListAsync(input.currentPage, input.pageSize);
  1859 +
  1860 + return new
  1861 + {
  1862 + Success = true,
  1863 + Data = new
  1864 + {
  1865 + Records = result.list.Select(x => new LqStatisticsTechPerformanceListOutput
  1866 + {
  1867 + Id = x.Id,
  1868 + StatisticsMonth = x.StatisticsMonth,
  1869 + TeacherId = x.TeacherId,
  1870 + TeacherName = x.TeacherName,
  1871 + TeacherAccount = x.TeacherAccount,
  1872 + StoreId = x.StoreId,
  1873 + StoreName = x.StoreName,
  1874 + OrderCount = x.OrderCount,
  1875 + TotalPerformance = x.TotalPerformance,
  1876 + LaborCost = x.LaborCost,
  1877 + ProjectCount = x.ProjectCount,
  1878 + LastOrderDate = x.LastOrderDate,
  1879 + FirstOrderDate = x.FirstOrderDate,
  1880 + CreateTime = x.CreateTime
  1881 + }).ToList(),
  1882 + Total = result.pagination.Total,
  1883 + PageIndex = input.currentPage,
  1884 + PageSize = input.pageSize
  1885 + }
  1886 + };
  1887 + }
  1888 + catch (Exception ex)
  1889 + {
  1890 + _logger.LogError(ex, "查询科技部开单业绩统计数据失败");
  1891 + throw NCCException.Oh($"查询科技部开单业绩统计数据失败: {ex.Message}");
  1892 + }
  1893 + }
  1894 +
  1895 + #endregion
1657 1896 }
1658 1897 }
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs
... ... @@ -182,6 +182,7 @@ namespace NCC.Extend.LqTkjlb
182 182 MemberInfo.Sjh = input.customerPhone; // 设置手机号
183 183 MemberInfo.Khlx = "线索";
184 184 MemberInfo.Dah = "GK" + DateTime.Now.ToString("yyyyMMddHHmmss");
  185 + MemberInfo.Gsmd = eventUserInfo.StoreId;
185 186 var memberResult = await _db.Insertable(MemberInfo).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
186 187 if (!(memberResult > 0))
187 188 {
... ...
netcore/src/Modularity/Extend/NCC.Extend/Utils/LqKdKdjlbStringGenerator.cs
... ... @@ -47,35 +47,35 @@ namespace NCC.Extend.Utils
47 47 // 健康师:王维
48 48 var healthTeachers = GetHealthTeachers(entity.lqKdJksyjList);
49 49 sb.AppendLine($"⏩健康师:{healthTeachers}");
50   -
  50 +
51 51 // 活动方案:532工程
52 52 sb.AppendLine($"⏩活动方案:{entity.pxxx ?? "无"}");
53   -
  53 +
54 54 // 跟单配合:王经理 竹主任 陈思思老师
55 55 var techTeachers = GetTechTeachers(entity.lqKdKjbsyjList);
56 56 sb.AppendLine($"⏩跟单配合:{techTeachers}");
57   -
  57 +
58 58 // 业绩:4800
59 59 sb.AppendLine($"⏩业绩:{entity.zdyj}");
60   -
  60 +
61 61 // 实付:4800
62 62 sb.AppendLine($"⏩实付:{entity.sfyj}");
63   -
  63 +
64 64 // 欠款:
65 65 sb.AppendLine($"⏩欠款: {entity.qk}");
66   -
  66 +
67 67 // 抵扣:
68 68 sb.AppendLine($"⏩抵扣:{entity.ckmx ?? "无"}");
69   -
  69 +
70 70 // 来源:售后
71 71 sb.AppendLine($"⏩来源:{entity.khly ?? "无"}");
72   -
  72 +
73 73 // 是否属于升单:
74 74 sb.AppendLine($"⏩是否属于升单:{entity.sfskdd ?? "无"}");
75   -
  75 +
76 76 // 简介:高姐是我们的老客,今天邀约到犀浦店做532,维维全程陪同,陈思思老师在操作过程中给姐姐分享企业文化,找到顾客需求、邀请王经理 竹主任 给到顾客福利、顾客爽快成交,私密档案已了解到70%,感谢顾客的信任与支持 ,王经理 竹主任 陈老师辛苦了[玫瑰]维维真棒[强]龙城国际店加油!我们还在努力中!家人们给我们打气加油👏👏👏👏等待我们的捷报👍👍
77 77 sb.AppendLine($"⏩简介:{entity.jj ?? "无"}");
78   -
  78 +
79 79 return sb.ToString();
80 80 }
81 81  
... ... @@ -94,9 +94,9 @@ namespace NCC.Extend.Utils
94 94 try
95 95 {
96 96 var store = _db.Queryable<LqMdxxEntity>()
97   - .Where(x => x.Mdbm == storeCode)
  97 + .Where(x => x.Id == storeCode)
98 98 .First();
99   -
  99 +
100 100 return store?.Dm ?? storeCode;
101 101 }
102 102 catch
... ... @@ -122,7 +122,7 @@ namespace NCC.Extend.Utils
122 122 var department = _db.Queryable<LqYcsdJsjEntity>()
123 123 .Where(x => x.Id == departmentCode)
124 124 .First();
125   -
  125 +
126 126 return department?.Jsj ?? departmentCode;
127 127 }
128 128 catch
... ... @@ -216,7 +216,7 @@ namespace NCC.Extend.Utils
216 216 var customer = _db.Queryable<LqKhxxEntity>()
217 217 .Where(x => x.Id == customerId)
218 218 .First();
219   -
  219 +
220 220 return customer?.Khmc ?? "无";
221 221 }
222 222 catch
... ... @@ -242,7 +242,7 @@ namespace NCC.Extend.Utils
242 242 var user = _db.Queryable<UserEntity>()
243 243 .Where(x => x.Account == account && x.DeleteMark == null)
244 244 .First();
245   -
  245 +
246 246 return user?.RealName ?? string.Empty;
247 247 }
248 248 catch
... ...