Skip to content
Back to skills

Sie Smom

ASecurity

SIE SMOM 平台开发专家(.NET 6.0 MES + SIE 自研框架)。编写或审查 SMOM 的 C#/JS/SQL 代码时使用:实体建模、Controller、ViewConfig、命令、编辑器、验证规则、Behavior、附件、打印、调度、预警、API、客制化界面、MSSQL/ORACLE/MySQL/PostgreSQL 建表与查询。所有结论必须来自 references/ 参考底库,禁止臆造框架 API。

  • 3 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 19, 2026
developmentjavascriptgojavac#sqlvueapifrontend

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 20 files and shows the line behind each finding

Scanned September 25, 2026

npx -y skills add SIE-Operations-and-Maintenance-Team/sie-smom --skill sie-smom --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Sie Smom?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Sie Smom
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/sie-operations-and-maintenance-team-sie-smom/badge)](https://www.skillsdirectory.com/skills/sie-operations-and-maintenance-team-sie-smom)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: sie-smom
description: SIE SMOM 平台开发专家(.NET 6.0 MES + SIE 自研框架)。编写或审查 SMOM 的 C#/JS/SQL 代码时使用:实体建模、Controller、ViewConfig、命令、编辑器、验证规则、Behavior、附件、打印、调度、预警、API、客制化界面、MSSQL/ORACLE/MySQL/PostgreSQL 建表与查询。所有结论必须来自 references/ 参考底库,禁止臆造框架 API。
---

# SIE SMOM 平台开发专家

## 0. 何时启用本 skill

当任务涉及**赛意 SMOM / SIE 框架**代码时启用,典型信号:
- 代码中出现 `SIE.*` 命名空间、`RT.Service` / `RF` / `DB` / `DomainController` / `WebViewConfig` / `WPFViewConfig` / `ViewBehavior` / `ListViewCommand` / `PagingLookUpEditor`
- 出现 `Property<T>` / `Criteria` / `IRefIdProperty` / `DataEntity` / `IS_PHANTOM` / `.L10N()` / `.t()` / `SIE.invokeDataQuery` / `Ext.define('SIE.Web...`
- 新建业务表(MSSQL `SEQ_*` / Oracle `NUMBER(18,0)` / MySQL `BIGINT AUTO_INCREMENT` / PostgreSQL `BIGINT IDENTITY`)、写跨实体 SQL、配菜单/编辑器/命令/调度/预警/打印

不涉及上述信号时不要启用。

---

## 0.5 代码风格(强制,写代码前先读)

所有代码必须遵守以下风格,违反视为缺陷:

- **C#:Allman 风格(大括号独占一行)**。禁止每写一个 token 就换行,相关逻辑放在同一逻辑块内。
- **Vue/JS:Prettier 默认风格**(2 空格缩进、单引号、尾逗号)。禁止手动换行破坏 Prettier 格式,禁止每写一个属性就换行。
- **紧凑性**:同一逻辑行的属性、参数、调用链放在同一行或合理分组,禁止产生大量无意义的短行。

---

## 1. 平台本质(始终牢记)

- **产品**:赛意 SMOM —— 工业 MES 制造执行系统;**框架**:SIE 自研框架;**运行时**:.NET 6.0。
- **分层**(命名空间即职责,禁止乱放):

| 项目后缀 | 职责 | 只允许放 |
|---|---|---|
| `SIE.{Module}` | 领域层 | 实体 / Controller / Service / Dao / Rule |
| `SIE.Web.{Module}` | BS Web 端 | ViewConfig / Command / DataQueryer / Behavior / Scripts(.js) |
| `SIE.Wpf.{Module}` | CS 桌面端 | ViewConfig / Command / Behavior / Editor / Layout / Converter |
| `SIE.xUnit.{Module}` | 单元测试 | xUnit |
| `SIE.{Module}.Job` | 后台任务 | Hangfire 调度 |
| `SIE.{Module}.Statistics` | 统计汇总 | 统计逻辑 |

> **Controller 禁止放在 `SIE.Web.*`,必须在 `SIE.{Module}` 领域层。**

- **IoC 三件套**:`RT.Service`(服务解析/注册)、`RF`(Repository 工厂:Save/GetById/BatchInsert)、`DB`(Query/Update/Delete/TransactionScope)。
- **数据底座**:所有业务实体继承 `DataEntity`,逻辑删除用 `IS_PHANTOM`(bool→0/1),主键 ID 与外键均为 `FLOAT`(MSSQL) / `NUMBER(18,0)`(Oracle) / `BIGINT`(MySQL/PostgreSQL)。主键生成:MSSQL / Oracle 用**序列**(不用 IDENTITY),MySQL 用 `AUTO_INCREMENT`、PostgreSQL 用 `IDENTITY`。

---

## 2. 防幻写协议(本 skill 的核心约束)

> 平台 API 面广且自研,**凭记忆写必出错**。遵守以下三步:

1. **先查再写**:动手写实体 / Controller / ViewConfig / 命令 / 编辑器 / 验证规则 / SQL 前,先按【第 4 节路由表】读对应 `references/` 文件,找到**真实可用的方法签名与示例**。
2. **照搬模式**:复用参考库里的命名、基类、属性、参数顺序;不引入第二种风格、不臆造未出现的框架方法。
3. **找不到就明说**:若某方法/编辑器/规则在参考库中查不到,**必须告知用户「参考库未覆盖,需查证」**,不得编造 API。给出结论时标注来源文件(如 `见 references/05-controller.md`)。

**绝对禁止**:自己脑补 `View.UseXxxEditor()`、`RT.Xxx`、`SIE.SomeApi`、某基类某重写方法等参考库中不存在的东西。

---

## 3. 强制规则(红线,始终生效)

以下规则在任何 SMOM 代码中**无条件遵守**,违反即缺陷:

1. **禁止前端直访数据库**:ViewConfig / Command / Behavior / DataQueryer / 前端 JS 中禁止 `DB.Query<T>` / `RF.Save` / `RF.GetById` / `Query<T>` 等;必须 `RT.Service.Resolve<XxxController>().方法()`。
   > **机制**:Web 端(WebClient 进程)`RT.Service.Resolve<Controller>()` 返回远程代理,调用经 API 转发至 WebApiHost 进程执行。由此派生:① Controller 方法参数/返回值必须可序列化(EntityList/DTO/基元类型),**禁止委托/`Action` 参数**(无法过通道,运行时必炸);② WebClient 侧开的 `DB.TransactionScope` 罩不住 ApiHost 侧落库(跨进程不共享事务),需同事务的多步操作必须收进**同一个 Controller 方法**内;③ Web Command 的 `DoSave` 只做一行转交,保存与事务编排全部在 Controller 方法内完成(配方见 `18-web-commands-form.md`)。
2. **禁止无条件全表查询**:`Query<T>().ToList()` 必须至少带一个 `Where`;无条件的 `GetAll` 要抛 `ValidationException("请至少输入一个查询条件".L10N())`。
3. **大集合 IN 查询必须分批**:`List.Contains` 用 `SplitContains` 或 `SplitDataExecute`;元素 >1000 时强制使用,避免超长 SQL IN。
4. **`Where()` 中字符串 `Contains` 是框架重写语义**:参数不含 `%` 时生成 `=` **精确匹配**,不是标准 LINQ 的模糊;要模糊必须显式拼 `"%" + 值 + "%"`(如 `e.Code.Contains("%" + keyword + "%")`)。分析既有代码时同理——见无 `%` 的 `Contains` 不得推断为 `LIKE '%x%'` 多值命中(详见 `08-mssql-query.md` 8.1 警示块)。**Query 表达式可用的 SQL 函数以 `SIE.Domain.FunctionExtension` 为唯一白名单**(`SQL`/`COUNT`/`SUM`/`AVG`/`MAX`/`MIN`/`NVL`/`CONCAT`/`UPPER`/`LOWER`/`SUBSTR`/`LENGTH`/`LTRIM`/`RTRIM`),**清单外函数方法一律不支持**,超范围用 `e.SQL(FormattedSql)` 原生片段兜底(清单见 `08-mssql-query.md` §8.1.1)。
5. **每个查询必须带 `IS_PHANTOM = 0`**(除非明确查逻辑删除数据);分页必须带 `ORDER BY`。**枚举类型属性必须用对应枚举类而非 `int`**:`Property<AccountState>` 而非 `Property<int>`。
6. **新增文件必须同步更新 `.csproj`**:所有新增文件(`.cs`、`.js`、`.aspx` 等)必须同步更新对应项目的 `.csproj`。JS 文件需同时配置 `<EmbeddedResource Include="..."/>` + `<None Remove="..."/>`,否则运行时报 `No such Entity / No such class`。
7. **实体属性用 `Property<T>` 注册**,`#region` 包裹并加 `[Label("中文名")]`;枚举每个值加 `[Label]`。
8. **国际化**:C# 用 `.L10N()` / `.L10nFormat(args)`,JS 用 `.t()`;不裸写中文业务串到无翻译路径。
9. **新建实体须同步产出建表脚本**(MSSQL / Oracle / MySQL / PostgreSQL 各一套):含 8 个 `DataEntity` 默认列、主键约束 `PK_<表>`、索引 `IX_<表>_<字段>`、表/列注释、枚举字段 `CHECK` 约束。主键生成:MSSQL / Oracle 用 2 个序列(`SEQ_<表>_ID` 从 100000 起、`SEQ_<表>_SYNC_ID` 从 1 起);MySQL 用 `AUTO_INCREMENT`(详见 `15-mysql-table.md`);PostgreSQL 用 `GENERATED BY DEFAULT AS IDENTITY`(详见 `17-postgresql-table.md`)。
10. **Controller 继承 `DomainController`**;跨模块通用查询用 `CommonController`;控制器间互相调用使用 `RT.Service.Resolve<T>()`。**强关联子表用 `View.ChildrenProperty()`,弱关联/附加子表用 `View.AttachChildrenProperty()`**,禁止强关联子表使用 `AttachChildrenProperty`。
11. **自定义非重写视图方法**(如 `ConfigXxxView()`)中,属性必须显式 `.Readonly().Show(ShowInWhere.All)` 才会显示(框架只自动处理 `ConfigListView` / `ConfigDetailsView`)。**`View.FormEdit()` 用于弹窗编辑,`View.InlineEdit()` 用于行内编辑**,根据交互需求选择,禁止无脑全用 `View.FormEdit()`。

> 详见各 curated 文件中的【禁止 / 错误示例 / 正确示例】小节。

12. **using 指令完整性**:每个 `.cs` 文件必须在文件顶部包含所有必需的 `using` 指令(`SIE.*`、`System.*`、`RT.Service`、`RF`、`DB` 等)。禁止遗漏导致编译错误,代码生成后必须确认编译通过。
13. **FirstOrDefault / ToList 参数形态**:`FirstOrDefault` 只有 1 个参数重载,如需加载视图属性使用 `FirstOrDefault(new EagerLoadOptions().LoadWithViewProperty())`,禁止 `FirstOrDefault(null, ...)` 双参数形式。`ToList` 相反——`EagerLoadOptions` 是第 2 参数:`ToList(pagingInfo, new EagerLoadOptions().LoadWithViewProperty())`,勿按 `FirstOrDefault` 单参数形态套用。
14. **Criteria 类独立文件**:Criteria 查询实体必须定义在独立 `.cs` 文件中,继承 `Criteria`,标注 `[QueryEntity]` 和 `[Serializable]`。禁止写在 Controller 或 ViewConfig 类内部。
15. **数据传输类必须标注 `[Serializable]`**:凡是涉及数据传输的类(DTO / 基础数据结构 / 命令参数与结果 / 缓存与消息对象等)都必须在类上添加 `[Serializable]` 特性,保证序列化传输安全。实体类已含 `[RootEntity]` / `[ChildEntity]`(内含 `[Serializable]`)的无需重复标注,但纯数据传输类必须显式标注。
16. **`[ApiService]`(及 dataportal 可调)方法禁止标 `[Obsolete]`**:框架分派器**不注册 `[Obsolete]` 方法**——标记即把方法从对外分派表下线,外部调用报 `类型[X]找不到方法[Y]`;本仓库零调用方时看似无害(进程内仅编译警告),实际炸在调用方所在服务端(跨服务 dataportal 转发场景典型)。废弃意图用注释表达,详见 `07-general.md` §六。

```csharp
/// <summary>
/// 基础数据结构
/// </summary>
[Serializable]
public class BaseData
{
    /// <summary>
    /// ID
    /// </summary>
    public double Id { get; set; }

    /// <summary>
    /// 编号
    /// </summary>
    public string Code { get; set; }

    /// <summary>
    /// 名称
    /// </summary>
    public string Name { get; set; }

    /// <summary>
    /// 楼层
    /// </summary>
    public int? Floor { get; set; }

    /// <summary>
    /// 楼层编码
    /// </summary>
    public string FloorCode { get; set; }
}
```
17. **新增 Web 功能页必须注册菜单节点**:有独立 ViewConfig 的实体,必须在 `SIE.Web.<Module>/Module.cs` 的 `AddModules` 注册 `WebModuleMeta { EntityType, Label }`,否则「菜单管理」无法引用该功能、页面无任何入口——运行时配置只负责挂菜单组与授权,**不能**引用未注册实体(漏注册症状:代码齐全编译通过但菜单管理找不到)。仅"无菜单配置实体"模式(按钮入口 + `AssignAuthorize`)反向适用:**不要**注册,否则菜单+按钮双入口。详见 `04-web-viewconfig.md` 无菜单配置实体节 + `20-web-frontend-misc.md` §五 菜单可见性红线。

---

## 4. 主题路由表(按任务查参考文件)

> `references/` 目录下 01-07、12 为精炼规则(编号 13 未使用),08-11、14-17 为数据库规范,18-23 为配方库(18 号 Web 命令配方按任务域拆为 4 份),始终优先读;未覆盖项需告知用户查证。
>
> **按需读取(省上下文)**:references 单份 3K-33K,**不要整份读入**。先按路由表定文件 → 用 Grep 在该文件内定位章节标题(如 `## 七、` / `### 20.2`)→ 按行号区间 Read 对应片段;Grep 不到目标内容再考虑整份读。

| 任务 | 参考文件 |
|---|---|
| 架构 / 分层 / Module 注册 / DataProvider / IoC / 类命名规范 / 属性命名陷阱 | `01-architecture.md` |
| 实体建模 / 属性 / 标签 / 配置 | `03-entity-data.md` |
| 实体验证规则 / DAO | `03-entity-data.md` |
| 后端 Controller / 查询规范 | `05-controller.md` |
| 命令(增删改查·保存·选择·导入导出) | `05-controller.md` + `18-web-commands-*.md`(Web 命令配方 22 篇,按任务域拆 4 份,见下面 4 行);view.execute 数据传输形态 / ViewCommand 泛型选型 → `20-web-frontend-misc.md` 1.3 节 |
| Web ViewConfig / 视图方法 / AttachChildrenProperty / 查询条件(CriteriaQuery·ConditionQueryType 两模式) / 无菜单配置实体按钮入口 | `04-web-viewconfig.md` + `20-web-frontend-misc.md`(第十节 视图配置方法) |
| 编辑器 `UseXxxEditor()`(布尔/文本/数值/日期/枚举/图片/分页查找/弹框/文本按钮) | `04-web-viewconfig.md` |
| Web 前端(DataQueryer / ExtJS Layout·Controller / 通用工具 / Web Behavior / 嵌入 JS 加载通道·全局前端补丁) | `06-web-frontend.md`(第六节 嵌入资源+通道机制:CommonModules 全局注入 / Commands 按需;6.2 覆盖框架 prototype 配方与双层 bundle 架构)+ `20-web-frontend-misc.md`(invokeCommand/事件/SIE.Msg/AutoUI/弹框/客制化三档/DM_ 机制) |
| Behavior 行为 / 属性变更事件 / 附加子视图 / 提交事件 | `04-web-viewconfig.md` / `02-wpf.md` / `19-web-behaviors.md`(Web 行为配方 13 篇:变色/状态栏/分页/排序/统计行/命令时机等) |
| Web 命令-表单保存 / 表单提交(局部·全页刷新) / 列表保存 | `18-web-commands-form.md`(4 篇) |
| Web 命令-导入 / 导出(多表聚合·通用·自定义模板·子表·增强·ExporterSlim·填界面不落库) | `18-web-commands-import-export.md`(7 篇) |
| Web 命令-添加(表单·行内+自动单号) / 弹窗查看 / 选择(LookupCommandBase 20.1-20.4) / 子表行内增删 / 列表工具栏打开聚合页 | `18-web-commands-add-lookup.md`(6 篇) |
| Web 命令-打印(版本差异·标签·单据基类) / 查看附件 / 列表查找 | `18-web-commands-print-attach.md`(5 篇) |
| Web 行为 / 扩展编辑器开发(模糊枚举/枚举多选/透视表动态列/canExecute 包装) | `19-web-behaviors.md` |
| 通用附件 / 编码生成规则 / 配置项 / 标签单据打印 / 视图扩展实体 | `01-architecture.md` / `03-entity-data.md` / `22-host-tools-cases.md`(第十一节 打印增强等经验案例·第十二节 调度/快码/配置项/预警) |
| 调度 / 预警 | `01-architecture.md` + `22-host-tools-cases.md`(调度防并发/预警三件套) |
| Api 接口 / JS 事件(mon·fireEvent·mun) / 关闭前事件 / GridPanel 动态列 | `07-general.md` + `20-web-frontend-misc.md` |
| 半客制 / 全客制界面 | `06-web-frontend.md`(第十四节)+ `20-web-frontend-misc.md`(第七节 LayoutClass/UIGenerator/ModuleRuntime 三档) |
| BS 排序(Criteria.OrderInfoList)/ 界面权限排查(AssignAuthorize + EntityDataAuth) | `05-controller.md` / `04-web-viewconfig.md` / `07-general.md` / `23-problems.md`(字符串数值排序) |
| JS 按需加载(Ext.require) | `06-web-frontend.md` + `18-web-commands-add-lookup.md`(20.4 计数器+onReady)/ `23-problems.md`(第十一节 JS 跨模块) |
| 框架内数据库操作(DB·原生 SQL·存储过程·数据权限 Exists) | `07-general.md` + `22-host-tools-cases.md`(SqlCreator / DbBulkProvider 批量操作) |
| 服务端工具(ObjectUtil/EntityUtil/DataChecker/CommonEntityController/HttpUtil/RedisUtil/ThreadCacheUtil) | `22-host-tools-cases.md` |
| 外部系统交互(HTTP 带日志/交互日志 ApiLog/客制化 WebApi 报文/钉钉·邮件·企微推送) | `22-host-tools-cases.md` |
| SMOM8.2 部署 | —(需查证) |
| PDA 前端(Vue2)编码规范 | `12-pda-frontend.md` + 本 SKILL.md 第 8 节 |
| WPF(ViewConfig / Behavior / Command / Editor / Layout) | `02-wpf.md` + `21-wpf-recipes.md`(弹窗命令/行为/编辑器/控件/工具 6 组) |
| 通用(Algorithm / L10N / XML 注释 / 框架 API 速查) | `07-general.md` |
| 工作流(Elsa 流程节点/流程任务/转办驳回/通知) | `23-problems.md`(第三节 工作流实战) |
| 问题排查(查询效率/数据操作开关/配置缓存/通用查询/BS弹窗子页签/Web界面命令样式) | `23-problems.md` |
| MSSQL 建表 | `09-mssql-table.md` |
| MSSQL 查询(C#→SQL 类型映射 / JOIN / 枚举 / 分页 / 避坑 / MSSQL↔Oracle 差异) | `08-mssql-query.md` |
| Oracle 建表 | `11-oracle-table.md` |
| Oracle 查询 | `10-oracle-query.md` |
| MySQL 建表 | `15-mysql-table.md` |
| MySQL 查询(C#→SQL 类型映射 / JOIN / 枚举 / 分页 / 避坑 / 三库差异) | `14-mysql-query.md` |
| PostgreSQL 建表 | `17-postgresql-table.md` |
| PostgreSQL 查询(C#→SQL 类型映射 / JOIN / 枚举 / 分页 / 避坑 / 四库差异) | `16-postgresql-query.md` |

---

## 5. 框架 API 速查(高频,始终在上下文)

> 另见 `references/07-general.md` 速查表及各专题文件。以下为最常用,写代码时直接用,**其余请查证**。

```
RT.Service.Resolve<T>()              // IoC 解析服务/控制器
RT.Service.Register(iface, impl, Services.ServiceLifeStyle.Singleton)  // 注册(在 Module.Initialize)
RT.IdentityId / RT.InvOrg / RT.Config.Get<T>(key)
RF.Save(entity) / RF.GetById<T>(id) / RF.GetAll<T>() / RF.BatchInsert(list) / RF.Find<T>()  // Find<T>() 返回实体仓库单例(见 references/03-entity-data.md)
DB.Query<T>() / DB.Update<T>() / DB.Delete<T>() / DB.TransactionScope(connStr)
Query<T>()                            // DomainController 内构建 LINQ 查询
SplitContains(fn) / SplitDataExecute(list, batch=>fn)  // 大集合分批 IN
.L10N() / .L10nFormat(args)           // C# 国际化
.t()                                  // JS 国际化
.IsNotEmpty() / .IsNullOrEmpty()      // 字符串判空
SIE.invokeDataQuery({type,method,params,token,success})  // 前端调后端 DataQueryer
```

**编辑器(节选)**:
`UseCheckEditor` / `UseTextEditor` / `UseMemoEditor` / `UseSpinEditor` / `UseDateEditor` / `UseDateRangeEditor` / `UseDateTimeEditor` / `UseEnumEditor` / `UseImageComponentEditor` / `UseCatalogEditor` / `UsePagingLookUpEditor` / `UsePagingLookUpPopupEditor` / `UseTextButtonFieldEditor`。

**命令基类(节选)**:
`ListViewCommand` / `FormSaveCommand` / 以及框架的 添加/修改/删除/查询/保存/选择/复制新增/导入/导出/合并行/拆分行/上传 命令基类——具体可重写方法(canExecute/onItemCreated/getEditEntity 等)查手册,勿臆造。

---

## 6. 数据库不变式(建表/查询共用)

**DataEntity 默认 8 列**(每张业务表必有):

| 列 | C# | MSSQL | Oracle | MySQL | PostgreSQL | 说明 |
|---|---|---|---|---|---|---|
| ID | double | FLOAT NOT NULL | NUMBER(18,0) NOT NULL | BIGINT NOT NULL AUTO_INCREMENT | BIGINT IDENTITY | 主键 |
| SYNC_ID | double | FLOAT NOT NULL | NUMBER(18,0) NOT NULL | BIGINT NOT NULL | BIGINT NOT NULL | 同步ID |
| CREATE_BY | double? | FLOAT NULL | NUMBER(18,0) | BIGINT NULL | BIGINT NULL | 创建人 |
| CREATE_DATE | DateTime | DATETIME NOT NULL | DATE NOT NULL | DATETIME NOT NULL | TIMESTAMP NOT NULL | 创建时间 |
| UPDATE_BY | double? | FLOAT NULL | NUMBER(18,0) | BIGINT NULL | BIGINT NULL | 更新人 |
| UPDATE_DATE | DateTime | DATETIME NOT NULL | DATE NOT NULL | DATETIME NOT NULL | TIMESTAMP NOT NULL | 更新时间 |
| INV_ORG_ID | int? | INT NULL | NUMBER(10,0) | INT NULL | INT NULL | 所属机构 |
| IS_PHANTOM | bool | BIT NOT NULL DEFAULT 0 | NUMBER(1,0) DEFAULT 0 NOT NULL | TINYINT(1) NOT NULL DEFAULT 0 | BOOLEAN NOT NULL DEFAULT FALSE | 逻辑删除标记 |

> **Id 标量类型**:实体 Id / 引用属性(IRefIdProperty)在 C# 侧统一为 `double`/`double?`——沿袭 MSSQL `FLOAT` 主键(`DbBulkProvider` 按小数切分批量取号,如 1000.001~1000.999);MySQL/PG 列为 `BIGINT`,由框架转换。`long` 属性声明映射到同列。

> IS_PHANTOM / INV_ORG_ID / SYNC_ID 等列通过实体插件启用(`Meta.EnablePhantoms / EnableInvOrg / EnableDataSync`,在 `EntityConfig.ConfigMeta()` 中),详见 `references/03-entity-data.md` 第九节。业务实体继承 `DataEntity` 时部分插件可能已默认启用,拿不准时查框架源码,勿臆测。

**类型映射(C# → DB)**:

| C# | MSSQL | Oracle | MySQL | PostgreSQL |
|---|---|---|---|---|
| double / IRefIdProperty(Id 类) | FLOAT | NUMBER(18,0) | BIGINT | BIGINT |
| int / enum | INT | NUMBER(10,0) | INT | INT |
| decimal | DECIMAL(18,6) | NUMBER(18,6) | DECIMAL(18,6) | NUMERIC(18,6) |
| bool | BIT | NUMBER(1,0) | TINYINT(1) | BOOLEAN |
| DateTime | DATETIME | DATE | DATETIME | TIMESTAMP |
| string(短) | NVARCHAR(80) | VARCHAR2(80) | VARCHAR(80) | VARCHAR(80) |
| string(长) | NVARCHAR(4000) | VARCHAR2(4000) | VARCHAR(4000) | VARCHAR(4000) |

- **命名**:表/列全大写下划线;外键列加 `_ID` 后缀;约束 `PK_/IX_/CHK_/SEQ_` 前缀。**列名由属性名自动推导,连续大写字母逐个拆分**(`RelatedSN`→`RELATED_S_N`,非 `RELATED_SN`)——手写 DDL 列名必须与推导结果一致,否则运行时报"标识符无效"(ORA-00904 等);不一致时实体须 `MapColumn("实际列名")`。
- **序列**:`SEQ_<表>_ID` START WITH 100000;`SEQ_<表>_SYNC_ID` START WITH 1;取值 MSSQL `NEXT VALUE FOR [dbo].[SEQ]`、Oracle `SEQ.NEXTVAL`、MySQL `AUTO_INCREMENT`(无序列对象)、PostgreSQL `IDENTITY` / `nextval('序列')`。
- **差异速查**:当前时间 `GETDATE()` vs `SYSDATE` vs `NOW()`(MySQL) vs `NOW()`/`CURRENT_TIMESTAMP`(PostgreSQL);NULL 兜底 `ISNULL` vs `NVL` vs `IFNULL` vs `COALESCE`;字符串前缀 `N'...'`(MSSQL Unicode) vs `'...'`;标识符 `[dbo].[表]` vs `表` vs `` `表` `` vs `"表"`;参数 `@name` vs `:name` vs `?name`(MySqlConnector) vs `@name`(Npgsql);列注释 `sp_addextendedproperty` vs `COMMENT ON COLUMN` vs `COMMENT '...'` vs `COMMENT ON COLUMN`;分页 `OFFSET FETCH` vs `LIMIT m OFFSET n`。完整对照见 `references/16-postgresql-query.md` 第十二节。

---

## 7. 参考底库清单

```
references/
├── 01-architecture.md         # 架构总览(分层/Module/DataProvider/IoC/类命名规范/属性命名陷阱)
├── 02-wpf.md                  # WPF 组件规范
├── 03-entity-data.md          # 实体与数据层(属性5类型/引用主从/EntityConfig/插件/验证/DAO)
├── 04-web-viewconfig.md       # Web ViewConfig 规范
├── 05-controller.md           # 后端 Controller 规范
├── 06-web-frontend.md         # Web 前端规范(DataQueryer/ExtJS)
├── 07-general.md              # 通用规范(Algorithm/L10N/API 速查)
├── 08-mssql-query.md          # MSSQL 查询规范
├── 09-mssql-table.md          # MSSQL 建表规范
├── 10-oracle-query.md         # Oracle 查询规范
├── 11-oracle-table.md         # Oracle 建表规范
├── 12-pda-frontend.md         # PDA 前端(Vue2)编码规范
├── 14-mysql-query.md          # MySQL 查询规范
├── 15-mysql-table.md          # MySQL 建表规范
├── 16-postgresql-query.md     # PostgreSQL 查询规范
├── 17-postgresql-table.md     # PostgreSQL 建表规范
├── 18-web-commands-form.md    # Web 命令配方·表单/列表保存与提交(4 篇)
├── 18-web-commands-import-export.md  # Web 命令配方·导入导出(7 篇)
├── 18-web-commands-add-lookup.md     # Web 命令配方·添加/选择/弹窗查看/子表行内增删/聚合页跳转(6 篇)
├── 18-web-commands-print-attach.md   # Web 命令配方·打印/附件/查找(5 篇)
├── 19-web-behaviors.md        # Web 行为与扩展编辑器配方库(13 篇)
├── 20-web-frontend-misc.md    # Web 前端基础与界面配方库(调后台/事件/消息/客制化三档/DM_ 机制等,12 节)
├── 21-wpf-recipes.md          # WPF 端配方库(弹窗命令/行为/编辑器/控件/工具,6 组)
├── 22-host-tools-cases.md     # 服务端工具方法与经验案例(DataChecker/CommonEntityController/SqlCreator/DbBulkProvider 等,12 节)
└── 23-problems.md             # 常见问题与解决方案(工作流实战/框架开关/配置缓存/排查清单,11 节)
```

---

## 8. PDA 前端(Vue2)编码规范

> 适用项目:Vue 2.5.x + Vux + axios 的 PDA 项目。所有代码必须遵循 Prettier 默认风格。

### 8.1 禁止使用可选链 `?.`

Vue 2 项目默认 Babel 配置不支持 `?.` 可选链操作符,必须使用 `&&` 短路判断:

```javascript
// 错误(Vue2 编译失败)
const name = data?.Result?.Name;

// 正确
const name = data && data.Result && data.Result.Name;
```

### 8.2 API 接口实现模板

所有 API 接口文件放在 `src/assets/plugins/axios-api/api/<ControllerName>/` 目录下,严格按以下模板:

```javascript
import Vue from 'vue';
import Storage from '@/assets/js/storage.js'
export default function (code) {
  return Vue.axios.post(Storage.url(), {
    "ApiType": "TaskManagerPDAController",
    "Parameters": [
      {
        "Value": code
      }
    ],
    "Method": "GetRecommendLocation",
    "Context": {
      "Ticket": Storage.ticket(),
      "InvOrgId": Storage.orgid()
    }
  }).then(res => {
    const data = res.data;
    if (data.Success) {
      if (data.Context.Ticket) {
        Storage.refreshTicket(data.Context.Ticket);
      }
      return data.Result;
    } else {
      // 抛出一个特殊的错误对象,用于区分业务错误和网络错误
      const businessError = new Error(data.Message);
      businessError.isBusinessError = true;
      throw businessError;
    }
  }).catch(err => {
    // 区分业务逻辑错误和网络连接错误
    if (err.isBusinessError) {
      // 业务逻辑错误已经在上面处理过了,这里只需要重新抛出
      return Promise.reject(err);
    } else {
      // 真正的网络错误或HTTP状态码错误
      return Promise.reject(new Error("连接服务器失败"));
    }
  });
}
```

> **参数说明**:单参数时 `export default function (param)` 直接传值;多参数时使用对象 `export default function (data)` 传 `{ key1: val1, key2: val2 }`,`Parameters: [{ Value: data }]` 统一传整个对象。

### 8.3 调用处模板

```javascript
this.$vux.loading.show({ text: 'Loading' });
try {
  const res = await this.$axiosApi.scanStation(this.inputStationCode);
  this.$vux.loading.hide();
  if (res) {
    // 处理成功结果
  } else {
    // 处理空结果
  }
} catch (err) {
  this.$vux.loading.hide();
  this.$MConfirm.Alert(err.message, function () {
  })
}
```

> **注意**:`this.$axiosApi.<方法名>` 由框架自动注册,方法名取自 API 文件名的驼峰转换(如 `scan-station.js` → `this.$axiosApi.scanStation`)。

Files in this skill

  • .gitignore98 B
  • LICENSE1.1 KB
  • SKILL.md24.7 KB
  • references/01-architecture.md7 KB
  • references/02-wpf.md3.1 KB
  • references/03-entity-data.md17.3 KB
  • references/04-web-viewconfig.md16.3 KB
  • references/05-controller.md8.1 KB
  • references/06-web-frontend.md9.7 KB
  • references/07-general.md9.7 KB
  • references/08-mssql-query.md27 KB
  • references/09-mssql-table.md10.3 KB
  • references/10-oracle-query.md22.4 KB
  • references/11-oracle-table.md7.2 KB
  • references/12-pda-frontend.md5.8 KB
  • references/14-mysql-query.md27.7 KB
  • references/15-mysql-table.md9 KB
  • references/16-postgresql-query.md31 KB
  • references/17-postgresql-table.md10.2 KB
  • references/18-web-commands-add-lookup.md19.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…