diff --git a/analyze_excel.py b/analyze_excel.py deleted file mode 100644 index 2a03a64..0000000 --- a/analyze_excel.py +++ /dev/null @@ -1,207 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Excel工资核算文件分析工具 -分析工资核算相关的Excel文件,提取字段信息和引用关系 -""" - -import pandas as pd -import os -import re -from pathlib import Path - -def analyze_excel_file(file_path, sheet_name=None): - """分析单个Excel文件""" - try: - # 获取所有工作表名称 - excel_file = pd.ExcelFile(file_path) - sheets = excel_file.sheet_names - - print(f"\n=== 分析文件: {os.path.basename(file_path)} ===") - print(f"工作表数量: {len(sheets)}") - print(f"工作表名称: {sheets}") - - analysis_result = { - 'file_name': os.path.basename(file_path), - 'sheets': {}, - 'all_columns': set(), - 'formulas': [], - 'references': [] - } - - # 分析每个工作表 - for sheet in sheets: - if sheet_name and sheet != sheet_name: - continue - - try: - df = pd.read_excel(file_path, sheet_name=sheet, header=0) - print(f"\n--- 工作表: {sheet} ---") - print(f"行数: {len(df)}") - print(f"列数: {len(df.columns)}") - print(f"列名: {list(df.columns)}") - - # 收集列名 - analysis_result['all_columns'].update(df.columns) - analysis_result['sheets'][sheet] = { - 'rows': len(df), - 'columns': len(df.columns), - 'column_names': list(df.columns), - 'sample_data': df.head(3).to_dict('records') if len(df) > 0 else [] - } - - # 查找公式和引用 - for col in df.columns: - for idx, value in df[col].items(): - if pd.notna(value) and isinstance(value, str): - # 查找Excel公式模式 - formula_patterns = [ - r'=([A-Z]+[0-9]+)', # 单元格引用 - r'=([A-Z]+[0-9]+:[A-Z]+[0-9]+)', # 范围引用 - r'=([A-Z]+[0-9]+\[[^\]]+\])', # 数组引用 - r'=([A-Z]+[0-9]+\$[0-9]+)', # 绝对引用 - r'=([A-Z]+[0-9]+:[A-Z]+[0-9]+\$[0-9]+)', # 绝对范围引用 - ] - - for pattern in formula_patterns: - matches = re.findall(pattern, str(value)) - if matches: - analysis_result['formulas'].append({ - 'sheet': sheet, - 'cell': f"{col}{idx+1}", - 'formula': str(value), - 'references': matches - }) - analysis_result['references'].extend(matches) - - except Exception as e: - print(f"分析工作表 {sheet} 时出错: {e}") - analysis_result['sheets'][sheet] = {'error': str(e)} - - return analysis_result - - except Exception as e: - print(f"分析文件 {file_path} 时出错: {e}") - return None - -def main(): - """主函数""" - base_path = "/Users/mr.wang/代码库/绿纤/lvqianmeiye_ERP/参考资料/工资核算 -7月" - - # 要分析的文件列表 - files_to_analyze = [ - "工资(全字段).xlsx", - "①B-a-26考勤汇总表.xlsx", - "②B-a-17每日早报.xlsx", - "③B-a-③呈现-消耗明细表.xlsx", - "④B-a-25社保统计表.xlsx", - "⑤B-a-12奖励统计表.xlsx", - "B-b-③健康师底薪.xlsx", - "B-b-④健康师提成-金三角顾问.xlsx", - "B-b-⑤其他岗位工资.xlsx", - "B-b-⑤当月数据及门店毛利.xlsx" - ] - - all_results = {} - - print("开始分析工资核算Excel文件...") - print("=" * 60) - - for filename in files_to_analyze: - file_path = os.path.join(base_path, filename) - if os.path.exists(file_path): - result = analyze_excel_file(file_path) - if result: - all_results[filename] = result - else: - print(f"文件不存在: {filename}") - - # 生成分析报告 - generate_report(all_results) - -def generate_report(all_results): - """生成分析报告""" - report_path = "/Users/mr.wang/代码库/绿纤/lvqianmeiye_ERP/工资核算Excel分析报告.md" - - with open(report_path, 'w', encoding='utf-8') as f: - f.write("# 工资核算Excel文件分析报告\n\n") - f.write("## 概述\n\n") - f.write("本报告分析了工资核算相关的Excel文件,提取了字段信息、公式引用关系等关键数据。\n\n") - - # 文件概览 - f.write("## 文件概览\n\n") - f.write("| 文件名 | 工作表数量 | 总列数 | 状态 |\n") - f.write("|--------|------------|--------|------|\n") - - for filename, result in all_results.items(): - if result: - sheet_count = len(result['sheets']) - total_columns = len(result['all_columns']) - f.write(f"| {filename} | {sheet_count} | {total_columns} | ✅ |\n") - else: - f.write(f"| {filename} | - | - | ❌ |\n") - - # 详细分析 - f.write("\n## 详细分析\n\n") - - for filename, result in all_results.items(): - if not result: - continue - - f.write(f"### {filename}\n\n") - - # 工作表信息 - f.write("#### 工作表信息\n\n") - for sheet_name, sheet_info in result['sheets'].items(): - if 'error' in sheet_info: - f.write(f"- **{sheet_name}**: 分析出错 - {sheet_info['error']}\n") - else: - f.write(f"- **{sheet_name}**: {sheet_info['rows']}行 x {sheet_info['columns']}列\n") - f.write(f" - 列名: {', '.join([str(col) for col in sheet_info['column_names']])}\n") - - # 字段统计 - f.write(f"\n#### 字段统计\n\n") - f.write(f"总字段数: {len(result['all_columns'])}\n\n") - f.write("所有字段列表:\n") - for col in sorted(result['all_columns'], key=str): - f.write(f"- {col}\n") - - # 公式引用 - if result['formulas']: - f.write(f"\n#### 公式引用\n\n") - f.write(f"发现 {len(result['formulas'])} 个公式引用:\n\n") - for formula in result['formulas'][:10]: # 只显示前10个 - f.write(f"- **{formula['cell']}** ({formula['sheet']}): {formula['formula']}\n") - f.write(f" - 引用: {', '.join(formula['references'])}\n") - - if len(result['formulas']) > 10: - f.write(f"\n... 还有 {len(result['formulas']) - 10} 个公式\n") - - f.write("\n---\n\n") - - # 字段汇总 - f.write("## 字段汇总\n\n") - all_columns = set() - for result in all_results.values(): - if result: - all_columns.update(result['all_columns']) - - f.write(f"所有文件共发现 {len(all_columns)} 个唯一字段:\n\n") - for col in sorted(all_columns, key=str): - f.write(f"- {col}\n") - - # 引用关系汇总 - f.write("\n## 引用关系汇总\n\n") - all_references = set() - for result in all_results.values(): - if result: - all_references.update(result['references']) - - f.write(f"发现 {len(all_references)} 个唯一引用:\n\n") - for ref in sorted(all_references, key=str): - f.write(f"- {ref}\n") - - print(f"\n分析报告已生成: {report_path}") - -if __name__ == "__main__": - main() diff --git a/analyze_formulas.py b/analyze_formulas.py deleted file mode 100644 index 08a3824..0000000 --- a/analyze_formulas.py +++ /dev/null @@ -1,307 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Excel公式分析工具 -分析工资核算Excel文件中的公式和引用关系 -""" - -import pandas as pd -import openpyxl -import os -import re -from pathlib import Path - -def extract_formulas_from_excel(file_path): - """从Excel文件中提取所有公式""" - try: - # 使用openpyxl读取Excel文件以获取公式 - workbook = openpyxl.load_workbook(file_path, data_only=False) - - formulas = [] - references = [] - - for sheet_name in workbook.sheetnames: - worksheet = workbook[sheet_name] - - for row in worksheet.iter_rows(): - for cell in row: - if cell.data_type == 'f': # 公式类型 - formula = str(cell.value) - cell_ref = f"{sheet_name}!{cell.coordinate}" - - # 提取公式中的引用 - refs = extract_references_from_formula(formula) - - formulas.append({ - 'file': os.path.basename(file_path), - 'sheet': sheet_name, - 'cell': cell.coordinate, - 'formula': formula, - 'references': refs - }) - - references.extend(refs) - - return formulas, references - - except Exception as e: - print(f"分析文件 {file_path} 时出错: {e}") - return [], [] - -def extract_references_from_formula(formula): - """从公式中提取引用关系""" - references = [] - - # 匹配各种引用模式 - patterns = [ - # XLOOKUP引用模式 - r"XLOOKUP\([^,]+,\s*'([^']+)'!([^,]+),\s*'([^']+)'!([^,]+)", - # VLOOKUP引用模式 - r"VLOOKUP\([^,]+,\s*'([^']+)'!([^,]+)", - # 直接工作表引用 - r"'([^']+)'!([A-Z]+\d+)", - # 工作表范围引用 - r"'([^']+)'!([A-Z]+\d+:[A-Z]+\d+)", - # 简单单元格引用 - r"([A-Z]+\d+)", - # 范围引用 - r"([A-Z]+\d+:[A-Z]+\d+)", - ] - - for pattern in patterns: - matches = re.findall(pattern, formula) - for match in matches: - if isinstance(match, tuple): - if len(match) == 2: - references.append({ - 'type': 'worksheet_reference', - 'file': match[0] if match[0] else None, - 'range': match[1] - }) - elif len(match) == 4: - references.append({ - 'type': 'xlookup_reference', - 'file': match[0], - 'lookup_range': match[1], - 'file2': match[2], - 'return_range': match[3] - }) - else: - references.append({ - 'type': 'cell_reference', - 'range': match - }) - - return references - -def analyze_formula_dependencies(formulas): - """分析公式依赖关系""" - dependencies = {} - - for formula in formulas: - cell_key = f"{formula['file']}!{formula['sheet']}!{formula['cell']}" - dependencies[cell_key] = { - 'formula': formula['formula'], - 'dependencies': formula['references'] - } - - return dependencies - -def generate_formula_report(formulas, references, dependencies): - """生成公式分析报告""" - report_path = "/Users/mr.wang/代码库/绿纤/lvqianmeiye_ERP/Excel公式分析报告.md" - - with open(report_path, 'w', encoding='utf-8') as f: - f.write("# Excel公式分析报告\n\n") - f.write("## 概述\n\n") - f.write("本报告分析了工资核算Excel文件中的公式和引用关系,帮助理解数据计算逻辑。\n\n") - - # 统计信息 - f.write("## 统计信息\n\n") - f.write(f"- 总公式数量: {len(formulas)}\n") - f.write(f"- 总引用数量: {len(references)}\n") - f.write(f"- 涉及文件数量: {len(set(f['file'] for f in formulas))}\n\n") - - # 按文件分组分析 - files = {} - for formula in formulas: - file_name = formula['file'] - if file_name not in files: - files[file_name] = [] - files[file_name].append(formula) - - f.write("## 文件公式分析\n\n") - - for file_name, file_formulas in files.items(): - f.write(f"### {file_name}\n\n") - f.write(f"公式数量: {len(file_formulas)}\n\n") - - # 按工作表分组 - sheets = {} - for formula in file_formulas: - sheet_name = formula['sheet'] - if sheet_name not in sheets: - sheets[sheet_name] = [] - sheets[sheet_name].append(formula) - - for sheet_name, sheet_formulas in sheets.items(): - f.write(f"#### 工作表: {sheet_name}\n\n") - f.write(f"公式数量: {len(sheet_formulas)}\n\n") - - # 显示前10个公式 - for i, formula in enumerate(sheet_formulas[:10]): - f.write(f"**{formula['cell']}**:\n") - f.write(f"```\n{formula['formula']}\n```\n") - - if formula['references']: - f.write("引用关系:\n") - for ref in formula['references']: - if ref['type'] == 'xlookup_reference': - f.write(f"- XLOOKUP: {ref['file']}!{ref['lookup_range']} -> {ref['file2']}!{ref['return_range']}\n") - elif ref['type'] == 'worksheet_reference': - f.write(f"- 工作表引用: {ref['file']}!{ref['range']}\n") - elif ref['type'] == 'cell_reference': - f.write(f"- 单元格引用: {ref['range']}\n") - f.write("\n") - else: - f.write("无外部引用\n\n") - - if len(sheet_formulas) > 10: - f.write(f"... 还有 {len(sheet_formulas) - 10} 个公式\n\n") - - f.write("---\n\n") - - # 引用关系汇总 - f.write("## 引用关系汇总\n\n") - - # 统计引用类型 - ref_types = {} - for ref in references: - ref_type = ref['type'] - if ref_type not in ref_types: - ref_types[ref_type] = 0 - ref_types[ref_type] += 1 - - f.write("### 引用类型统计\n\n") - for ref_type, count in ref_types.items(): - f.write(f"- {ref_type}: {count} 个\n") - f.write("\n") - - # 外部文件引用 - external_refs = {} - for ref in references: - if ref['type'] == 'xlookup_reference' and ref['file']: - file_name = ref['file'] - if file_name not in external_refs: - external_refs[file_name] = [] - external_refs[file_name].append(ref) - - if external_refs: - f.write("### 外部文件引用\n\n") - for file_name, refs in external_refs.items(): - f.write(f"**{file_name}**: {len(refs)} 个引用\n") - for ref in refs[:5]: # 只显示前5个 - f.write(f"- {ref['file']}!{ref['lookup_range']} -> {ref['file2']}!{ref['return_range']}\n") - if len(refs) > 5: - f.write(f"... 还有 {len(refs) - 5} 个引用\n") - f.write("\n") - - # 公式依赖关系图 - f.write("## 公式依赖关系\n\n") - f.write("### 关键公式分析\n\n") - - # 找出包含XLOOKUP的公式 - xlookup_formulas = [f for f in formulas if 'XLOOKUP' in f['formula']] - - if xlookup_formulas: - f.write("#### XLOOKUP公式分析\n\n") - for formula in xlookup_formulas[:10]: - f.write(f"**{formula['file']}!{formula['sheet']}!{formula['cell']}**:\n") - f.write(f"```\n{formula['formula']}\n```\n") - - # 解析XLOOKUP参数 - xlookup_match = re.search(r"XLOOKUP\(([^,]+),\s*'([^']+)'!([^,]+),\s*'([^']+)'!([^,]+)", formula['formula']) - if xlookup_match: - lookup_value = xlookup_match.group(1).strip() - lookup_file = xlookup_match.group(2) - lookup_range = xlookup_match.group(3) - return_file = xlookup_match.group(4) - return_range = xlookup_match.group(5) - - f.write("参数解析:\n") - f.write(f"- 查找值: {lookup_value}\n") - f.write(f"- 查找范围: {lookup_file}!{lookup_range}\n") - f.write(f"- 返回范围: {return_file}!{return_range}\n") - f.write("\n") - - # 数据流分析 - f.write("### 数据流向分析\n\n") - f.write("基于公式分析,数据流向如下:\n\n") - - # 分析数据源文件 - data_sources = set() - for ref in references: - if ref['type'] == 'xlookup_reference' and ref['file']: - data_sources.add(ref['file']) - - f.write("**数据源文件**:\n") - for source in sorted(data_sources): - f.write(f"- {source}\n") - f.write("\n") - - f.write("**数据流向**:\n") - f.write("1. 基础数据从各数据源文件获取\n") - f.write("2. 通过XLOOKUP/VLOOKUP函数进行数据匹配\n") - f.write("3. 在工资核算表中进行汇总计算\n") - f.write("4. 生成最终的工资计算结果\n\n") - - return report_path - -def main(): - """主函数""" - base_path = "/Users/mr.wang/代码库/绿纤/lvqianmeiye_ERP/参考资料/工资核算 -7月" - - # 要分析的文件列表 - files_to_analyze = [ - "工资(全字段).xlsx", - "①B-a-26考勤汇总表.xlsx", - "②B-a-17每日早报.xlsx", - "③B-a-③呈现-消耗明细表.xlsx", - "④B-a-25社保统计表.xlsx", - "⑤B-a-12奖励统计表.xlsx", - "B-b-③健康师底薪.xlsx", - "B-b-④健康师提成-金三角顾问.xlsx", - "B-b-⑤其他岗位工资.xlsx", - "B-b-⑤当月数据及门店毛利.xlsx" - ] - - all_formulas = [] - all_references = [] - - print("开始分析Excel公式...") - print("=" * 60) - - for filename in files_to_analyze: - file_path = os.path.join(base_path, filename) - if os.path.exists(file_path): - print(f"正在分析: {filename}") - formulas, references = extract_formulas_from_excel(file_path) - all_formulas.extend(formulas) - all_references.extend(references) - print(f" 发现 {len(formulas)} 个公式") - else: - print(f"文件不存在: {filename}") - - # 分析依赖关系 - dependencies = analyze_formula_dependencies(all_formulas) - - # 生成报告 - report_path = generate_formula_report(all_formulas, all_references, dependencies) - - print(f"\n公式分析完成!") - print(f"总公式数量: {len(all_formulas)}") - print(f"总引用数量: {len(all_references)}") - print(f"分析报告: {report_path}") - -if __name__ == "__main__": - main() diff --git a/antis-ncc-admin/src/views/lqKhxx/Form.vue b/antis-ncc-admin/src/views/lqKhxx/Form.vue index c6b674c..75bbd02 100644 --- a/antis-ncc-admin/src/views/lqKhxx/Form.vue +++ b/antis-ncc-admin/src/views/lqKhxx/Form.vue @@ -1,7 +1,9 @@  \ No newline at end of file diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKhxx/LqKhxxCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKhxx/LqKhxxCrInput.cs index ade2334..bd0f156 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKhxx/LqKhxxCrInput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKhxx/LqKhxxCrInput.cs @@ -12,216 +12,125 @@ namespace NCC.Extend.Entitys.Dto.LqKhxx /// 客户编码 /// public string id { get; set; } - + /// /// 客户名称 /// public string khmc { get; set; } - + /// /// 手机号 /// public string sjh { get; set; } - + /// /// 档案号 /// public string dah { get; set; } - + /// /// 性别 /// public string xb { get; set; } - + /// /// 公众号状态 /// public string gzhzt { get; set; } - + /// /// 微信昵称 /// public string wxnc { get; set; } - + /// /// 微信小程序状态 /// public string wxxcxzt { get; set; } - + /// /// 最近登录时间 /// public string zjdlsj { get; set; } - + /// /// 客户目前归属 /// public string khmqgs { get; set; } - + /// /// 归属门店 /// public string gsmd { get; set; } - + /// /// 注册时间 /// public DateTime? zcsj { get; set; } - + /// /// 客户类型 /// public string khlx { get; set; } - + /// /// 客户阶段 /// public string khjd { get; set; } - + /// /// 客户消费 /// - public List khxf { get; set; } - + public string khxf { get; set; } + /// /// 消费频次 /// public string xfpc { get; set; } - + /// /// 推荐人 /// public string tjr { get; set; } - + /// /// 负责顾问 /// public string fzgw { get; set; } - + /// /// 美容师 /// public string mrs { get; set; } - + /// /// 进店渠道 /// public string jdqd { get; set; } - + /// /// 联系地址 /// public string lxdz { get; set; } - + /// /// 备注 /// public string bz { get; set; } - - /// - /// 首次到店 - /// - public DateTime? scdd { get; set; } - - /// - /// 最近到店 - /// - public string zjdd { get; set; } - - /// - /// 未到店天数 - /// - public string wddts { get; set; } - + /// /// 阳历生日 /// public DateTime? yanglsr { get; set; } - + /// /// 阴历生日 /// public DateTime? yinlsr { get; set; } - + /// /// 年龄 /// public string ml { get; set; } - - /// - /// 最近一次服务人员 - /// - public string zjycfwry { get; set; } - - /// - /// 期间到店频次 - /// - public string qjddpc { get; set; } - - /// - /// 期间服务单次 - /// - public string qjfwdc { get; set; } - - /// - /// 期间现金消费 - /// - public string qjxjxf { get; set; } - - /// - /// 期间项目耗卡 - /// - public string qjxmhk { get; set; } - - /// - /// 期间储值消耗 - /// - public string qjczxh { get; set; } - - /// - /// 剩余储值 - /// - public decimal sycz { get; set; } - - /// - /// 剩余积分 - /// - public decimal syjf { get; set; } - - /// - /// 剩余品项金额 - /// - public decimal sypxje { get; set; } - - /// - /// 剩余套餐金额 - /// - public decimal sytcje { get; set; } - - /// - /// 累计项目耗卡金额 - /// - public decimal ljxmhkje { get; set; } - - /// - /// 累计储值消耗 - /// - public decimal ljczxh { get; set; } - - /// - /// 累计消费次数 - /// - public int? ljxfcs { get; set; } - - /// - /// 累计服务次数 - /// - public int? ljfwcs { get; set; } - - /// - /// 累计现金消费金额 - /// - public decimal ljxjxfje { get; set; } - } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKhxx/LqKhxxInfoOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKhxx/LqKhxxInfoOutput.cs index 167adcb..f1c79d9 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKhxx/LqKhxxInfoOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKhxx/LqKhxxInfoOutput.cs @@ -12,216 +12,125 @@ namespace NCC.Extend.Entitys.Dto.LqKhxx /// 客户编码 /// public string id { get; set; } - + /// /// 客户名称 /// public string khmc { get; set; } - + /// /// 手机号 /// public string sjh { get; set; } - + /// /// 档案号 /// public string dah { get; set; } - + /// /// 性别 /// public string xb { get; set; } - + /// /// 公众号状态 /// public string gzhzt { get; set; } - + /// /// 微信昵称 /// public string wxnc { get; set; } - + /// /// 微信小程序状态 /// public string wxxcxzt { get; set; } - + /// /// 最近登录时间 /// public string zjdlsj { get; set; } - + /// /// 客户目前归属 /// public string khmqgs { get; set; } - + /// /// 归属门店 /// public string gsmd { get; set; } - + /// /// 注册时间 /// public DateTime? zcsj { get; set; } - + /// /// 客户类型 /// public string khlx { get; set; } - + /// /// 客户阶段 /// public string khjd { get; set; } - + /// /// 客户消费 /// - public List khxf { get; set; } - + public string khxf { get; set; } + /// /// 消费频次 /// public string xfpc { get; set; } - + /// /// 推荐人 /// public string tjr { get; set; } - + /// /// 负责顾问 /// public string fzgw { get; set; } - + /// /// 美容师 /// public string mrs { get; set; } - + /// /// 进店渠道 /// public string jdqd { get; set; } - + /// /// 联系地址 /// public string lxdz { get; set; } - + /// /// 备注 /// public string bz { get; set; } - - /// - /// 首次到店 - /// - public DateTime? scdd { get; set; } - - /// - /// 最近到店 - /// - public string zjdd { get; set; } - - /// - /// 未到店天数 - /// - public string wddts { get; set; } - + /// /// 阳历生日 /// public DateTime? yanglsr { get; set; } - + /// /// 阴历生日 /// public DateTime? yinlsr { get; set; } - + /// /// 年龄 /// public string ml { get; set; } - - /// - /// 最近一次服务人员 - /// - public string zjycfwry { get; set; } - - /// - /// 期间到店频次 - /// - public string qjddpc { get; set; } - - /// - /// 期间服务单次 - /// - public string qjfwdc { get; set; } - - /// - /// 期间现金消费 - /// - public string qjxjxf { get; set; } - - /// - /// 期间项目耗卡 - /// - public string qjxmhk { get; set; } - - /// - /// 期间储值消耗 - /// - public string qjczxh { get; set; } - - /// - /// 剩余储值 - /// - public decimal sycz { get; set; } - - /// - /// 剩余积分 - /// - public decimal syjf { get; set; } - - /// - /// 剩余品项金额 - /// - public decimal sypxje { get; set; } - - /// - /// 剩余套餐金额 - /// - public decimal sytcje { get; set; } - - /// - /// 累计项目耗卡金额 - /// - public decimal ljxmhkje { get; set; } - - /// - /// 累计储值消耗 - /// - public decimal ljczxh { get; set; } - - /// - /// 累计消费次数 - /// - public int? ljxfcs { get; set; } - - /// - /// 累计服务次数 - /// - public int? ljfwcs { get; set; } - - /// - /// 累计现金消费金额 - /// - public decimal ljxjxfje { get; set; } - } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKhxx/LqKhxxListOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKhxx/LqKhxxListOutput.cs index 055429f..1bb0768 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKhxx/LqKhxxListOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKhxx/LqKhxxListOutput.cs @@ -11,216 +11,125 @@ namespace NCC.Extend.Entitys.Dto.LqKhxx /// 客户编码 /// public string id { get; set; } - + /// /// 客户名称 /// public string khmc { get; set; } - + /// /// 手机号 /// public string sjh { get; set; } - + /// /// 档案号 /// public string dah { get; set; } - + /// /// 性别 /// public string xb { get; set; } - + /// /// 公众号状态 /// public string gzhzt { get; set; } - + /// /// 微信昵称 /// public string wxnc { get; set; } - + /// /// 微信小程序状态 /// public string wxxcxzt { get; set; } - + /// /// 最近登录时间 /// public string zjdlsj { get; set; } - + /// /// 客户目前归属 /// public string khmqgs { get; set; } - + /// /// 归属门店 /// public string gsmd { get; set; } - + /// /// 注册时间 /// public DateTime? zcsj { get; set; } - + /// /// 客户类型 /// public string khlx { get; set; } - + /// /// 客户阶段 /// public string khjd { get; set; } - + /// /// 客户消费 /// public string khxf { get; set; } - + /// /// 消费频次 /// public string xfpc { get; set; } - + /// /// 推荐人 /// public string tjr { get; set; } - + /// /// 负责顾问 /// public string fzgw { get; set; } - + /// /// 美容师 /// public string mrs { get; set; } - + /// /// 进店渠道 /// public string jdqd { get; set; } - + /// /// 联系地址 /// public string lxdz { get; set; } - + /// /// 备注 /// public string bz { get; set; } - - /// - /// 首次到店 - /// - public DateTime? scdd { get; set; } - - /// - /// 最近到店 - /// - public string zjdd { get; set; } - - /// - /// 未到店天数 - /// - public string wddts { get; set; } - + /// /// 阳历生日 /// public DateTime? yanglsr { get; set; } - + /// /// 阴历生日 /// public DateTime? yinlsr { get; set; } - + /// /// 年龄 /// public string ml { get; set; } - - /// - /// 最近一次服务人员 - /// - public string zjycfwry { get; set; } - - /// - /// 期间到店频次 - /// - public string qjddpc { get; set; } - - /// - /// 期间服务单次 - /// - public string qjfwdc { get; set; } - - /// - /// 期间现金消费 - /// - public string qjxjxf { get; set; } - - /// - /// 期间项目耗卡 - /// - public string qjxmhk { get; set; } - - /// - /// 期间储值消耗 - /// - public string qjczxh { get; set; } - - /// - /// 剩余储值 - /// - public decimal sycz { get; set; } - - /// - /// 剩余积分 - /// - public decimal syjf { get; set; } - - /// - /// 剩余品项金额 - /// - public decimal sypxje { get; set; } - - /// - /// 剩余套餐金额 - /// - public decimal sytcje { get; set; } - - /// - /// 累计项目耗卡金额 - /// - public decimal ljxmhkje { get; set; } - - /// - /// 累计储值消耗 - /// - public decimal ljczxh { get; set; } - - /// - /// 累计消费次数 - /// - public int? ljxfcs { get; set; } - - /// - /// 累计服务次数 - /// - public int? ljfwcs { get; set; } - - /// - /// 累计现金消费金额 - /// - public decimal ljxjxfje { get; set; } - } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKhxx/LqKhxxListQueryInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKhxx/LqKhxxListQueryInput.cs index 0abd43b..66b02bb 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKhxx/LqKhxxListQueryInput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKhxx/LqKhxxListQueryInput.cs @@ -1,5 +1,5 @@ -using NCC.Common.Filter; -using System.Collections.Generic; +using System.Collections.Generic; +using NCC.Common.Filter; namespace NCC.Extend.Entitys.Dto.LqKhxx { @@ -14,225 +14,133 @@ namespace NCC.Extend.Entitys.Dto.LqKhxx public string selectKey { get; set; } /// - /// + /// /// public int dataType { get; set; } - /// /// 客户编码 /// public string id { get; set; } - + /// /// 客户名称 /// public string khmc { get; set; } - + /// /// 手机号 /// public string sjh { get; set; } - + /// /// 档案号 /// public string dah { get; set; } - + /// /// 性别 /// public string xb { get; set; } - + /// /// 公众号状态 /// public string gzhzt { get; set; } - + /// /// 微信昵称 /// public string wxnc { get; set; } - + /// /// 微信小程序状态 /// public string wxxcxzt { get; set; } - + /// /// 最近登录时间 /// public string zjdlsj { get; set; } - + /// /// 客户目前归属 /// public string khmqgs { get; set; } - + /// /// 归属门店 /// public string gsmd { get; set; } - + /// /// 注册时间 /// public string zcsj { get; set; } - + /// /// 客户类型 /// public string khlx { get; set; } - + /// /// 客户阶段 /// public string khjd { get; set; } - + /// /// 客户消费 /// public string khxf { get; set; } - + /// /// 消费频次 /// public string xfpc { get; set; } - + /// /// 推荐人 /// public string tjr { get; set; } - + /// /// 负责顾问 /// public string fzgw { get; set; } - + /// /// 美容师 /// public string mrs { get; set; } - + /// /// 进店渠道 /// public string jdqd { get; set; } - + /// /// 联系地址 /// public string lxdz { get; set; } - + /// /// 备注 /// public string bz { get; set; } - - /// - /// 首次到店 - /// - public string scdd { get; set; } - - /// - /// 最近到店 - /// - public string zjdd { get; set; } - - /// - /// 未到店天数 - /// - public string wddts { get; set; } - + /// /// 阳历生日 /// public string yanglsr { get; set; } - + /// /// 阴历生日 /// public string yinlsr { get; set; } - + /// /// 年龄 /// public string ml { get; set; } - - /// - /// 最近一次服务人员 - /// - public string zjycfwry { get; set; } - - /// - /// 期间到店频次 - /// - public string qjddpc { get; set; } - - /// - /// 期间服务单次 - /// - public string qjfwdc { get; set; } - - /// - /// 期间现金消费 - /// - public string qjxjxf { get; set; } - - /// - /// 期间项目耗卡 - /// - public string qjxmhk { get; set; } - - /// - /// 期间储值消耗 - /// - public string qjczxh { get; set; } - - /// - /// 剩余储值 - /// - public string sycz { get; set; } - - /// - /// 剩余积分 - /// - public string syjf { get; set; } - - /// - /// 剩余品项金额 - /// - public string sypxje { get; set; } - - /// - /// 剩余套餐金额 - /// - public string sytcje { get; set; } - - /// - /// 累计项目耗卡金额 - /// - public string ljxmhkje { get; set; } - - /// - /// 累计储值消耗 - /// - public string ljczxh { get; set; } - - /// - /// 累计消费次数 - /// - public string ljxfcs { get; set; } - - /// - /// 累计服务次数 - /// - public string ljfwcs { get; set; } - - /// - /// 累计现金消费金额 - /// - public string ljxjxfje { get; set; } - } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_khxx/LqKhxxEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_khxx/LqKhxxEntity.cs index 378985a..c0f68f9 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_khxx/LqKhxxEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_khxx/LqKhxxEntity.cs @@ -1,6 +1,6 @@ -using NCC.Common.Const; +using System; +using NCC.Common.Const; using SqlSugar; -using System; namespace NCC.Extend.Entitys.lq_khxx { @@ -16,258 +16,149 @@ namespace NCC.Extend.Entitys.lq_khxx /// [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)] public string Id { get; set; } - + /// /// 客户名称 /// - [SugarColumn(ColumnName = "khmc")] + [SugarColumn(ColumnName = "khmc")] public string Khmc { get; set; } - + /// /// 手机号 /// - [SugarColumn(ColumnName = "sjh")] + [SugarColumn(ColumnName = "sjh")] public string Sjh { get; set; } - + /// /// 档案号 /// - [SugarColumn(ColumnName = "dah")] + [SugarColumn(ColumnName = "dah")] public string Dah { get; set; } - + /// /// 性别 /// - [SugarColumn(ColumnName = "xb")] + [SugarColumn(ColumnName = "xb")] public string Xb { get; set; } - + /// /// 公众号状态 /// - [SugarColumn(ColumnName = "gzhzt")] + [SugarColumn(ColumnName = "gzhzt")] public string Gzhzt { get; set; } - + /// /// 微信昵称 /// - [SugarColumn(ColumnName = "wxnc")] + [SugarColumn(ColumnName = "wxnc")] public string Wxnc { get; set; } - + /// /// 微信小程序状态 /// - [SugarColumn(ColumnName = "wxxcxzt")] + [SugarColumn(ColumnName = "wxxcxzt")] public string Wxxcxzt { get; set; } - + /// /// 最近登录时间 /// - [SugarColumn(ColumnName = "zjdlsj")] + [SugarColumn(ColumnName = "zjdlsj")] public string Zjdlsj { get; set; } - + /// /// 客户目前归属 /// - [SugarColumn(ColumnName = "khmqgs")] + [SugarColumn(ColumnName = "khmqgs")] public string Khmqgs { get; set; } - + /// /// 归属门店 /// - [SugarColumn(ColumnName = "gsmd")] + [SugarColumn(ColumnName = "gsmd")] public string Gsmd { get; set; } - + /// /// 注册时间 /// - [SugarColumn(ColumnName = "zcsj")] + [SugarColumn(ColumnName = "zcsj")] public DateTime? Zcsj { get; set; } - + /// /// 客户类型 /// - [SugarColumn(ColumnName = "khlx")] + [SugarColumn(ColumnName = "khlx")] public string Khlx { get; set; } - + /// /// 客户阶段 /// - [SugarColumn(ColumnName = "khjd")] + [SugarColumn(ColumnName = "khjd")] public string Khjd { get; set; } - + /// /// 客户消费 /// - [SugarColumn(ColumnName = "khxf")] + [SugarColumn(ColumnName = "khxf")] public string Khxf { get; set; } - + /// /// 消费频次 /// - [SugarColumn(ColumnName = "xfpc")] + [SugarColumn(ColumnName = "xfpc")] public string Xfpc { get; set; } - + /// /// 推荐人 /// - [SugarColumn(ColumnName = "tjr")] + [SugarColumn(ColumnName = "tjr")] public string Tjr { get; set; } - + /// /// 负责顾问 /// - [SugarColumn(ColumnName = "fzgw")] + [SugarColumn(ColumnName = "fzgw")] public string Fzgw { get; set; } - + /// /// 美容师 /// - [SugarColumn(ColumnName = "mrs")] + [SugarColumn(ColumnName = "mrs")] public string Mrs { get; set; } - + /// /// 进店渠道 /// - [SugarColumn(ColumnName = "jdqd")] + [SugarColumn(ColumnName = "jdqd")] public string Jdqd { get; set; } - + /// /// 联系地址 /// - [SugarColumn(ColumnName = "lxdz")] + [SugarColumn(ColumnName = "lxdz")] public string Lxdz { get; set; } - + /// /// 备注 /// - [SugarColumn(ColumnName = "bz")] + [SugarColumn(ColumnName = "bz")] public string Bz { get; set; } - - /// - /// 首次到店 - /// - [SugarColumn(ColumnName = "scdd")] - public DateTime? Scdd { get; set; } - - /// - /// 最近到店 - /// - [SugarColumn(ColumnName = "zjdd")] - public string Zjdd { get; set; } - - /// - /// 未到店天数 - /// - [SugarColumn(ColumnName = "wddts")] - public string Wddts { get; set; } - + /// /// 阳历生日 /// - [SugarColumn(ColumnName = "yanglsr")] + [SugarColumn(ColumnName = "yanglsr")] public DateTime? Yanglsr { get; set; } - + /// /// 阴历生日 /// - [SugarColumn(ColumnName = "yinlsr")] + [SugarColumn(ColumnName = "yinlsr")] public DateTime? Yinlsr { get; set; } - + /// /// 年龄 /// - [SugarColumn(ColumnName = "ml")] + [SugarColumn(ColumnName = "ml")] public string Ml { get; set; } - - /// - /// 最近一次服务人员 - /// - [SugarColumn(ColumnName = "zjycfwry")] - public string Zjycfwry { get; set; } - - /// - /// 期间到店频次 - /// - [SugarColumn(ColumnName = "qjddpc")] - public string Qjddpc { get; set; } - - /// - /// 期间服务单次 - /// - [SugarColumn(ColumnName = "qjfwdc")] - public string Qjfwdc { get; set; } - - /// - /// 期间现金消费 - /// - [SugarColumn(ColumnName = "qjxjxf")] - public string Qjxjxf { get; set; } - - /// - /// 期间项目耗卡 - /// - [SugarColumn(ColumnName = "qjxmhk")] - public string Qjxmhk { get; set; } - - /// - /// 期间储值消耗 - /// - [SugarColumn(ColumnName = "qjczxh")] - public string Qjczxh { get; set; } - - /// - /// 剩余储值 - /// - [SugarColumn(ColumnName = "sycz")] - public decimal Sycz { get; set; } - - /// - /// 剩余积分 - /// - [SugarColumn(ColumnName = "syjf")] - public decimal Syjf { get; set; } - - /// - /// 剩余品项金额 - /// - [SugarColumn(ColumnName = "sypxje")] - public decimal Sypxje { get; set; } - - /// - /// 剩余套餐金额 - /// - [SugarColumn(ColumnName = "sytcje")] - public decimal Sytcje { get; set; } - - /// - /// 累计项目耗卡金额 - /// - [SugarColumn(ColumnName = "ljxmhkje")] - public decimal Ljxmhkje { get; set; } - - /// - /// 累计储值消耗 - /// - [SugarColumn(ColumnName = "ljczxh")] - public decimal Ljczxh { get; set; } - - /// - /// 累计消费次数 - /// - [SugarColumn(ColumnName = "ljxfcs")] - public int? Ljxfcs { get; set; } - - /// - /// 累计服务次数 - /// - [SugarColumn(ColumnName = "ljfwcs")] - public int? Ljfwcs { get; set; } - - /// - /// 累计现金消费金额 - /// - [SugarColumn(ColumnName = "ljxjxfje")] - public decimal Ljxjxfje { get; set; } - } -} \ No newline at end of file +} diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Mapper/LqKhxxMapper.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Mapper/LqKhxxMapper.cs index 58ca854..e068112 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Mapper/LqKhxxMapper.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Mapper/LqKhxxMapper.cs @@ -1,21 +1,17 @@ -using NCC.Common.Helper; +using System.Collections.Generic; +using Mapster; +using NCC.Common.Helper; using NCC.Extend.Entitys.Dto.LqKhxx; using NCC.Extend.Entitys.lq_khxx; -using Mapster; -using System.Collections.Generic; namespace NCC.Extend.Entitys.Mapper.LqKhxx { - public class Mapper : IRegister - { - public void Register(TypeAdapterConfig config) - { - config.ForType() - .Map(dest => dest.Khxf, src => src.khxf.ToJson()) - ; - config.ForType() - .Map(dest => dest.khxf, src => src.Khxf.ToObject>()) - ; - } - } + public class Mapper : IRegister + { + public void Register(TypeAdapterConfig config) + { + // 由于khxf字段现在是string类型,不需要特殊的映射处理 + // 使用默认的映射即可 + } + } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs index d541651..bceffd5 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs @@ -106,19 +106,13 @@ namespace NCC.Extend.LqKdKdjlb var output = entity.Adapt(); // 2. 查询品项明细列表 - var lqKdPxmxList = await _db.Queryable() - .Where(w => w.Glkdbh == entity.Id) - .ToListAsync(); + var lqKdPxmxList = await _db.Queryable().Where(w => w.Glkdbh == entity.Id).ToListAsync(); // 3. 查询健康师业绩列表 - var lqKdJksyjList = await _db.Queryable() - .Where(w => w.Glkdbh == entity.Id) - .ToListAsync(); + var lqKdJksyjList = await _db.Queryable().Where(w => w.Glkdbh == entity.Id).ToListAsync(); // 4. 查询科技部老师业绩列表 - var lqKdKjbsyjList = await _db.Queryable() - .Where(w => w.Glkdbh == entity.Id) - .ToListAsync(); + var lqKdKjbsyjList = await _db.Queryable().Where(w => w.Glkdbh == entity.Id).ToListAsync(); // 5. 构建品项明细输出,每个品项关联对应的业绩信息 var pxmxOutputList = new List(); @@ -178,40 +172,15 @@ namespace NCC.Extend.LqKdKdjlb public async Task GetList([FromQuery] LqKdKdjlbListQueryInput input) { var sidx = input.sidx == null ? "id" : input.sidx; - List queryKdrq = - input.kdrq != null ? input.kdrq.Split(',').ToObeject>() : null; + List queryKdrq = input.kdrq != null ? input.kdrq.Split(',').ToObeject>() : null; DateTime? startKdrq = queryKdrq != null ? Ext.GetDateTime(queryKdrq.First()) : null; DateTime? endKdrq = queryKdrq != null ? Ext.GetDateTime(queryKdrq.Last()) : null; var data = await _db.Queryable() .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id)) .WhereIF(!string.IsNullOrEmpty(input.djmd), p => p.Djmd.Equals(input.djmd)) .WhereIF(!string.IsNullOrEmpty(input.jsj), p => p.Jsj.Equals(input.jsj)) - .WhereIF( - queryKdrq != null, - p => - p.Kdrq - >= new DateTime( - startKdrq.ToDate().Year, - startKdrq.ToDate().Month, - startKdrq.ToDate().Day, - 0, - 0, - 0 - ) - ) - .WhereIF( - queryKdrq != null, - p => - p.Kdrq - <= new DateTime( - endKdrq.ToDate().Year, - endKdrq.ToDate().Month, - endKdrq.ToDate().Day, - 23, - 59, - 59 - ) - ) + .WhereIF(queryKdrq != null, p => p.Kdrq >= new DateTime(startKdrq.ToDate().Year, startKdrq.ToDate().Month, startKdrq.ToDate().Day, 0, 0, 0)) + .WhereIF(queryKdrq != null, p => p.Kdrq <= new DateTime(endKdrq.ToDate().Year, endKdrq.ToDate().Month, endKdrq.ToDate().Day, 23, 59, 59)) .WhereIF(!string.IsNullOrEmpty(input.gjlx), p => p.Gjlx.Equals(input.gjlx)) .WhereIF(!string.IsNullOrEmpty(input.hgjg), p => p.Hgjg.Equals(input.hgjg)) .WhereIF(!string.IsNullOrEmpty(input.zdyj), p => p.Zdyj.Equals(input.zdyj)) @@ -229,20 +198,11 @@ namespace NCC.Extend.LqKdKdjlb .WhereIF(!string.IsNullOrEmpty(input.bz), p => p.Bz.Contains(input.bz)) .WhereIF(!string.IsNullOrEmpty(input.kdhy), p => p.Kdhy.Equals(input.kdhy)) .WhereIF(!string.IsNullOrEmpty(input.kdhyc), p => p.Kdhyc.Contains(input.kdhyc)) - .WhereIF( - !string.IsNullOrEmpty(input.kdhysjh), - p => p.Kdhysjh.Contains(input.kdhysjh) - ) + .WhereIF(!string.IsNullOrEmpty(input.kdhysjh), p => p.Kdhysjh.Contains(input.kdhysjh)) .WhereIF(!string.IsNullOrEmpty(input.jksyj), p => p.Jksyj.Contains(input.jksyj)) - .WhereIF( - !string.IsNullOrEmpty(input.kjblsyj), - p => p.Kjblsyj.Contains(input.kjblsyj) - ) + .WhereIF(!string.IsNullOrEmpty(input.kjblsyj), p => p.Kjblsyj.Contains(input.kjblsyj)) .WhereIF(!string.IsNullOrEmpty(input.pxxx), p => p.Pxxx.Contains(input.pxxx)) - .WhereIF( - !string.IsNullOrEmpty(input.F_FIleUrl), - p => p.F_FIleUrl.Contains(input.F_FIleUrl) - ) + .WhereIF(!string.IsNullOrEmpty(input.F_FIleUrl), p => p.F_FIleUrl.Contains(input.F_FIleUrl)) .Select(it => new LqKdKdjlbListOutput { id = it.Id, @@ -297,9 +257,7 @@ namespace NCC.Extend.LqKdKdjlb _db.BeginTran(); //新增开单记录表记录 entity.CreateUser = userInfo.userId; - var newEntity = await _db.Insertable(entity) - .IgnoreColumns(ignoreNullColumn: true) - .ExecuteReturnEntityAsync(); + var newEntity = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteReturnEntityAsync(); //循环品相信息 // 收集所有需要插入的实体,然后批量插入 var allPxmxEntities = new List(); @@ -394,18 +352,14 @@ namespace NCC.Extend.LqKdKdjlb var entityInfo = await GetInfo(newEntity.Id); if (entityInfo != null) { - var orderRecordString = _stringGenerator.GenerateOrderRecordString( - entityInfo - ); + var orderRecordString = _stringGenerator.GenerateOrderRecordString(entityInfo); Console.WriteLine("开单记录字符串生成成功:"); Console.WriteLine(orderRecordString); // 发送到企业微信群 try { - var sendResult = await _weChatBotService.SendOrderRecordMessage( - orderRecordString - ); + var sendResult = await _weChatBotService.SendOrderRecordMessage(orderRecordString); if (sendResult) { Console.WriteLine("开单记录已成功发送到企业微信群"); @@ -448,40 +402,15 @@ namespace NCC.Extend.LqKdKdjlb public async Task GetNoPagingList([FromQuery] LqKdKdjlbListQueryInput input) { var sidx = input.sidx == null ? "id" : input.sidx; - List queryKdrq = - input.kdrq != null ? input.kdrq.Split(',').ToObeject>() : null; + List queryKdrq = input.kdrq != null ? input.kdrq.Split(',').ToObeject>() : null; DateTime? startKdrq = queryKdrq != null ? Ext.GetDateTime(queryKdrq.First()) : null; DateTime? endKdrq = queryKdrq != null ? Ext.GetDateTime(queryKdrq.Last()) : null; var data = await _db.Queryable() .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id)) .WhereIF(!string.IsNullOrEmpty(input.djmd), p => p.Djmd.Equals(input.djmd)) .WhereIF(!string.IsNullOrEmpty(input.jsj), p => p.Jsj.Equals(input.jsj)) - .WhereIF( - queryKdrq != null, - p => - p.Kdrq - >= new DateTime( - startKdrq.ToDate().Year, - startKdrq.ToDate().Month, - startKdrq.ToDate().Day, - 0, - 0, - 0 - ) - ) - .WhereIF( - queryKdrq != null, - p => - p.Kdrq - <= new DateTime( - endKdrq.ToDate().Year, - endKdrq.ToDate().Month, - endKdrq.ToDate().Day, - 23, - 59, - 59 - ) - ) + .WhereIF(queryKdrq != null, p => p.Kdrq >= new DateTime(startKdrq.ToDate().Year, startKdrq.ToDate().Month, startKdrq.ToDate().Day, 0, 0, 0)) + .WhereIF(queryKdrq != null, p => p.Kdrq <= new DateTime(endKdrq.ToDate().Year, endKdrq.ToDate().Month, endKdrq.ToDate().Day, 23, 59, 59)) .WhereIF(!string.IsNullOrEmpty(input.gjlx), p => p.Gjlx.Equals(input.gjlx)) .WhereIF(!string.IsNullOrEmpty(input.hgjg), p => p.Hgjg.Equals(input.hgjg)) .WhereIF(!string.IsNullOrEmpty(input.zdyj), p => p.Zdyj.Equals(input.zdyj)) @@ -499,20 +428,11 @@ namespace NCC.Extend.LqKdKdjlb .WhereIF(!string.IsNullOrEmpty(input.bz), p => p.Bz.Contains(input.bz)) .WhereIF(!string.IsNullOrEmpty(input.kdhy), p => p.Kdhy.Equals(input.kdhy)) .WhereIF(!string.IsNullOrEmpty(input.kdhyc), p => p.Kdhyc.Contains(input.kdhyc)) - .WhereIF( - !string.IsNullOrEmpty(input.kdhysjh), - p => p.Kdhysjh.Contains(input.kdhysjh) - ) + .WhereIF(!string.IsNullOrEmpty(input.kdhysjh), p => p.Kdhysjh.Contains(input.kdhysjh)) .WhereIF(!string.IsNullOrEmpty(input.jksyj), p => p.Jksyj.Contains(input.jksyj)) - .WhereIF( - !string.IsNullOrEmpty(input.kjblsyj), - p => p.Kjblsyj.Contains(input.kjblsyj) - ) + .WhereIF(!string.IsNullOrEmpty(input.kjblsyj), p => p.Kjblsyj.Contains(input.kjblsyj)) .WhereIF(!string.IsNullOrEmpty(input.pxxx), p => p.Pxxx.Contains(input.pxxx)) - .WhereIF( - !string.IsNullOrEmpty(input.F_FIleUrl), - p => p.F_FIleUrl.Contains(input.F_FIleUrl) - ) + .WhereIF(!string.IsNullOrEmpty(input.F_FIleUrl), p => p.F_FIleUrl.Contains(input.F_FIleUrl)) .Select(it => new LqKdKdjlbListOutput { id = it.Id, @@ -583,23 +503,13 @@ namespace NCC.Extend.LqKdKdjlb var isExist = paramList.Find(p => p.field == item); if (isExist != null) { - excelconfig.ColumnModel.Add( - new ExcelColumnModel() - { - Column = isExist.field, - ExcelColumn = isExist.value, - } - ); + 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 + "|" + addPath + "|xls"; - var output = new - { - name = excelconfig.FileName, - url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC"), - }; + var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") }; return output; } #endregion @@ -621,24 +531,16 @@ namespace NCC.Extend.LqKdKdjlb //开启事务 _db.BeginTran(); //批量删除开单记录表 - await _db.Deleteable() - .In(d => d.Id, ids) - .ExecuteCommandAsync(); + await _db.Deleteable().In(d => d.Id, ids).ExecuteCommandAsync(); //清空子表数据 - await _db.Deleteable() - .In(u => u.Glkdbh, ids) - .ExecuteCommandAsync(); + await _db.Deleteable().In(u => u.Glkdbh, ids).ExecuteCommandAsync(); //清空子表数据 - await _db.Deleteable() - .In(u => u.Glkdbh, ids) - .ExecuteCommandAsync(); + await _db.Deleteable().In(u => u.Glkdbh, ids).ExecuteCommandAsync(); //清空子表数据 - await _db.Deleteable() - .In(u => u.Glkdbh, ids) - .ExecuteCommandAsync(); + await _db.Deleteable().In(u => u.Glkdbh, ids).ExecuteCommandAsync(); //关闭事务 _db.CommitTran(); } @@ -705,20 +607,12 @@ namespace NCC.Extend.LqKdKdjlb _db.BeginTran(); //更新开单记录表记录 - await _db.Updateable(entity) - .IgnoreColumns(ignoreAllNullColumns: true) - .ExecuteCommandAsync(); + await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); //清空原有数据 - await _db.Deleteable() - .Where(u => u.Glkdbh == id) - .ExecuteCommandAsync(); - await _db.Deleteable() - .Where(u => u.Glkdbh == id) - .ExecuteCommandAsync(); - await _db.Deleteable() - .Where(u => u.Glkdbh == id) - .ExecuteCommandAsync(); + await _db.Deleteable().Where(u => u.Glkdbh == id).ExecuteCommandAsync(); + await _db.Deleteable().Where(u => u.Glkdbh == id).ExecuteCommandAsync(); + await _db.Deleteable().Where(u => u.Glkdbh == id).ExecuteCommandAsync(); // 收集所有需要插入的实体,然后批量插入 var allPxmxEntities = new List(); @@ -835,24 +729,16 @@ namespace NCC.Extend.LqKdKdjlb _db.BeginTran(); //删除开单记录表记录 - await _db.Deleteable() - .Where(d => d.Id == id) - .ExecuteCommandAsync(); + await _db.Deleteable().Where(d => d.Id == id).ExecuteCommandAsync(); //清空子表数据 - await _db.Deleteable() - .Where(u => u.Glkdbh == id) - .ExecuteCommandAsync(); + await _db.Deleteable().Where(u => u.Glkdbh == id).ExecuteCommandAsync(); //清空子表数据 - await _db.Deleteable() - .Where(u => u.Glkdbh == id) - .ExecuteCommandAsync(); + await _db.Deleteable().Where(u => u.Glkdbh == id).ExecuteCommandAsync(); //清空子表数据 - await _db.Deleteable() - .Where(u => u.Glkdbh == id) - .ExecuteCommandAsync(); + await _db.Deleteable().Where(u => u.Glkdbh == id).ExecuteCommandAsync(); //关闭事务 _db.CommitTran(); diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqKhxxService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqKhxxService.cs index 0a05c9b..6c40d4f 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqKhxxService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqKhxxService.cs @@ -1,35 +1,35 @@ -using NCC.Common.Core.Manager; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using NCC.ClayObject; +using NCC.Common.Configuration; +using NCC.Common.Core.Manager; using NCC.Common.Enum; using NCC.Common.Extension; using NCC.Common.Filter; +using NCC.Common.Helper; +using NCC.Common.Model.NPOI; +using NCC.DataEncryption; using NCC.Dependency; using NCC.DynamicApiController; -using NCC.FriendlyException; -using NCC.Extend.Interfaces.LqKhxx; -using Mapster; -using Microsoft.AspNetCore.Mvc; -using SqlSugar; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using NCC.Extend.Entitys.lq_khxx; using NCC.Extend.Entitys.Dto.LqKhxx; +using NCC.Extend.Entitys.Dto.LqXhHyhk; +using NCC.Extend.Entitys.lq_hytk_hytk; +using NCC.Extend.Entitys.lq_hytk_mx; using NCC.Extend.Entitys.lq_kd_kdjlb; using NCC.Extend.Entitys.lq_kd_pxmx; +using NCC.Extend.Entitys.lq_khxx; using NCC.Extend.Entitys.lq_xh_hyhk; using NCC.Extend.Entitys.lq_xh_pxmx; -using NCC.Extend.Entitys.lq_hytk_hytk; -using NCC.Extend.Entitys.lq_hytk_mx; -using Yitter.IdGenerator; -using NCC.Common.Helper; +using NCC.Extend.Interfaces.LqKhxx; +using NCC.FriendlyException; using NCC.JsonSerialization; -using NCC.Common.Model.NPOI; -using NCC.Common.Configuration; -using NCC.DataEncryption; -using NCC.ClayObject; -using Microsoft.Extensions.Logging; -using NCC.Extend.Entitys.Dto.LqXhHyhk; +using SqlSugar; +using Yitter.IdGenerator; namespace NCC.Extend.LqKhxx { @@ -55,7 +55,7 @@ namespace NCC.Extend.LqKhxx _userManager = userManager; _logger = logger; } - + #region 客户资料 /// /// 获取客户资料 @@ -70,7 +70,7 @@ namespace NCC.Extend.LqKhxx return output; } #endregion - + #region 客户资料列表 /// /// 获取客户资料列表 @@ -81,24 +81,6 @@ namespace NCC.Extend.LqKhxx public async Task GetList([FromQuery] LqKhxxListQueryInput input) { var sidx = input.sidx == null ? "id" : input.sidx; - List queryZjdlsj = input.zjdlsj != null ? input.zjdlsj.Split(',').ToObeject>() : null; - DateTime? startZjdlsj = queryZjdlsj != null ? Ext.GetDateTime(queryZjdlsj.First()) : null; - DateTime? endZjdlsj = queryZjdlsj != null ? Ext.GetDateTime(queryZjdlsj.Last()) : null; - List queryZcsj = input.zcsj != null ? input.zcsj.Split(',').ToObeject>() : null; - DateTime? startZcsj = queryZcsj != null ? Ext.GetDateTime(queryZcsj.First()) : null; - DateTime? endZcsj = queryZcsj != null ? Ext.GetDateTime(queryZcsj.Last()) : null; - List queryScdd = input.scdd != null ? input.scdd.Split(',').ToObeject>() : null; - DateTime? startScdd = queryScdd != null ? Ext.GetDateTime(queryScdd.First()) : null; - DateTime? endScdd = queryScdd != null ? Ext.GetDateTime(queryScdd.Last()) : null; - List queryZjdd = input.zjdd != null ? input.zjdd.Split(',').ToObeject>() : null; - DateTime? startZjdd = queryZjdd != null ? Ext.GetDateTime(queryZjdd.First()) : null; - DateTime? endZjdd = queryZjdd != null ? Ext.GetDateTime(queryZjdd.Last()) : null; - List queryYanglsr = input.yanglsr != null ? input.yanglsr.Split(',').ToObeject>() : null; - DateTime? startYanglsr = queryYanglsr != null ? Ext.GetDateTime(queryYanglsr.First()) : null; - DateTime? endYanglsr = queryYanglsr != null ? Ext.GetDateTime(queryYanglsr.Last()) : null; - List queryYinlsr = input.yinlsr != null ? input.yinlsr.Split(',').ToObeject>() : null; - DateTime? startYinlsr = queryYinlsr != null ? Ext.GetDateTime(queryYinlsr.First()) : null; - DateTime? endYinlsr = queryYinlsr != null ? Ext.GetDateTime(queryYinlsr.Last()) : null; var data = await _db.Queryable() .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id)) .WhereIF(!string.IsNullOrEmpty(input.khmc), p => p.Khmc.Contains(input.khmc)) @@ -108,12 +90,8 @@ namespace NCC.Extend.LqKhxx .WhereIF(!string.IsNullOrEmpty(input.gzhzt), p => p.Gzhzt.Equals(input.gzhzt)) .WhereIF(!string.IsNullOrEmpty(input.wxnc), p => p.Wxnc.Contains(input.wxnc)) .WhereIF(!string.IsNullOrEmpty(input.wxxcxzt), p => p.Wxxcxzt.Equals(input.wxxcxzt)) - // .WhereIF(queryZjdlsj != null, p => p.Zjdlsj >= new DateTime(startZjdlsj.ToDate().Year, startZjdlsj.ToDate().Month, startZjdlsj.ToDate().Day, 0, 0, 0)) - // .WhereIF(queryZjdlsj != null, p => p.Zjdlsj <= new DateTime(endZjdlsj.ToDate().Year, endZjdlsj.ToDate().Month, endZjdlsj.ToDate().Day, 23, 59, 59)) .WhereIF(!string.IsNullOrEmpty(input.khmqgs), p => p.Khmqgs.Equals(input.khmqgs)) .WhereIF(!string.IsNullOrEmpty(input.gsmd), p => p.Gsmd.Contains(input.gsmd)) - .WhereIF(queryZcsj != null, p => p.Zcsj >= new DateTime(startZcsj.ToDate().Year, startZcsj.ToDate().Month, startZcsj.ToDate().Day, 0, 0, 0)) - .WhereIF(queryZcsj != null, p => p.Zcsj <= new DateTime(endZcsj.ToDate().Year, endZcsj.ToDate().Month, endZcsj.ToDate().Day, 23, 59, 59)) .WhereIF(!string.IsNullOrEmpty(input.khlx), p => p.Khlx.Equals(input.khlx)) .WhereIF(!string.IsNullOrEmpty(input.khjd), p => p.Khjd.Equals(input.khjd)) .WhereIF(!string.IsNullOrEmpty(input.khxf), p => p.Khxf.Contains(input.khxf)) @@ -124,31 +102,7 @@ namespace NCC.Extend.LqKhxx .WhereIF(!string.IsNullOrEmpty(input.jdqd), p => p.Jdqd.Contains(input.jdqd)) .WhereIF(!string.IsNullOrEmpty(input.lxdz), p => p.Lxdz.Contains(input.lxdz)) .WhereIF(!string.IsNullOrEmpty(input.bz), p => p.Bz.Contains(input.bz)) - .WhereIF(queryScdd != null, p => p.Scdd >= new DateTime(startScdd.ToDate().Year, startScdd.ToDate().Month, startScdd.ToDate().Day, 0, 0, 0)) - .WhereIF(queryScdd != null, p => p.Scdd <= new DateTime(endScdd.ToDate().Year, endScdd.ToDate().Month, endScdd.ToDate().Day, 23, 59, 59)) - // .WhereIF(queryZjdd != null, p => p.Zjdd >= new DateTime(startZjdd.ToDate().Year, startZjdd.ToDate().Month, startZjdd.ToDate().Day, 0, 0, 0)) - // .WhereIF(queryZjdd != null, p => p.Zjdd <= new DateTime(endZjdd.ToDate().Year, endZjdd.ToDate().Month, endZjdd.ToDate().Day, 23, 59, 59)) - .WhereIF(!string.IsNullOrEmpty(input.wddts), p => p.Wddts.Contains(input.wddts)) - .WhereIF(queryYanglsr != null, p => p.Yanglsr >= new DateTime(startYanglsr.ToDate().Year, startYanglsr.ToDate().Month, startYanglsr.ToDate().Day, 0, 0, 0)) - .WhereIF(queryYanglsr != null, p => p.Yanglsr <= new DateTime(endYanglsr.ToDate().Year, endYanglsr.ToDate().Month, endYanglsr.ToDate().Day, 23, 59, 59)) - .WhereIF(queryYinlsr != null, p => p.Yinlsr >= new DateTime(startYinlsr.ToDate().Year, startYinlsr.ToDate().Month, startYinlsr.ToDate().Day, 0, 0, 0)) - .WhereIF(queryYinlsr != null, p => p.Yinlsr <= new DateTime(endYinlsr.ToDate().Year, endYinlsr.ToDate().Month, endYinlsr.ToDate().Day, 23, 59, 59)) .WhereIF(!string.IsNullOrEmpty(input.ml), p => p.Ml.Contains(input.ml)) - .WhereIF(!string.IsNullOrEmpty(input.zjycfwry), p => p.Zjycfwry.Contains(input.zjycfwry)) - .WhereIF(!string.IsNullOrEmpty(input.qjddpc), p => p.Qjddpc.Contains(input.qjddpc)) - .WhereIF(!string.IsNullOrEmpty(input.qjfwdc), p => p.Qjfwdc.Contains(input.qjfwdc)) - .WhereIF(!string.IsNullOrEmpty(input.qjxjxf), p => p.Qjxjxf.Contains(input.qjxjxf)) - .WhereIF(!string.IsNullOrEmpty(input.qjxmhk), p => p.Qjxmhk.Contains(input.qjxmhk)) - .WhereIF(!string.IsNullOrEmpty(input.qjczxh), p => p.Qjczxh.Contains(input.qjczxh)) - .WhereIF(!string.IsNullOrEmpty(input.sycz), p => p.Sycz.Equals(input.sycz)) - .WhereIF(!string.IsNullOrEmpty(input.syjf), p => p.Syjf.Equals(input.syjf)) - .WhereIF(!string.IsNullOrEmpty(input.sypxje), p => p.Sypxje.Equals(input.sypxje)) - .WhereIF(!string.IsNullOrEmpty(input.sytcje), p => p.Sytcje.Equals(input.sytcje)) - .WhereIF(!string.IsNullOrEmpty(input.ljxmhkje), p => p.Ljxmhkje.Equals(input.ljxmhkje)) - .WhereIF(!string.IsNullOrEmpty(input.ljczxh), p => p.Ljczxh.Equals(input.ljczxh)) - .WhereIF(!string.IsNullOrEmpty(input.ljxfcs), p => p.Ljxfcs.Equals(input.ljxfcs)) - .WhereIF(!string.IsNullOrEmpty(input.ljfwcs), p => p.Ljfwcs.Equals(input.ljfwcs)) - .WhereIF(!string.IsNullOrEmpty(input.ljxjxfje), p => p.Ljxjxfje.Equals(input.ljxjxfje)) .Select(it => new LqKhxxListOutput { id = it.Id, @@ -173,32 +127,17 @@ namespace NCC.Extend.LqKhxx jdqd = it.Jdqd, lxdz = it.Lxdz, bz = it.Bz, - scdd = it.Scdd, - zjdd = it.Zjdd, - wddts = it.Wddts, yanglsr = it.Yanglsr, yinlsr = it.Yinlsr, ml = it.Ml, - zjycfwry = it.Zjycfwry, - qjddpc = it.Qjddpc, - qjfwdc = it.Qjfwdc, - qjxjxf = it.Qjxjxf, - qjxmhk = it.Qjxmhk, - qjczxh = it.Qjczxh, - sycz = it.Sycz, - syjf = it.Syjf, - sypxje = it.Sypxje, - sytcje = it.Sytcje, - ljxmhkje = it.Ljxmhkje, - ljczxh = it.Ljczxh, - ljxfcs = it.Ljxfcs, - ljfwcs = it.Ljfwcs, - ljxjxfje = it.Ljxjxfje, - }).MergeTable().OrderBy(sidx + " " + input.sort).ToPagedListAsync(input.currentPage, input.pageSize); + }) + .MergeTable() + .OrderBy(sidx + " " + input.sort) + .ToPagedListAsync(input.currentPage, input.pageSize); return PageResult.SqlSugarPageResult(data); } #endregion - + #region 新建客户资料 /// /// 新建客户资料 @@ -212,10 +151,11 @@ namespace NCC.Extend.LqKhxx var entity = input.Adapt(); entity.Id = YitIdHelper.NextId().ToString(); var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync(); - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1000); + if (!(isOk > 0)) + throw NCCException.Oh(ErrorCode.COM1000); } #endregion - + #region 获取客户资料无分页列表 /// /// 获取客户资料无分页列表 @@ -232,12 +172,6 @@ namespace NCC.Extend.LqKhxx List queryZcsj = input.zcsj != null ? input.zcsj.Split(',').ToObeject>() : null; DateTime? startZcsj = queryZcsj != null ? Ext.GetDateTime(queryZcsj.First()) : null; DateTime? endZcsj = queryZcsj != null ? Ext.GetDateTime(queryZcsj.Last()) : null; - List queryScdd = input.scdd != null ? input.scdd.Split(',').ToObeject>() : null; - DateTime? startScdd = queryScdd != null ? Ext.GetDateTime(queryScdd.First()) : null; - DateTime? endScdd = queryScdd != null ? Ext.GetDateTime(queryScdd.Last()) : null; - List queryZjdd = input.zjdd != null ? input.zjdd.Split(',').ToObeject>() : null; - DateTime? startZjdd = queryZjdd != null ? Ext.GetDateTime(queryZjdd.First()) : null; - DateTime? endZjdd = queryZjdd != null ? Ext.GetDateTime(queryZjdd.Last()) : null; List queryYanglsr = input.yanglsr != null ? input.yanglsr.Split(',').ToObeject>() : null; DateTime? startYanglsr = queryYanglsr != null ? Ext.GetDateTime(queryYanglsr.First()) : null; DateTime? endYanglsr = queryYanglsr != null ? Ext.GetDateTime(queryYanglsr.Last()) : null; @@ -269,31 +203,11 @@ namespace NCC.Extend.LqKhxx .WhereIF(!string.IsNullOrEmpty(input.jdqd), p => p.Jdqd.Contains(input.jdqd)) .WhereIF(!string.IsNullOrEmpty(input.lxdz), p => p.Lxdz.Contains(input.lxdz)) .WhereIF(!string.IsNullOrEmpty(input.bz), p => p.Bz.Contains(input.bz)) - .WhereIF(queryScdd != null, p => p.Scdd >= new DateTime(startScdd.ToDate().Year, startScdd.ToDate().Month, startScdd.ToDate().Day, 0, 0, 0)) - // .WhereIF(queryScdd != null, p => p.Scdd <= new DateTime(endScdd.ToDate().Year, endScdd.ToDate().Month, endScdd.ToDate().Day, 23, 59, 59)) - // .WhereIF(queryZjdd != null, p => p.Zjdd >= new DateTime(startZjdd.ToDate().Year, startZjdd.ToDate().Month, startZjdd.ToDate().Day, 0, 0, 0)) - // .WhereIF(queryZjdd != null, p => p.Zjdd <= new DateTime(endZjdd.ToDate().Year, endZjdd.ToDate().Month, endZjdd.ToDate().Day, 23, 59, 59)) - .WhereIF(!string.IsNullOrEmpty(input.wddts), p => p.Wddts.Contains(input.wddts)) .WhereIF(queryYanglsr != null, p => p.Yanglsr >= new DateTime(startYanglsr.ToDate().Year, startYanglsr.ToDate().Month, startYanglsr.ToDate().Day, 0, 0, 0)) .WhereIF(queryYanglsr != null, p => p.Yanglsr <= new DateTime(endYanglsr.ToDate().Year, endYanglsr.ToDate().Month, endYanglsr.ToDate().Day, 23, 59, 59)) .WhereIF(queryYinlsr != null, p => p.Yinlsr >= new DateTime(startYinlsr.ToDate().Year, startYinlsr.ToDate().Month, startYinlsr.ToDate().Day, 0, 0, 0)) .WhereIF(queryYinlsr != null, p => p.Yinlsr <= new DateTime(endYinlsr.ToDate().Year, endYinlsr.ToDate().Month, endYinlsr.ToDate().Day, 23, 59, 59)) .WhereIF(!string.IsNullOrEmpty(input.ml), p => p.Ml.Contains(input.ml)) - .WhereIF(!string.IsNullOrEmpty(input.zjycfwry), p => p.Zjycfwry.Contains(input.zjycfwry)) - .WhereIF(!string.IsNullOrEmpty(input.qjddpc), p => p.Qjddpc.Contains(input.qjddpc)) - .WhereIF(!string.IsNullOrEmpty(input.qjfwdc), p => p.Qjfwdc.Contains(input.qjfwdc)) - .WhereIF(!string.IsNullOrEmpty(input.qjxjxf), p => p.Qjxjxf.Contains(input.qjxjxf)) - .WhereIF(!string.IsNullOrEmpty(input.qjxmhk), p => p.Qjxmhk.Contains(input.qjxmhk)) - .WhereIF(!string.IsNullOrEmpty(input.qjczxh), p => p.Qjczxh.Contains(input.qjczxh)) - .WhereIF(!string.IsNullOrEmpty(input.sycz), p => p.Sycz.Equals(input.sycz)) - .WhereIF(!string.IsNullOrEmpty(input.syjf), p => p.Syjf.Equals(input.syjf)) - .WhereIF(!string.IsNullOrEmpty(input.sypxje), p => p.Sypxje.Equals(input.sypxje)) - .WhereIF(!string.IsNullOrEmpty(input.sytcje), p => p.Sytcje.Equals(input.sytcje)) - .WhereIF(!string.IsNullOrEmpty(input.ljxmhkje), p => p.Ljxmhkje.Equals(input.ljxmhkje)) - .WhereIF(!string.IsNullOrEmpty(input.ljczxh), p => p.Ljczxh.Equals(input.ljczxh)) - .WhereIF(!string.IsNullOrEmpty(input.ljxfcs), p => p.Ljxfcs.Equals(input.ljxfcs)) - .WhereIF(!string.IsNullOrEmpty(input.ljfwcs), p => p.Ljfwcs.Equals(input.ljfwcs)) - .WhereIF(!string.IsNullOrEmpty(input.ljxjxfje), p => p.Ljxjxfje.Equals(input.ljxjxfje)) .Select(it => new LqKhxxListOutput { id = it.Id, @@ -318,33 +232,18 @@ namespace NCC.Extend.LqKhxx jdqd = it.Jdqd, lxdz = it.Lxdz, bz = it.Bz, - scdd = it.Scdd, - zjdd = it.Zjdd, - wddts = it.Wddts, yanglsr = it.Yanglsr, yinlsr = it.Yinlsr, ml = it.Ml, - zjycfwry = it.Zjycfwry, - qjddpc = it.Qjddpc, - qjfwdc = it.Qjfwdc, - qjxjxf = it.Qjxjxf, - qjxmhk = it.Qjxmhk, - qjczxh = it.Qjczxh, - sycz = it.Sycz, - syjf = it.Syjf, - sypxje = it.Sypxje, - sytcje = it.Sytcje, - ljxmhkje = it.Ljxmhkje, - ljczxh = it.Ljczxh, - ljxfcs = it.Ljxfcs, - ljfwcs = it.Ljfwcs, - ljxjxfje = it.Ljxjxfje, - }).MergeTable().OrderBy(sidx + " " + input.sort).ToListAsync(); + }) + .MergeTable() + .OrderBy(sidx + " " + input.sort) + .ToListAsync(); return data; } #endregion - - #region 导出客户资料 + + #region 导出客户资料 /// /// 导出客户资料 /// @@ -364,7 +263,8 @@ namespace NCC.Extend.LqKhxx { exportData = await this.GetNoPagingList(input); } - List paramList = "[{\"value\":\"客户编码\",\"field\":\"id\"},{\"value\":\"客户名称\",\"field\":\"khmc\"},{\"value\":\"手机号\",\"field\":\"sjh\"},{\"value\":\"档案号\",\"field\":\"dah\"},{\"value\":\"性别\",\"field\":\"xb\"},{\"value\":\"公众号状态\",\"field\":\"gzhzt\"},{\"value\":\"微信昵称\",\"field\":\"wxnc\"},{\"value\":\"小程序状态\",\"field\":\"wxxcxzt\"},{\"value\":\"最近登录时间\",\"field\":\"zjdlsj\"},{\"value\":\"客户目前归属\",\"field\":\"khmqgs\"},{\"value\":\"归属门店\",\"field\":\"gsmd\"},{\"value\":\"注册时间\",\"field\":\"zcsj\"},{\"value\":\"客户类型\",\"field\":\"khlx\"},{\"value\":\"客户阶段\",\"field\":\"khjd\"},{\"value\":\"客户消费\",\"field\":\"khxf\"},{\"value\":\"消费频次\",\"field\":\"xfpc\"},{\"value\":\"推荐人\",\"field\":\"tjr\"},{\"value\":\"负责顾问\",\"field\":\"fzgw\"},{\"value\":\"美容师\",\"field\":\"mrs\"},{\"value\":\"进店渠道\",\"field\":\"jdqd\"},{\"value\":\"联系地址\",\"field\":\"lxdz\"},{\"value\":\"备注\",\"field\":\"bz\"},{\"value\":\"首次到店\",\"field\":\"scdd\"},{\"value\":\"最近到店\",\"field\":\"zjdd\"},{\"value\":\"未到店天数\",\"field\":\"wddts\"},{\"value\":\"阳历生日\",\"field\":\"yanglsr\"},{\"value\":\"阴历生日\",\"field\":\"yinlsr\"},{\"value\":\"年龄\",\"field\":\"ml\"},{\"value\":\"最近服务人员\",\"field\":\"zjycfwry\"},{\"value\":\"期间到店频次\",\"field\":\"qjddpc\"},{\"value\":\"期间服务单次\",\"field\":\"qjfwdc\"},{\"value\":\"期间现金消费\",\"field\":\"qjxjxf\"},{\"value\":\"期间项目耗卡\",\"field\":\"qjxmhk\"},{\"value\":\"期间储值消耗\",\"field\":\"qjczxh\"},{\"value\":\"剩余储值\",\"field\":\"sycz\"},{\"value\":\"剩余积分\",\"field\":\"syjf\"},{\"value\":\"剩余品项金额\",\"field\":\"sypxje\"},{\"value\":\"剩余套餐金额\",\"field\":\"sytcje\"},{\"value\":\"项目耗卡金额\",\"field\":\"ljxmhkje\"},{\"value\":\"累计储值消耗\",\"field\":\"ljczxh\"},{\"value\":\"累计消费次数\",\"field\":\"ljxfcs\"},{\"value\":\"累计服务次数\",\"field\":\"ljfwcs\"},{\"value\":\"现金消费金额\",\"field\":\"ljxjxfje\"},]".ToList(); + List paramList = + "[{\"value\":\"客户编码\",\"field\":\"id\"},{\"value\":\"客户名称\",\"field\":\"khmc\"},{\"value\":\"手机号\",\"field\":\"sjh\"},{\"value\":\"档案号\",\"field\":\"dah\"},{\"value\":\"性别\",\"field\":\"xb\"},{\"value\":\"公众号状态\",\"field\":\"gzhzt\"},{\"value\":\"微信昵称\",\"field\":\"wxnc\"},{\"value\":\"小程序状态\",\"field\":\"wxxcxzt\"},{\"value\":\"最近登录时间\",\"field\":\"zjdlsj\"},{\"value\":\"客户目前归属\",\"field\":\"khmqgs\"},{\"value\":\"归属门店\",\"field\":\"gsmd\"},{\"value\":\"注册时间\",\"field\":\"zcsj\"},{\"value\":\"客户类型\",\"field\":\"khlx\"},{\"value\":\"客户阶段\",\"field\":\"khjd\"},{\"value\":\"客户消费\",\"field\":\"khxf\"},{\"value\":\"消费频次\",\"field\":\"xfpc\"},{\"value\":\"推荐人\",\"field\":\"tjr\"},{\"value\":\"负责顾问\",\"field\":\"fzgw\"},{\"value\":\"美容师\",\"field\":\"mrs\"},{\"value\":\"进店渠道\",\"field\":\"jdqd\"},{\"value\":\"联系地址\",\"field\":\"lxdz\"},{\"value\":\"备注\",\"field\":\"bz\"},{\"value\":\"阳历生日\",\"field\":\"yanglsr\"},{\"value\":\"阴历生日\",\"field\":\"yinlsr\"},{\"value\":\"年龄\",\"field\":\"ml\"},]".ToList(); ExcelConfig excelconfig = new ExcelConfig(); excelconfig.FileName = "客户资料.xls"; excelconfig.HeadFont = "微软雅黑"; @@ -383,15 +283,11 @@ namespace NCC.Extend.LqKhxx 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") - }; + var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") }; return output; } #endregion - + #region 批量删除客户资料 /// /// 批量删除客户资料 @@ -422,7 +318,7 @@ namespace NCC.Extend.LqKhxx } } #endregion - + #region 更新客户资料 /// /// 更新客户资料 @@ -435,10 +331,11 @@ namespace NCC.Extend.LqKhxx { var entity = input.Adapt(); var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001); + if (!(isOk > 0)) + throw NCCException.Oh(ErrorCode.COM1001); } #endregion - + #region 删除客户资料 /// /// 删除客户资料 @@ -450,7 +347,8 @@ namespace NCC.Extend.LqKhxx var entity = await _db.Queryable().FirstAsync(p => p.Id == id); _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005); var isOk = await _db.Deleteable().Where(d => d.Id == id).ExecuteCommandAsync(); - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1002); + if (!(isOk > 0)) + throw NCCException.Oh(ErrorCode.COM1002); } #endregion @@ -462,15 +360,15 @@ namespace NCC.Extend.LqKhxx /// 根据会员ID查询该会员的剩余品项信息,包括已购买但未消费完的品项详情 /// 支持按来源类型(F_SourceType)区分相同品项的不同来源,确保数据准确分组 /// 计算逻辑:剩余数量 = 购买数量 - 消费数量 - 退卡数量 - /// + /// /// 示例请求: /// ```json /// GET /api/Extend/LqKhxx/GetMemberRemainingItems?memberId=GK2025022100004 /// ``` - /// + /// /// 参数说明: /// - memberId: 会员ID,必填参数 - /// + /// /// 返回数据结构: /// - MemberId: 会员ID /// - MemberName: 会员姓名 @@ -483,7 +381,7 @@ namespace NCC.Extend.LqKhxx /// - ConsumedCount: 已消费数量 /// - RefundedCount: 已退卡数量 /// - RemainingCount: 剩余数量 - /// + /// /// 特殊说明: /// - 相同品项但不同SourceType的记录会分开显示 /// - 耗卡和退卡统计会按品项ID和SourceType精确匹配 @@ -508,9 +406,7 @@ namespace NCC.Extend.LqKhxx _logger.LogInformation("开始查询会员剩余品项,会员ID:{MemberId}", memberId); // 1. 查询会员基本信息 - var memberInfo = await _db.Queryable() - .Where(x => x.Id == memberId) - .FirstAsync(); + var memberInfo = await _db.Queryable().Where(x => x.Id == memberId).FirstAsync(); if (memberInfo == null) { @@ -522,10 +418,7 @@ namespace NCC.Extend.LqKhxx // 2. 查询开单记录ID列表 _logger.LogInformation("开始查询开单记录ID列表"); - var orderIds = await _db.Queryable() - .Where(kd => kd.Kdhy == memberId) - .Select(kd => kd.Id) - .ToListAsync(); + var orderIds = await _db.Queryable().Where(kd => kd.Kdhy == memberId).Select(kd => kd.Id).ToListAsync(); _logger.LogInformation("开单记录ID列表查询成功,数量:{Count}", orderIds.Count); @@ -536,20 +429,26 @@ namespace NCC.Extend.LqKhxx { var tempPurchasedItems = await _db.Queryable() .Where(px => orderIds.Contains(px.Glkdbh)) - .GroupBy(px => new { px.Px, px.Pxmc, px.Pxjg, px.SourceType }) + .GroupBy(px => new + { + px.Px, + px.Pxmc, + px.Pxjg, + px.SourceType, + }) .Select(px => new { ItemId = px.Px, ItemName = px.Pxmc, ItemPrice = px.Pxjg, SourceType = SqlFunc.IsNull(px.SourceType, "未知"), - TotalPurchased = SqlFunc.AggregateSum(SqlFunc.ToDecimal(px.ProjectNumber)) + TotalPurchased = SqlFunc.AggregateSum(SqlFunc.ToDecimal(px.ProjectNumber)), }) .ToListAsync(); purchasedItems = tempPurchasedItems.Cast().ToList(); _logger.LogInformation("开单品项统计查询成功,数量:{Count}", purchasedItems.Count); - + // 调试:输出前几条记录查看SourceType字段 foreach (var item in purchasedItems.Take(3)) { @@ -559,10 +458,7 @@ namespace NCC.Extend.LqKhxx // 4. 查询耗卡记录ID列表 _logger.LogInformation("开始查询耗卡记录ID列表"); - var consumeIds = await _db.Queryable() - .Where(hk => hk.Hy == memberId) - .Select(hk => hk.Id) - .ToListAsync(); + var consumeIds = await _db.Queryable().Where(hk => hk.Hy == memberId).Select(hk => hk.Id).ToListAsync(); _logger.LogInformation("耗卡记录ID列表查询成功,数量:{Count}", consumeIds.Count); @@ -578,7 +474,7 @@ namespace NCC.Extend.LqKhxx { ItemId = px.Px, SourceType = SqlFunc.IsNull(px.SourceType, "未知"), - ConsumedCount = SqlFunc.AggregateSum(SqlFunc.ToDecimal(px.ProjectNumber)) + ConsumedCount = SqlFunc.AggregateSum(SqlFunc.ToDecimal(px.ProjectNumber)), }) .ToListAsync(); @@ -588,10 +484,7 @@ namespace NCC.Extend.LqKhxx // 6. 查询退卡记录ID列表 _logger.LogInformation("开始查询退卡记录ID列表"); - var refundIds = await _db.Queryable() - .Where(tk => tk.Hy == memberId && tk.F_DeleteMark != 1) - .Select(tk => tk.Id) - .ToListAsync(); + var refundIds = await _db.Queryable().Where(tk => tk.Hy == memberId && tk.F_DeleteMark != 1).Select(tk => tk.Id).ToListAsync(); _logger.LogInformation("退卡记录ID列表查询成功,数量:{Count}", refundIds.Count); @@ -607,7 +500,7 @@ namespace NCC.Extend.LqKhxx { ItemId = px.Px, SourceType = SqlFunc.IsNull(px.F_SourceType, "未知"), - RefundedCount = SqlFunc.AggregateSum(SqlFunc.ToDecimal(px.F_ProjectNumber)) + RefundedCount = SqlFunc.AggregateSum(SqlFunc.ToDecimal(px.F_ProjectNumber)), }) .ToListAsync(); @@ -623,15 +516,11 @@ namespace NCC.Extend.LqKhxx foreach (var purchased in purchasedItems) { // 按品项ID和来源类型匹配耗卡记录 - var consumed = consumedItems.FirstOrDefault(x => - x.ItemId == purchased.ItemId && - x.SourceType == purchased.SourceType); + var consumed = consumedItems.FirstOrDefault(x => x.ItemId == purchased.ItemId && x.SourceType == purchased.SourceType); var consumedCount = consumed?.ConsumedCount ?? 0; // 按品项ID和来源类型匹配退卡记录 - var refunded = refundedItems.FirstOrDefault(x => - x.ItemId == purchased.ItemId && - x.SourceType == purchased.SourceType); + var refunded = refundedItems.FirstOrDefault(x => x.ItemId == purchased.ItemId && x.SourceType == purchased.SourceType); var refundedCount = refunded?.RefundedCount ?? 0; // 计算剩余数量:购买数量 - 消费数量 - 退卡数量 @@ -639,17 +528,19 @@ namespace NCC.Extend.LqKhxx if (remainingCount > 0) { - remainingItems.Add(new RemainingItemInfo - { - ItemId = purchased.ItemId, - ItemName = purchased.ItemName, - ItemPrice = purchased.ItemPrice, - SourceType = purchased.SourceType?.ToString() ?? "未知", - TotalPurchased = purchased.TotalPurchased, - ConsumedCount = consumedCount, - RefundedCount = refundedCount, - RemainingCount = remainingCount - }); + remainingItems.Add( + new RemainingItemInfo + { + ItemId = purchased.ItemId, + ItemName = purchased.ItemName, + ItemPrice = purchased.ItemPrice, + SourceType = purchased.SourceType?.ToString() ?? "未知", + TotalPurchased = purchased.TotalPurchased, + ConsumedCount = consumedCount, + RefundedCount = refundedCount, + RemainingCount = remainingCount, + } + ); } } @@ -662,7 +553,7 @@ namespace NCC.Extend.LqKhxx { MemberId = memberId, MemberName = memberInfo.Khmc, - RemainingItems = remainingItems + RemainingItems = remainingItems, }; } catch (Exception ex) diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs index 32f64c7..677b6f4 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs @@ -62,6 +62,7 @@ namespace NCC.Extend.LqTkjlb return output; } #endregion + #region 获取拓客管理列表 /// @@ -111,6 +112,7 @@ namespace NCC.Extend.LqTkjlb return PageResult.SqlSugarPageResult(data); } #endregion + #region 新建拓客管理 /// /// 新建拓客管理 @@ -136,6 +138,7 @@ namespace NCC.Extend.LqTkjlb throw NCCException.Oh(ErrorCode.COM1000); } #endregion + #region 获取拓客管理无分页列表 /// /// 获取拓客管理无分页列表 @@ -182,6 +185,7 @@ namespace NCC.Extend.LqTkjlb return data; } #endregion + #region 导出拓客管理 /// /// 导出拓客管理 @@ -226,6 +230,7 @@ namespace NCC.Extend.LqTkjlb return output; } #endregion + #region 批量删除拓客管理 /// @@ -257,6 +262,7 @@ namespace NCC.Extend.LqTkjlb } } #endregion + #region 更新拓客管理 /// /// 更新拓客管理 @@ -273,6 +279,7 @@ namespace NCC.Extend.LqTkjlb throw NCCException.Oh(ErrorCode.COM1001); } #endregion + #region 删除拓客管理 /// /// 删除拓客管理 @@ -288,6 +295,7 @@ namespace NCC.Extend.LqTkjlb throw NCCException.Oh(ErrorCode.COM1002); } #endregion + #region 获取拓客排行榜 /// /// 获取拓客排行榜 @@ -308,6 +316,7 @@ namespace NCC.Extend.LqTkjlb return sortedData; } #endregion + #region 获取战队人员详细报表 /// /// 获取战队人员详细报表