diff --git a/Hh.Mes.Api/BaseInfoCache.json b/Hh.Mes.Api/BaseInfoCache.json new file mode 100644 index 0000000..ef2fe08 --- /dev/null +++ b/Hh.Mes.Api/BaseInfoCache.json @@ -0,0 +1,8 @@ +{ + "baseInfo": [ + { + "key": "base_factory", + "sql": "select * from base_factory with(nolock) " + } + ] +} \ No newline at end of file diff --git a/Hh.Mes.Api/Controllers/UpstreamController.cs b/Hh.Mes.Api/Controllers/UpstreamController.cs index f7b66dd..b91bdec 100644 --- a/Hh.Mes.Api/Controllers/UpstreamController.cs +++ b/Hh.Mes.Api/Controllers/UpstreamController.cs @@ -42,28 +42,15 @@ namespace Hh.Mes.Api.Controllers return Serialize(service.SendEquipment(entity)); } - - - ///// <summary> - ///// 人员信息 MOM_HH_003 - ///// http://127.0.0.1:10008/api/Upstream/Mes/V1/SendUser - ///// </summary> - //[HttpPost] - //[ActionName("Mes/V1/SendUser")] - //public string SendUser(SysUserEntity requestData) - //{ - // return Serialize(service.SendUser(requestData)); - //} - - ///// <summary> - ///// ANDON报警 - ///// </summary> - //[HttpPost] - //[ActionName("Mes/V1/AndonUpMom")] - //public string AndonUpMom(AndonUpMomEntity andonUpMomEntity) - //{ - // return Serialize(service.AndonUpMom(andonUpMomEntity)); - //} + /// <summary> + /// 生产订单 MOM_HH_005 + /// </summary> + [HttpPost] + [ActionName("Mes/V1/SendWorkOrder")] + public string SendWorkOrder(MomWorkOrder requestData) + { + return Serialize(service.SendWorkOrder(requestData)); + } /// <summary> /// 获取MOM请求Token diff --git a/Hh.Mes.Api/Startup.cs b/Hh.Mes.Api/Startup.cs index ee2cb1c..7d5932b 100644 --- a/Hh.Mes.Api/Startup.cs +++ b/Hh.Mes.Api/Startup.cs @@ -1,9 +1,11 @@ using System; using System.IO; using System.Reflection; +using System.Threading.Tasks; using Hh.Mes.Api.AOP; using Hh.Mes.API.AOP; using Hh.Mes.Common.config; +using Hh.Mes.Service; using Hh.Mes.Service.Repository; using Hh.Mes.Service.SystemAuth; using Microsoft.AspNetCore.Builder; @@ -100,7 +102,13 @@ namespace Hh.Mes.Api services.AddScoped<NormalAuthStrategy>(); services.AddScoped(typeof(IAuth), typeof(LocalAuth)); #endregion - + + //���ݿ������Ƿ�ɹ� + Task.Factory.StartNew(() => + { + new BaseInfoCacheService().CheckDatabaseConnected(); + }); + } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. diff --git a/document/会议记录/华恒-IoT设备云平台启动会-会议记录0305.docx b/document/会议记录/华恒-IoT设备云平台启动会-会议记录0305.docx new file mode 100644 index 0000000..0ca768a --- /dev/null +++ b/document/会议记录/华恒-IoT设备云平台启动会-会议记录0305.docx diff --git a/document/开发计划/~$IoT平台V2.0.xlsx b/document/开发计划/~$IoT平台V2.0.xlsx new file mode 100644 index 0000000..f1dffe4 --- /dev/null +++ b/document/开发计划/~$IoT平台V2.0.xlsx diff --git a/document/软件设计图/IoT架构图.drawio b/document/软件设计图/IoT架构图.drawio new file mode 100644 index 0000000..fb1066b --- /dev/null +++ b/document/软件设计图/IoT架构图.drawio @@ -0,0 +1,219 @@ +<mxfile host="65bd71144e"> + <diagram id="u5RV28YGxslQ54ZlnaUB" name="第 1 页"> + <mxGraphModel dx="797" dy="394" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="0"/> + <mxCell id="1" parent="0"/> + <mxCell id="2" value="显示层" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ccffe6;fontColor=#0D0C0C;strokeColor=#2D7600;" parent="1" vertex="1"> + <mxGeometry x="60" y="50" width="100" height="70" as="geometry"/> + </mxCell> + <mxCell id="5" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;imageAspect=0;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAA6gAAACBCAYAAADNCpdLAAAgAElEQVR4Ae2d91dV196vz//x3nvPO95f7xhvzrFgjBUQRIMNUUFs2HuPGiOiYu8VsTfsHRURFbEioGKLHSOW5KSdk6g5iUb93DFX3u2VtrOBtTdr7/04xhxI2Wuv9f0+szx7zjXXX8Q/IkAEiAARIAJEgAgQASJABIgAESACDojAXxxwDpwCESACRIAIEAEiQASIABEgAkSACBABIahAQASIABEgAkSACBABIkAEiAARIAKOiACC6og0cBJEgAgQASJABIgAESACRIAIEAEigKDCABEgAkSACBABIkAEiAARIAJEgAg4IgIVCuoPP/ygkydPKi0tTbNmzdKUKVMoxAAGYAAGYAAGYAAGYAAGYAAGYMBjBqZPn65ly5YpIyNDT58+1bt37/5UgssJanFxsRYsWKC4uDiFhoYqJCREderUoRADGIABGIABGIABGIABGIABGIABjxmoV6+emjZtqg4dOmjy5Mm6du2a3r5961ZSSwmqmTldu3atWraKUufe3ZScNk/zd67Wor3rKcQABmAABmAABmAABmAABmAABmDAYwbm71qraesWq+fw/moRFWmtzi0pKfFcUIuKitS3b1+179pJacd26vTPd1Xw5oku6WsKMYABGIABGIABGIABGIABGIABGPCYgYK3T3XuZbG2XzmurgMT1aZtG+Xk5HguqMePH1dERIT6jh2qU/+87fEbI7AIPAzAAAzAAAzAAAzAAAzAAAzAQEUM5P/+WGPmTNYnjRtpx44dev36daWSWmqJr7l51dxzOnjSGGZO+WSEDyhgAAZgAAZgAAZgAAZgAAZgwBYGJi2frUZNm2jNmjV68eKFZ4J64MAB64bXIZM/s+UkKrJnfsanKjAAAzAAAzAAAzAAAzAAAzAQXAxMXjlPjZs31cqVK/XTTz8hqFSA4KoA5Jt8wwAMwAAMwAAMwAAMwIBzGEBQmYpnFhwGYAAGYAAGYAAGYAAGYAAGHMEAggqIjgCRT62c86kVuSAXMAADMAADMAADMAADtcUAgoqgIqgwAAMwAAMwAAMwAAMwAAMw4AgGEFRAdASItfUJDe/Lp4MwAAMwAAMwAAMwAAMw4BwGEFQEFUGFARiAARiAARiAARiAARiAAUcwgKACoiNA5FMr53xqRS7IBQzA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;" parent="1" vertex="1"> + <mxGeometry x="200" y="50" width="610" height="72" as="geometry"/> + </mxCell> + <mxCell id="7" value="前端UI" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#080808;fontColor=#0D0C0C;fillColor=#99ff99;" parent="1" vertex="1"> + <mxGeometry x="60" y="179" width="100" height="63" as="geometry"/> + </mxCell> + <mxCell id="8" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#080808;fontColor=#0D0C0C;fillColor=#ccff99;labelPosition=left;verticalLabelPosition=top;align=right;verticalAlign=bottom;" parent="1" vertex="1"> + <mxGeometry x="200" y="179" width="350" height="63" as="geometry"/> + </mxCell> + <mxCell id="11" value="WEB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#0D0C0C;" parent="1" vertex="1"> + <mxGeometry x="190" y="175" width="60" height="30" as="geometry"/> + </mxCell> + <mxCell id="12" value="LayUI" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="242" y="192" width="60" height="30" as="geometry"/> + </mxCell> + <mxCell id="13" value="Jquery" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="326" y="192" width="60" height="30" as="geometry"/> + </mxCell> + <mxCell id="14" value="vue" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="407" y="192" width="60" height="30" as="geometry"/> + </mxCell> + <mxCell id="15" value="百度地图" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="483" y="192" width="60" height="30" as="geometry"/> + </mxCell> + <mxCell id="16" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#080808;fontColor=#0D0C0C;fillColor=#ccff99;labelPosition=left;verticalLabelPosition=top;align=right;verticalAlign=bottom;" parent="1" vertex="1"> + <mxGeometry x="570" y="177" width="240" height="65" as="geometry"/> + </mxCell> + <mxCell id="17" value="APP" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#0D0C0C;" parent="1" vertex="1"> + <mxGeometry x="560" y="172" width="60" height="30" as="geometry"/> + </mxCell> + <mxCell id="18" value="Android/IOS" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="604" y="194.5" width="80" height="30" as="geometry"/> + </mxCell> + <mxCell id="19" value="小程序" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="709" y="195.5" width="60" height="30" as="geometry"/> + </mxCell> + <mxCell id="20" value="" style="shape=flexArrow;endArrow=classic;html=1;fontColor=#0D0C0C;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="340" y="126" as="sourcePoint"/> + <mxPoint x="340" y="175" as="targetPoint"/> + <Array as="points"/> + </mxGeometry> + </mxCell> + <mxCell id="24" value="交换层" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#080808;fontColor=#0D0C0C;fillColor=#99ff99;" parent="1" vertex="1"> + <mxGeometry x="60" y="310" width="100" height="63" as="geometry"/> + </mxCell> + <mxCell id="26" value="" style="shape=flexArrow;endArrow=classic;html=1;fontColor=#0D0C0C;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="655.41" y="172" as="sourcePoint"/> + <mxPoint x="655.41" y="122" as="targetPoint"/> + <Array as="points"/> + </mxGeometry> + </mxCell> + <mxCell id="27" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#080808;fontColor=#0D0C0C;fillColor=#ffcc99;labelPosition=left;verticalLabelPosition=top;align=right;verticalAlign=bottom;" parent="1" vertex="1"> + <mxGeometry x="200" y="310" width="170" height="63" as="geometry"/> + </mxCell> + <mxCell id="29" value="MVC" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="251" y="326.5" width="88" height="30" as="geometry"/> + </mxCell> + <mxCell id="30" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#080808;fontColor=#0D0C0C;fillColor=#ffcc99;labelPosition=left;verticalLabelPosition=top;align=right;verticalAlign=bottom;" parent="1" vertex="1"> + <mxGeometry x="400" y="310" width="272" height="63" as="geometry"/> + </mxCell> + <mxCell id="31" value="Ajax交互" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#0D0C0C;" parent="1" vertex="1"> + <mxGeometry x="401" y="326.5" width="60" height="30" as="geometry"/> + </mxCell> + <mxCell id="32" value="Get请求" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="463" y="326.5" width="88" height="30" as="geometry"/> + </mxCell> + <mxCell id="34" value="Get请求" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="569" y="326.5" width="93" height="30" as="geometry"/> + </mxCell> + <mxCell id="36" value="后端" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#080808;fontColor=#0D0C0C;fillColor=#99ff99;" parent="1" vertex="1"> + <mxGeometry x="60" y="434" width="100" height="190" as="geometry"/> + </mxCell> + <mxCell id="37" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#080808;fontColor=#0D0C0C;fillColor=#ccff99;" parent="1" vertex="1"> + <mxGeometry x="200" y="434" width="140" height="190" as="geometry"/> + </mxCell> + <mxCell id="38" value="API" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#0D0C0C;" parent="1" vertex="1"> + <mxGeometry x="191" y="434" width="60" height="30" as="geometry"/> + </mxCell> + <mxCell id="39" value="看板接口" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#0D0C0C;" parent="1" vertex="1"> + <mxGeometry x="220" y="474" width="60" height="30" as="geometry"/> + </mxCell> + <mxCell id="40" value="维护报表接口" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#0D0C0C;" parent="1" vertex="1"> + <mxGeometry x="220" y="524" width="80" height="30" as="geometry"/> + </mxCell> + <mxCell id="41" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#080808;fontColor=#0D0C0C;fillColor=#ccff99;" parent="1" vertex="1"> + <mxGeometry x="353" y="433" width="317" height="190" as="geometry"/> + </mxCell> + <mxCell id="42" value="APP接口" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#0D0C0C;" parent="1" vertex="1"> + <mxGeometry x="220" y="568" width="80" height="30" as="geometry"/> + </mxCell> + <mxCell id="43" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;dashed=1;" parent="1" vertex="1"> + <mxGeometry x="375" y="466" width="135" height="148" as="geometry"/> + </mxCell> + <mxCell id="44" value="管理系统" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#0D0C0C;" parent="1" vertex="1"> + <mxGeometry x="353" y="434" width="60" height="30" as="geometry"/> + </mxCell> + <mxCell id="45" value="业务系统" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#0D0C0C;" parent="1" vertex="1"> + <mxGeometry x="375" y="466" width="60" height="30" as="geometry"/> + </mxCell> + <mxCell id="46" value="业务处理" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="395" y="504" width="88" height="30" as="geometry"/> + </mxCell> + <mxCell id="47" value="数据逻辑" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="395" y="565" width="88" height="30" as="geometry"/> + </mxCell> + <mxCell id="48" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;dashed=1;" parent="1" vertex="1"> + <mxGeometry x="522.5" y="463" width="135" height="150" as="geometry"/> + </mxCell> + <mxCell id="49" value="采集系统" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#0D0C0C;" parent="1" vertex="1"> + <mxGeometry x="522.5" y="464" width="60" height="30" as="geometry"/> + </mxCell> + <mxCell id="50" value="采集端" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="542" y="504" width="88" height="30" as="geometry"/> + </mxCell> + <mxCell id="51" value="接受端" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="542" y="565" width="88" height="30" as="geometry"/> + </mxCell> + <mxCell id="52" value="日<br>志<br>记<br>录" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#080808;fontColor=#0D0C0C;fillColor=#ccff99;textDirection=rtl;" parent="1" vertex="1"> + <mxGeometry x="686.5" y="432" width="30" height="198" as="geometry"/> + </mxCell> + <mxCell id="53" value="管<br>理<br>消<br>息" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#080808;fontColor=#0D0C0C;fillColor=#ffff99;textDirection=rtl;" parent="1" vertex="1"> + <mxGeometry x="730" y="310" width="30" height="320" as="geometry"/> + </mxCell> + <mxCell id="54" value="权<br>限<br>管<br>理" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#080808;fontColor=#0D0C0C;fillColor=#ff9999;textDirection=rtl;" parent="1" vertex="1"> + <mxGeometry x="770" y="311" width="30" height="319" as="geometry"/> + </mxCell> + <mxCell id="55" value="" style="shape=flexArrow;endArrow=classic;html=1;fontColor=#0D0C0C;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="341" y="254" as="sourcePoint"/> + <mxPoint x="341" y="303" as="targetPoint"/> + <Array as="points"/> + </mxGeometry> + </mxCell> + <mxCell id="56" value="" style="shape=flexArrow;endArrow=classic;html=1;fontColor=#0D0C0C;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="656.4099999999999" y="300" as="sourcePoint"/> + <mxPoint x="656.4099999999999" y="250" as="targetPoint"/> + <Array as="points"/> + </mxGeometry> + </mxCell> + <mxCell id="59" value="数据层" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#080808;fontColor=#0D0C0C;fillColor=#99ff99;" parent="1" vertex="1"> + <mxGeometry x="60" y="704" width="100" height="63" as="geometry"/> + </mxCell> + <mxCell id="60" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#080808;fontColor=#0D0C0C;fillColor=#99ff99;labelPosition=left;verticalLabelPosition=top;align=right;verticalAlign=bottom;" parent="1" vertex="1"> + <mxGeometry x="200" y="703" width="600" height="63" as="geometry"/> + </mxCell> + <mxCell id="62" value="sqlsugar" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="287" y="724" width="88" height="30" as="geometry"/> + </mxCell> + <mxCell id="63" value="ORM" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#0D0C0C;" parent="1" vertex="1"> + <mxGeometry x="197" y="704" width="60" height="30" as="geometry"/> + </mxCell> + <mxCell id="64" value="数据缓存" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="464" y="724" width="88" height="30" as="geometry"/> + </mxCell> + <mxCell id="65" value="数据库" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="663.5" y="724" width="67" height="30" as="geometry"/> + </mxCell> + <mxCell id="66" value="" style="shape=flexArrow;endArrow=classic;html=1;fontColor=#0D0C0C;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="283" y="381" as="sourcePoint"/> + <mxPoint x="283" y="430" as="targetPoint"/> + <Array as="points"/> + </mxGeometry> + </mxCell> + <mxCell id="67" value="" style="shape=flexArrow;endArrow=classic;html=1;fontColor=#0D0C0C;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="598.4099999999999" y="427" as="sourcePoint"/> + <mxPoint x="598.4099999999999" y="377" as="targetPoint"/> + <Array as="points"/> + </mxGeometry> + </mxCell> + <mxCell id="68" value="" style="shape=flexArrow;endArrow=classic;html=1;fontColor=#0D0C0C;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="482" y="642" as="sourcePoint"/> + <mxPoint x="482" y="691" as="targetPoint"/> + <Array as="points"/> + </mxGeometry> + </mxCell> + <mxCell id="70" value="基础层" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#080808;fontColor=#0D0C0C;fillColor=#99ff99;" parent="1" vertex="1"> + <mxGeometry x="60" y="840" width="100" height="63" as="geometry"/> + </mxCell> + <mxCell id="71" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#080808;fontColor=#0D0C0C;fillColor=#99ccff;labelPosition=left;verticalLabelPosition=top;align=right;verticalAlign=bottom;" parent="1" vertex="1"> + <mxGeometry x="199" y="839" width="600" height="63" as="geometry"/> + </mxCell> + <mxCell id="73" value="netcore" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="282" y="856.5" width="88" height="30" as="geometry"/> + </mxCell> + <mxCell id="74" value="操作系统" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="422" y="856.5" width="88" height="30" as="geometry"/> + </mxCell> + <mxCell id="75" value="hslcommunication" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="560" y="856.5" width="110" height="30" as="geometry"/> + </mxCell> + <mxCell id="76" value="中间件" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=default;fontColor=#0D0C0C;fillColor=#fafafa;align=center;" parent="1" vertex="1"> + <mxGeometry x="680" y="856.5" width="110" height="30" as="geometry"/> + </mxCell> + <mxCell id="77" value="" style="shape=flexArrow;endArrow=classic;html=1;fontColor=#0D0C0C;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="482" y="780" as="sourcePoint"/> + <mxPoint x="482" y="829" as="targetPoint"/> + <Array as="points"/> + </mxGeometry> + </mxCell> + </root> + </mxGraphModel> + </diagram> +</mxfile> \ No newline at end of file diff --git a/document/软件设计图/Iot体系流程图.drawio b/document/软件设计图/Iot体系流程图.drawio new file mode 100644 index 0000000..6d4e6ba --- /dev/null +++ b/document/软件设计图/Iot体系流程图.drawio @@ -0,0 +1,217 @@ +<mxfile host="Electron" modified="2024-03-04T07:52:47.456Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/23.1.5 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="aiuqDw5x90w4hR1_VoaM" version="23.1.5" type="device"> + <diagram name="第 1 页" id="WC5L4bweZnLv3zD18TvI"> + <mxGraphModel dx="2231" dy="1299" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="Sk9KcIoX2QWr241WNbzu-2" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="125" y="150" width="565" height="507.5" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-3" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="139" y="190" width="280" height="440" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-4" value="堆垛机" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="150" y="230" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-5" value="标准输送线/提升机" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="150" y="310" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-6" value="RGV" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="150" y="390" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-7" value="环穿" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="150" y="470" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-8" value="AGV" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="150" y="554.5" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-9" value="桁架" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="290" y="230" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-10" value="焊接机器人" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="290" y="310" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-11" value="切割机" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="290" y="390" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-12" value="组对设备" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="290" y="470" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-13" value="其他设备等" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="290" y="554.5" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-14" value="上位机采集软件<br>第三方网关<br>PLC<br>单片机控制器" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="555" y="190" width="120" height="440" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-15" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;exitX=1;exitY=0.25;exitDx=0;exitDy=0;" edge="1" parent="1" source="Sk9KcIoX2QWr241WNbzu-3" target="Sk9KcIoX2QWr241WNbzu-14"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="340" y="420" as="sourcePoint" /> + <mxPoint x="390" y="370" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-16" value="按设备协议采集<br>报警,状态,实时数据" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> + <mxGeometry x="420" y="245" width="130" height="30" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-17" value="客户项目现场" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> + <mxGeometry x="370" y="150" width="120" height="30" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-18" value="公网<br>内网" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="829" y="150" width="120" height="510" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-19" value="设备" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> + <mxGeometry x="250" y="190" width="60" height="30" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-20" value="采集端<br>指令接收端" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> + <mxGeometry x="570" y="200" width="90" height="30" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-21" value="网络" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> + <mxGeometry x="859" y="160" width="60" height="30" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-24" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" edge="1" parent="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="710" y="404.65999999999997" as="sourcePoint" /> + <mxPoint x="800" y="404.65999999999997" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-25" value="MQTT<br>WebApi(https)<br>Socket<div><br/></div>" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="700" y="320" width="100" height="70" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-26" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" edge="1" parent="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="980" y="404.65999999999997" as="sourcePoint" /> + <mxPoint x="1070" y="404.65999999999997" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-27" value="MQTT<br>WebApi(https)<br>Socket<div><br/></div>" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="970" y="320" width="100" height="70" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-28" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1100" y="150" width="770" height="510" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-29" value="MQTT服务端<br>WebApi服务端<br>Socket服务端" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1120" y="210" width="120" height="430" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-30" value="接发端程序" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> + <mxGeometry x="1140" y="220" width="80" height="30" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-31" value="公司内部服务器" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> + <mxGeometry x="1440" y="160" width="100" height="30" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-32" value="数据库" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1350" y="210" width="120" height="220" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-34" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" edge="1" parent="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="1255" y="290" as="sourcePoint" /> + <mxPoint x="1335" y="289.31" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-35" value="将接受数据写入" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="1240" y="240" width="110" height="30" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-36" value="处理端程序" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1350" y="570" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-37" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="Sk9KcIoX2QWr241WNbzu-36" target="Sk9KcIoX2QWr241WNbzu-32"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="1390" y="500" as="sourcePoint" /> + <mxPoint x="1440" y="450" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-38" value="按设备协议处理消息<br>写入处理后的数据" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="1265" y="450" width="130" height="40" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-39" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1580" y="210" width="270" height="430" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-40" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" edge="1" parent="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="1480" y="289.31" as="sourcePoint" /> + <mxPoint x="1570" y="289.31" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-41" value="读取数据" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="1480" y="240" width="70" height="30" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-42" value="前台Web端程序" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> + <mxGeometry x="1667.5" y="215" width="95" height="30" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-43" value="用户管理<br>公司用户,客户用户" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1590" y="260" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-44" value="设备管理" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1720" y="260" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-45" value="项目信息管理<br>项目号,项目地等" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1590" y="340" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-46" value="设备报表<br>状态报警显示、性能指标、妥善率统计等" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1720" y="340" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-47" value="对外接口<br>设备数据查询、项目设备人员等对接接口" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1590" y="420" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-48" value="项目地图" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1720" y="420" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-49" value="SIM卡管理" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1590" y="500" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-50" value="系统参数/字典/定时器等组件" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1720" y="500" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-51" value="看板/移动端" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1720" y="570" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-52" value="设备控制" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1590" y="570" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-53" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" edge="1" parent="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="1570" y="600" as="sourcePoint" /> + <mxPoint x="1486" y="599.66" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-54" value="设备控制指令<br>授权等" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="1480" y="535" width="100" height="40" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-55" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" edge="1" parent="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="1335" y="599.66" as="sourcePoint" /> + <mxPoint x="1255" y="599.66" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-57" value="按设备协议生成指令并交给<br>接发端程序进行发送" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="1230" y="530" width="170" height="40" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-59" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;entryX=1.003;entryY=0.61;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="800" y="460" as="sourcePoint" /> + <mxPoint x="712.3449999999999" y="459.5749999999998" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-60" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;entryX=1.003;entryY=0.61;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="1063.83" y="460.43" as="sourcePoint" /> + <mxPoint x="976.175" y="460.0049999999998" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-61" value="指令发送<br>Socket" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="985" y="480" width="70" height="40" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-62" value="指令发送<br>Socket" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="715" y="480" width="70" height="40" as="geometry" /> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-63" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.75;exitDx=0;exitDy=0;entryX=1;entryY=0.75;entryDx=0;entryDy=0;" edge="1" parent="1" source="Sk9KcIoX2QWr241WNbzu-14" target="Sk9KcIoX2QWr241WNbzu-3"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="550" y="499.31" as="sourcePoint" /> + <mxPoint x="420" y="499.31" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="Sk9KcIoX2QWr241WNbzu-65" value="按设备协议<br>下发指令" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="445" y="465" width="80" height="40" as="geometry" /> + </mxCell> + </root> + </mxGraphModel> + </diagram> +</mxfile> diff --git a/document/软件设计图/设计.pptx b/document/软件设计图/设计.pptx new file mode 100644 index 0000000..071518d --- /dev/null +++ b/document/软件设计图/设计.pptx diff --git a/sys/Hh.Mes.POJO/ApiEntity/MomWorkOrder.cs b/sys/Hh.Mes.POJO/ApiEntity/MomWorkOrder.cs index 5048e4b..82c62dd 100644 --- a/sys/Hh.Mes.POJO/ApiEntity/MomWorkOrder.cs +++ b/sys/Hh.Mes.POJO/ApiEntity/MomWorkOrder.cs @@ -8,7 +8,7 @@ namespace Hh.Mes.POJO.ApiEntity /// <summary> /// Mom工单 /// </summary> - public class MomWorkOrderHead + public class MomWorkOrder { /// <summary> /// 唯一标识ID diff --git a/sys/Hh.Mes.POJO/Request/PageReq.cs b/sys/Hh.Mes.POJO/Request/PageReq.cs index 72c77a2..1a88365 100644 --- a/sys/Hh.Mes.POJO/Request/PageReq.cs +++ b/sys/Hh.Mes.POJO/Request/PageReq.cs @@ -3,14 +3,31 @@ public class PageReq { public int page { get; set; } - public int limit { get; set; } + + private int _limit = 0; + public int limit + { + get + { + if (_limit <= 0) + { + return 50; + } + else { return _limit; } + } + set + { + _limit = value; + } + + } public string field { get; set; } public string order { get; set; } public PageReq() { page = 1; - limit = 1000; + limit = 50; } } } diff --git a/sys/Hh.Mes.POJO/WebEntity/api/api_workOrder_detail.cs b/sys/Hh.Mes.POJO/WebEntity/api/api_workOrder_detail.cs index 79e590b..1520d90 100644 --- a/sys/Hh.Mes.POJO/WebEntity/api/api_workOrder_detail.cs +++ b/sys/Hh.Mes.POJO/WebEntity/api/api_workOrder_detail.cs @@ -16,98 +16,9 @@ namespace Hh.Mes.POJO.Entity public Guid headKeys { get; set; } /// <summary> - /// 工序code + /// Json /// </summary> - [SugarColumn(Length = 40, ColumnDescription = "工序code", IsNullable = true)] - public string oprSequenceCode { get; set; } - - - /// <summary> - /// 计划开始时间 - /// </summary> - [SugarColumn(ColumnDescription = "计划开始时间", IsNullable = true)] - public DateTime planStartTime { get; set; } - - /// <summary> - /// 计划结束时间 - /// </summary> - [SugarColumn(ColumnDescription = "计划结束时间", IsNullable = true)] - public DateTime planEndTime { get; set; } - - /// <summary> - /// 管段物料编码 切割工序 - /// </summary> - [SugarColumn(Length = 40, ColumnDescription = "管段物料编码 切割工序", IsNullable = true)] - public string cutMaterCode { get; set; } - - /// <summary> - /// 管段切割长度 切割工序 - /// </summary> - [SugarColumn(ColumnDescription = "管段切割长度 切割工序", IsNullable = true)] - public double cuttingLength { get; set; } - - /// <summary> - /// 焊口形式对焊BW/插焊SW/支架角焊缝FW 焊接工序 - /// </summary> - [SugarColumn(Length = 40, ColumnDescription = "焊口形式对焊BW/插焊SW/支架角焊缝FW 焊接工序", IsNullable = true)] - public string weldType { get; set; } - - /// <summary> - /// 焊口号 焊接工序 - /// </summary> - [SugarColumn(Length = 40, ColumnDescription = "焊口号 焊接工序", IsNullable = true)] - public string weldNo { get; set; } - - /// <summary> - /// 焊口物料 焊接工序 - /// </summary> - [SugarColumn(Length = 40, ColumnDescription = "焊口物料 焊接工序", IsNullable = true)] - public string weldMaterCode { get; set; } - - /// <summary> - /// 是否成品管0:否,1:是 - /// </summary> - [SugarColumn(ColumnDescription = "是否成品管0:否,1:是", IsNullable = true)] - public int isEndProduct { get; set; } - - - /// <summary> - /// 扩展字段1 - /// </summary> - [SugarColumn(Length = 40, ColumnDescription = "扩展字段3", IsNullable = true)] - public string extend1 { get; set; } - - /// <summary> - /// 扩展字段2 - /// </summary> - [SugarColumn(Length = 40, ColumnDescription = "扩展字段4", IsNullable = true)] - public string extend2 { get; set; } - - - /// <summary> - /// extendComp1 - /// </summary> - [SugarColumn(Length = 40, ColumnDescription = "扩展字段1", IsNullable = true)] - public string extendComp1 { get; set; } - - /// <summary> - /// extendComp2 - /// </summary> - [SugarColumn(Length = 40, ColumnDescription = "扩展字段2", IsNullable = true)] - public string extendComp2 { get; set; } - - - /// <summary> - /// extendComp3 - /// </summary> - [SugarColumn(Length = 40, ColumnDescription = "扩展字段3", IsNullable = true)] - public string extendComp3 { get; set; } - - /// <summary> - /// extendComp4 - /// </summary> - [SugarColumn(Length = 40, ColumnDescription = "扩展字段4", IsNullable = true)] - public string extendComp4 { get; set; } + public string JsonValue { get; set; } /// <summary> /// 建立时间 diff --git a/sys/Hh.Mes.Service/ApiService/UpstreamDown/UpstreamService.cs b/sys/Hh.Mes.Service/ApiService/UpstreamDown/UpstreamService.cs index 4e4a6d5..8d1ea3e 100644 --- a/sys/Hh.Mes.Service/ApiService/UpstreamDown/UpstreamService.cs +++ b/sys/Hh.Mes.Service/ApiService/UpstreamDown/UpstreamService.cs @@ -51,6 +51,11 @@ namespace Hh.Mes.Service.ApiService /// <returns></returns> public ResponseUpstream<string> typeValidation(string type, ResponseUpstream<string> response) { + if (string.IsNullOrEmpty(type)) + { + type = "I"; + return response; + } if ("IUD".IndexOf(type)==-1) { response.ResponseError($"【上位系统】【type 只能是I或者U或者D标识】,请核实确认!"); diff --git a/sys/Hh.Mes.Service/ApiService/UpstreamDown/UpstreamService_WorkOrder.cs b/sys/Hh.Mes.Service/ApiService/UpstreamDown/UpstreamService_WorkOrder.cs new file mode 100644 index 0000000..3995b02 --- /dev/null +++ b/sys/Hh.Mes.Service/ApiService/UpstreamDown/UpstreamService_WorkOrder.cs @@ -0,0 +1,94 @@ +using Hh.Mes.Common.log; +using Hh.Mes.POJO.ApiEntity; +using Hh.Mes.POJO.Entity; +using Hh.Mes.POJO.Response; +using Hh.Mes.POJO.WebEntity; +using NPOI.POIFS.FileSystem; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Hh.Mes.Service.ApiService +{ + public partial class UpstreamService + { + #region 属性 + + /// <summary> + /// 华恒线体code + /// </summary> + private string Sys_LineCode { get; set; } + + private base_work_center work_center { get; set; } + + /// <summary> + /// 产品表 + /// </summary> + private base_product_header Sys_ProductHeader { get; set; } + + + + /// <summary> + /// 工艺路线头 + /// </summary> + private base_process_route_head Sys_ProcessHead { get; set; } + + /// <summary> + /// 工艺路线明细 + /// </summary> + private List<base_process_route_detail> Sys_ProcessDetail { get; set; } + + /// <summary> + /// 输出返回实体 + /// </summary> + private ResponseUpstream<string> ResponseOrder { get; set; } + + /// <summary> + /// Json 接受实体 + /// </summary> + private MomWorkOrder MomEntity { get; set; } + + + #region 切割、组队、焊接工序 + /// <summary> + /// 切割工序 + /// </summary> + private base_process_route_detail Sys_process_cut { get; set; } + + /// <summary> + /// 组队工序 + /// </summary> + private base_process_route_detail Sys_process_fitUp { get; set; } + + /// <summary> + /// 焊接工序 + /// </summary> + private base_process_route_detail Sys_process_weld { get; set; } + #endregion + + //工序任务 管段号 同一组工序明细的值 一样 + private string Part_Code { get; set; } + + /// <summary> + /// 更新数据使用 缓存工序任务头变量 + /// </summary> + private bus_workOrder_head busWkHead { get; set; } + + /// <summary> + /// 订单类型名称 + /// </summary> + private string proOrderTypeName { get; set; } + #endregion + + public dynamic SendWorkOrder(MomWorkOrder requestData) + { + return ExceptionsHelp.Instance.ExecuteT(() => + { + this.MomEntity = requestData; + ResponseOrder = new ResponseUpstream<string>(requestData.plmeid); + + return ""; + }); + } + } +} diff --git a/sys/Hh.Mes.Service/ApiService/UpstreamDown/UpstreamService_WorkOrder_Method.cs b/sys/Hh.Mes.Service/ApiService/UpstreamDown/UpstreamService_WorkOrder_Method.cs new file mode 100644 index 0000000..8386b25 --- /dev/null +++ b/sys/Hh.Mes.Service/ApiService/UpstreamDown/UpstreamService_WorkOrder_Method.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Hh.Mes.Service.ApiService +{ + public partial class UpstreamService + { + } +} diff --git a/sys/Hh.Mes.Service/base/BaseInfoCacheService.cs b/sys/Hh.Mes.Service/base/BaseInfoCacheService.cs index c1de812..aaf931d 100644 --- a/sys/Hh.Mes.Service/base/BaseInfoCacheService.cs +++ b/sys/Hh.Mes.Service/base/BaseInfoCacheService.cs @@ -99,5 +99,34 @@ namespace Hh.Mes.Service //var dt = Context.Ado.GetDataTable(sqlMater); return null; } + + /// <summary> + /// api 启动检查数据库是否已连接上 + /// </summary> + public void CheckDatabaseConnected() + { + var isConnection = false; + ExceptionsHelp.Instance.ExecuteT(() => + { + Console.WriteLine(); + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine($"The database is being connected......"); + Console.WriteLine(); + var sql = baseSql["base_factory"]; + Context.Ado.GetDataTable(sql); + return ""; + }, actionCatCh: () => + { + isConnection = true; + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine(); + Console.WriteLine($"The database connection is Error!Please Check Connection 【{ConfigRead.GetInstance.GetAppsetConnection().BaseDBContext}】"); + Console.WriteLine(); + Console.ResetColor(); + }, actionFinally: () => + { + if (!isConnection) Console.WriteLine("The database connection is successful"); + }); + } } } diff --git a/web/WebMvc/Areas/Planned/Controllers/GeneratorController.cs b/web/WebMvc/Areas/Planned/Controllers/GeneratorController.cs index 7ee0b50..c39ebeb 100644 --- a/web/WebMvc/Areas/Planned/Controllers/GeneratorController.cs +++ b/web/WebMvc/Areas/Planned/Controllers/GeneratorController.cs @@ -1,4 +1,5 @@ -using Hh.Mes.Common.Reflect; +using Hh.Mes.Common.config; +using Hh.Mes.Common.Reflect; using Hh.Mes.Common.Request; using Hh.Mes.POJO.Entity; using Hh.Mes.POJO.Response; @@ -36,6 +37,10 @@ namespace WebMvc.Areas.Planned.Controllers public IActionResult Index() { + if (ConfigRead.GetInstance.GetAppsetConnection().IsDevelopment) + { + return Redirect("/htmlTemp/403.html"); + } return View(); } diff --git a/web/WebMvc/wwwroot/htmlTemp/403.html b/web/WebMvc/wwwroot/htmlTemp/403.html new file mode 100644 index 0000000..fed7833 --- /dev/null +++ b/web/WebMvc/wwwroot/htmlTemp/403.html @@ -0,0 +1,49 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset='utf-8'> + <title>500 页面</title> + <style type='text/css'> + body { + margin: 8% auto 0; + max-width: 400px; + min-height: 200px; + padding: 10px; + font-family: 'PingFang SC', 'Microsoft YaHei', 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif; + font-size: 14px; + padding-right: 200px; + position: relative; + } + + p { + color: #555; + margin: 15px 0px; + } + + img { + border: 0px; + } + + .d { + color: #404040; + } + + .robot img { + max-width: 192px; + } + + .robot { + position: absolute; + top: 0; + right: 0; + } + </style> +</head> +<body> +<div style="margin-top:20px"> + <p style=""><b style="">403.</b> There are no permissions</p> + <p class="d">线上环境没有权限使用。</p> + <a href="javascript:history.go(-1);">向上一页</a> +</div> +</body> +</html> \ No newline at end of file diff --git a/web/WebMvc/wwwroot/js/index.js b/web/WebMvc/wwwroot/js/index.js index 933180e..aba9ea4 100644 --- a/web/WebMvc/wwwroot/js/index.js +++ b/web/WebMvc/wwwroot/js/index.js @@ -155,13 +155,13 @@ layui.config({ url = thisInfo.attr("data-url"); //默认加上缓存的动态参数 if (url != null && url.indexOf("sysWhere") > -1) { - Object.keys(localStorage).forEach(x => { - if (x.indexOf("sysWhere") > -1) { - url += `${url}&${x}=${localStorage.getItem(x)}` - } - }) - thisInfo.attr("data-url", url) - url = thisInfo.attr("data-url"); + var urlWhere = Object.keys(localStorage) + .filter(x => x.includes("sysWhere")) + .map(x => `${x}=${localStorage.getItem(x)}`) + .join("&"); + + url = url.includes("?") ? `${url}&${urlWhere}` : `${url}?${urlWhere}`; + thisInfo.attr("data-url", url); } //如果不存在子级 _x if (thisInfo.siblings().length == 0 && url != undefined) {