MEMORY.md 3.9 KB

UAS_MES_YDCY 项目约定

技术栈

  • WinForms,.NET Framework,老式 csproj + packages.config;数据库为 Oracle。
  • 主程序集输出名 UAS_MES_NEW.exe(在 bin/Debug/)。

新增一个功能界面(标准步骤)

  1. FunctionCode/<模块>/ 下建 3 个文件:Xxx.csXxx.Designer.csXxx.resx
    • resx 直接 cp 一个现有空模板(如 Make_SplitBoard.resx,5817 字节)即可。
  2. namespace UAS_MES_NEW.<模块>,class 继承 Form
  3. Designer 风格:FormBorderStyle = NoneTag = "<模块>!<类名>"AutoScaleDimensions(8F,15F) + AutoScaleMode.Font
  4. csproj 三处注册(缺一不可):
    • <Compile Include="...\Xxx.cs"><SubType>Form</SubType></Compile>
    • <Compile Include="...\Xxx.Designer.cs"><DependentUpon>Xxx.cs</DependentUpon></Compile>
    • <EmbeddedResource Include="...\Xxx.resx"><DependentUpon>Xxx.cs</DependentUpon></EmbeddedResource>
  5. 菜单:无需改代码。左侧导航由数据库驱动——CS$SYSNAVATIONsn_classname模块.类名sn_displayname 为菜单名,sn_module 为分组名,sn_caller 为权限 Caller,sn_using=1),权限在 CS$USERGROUPPOWER。运行时按 Assembly.GetExecutingAssembly().CreateInstance("UAS_MES_NEW." + sn_classname) 反射开窗。

界面通用写法(从现有代码提炼)

  • 字段:AutoSizeFormClass asc = new AutoSizeFormClass();DataHelper dh;DataTable dt;
  • Load 事件:asc.controllInitializeSize(this);dh = SystemInf.dh; → 初始化数据 → xxx.Focus();
  • SizeChanged 事件:asc.controlAutoSize(this);
  • 日志面板:OperateResult.AppendText(">>提示\n", Color.Black) / ("<<错误\n", Color.Red, 控件)RichTextAutoBottom,含 (string,Color) 与 (string,Color,Control) 两个重载)

常用自定义控件(UAS_MES_NEW.CustomControl.*

  • SN/条码输入:TextBoxWithIcon.SnCollectionBox(继承 EnterTextBox,额外属性 AllPower/ID/Power/Str/Str1/Str2
  • 工单输入(带放大镜 DbFind):TextBoxWithIcon.MaCodeSearchTextBox,配 TableName/SelectField/SetValueField/FormName/Condition
  • 按钮:ButtonUtil.NormalButton(未设 NormalImage/DownImage/MoveImage 时自动取 Properties.Resources 默认图)
  • 结果面板:RichText.RichTextAutoBottom
  • 自适应:PublicMethod.AutoSizeFormClass(internal,同程序集内可用)

数据访问

  • dh.ExecuteSql(sql, "select") 返回 DataTabledh.getFieldDataByCondition(表, 字段, 条件) 返回单值。
  • 表命名:工序表 stepst_code/st_name),工序类型表 steptypeSTP_CODE/STP_NAME,注意是 STP_ 前缀)。
  • SQL 多为拼字符串 + Oracle 函数(nvlROWNUMDUAL)。

已知环境限制

  • 无法本地编译验证:dotnet build 卡在 NuGet restore;沙箱拦截 MSBuild.exe / csc.exe。
  • 改代码后需在 Visual Studio 中手动编译确认。

版本控制(git)

  • 仓库根在 C:\MES_NEW\mes-client(UAS_MES_YDCY 只是其中一个项目);远程 mes-client = git@repos.ubtob.net:usoft/mes-client.git(SSH,内网 10.1.81.211),分支 master,无 upstream 追踪。
  • ~/.ssh/id_rsa 带 passphrase;非交互环境下 SSH 会去读 tty 导致挂起,必须用 askpass 自动应答(OpenSSH 10.3 支持 SSH_ASKPASS_REQUIRE=force):

    D=$(mktemp -d); printf '#!/bin/sh\necho "<口令>"\n' > "$D/a.sh"; chmod +x "$D/a.sh"
    export SSH_ASKPASS="$D/a.sh" SSH_ASKPASS_REQUIRE=force DISPLAY=:0
    git push mes-client master < /dev/null
    rm -rf "$D"
    

    备选:cp ~/.ssh/id_rsa /tmp/k && ssh-keygen -p -P "<口令>" -N "" -f /tmp/k 造无口令副本 + GIT_SSH_COMMAND="ssh -i /tmp/k -o IdentitiesOnly=yes"用完立即删除

  • 口令一律由用户口头提供,不落盘。

  • 提交前务必限定路径(如 git add UAS_MES_YDCY/)——同一仓库里还有 UAS_MES_ZKLH、UAS_WinForm.sln 等并行的他人/其他改动。