万象EXCEL开发(十)excel 高级混合查询 ——东方仙盟金丹期 - 教程

news/2025/10/21 10:56:14/文章来源:https://www.cnblogs.com/lxjshuju/p/19154496

核心调整:把 “模板” 从 “固定统计结果” 改为 “可配置的字段 / 逻辑组件”,开发人员能通过后台配置基础规则,普通用户能自由组合这些组件做完统计,既保留 Excel 的灵活性,又避免写代码。

一、核心设计:分层配置体系(开发设置层 + 用户操作层)

1. 制作调整层(后台可视化设置,无需写代码)

开发人员经过后台配置 “统计所需的基础元素”,为普通用户提供可操控的 “积木块”,配置项包括:

(1)字段配置(映射数据库字段,用户看不到真实 param)

配置项说明示例配置
字段标识后台用的唯一 ID(如goods_namegoods_name
前端显示名普通用户看到的名称(如 “商品名称”)“商品名称”
关联表 SN该字段所属的表(可多选,适配跨表字段)信息表 SN、进货表 SN
数据库真实字段对应param1-param30中的某一个信息表.param2、进货表.param2
字段类型文本 / 数字 / 日期(用于前端适配输入框 / 选择器)文本
是否可统计勾选后该字段可用于 “求和 / 平均值” 等计算(仅数字类型可勾)否(商品名称不可统计)

(2)统计规则配置(定义用户可选择的计算逻辑)

开发人员配置用户能用到的统计方式,避免用户接触复杂函数:

  • 预设计算类型:求和、平均值、最大值、最小值、计数(仅数字 / 日期类型协助)
  • 自定义计算规则(进阶):比如配置 “库存 = 进货 - 出货”,后台预定义SUM(进货量)-SUM(出货量)的逻辑,前端显示为 “库存数量” 选项

(3)数据范围配置(锁死安全边界,开发提前配置)

  • 固定过滤条件:配置user_id=当前用户realm_sn=当前文件为默认不可修改的条件
  • 允许访问的表 SN 列表:配备用户可操作的表(如你的 3 个表 SN),禁止访问其他表
  • 字段权限控制:配置哪些用户组能看到哪些字段(如普通用户看不到 “供应商 ID”)

2. 普通用户操作层(前台自由组合,全点击管理)

用户基于开发调整好的 “积木块”,自由组合统计需求,流程如下:

步骤 1:拖拽 / 勾选 “统计指标”(对应 SQL 的 SELECT)

  • 左侧 “可选字段” 区:显现开发调整好的前端字段名(如 “商品名称”“进货数量”“出货数量”)
  • 用户操作:
    • 想统计 “进货数量总和”:勾选 “进货数量”,选择计算方式 “求和”(默认)
    • 想统计 “库存”:直接勾选开发配置好的 “库存数量”(后台自动对应SUM(进)-SUM(出)
  • 效果:用户无需懂公式,选字段 + 选计算方式,就对应了 SQL 中的SUM(CASE...)

步骤 2:选择 “分组维度”(对应 SQL 的 GROUP BY)

  • 右侧 “分组字段” 区:显示可用于分组的字段(研发配置时标记 “可分组” 的字段,如 “商品分类”“日期”)
  • 用户操作:点击 “添加分组”,下拉选择 “商品分类”(前端自动对应GROUP BY param3
  • 支持多级分组:再点击 “添加分组” 选 “日期”,就对应GROUP BY param3, 日期字段

步骤 3:配置 “筛选条件”(对应 SQL 的 WHERE)

  • 下方 “筛选条件” 区:
    • 字段选择:下拉选要筛选的字段(如 “日期”“进货数量”)
    • 条件选择:下拉选 “大于”“等于”“介于”(根据字段类型自动匹配可选条件,日期类型显示 “介于”,文本类型显示 “包含”)
    • 值输入:根据字段类型显示输入框 / 日期选择器(如日期字段表明日历,数字字段只允许输入数字)
  • 用户操作:选 “日期”→“介于”→选开始 / 结束日期,就对应WHERE 日期 BETWEEN ...

步骤 4:预览与保存(配置逻辑而非固定模板)

  • 点击 “预览”:前端根据配置生成临时结果(用模拟数据或真实数据),用户确认后提交
  • 保存为 “自定义配置”:用户给当前配置命名(如 “我的 1 月分类进销统计”),下次可直接调用,也可分享给同权限用户

二、底层 SQL 转化逻辑(开发配置驱动,用户无感知)

以用户配置 “统计商品分类的进货求和、出货求和、库存,筛选 1 月内容” 为例:

  1. 编写配置的映射关系(后台存储):

    • 商品分类:关联表 SN = 信息表 / 进货表,真实字段 = param3
    • 进货数量:关联表 SN = 进货表,真实字段 = param6,计算方式 = 求和
    • 出货数量:关联表 SN = 出货表,真实字段 = param6,计算方式 = 求和
    • 库存数量:预定义逻辑 = SUM (进货表.param6)-SUM (出货表.param6)
    • 日期:关联表 SN = 进货表 / 出货表,真实字段 = param4
  2. 用户配置转化为 SQL 的过程:

    • 统计指标→SELECT:根据字段配置自动生成CASE WHENSUM
    • 分组维度→GROUP BY:根据分组字段对应的真实字段生成
    • 筛选条件→WHERE:拼接用户选择的条件,加上开发配置的固定过滤条件(user_id、realm_sn、允许的 table_sn)
  3. 最终生成的 SQL(用户不可见):

sql

SELECT-- 商品分类(开发配置的分组字段)COALESCE(MAX(CASE WHEN table_sn='信息表SN' THEN param3 END), '未知分类') AS 商品分类,-- 进货数量求和(用户选的字段+计算方式)SUM(CASE WHEN table_sn='进货表SN' THEN param6 ELSE 0 END) AS 进货数量,-- 出货数量求和(用户选的字段+计算方式)SUM(CASE WHEN table_sn='出货表SN' THEN param6 ELSE 0 END) AS 出货数量,-- 库存数量(开发配置的预定义逻辑)(SUM(CASE WHEN table_sn='进货表SN' THEN param6 ELSE 0 END) - SUM(CASE WHEN table_sn='出货表SN' THEN param6 ELSE 0 END)) AS 库存数量
FROM cwvector_fairyallience_exceltable_common_records
WHERE-- 开发配置的固定安全条件(用户不可修改)user_id = #{currentUserId}AND realm_sn = #{currentRealmSn}AND table_sn IN ('进货表SN','出货表SN','信息表SN')-- 用户配置的筛选条件(1月数据)AND (table_sn NOT IN ('进货表SN','出货表SN') OR param4 BETWEEN '2025-01-01' AND '2025-01-31')
GROUP BY param3  -- 商品分类对应的真实字段
ORDER BY 商品分类;

三、关键优势(满足 “灵活 + 可控 + 可配置”)

  1. 保留 Excel 的灵活性:用户不是用固定模板,而是像在 Excel 中 “选字段、设条件、做汇总” 一样自由组合,避免功能僵化。
  2. 创建配置无需写代码:开发人员通过后台可视化配置字段、规则、权限,不用每次新增统计需求都改代码。
  3. 安全边界可控
    • 数据隔离:固定user_idrealm_sn,用户看不到其他数据。
    • 表权限:只允许访问配置好的表 SN,防止跨表查询。
    • 注入防护:用户输入的筛选值通过参数化查询传入,避免 SQL 注入。
  4. 兼顾不同用户
    • 普通用户:全点击操作,无需懂 SQL / 公式。
    • 编写 / 管理员:通过设置扩展字段和规则,支撑更多统计场景。

四、开发配置后台的核心界面(简化版)

  1. 字段配置页
    • 表格展示已配置字段,支持 “新增 / 编辑 / 删除”。
    • 新增字段时:下拉选关联表 SN、输入前端显示名、选择真实 param 字段、勾选 “可统计 / 可分组”。
  2. 规则配置页
    • 新增 “自定义计算规则”:输入规则名称(如 “库存数量”),选择关联的基础字段(进货数量、出货数量),选择计算逻辑(减法)。
  3. 权限配置页
    • 按用户组配置可访问的字段和表 SN,勾选 “允许配备模板” 的用户组(如管理员)可保存公共配置供其他用户使用。

这套方案既避免了 “固定模板限制灵活性” 的问题,又通过开发配置层构建了对底层逻辑和安全边界的控制,同时让普通用户能像用 Excel 一样自由处理,开发人员也能通过配置快速扩展特性,完全匹配你 “不是做模板、而是做灵活统计设备” 的初衷

阿雪技术观


让我们积极投身于技术共享的浪潮中,不仅仅是作为受益者,更要成为贡献者。无论是分享自己的代码、撰写技术博客,还是参与开源项目的维护和改进,每一个小小的举动都可能成为推动技术进步的巨大力量

Embrace open source and sharing, witness the miracle of technological progress, and enjoy the happy times of humanity! Let's actively join the wave of technology sharing. Not only as beneficiaries, but also as contributors. Whether sharing our own code, writing technical blogs, or participating in the maintenance and improvement of open source projects, every small action may become a huge force driving technological progrss.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/942077.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实用指南:构建AI智能体:五十二、反应式智能体:AI世界的条件反射,真的可以又快又稳

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

redis-(伪)主从集群搭建

redis-(伪)主从集群搭建为了避免Redis的单点故障问题,可以搭建一个redis集群,将数据备份到集群中的其他节点上,如果其中一个 redis节点宕机,则由集群中的其他节点顶上。redis的主从集群是一个“一主多从”的读写…

za3J5cHRvc+WvhueggeWOn+aWhw

dEMUFPHZLRFAXYUSDJKZLDKRNSHGNFIVJYQTQUXQBQVYUVLLTREVJYQTMKYRDMFDVFPJUDEEHZWETZYVGWHKKQETGFQJNCEGGWHKK?DQMCPFQZDQMMIAGPFXHQRLGTIMVMZJANQLVKQEDAGDVFRPJUNGEUNAQZGZLECGYUXUEENJTBJLBQCRTBJDFHRRYIZETKZEMVDU…

结对项目:小学四则运算题目的命令行程序

小学四则运算题目生成器项目报告 一.项目信息项目 内容这个作业属于哪个课程 软件工程这个作业要求在哪里 结对项目这个作业的目标 设计实现小学四则运算题目生成器,支持题目生成、答案计算、重复性检测和自动批改,并…

微信小程序使用formdata采用multipart方式上传文件

微信小程序使用formdata采用multipart方式上传文件参考:https://juejin.cn/post/7220769136209051703 1 简介在微信原生小程序中,对于上传文件(图片,文件,语音,视频)都有自己的api最后使用wx.uploadFile上传到服…

10/21

关联的多重度是指 一个类的实例能够与另一个类的多少个实例相关联 事物 关系 图move不是斜体 代表是重载 不是继承组合关系 UML不对对象快照进行建模

五自由度机械臂阻抗控制下的力跟踪

概述 五自由度机械臂在阻抗控制下的力跟踪是一种先进的控制策略,使机械臂能够在与环境交互时表现出期望的柔顺行为,同时精确跟踪目标接触力。这种控制在装配、表面处理和人机交互等应用中至关重要。 阻抗控制基础 阻…

中国项目管理工具市场迎来技术驱动新纪元:Gitee引领双核协作革命

中国项目管理工具市场迎来技术驱动新纪元:Gitee引领"双核"协作革命 随着中国企业数字化转型进入深水区,项目管理工具正在经历从单一功能向智能协同平台的跃迁。在这场技术驱动的协作革命中,国产工具凭借本…

uploads-lab通关攻略

Pass-01(后缀) 上传php发现 发现弹窗给出了白名单文件类型.jpg|.png|.gif 仅仅过滤文件后缀,不允许为php burp抓包修改后缀即可上传成功 Pass-02(后缀) 方法同上前往显示地址查看测试成功 Pass-03(.phtml)新增过滤,…

DOS命令(cmd)

DOS命令(cmd)盘符切换:C:\Users\lenovo>D:(从c切换到d) 查看当前目录下的东西:D:>dir 切换目录:C:\Users\lenovo>cd /d(跨盘、写具体路径) d:\bin 返回上一级:cd .. 进入当前目录下的一个目录:直接cd …

初始化vue3项目和打包vue3项目

一、初始化vue3项目 执行命令:npm init vite@latest 二、打包vue3项目 生成打包产物在项目根目录运行打包命令,Vite 会将项目编译为静态文件(默认输出到 dist 目录):npm run build # 或 yarn build / pnpm bui…

Continuation Passing Style 连续传递样式

编辑于 2024年08月18日 20:07 Continuation就是回调 function a (num a, num b) => a + b变成 func a (num a, num b, func c) => c(a + b)有啥用? 转为尾递归 尾递归是啥? 递归就是函数调用自己 如果调用在最…

中国企业DevOps工具链选型指南:政务、出海与跨国协作的实战解析

中国企业DevOps工具链选型指南:政务、出海与跨国协作的实战解析 在数字化转型浪潮席卷各行各业的当下,DevOps工具链的选择已成为企业技术架构升级的关键决策。不同于早期简单的功能对比,如今企业需要从更复杂的场景…

【2025-10-17】首听EB病毒

20:00爱是一门艺术吗?回答是肯定的。因此,它需要知识和努力。——艾里希弗洛姆昨天下午带二宝看医生,也挺一波三折的,原以为半个小时可以结束的门诊,却足足看了两个小时。其实,我们周日已经带孩子看过医生了,但…

Bean 生命周期的关键阶段和详细流程

1. 实例化前(Bean 定义加载与解析) BeanDefinition 扫描与注册:Spring Boot 启动时,通过 @ComponentScan 扫描指定包(默认是主类所在包及其子包)下的类(如 @Component、@Service、@Controller 等注解标记的类)…

数字媒体技术-培优讲练-知识点总结

数字媒体技术-培优讲练-知识点总结 第一单元 “数字媒体概述” 核心内容知识模块 关键要点 具体说明 / 示例媒体三重含义 传播媒介物理媒介逻辑载体 传播媒介(电视 / 网络)物理媒介(手机 / 硬盘)逻辑载体(软件数据…

Jmeter解决响应乱码的问题

背景: 在请求里,加编码utf-8,也还是会乱码处理方案: 添加一个BeanShell后置处理器,写入以下内容,强制设置编码为utf-8 prev.setDataEncoding("UTF-8");

https://juejin.cn/post/7529730683963588627

https://juejin.cn/post/7529730683963588627https://juejin.cn/post/7529730683963588627本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址,还有个别文章是汇总网上多份资料所成,在这…

实用指南:计算机毕业设计Python农作物产量预测分析 农作物爬虫 农产品可视化 农产品推荐系统 机器学习 深度学习 大数据毕业设计(源码+LW文档+PPT+详细讲解)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

PCB布线一定不能走直角吗?一个或许有些离经叛道又颠覆常识的答案

今天收到了朋友送我的一本书(真的万分感谢,在国外买本书太不容易了,更何况朋友是直接从国内买了送给我),B站UP主JT编写的《高速PCB设计经验规则应用实践》,便趁热打铁上手看了起来。在第一章,1.5.3小节,了解经…