docs(output): add generated document exports

This commit is contained in:
tangweijie 2026-05-18 17:38:06 +08:00
parent c6af582095
commit 226816c6bf
105 changed files with 50520 additions and 0 deletions

View File

@ -0,0 +1,453 @@
<mxfile host="Electron" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/29.6.6 Chrome/144.0.7559.236 Electron/40.8.4 Safari/537.36" version="29.6.6" pages="3">
<diagram id="zones" name="网络分区图">
<mxGraphModel grid="1" page="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" pageScale="1" pageWidth="1800" pageHeight="1000" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="9ridG9Hz4lSlouddoKVb-23" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;strokeWidth=2;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=8;" value="核心区" vertex="1">
<mxGeometry height="600" width="380" x="1060" y="-64" as="geometry" />
</mxCell>
<mxCell id="9ridG9Hz4lSlouddoKVb-22" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#eff6ff;strokeColor=#2563eb;strokeWidth=2;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=8;" value="办公区" vertex="1">
<mxGeometry height="178" width="200" x="140" y="-68" as="geometry" />
</mxCell>
<mxCell id="z1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff7ed;strokeColor=#ea580c;strokeWidth=2;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=8;" value="Untrust&#xa;外网区域" vertex="1">
<mxGeometry height="424" width="200" x="140" y="120" as="geometry" />
</mxCell>
<mxCell id="m1" parent="1" style="strokeColor=#ffffff;sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.people.standing_man_2;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="移动端用户" vertex="1">
<mxGeometry height="70" width="40" x="230" y="135" as="geometry" />
</mxCell>
<mxCell id="m2" parent="1" style="sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.computers_and_peripherals.pc;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="第三方系统" vertex="1">
<mxGeometry height="80" width="80" x="210" y="264" as="geometry" />
</mxCell>
<mxCell id="m3" parent="1" style="sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.buildings.government_building;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="银行系统&#xa;公网/专线" vertex="1">
<mxGeometry height="80" width="80" x="210" y="367" as="geometry" />
</mxCell>
<mxCell id="z2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fffbeb;strokeColor=#d97706;strokeWidth=2;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=8;" value="DMZ&#xa;对外服务区" vertex="1">
<mxGeometry height="608" width="280" x="370" y="-68" as="geometry" />
</mxCell>
<mxCell id="nginx" parent="1" style="strokeColor=#ffffff;sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.servers.www_server;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="Nginx 入口" vertex="1">
<mxGeometry height="82" width="85" x="480" y="123" as="geometry" />
</mxCell>
<mxCell id="ftp" parent="1" style="strokeColor=#ffffff;sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.servers.fileserver;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="SFTP/FTP&#xa;文件交换服务器" vertex="1">
<mxGeometry height="88" width="70" x="565" y="367" as="geometry" />
</mxCell>
<mxCell id="z3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#eff6ff;strokeColor=#2563eb;strokeWidth=2;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=8;" value="服务器区域" vertex="1">
<mxGeometry height="610" width="330" x="670" y="-70" as="geometry" />
</mxCell>
<mxCell id="pc" parent="1" style="sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.computers_and_peripherals.pc;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="PC 端用户&#xa;办公网段" vertex="1">
<mxGeometry height="92" width="95" x="190" y="-20" as="geometry" />
</mxCell>
<mxCell id="svc" parent="1" style="sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.misc.hp_mini;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="综合节点&lt;br&gt;中间件&lt;div&gt;数据库存储控制&lt;/div&gt;" vertex="1">
<mxGeometry height="73.38" width="80" x="780" y="345.31" as="geometry" />
</mxCell>
<mxCell id="db1" parent="1" style="strokeColor=#ffffff;sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.storage.relational_database;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="PostgreSQL 主库" vertex="1">
<mxGeometry height="84" width="118" x="1100" y="330" as="geometry" />
</mxCell>
<mxCell id="db2" parent="1" style="strokeColor=#ffffff;sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.storage.relational_database;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="PostgreSQL 热备" vertex="1">
<mxGeometry height="84" width="118" x="1100" y="180" as="geometry" />
</mxCell>
<mxCell id="bak" parent="1" style="strokeColor=#ffffff;sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.servers.fileserver;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="备份归档存储" vertex="1">
<mxGeometry height="84" width="60" x="1360" y="180" as="geometry" />
</mxCell>
<mxCell id="e1" edge="1" parent="1" source="m1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="nginx" value="HTTPS 443">
<mxGeometry relative="1" as="geometry">
<mxPoint x="380" y="145" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="e2" edge="1" parent="1" source="m2" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;" target="nginx" value="HTTPS/API">
<mxGeometry relative="1" as="geometry">
<mxPoint x="415" y="171.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="e2b" edge="1" parent="1" source="m3" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="ftp" value="公网隧道&lt;span style=&quot;background-color: light-dark(#ffffff, var(--ge-dark-color, #121212)); color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;/专线&lt;/span&gt;21/22 银行文件交换">
<mxGeometry relative="1" x="0.1096" y="-3" as="geometry">
<mxPoint as="offset" />
<mxPoint x="380" y="407" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="e3" edge="1" parent="1" source="pc" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="nginx" value="办公网访问,内网 IP">
<mxGeometry relative="1" as="geometry">
<mxPoint x="510" y="104" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="e4" edge="1" parent="1" source="nginx" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;" target="9ridG9Hz4lSlouddoKVb-13" value="API转发">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="560" y="124" />
<mxPoint x="560" y="130" />
<mxPoint x="694" y="130" />
</Array>
<mxPoint x="565" y="165" as="sourcePoint" />
<mxPoint x="817.3199999999999" y="256.38000000000045" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="e8" edge="1" parent="1" source="9ridG9Hz4lSlouddoKVb-13" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="svc" value="业务访问">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e10" edge="1" parent="1" source="9ridG9Hz4lSlouddoKVb-13" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;exitX=0.035;exitY=0.76;exitDx=0;exitDy=0;exitPerimeter=0;" target="ftp" value="21/22 文件交换">
<mxGeometry relative="1" as="geometry">
<mxPoint as="offset" />
<Array as="points">
<mxPoint x="703" y="210" />
<mxPoint x="600" y="210" />
</Array>
<mxPoint x="1010" y="286" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="e11" edge="1" parent="1" source="svc" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="db1" value="5432 数据库访问">
<mxGeometry relative="1" x="-0.0013" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="e12" edge="1" parent="1" source="svc" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;dashed=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" target="db2" value="5432 状态探测">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="980" y="350" />
<mxPoint x="980" y="222" />
</Array>
<mxPoint x="1160" y="446" as="sourcePoint" />
<mxPoint x="1339" y="104.00000000000023" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="e13" edge="1" parent="1" source="db1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;exitX=0.5;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;" target="db2" value="主备同步">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e14" edge="1" parent="1" source="db1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="bak" value="备份/WAL">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e15" edge="1" parent="1" source="db2" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="bak" value="备份副本">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e16" edge="1" parent="1" source="svc" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;exitX=0.9;exitY=0.9;exitDx=0;exitDy=0;exitPerimeter=0;" target="bak" value="文件归档">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="852" y="440" />
<mxPoint x="1420" y="440" />
</Array>
<mxPoint x="1130" y="468.04761904761926" as="sourcePoint" />
<mxPoint x="1487.0476190476188" y="371.99999999999955" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="HN1-GFPAo3kp1Sdrea_3-7" edge="1" parent="1" source="z1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" target="z1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="app1" parent="1" style="sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.misc.hp_mini;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="业务应用节点 1&#xa;Spring Boot Gateway&#xa;业务服务" vertex="1">
<mxGeometry height="73" width="90" x="775" y="144" as="geometry" />
</mxCell>
<mxCell id="app2" parent="1" style="sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.misc.hp_mini;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="业务应用节点 2&#xa;Spring Boot Gateway&#xa;业务服务" vertex="1">
<mxGeometry height="72" width="90" x="777.5" y="-5" as="geometry" />
</mxCell>
<mxCell id="9ridG9Hz4lSlouddoKVb-13" parent="1" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;sketch=0;pointerEvents=1;strokeColor=#99CCFF;strokeWidth=2;align=center;verticalAlign=top;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=none;perimeterSpacing=6;" value="" vertex="1">
<mxGeometry height="305" width="240" x="701.5" y="-22" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="links" name="网络连接图">
<mxGraphModel dx="1129" dy="742" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1800" pageHeight="1000" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="lz1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff7ed;strokeColor=#ea580c;strokeWidth=2;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=8;" value="Untrust&#xa;外网区域" vertex="1">
<mxGeometry height="220" width="260" x="30" y="90" as="geometry" />
</mxCell>
<mxCell id="lm1" parent="1" style="shape=mxgraph.cisco.people.man;html=1;fillColor=#ffffff;strokeColor=#ea580c;" value="移动端用户" vertex="1">
<mxGeometry height="80" width="80" x="60" y="145" as="geometry" />
</mxCell>
<mxCell id="lm2" parent="1" style="shape=mxgraph.cisco.misc.generic_building;html=1;fillColor=#ffffff;strokeColor=#ea580c;" value="第三方系统" vertex="1">
<mxGeometry height="80" width="80" x="160" y="145" as="geometry" />
</mxCell>
<mxCell id="lm3" parent="1" style="shape=mxgraph.cisco.misc.generic_building;html=1;fillColor=#ffffff;strokeColor=#ea580c;" value="银行系统&#xa;公网/专线" vertex="1">
<mxGeometry height="80" width="110" x="95" y="230" as="geometry" />
</mxCell>
<mxCell id="ldmz" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fffbeb;strokeColor=#d97706;strokeWidth=2;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=8;" value="DMZ&#xa;对外服务区" vertex="1">
<mxGeometry height="250" width="300" x="340" y="70" as="geometry" />
</mxCell>
<mxCell id="lnginx" parent="1" style="shape=mxgraph.cisco.servers.server;html=1;fillColor=#ffffff;strokeColor=#d97706;" value="内网 Nginx 入口节点" vertex="1">
<mxGeometry height="82" width="105" x="435" y="118" as="geometry" />
</mxCell>
<mxCell id="lftp" parent="1" style="shape=mxgraph.cisco.servers.server;html=1;fillColor=#fff1f2;strokeColor=#dc2626;strokeWidth=2;" value="SFTP/FTP&#xa;文件交换服务器" vertex="1">
<mxGeometry height="88" width="145" x="415" y="220" as="geometry" />
</mxCell>
<mxCell id="llan" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eff6ff;strokeColor=#2563eb;strokeWidth=2;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=8;" value="LAN&#xa;办公与应用区" vertex="1">
<mxGeometry height="360" width="560" x="690" y="50" as="geometry" />
</mxCell>
<mxCell id="lpc" parent="1" style="shape=mxgraph.cisco.people.man;html=1;fillColor=#ffffff;strokeColor=#2563eb;" value="PC 端用户&#xa;办公网段" vertex="1">
<mxGeometry height="92" width="95" x="720" y="108" as="geometry" />
</mxCell>
<mxCell id="lsw" parent="1" style="shape=mxgraph.cisco.switches.workgroup_switch;html=1;fillColor=#ffffff;strokeColor=#2563eb;" value="应用区交换" vertex="1">
<mxGeometry height="74" width="104" x="870" y="130" as="geometry" />
</mxCell>
<mxCell id="lapp1" parent="1" style="shape=mxgraph.cisco.servers.server;html=1;fillColor=#ffffff;strokeColor=#2563eb;" value="业务应用节点 1&#xa;Spring Boot Gateway&#xa;业务服务" vertex="1">
<mxGeometry height="96" width="120" x="1010" y="102" as="geometry" />
</mxCell>
<mxCell id="lapp2" parent="1" style="shape=mxgraph.cisco.servers.server;html=1;fillColor=#ffffff;strokeColor=#2563eb;" value="业务应用节点 2&#xa;Spring Boot Gateway&#xa;业务服务" vertex="1">
<mxGeometry height="96" width="120" x="1010" y="228" as="geometry" />
</mxCell>
<mxCell id="lsvc" parent="1" style="shape=mxgraph.cisco.servers.server;html=1;fillColor=#f8f4ff;strokeColor=#7c3aed;strokeWidth=2;" value="综合节点&#xa;缓存: Redis&#xa;配置: Nacos&#xa;对象存储: MinIO&#xa;数据库控制: HAProxy / PgBouncer / Patroni" vertex="1">
<mxGeometry height="134" width="200" x="800" y="245" as="geometry" />
</mxCell>
<mxCell id="lcore" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#059669;strokeWidth=2;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=8;" value="Core&#xa;核心数据区" vertex="1">
<mxGeometry height="280" width="470" x="1300" y="90" as="geometry" />
</mxCell>
<mxCell id="ldb1" parent="1" style="shape=mxgraph.cisco.servers.database;html=1;fillColor=#ffffff;strokeColor=#059669;" value="PostgreSQL 主库" vertex="1">
<mxGeometry height="84" width="118" x="1355" y="145" as="geometry" />
</mxCell>
<mxCell id="ldb2" parent="1" style="shape=mxgraph.cisco.servers.database;html=1;fillColor=#ffffff;strokeColor=#059669;" value="PostgreSQL 热备" vertex="1">
<mxGeometry height="84" width="118" x="1510" y="145" as="geometry" />
</mxCell>
<mxCell id="lbak" parent="1" style="shape=mxgraph.cisco.storage.storage_array;html=1;fillColor=#ffffff;strokeColor=#d97706;strokeWidth=2;" value="备份归档存储" vertex="1">
<mxGeometry height="84" width="170" x="1432" y="260" as="geometry" />
</mxCell>
<mxCell id="le1" edge="1" parent="1" source="lm1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="lnginx" value="HTTPS 443">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="le2" edge="1" parent="1" source="lm2" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="lnginx" value="HTTPS/API">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="le2b" edge="1" parent="1" source="lm3" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="lftp" value="21/22 银行文件交换">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="le3" edge="1" parent="1" source="lpc" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="lnginx" value="办公网访问">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="le4" edge="1" parent="1" source="lnginx" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="lsw" value="API转发">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="le5" edge="1" parent="1" source="lsw" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="lapp1" value="节点1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="le6" edge="1" parent="1" source="lsw" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="lapp2" value="节点2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="le7" edge="1" parent="1" source="lapp1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="lsvc" value="业务访问">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="le8" edge="1" parent="1" source="lapp2" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="lsvc" value="业务访问">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="le9" edge="1" parent="1" source="lapp1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="lftp" value="21/22 文件交换">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="le10" edge="1" parent="1" source="lapp2" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="lftp" value="21/22 文件交换">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="le11" edge="1" parent="1" source="lsvc" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="ldb1" value="5432 数据库访问">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="le12" edge="1" parent="1" source="lsvc" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;dashed=1;" target="ldb2" value="5432 状态探测">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="le13" edge="1" parent="1" source="ldb1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="ldb2" value="主备同步">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="le14" edge="1" parent="1" source="ldb1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="lbak" value="备份/WAL">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="le15" edge="1" parent="1" source="ldb2" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="lbak" value="备份副本">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="le16" edge="1" parent="1" source="lsvc" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="lbak" value="文件归档">
<mxGeometry relative="1" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="1P_7QRTpX64gtdREb-dQ" name="讨论版本">
<mxGraphModel dx="1298" dy="853" 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="cTkcAQCcS-jnWanXpuNl-1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;strokeWidth=2;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=8;" value="内网区" vertex="1">
<mxGeometry height="610" width="470" x="920" y="480" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#eff6ff;strokeColor=#2563eb;strokeWidth=2;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=8;" value="办公区" vertex="1">
<mxGeometry height="178" width="200" x="140" y="482" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff7ed;strokeColor=#ea580c;strokeWidth=2;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=8;" value="公网区域" vertex="1">
<mxGeometry height="424" width="200" x="140" y="670" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-4" parent="1" style="strokeColor=#ffffff;sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.people.standing_man_2;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="移动端用户" vertex="1">
<mxGeometry height="70" width="40" x="230" y="699" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-5" parent="1" style="sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.computers_and_peripherals.pc;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="第三方系统" vertex="1">
<mxGeometry height="80" width="80" x="210" y="826" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-6" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="cTkcAQCcS-jnWanXpuNl-31">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-7" parent="1" style="sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.buildings.government_building;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="银行系统&#xa;公网/专线" vertex="1">
<mxGeometry height="80" width="80" x="210" y="956" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-8" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fffbeb;strokeColor=#d97706;strokeWidth=2;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=8;" value="互联网区/DMZ" vertex="1">
<mxGeometry height="608" width="520" x="370" y="482" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-43" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;fontFamily=Helvetica;fontSize=12;fontColor=default;">
<mxGeometry relative="1" as="geometry">
<mxPoint x="700" y="1020" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-9" parent="1" style="strokeColor=#ffffff;sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.servers.fileserver;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="SFTP/FTP&#xa;文件交换服务器" vertex="1">
<mxGeometry height="88" width="70" x="703.75" y="948" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-10" parent="1" style="sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.computers_and_peripherals.pc;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="PC 端用户&#xa;办公网段" vertex="1">
<mxGeometry height="92" width="95" x="190" y="530" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-11" parent="1" style="sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.misc.hp_mini;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="综合节点&lt;br&gt;&lt;br&gt;&lt;div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="73.38" width="80" x="970" y="641.81" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-12" parent="1" style="strokeColor=#ffffff;sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.storage.relational_database;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="PostgreSQL 主库" vertex="1">
<mxGeometry height="84" width="118" x="1164" y="730" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-13" parent="1" style="strokeColor=#ffffff;sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.storage.relational_database;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="PostgreSQL 热备" vertex="1">
<mxGeometry height="84" width="118" x="1164" y="547" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-14" parent="1" style="strokeColor=#ffffff;sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.servers.fileserver;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="备份归档存储" vertex="1">
<mxGeometry height="84" width="60" x="1294" y="940" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-15" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-4" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" target="cTkcAQCcS-jnWanXpuNl-31" value="HTTPS 443">
<mxGeometry relative="1" as="geometry">
<mxPoint x="380" y="695" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-16" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-5" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;entryX=0.12;entryY=0.9;entryDx=0;entryDy=0;entryPerimeter=0;" target="cTkcAQCcS-jnWanXpuNl-31" value="HTTPS/API">
<mxGeometry relative="1" as="geometry">
<mxPoint x="415" y="721.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-17" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-7" style="html=1;endArrow=block;fillColor=#f8cecc;strokeColor=#b85450;strokeWidth=5;edgeStyle=orthogonalEdgeStyle;" target="cTkcAQCcS-jnWanXpuNl-9" value="&lt;span style=&quot;background-color: light-dark(#ffffff, var(--ge-dark-color, #121212)); color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;专线&lt;/span&gt;银行访问SFTP/FTP">
<mxGeometry relative="1" x="0.1107" y="-3" as="geometry">
<mxPoint as="offset" />
<Array as="points">
<mxPoint x="300" y="1010" />
<mxPoint x="300" y="1010" />
</Array>
<mxPoint x="266.95" y="1044" as="sourcePoint" />
<mxPoint x="680.7" y="1040" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-18" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-10" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;entryX=0.5;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" target="cTkcAQCcS-jnWanXpuNl-33" value="办公网访问,内网 IP">
<mxGeometry relative="1" as="geometry">
<mxPoint x="510" y="654" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-19" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-33" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;entryX=0.038;entryY=0.681;entryDx=0;entryDy=0;entryPerimeter=0;" target="cTkcAQCcS-jnWanXpuNl-29" value="API转发">
<mxGeometry relative="1" as="geometry">
<mxPoint x="694" y="656" as="sourcePoint" />
<mxPoint x="763" y="676.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-20" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-29" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="cTkcAQCcS-jnWanXpuNl-11" value="业务访问">
<mxGeometry relative="1" as="geometry">
<mxPoint x="750.75" y="903" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-21" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="cTkcAQCcS-jnWanXpuNl-9" value="21/22 文件交换">
<mxGeometry relative="1" as="geometry">
<mxPoint as="offset" />
<Array as="points" />
<mxPoint x="740" y="806" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-22" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-39" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;exitX=1;exitY=0.75;exitDx=0;exitDy=0;" target="cTkcAQCcS-jnWanXpuNl-12" value="5432 数据库访问">
<mxGeometry relative="1" x="-0.0013" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-23" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-39" style="html=1;endArrow=block;dashed=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;exitX=1;exitY=0;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;" target="cTkcAQCcS-jnWanXpuNl-13" value="5432 状态探测">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1110" y="730" />
<mxPoint x="1110" y="589" />
</Array>
<mxPoint x="1011" y="863" as="sourcePoint" />
<mxPoint x="1150" y="755" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-24" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-12" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;exitX=0.5;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;" target="cTkcAQCcS-jnWanXpuNl-13" value="主备同步">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-25" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-12" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="cTkcAQCcS-jnWanXpuNl-14" value="备份/WAL">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-26" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-13" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;" target="cTkcAQCcS-jnWanXpuNl-14" value="备份副本">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-27" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-38" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;exitX=0.37;exitY=0.994;exitDx=0;exitDy=0;exitPerimeter=0;" target="cTkcAQCcS-jnWanXpuNl-14" value="文件归档">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1130" y="1018.0476190476193" as="sourcePoint" />
<mxPoint x="1487.0476190476188" y="921.9999999999995" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-28" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" target="cTkcAQCcS-jnWanXpuNl-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-29" parent="1" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;sketch=0;pointerEvents=1;strokeColor=#99CCFF;strokeWidth=2;align=center;verticalAlign=top;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=none;perimeterSpacing=6;" value="" vertex="1">
<mxGeometry height="305" width="171.5" x="640" y="526" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-30" parent="1" style="sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.misc.hp_mini;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="业务应用节点 2&#xa;Spring Boot Gateway&#xa;业务服务" vertex="1">
<mxGeometry height="72" width="90" x="675.75" y="553" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-31" parent="1" style="strokeColor=#ffffff;sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.routers.router;" value="边界路由 NAT 转发" vertex="1">
<mxGeometry height="53" width="78" x="400" y="709" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-32" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.13;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" target="cTkcAQCcS-jnWanXpuNl-33">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-33" parent="1" style="strokeColor=#ffffff;sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.servers.www_server;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="Nginx 入口" vertex="1">
<mxGeometry height="82" width="85" x="513" y="694" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-34" parent="1" style="sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.cisco.misc.hp_mini;fontFamily=Helvetica;fontSize=12;fontColor=default;" value="业务应用节点 1&#xa;Spring Boot Gateway&#xa;业务服务" vertex="1">
<mxGeometry height="73" width="90" x="680.75" y="698.5" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-35" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;" target="cTkcAQCcS-jnWanXpuNl-11">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-36" connectable="0" parent="1" style="group" value="" vertex="1">
<mxGeometry height="90" width="84" x="966" y="750" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-37" parent="cTkcAQCcS-jnWanXpuNl-36" style="text;html=1;whiteSpace=wrap;strokeColor=default;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="中间件" vertex="1">
<mxGeometry height="30" width="84" y="30" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-38" parent="cTkcAQCcS-jnWanXpuNl-36" style="text;html=1;whiteSpace=wrap;strokeColor=default;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="对象存储" vertex="1">
<mxGeometry height="30" width="84" y="60" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-39" parent="cTkcAQCcS-jnWanXpuNl-36" style="text;html=1;whiteSpace=wrap;strokeColor=default;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;数据库管理控件&lt;/span&gt;" vertex="1">
<mxGeometry height="30" width="84" as="geometry" />
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-40" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=4;" target="cTkcAQCcS-jnWanXpuNl-31" value="银行公网访问">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="290" y="960" />
<mxPoint x="439" y="960" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-41" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.13;entryY=0.08;entryDx=0;entryDy=0;entryPerimeter=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=4;" target="cTkcAQCcS-jnWanXpuNl-9" value="银行公网访问 SFTP">
<mxGeometry relative="1" x="0.6353" as="geometry">
<mxPoint x="1" as="offset" />
<Array as="points">
<mxPoint x="490" y="760" />
<mxPoint x="490" y="955" />
</Array>
<mxPoint x="490" y="1144" as="sourcePoint" />
<mxPoint x="639" y="910" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-42" edge="1" parent="1" source="cTkcAQCcS-jnWanXpuNl-7" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;fillColor=#f8cecc;strokeColor=#b85450;strokeWidth=5;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;" target="cTkcAQCcS-jnWanXpuNl-33" value="专线访问API">
<mxGeometry relative="1" x="0.1107" y="-3" as="geometry">
<mxPoint as="offset" />
<mxPoint x="266.75" y="1074" as="sourcePoint" />
<mxPoint x="680.75" y="1070" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="cTkcAQCcS-jnWanXpuNl-44" edge="1" parent="1" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.13;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;fillColor=#dae8fc;strokeColor=#6c8ebf;">
<mxGeometry relative="1" as="geometry">
<mxPoint x="479" y="725" as="sourcePoint" />
<mxPoint x="525" y="724" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Binary file not shown.

10619
output/01_Database_Design.html Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -0,0 +1,752 @@
---
title: "01_Detailed_Design"
author: "系统设计团队"
date: "2024年12月19日"
documentclass: article
geometry: margin=1in
fontsize: 11pt
mainfont: "PingFang SC"
CJKmainfont: "PingFang SC"
---
---
doc_id: DT-01-DETAIL
doc_role: master_document
authority: primary
scope: 详细设计
source_of_truth: true
last_reviewed: 2026-03-11
retrieval_priority: P0
---
# 福建水务营收系统详细设计说明书
| 文件状态: | 文档密级: | 公开 |
| :--- | :--- | :--- |
| 【】草稿 | | |
| 【√】修改稿 | | |
| 【】正式发布 | | |
| | **当前版本:** | **V1.6** |
| | **作者:** | **唐伟杰** |
| | **完成日期:** | **2026-03-10** |
## 版本历史
| 日期 | 版本号 | 作者 | 备注 |
| :--- | :--- | :--- | :--- |
| 2025-07-01 | V1.0 | 唐伟杰 | 初版 |
| 2025-07-17 | V1.1 | 唐伟杰 | 补充详细设计内容 |
| 2025-08-01 | V1.2 | 唐伟杰 | 同步更新概要设计中的子系统和模块结构,补充数据库设计章节并统一主要模块逻辑。 |
| 2025-08-01 | V1.3 | 唐伟杰 | 数据库系统口径统一为达梦数据库 8.0+。 |
| 2025-08-01 | V1.4 | 唐伟杰 | 单点登录采用 OAuth2.0 协议,补充统一认证相关设计。 |
| 2026-03-10 | V1.6 | 唐伟杰 | 将分散的模块设计、数据库设计、接口设计、安全设计、部署设计与报装电子签章设计整合为统一主详设,统一系统名称、章节体系、模块/接口编号及数据库口径,清理重复内容与部署脏片段。 |
## 章节导航(精简)
- [前言](#sec-preface)
- [系统总体设计](#sec-overall-design)
- [详细模块设计](#sec-module-detail)
- [统一平台详细设计](#sec-platform-detail)
- [营收业务详细设计](#sec-revenue-detail)
- [客户服务模块详细设计](#sec-customer-detail)
- [表务详细设计](#sec-meter-detail)
- [报装与签章详细设计](#sec-installation-detail)
- [数据库详细设计](#sec-database-detail)
- [接口详细设计](#sec-interface-detail)
- [安全详细设计](#sec-security-detail)
- [部署与运维设计](#sec-deployment-detail)
- [附录](#sec-appendix)
- [模块正文文件索引](#sec-module-files)
<a id="sec-preface"></a>
# 前言
## 编写目的
本文档用于指导福建水务营收系统的详细设计、开发实现、联调测试、部署上线及后续运维,是本项目详细设计阶段的统一主说明书。本文档以 `docs/design/02_Detailed_Design/01_Detailed_Design.md` 作为唯一主详设文件,吸收模块设计、数据库设计、接口设计、安全设计、部署设计以及报装电子签章专项设计中的可复用内容,形成可直接交付和实施使用的统一版本。
## 建设背景
福建水务营收系统面向集团化、多组织、多渠道的营收业务场景,覆盖客户资料、抄表开账、营业收费、账务处理、表务管理、报装立户、电子签章、客户服务、移动作业、外部支付与政务对接等核心业务。系统建设目标是形成统一平台、统一数据、统一接口、统一安全管控的营收业务支撑体系,满足集团及下属单位的标准化与可扩展管理要求。
## 设计范围
本文档覆盖以下设计内容:
1. 系统总体架构与部署架构设计。
2. 统一平台、营收业务、表务、报装与签章、客户服务渠道等业务模块详细设计。
3. 达梦数据库 8.0+ 口径下的核心数据模型、核心表结构、索引与性能设计。
4. 内部接口、外部接口、安全控制、部署与运维方案。
5. 关键业务流程、模块关系、接口交互与审计留痕要求。
## 术语与缩略语
| 术语/缩略语 | 说明 |
|---|---|
| SSO | 单点登录 |
| OAuth2.0 | 统一认证授权协议 |
| RBAC | 基于角色的访问控制模型 |
| DM8 | 达梦数据库 8.0+ |
| API | 应用程序接口 |
| CA | 电子认证与电子签章能力 |
| MFA | 多因素认证 |
| ETL | 数据抽取、转换、加载 |
## 参考资料
1. 《福建水务营收系统概要设计相关文档》
2. `docs/design/02_Detailed_Design/02_Module_Traceability_Index.md`
3. `docs/design/02_Detailed_Design/03_CA_Esignature_Supplement.md`
4. `docs/design/02_Detailed_Design/11_UP_Detailed.md`
5. `docs/design/02_Detailed_Design/12_REV_Detailed.md`
6. `docs/design/02_Detailed_Design/13_CS_Detailed.md`
7. `docs/design/02_Detailed_Design/14_METER_Detailed.md`
8. `docs/design/02_Detailed_Design/15_INST_Detailed.md`
9. `docs/design/03_Technical_Design/01_Database_Design.md`
10. `docs/design/03_Technical_Design/02_Table_Specs.md`(历史命名映射补充)
11. `docs/design/03_Technical_Design/03_Interface_Design.md`
12. `docs/design/03_Technical_Design/04_Security_Design.md`
13. `docs/design/03_Technical_Design/05_Deployment_Design.md`
14. 福建水投相关业务操作手册及需求说明资料
15. `docs/design/01_Overview/05_Module_Inventory.md`
<a id="sec-module-files"></a>
## 模块正文文件索引
- 总体层模块清单与承接映射:`docs/design/01_Overview/05_Module_Inventory.md`
- 统一平台模块正文:`docs/design/02_Detailed_Design/11_UP_Detailed.md`
- 营收业务模块正文:`docs/design/02_Detailed_Design/12_REV_Detailed.md`
- 客户服务模块正文:`docs/design/02_Detailed_Design/13_CS_Detailed.md`
- 表务模块正文:`docs/design/02_Detailed_Design/14_METER_Detailed.md`
- 报装与签章模块正文:`docs/design/02_Detailed_Design/15_INST_Detailed.md`
<a id="sec-overall-design"></a>
# 系统总体设计
## 总体目标
福建水务营收系统总体设计遵循“统一平台、业务协同、数据集中、接口标准、安全可控”的原则,实现以下目标:
- 建立统一认证、统一组织、统一权限、统一参数、统一审计基础能力。
- 构建覆盖营收、表务、报装、客户服务的完整业务闭环。
- 形成达梦数据库 8.0+ 为核心的数据架构,支撑集团化数据管理与查询分析。
- 通过标准化接口接入银行、第三方支付、短信、税控、物联网、政务、CA 签章等外部系统。
- 满足生产部署、容灾备份、日志审计与安全监管要求。
## 逻辑架构设计
```mermaid
graph TB
U1[柜台/客服/管理人员] --> A1[PC管理端]
U2[抄表员/表务人员] --> A2[移动作业端]
U3[客户用户] --> A3[微信/支付宝/微服务窗]
U4[第三方系统] --> A4[外部系统接口]
subgraph G[接入与网关层]
G1[统一门户]
G2[API网关]
G3[统一认证中心]
end
subgraph B[业务服务层]
B1[统一平台服务]
B2[营收业务服务]
B3[表务管理服务]
B4[报装与签章服务]
B5[客户服务渠道服务]
B6[消息通知与任务调度]
end
subgraph D[数据与支撑层]
D1[(达梦数据库 8.0+)]
D2[(Redis缓存)]
D3[对象存储/文件服务]
D4[消息队列]
D5[日志审计与监控]
end
A1 --> G1
A2 --> G1
A3 --> G1
A4 --> G2
G1 --> G2 --> G3
G2 --> B1
G2 --> B2
G2 --> B3
G2 --> B4
G2 --> B5
B1 --> D1
B2 --> D1
B3 --> D1
B4 --> D1
B5 --> D1
B2 --> D2
B3 --> D2
B4 --> D3
B5 --> D4
B1 --> D5
B2 --> D5
B3 --> D5
B4 --> D5
B5 --> D5
```
### 设计说明
1. 统一平台服务提供认证、组织、权限、参数、审计等公共能力。
2. 营收业务服务承担客户、抄表、开账、收费、账务、发票、催缴、统计与业务工单等核心处理。
3. 表务管理服务承担设备档案、表务工单、仓储、物联网集抄对接等处理。
4. 报装与签章服务承担申请受理、现场踏勘、施工验收、合同签署与资料归档。
5. 客户服务渠道服务面向微信、支付宝、微服务窗等客户侧渠道提供查询、缴费、电子发票与业务办理。
## 部署分区设计
```mermaid
graph TB
INTERNET[互联网/政务外网/合作机构] --> DMZ[DMZ接入区]
DMZ --> APP[应用服务区]
APP --> DATA[数据服务区]
APP --> OPS[管理运维区]
subgraph DMZ[DMZ接入区]
LB[负载均衡/Nginx]
WAF[WAF与边界防护]
GW[API网关]
end
subgraph APP[应用服务区]
APP1[统一平台服务]
APP2[营收业务服务]
APP3[表务服务]
APP4[报装签章服务]
APP5[客户渠道服务]
end
subgraph DATA[数据服务区]
DBM[(达梦主库)]
DBS[(达梦备库/从库)]
REDIS[(Redis)]
FILE[文件存储]
end
subgraph OPS[管理运维区]
MON[监控平台]
LOG[日志平台]
BAK[备份服务]
JUMP[堡垒机/跳板机]
end
```
## 子系统与模块划分
| 子系统 | 说明 | 核心模块 |
|---|---|---|
| 统一平台 | 提供统一认证、组织、权限、参数、审计与监控基础能力 | UP-001 ~ UP-004 |
| 营收业务 | 覆盖客户、抄表、收费、账务、发票、催缴、统计、代收与业务工单 | REV-001 ~ REV-009 |
| 表务管理 | 覆盖水表基础参数、仓储库存、设备档案以及工单和物联网同步等支撑能力 | METER-001 ~ METER-003 |
| 报装与签章 | 覆盖报装流程管理、工程管理、档案管理及其下挂签章归档能力 | INST-001 ~ INST-003 |
| 客户服务模块 | 覆盖账户绑定、信息查询、在线缴费、电子发票、网点服务、业务办理与柜面扫码支付 | CS-001 ~ CS-007 |
### 与架构图模块清单的承接说明
1. 架构图中的模块枚举基线以 `../01_Overview/05_Module_Inventory.md` 为准。
2. 当前详细设计采用“业务域正文承接多个架构层模块”的组织方式,不强制为 `MOBILE-*``WECHAT-*``WORK-*` 单独建立平行正式主稿。
3. `WECHAT-*` 当前按客户服务渠道视角并入 `CS-*` 体系承接;`MOBILE-*` 当前作为抄表与表务协同端能力分散承接于营收与表务正文;`WORK-*` 当前作为工单协同与流程支撑能力在客户服务、表务、报装正文中交叉引用。
4. 若后续需要新增独立正文,必须先确认该模块已具备稳定边界、独立接口和核心数据域,并同步更新概要设计与追溯索引。
<a id="sec-module-detail"></a>
<a id="sec-platform-detail"></a>
# 统一平台详细设计
## 章节定位
为避免主详设与分模块文件重复维护,本章仅保留统一平台模块摘要与入口链接,详细正文统一维护在模块文件中。
## 模块摘要
| 模块编号 | 模块名称 | 设计摘要 | 正文链接 |
|---|---|---|---|
| `UP-001` | 统一认证与单点登录 | 统一身份认证、单点登录、令牌生命周期管理与高敏感二次校验 | [UP-001](./11_UP_Detailed.md#mod-up-001) |
| `UP-002` | 组织用户与权限管理 | 组织、岗位、角色、菜单与数据权限统一管控 | [UP-002](./11_UP_Detailed.md#mod-up-002) |
| `UP-003` | 参数字典与基础配置 | 统一维护字典、价格、地址、渠道和任务参数 | [UP-003](./11_UP_Detailed.md#mod-up-003) |
| `UP-004` | 审计监控与运维支撑 | 操作审计、接口监控、任务追踪与告警通知 | [UP-004](./11_UP_Detailed.md#mod-up-004) |
## 正文入口
- [统一平台模块正文](./11_UP_Detailed.md#sec-content)
<a id="sec-revenue-detail"></a>
# 营收业务详细设计
## 章节定位
本章保留营收业务模块的设计摘要,详细流程、数据域与规则说明统一维护在分模块正文文件中。
## 模块摘要
| 模块编号 | 模块名称 | 设计摘要 | 正文链接 |
|---|---|---|---|
| `REV-001` | 客户资料管理 | 客户主档、账户、联系人、绑定关系等主数据管理 | [REV-001](./12_REV_Detailed.md#mod-rev-001) |
| `REV-002` | 抄表开账 | 抄表计划、异常复核、计费与账单生成 | [REV-002](./12_REV_Detailed.md#mod-rev-002) |
| `REV-003` | 营业收费 | 多渠道缴费、账单核销与收费凭证管理 | [REV-003](./12_REV_Detailed.md#mod-rev-003) |
| `REV-004` | 账务处理 | 调整、退款、冲正、呆坏账等账务修正 | [REV-004](./12_REV_Detailed.md#mod-rev-004) |
| `REV-005` | 发票与税务处理 | 发票申请、回写、作废与红冲协同 | [REV-005](./12_REV_Detailed.md#mod-rev-005) |
| `REV-006` | 催缴与通知 | 欠费催缴策略、触达与结果回写 | [REV-006](./12_REV_Detailed.md#mod-rev-006) |
| `REV-007` | 统计分析 | 营收、收费、欠费、渠道等多维统计 | [REV-007](./12_REV_Detailed.md#mod-rev-007) |
| `REV-008` | 代收与银行业务 | 代收代扣、对账、结算与差异处理 | [REV-008](./12_REV_Detailed.md#mod-rev-008) |
| `REV-009` | 业务参数配置 | 价格模板、页面配置与规则参数管理 | [REV-009](./12_REV_Detailed.md#mod-rev-009) |
## 正文入口
- [营收业务模块正文](./12_REV_Detailed.md#sec-content)
<a id="sec-customer-detail"></a>
# 客户服务模块详细设计
## 章节定位
本章保留客户服务模块摘要与入口,详细设计内容由分模块正文文件统一承载。
## 模块摘要
| 模块编号 | 模块名称 | 设计摘要 | 正文链接 |
|---|---|---|---|
| `CS-001` | 账户绑定管理 | 渠道账号与客户账户绑定、解绑、默认设置 | [CS-001](./13_CS_Detailed.md#mod-cs-001) |
| `CS-002` | 信息查询服务 | 账单、缴费、欠费、用水分析与历史查询 | [CS-002](./13_CS_Detailed.md#mod-cs-002) |
| `CS-003` | 在线缴费服务 | 多渠道在线支付下单、回调确认与补单 | [CS-003](./13_CS_Detailed.md#mod-cs-003) |
| `CS-004` | 电子发票服务 | 发票申请、查询、下载与推送 | [CS-004](./13_CS_Detailed.md#mod-cs-004) |
| `CS-005` | 营业网点服务 | 网点信息、服务范围与办事引导 | [CS-005](./13_CS_Detailed.md#mod-cs-005) |
| `CS-006` | 业务办理服务 | 线上办理入口与办理状态流转协同 | [CS-006](./13_CS_Detailed.md#mod-cs-006) |
| `CS-007` | 柜面扫码支付 | 柜面二维码收款与收费状态联动 | [CS-007](./13_CS_Detailed.md#mod-cs-007) |
## 正文入口
- [客户服务模块正文](./13_CS_Detailed.md#sec-content)
<a id="sec-meter-detail"></a>
# 表务详细设计
## 章节定位
本章保留表务模块摘要,详细流程与对象说明统一在分模块正文文件维护。
## 模块摘要
| 模块编号 | 模块名称 | 设计摘要 | 正文链接 |
|---|---|---|---|
| `METER-001` | 表务基础管理 | 水表档案、状态与参数基础管理 | [METER-001](./14_METER_Detailed.md#mod-meter-001) |
| `METER-002` | 仓库与库存管理 | 入库、出库、退库、报废与库存预警 | [METER-002](./14_METER_Detailed.md#mod-meter-002) |
| `METER-003` | 设备档案管理 | 设备主档、状态流转、工单协同与远传同步 | [METER-003](./14_METER_Detailed.md#mod-meter-003) |
## 正文入口
- [表务模块正文](./14_METER_Detailed.md#sec-content)
<a id="sec-installation-detail"></a>
# 报装与签章详细设计
## 章节定位
本章保留报装与签章模块摘要详细流程、CA 集成与异常补偿策略统一维护在分模块正文及 CA 专项补充文档。
## 模块摘要
| 模块编号 | 模块名称 | 设计摘要 | 正文链接 |
|---|---|---|---|
| `INST-001` | 报装流程管理 | 申请受理、踏勘流转与方案编制 | [INST-001](./15_INST_Detailed.md#mod-inst-001) |
| `INST-002` | 工程管理 | 施工验收、立户通水与合同签章协同 | [INST-002](./15_INST_Detailed.md#mod-inst-003) |
| `INST-003` | 档案管理 | 材料归档、签章回执留存与过程可追溯 | [INST-003](./15_INST_Detailed.md#mod-inst-005) |
## 正文入口
- [报装与签章模块正文](./15_INST_Detailed.md#sec-content)
- [报装 CA 电子签章专项补充](./03_CA_Esignature_Supplement.md#sec-position)
<a id="sec-database-detail"></a>
# 数据库详细设计
## 数据库选型与原则
系统数据库统一采用达梦数据库 8.0+。数据库设计遵循以下原则:
1. 统一主数据模型,避免多口径重复建模。
2. 面向业务闭环设计客户、水表、账单、缴费、工单、报装、签章等核心对象。
3. 兼顾 OLTP 事务处理与统计查询性能。
4. 支持多单位、多区域的数据隔离与权限过滤。
5. 敏感数据字段满足加密、脱敏和审计要求。
## 数据库逻辑架构
```mermaid
graph TB
APP[业务应用] --> ORM[数据访问层]
APP --> CACHE[Redis缓存]
ORM --> MASTER[(达梦主库)]
MASTER --> SLAVE[(达梦从库/备库)]
MASTER --> FILE[文件与归档索引]
```
## 核心数据模型
```mermaid
erDiagram
BIZ_CUST ||--o{ BIZ_CUST_CONTACT : 包含
BIZ_CUST ||--o{ BIZ_CUST_METER : 绑定
BIZ_CUST ||--|| BIZ_ACCOUNT : 对应
BIZ_METER ||--o{ BIZ_READING_DATA : 产生
BIZ_READING_DATA ||--|| BIZ_CHARGE : 生成
BIZ_CHARGE ||--o{ BIZ_CHARGE_DETAIL : 包含
BIZ_CHARGE ||--o{ BK_TRANSACTION : 核销
BIZ_CUST ||--o{ BIZ_INVOICE : 开票
INSTALLATION_APPLY ||--o{ INSTALLATION_CONTRACT : 生成
INSTALLATION_CONTRACT ||--o{ INSTALLATION_SIGNATURE : 签署
INSTALLATION_CONTRACT ||--o{ INSTALLATION_EVIDENCE : 存证
```
## 核心数据表设计
### 客户与账户类
| 表名 | 说明 | 关键字段 |
|---|---|---|
| `biz_cust` | 客户主档表 | code、name、cust_type、id_no、mobile、address、status |
| `biz_account` | 客户账户表 | code、cust_id、balance、arrears_amount、status |
| `biz_cust_contact` | 客户联系人表 | cust_id、name、mobile、contact_type、is_default |
| `biz_cust_app_binds` | 渠道绑定关系表 | cust_id、app_type、app_user_id、status |
| `biz_cust_invoice` | 客户开票信息表 | cust_id、invoice_title、tax_no、email、mobile |
### 水表与抄表类
| 表名 | 说明 | 关键字段 |
|---|---|---|
| `biz_meter` | 水表信息表 | code、meter_no、model_code、caliber_code、status |
| `biz_cust_meter` | 客户与水表关系表 | cust_id、meter_id、bind_status、bind_time |
| `biz_meter_book` | 抄表册本表 | code、name、reader_id、cycle_type、status |
| `biz_reading_data` | 抄表数据表 | meter_id、cust_id、reading_time、current_reading、usage_amount |
| `biz_last_reading` | 上次抄表结果表 | meter_id、last_reading、last_reading_time |
| `biz_meter_read` | 抄表任务状态表 | book_id、meter_id、read_status、reader_id |
### 账单、收费与发票类
| 表名 | 说明 | 关键字段 |
|---|---|---|
| `biz_charge` | 营业账主表 | code、cust_id、record_id、total_amount、charge_status |
| `biz_charge_detail` | 营业账明细表 | charge_id、cost_component_code、usage_amount、detail_amount |
| `biz_collection` | 托收资料表 | cust_id、channel_code、collection_status、apply_time |
| `biz_withholding` | 代扣资料表 | cust_id、agreement_no、withholding_status、sign_time |
| `biz_invoice` | 发票主表 | code、cust_id、invoice_status、invoice_type、issue_time |
| `biz_invoice_taxrate` | 发票税率表 | tax_code、tax_name、tax_rate、status |
### 银行渠道与交易类
| 表名 | 说明 | 关键字段 |
|---|---|---|
| `bk_payment_channel` | 支付渠道表 | channel_code、channel_name、channel_type、status |
| `bk_channel_api_config` | 渠道接口配置表 | channel_code、api_url、sign_type、status |
| `bk_channel_route_rule` | 渠道路由规则表 | business_type、channel_code、priority、status |
| `bk_transaction` | 渠道交易流水表 | trade_no、biz_order_no、channel_code、trade_amount、trade_status |
| `bk_transaction_callback` | 支付回调表 | trade_no、callback_status、callback_time、payload |
| `bk_transaction_exception` | 渠道异常表 | trade_no、exception_type、exception_status、remark |
| `bk_withholding_agreement` | 代扣签约表 | agreement_no、cust_id、bank_code、status |
| `bk_withholding_batch` | 代扣批次表 | batch_no、batch_date、total_count、status |
| `bk_withholding_item` | 代扣明细表 | batch_no、cust_id、charge_id、item_status |
| `bk_reconcile_batch` | 对账批次表 | batch_no、channel_code、reconcile_date、status |
| `bk_reconcile_diff` | 对账差异表 | batch_no、trade_no、diff_type、diff_amount |
| `bk_settlement_batch` | 结算批次表 | batch_no、channel_code、settlement_date、status |
### 表务与工单类
| 表名 | 说明 | 关键字段 |
|---|---|---|
| `biz_meter_log` | 表务工单/过程留痕表 | biz_type、biz_id、operate_user、operate_time、remark |
| `biz_meter_in_out` | 水表出入库主表 | code、in_out_type、warehouse_id、operate_time、status |
| `biz_meter_in_out_rel` | 出入库关联明细表 | in_out_id、meter_id、quantity、status |
| `biz_process` | 业务工单主表 | code、biz_type_code、cust_id、process_status |
### 报装与签章类
| 表名 | 说明 | 关键字段 |
|---|---|---|
| `biz_process` | 报装申请主表 | code、biz_type_code、cust_id、process_status |
| `biz_process_transfer` | 现场踏勘与流转表 | process_id、from_user、to_user、transfer_time |
| `installation_contract` | 报装合同表 | contract_code、installation_id、contract_type、contract_status |
| `installation_signature` | 签章记录表 | signature_code、contract_id、signer_id、signature_time、signature_status |
| `installation_evidence` | 存证记录表 | evidence_code、contract_id、evidence_hash、evidence_status |
## 索引与性能设计
### 主要索引策略
1. 唯一索引:客户编号、水表编号、账单编号、缴费编号、合同编号等业务唯一键。
2. 复合索引:
- 客户查询:`(customer_type, status)`
- 账单查询:`(customer_id, bill_month, bill_status)`
- 抄表查询:`(meter_id, reading_date)`
- 缴费查询:`(customer_id, payment_time)`
3. 时间分区:账单、缴费、日志等大表按月或按年管理归档。
4. 热点缓存:参数字典、用户会话、移动端任务、发票状态等进入 Redis。
<a id="sec-interface-detail"></a>
# 接口详细设计
## 接口设计原则
1. 内部接口统一采用 RESTful 风格JSON 作为主要报文格式。
2. 外部接口根据对接方规范支持 HTTPS API、SFTP 文件交换等方式。
3. 接口编号统一采用 `IF-``EXT-` 前缀,与模块编号区分。
4. 关键交易接口必须支持幂等控制、签名校验、失败重试与调用日志。
## 统一平台接口
| 接口编号 | 接口名称 | 功能描述 | 调用方 | 协议 |
|---|---|---|---|---|
| IF-UP-001 | 用户登录接口 | 用户登录并获取访问令牌 | PC端/移动端/渠道端 | HTTPS REST |
| IF-UP-002 | 用户信息接口 | 获取当前登录用户上下文 | 各业务系统 | HTTPS REST |
| IF-UP-003 | 权限校验接口 | 校验菜单、按钮和数据权限 | 各业务模块 | HTTPS REST |
| IF-UP-004 | 参数字典接口 | 获取字典与业务参数 | 各业务模块 | HTTPS REST |
## 营收业务接口
| 接口编号 | 接口名称 | 功能描述 | 调用方 | 协议 |
|---|---|---|---|---|
| IF-REV-001 | 客户信息查询接口 | 查询客户档案、账户状态、联系人与水表绑定关系 | 柜台/客户渠道/工单 | HTTPS REST |
| IF-REV-004 | 抄表数据提交接口 | 提交人工或远传抄表数据并触发校验 | 抄表APP/集抄系统 | HTTPS REST |
| IF-REV-005 | 账单生成接口 | 根据抄表结果、水价模板和费用组成生成账单 | 开账任务 | HTTPS REST |
| IF-REV-006 | 缴费处理接口 | 创建收费记录并核销账单 | 柜台/线上渠道 | HTTPS REST |
| IF-REV-007 | 账务调整接口 | 发起金额调整、退款、冲正、坏账等业务处理 | 财务/营业人员 | HTTPS REST |
| IF-REV-008 | 发票申请接口 | 发起开票申请并接收票据状态回写 | 柜台/客户渠道 | HTTPS REST |
| IF-REV-009 | 催缴任务接口 | 生成催缴名单并提交消息触达请求 | 营收系统/消息服务 | HTTPS REST |
| IF-REV-010 | 统计查询接口 | 查询营收、收费、欠费、渠道、客户统计结果 | 管理后台/统计分析端 | HTTPS REST |
| IF-REV-011 | 银行代收协同接口 | 发起代扣、回盘、对账、结算协同 | 银行代收模块/SYS-009 | HTTPS REST / 文件交换 |
| IF-REV-012 | 业务参数配置接口 | 查询和维护价格模板、优惠方案、业务参数配置 | 管理后台/参数管理端 | HTTPS REST |
## 表务与物联网接口
| 接口编号 | 接口名称 | 功能描述 | 调用方 | 协议 |
|---|---|---|---|---|
| IF-METER-001 | 水表档案查询接口 | 查询水表与生命周期信息 | 表务/营收/报装 | HTTPS REST |
| IF-METER-002 | 表务工单处理接口 | 提交换表、移表等结果 | 移动作业端 | HTTPS REST |
| IF-METER-003 | 库存出入库接口 | 处理领用、退库、报废 | 仓储管理端 | HTTPS REST |
| IF-METER-004 | 集抄数据接收接口 | 接收远程抄表数据 | 物联网平台 | HTTPS REST |
## 报装与签章接口
| 接口编号 | 接口名称 | 功能描述 | 调用方 | 协议 |
|---|---|---|---|---|
| IF-INST-001 | 报装申请提交接口 | 提交报装申请与附件 | 柜台/微网厅/政务平台 | HTTPS REST |
| IF-INST-002 | 踏勘结果回填接口 | 回填现场踏勘结果 | 报装人员 | HTTPS REST |
| IF-INST-003 | 合同签署发起接口 | 创建签章任务 | 报装系统 | HTTPS REST |
| IF-INST-004 | 签章回执接口 | 回写签章结果和存证信息 | CA系统/报装系统 | HTTPS REST |
| IF-INST-005 | 报装归档接口 | 归档申请、合同和验收资料 | 报装系统 | HTTPS REST |
## 客户渠道接口
| 接口编号 | 接口名称 | 功能描述 | 调用方 | 协议 |
|---|---|---|---|---|
| IF-CS-001 | 账户绑定接口 | 绑定或解绑客户账户 | 微信/支付宝/微网厅 | HTTPS REST |
| IF-CS-002 | 历史账单查询接口 | 查询账单、欠费、用水趋势 | 客户端 | HTTPS REST |
| IF-CS-003 | 在线支付下单接口 | 创建微信/支付宝支付订单 | 客户端 | HTTPS REST |
| IF-CS-004 | 发票申请接口 | 提交电子发票申请 | 客户端 | HTTPS REST |
| IF-CS-005 | 网点与业务办理接口 | 查询网点、提交业务办理 | 客户端 | HTTPS REST |
| IF-CS-006 | 业务办理进度接口 | 查询业务办理和工单进度 | 客户端 | HTTPS REST |
| IF-CS-007 | 柜面扫码支付接口 | 创建柜面扫码支付订单并回写结果 | 柜台终端/营业前台 | HTTPS REST |
## 外部系统接口
### 金融支付接口
| 接口编号 | 接口名称 | 功能描述 | 协议 | 输入参数 | 输出结果 |
|---|---|---|---|---|---|
| EXT-001 | 银行代扣接口 | 批量代扣水费 | HTTPS/SFTP | 客户信息、账单金额、代扣日期 | 扣款结果 |
| EXT-101 | 微信支付统一下单 | 创建微信支付订单 | HTTPS | 订单信息、金额 | 预支付信息 |
| EXT-201 | 支付宝统一收单 | 创建支付宝支付订单 | HTTPS | 订单信息、金额 | 支付结果 |
### 税务与消息接口
| 接口编号 | 接口名称 | 功能描述 | 协议 | 输入参数 | 输出结果 |
|---|---|---|---|---|---|
| EXT-301 | 短信发送接口 | 发送催缴或通知短信 | HTTPS | 手机号、模板、参数 | 发送结果 |
| EXT-401 | 邮件发送接口 | 发送电子发票或通知邮件 | HTTPS | 邮箱、主题、内容 | 发送结果 |
| EXT-501 | 电子发票开具接口 | 税控平台开票 | HTTPS | 发票信息、税率 | 发票结果 |
### 物联网、政务与签章接口
| 接口编号 | 接口名称 | 功能描述 | 协议 | 输入参数 | 输出结果 |
|---|---|---|---|---|---|
| EXT-601 | 水表数据采集接口 | 获取远程抄表数据 | HTTPS | 水表编号、时间范围 | 抄表数据 |
| EXT-701 | 政务数据汇聚接口 | 向政务平台推送业务数据 | HTTPS | 业务数据、统计数据 | 推送结果 |
| EXT-801 | 环卫收费对接接口 | 同步污水费/环卫收费数据 | HTTPS | 收费数据 | 同步结果 |
| EXT-901 | 客服工单创建接口 | 与客服系统同步工单 | HTTPS | 工单信息 | 工单编号 |
| EXT-1001 | 消火栓控制接口 | 控制取水权限与设备状态 | HTTPS | 设备信息、控制指令 | 控制结果 |
| EXT-CA-001 | 身份认证接口 | 验证合同签署方身份 | HTTPS REST | 用户信息、认证方式 | 认证结果 |
| EXT-CA-002 | 电子签章接口 | 执行电子签章 | HTTPS REST | 文档内容、签章位置 | 签章结果 |
| EXT-CA-003 | 时间戳接口 | 申请签署时间戳 | HTTPS REST | 文档哈希 | 时间戳凭证 |
| EXT-CA-004 | 电子存证接口 | 存储签署后合同 | HTTPS REST | 签署文档、元数据 | 存证凭证 |
<a id="sec-security-detail"></a>
# 安全详细设计
## 安全目标与分层防护
系统安全设计遵循机密性、完整性、可用性、可审计性原则,采用边界安全、应用安全、数据安全、运维安全四层防护模式。
```mermaid
graph TB
T[外部威胁] --> N[边界安全]
N --> A[应用安全]
A --> D[数据安全]
D --> O[运维安全]
O --> C[核心业务资产]
```
## 身份认证与访问控制
1. 采用 OAuth2.0 + JWT 统一认证。
2. 高风险操作支持 MFA 二次认证。
3. 基于 RBAC 的菜单、按钮、数据权限控制。
4. 管理端、移动端、客户端、外部系统按不同安全域实施权限隔离。
## 数据安全与隐私保护
1. 核心数据库统一为达梦数据库 8.0+,关键数据按要求启用加密存储。
2. 身份证号、手机号、银行账户等敏感字段按角色脱敏展示。
3. 文件、合同、签章凭证、验收附件统一归档并控制访问权限。
4. 备份数据加密存储,支持异地容灾保管。
## 接口安全与审计追踪
- 所有外部接口采用 HTTPS 加密传输。
- 关键接口支持签名、时间戳、随机数防重放。
- 支付、退款、签章、账务调整等交易型接口必须具备幂等控制。
- 统一记录调用时间、调用方、请求摘要、响应结果、异常码与处理人。
## 安全运营与应急响应
1. 建立暴力破解、异常访问、接口失败、支付异常、签章异常等监控规则。
2. 按 P0~P3 级别定义安全事件处置流程。
3. 定期进行漏洞扫描、补丁更新、备份恢复演练和权限审计。
<a id="sec-deployment-detail"></a>
# 部署与运维设计
## 部署总体方案
系统采用集中部署模式,生产环境分为接入区、应用区、数据区、运维管理区,支持主备容灾与横向扩展。
```mermaid
graph TB
U[外部访问] --> LB[负载均衡/Nginx]
LB --> APP1[应用节点1]
LB --> APP2[应用节点2]
LB --> APP3[应用节点3]
APP1 --> DB[(达梦主库)]
APP2 --> DB
APP3 --> DB
DB --> DBS[(达梦备库/从库)]
APP1 --> REDIS[(Redis)]
APP1 --> FILE[对象存储]
APP1 --> MON[监控与日志平台]
```
## 环境规划
| 环境 | 用途 | 说明 |
|---|---|---|
| 开发环境 | 开发联调 | 功能开发、单元验证 |
| 测试环境 | 集成测试 | 接口联调、业务测试、性能测试 |
| 预生产环境 | 上线前验证 | 模拟生产配置,进行发布演练 |
| 生产环境 | 正式运行 | 双机或多节点高可用部署 |
## 网络与分区设计
1. DMZ 区部署负载均衡、WAF、网关等对外接入组件。
2. 应用区部署统一平台、营收、表务、报装、客户渠道等应用节点。
3. 数据区部署达梦数据库、Redis、对象存储与备份服务。
4. 管理区部署堡垒机、日志平台、监控平台和运维工具。
## 监控告警与日志
### 监控指标
| 类别 | 监控项 |
|---|---|
| 主机监控 | CPU、内存、磁盘、网络 |
| 应用监控 | QPS、响应时间、错误率、线程池 |
| 数据库监控 | 连接数、慢 SQL、锁等待、主备同步 |
| 业务监控 | 开账量、收费量、退款量、签章成功率 |
### 日志分类
- 操作日志
- 登录日志
- 接口调用日志
- 任务执行日志
- 安全审计日志
- 外部系统对接日志
## 备份恢复与发布管理
1. 数据库执行每日增量、每周全量备份。
2. 关键文件、合同、电子发票、签章凭证同步纳入备份。
3. 发布采用版本化管理,执行发布审批、健康检查、回滚预案。
4. 对支付、签章、银行代扣等关键链路执行灰度验证前置检查,但生产方案不保留脚本碎片或临时配置片段。
<a id="sec-appendix"></a>
# 附录
## 附录A 模块编号说明
| 前缀 | 模块域 |
|---|---|
| UP | 统一平台 |
| REV | 营收业务 |
| METER | 表务管理 |
| INST | 报装与签章 |
| CS | 客户服务与渠道 |
## 附录B 接口编号说明
| 前缀 | 说明 |
|---|---|
| IF-UP / IF-REV / IF-CS / IF-METER / IF-INST | 系统内部标准接口 |
| IF-EXT | 对外系统接口 |
| EXT-CA | 历史资料中的电子签章专项外部接口编号(存量引用) |
## 附录C 设计约束与统一口径
1. 系统名称统一为“福建水务营收系统”。
2. 数据库口径统一为“达梦数据库 8.0+”。
3. 模块编号统一采用 `UP/REV/METER/INST/CS-001` 风格。
4. 接口编号统一采用 `IF-UP/IF-REV/IF-CS/IF-METER/IF-INST/IF-EXT-001` 风格,历史 `EXT-*` 仅用于存量资料引用。
5. 本文档为唯一主详设文件,其他专项文档作为历史参考与内容来源,不再作为并行主文件使用。

Binary file not shown.

View File

@ -0,0 +1,298 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="系统设计团队" />
<title>福建水务营收系统-系统概述</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<link rel="stylesheet" href="output/document_style.css" />
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<header id="title-block-header">
<h1 class="title">福建水务营收系统-系统概述</h1>
<p class="author">系统设计团队</p>
<p class="date">2024年12月19日</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#福建水务营收系统系统概述"
id="toc-福建水务营收系统系统概述"><span
class="toc-section-number">1</span> 福建水务营收系统系统概述</a>
<ul>
<li><a href="#文档定位" id="toc-文档定位"><span
class="toc-section-number">1.1</span> 1. 文档定位</a></li>
<li><a href="#项目背景与建设目标" id="toc-项目背景与建设目标"><span
class="toc-section-number">1.2</span> 2. 项目背景与建设目标</a>
<ul>
<li><a href="#项目背景" id="toc-项目背景"><span
class="toc-section-number">1.2.1</span> 2.1 项目背景</a></li>
<li><a href="#建设目标" id="toc-建设目标"><span
class="toc-section-number">1.2.2</span> 2.2 建设目标</a></li>
</ul></li>
<li><a href="#系统范围与边界" id="toc-系统范围与边界"><span
class="toc-section-number">1.3</span> 3. 系统范围与边界</a>
<ul>
<li><a href="#范围内" id="toc-范围内"><span
class="toc-section-number">1.3.1</span> 3.1 范围内</a></li>
<li><a href="#范围外" id="toc-范围外"><span
class="toc-section-number">1.3.2</span> 3.2 范围外</a></li>
</ul></li>
<li><a href="#涉众与角色" id="toc-涉众与角色"><span
class="toc-section-number">1.4</span> 4. 涉众与角色</a></li>
<li><a href="#术语与缩略语概要层" id="toc-术语与缩略语概要层"><span
class="toc-section-number">1.5</span> 5. 术语与缩略语(概要层)</a>
<ul>
<li><a href="#业务术语" id="toc-业务术语"><span
class="toc-section-number">1.5.1</span> 5.1 业务术语</a></li>
<li><a href="#技术术语" id="toc-技术术语"><span
class="toc-section-number">1.5.2</span> 5.2 技术术语</a></li>
</ul></li>
<li><a href="#关联文档" id="toc-关联文档"><span
class="toc-section-number">1.6</span> 6. 关联文档</a>
<ul>
<li><a href="#本目录文档" id="toc-本目录文档"><span
class="toc-section-number">1.6.1</span> 6.1 本目录文档</a></li>
<li><a href="#跨目录主文档" id="toc-跨目录主文档"><span
class="toc-section-number">1.6.2</span> 6.2 跨目录主文档</a></li>
<li><a href="#对齐与核对资料" id="toc-对齐与核对资料"><span
class="toc-section-number">1.6.3</span> 6.3 对齐与核对资料</a></li>
</ul></li>
<li><a href="#阅读路径建议" id="toc-阅读路径建议"><span
class="toc-section-number">1.7</span> 7. 阅读路径建议</a></li>
<li><a href="#维护要求" id="toc-维护要求"><span
class="toc-section-number">1.8</span> 8. 维护要求</a></li>
</ul></li>
</ul>
</nav>
<h1 data-number="1" id="福建水务营收系统系统概述"><span
class="header-section-number">1</span> 福建水务营收系统系统概述</h1>
<h2 data-number="1.1" id="文档定位"><span
class="header-section-number">1.1</span> 1. 文档定位</h2>
<p>本文档用于说明福建水务营收系统的建设背景、目标、范围边界、涉众角色与基础术语,作为总体设计层的导览入口。<br />
详细的模块设计、接口定义、数据结构与部署实现,以主文档和专项文档为准,不在本文重复展开。</p>
<h2 data-number="1.2" id="项目背景与建设目标"><span
class="header-section-number">1.2</span> 2. 项目背景与建设目标</h2>
<h3 data-number="1.2.1" id="项目背景"><span
class="header-section-number">1.2.1</span> 2.1 项目背景</h3>
<p>福建水务营收系统面向水务企业营收管理与客户服务全流程,覆盖抄表、开账、收费、账务、工单、表务、报装与渠道服务。<br />
项目目标是将分散业务统一到可评审、可交付、可持续维护的体系下,支撑集团化与多组织协同。</p>
<h3 data-number="1.2.2" id="建设目标"><span
class="header-section-number">1.2.2</span> 2.2 建设目标</h3>
<ul>
<li>建立统一平台能力,支撑认证、权限、组织、参数、租户与审计监控。</li>
<li>建立营收业务主链路,覆盖客户、计量、收费、账务与客服服务。</li>
<li>建立独立业务子系统,支撑移动抄表、工单、表务与报装场景。</li>
<li>建立基础服务子系统,统一发票、支付结算、消息能力。</li>
<li>满足安全合规、国产化适配与持续交付要求。</li>
</ul>
<h2 data-number="1.3" id="系统范围与边界"><span
class="header-section-number">1.3</span> 3. 系统范围与边界</h2>
<h3 data-number="1.3.1" id="范围内"><span
class="header-section-number">1.3.1</span> 3.1 范围内</h3>
<table>
<thead>
<tr>
<th>分类</th>
<th>范围说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>平台能力</td>
<td>统一认证、权限、租户、组织、参数、监控</td>
</tr>
<tr>
<td>核心业务</td>
<td>客户资料、抄表开账、营业收费、账务处理、发票、催缴、统计</td>
</tr>
<tr>
<td>业务子系统</td>
<td>手机抄表 APP、微网厅、工单管理、表务管理、报装业务</td>
</tr>
<tr>
<td>基础服务</td>
<td>发票服务、支付与银行结算、消息服务</td>
</tr>
<tr>
<td>外部集成</td>
<td>银行、第三方支付、短信/邮件/站内信、物联网、CA 能力</td>
</tr>
</tbody>
</table>
<h3 data-number="1.3.2" id="范围外"><span
class="header-section-number">1.3.2</span> 3.2 范围外</h3>
<table>
<thead>
<tr>
<th>分类</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>代码实现细节</td>
<td>具体类设计、SQL、接口字段定义</td>
</tr>
<tr>
<td>运维脚本实现</td>
<td>启停脚本、部署脚本、监控规则细项</td>
</tr>
<tr>
<td>测试用例细节</td>
<td>测试步骤、断言口径、执行结果</td>
</tr>
</tbody>
</table>
<h2 data-number="1.4" id="涉众与角色"><span
class="header-section-number">1.4</span> 4. 涉众与角色</h2>
<table>
<thead>
<tr>
<th>角色</th>
<th>关注重点</th>
</tr>
</thead>
<tbody>
<tr>
<td>项目管理与评审人员</td>
<td>范围边界、建设目标、交付范围</td>
</tr>
<tr>
<td>架构与开发人员</td>
<td>子系统职责、总体边界、协同关系</td>
</tr>
<tr>
<td>测试与运维人员</td>
<td>系统分层、部署原则、安全与可运维约束</td>
</tr>
<tr>
<td>甲方技术人员</td>
<td>交付口径一致性、可追溯性、后续维护可行性</td>
</tr>
</tbody>
</table>
<h2 data-number="1.5" id="术语与缩略语概要层"><span
class="header-section-number">1.5</span> 5. 术语与缩略语(概要层)</h2>
<h3 data-number="1.5.1" id="业务术语"><span
class="header-section-number">1.5.1</span> 5.1 业务术语</h3>
<table>
<thead>
<tr>
<th>术语</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>营收业务系统SYS-002</td>
<td>核心营收业务承载子系统</td>
</tr>
<tr>
<td>微网厅SYS-004</td>
<td>面向外部客户服务的线上渠道</td>
</tr>
<tr>
<td>表务管理SYS-006</td>
<td>水表设备与库存相关管理域</td>
</tr>
<tr>
<td>报装业务SYS-007</td>
<td>新装/改装/流程办理相关业务域</td>
</tr>
</tbody>
</table>
<h3 data-number="1.5.2" id="技术术语"><span
class="header-section-number">1.5.2</span> 5.2 技术术语</h3>
<table>
<thead>
<tr>
<th>术语</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>SSO</td>
<td>单点登录能力</td>
</tr>
<tr>
<td>RBAC</td>
<td>基于角色的访问控制</td>
</tr>
<tr>
<td>OAuth2.0 + CAS</td>
<td>统一认证与单点登录协议组合</td>
</tr>
<tr>
<td>IF- 编号</td>
<td>接口编号前缀,用于与模块编号区分</td>
</tr>
</tbody>
</table>
<h2 data-number="1.6" id="关联文档"><span
class="header-section-number">1.6</span> 6. 关联文档</h2>
<h3 data-number="1.6.1" id="本目录文档"><span
class="header-section-number">1.6.1</span> 6.1 本目录文档</h3>
<ul>
<li>系统架构说明:<code>02_System_Architecture.md</code></li>
<li>概要设计主文档(单一真源):<code>03_Summary_Design.md</code></li>
<li>总体图谱文档:<code>04_System_Diagrams.md</code></li>
</ul>
<h3 data-number="1.6.2" id="跨目录主文档"><span
class="header-section-number">1.6.2</span> 6.2 跨目录主文档</h3>
<ul>
<li>详细设计主文档:<code>../02_Detailed_Design/01_Detailed_Design.md</code></li>
<li>数据库设计主文档:<code>../03_Technical_Design/01_Database_Design.md</code></li>
<li>接口设计主文档:<code>../03_Technical_Design/03_Interface_Design.md</code></li>
<li>安全设计主文档:<code>../03_Technical_Design/04_Security_Design.md</code></li>
<li>部署设计主文档:<code>../03_Technical_Design/05_Deployment_Design.md</code></li>
</ul>
<h3 data-number="1.6.3" id="对齐与核对资料"><span
class="header-section-number">1.6.3</span> 6.3 对齐与核对资料</h3>
<ul>
<li>后端现状:<code>../../guides/BACKEND_CURRENT_STATUS.md</code></li>
<li>后端表映射:<code>../../guides/BACKEND_TABLE_MAPPING.md</code></li>
<li>历史资料归档:<code>../04_Appendix/Archive/</code></li>
</ul>
<h2 data-number="1.7" id="阅读路径建议"><span
class="header-section-number">1.7</span> 7. 阅读路径建议</h2>
<ol type="1">
<li>先阅读 <code>03_Summary_Design.md</code>,建立统一口径。</li>
<li>再阅读
<code>02_System_Architecture.md</code>,理解总体边界和架构原则。</li>
<li>对照 <code>04_System_Diagrams.md</code>,核对图文一致性。</li>
<li>按需进入详细设计、数据库和接口主文档。</li>
</ol>
<h2 data-number="1.8" id="维护要求"><span
class="header-section-number">1.8</span> 8. 维护要求</h2>
<ul>
<li>本文档仅维护“概述级”信息,不引入实现细节。</li>
<li>出现与 <code>03_Summary_Design.md</code>
不一致时,以主文档为准并及时修正。</li>
<li>修改后至少执行:
<ul>
<li><code>make validate-file FILE=docs/design/01_Overview/01_System_Overview.md</code></li>
<li><code>make check-links</code></li>
</ul></li>
</ul>
</body>
</html>

Binary file not shown.

View File

@ -0,0 +1,128 @@
---
title: "01_System_Overview"
author: "系统设计团队"
date: "2024年12月19日"
documentclass: article
geometry: margin=1in
fontsize: 11pt
mainfont: "PingFang SC"
CJKmainfont: "PingFang SC"
---
---
doc_id: HL-01-OVERVIEW
doc_role: supporting_document
authority: supporting
scope: 总体设计-系统概述
source_of_truth: false
last_reviewed: 2026-03-11
retrieval_priority: P1
---
# 福建水务营收系统系统概述
## 1. 文档定位
本文档用于说明福建水务营收系统的建设背景、目标、范围边界、涉众角色与基础术语,作为总体设计层的导览入口。
详细的模块设计、接口定义、数据结构与部署实现,以主文档和专项文档为准,不在本文重复展开。
## 2. 项目背景与建设目标
### 2.1 项目背景
福建水务营收系统面向水务企业营收管理与客户服务全流程,覆盖抄表、开账、收费、账务、工单、表务、报装与渠道服务。
项目目标是将分散业务统一到可评审、可交付、可持续维护的体系下,支撑集团化与多组织协同。
### 2.2 建设目标
- 建立统一平台能力,支撑认证、权限、组织、参数、租户与审计监控。
- 建立营收业务主链路,覆盖客户、计量、收费、账务与客服服务。
- 建立独立业务子系统,支撑移动抄表、工单、表务与报装场景。
- 建立基础服务子系统,统一发票、支付结算、消息能力。
- 满足安全合规、国产化适配与持续交付要求。
## 3. 系统范围与边界
### 3.1 范围内
| 分类 | 范围说明 |
| --- | --- |
| 平台能力 | 统一认证、权限、租户、组织、参数、监控 |
| 核心业务 | 客户资料、抄表开账、营业收费、账务处理、发票、催缴、统计 |
| 业务子系统 | 手机抄表 APP、微网厅、工单管理、表务管理、报装业务 |
| 基础服务 | 发票服务、支付与银行结算、消息服务 |
| 外部集成 | 银行、第三方支付、短信/邮件/站内信、物联网、CA 能力 |
### 3.2 范围外
| 分类 | 说明 |
| --- | --- |
| 代码实现细节 | 具体类设计、SQL、接口字段定义 |
| 运维脚本实现 | 启停脚本、部署脚本、监控规则细项 |
| 测试用例细节 | 测试步骤、断言口径、执行结果 |
## 4. 涉众与角色
| 角色 | 关注重点 |
| --- | --- |
| 项目管理与评审人员 | 范围边界、建设目标、交付范围 |
| 架构与开发人员 | 子系统职责、总体边界、协同关系 |
| 测试与运维人员 | 系统分层、部署原则、安全与可运维约束 |
| 甲方技术人员 | 交付口径一致性、可追溯性、后续维护可行性 |
## 5. 术语与缩略语(概要层)
### 5.1 业务术语
| 术语 | 说明 |
| --- | --- |
| 营收业务系统SYS-002 | 核心营收业务承载子系统 |
| 微网厅SYS-004 | 面向外部客户服务的线上渠道 |
| 表务管理SYS-006 | 水表设备与库存相关管理域 |
| 报装业务SYS-007 | 新装/改装/流程办理相关业务域 |
### 5.2 技术术语
| 术语 | 说明 |
| --- | --- |
| SSO | 单点登录能力 |
| RBAC | 基于角色的访问控制 |
| OAuth2.0 + CAS | 统一认证与单点登录协议组合 |
| IF- 编号 | 接口编号前缀,用于与模块编号区分 |
## 6. 关联文档
### 6.1 本目录文档
- 系统架构说明:`02_System_Architecture.md`
- 概要设计主文档(单一真源):`03_Summary_Design.md`
- 总体图谱文档:`04_System_Diagrams.md`
### 6.2 跨目录主文档
- 详细设计主文档:`../02_Detailed_Design/01_Detailed_Design.md`
- 数据库设计主文档:`../03_Technical_Design/01_Database_Design.md`
- 接口设计主文档:`../03_Technical_Design/03_Interface_Design.md`
- 安全设计主文档:`../03_Technical_Design/04_Security_Design.md`
- 部署设计主文档:`../03_Technical_Design/05_Deployment_Design.md`
### 6.3 对齐与核对资料
- 后端现状:`../../guides/BACKEND_CURRENT_STATUS.md`
- 后端表映射:`../../guides/BACKEND_TABLE_MAPPING.md`
- 历史资料归档:`../04_Appendix/Archive/`
## 7. 阅读路径建议
1. 先阅读 `03_Summary_Design.md`,建立统一口径。
2. 再阅读 `02_System_Architecture.md`,理解总体边界和架构原则。
3. 对照 `04_System_Diagrams.md`,核对图文一致性。
4. 按需进入详细设计、数据库和接口主文档。
## 8. 维护要求
- 本文档仅维护“概述级”信息,不引入实现细节。
- 出现与 `03_Summary_Design.md` 不一致时,以主文档为准并及时修正。
- 修改后至少执行:
- `make validate-file FILE=docs/design/01_Overview/01_System_Overview.md`
- `make check-links`

Binary file not shown.

View File

@ -0,0 +1,479 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="系统设计团队" />
<title>福建水务营收系统-模块追溯索引</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<link rel="stylesheet" href="output/document_style.css" />
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<header id="title-block-header">
<h1 class="title">福建水务营收系统-模块追溯索引</h1>
<p class="author">系统设计团队</p>
<p class="date">2024年12月19日</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#福建水务营收系统模块追溯索引"
id="toc-福建水务营收系统模块追溯索引"><span
class="toc-section-number">1</span> 福建水务营收系统模块追溯索引</a>
<ul>
<li><a href="#章节导航精简" id="toc-章节导航精简"><span
class="toc-section-number">1.1</span> 章节导航(精简)</a></li>
<li><a href="#文档定位" id="toc-文档定位"><span
class="toc-section-number">1.2</span> 文档定位</a></li>
<li><a href="#追溯使用规则" id="toc-追溯使用规则"><span
class="toc-section-number">1.3</span> 追溯使用规则</a></li>
<li><a href="#子系统级追溯矩阵" id="toc-子系统级追溯矩阵"><span
class="toc-section-number">1.4</span> 子系统级追溯矩阵</a></li>
<li><a href="#架构图模块承接映射" id="toc-架构图模块承接映射"><span
class="toc-section-number">1.5</span> 架构图模块承接映射</a></li>
<li><a href="#模块级追溯矩阵" id="toc-模块级追溯矩阵"><span
class="toc-section-number">1.6</span> 模块级追溯矩阵</a></li>
<li><a href="#维护机制" id="toc-维护机制"><span
class="toc-section-number">1.7</span> 维护机制</a></li>
</ul></li>
</ul>
</nav>
<h1 data-number="1" id="福建水务营收系统模块追溯索引"><span
class="header-section-number">1</span> 福建水务营收系统模块追溯索引</h1>
<h2 data-number="1.1" id="章节导航精简"><span
class="header-section-number">1.1</span> 章节导航(精简)</h2>
<ul>
<li><a href="#sec-position">文档定位</a></li>
<li><a href="#sec-rules">追溯使用规则</a></li>
<li><a href="#sec-subsystem-matrix">子系统级追溯矩阵</a></li>
<li><a href="#sec-module-matrix">模块级追溯矩阵</a></li>
<li><a href="#sec-maintenance">维护机制</a></li>
</ul>
<p><a id="sec-position"></a></p>
<h2 data-number="1.2" id="文档定位"><span
class="header-section-number">1.2</span> 文档定位</h2>
<p>本文档用于提供“模块编号 → 主详设章节 → 关键接口 →
关键数据域”的统一检索入口,服务于:</p>
<ol type="1">
<li>需求评审与影响范围分析;</li>
<li>开发联调阶段的问题定位;</li>
<li>AI Agent 检索时的快速跳转。</li>
</ol>
<p>边界说明:</p>
<ul>
<li>本文档是追溯索引,不替代主详设内容;</li>
<li>详细设计权威口径以 <code>01_Detailed_Design.md</code> 为准;</li>
<li>模块正文承载于
<code>11_UP_Detailed.md</code><code>12_REV_Detailed.md</code><code>13_CS_Detailed.md</code><code>14_METER_Detailed.md</code><code>15_INST_Detailed.md</code></li>
<li>数据表字段定义以
<code>03_Technical_Design/01_Database_Design.md</code>
为主,<code>03_Technical_Design/02_Table_Specs.md</code>
仅用于历史映射补充;</li>
<li>接口参数细项以
<code>03_Technical_Design/03_Interface_Design.md</code> 为准。</li>
</ul>
<p><a id="sec-rules"></a></p>
<h2 data-number="1.3" id="追溯使用规则"><span
class="header-section-number">1.3</span> 追溯使用规则</h2>
<ol type="1">
<li>先按模块编号定位至主详设章节,再查看接口与数据域映射;</li>
<li>发现模块描述与接口/数据口径冲突时,以主详设为第一参照,并同步修订技术专项文档;</li>
<li>本文档仅保留“可追溯最小必要信息”,不重复搬运完整设计正文;</li>
<li>基础服务子系统SYS-008/009/010在详细设计层按接口协同描述不在此索引中虚增平行模块。</li>
<li>架构图层面的完整模块枚举以
<code>../01_Overview/05_Module_Inventory.md</code>
为核对入口;本索引只保留当前详细设计实际承接的模块与必要映射说明。</li>
</ol>
<p><a id="sec-subsystem-matrix"></a></p>
<h2 data-number="1.4" id="子系统级追溯矩阵"><span
class="header-section-number">1.4</span> 子系统级追溯矩阵</h2>
<table>
<colgroup>
<col style="width: 25%" />
<col style="width: 25%" />
<col style="width: 25%" />
<col style="width: 25%" />
</colgroup>
<thead>
<tr>
<th>子系统/能力域</th>
<th>模块范围</th>
<th>模块正文定位</th>
<th>主要技术专题</th>
</tr>
</thead>
<tbody>
<tr>
<td>统一平台</td>
<td><code>UP-001 ~ UP-004</code></td>
<td><a href="./11_UP_Detailed.md#sec-content">统一平台模块正文</a></td>
<td><a
href="../03_Technical_Design/03_Interface_Design.md">接口设计</a><a
href="../03_Technical_Design/04_Security_Design.md">安全设计</a></td>
</tr>
<tr>
<td>营收业务</td>
<td><code>REV-001 ~ REV-009</code></td>
<td><a href="./12_REV_Detailed.md#sec-content">营收业务模块正文</a></td>
<td><a
href="../03_Technical_Design/01_Database_Design.md">数据库设计</a><a
href="../03_Technical_Design/03_Interface_Design.md">接口设计</a></td>
</tr>
<tr>
<td>客户服务</td>
<td><code>CS-001 ~ CS-007</code></td>
<td><a href="./13_CS_Detailed.md#sec-content">客户服务模块正文</a></td>
<td><a
href="../03_Technical_Design/03_Interface_Design.md">接口设计</a><a
href="../03_Technical_Design/04_Security_Design.md">安全设计</a></td>
</tr>
<tr>
<td>表务管理</td>
<td><code>METER-001 ~ METER-003</code></td>
<td><a href="./14_METER_Detailed.md#sec-content">表务模块正文</a></td>
<td><a
href="../03_Technical_Design/01_Database_Design.md">数据库设计</a><a
href="../03_Technical_Design/03_Interface_Design.md">接口设计</a></td>
</tr>
<tr>
<td>报装与签章</td>
<td><code>INST-001 ~ INST-003</code></td>
<td><a
href="./15_INST_Detailed.md#sec-content">报装与签章模块正文</a></td>
<td><a href="./03_CA_Esignature_Supplement.md">CA 补充说明</a><a
href="../03_Technical_Design/04_Security_Design.md">安全设计</a></td>
</tr>
</tbody>
</table>
<h2 data-number="1.5" id="架构图模块承接映射"><span
class="header-section-number">1.5</span> 架构图模块承接映射</h2>
<table>
<colgroup>
<col style="width: 33%" />
<col style="width: 33%" />
<col style="width: 33%" />
</colgroup>
<thead>
<tr>
<th>架构图对象</th>
<th>当前详设承接方式</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>UP-001 ~ UP-005</code></td>
<td><code>11_UP_Detailed.md</code></td>
<td><code>UP-005</code> 当前并入统一平台运维支撑能力表达</td>
</tr>
<tr>
<td><code>REV-001 ~ REV-009</code></td>
<td><code>12_REV_Detailed.md</code></td>
<td>与营收业务主链路一一对齐</td>
</tr>
<tr>
<td><code>CS-001 ~ CS-007</code></td>
<td><code>13_CS_Detailed.md</code></td>
<td>与客户服务正文一一对齐</td>
</tr>
<tr>
<td><code>WECHAT-001 ~ WECHAT-008</code></td>
<td><code>13_CS_Detailed.md</code></td>
<td>当前作为渠道侧映射,不单独拆出微网厅平行详设</td>
</tr>
<tr>
<td><code>MOBILE-001 ~ MOBILE-006</code></td>
<td><code>12_REV_Detailed.md</code> +
<code>14_METER_Detailed.md</code></td>
<td>当前作为移动抄表 / 现场作业协同能力承接</td>
</tr>
<tr>
<td><code>WORK-001 ~ WORK-004</code></td>
<td>协同承接</td>
<td>当前在客户服务、表务、报装正文中按工单 / 流程支撑能力引用</td>
</tr>
<tr>
<td>架构图 <code>METER-001 ~ METER-003</code></td>
<td><code>14_METER_Detailed.md</code></td>
<td>当前详设已修正为与架构图一致的三段式编号,多余内容改为子能力章节</td>
</tr>
<tr>
<td>架构图 <code>INST-001 ~ INST-003</code></td>
<td><code>15_INST_Detailed.md</code></td>
<td>当前详设已修正为与架构图一致的三段式编号,多余内容改为子能力章节</td>
</tr>
<tr>
<td><code>SYS-008/009/010</code></td>
<td>接口与协同承接</td>
<td>当前不在详细设计目录新增平行主稿,主要在概要、接口和相关业务正文中描述</td>
</tr>
</tbody>
</table>
<p><a id="sec-module-matrix"></a></p>
<h2 data-number="1.6" id="模块级追溯矩阵"><span
class="header-section-number">1.6</span> 模块级追溯矩阵</h2>
<table style="width:100%;">
<colgroup>
<col style="width: 16%" />
<col style="width: 16%" />
<col style="width: 16%" />
<col style="width: 16%" />
<col style="width: 16%" />
<col style="width: 16%" />
</colgroup>
<thead>
<tr>
<th>模块编号</th>
<th>模块名称</th>
<th>模块正文定位</th>
<th>关键数据域(摘要)</th>
<th>关键接口编号(摘要)</th>
<th>主要协同对象</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>UP-001</code></td>
<td>统一认证与单点登录</td>
<td><a href="./11_UP_Detailed.md#mod-up-001">章节</a></td>
<td>用户、令牌、登录日志</td>
<td><code>IF-UP-001</code><code>IF-UP-002</code></td>
<td>各接入端、统一平台</td>
</tr>
<tr>
<td><code>UP-002</code></td>
<td>组织用户与权限管理</td>
<td><a href="./11_UP_Detailed.md#mod-up-002">章节</a></td>
<td>组织、岗位、角色、权限</td>
<td><code>IF-UP-003</code></td>
<td>各业务模块</td>
</tr>
<tr>
<td><code>UP-003</code></td>
<td>参数字典与基础配置</td>
<td><a href="./11_UP_Detailed.md#mod-up-003">章节</a></td>
<td>字典、价格、地址、任务参数</td>
<td><code>IF-UP-004</code></td>
<td>营收、表务、报装</td>
</tr>
<tr>
<td><code>UP-004</code></td>
<td>审计监控与运维支撑</td>
<td><a href="./11_UP_Detailed.md#mod-up-004">章节</a></td>
<td>操作日志、接口日志、任务日志</td>
<td><code>IF-UP-003</code>(审计关联)</td>
<td>运维平台、消息服务</td>
</tr>
<tr>
<td><code>REV-001</code></td>
<td>客户资料管理</td>
<td><a href="./12_REV_Detailed.md#mod-rev-001">章节</a></td>
<td>客户、账户、联系人、绑定关系</td>
<td><code>IF-REV-001</code></td>
<td>客户服务、表务、报装</td>
</tr>
<tr>
<td><code>REV-002</code></td>
<td>抄表开账</td>
<td><a href="./12_REV_Detailed.md#mod-rev-002">章节</a></td>
<td>抄表任务、读数、账单主明细</td>
<td><code>IF-REV-004</code><code>IF-REV-005</code></td>
<td>抄表APP、IoT、表务</td>
</tr>
<tr>
<td><code>REV-003</code></td>
<td>营业收费</td>
<td><a href="./12_REV_Detailed.md#mod-rev-003">章节</a></td>
<td>营业账、交易流水、回调记录</td>
<td><code>IF-REV-006</code></td>
<td><code>SYS-009</code> 支付结算</td>
</tr>
<tr>
<td><code>REV-004</code></td>
<td>账务处理</td>
<td><a href="./12_REV_Detailed.md#mod-rev-004">章节</a></td>
<td>账单调整、日志、审批留痕</td>
<td><code>IF-REV-007</code></td>
<td>财务、营收后台</td>
</tr>
<tr>
<td><code>REV-005</code></td>
<td>发票与税务处理</td>
<td><a href="./12_REV_Detailed.md#mod-rev-005">章节</a></td>
<td>发票主记录、税率、开票信息</td>
<td><code>IF-REV-008</code></td>
<td><code>SYS-008</code> 发票服务</td>
</tr>
<tr>
<td><code>REV-006</code></td>
<td>催缴与通知</td>
<td><a href="./12_REV_Detailed.md#mod-rev-006">章节</a></td>
<td>欠费账单、催缴结果</td>
<td><code>IF-REV-009</code></td>
<td><code>SYS-010</code> 消息服务</td>
</tr>
<tr>
<td><code>REV-007</code></td>
<td>统计分析</td>
<td><a href="./12_REV_Detailed.md#mod-rev-007">章节</a></td>
<td>客户、抄表、收费、渠道聚合</td>
<td><code>IF-REV-010</code></td>
<td>报表与管理端</td>
</tr>
<tr>
<td><code>REV-008</code></td>
<td>代收与银行业务</td>
<td><a href="./12_REV_Detailed.md#mod-rev-008">章节</a></td>
<td>渠道、签约、批次、对账、结算</td>
<td><code>IF-REV-011</code></td>
<td>银行、<code>SYS-009</code></td>
</tr>
<tr>
<td><code>REV-009</code></td>
<td>业务参数配置</td>
<td><a href="./12_REV_Detailed.md#mod-rev-009">章节</a></td>
<td>参数配置、页面配置、价格模板</td>
<td><code>IF-REV-012</code></td>
<td>统一平台、营收模块</td>
</tr>
<tr>
<td><code>CS-001</code></td>
<td>账户绑定管理</td>
<td><a href="./13_CS_Detailed.md#mod-cs-001">章节</a></td>
<td>渠道绑定、客户账户</td>
<td><code>IF-CS-001</code></td>
<td>微信、支付宝、微网厅</td>
</tr>
<tr>
<td><code>CS-002</code></td>
<td>信息查询服务</td>
<td><a href="./13_CS_Detailed.md#mod-cs-002">章节</a></td>
<td>账单、缴费、发票、流水</td>
<td><code>IF-CS-002</code></td>
<td>客户渠道、营收系统</td>
</tr>
<tr>
<td><code>CS-003</code></td>
<td>在线缴费服务</td>
<td><a href="./13_CS_Detailed.md#mod-cs-003">章节</a></td>
<td>订单、交易、回调</td>
<td><code>IF-CS-003</code></td>
<td><code>SYS-009</code> 支付结算</td>
</tr>
<tr>
<td><code>CS-004</code></td>
<td>电子发票服务</td>
<td><a href="./13_CS_Detailed.md#mod-cs-004">章节</a></td>
<td>发票申请、税率、下载记录</td>
<td><code>IF-CS-004</code></td>
<td><code>SYS-008</code> 发票服务</td>
</tr>
<tr>
<td><code>CS-005</code></td>
<td>营业网点服务</td>
<td><a href="./13_CS_Detailed.md#mod-cs-005">章节</a></td>
<td>网点信息、业务范围</td>
<td><code>IF-CS-005</code></td>
<td>客户渠道</td>
</tr>
<tr>
<td><code>CS-006</code></td>
<td>业务办理服务</td>
<td><a href="./13_CS_Detailed.md#mod-cs-006">章节</a></td>
<td>办理申请、办理状态</td>
<td><code>IF-CS-006</code></td>
<td>工单系统、消息服务</td>
</tr>
<tr>
<td><code>CS-007</code></td>
<td>柜面扫码支付</td>
<td><a href="./13_CS_Detailed.md#mod-cs-007">章节</a></td>
<td>柜面订单、流水、核销状态</td>
<td><code>IF-CS-007</code></td>
<td>营业厅、<code>SYS-009</code></td>
</tr>
<tr>
<td><code>METER-001</code></td>
<td>表务基础管理</td>
<td><a href="./14_METER_Detailed.md#mod-meter-001">章节</a></td>
<td>基础参数、水表主档、状态</td>
<td><code>IF-METER-001</code></td>
<td>营收、报装</td>
</tr>
<tr>
<td><code>METER-002</code></td>
<td>仓库与库存管理</td>
<td><a href="./14_METER_Detailed.md#mod-meter-002">章节</a></td>
<td>库存、出入库、退库、报废</td>
<td><code>IF-METER-003</code></td>
<td>仓储管理端</td>
</tr>
<tr>
<td><code>METER-003</code></td>
<td>设备档案管理</td>
<td><a href="./14_METER_Detailed.md#mod-meter-003">章节</a></td>
<td>设备档案、工单留痕、远程同步</td>
<td><code>IF-METER-001</code><code>IF-METER-002</code><code>IF-METER-004</code></td>
<td>工单系统、移动作业、IoT 平台</td>
</tr>
<tr>
<td><code>INST-001</code></td>
<td>报装流程管理</td>
<td><a href="./15_INST_Detailed.md#mod-inst-001">章节</a></td>
<td>申请单、资料附件、踏勘方案</td>
<td><code>IF-INST-001</code><code>IF-INST-002</code></td>
<td>柜台、微网厅、政务、报装人员</td>
</tr>
<tr>
<td><code>INST-002</code></td>
<td>工程管理</td>
<td><a href="./15_INST_Detailed.md#mod-inst-002">章节</a></td>
<td>施工节点、验收结果、签章协同</td>
<td><code>IF-INST-003</code><code>IF-INST-004</code><code>IF-INST-005</code></td>
<td>表务、客户建档、泛微 CA</td>
</tr>
<tr>
<td><code>INST-003</code></td>
<td>档案管理</td>
<td><a href="./15_INST_Detailed.md#mod-inst-003">章节</a></td>
<td>档案、回执、过程日志</td>
<td><code>IF-INST-005</code></td>
<td>报装、档案管理</td>
</tr>
</tbody>
</table>
<p><a id="sec-maintenance"></a></p>
<h2 data-number="1.7" id="维护机制"><span
class="header-section-number">1.7</span> 维护机制</h2>
<p>更新本索引时遵循以下顺序:</p>
<ol type="1">
<li>先更新 <code>01_Detailed_Design.md</code> 中模块主内容;</li>
<li>再同步本索引中的“模块定位/接口编号/数据域摘要”;</li>
<li>如涉及接口变化,同步更新
<code>03_Technical_Design/03_Interface_Design.md</code></li>
<li>完成后至少执行:
<ul>
<li><code>make validate-file FILE=docs/design/02_Detailed_Design/01_Detailed_Design.md</code></li>
<li><code>make validate-file FILE=docs/design/02_Detailed_Design/02_Module_Traceability_Index.md</code></li>
<li><code>make check-links</code></li>
</ul></li>
</ol>
</body>
</html>

Binary file not shown.

View File

@ -0,0 +1,131 @@
---
title: "02_Module_Traceability_Index"
author: "系统设计团队"
date: "2024年12月19日"
documentclass: article
geometry: margin=1in
fontsize: 11pt
mainfont: "PingFang SC"
CJKmainfont: "PingFang SC"
---
---
doc_id: DT-02-TRACE
doc_role: support_document
authority: secondary
scope: 详细设计追溯索引
source_of_truth: false
last_reviewed: 2026-03-11
retrieval_priority: P1
---
# 福建水务营收系统模块追溯索引
## 章节导航(精简)
- [文档定位](#sec-position)
- [追溯使用规则](#sec-rules)
- [子系统级追溯矩阵](#sec-subsystem-matrix)
- [模块级追溯矩阵](#sec-module-matrix)
- [维护机制](#sec-maintenance)
<a id="sec-position"></a>
## 文档定位
本文档用于提供“模块编号 → 主详设章节 → 关键接口 → 关键数据域”的统一检索入口,服务于:
1. 需求评审与影响范围分析;
2. 开发联调阶段的问题定位;
3. AI Agent 检索时的快速跳转。
边界说明:
- 本文档是追溯索引,不替代主详设内容;
- 详细设计权威口径以 `01_Detailed_Design.md` 为准;
- 模块正文承载于 `11_UP_Detailed.md``12_REV_Detailed.md``13_CS_Detailed.md``14_METER_Detailed.md``15_INST_Detailed.md`
- 数据表字段定义以 `03_Technical_Design/01_Database_Design.md` 为主,`03_Technical_Design/02_Table_Specs.md` 仅用于历史映射补充;
- 接口参数细项以 `03_Technical_Design/03_Interface_Design.md` 为准。
<a id="sec-rules"></a>
## 追溯使用规则
1. 先按模块编号定位至主详设章节,再查看接口与数据域映射;
2. 发现模块描述与接口/数据口径冲突时,以主详设为第一参照,并同步修订技术专项文档;
3. 本文档仅保留“可追溯最小必要信息”,不重复搬运完整设计正文;
4. 基础服务子系统SYS-008/009/010在详细设计层按接口协同描述不在此索引中虚增平行模块。
5. 架构图层面的完整模块枚举以 `../01_Overview/05_Module_Inventory.md` 为核对入口;本索引只保留当前详细设计实际承接的模块与必要映射说明。
<a id="sec-subsystem-matrix"></a>
## 子系统级追溯矩阵
| 子系统/能力域 | 模块范围 | 模块正文定位 | 主要技术专题 |
|---|---|---|---|
| 统一平台 | `UP-001 ~ UP-004` | [统一平台模块正文](./11_UP_Detailed.md#sec-content) | [接口设计](../03_Technical_Design/03_Interface_Design.md)、[安全设计](../03_Technical_Design/04_Security_Design.md) |
| 营收业务 | `REV-001 ~ REV-009` | [营收业务模块正文](./12_REV_Detailed.md#sec-content) | [数据库设计](../03_Technical_Design/01_Database_Design.md)、[接口设计](../03_Technical_Design/03_Interface_Design.md) |
| 客户服务 | `CS-001 ~ CS-007` | [客户服务模块正文](./13_CS_Detailed.md#sec-content) | [接口设计](../03_Technical_Design/03_Interface_Design.md)、[安全设计](../03_Technical_Design/04_Security_Design.md) |
| 表务管理 | `METER-001 ~ METER-003` | [表务模块正文](./14_METER_Detailed.md#sec-content) | [数据库设计](../03_Technical_Design/01_Database_Design.md)、[接口设计](../03_Technical_Design/03_Interface_Design.md) |
| 报装与签章 | `INST-001 ~ INST-003` | [报装与签章模块正文](./15_INST_Detailed.md#sec-content) | [CA 补充说明](./03_CA_Esignature_Supplement.md)、[安全设计](../03_Technical_Design/04_Security_Design.md) |
## 架构图模块承接映射
| 架构图对象 | 当前详设承接方式 | 说明 |
| --- | --- | --- |
| `UP-001 ~ UP-005` | `11_UP_Detailed.md` | `UP-005` 当前并入统一平台运维支撑能力表达 |
| `REV-001 ~ REV-009` | `12_REV_Detailed.md` | 与营收业务主链路一一对齐 |
| `CS-001 ~ CS-007` | `13_CS_Detailed.md` | 与客户服务正文一一对齐 |
| `WECHAT-001 ~ WECHAT-008` | `13_CS_Detailed.md` | 当前作为渠道侧映射,不单独拆出微网厅平行详设 |
| `MOBILE-001 ~ MOBILE-006` | `12_REV_Detailed.md` + `14_METER_Detailed.md` | 当前作为移动抄表 / 现场作业协同能力承接 |
| `WORK-001 ~ WORK-004` | 协同承接 | 当前在客户服务、表务、报装正文中按工单 / 流程支撑能力引用 |
| 架构图 `METER-001 ~ METER-003` | `14_METER_Detailed.md` | 当前详设已修正为与架构图一致的三段式编号,多余内容改为子能力章节 |
| 架构图 `INST-001 ~ INST-003` | `15_INST_Detailed.md` | 当前详设已修正为与架构图一致的三段式编号,多余内容改为子能力章节 |
| `SYS-008/009/010` | 接口与协同承接 | 当前不在详细设计目录新增平行主稿,主要在概要、接口和相关业务正文中描述 |
<a id="sec-module-matrix"></a>
## 模块级追溯矩阵
| 模块编号 | 模块名称 | 模块正文定位 | 关键数据域(摘要) | 关键接口编号(摘要) | 主要协同对象 |
|---|---|---|---|---|---|
| `UP-001` | 统一认证与单点登录 | [章节](./11_UP_Detailed.md#mod-up-001) | 用户、令牌、登录日志 | `IF-UP-001``IF-UP-002` | 各接入端、统一平台 |
| `UP-002` | 组织用户与权限管理 | [章节](./11_UP_Detailed.md#mod-up-002) | 组织、岗位、角色、权限 | `IF-UP-003` | 各业务模块 |
| `UP-003` | 参数字典与基础配置 | [章节](./11_UP_Detailed.md#mod-up-003) | 字典、价格、地址、任务参数 | `IF-UP-004` | 营收、表务、报装 |
| `UP-004` | 审计监控与运维支撑 | [章节](./11_UP_Detailed.md#mod-up-004) | 操作日志、接口日志、任务日志 | `IF-UP-003`(审计关联) | 运维平台、消息服务 |
| `REV-001` | 客户资料管理 | [章节](./12_REV_Detailed.md#mod-rev-001) | 客户、账户、联系人、绑定关系 | `IF-REV-001` | 客户服务、表务、报装 |
| `REV-002` | 抄表开账 | [章节](./12_REV_Detailed.md#mod-rev-002) | 抄表任务、读数、账单主明细 | `IF-REV-004``IF-REV-005` | 抄表APP、IoT、表务 |
| `REV-003` | 营业收费 | [章节](./12_REV_Detailed.md#mod-rev-003) | 营业账、交易流水、回调记录 | `IF-REV-006` | `SYS-009` 支付结算 |
| `REV-004` | 账务处理 | [章节](./12_REV_Detailed.md#mod-rev-004) | 账单调整、日志、审批留痕 | `IF-REV-007` | 财务、营收后台 |
| `REV-005` | 发票与税务处理 | [章节](./12_REV_Detailed.md#mod-rev-005) | 发票主记录、税率、开票信息 | `IF-REV-008` | `SYS-008` 发票服务 |
| `REV-006` | 催缴与通知 | [章节](./12_REV_Detailed.md#mod-rev-006) | 欠费账单、催缴结果 | `IF-REV-009` | `SYS-010` 消息服务 |
| `REV-007` | 统计分析 | [章节](./12_REV_Detailed.md#mod-rev-007) | 客户、抄表、收费、渠道聚合 | `IF-REV-010` | 报表与管理端 |
| `REV-008` | 代收与银行业务 | [章节](./12_REV_Detailed.md#mod-rev-008) | 渠道、签约、批次、对账、结算 | `IF-REV-011` | 银行、`SYS-009` |
| `REV-009` | 业务参数配置 | [章节](./12_REV_Detailed.md#mod-rev-009) | 参数配置、页面配置、价格模板 | `IF-REV-012` | 统一平台、营收模块 |
| `CS-001` | 账户绑定管理 | [章节](./13_CS_Detailed.md#mod-cs-001) | 渠道绑定、客户账户 | `IF-CS-001` | 微信、支付宝、微网厅 |
| `CS-002` | 信息查询服务 | [章节](./13_CS_Detailed.md#mod-cs-002) | 账单、缴费、发票、流水 | `IF-CS-002` | 客户渠道、营收系统 |
| `CS-003` | 在线缴费服务 | [章节](./13_CS_Detailed.md#mod-cs-003) | 订单、交易、回调 | `IF-CS-003` | `SYS-009` 支付结算 |
| `CS-004` | 电子发票服务 | [章节](./13_CS_Detailed.md#mod-cs-004) | 发票申请、税率、下载记录 | `IF-CS-004` | `SYS-008` 发票服务 |
| `CS-005` | 营业网点服务 | [章节](./13_CS_Detailed.md#mod-cs-005) | 网点信息、业务范围 | `IF-CS-005` | 客户渠道 |
| `CS-006` | 业务办理服务 | [章节](./13_CS_Detailed.md#mod-cs-006) | 办理申请、办理状态 | `IF-CS-006` | 工单系统、消息服务 |
| `CS-007` | 柜面扫码支付 | [章节](./13_CS_Detailed.md#mod-cs-007) | 柜面订单、流水、核销状态 | `IF-CS-007` | 营业厅、`SYS-009` |
| `METER-001` | 表务基础管理 | [章节](./14_METER_Detailed.md#mod-meter-001) | 基础参数、水表主档、状态 | `IF-METER-001` | 营收、报装 |
| `METER-002` | 仓库与库存管理 | [章节](./14_METER_Detailed.md#mod-meter-002) | 库存、出入库、退库、报废 | `IF-METER-003` | 仓储管理端 |
| `METER-003` | 设备档案管理 | [章节](./14_METER_Detailed.md#mod-meter-003) | 设备档案、工单留痕、远程同步 | `IF-METER-001``IF-METER-002``IF-METER-004` | 工单系统、移动作业、IoT 平台 |
| `INST-001` | 报装流程管理 | [章节](./15_INST_Detailed.md#mod-inst-001) | 申请单、资料附件、踏勘方案 | `IF-INST-001``IF-INST-002` | 柜台、微网厅、政务、报装人员 |
| `INST-002` | 工程管理 | [章节](./15_INST_Detailed.md#mod-inst-002) | 施工节点、验收结果、签章协同 | `IF-INST-003``IF-INST-004``IF-INST-005` | 表务、客户建档、泛微 CA |
| `INST-003` | 档案管理 | [章节](./15_INST_Detailed.md#mod-inst-003) | 档案、回执、过程日志 | `IF-INST-005` | 报装、档案管理 |
<a id="sec-maintenance"></a>
## 维护机制
更新本索引时遵循以下顺序:
1. 先更新 `01_Detailed_Design.md` 中模块主内容;
2. 再同步本索引中的“模块定位/接口编号/数据域摘要”;
3. 如涉及接口变化,同步更新 `03_Technical_Design/03_Interface_Design.md`
4. 完成后至少执行:
- `make validate-file FILE=docs/design/02_Detailed_Design/01_Detailed_Design.md`
- `make validate-file FILE=docs/design/02_Detailed_Design/02_Module_Traceability_Index.md`
- `make check-links`

Binary file not shown.

View File

@ -0,0 +1,334 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="系统设计团队" />
<title>福建水务营收系统-系统架构设计</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<link rel="stylesheet" href="output/document_style.css" />
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<header id="title-block-header">
<h1 class="title">福建水务营收系统-系统架构设计</h1>
<p class="author">系统设计团队</p>
<p class="date">2024年12月19日</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#福建水务营收系统总体架构说明"
id="toc-福建水务营收系统总体架构说明"><span
class="toc-section-number">1</span> 福建水务营收系统总体架构说明</a>
<ul>
<li><a href="#文档定位" id="toc-文档定位"><span
class="toc-section-number">1.1</span> 1. 文档定位</a></li>
<li><a href="#设计输入与约束" id="toc-设计输入与约束"><span
class="toc-section-number">1.2</span> 2. 设计输入与约束</a>
<ul>
<li><a href="#输入来源" id="toc-输入来源"><span
class="toc-section-number">1.2.1</span> 2.1 输入来源</a></li>
<li><a href="#约束原则" id="toc-约束原则"><span
class="toc-section-number">1.2.2</span> 2.2 约束原则</a></li>
</ul></li>
<li><a href="#总体逻辑架构" id="toc-总体逻辑架构"><span
class="toc-section-number">1.3</span> 3. 总体逻辑架构</a></li>
<li><a href="#子系统边界矩阵" id="toc-子系统边界矩阵"><span
class="toc-section-number">1.4</span> 4. 子系统边界矩阵</a></li>
<li><a href="#跨系统协同原则" id="toc-跨系统协同原则"><span
class="toc-section-number">1.5</span> 5. 跨系统协同原则</a>
<ul>
<li><a href="#接口协同" id="toc-接口协同"><span
class="toc-section-number">1.5.1</span> 5.1 接口协同</a></li>
<li><a href="#事务与一致性" id="toc-事务与一致性"><span
class="toc-section-number">1.5.2</span> 5.2 事务与一致性</a></li>
</ul></li>
<li><a href="#数据架构原则" id="toc-数据架构原则"><span
class="toc-section-number">1.6</span> 6. 数据架构原则</a></li>
<li><a href="#部署架构原则" id="toc-部署架构原则"><span
class="toc-section-number">1.7</span> 7. 部署架构原则</a></li>
<li><a href="#安全与合规原则" id="toc-安全与合规原则"><span
class="toc-section-number">1.8</span> 8. 安全与合规原则</a></li>
<li><a href="#非功能性要求概要层" id="toc-非功能性要求概要层"><span
class="toc-section-number">1.9</span> 9. 非功能性要求(概要层)</a></li>
<li><a href="#与主文档映射" id="toc-与主文档映射"><span
class="toc-section-number">1.10</span> 10. 与主文档映射</a></li>
<li><a href="#维护规则" id="toc-维护规则"><span
class="toc-section-number">1.11</span> 11. 维护规则</a></li>
</ul></li>
</ul>
</nav>
<h1 data-number="1" id="福建水务营收系统总体架构说明"><span
class="header-section-number">1</span> 福建水务营收系统总体架构说明</h1>
<h2 data-number="1.1" id="文档定位"><span
class="header-section-number">1.1</span> 1. 文档定位</h2>
<p>本文档用于沉淀系统总体架构的分层方式、子系统边界和跨系统协同原则,作为
<code>03_Summary_Design.md</code> 的架构视图补充。<br />
本文不承载模块级实现细节、接口字段细节和数据库字段细节,避免与主文档重复维护。</p>
<h2 data-number="1.2" id="设计输入与约束"><span
class="header-section-number">1.2</span> 2. 设计输入与约束</h2>
<h3 data-number="1.2.1" id="输入来源"><span
class="header-section-number">1.2.1</span> 2.1 输入来源</h3>
<ul>
<li>主文档:<code>03_Summary_Design.md</code>(唯一真源)</li>
<li>详细设计:<code>../02_Detailed_Design/01_Detailed_Design.md</code></li>
<li>技术专项:<code>../03_Technical_Design/</code></li>
<li>历史与对照资料:<code>../04_Appendix/Archive/</code><code>../../guides/</code></li>
</ul>
<h3 data-number="1.2.2" id="约束原则"><span
class="header-section-number">1.2.2</span> 2.2 约束原则</h3>
<ul>
<li>项目名称统一为“福建水务营收系统”。</li>
<li>接口编号与模块编号区分,接口编号使用 <code>IF-</code> 前缀。</li>
<li>数据库总体口径保持与主文档一致(达梦数据库 8.0+)。</li>
<li>图文必须一致;图示变更需同步核对主文档对应章节。</li>
</ul>
<h2 data-number="1.3" id="总体逻辑架构"><span
class="header-section-number">1.3</span> 3. 总体逻辑架构</h2>
<pre class="mermaid"><code>flowchart TB
subgraph Layer_Presentation[&quot;表现层&quot;]
P_Web[&quot;Web 管理端&quot;]
P_App[&quot;手机抄表 APP&quot;]
P_Channel[&quot;微网厅/渠道端&quot;]
end
subgraph Layer_Gateway[&quot;接入与网关层&quot;]
G_Api[&quot;API 网关&quot;]
G_Auth[&quot;统一认证与鉴权&quot;]
end
subgraph Layer_Business[&quot;业务服务层&quot;]
B_SYS001[&quot;SYS-001 统一平台&quot;]
B_SYS002[&quot;SYS-002 营收业务系统&quot;]
B_SYS003[&quot;SYS-003 手机抄表 APP 服务&quot;]
B_SYS004[&quot;SYS-004 微网厅系统&quot;]
B_SYS005[&quot;SYS-005 工单管理系统&quot;]
B_SYS006[&quot;SYS-006 表务管理系统&quot;]
B_SYS007[&quot;SYS-007 报装业务系统&quot;]
B_SYS008[&quot;SYS-008 发票服务子系统&quot;]
B_SYS009[&quot;SYS-009 支付与银行结算子系统&quot;]
B_SYS010[&quot;SYS-010 消息服务子系统&quot;]
end
subgraph Layer_Infrastructure[&quot;基础能力层&quot;]
I_Workflow[&quot;工作流能力&quot;]
I_File[&quot;文件与附件能力&quot;]
I_Monitor[&quot;监控与审计能力&quot;]
I_Integration[&quot;外部集成适配能力&quot;]
end
subgraph Layer_Data[&quot;数据层&quot;]
D_DM[&quot;达梦数据库 8.0+&quot;]
D_Redis[&quot;Redis 缓存&quot;]
D_Object[&quot;对象存储&quot;]
end
Layer_Presentation --&gt; Layer_Gateway
Layer_Gateway --&gt; Layer_Business
Layer_Business --&gt; Layer_Infrastructure
Layer_Business --&gt; Layer_Data
</code></pre>
<h2 data-number="1.4" id="子系统边界矩阵"><span
class="header-section-number">1.4</span> 4. 子系统边界矩阵</h2>
<table>
<colgroup>
<col style="width: 33%" />
<col style="width: 33%" />
<col style="width: 33%" />
</colgroup>
<thead>
<tr>
<th>子系统</th>
<th>核心职责</th>
<th>边界说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>SYS-001 统一平台</td>
<td>认证、权限、组织、参数、租户、监控</td>
<td>不承载具体行业业务流程</td>
</tr>
<tr>
<td>SYS-002 营收业务系统</td>
<td>客户、抄表开账、收费、账务、客服核心能力</td>
<td>通过接口调用基础服务,不重复建设</td>
</tr>
<tr>
<td>SYS-003 手机抄表 APP</td>
<td>现场作业、移动采集、任务处理</td>
<td>以移动作业能力为主,不替代后台管理</td>
</tr>
<tr>
<td>SYS-004 微网厅系统</td>
<td>客户线上服务与查询缴费</td>
<td>以渠道服务为主,不承载后台运营管理</td>
</tr>
<tr>
<td>SYS-005 工单管理系统</td>
<td>工单流转、状态跟踪、绩效统计</td>
<td>专注工单域,不内嵌收费结算逻辑</td>
</tr>
<tr>
<td>SYS-006 表务管理系统</td>
<td>表务档案、库存、设备管理</td>
<td>专注设备与库存域,不承担账务处理</td>
</tr>
<tr>
<td>SYS-007 报装业务系统</td>
<td>报装流程、工程与档案管理</td>
<td>专注报装域流程,不替代统一工单</td>
</tr>
<tr>
<td>SYS-008 发票服务子系统</td>
<td>开票与供应商适配</td>
<td>对外提供开票能力,不承载支付流程</td>
</tr>
<tr>
<td>SYS-009 支付与银行结算子系统</td>
<td>聚合支付、银行结算、对账</td>
<td>对外提供资金结算能力,不承载发票逻辑</td>
</tr>
<tr>
<td>SYS-010 消息服务子系统</td>
<td>短信/邮件/站内信等消息分发</td>
<td>对外提供消息能力,不承载业务决策</td>
</tr>
</tbody>
</table>
<h2 data-number="1.5" id="跨系统协同原则"><span
class="header-section-number">1.5</span> 5. 跨系统协同原则</h2>
<h3 data-number="1.5.1" id="接口协同"><span
class="header-section-number">1.5.1</span> 5.1 接口协同</h3>
<ul>
<li>子系统间交互通过标准化接口进行,避免跨库直连。</li>
<li>接口编号遵循 <code>IF-</code> 前缀规则,保持可追踪性。</li>
<li>对外集成能力由基础服务子系统统一收口,业务系统按需调用。</li>
</ul>
<h3 data-number="1.5.2" id="事务与一致性"><span
class="header-section-number">1.5.2</span> 5.2 事务与一致性</h3>
<ul>
<li>同步事务优先控制在单子系统内部。</li>
<li>跨系统流程采用“状态驱动 + 补偿机制”的一致性策略。</li>
<li>关键状态变更需具备审计记录与回溯能力。</li>
</ul>
<h2 data-number="1.6" id="数据架构原则"><span
class="header-section-number">1.6</span> 6. 数据架构原则</h2>
<ul>
<li>核心业务数据统一落地至达梦数据库体系。</li>
<li>缓存仅用于性能优化,不作为业务真源。</li>
<li>主数据(客户、账户、设备、组织)在归属子系统维护,跨系统通过接口共享。</li>
<li>涉及敏感信息的数据遵循加密与脱敏规范,具体规则见安全专项文档。</li>
</ul>
<h2 data-number="1.7" id="部署架构原则"><span
class="header-section-number">1.7</span> 7. 部署架构原则</h2>
<ul>
<li>系统采用分层部署,接入层、业务层、数据层职责清晰。</li>
<li>支持容器化部署与统一运维管理,满足扩展与回滚要求。</li>
<li>网络访问遵循内外网分区与最小权限原则。</li>
<li>外部集成链路采用统一接入策略,降低耦合风险。</li>
</ul>
<h2 data-number="1.8" id="安全与合规原则"><span
class="header-section-number">1.8</span> 8. 安全与合规原则</h2>
<ul>
<li>统一认证、统一授权、统一审计。</li>
<li>关键业务接口启用访问控制、参数校验和日志追踪。</li>
<li>敏感数据执行分类保护与最小暴露。</li>
<li>安全设计细则以
<code>../03_Technical_Design/04_Security_Design.md</code> 为准。</li>
</ul>
<h2 data-number="1.9" id="非功能性要求概要层"><span
class="header-section-number">1.9</span> 9. 非功能性要求(概要层)</h2>
<table>
<thead>
<tr>
<th>维度</th>
<th>架构要求</th>
</tr>
</thead>
<tbody>
<tr>
<td>可用性</td>
<td>关键链路具备故障隔离与恢复能力</td>
</tr>
<tr>
<td>可扩展性</td>
<td>子系统边界稳定、能力可水平扩展</td>
</tr>
<tr>
<td>可维护性</td>
<td>文档、编号、接口边界可追踪</td>
</tr>
<tr>
<td>可观测性</td>
<td>关键流程具备日志、指标、审计记录</td>
</tr>
</tbody>
</table>
<blockquote>
<p>量化指标、容量规格与性能参数,以主文档和部署专项文档为准。</p>
</blockquote>
<h2 data-number="1.10" id="与主文档映射"><span
class="header-section-number">1.10</span> 10. 与主文档映射</h2>
<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<thead>
<tr>
<th>本文档章节</th>
<th>主文档对应章节</th>
</tr>
</thead>
<tbody>
<tr>
<td>总体逻辑架构</td>
<td><code>03_Summary_Design.md</code>
中“系统架构设计/系统的逻辑架构设计”</td>
</tr>
<tr>
<td>子系统边界矩阵</td>
<td><code>03_Summary_Design.md</code> 中“子系统定义/子系统列表”</td>
</tr>
<tr>
<td>跨系统协同原则</td>
<td><code>03_Summary_Design.md</code> 中“子系统间关系/主要接口定义”</td>
</tr>
<tr>
<td>数据与部署原则</td>
<td><code>03_Summary_Design.md</code> 中“系统的物理架构设计”</td>
</tr>
</tbody>
</table>
<h2 data-number="1.11" id="维护规则"><span
class="header-section-number">1.11</span> 11. 维护规则</h2>
<ul>
<li>本文档仅维护“总体层原则”,不扩展为详细设计文档。</li>
<li>若与主文档冲突,必须先修正本文档并在台账登记。</li>
<li>修改后至少执行:
<ul>
<li><code>make validate-file FILE=docs/design/01_Overview/02_System_Architecture.md</code></li>
<li><code>make check-links</code></li>
<li><code>make validate-mermaid</code></li>
</ul></li>
</ul>
</body>
</html>

Binary file not shown.

View File

@ -0,0 +1,172 @@
---
title: "02_System_Architecture"
author: "系统设计团队"
date: "2024年12月19日"
documentclass: article
geometry: margin=1in
fontsize: 11pt
mainfont: "PingFang SC"
CJKmainfont: "PingFang SC"
---
---
doc_id: HL-02-ARCHITECTURE
doc_role: supporting_document
authority: supporting
scope: 总体设计-系统架构
source_of_truth: false
last_reviewed: 2026-03-11
retrieval_priority: P1
---
# 福建水务营收系统总体架构说明
## 1. 文档定位
本文档用于沉淀系统总体架构的分层方式、子系统边界和跨系统协同原则,作为 `03_Summary_Design.md` 的架构视图补充。
本文不承载模块级实现细节、接口字段细节和数据库字段细节,避免与主文档重复维护。
## 2. 设计输入与约束
### 2.1 输入来源
- 主文档:`03_Summary_Design.md`(唯一真源)
- 详细设计:`../02_Detailed_Design/01_Detailed_Design.md`
- 技术专项:`../03_Technical_Design/`
- 历史与对照资料:`../04_Appendix/Archive/``../../guides/`
### 2.2 约束原则
- 项目名称统一为“福建水务营收系统”。
- 接口编号与模块编号区分,接口编号使用 `IF-` 前缀。
- 数据库总体口径保持与主文档一致(达梦数据库 8.0+)。
- 图文必须一致;图示变更需同步核对主文档对应章节。
## 3. 总体逻辑架构
```mermaid
flowchart TB
subgraph Layer_Presentation["表现层"]
P_Web["Web 管理端"]
P_App["手机抄表 APP"]
P_Channel["微网厅/渠道端"]
end
subgraph Layer_Gateway["接入与网关层"]
G_Api["API 网关"]
G_Auth["统一认证与鉴权"]
end
subgraph Layer_Business["业务服务层"]
B_SYS001["SYS-001 统一平台"]
B_SYS002["SYS-002 营收业务系统"]
B_SYS003["SYS-003 手机抄表 APP 服务"]
B_SYS004["SYS-004 微网厅系统"]
B_SYS005["SYS-005 工单管理系统"]
B_SYS006["SYS-006 表务管理系统"]
B_SYS007["SYS-007 报装业务系统"]
B_SYS008["SYS-008 发票服务子系统"]
B_SYS009["SYS-009 支付与银行结算子系统"]
B_SYS010["SYS-010 消息服务子系统"]
end
subgraph Layer_Infrastructure["基础能力层"]
I_Workflow["工作流能力"]
I_File["文件与附件能力"]
I_Monitor["监控与审计能力"]
I_Integration["外部集成适配能力"]
end
subgraph Layer_Data["数据层"]
D_DM["达梦数据库 8.0+"]
D_Redis["Redis 缓存"]
D_Object["对象存储"]
end
Layer_Presentation --> Layer_Gateway
Layer_Gateway --> Layer_Business
Layer_Business --> Layer_Infrastructure
Layer_Business --> Layer_Data
```
## 4. 子系统边界矩阵
| 子系统 | 核心职责 | 边界说明 |
| --- | --- | --- |
| SYS-001 统一平台 | 认证、权限、组织、参数、租户、监控 | 不承载具体行业业务流程 |
| SYS-002 营收业务系统 | 客户、抄表开账、收费、账务、客服核心能力 | 通过接口调用基础服务,不重复建设 |
| SYS-003 手机抄表 APP | 现场作业、移动采集、任务处理 | 以移动作业能力为主,不替代后台管理 |
| SYS-004 微网厅系统 | 客户线上服务与查询缴费 | 以渠道服务为主,不承载后台运营管理 |
| SYS-005 工单管理系统 | 工单流转、状态跟踪、绩效统计 | 专注工单域,不内嵌收费结算逻辑 |
| SYS-006 表务管理系统 | 表务档案、库存、设备管理 | 专注设备与库存域,不承担账务处理 |
| SYS-007 报装业务系统 | 报装流程、工程与档案管理 | 专注报装域流程,不替代统一工单 |
| SYS-008 发票服务子系统 | 开票与供应商适配 | 对外提供开票能力,不承载支付流程 |
| SYS-009 支付与银行结算子系统 | 聚合支付、银行结算、对账 | 对外提供资金结算能力,不承载发票逻辑 |
| SYS-010 消息服务子系统 | 短信/邮件/站内信等消息分发 | 对外提供消息能力,不承载业务决策 |
## 5. 跨系统协同原则
### 5.1 接口协同
- 子系统间交互通过标准化接口进行,避免跨库直连。
- 接口编号遵循 `IF-` 前缀规则,保持可追踪性。
- 对外集成能力由基础服务子系统统一收口,业务系统按需调用。
### 5.2 事务与一致性
- 同步事务优先控制在单子系统内部。
- 跨系统流程采用“状态驱动 + 补偿机制”的一致性策略。
- 关键状态变更需具备审计记录与回溯能力。
## 6. 数据架构原则
- 核心业务数据统一落地至达梦数据库体系。
- 缓存仅用于性能优化,不作为业务真源。
- 主数据(客户、账户、设备、组织)在归属子系统维护,跨系统通过接口共享。
- 涉及敏感信息的数据遵循加密与脱敏规范,具体规则见安全专项文档。
## 7. 部署架构原则
- 系统采用分层部署,接入层、业务层、数据层职责清晰。
- 支持容器化部署与统一运维管理,满足扩展与回滚要求。
- 网络访问遵循内外网分区与最小权限原则。
- 外部集成链路采用统一接入策略,降低耦合风险。
## 8. 安全与合规原则
- 统一认证、统一授权、统一审计。
- 关键业务接口启用访问控制、参数校验和日志追踪。
- 敏感数据执行分类保护与最小暴露。
- 安全设计细则以 `../03_Technical_Design/04_Security_Design.md` 为准。
## 9. 非功能性要求(概要层)
| 维度 | 架构要求 |
| --- | --- |
| 可用性 | 关键链路具备故障隔离与恢复能力 |
| 可扩展性 | 子系统边界稳定、能力可水平扩展 |
| 可维护性 | 文档、编号、接口边界可追踪 |
| 可观测性 | 关键流程具备日志、指标、审计记录 |
> 量化指标、容量规格与性能参数,以主文档和部署专项文档为准。
## 10. 与主文档映射
| 本文档章节 | 主文档对应章节 |
| --- | --- |
| 总体逻辑架构 | `03_Summary_Design.md` 中“系统架构设计/系统的逻辑架构设计” |
| 子系统边界矩阵 | `03_Summary_Design.md` 中“子系统定义/子系统列表” |
| 跨系统协同原则 | `03_Summary_Design.md` 中“子系统间关系/主要接口定义” |
| 数据与部署原则 | `03_Summary_Design.md` 中“系统的物理架构设计” |
## 11. 维护规则
- 本文档仅维护“总体层原则”,不扩展为详细设计文档。
- 若与主文档冲突,必须先修正本文档并在台账登记。
- 修改后至少执行:
- `make validate-file FILE=docs/design/01_Overview/02_System_Architecture.md`
- `make check-links`
- `make validate-mermaid`

BIN
output/02_Table_Specs.docx Normal file

Binary file not shown.

294
output/02_Table_Specs.html Normal file
View File

@ -0,0 +1,294 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="系统设计团队" />
<title>福建水务营收系统-单表规格补充(历史映射)</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<link rel="stylesheet" href="output/document_style.css" />
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<header id="title-block-header">
<h1 class="title">福建水务营收系统-单表规格补充(历史映射)</h1>
<p class="author">系统设计团队</p>
<p class="date">2024年12月19日</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#福建水务营收系统单表规格补充历史映射"
id="toc-福建水务营收系统单表规格补充历史映射"><span
class="toc-section-number">1</span>
福建水务营收系统单表规格补充(历史映射)</a>
<ul>
<li><a href="#章节导航精简" id="toc-章节导航精简"><span
class="toc-section-number">1.1</span> 章节导航(精简)</a>
<ul>
<li><a href="#营收与表务常见历史命名"
id="toc-营收与表务常见历史命名"><span
class="toc-section-number">1.1.1</span> 营收与表务常见历史命名</a></li>
<li><a href="#meter表务专题" id="toc-meter表务专题"><span
class="toc-section-number">1.1.2</span> METER表务专题</a></li>
<li><a href="#inst报装与签章专题" id="toc-inst报装与签章专题"><span
class="toc-section-number">1.1.3</span> INST报装与签章专题</a></li>
</ul></li>
</ul></li>
</ul>
</nav>
<h1 data-number="1" id="福建水务营收系统单表规格补充历史映射"><span
class="header-section-number">1</span>
福建水务营收系统单表规格补充(历史映射)</h1>
<h2 data-number="1.1" id="章节导航精简"><span
class="header-section-number">1.1</span> 章节导航(精简)</h2>
<ul>
<li><a href="#sec-position">文档定位</a></li>
<li><a href="#sec-priority">口径优先级</a></li>
<li><a href="#sec-legacy-mapping">历史命名映射矩阵</a></li>
<li><a href="#sec-topic">METER/INST 专题补充</a></li>
<li><a href="#sec-maintenance">维护规则</a></li>
</ul>
<p><a id="sec-position"></a> ## 文档定位</p>
<p>本文档定位为“单表规格补充与历史命名映射”,用于承接存量资料中的旧表名、专题扩展表与主文档之间的对照关系。</p>
<p>边界约束:</p>
<ul>
<li>本文档<strong>不是</strong>数据库主文档;</li>
<li>字段定义与正式表口径以 <code>01_Database_Design.md</code>
为准;</li>
<li>接口与数据对象口径以 <code>03_Interface_Design.md</code> 为准;</li>
<li>遇到冲突时,不以本文件反向覆盖主文档。</li>
</ul>
<p><a id="sec-priority"></a> ## 口径优先级</p>
<p>数据库相关口径按以下优先级使用:</p>
<ol type="1">
<li><code>docs/design/03_Technical_Design/01_Database_Design.md</code>(主文档)</li>
<li><code>docs/design/03_Technical_Design/03_Interface_Design.md</code>(接口数据对象)</li>
<li><code>docs/design/02_Detailed_Design/01_Detailed_Design.md</code>
<code>11~15</code> 分模块正文</li>
<li>本文档(历史映射与补充)</li>
<li><code>docs/design/04_Appendix/Archive/</code> 历史资料</li>
</ol>
<p>数据库技术口径统一为 <strong>达梦数据库 8.0+</strong>(兼容 MySQL
语法习惯)。</p>
<p><a id="sec-legacy-mapping"></a> ## 历史命名映射矩阵</p>
<h3 data-number="1.1.1" id="营收与表务常见历史命名"><span
class="header-section-number">1.1.1</span> 营收与表务常见历史命名</h3>
<table>
<colgroup>
<col style="width: 25%" />
<col style="width: 25%" />
<col style="width: 25%" />
<col style="width: 25%" />
</colgroup>
<thead>
<tr>
<th style="text-align: left;">历史表名(存量资料)</th>
<th style="text-align: left;">当前主口径</th>
<th style="text-align: left;">状态</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;"><code>water_customer</code></td>
<td style="text-align: left;"><code>biz_cust</code></td>
<td style="text-align: left;">已收敛</td>
<td style="text-align: left;">客户主档</td>
</tr>
<tr>
<td style="text-align: left;"><code>water_account</code></td>
<td style="text-align: left;"><code>biz_account</code></td>
<td style="text-align: left;">已收敛</td>
<td style="text-align: left;">客户账户</td>
</tr>
<tr>
<td style="text-align: left;"><code>water_meter</code></td>
<td style="text-align: left;"><code>biz_meter</code></td>
<td style="text-align: left;">已收敛</td>
<td style="text-align: left;">水表主档</td>
</tr>
<tr>
<td style="text-align: left;"><code>water_meter_reading</code></td>
<td style="text-align: left;"><code>biz_meter_read</code> +
<code>biz_reading_data</code></td>
<td style="text-align: left;">已收敛</td>
<td style="text-align: left;">抄表任务与读数分离建模</td>
</tr>
<tr>
<td style="text-align: left;"><code>water_bill</code></td>
<td style="text-align: left;"><code>biz_charge</code> +
<code>biz_charge_detail</code></td>
<td style="text-align: left;">已收敛</td>
<td style="text-align: left;">账单主表与明细表分离</td>
</tr>
<tr>
<td style="text-align: left;"><code>water_payment</code></td>
<td style="text-align: left;"><code>biz_collection</code> +
<code>bk_transaction</code></td>
<td style="text-align: left;">已收敛</td>
<td style="text-align: left;">收费业务与渠道流水分离</td>
</tr>
<tr>
<td style="text-align: left;"><code>water_invoice</code></td>
<td style="text-align: left;"><code>biz_invoice</code> +
<code>biz_invoice_taxrate</code></td>
<td style="text-align: left;">已收敛</td>
<td style="text-align: left;">发票申请与税率配置</td>
</tr>
<tr>
<td style="text-align: left;"><code>water_meter_workorder</code></td>
<td style="text-align: left;"><code>biz_meter_log</code> +
<code>biz_process_transfer</code></td>
<td style="text-align: left;">已收敛</td>
<td style="text-align: left;">表务工单过程留痕</td>
</tr>
<tr>
<td style="text-align: left;"><code>water_meter_stock</code></td>
<td style="text-align: left;"><code>biz_meter_in_out</code></td>
<td style="text-align: left;">已收敛</td>
<td style="text-align: left;">库存主记录</td>
</tr>
<tr>
<td style="text-align: left;"><code>water_meter_inventory</code></td>
<td style="text-align: left;"><code>biz_meter_in_out_rel</code></td>
<td style="text-align: left;">已收敛</td>
<td style="text-align: left;">出入库关联明细</td>
</tr>
<tr>
<td style="text-align: left;"><code>water_meter_archive</code></td>
<td style="text-align: left;"><code>biz_meter</code> +
<code>biz_last_reading</code></td>
<td style="text-align: left;">已收敛</td>
<td style="text-align: left;">档案与状态统一收口</td>
</tr>
</tbody>
</table>
<blockquote>
<p>说明:上述 <code>water_*</code>
名称仅用于历史资料追溯,不作为当前正式设计与实施命名。</p>
</blockquote>
<p><a id="sec-topic"></a> ## METER/INST 专题补充</p>
<h3 data-number="1.1.2" id="meter表务专题"><span
class="header-section-number">1.1.2</span> METER表务专题</h3>
<table>
<colgroup>
<col style="width: 33%" />
<col style="width: 33%" />
<col style="width: 33%" />
</colgroup>
<thead>
<tr>
<th style="text-align: left;">数据域</th>
<th style="text-align: left;">主要表</th>
<th style="text-align: left;">口径</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">水表基础档案</td>
<td
style="text-align: left;"><code>biz_meter</code><code>biz_meter_model</code><code>biz_meter_caliber</code><code>biz_meter_range</code></td>
<td style="text-align: left;">实现态</td>
</tr>
<tr>
<td style="text-align: left;">抄表与读数</td>
<td
style="text-align: left;"><code>biz_meter_read</code><code>biz_reading_data</code><code>biz_last_reading</code></td>
<td style="text-align: left;">实现态</td>
</tr>
<tr>
<td style="text-align: left;">工单与处理留痕</td>
<td
style="text-align: left;"><code>biz_meter_log</code><code>biz_process</code><code>biz_process_transfer</code></td>
<td style="text-align: left;">实现态</td>
</tr>
<tr>
<td style="text-align: left;">库存与生命周期</td>
<td
style="text-align: left;"><code>biz_meter_in_out</code><code>biz_meter_in_out_rel</code></td>
<td style="text-align: left;">实现态</td>
</tr>
</tbody>
</table>
<h3 data-number="1.1.3" id="inst报装与签章专题"><span
class="header-section-number">1.1.3</span> INST报装与签章专题</h3>
<table>
<colgroup>
<col style="width: 33%" />
<col style="width: 33%" />
<col style="width: 33%" />
</colgroup>
<thead>
<tr>
<th style="text-align: left;">数据域</th>
<th style="text-align: left;">主要表</th>
<th style="text-align: left;">口径</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">报装流程主线</td>
<td
style="text-align: left;"><code>biz_process</code><code>biz_process_transfer</code><code>biz_business_datas</code></td>
<td style="text-align: left;">实现态</td>
</tr>
<tr>
<td style="text-align: left;">报装资料附件</td>
<td
style="text-align: left;"><code>biz_content</code><code>biz_content_attach</code></td>
<td style="text-align: left;">实现态</td>
</tr>
<tr>
<td style="text-align: left;">合同签章扩展</td>
<td
style="text-align: left;"><code>installation_contract</code><code>installation_signature</code><code>installation_evidence</code></td>
<td style="text-align: left;">专题设计态</td>
</tr>
<tr>
<td style="text-align: left;">CA 配置与模板</td>
<td
style="text-align: left;"><code>installation_ca_config</code><code>installation_signature_template</code></td>
<td style="text-align: left;">专题设计态</td>
</tr>
</tbody>
</table>
<p>专题来源参考:</p>
<ul>
<li><code>docs/design/02_Detailed_Design/14_METER_Detailed.md</code></li>
<li><code>docs/design/02_Detailed_Design/15_INST_Detailed.md</code></li>
<li><code>docs/design/04_Appendix/01_Overview_CA.md</code></li>
<li><code>docs/design/04_Appendix/02_Database_Design_CA.md</code></li>
</ul>
<p><a id="sec-maintenance"></a> ## 维护规则</p>
<ol type="1">
<li>新增或调整表口径时,先更新
<code>01_Database_Design.md</code>,再更新本映射文档;</li>
<li>历史表名只做映射,不新增“并行主模型”;</li>
<li>本文档新增映射项时,需同步检查
<code>02_Detailed_Design/02_Module_Traceability_Index.md</code></li>
<li>完成后至少执行:
<ul>
<li><code>make validate-file FILE=docs/design/03_Technical_Design/01_Database_Design.md</code></li>
<li><code>make validate-file FILE=docs/design/03_Technical_Design/02_Table_Specs.md</code></li>
<li><code>make check-links</code></li>
</ul></li>
</ol>
</body>
</html>

BIN
output/02_Table_Specs.pdf Normal file

Binary file not shown.

View File

@ -0,0 +1,115 @@
---
title: "02_Table_Specs"
author: "系统设计团队"
date: "2024年12月19日"
documentclass: article
geometry: margin=1in
fontsize: 11pt
mainfont: "PingFang SC"
CJKmainfont: "PingFang SC"
---
---
doc_id: TC-02-TABLE-SPECS
doc_role: support_document
authority: secondary
scope: 单表规格补充与历史映射
source_of_truth: false
last_reviewed: 2026-03-11
retrieval_priority: P2
---
# 福建水务营收系统单表规格补充(历史映射)
## 章节导航(精简)
- [文档定位](#sec-position)
- [口径优先级](#sec-priority)
- [历史命名映射矩阵](#sec-legacy-mapping)
- [METER/INST 专题补充](#sec-topic)
- [维护规则](#sec-maintenance)
<a id="sec-position"></a>
## 文档定位
本文档定位为“单表规格补充与历史命名映射”,用于承接存量资料中的旧表名、专题扩展表与主文档之间的对照关系。
边界约束:
- 本文档**不是**数据库主文档;
- 字段定义与正式表口径以 `01_Database_Design.md` 为准;
- 接口与数据对象口径以 `03_Interface_Design.md` 为准;
- 遇到冲突时,不以本文件反向覆盖主文档。
<a id="sec-priority"></a>
## 口径优先级
数据库相关口径按以下优先级使用:
1. `docs/design/03_Technical_Design/01_Database_Design.md`(主文档)
2. `docs/design/03_Technical_Design/03_Interface_Design.md`(接口数据对象)
3. `docs/design/02_Detailed_Design/01_Detailed_Design.md``11~15` 分模块正文
4. 本文档(历史映射与补充)
5. `docs/design/04_Appendix/Archive/` 历史资料
数据库技术口径统一为 **达梦数据库 8.0+**(兼容 MySQL 语法习惯)。
<a id="sec-legacy-mapping"></a>
## 历史命名映射矩阵
### 营收与表务常见历史命名
| 历史表名(存量资料) | 当前主口径 | 状态 | 说明 |
| :--- | :--- | :--- | :--- |
| `water_customer` | `biz_cust` | 已收敛 | 客户主档 |
| `water_account` | `biz_account` | 已收敛 | 客户账户 |
| `water_meter` | `biz_meter` | 已收敛 | 水表主档 |
| `water_meter_reading` | `biz_meter_read` + `biz_reading_data` | 已收敛 | 抄表任务与读数分离建模 |
| `water_bill` | `biz_charge` + `biz_charge_detail` | 已收敛 | 账单主表与明细表分离 |
| `water_payment` | `biz_collection` + `bk_transaction` | 已收敛 | 收费业务与渠道流水分离 |
| `water_invoice` | `biz_invoice` + `biz_invoice_taxrate` | 已收敛 | 发票申请与税率配置 |
| `water_meter_workorder` | `biz_meter_log` + `biz_process_transfer` | 已收敛 | 表务工单过程留痕 |
| `water_meter_stock` | `biz_meter_in_out` | 已收敛 | 库存主记录 |
| `water_meter_inventory` | `biz_meter_in_out_rel` | 已收敛 | 出入库关联明细 |
| `water_meter_archive` | `biz_meter` + `biz_last_reading` | 已收敛 | 档案与状态统一收口 |
> 说明:上述 `water_*` 名称仅用于历史资料追溯,不作为当前正式设计与实施命名。
<a id="sec-topic"></a>
## METER/INST 专题补充
### METER表务专题
| 数据域 | 主要表 | 口径 |
| :--- | :--- | :--- |
| 水表基础档案 | `biz_meter``biz_meter_model``biz_meter_caliber``biz_meter_range` | 实现态 |
| 抄表与读数 | `biz_meter_read``biz_reading_data``biz_last_reading` | 实现态 |
| 工单与处理留痕 | `biz_meter_log``biz_process``biz_process_transfer` | 实现态 |
| 库存与生命周期 | `biz_meter_in_out``biz_meter_in_out_rel` | 实现态 |
### INST报装与签章专题
| 数据域 | 主要表 | 口径 |
| :--- | :--- | :--- |
| 报装流程主线 | `biz_process``biz_process_transfer``biz_business_datas` | 实现态 |
| 报装资料附件 | `biz_content``biz_content_attach` | 实现态 |
| 合同签章扩展 | `installation_contract``installation_signature``installation_evidence` | 专题设计态 |
| CA 配置与模板 | `installation_ca_config``installation_signature_template` | 专题设计态 |
专题来源参考:
- `docs/design/02_Detailed_Design/14_METER_Detailed.md`
- `docs/design/02_Detailed_Design/15_INST_Detailed.md`
- `docs/design/04_Appendix/01_Overview_CA.md`
- `docs/design/04_Appendix/02_Database_Design_CA.md`
<a id="sec-maintenance"></a>
## 维护规则
1. 新增或调整表口径时,先更新 `01_Database_Design.md`,再更新本映射文档;
2. 历史表名只做映射,不新增“并行主模型”;
3. 本文档新增映射项时,需同步检查 `02_Detailed_Design/02_Module_Traceability_Index.md`
4. 完成后至少执行:
- `make validate-file FILE=docs/design/03_Technical_Design/01_Database_Design.md`
- `make validate-file FILE=docs/design/03_Technical_Design/02_Table_Specs.md`
- `make check-links`

Binary file not shown.

View File

@ -0,0 +1,387 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="系统设计团队" />
<title>福建水务营收系统-报装CA电子签章补充</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<link rel="stylesheet" href="output/document_style.css" />
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<header id="title-block-header">
<h1 class="title">福建水务营收系统-报装CA电子签章补充</h1>
<p class="author">系统设计团队</p>
<p class="date">2024年12月19日</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#福建水务营收系统报装电子签章设计补充说明"
id="toc-福建水务营收系统报装电子签章设计补充说明"><span
class="toc-section-number">1</span>
福建水务营收系统报装电子签章设计补充说明</a>
<ul>
<li><a href="#章节导航精简" id="toc-章节导航精简"><span
class="toc-section-number">1.1</span> 章节导航(精简)</a></li>
<li><a href="#文档定位与边界" id="toc-文档定位与边界"><span
class="toc-section-number">1.2</span> 文档定位与边界</a></li>
<li><a href="#集成架构与交互边界" id="toc-集成架构与交互边界"><span
class="toc-section-number">1.3</span> 集成架构与交互边界</a></li>
<li><a href="#接口清单与字段约定" id="toc-接口清单与字段约定"><span
class="toc-section-number">1.4</span> 接口清单与字段约定</a>
<ul>
<li><a href="#接口清单" id="toc-接口清单"><span
class="toc-section-number">1.4.1</span> 1. 接口清单</a></li>
<li><a href="#字段约定最小集" id="toc-字段约定最小集"><span
class="toc-section-number">1.4.2</span> 2. 字段约定(最小集)</a></li>
</ul></li>
<li><a href="#流程约束与状态管理" id="toc-流程约束与状态管理"><span
class="toc-section-number">1.5</span> 流程约束与状态管理</a>
<ul>
<li><a href="#签章状态机" id="toc-签章状态机"><span
class="toc-section-number">1.5.1</span> 1. 签章状态机</a></li>
<li><a href="#关键约束" id="toc-关键约束"><span
class="toc-section-number">1.5.2</span> 2. 关键约束</a></li>
</ul></li>
<li><a href="#异常补偿与重试机制" id="toc-异常补偿与重试机制"><span
class="toc-section-number">1.6</span> 异常补偿与重试机制</a></li>
<li><a href="#安全与合规控制" id="toc-安全与合规控制"><span
class="toc-section-number">1.7</span> 安全与合规控制</a></li>
<li><a href="#运维监控与发布管理" id="toc-运维监控与发布管理"><span
class="toc-section-number">1.8</span> 运维监控与发布管理</a>
<ul>
<li><a href="#监控指标" id="toc-监控指标"><span
class="toc-section-number">1.8.1</span> 1. 监控指标</a></li>
<li><a href="#发布与变更" id="toc-发布与变更"><span
class="toc-section-number">1.8.2</span> 2. 发布与变更</a></li>
</ul></li>
</ul></li>
</ul>
</nav>
<h1 data-number="1" id="福建水务营收系统报装电子签章设计补充说明"><span
class="header-section-number">1</span>
福建水务营收系统报装电子签章设计补充说明</h1>
<h2 data-number="1.1" id="章节导航精简"><span
class="header-section-number">1.1</span> 章节导航(精简)</h2>
<ul>
<li><a href="#sec-position">文档定位与边界</a></li>
<li><a href="#sec-architecture">集成架构与交互边界</a></li>
<li><a href="#sec-interface">接口清单与字段约定</a></li>
<li><a href="#sec-process">流程约束与状态管理</a></li>
<li><a href="#sec-retry">异常补偿与重试机制</a></li>
<li><a href="#sec-security">安全与合规控制</a></li>
<li><a href="#sec-ops">运维监控与发布管理</a></li>
</ul>
<p><a id="sec-position"></a></p>
<h2 data-number="1.2" id="文档定位与边界"><span
class="header-section-number">1.2</span> 文档定位与边界</h2>
<p>本文件是 <code>01_Detailed_Design.md</code>
<code>INST-002 工程管理</code>
下“合同签署与电子签章能力”的专项补充文档,重点补充:</p>
<ol type="1">
<li>泛微 CA 接口对接边界与字段约定;</li>
<li>签章任务状态流转、异常补偿和运维观测点;</li>
<li>合规与审计约束落地要求。</li>
</ol>
<p>权威边界:</p>
<ul>
<li>报装业务主流程以 <code>01_Detailed_Design.md</code> 为准;</li>
<li>CA 方案总览可参考
<code>../04_Appendix/03_CA_Integration_Summary.md</code></li>
<li>安全控制通用要求以
<code>../03_Technical_Design/04_Security_Design.md</code> 为准。</li>
</ul>
<p><a id="sec-architecture"></a></p>
<h2 data-number="1.3" id="集成架构与交互边界"><span
class="header-section-number">1.3</span> 集成架构与交互边界</h2>
<pre class="mermaid"><code>flowchart LR
subgraph INST[报装业务系统]
A[合同管理]
B[签章任务中心]
C[回执处理]
D[档案归档]
end
subgraph CA[泛微 CA 电子签章平台]
E[身份认证接口]
F[签章接口]
G[时间戳接口]
H[存证接口]
end
A --&gt; B
B --&gt; E
B --&gt; F
B --&gt; G
B --&gt; H
F --&gt; C
G --&gt; C
H --&gt; C
C --&gt; D
</code></pre>
<p>边界说明:</p>
<ul>
<li>报装系统负责合同上下文、签署方信息、业务状态回写与档案归档;</li>
<li>泛微 CA 负责身份认证、签章执行、时间戳与存证;</li>
<li>回执成功后才允许进入“归档完成”状态。</li>
</ul>
<p><a id="sec-interface"></a></p>
<h2 data-number="1.4" id="接口清单与字段约定"><span
class="header-section-number">1.4</span> 接口清单与字段约定</h2>
<h3 data-number="1.4.1" id="接口清单"><span
class="header-section-number">1.4.1</span> 1. 接口清单</h3>
<table>
<colgroup>
<col style="width: 20%" />
<col style="width: 20%" />
<col style="width: 20%" />
<col style="width: 20%" />
<col style="width: 20%" />
</colgroup>
<thead>
<tr>
<th>接口方向</th>
<th>业务接口编号</th>
<th>对接接口名称</th>
<th>关键输入</th>
<th>关键输出</th>
</tr>
</thead>
<tbody>
<tr>
<td>报装系统 → CA</td>
<td><code>IF-INST-003</code></td>
<td>合同签署发起</td>
<td>合同ID、签署方、签署位置、业务流水号</td>
<td>签章任务ID、受理状态</td>
</tr>
<tr>
<td>报装系统 → CA</td>
<td><code>IF-INST-003</code></td>
<td>身份认证调用</td>
<td>用户标识、认证类型、认证要素</td>
<td>认证结果、认证凭证</td>
</tr>
<tr>
<td>报装系统 → CA</td>
<td><code>IF-INST-003</code></td>
<td>时间戳申请</td>
<td>签章摘要哈希、请求时间</td>
<td>时间戳令牌、签发时间</td>
</tr>
<tr>
<td>报装系统 → CA</td>
<td><code>IF-INST-003</code></td>
<td>存证申请</td>
<td>签章后文档摘要、元数据</td>
<td>存证ID、存证状态</td>
</tr>
<tr>
<td>CA → 报装系统</td>
<td><code>IF-INST-004</code></td>
<td>签章结果回执</td>
<td>任务ID、签章状态、凭证编号、失败原因</td>
<td>回写结果、重试标记</td>
</tr>
</tbody>
</table>
<h3 data-number="1.4.2" id="字段约定最小集"><span
class="header-section-number">1.4.2</span> 2. 字段约定(最小集)</h3>
<table>
<thead>
<tr>
<th>字段</th>
<th>说明</th>
<th>约束</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>biz_trace_id</code></td>
<td>业务追踪ID</td>
<td>必填;同一签署流程全链路唯一</td>
</tr>
<tr>
<td><code>contract_id</code></td>
<td>合同ID</td>
<td>必填;与报装申请单关联</td>
</tr>
<tr>
<td><code>sign_task_id</code></td>
<td>签章任务ID</td>
<td>回执必填;用于幂等去重</td>
</tr>
<tr>
<td><code>sign_status</code></td>
<td>签署状态</td>
<td>必填;<code>INIT/PROCESSING/SUCCESS/FAILED</code></td>
</tr>
<tr>
<td><code>evidence_id</code></td>
<td>存证ID</td>
<td>成功场景必填</td>
</tr>
<tr>
<td><code>error_code</code></td>
<td>异常码</td>
<td>失败场景必填</td>
</tr>
<tr>
<td><code>error_message</code></td>
<td>异常描述</td>
<td>失败场景必填;可审计</td>
</tr>
<tr>
<td><code>callback_time</code></td>
<td>回执时间</td>
<td>必填;用于超时判断</td>
</tr>
</tbody>
</table>
<p><a id="sec-process"></a></p>
<h2 data-number="1.5" id="流程约束与状态管理"><span
class="header-section-number">1.5</span> 流程约束与状态管理</h2>
<h3 data-number="1.5.1" id="签章状态机"><span
class="header-section-number">1.5.1</span> 1. 签章状态机</h3>
<pre class="mermaid"><code>stateDiagram-v2
[*] --&gt; INIT
INIT --&gt; PROCESSING: 发起签署
PROCESSING --&gt; SUCCESS: 回执成功
PROCESSING --&gt; FAILED: 回执失败
FAILED --&gt; PROCESSING: 人工重试/系统重试
SUCCESS --&gt; ARCHIVED: 完成归档
ARCHIVED --&gt; [*]
</code></pre>
<h3 data-number="1.5.2" id="关键约束"><span
class="header-section-number">1.5.2</span> 2. 关键约束</h3>
<ol type="1">
<li>签章发起前必须完成合同正文固化与版本锁定;</li>
<li>同一 <code>sign_task_id</code>
回执必须幂等处理,禁止重复更新业务状态;</li>
<li>失败回执需记录错误码并进入补偿队列,不允许静默丢失;</li>
<li>归档完成前,合同状态不得标记为“签署完成可生效”。</li>
</ol>
<p><a id="sec-retry"></a></p>
<h2 data-number="1.6" id="异常补偿与重试机制"><span
class="header-section-number">1.6</span> 异常补偿与重试机制</h2>
<table>
<colgroup>
<col style="width: 25%" />
<col style="width: 25%" />
<col style="width: 25%" />
<col style="width: 25%" />
</colgroup>
<thead>
<tr>
<th>异常类型</th>
<th>检测方式</th>
<th>处理策略</th>
<th>人工介入条件</th>
</tr>
</thead>
<tbody>
<tr>
<td>网络超时</td>
<td>请求超时/连接异常</td>
<td>指数退避重试最多3次</td>
<td>连续失败或超时超过阈值</td>
</tr>
<tr>
<td>CA受理失败</td>
<td>返回失败码</td>
<td>写入补偿队列并通知业务端</td>
<td>失败码为不可恢复类</td>
</tr>
<tr>
<td>回执丢失</td>
<td>超时未回执</td>
<td>主动查询 + 重放回执校验</td>
<td>超过最大等待窗口</td>
</tr>
<tr>
<td>数据校验失败</td>
<td>字段缺失/签名不匹配</td>
<td>拒绝入库并告警</td>
<td>连续出现同类异常</td>
</tr>
</tbody>
</table>
<p>补偿要求:</p>
<ul>
<li>所有补偿任务必须带 <code>biz_trace_id</code></li>
<li>重试与人工补录均写入审计日志;</li>
<li>重试成功后需自动回补主流程状态。</li>
</ul>
<p><a id="sec-security"></a></p>
<h2 data-number="1.7" id="安全与合规控制"><span
class="header-section-number">1.7</span> 安全与合规控制</h2>
<ol type="1">
<li>传输安全CA 对接链路统一使用 HTTPS回执启用签名校验</li>
<li>身份安全:签署方认证结果需与报装业务实名信息一致;</li>
<li>数据安全:合同摘要、签章凭证、存证编号需防篡改存储;</li>
<li>审计留痕:签章发起、回执处理、补偿重试、人工干预均需审计;</li>
<li>合规要求:执行《电子签名法》及项目安全设计文档中关于日志留痕、访问控制和数据保护要求。</li>
</ol>
<p><a id="sec-ops"></a></p>
<h2 data-number="1.8" id="运维监控与发布管理"><span
class="header-section-number">1.8</span> 运维监控与发布管理</h2>
<h3 data-number="1.8.1" id="监控指标"><span
class="header-section-number">1.8.1</span> 1. 监控指标</h3>
<table>
<thead>
<tr>
<th>指标</th>
<th>说明</th>
<th>建议阈值</th>
</tr>
</thead>
<tbody>
<tr>
<td>签章成功率</td>
<td>成功任务 / 总任务</td>
<td>日均 ≥ 99%</td>
</tr>
<tr>
<td>回执时延P95</td>
<td>发起到回执耗时</td>
<td>≤ 5 秒</td>
</tr>
<tr>
<td>补偿队列积压</td>
<td>待补偿任务数</td>
<td>告警阈值按租户配置</td>
</tr>
<tr>
<td>幂等冲突次数</td>
<td>重复回执冲突数</td>
<td>连续异常触发告警</td>
</tr>
</tbody>
</table>
<h3 data-number="1.8.2" id="发布与变更"><span
class="header-section-number">1.8.2</span> 2. 发布与变更</h3>
<ol type="1">
<li>涉及 CA 字段或签名算法变更,需先更新本补充文档与接口设计文档;</li>
<li>发布前执行联调清单:签署成功、签署失败、回执重放、超时补偿;</li>
<li>发布后至少观察一个完整业务周期,确认签章成功率与回执时延稳定。</li>
</ol>
</body>
</html>

Binary file not shown.

View File

@ -0,0 +1,188 @@
---
title: "03_CA_Esignature_Supplement"
author: "系统设计团队"
date: "2024年12月19日"
documentclass: article
geometry: margin=1in
fontsize: 11pt
mainfont: "PingFang SC"
CJKmainfont: "PingFang SC"
---
---
doc_id: DT-03-CA-SUP
doc_role: support_document
authority: secondary
scope: 报装电子签章专项补充
source_of_truth: false
last_reviewed: 2026-03-11
retrieval_priority: P1
---
# 福建水务营收系统报装电子签章设计补充说明
## 章节导航(精简)
- [文档定位与边界](#sec-position)
- [集成架构与交互边界](#sec-architecture)
- [接口清单与字段约定](#sec-interface)
- [流程约束与状态管理](#sec-process)
- [异常补偿与重试机制](#sec-retry)
- [安全与合规控制](#sec-security)
- [运维监控与发布管理](#sec-ops)
<a id="sec-position"></a>
## 文档定位与边界
本文件是 `01_Detailed_Design.md``INST-002 工程管理` 下“合同签署与电子签章能力”的专项补充文档,重点补充:
1. 泛微 CA 接口对接边界与字段约定;
2. 签章任务状态流转、异常补偿和运维观测点;
3. 合规与审计约束落地要求。
权威边界:
- 报装业务主流程以 `01_Detailed_Design.md` 为准;
- CA 方案总览可参考 `../04_Appendix/03_CA_Integration_Summary.md`
- 安全控制通用要求以 `../03_Technical_Design/04_Security_Design.md` 为准。
<a id="sec-architecture"></a>
## 集成架构与交互边界
```mermaid
flowchart LR
subgraph INST[报装业务系统]
A[合同管理]
B[签章任务中心]
C[回执处理]
D[档案归档]
end
subgraph CA[泛微 CA 电子签章平台]
E[身份认证接口]
F[签章接口]
G[时间戳接口]
H[存证接口]
end
A --> B
B --> E
B --> F
B --> G
B --> H
F --> C
G --> C
H --> C
C --> D
```
边界说明:
- 报装系统负责合同上下文、签署方信息、业务状态回写与档案归档;
- 泛微 CA 负责身份认证、签章执行、时间戳与存证;
- 回执成功后才允许进入“归档完成”状态。
<a id="sec-interface"></a>
## 接口清单与字段约定
### 1. 接口清单
| 接口方向 | 业务接口编号 | 对接接口名称 | 关键输入 | 关键输出 |
|---|---|---|---|---|
| 报装系统 → CA | `IF-INST-003` | 合同签署发起 | 合同ID、签署方、签署位置、业务流水号 | 签章任务ID、受理状态 |
| 报装系统 → CA | `IF-INST-003` | 身份认证调用 | 用户标识、认证类型、认证要素 | 认证结果、认证凭证 |
| 报装系统 → CA | `IF-INST-003` | 时间戳申请 | 签章摘要哈希、请求时间 | 时间戳令牌、签发时间 |
| 报装系统 → CA | `IF-INST-003` | 存证申请 | 签章后文档摘要、元数据 | 存证ID、存证状态 |
| CA → 报装系统 | `IF-INST-004` | 签章结果回执 | 任务ID、签章状态、凭证编号、失败原因 | 回写结果、重试标记 |
### 2. 字段约定(最小集)
| 字段 | 说明 | 约束 |
|---|---|---|
| `biz_trace_id` | 业务追踪ID | 必填;同一签署流程全链路唯一 |
| `contract_id` | 合同ID | 必填;与报装申请单关联 |
| `sign_task_id` | 签章任务ID | 回执必填;用于幂等去重 |
| `sign_status` | 签署状态 | 必填;`INIT/PROCESSING/SUCCESS/FAILED` |
| `evidence_id` | 存证ID | 成功场景必填 |
| `error_code` | 异常码 | 失败场景必填 |
| `error_message` | 异常描述 | 失败场景必填;可审计 |
| `callback_time` | 回执时间 | 必填;用于超时判断 |
<a id="sec-process"></a>
## 流程约束与状态管理
### 1. 签章状态机
```mermaid
stateDiagram-v2
[*] --> INIT
INIT --> PROCESSING: 发起签署
PROCESSING --> SUCCESS: 回执成功
PROCESSING --> FAILED: 回执失败
FAILED --> PROCESSING: 人工重试/系统重试
SUCCESS --> ARCHIVED: 完成归档
ARCHIVED --> [*]
```
### 2. 关键约束
1. 签章发起前必须完成合同正文固化与版本锁定;
2. 同一 `sign_task_id` 回执必须幂等处理,禁止重复更新业务状态;
3. 失败回执需记录错误码并进入补偿队列,不允许静默丢失;
4. 归档完成前,合同状态不得标记为“签署完成可生效”。
<a id="sec-retry"></a>
## 异常补偿与重试机制
| 异常类型 | 检测方式 | 处理策略 | 人工介入条件 |
|---|---|---|---|
| 网络超时 | 请求超时/连接异常 | 指数退避重试最多3次 | 连续失败或超时超过阈值 |
| CA受理失败 | 返回失败码 | 写入补偿队列并通知业务端 | 失败码为不可恢复类 |
| 回执丢失 | 超时未回执 | 主动查询 + 重放回执校验 | 超过最大等待窗口 |
| 数据校验失败 | 字段缺失/签名不匹配 | 拒绝入库并告警 | 连续出现同类异常 |
补偿要求:
- 所有补偿任务必须带 `biz_trace_id`
- 重试与人工补录均写入审计日志;
- 重试成功后需自动回补主流程状态。
<a id="sec-security"></a>
## 安全与合规控制
1. 传输安全CA 对接链路统一使用 HTTPS回执启用签名校验
2. 身份安全:签署方认证结果需与报装业务实名信息一致;
3. 数据安全:合同摘要、签章凭证、存证编号需防篡改存储;
4. 审计留痕:签章发起、回执处理、补偿重试、人工干预均需审计;
5. 合规要求:执行《电子签名法》及项目安全设计文档中关于日志留痕、访问控制和数据保护要求。
<a id="sec-ops"></a>
## 运维监控与发布管理
### 1. 监控指标
| 指标 | 说明 | 建议阈值 |
|---|---|---|
| 签章成功率 | 成功任务 / 总任务 | 日均 ≥ 99% |
| 回执时延P95 | 发起到回执耗时 | ≤ 5 秒 |
| 补偿队列积压 | 待补偿任务数 | 告警阈值按租户配置 |
| 幂等冲突次数 | 重复回执冲突数 | 连续异常触发告警 |
### 2. 发布与变更
1. 涉及 CA 字段或签名算法变更,需先更新本补充文档与接口设计文档;
2. 发布前执行联调清单:签署成功、签署失败、回执重放、超时补偿;
3. 发布后至少观察一个完整业务周期,确认签章成功率与回执时延稳定。

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -0,0 +1,932 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="系统设计团队" />
<title>福建水务营收系统-安全设计</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<link rel="stylesheet" href="output/document_style.css" />
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<header id="title-block-header">
<h1 class="title">福建水务营收系统-安全设计</h1>
<p class="author">系统设计团队</p>
<p class="date">2024年12月19日</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#福建水务营收系统安全设计文档"
id="toc-福建水务营收系统安全设计文档"><span
class="toc-section-number">1</span> 福建水务营收系统安全设计文档</a>
<ul>
<li><a href="#文档信息" id="toc-文档信息"><span
class="toc-section-number">1.1</span> 文档信息</a></li>
<li><a href="#章节导航精简" id="toc-章节导航精简"><span
class="toc-section-number">1.2</span> 章节导航(精简)</a>
<ul>
<li><a href="#安全目标" id="toc-安全目标"><span
class="toc-section-number">1.2.1</span> 安全目标</a></li>
<li><a href="#安全原则" id="toc-安全原则"><span
class="toc-section-number">1.2.2</span> 安全原则</a></li>
<li><a href="#总体安全架构" id="toc-总体安全架构"><span
class="toc-section-number">1.2.3</span> 总体安全架构</a></li>
<li><a href="#数据库安全架构" id="toc-数据库安全架构"><span
class="toc-section-number">1.2.4</span> 数据库安全架构</a></li>
<li><a href="#国产密码算法应用" id="toc-国产密码算法应用"><span
class="toc-section-number">1.2.5</span> 国产密码算法应用</a>
<ul>
<li><a href="#传输加密" id="toc-传输加密"><span
class="toc-section-number">1.2.5.1</span> 传输加密</a></li>
<li><a href="#透明数据加密" id="toc-透明数据加密"><span
class="toc-section-number">1.2.5.2</span> 透明数据加密</a></li>
</ul></li>
<li><a href="#行级安全策略" id="toc-行级安全策略"><span
class="toc-section-number">1.2.6</span> 行级安全策略</a></li>
<li><a href="#数据脱敏策略" id="toc-数据脱敏策略"><span
class="toc-section-number">1.2.7</span> 数据脱敏策略</a></li>
<li><a href="#spring-security安全配置"
id="toc-spring-security安全配置"><span
class="toc-section-number">1.2.8</span> Spring Security安全配置</a>
<ul>
<li><a href="#认证配置" id="toc-认证配置"><span
class="toc-section-number">1.2.8.1</span> 认证配置</a></li>
<li><a href="#多因素认证实现" id="toc-多因素认证实现"><span
class="toc-section-number">1.2.8.2</span> 多因素认证实现</a></li>
</ul></li>
<li><a href="#数据传输安全" id="toc-数据传输安全"><span
class="toc-section-number">1.2.9</span> 数据传输安全</a>
<ul>
<li><a href="#https配置" id="toc-https配置"><span
class="toc-section-number">1.2.9.1</span> HTTPS配置</a></li>
<li><a href="#银行文件传输安全约束" id="toc-银行文件传输安全约束"><span
class="toc-section-number">1.2.9.2</span> 银行文件传输安全约束</a></li>
<li><a href="#敏感数据加密" id="toc-敏感数据加密"><span
class="toc-section-number">1.2.9.3</span> 敏感数据加密</a></li>
</ul></li>
<li><a href="#接口安全防护" id="toc-接口安全防护"><span
class="toc-section-number">1.2.10</span> 接口安全防护</a>
<ul>
<li><a href="#接口签名验证" id="toc-接口签名验证"><span
class="toc-section-number">1.2.10.1</span> 接口签名验证</a></li>
<li><a href="#接口限流防护" id="toc-接口限流防护"><span
class="toc-section-number">1.2.10.2</span> 接口限流防护</a></li>
</ul></li>
<li><a href="#网络拓扑安全" id="toc-网络拓扑安全"><span
class="toc-section-number">1.2.11</span> 网络拓扑安全</a></li>
<li><a href="#防火墙策略配置" id="toc-防火墙策略配置"><span
class="toc-section-number">1.2.12</span> 防火墙策略配置</a>
<ul>
<li><a href="#边界防火墙策略" id="toc-边界防火墙策略"><span
class="toc-section-number">1.2.12.1</span> 边界防火墙策略</a></li>
<li><a href="#应用层防火墙策略" id="toc-应用层防火墙策略"><span
class="toc-section-number">1.2.12.2</span> 应用层防火墙策略</a></li>
</ul></li>
<li><a href="#入侵检测与防护" id="toc-入侵检测与防护"><span
class="toc-section-number">1.2.13</span> 入侵检测与防护</a>
<ul>
<li><a href="#idsips规则配置" id="toc-idsips规则配置"><span
class="toc-section-number">1.2.13.1</span> IDS/IPS规则配置</a></li>
</ul></li>
<li><a href="#数据分类分级" id="toc-数据分类分级"><span
class="toc-section-number">1.2.14</span> 数据分类分级</a>
<ul>
<li><a href="#数据分类标准" id="toc-数据分类标准"><span
class="toc-section-number">1.2.14.1</span> 数据分类标准</a></li>
<li><a href="#数据保护策略" id="toc-数据保护策略"><span
class="toc-section-number">1.2.14.2</span> 数据保护策略</a></li>
</ul></li>
<li><a href="#数据备份与恢复安全" id="toc-数据备份与恢复安全"><span
class="toc-section-number">1.2.15</span> 数据备份与恢复安全</a>
<ul>
<li><a href="#备份加密策略" id="toc-备份加密策略"><span
class="toc-section-number">1.2.15.1</span> 备份加密策略</a></li>
<li><a href="#数据恢复流程" id="toc-数据恢复流程"><span
class="toc-section-number">1.2.15.2</span> 数据恢复流程</a></li>
</ul></li>
<li><a href="#数据销毁与清理" id="toc-数据销毁与清理"><span
class="toc-section-number">1.2.16</span> 数据销毁与清理</a>
<ul>
<li><a href="#安全数据销毁" id="toc-安全数据销毁"><span
class="toc-section-number">1.2.16.1</span> 安全数据销毁</a></li>
</ul></li>
<li><a href="#安全监控体系" id="toc-安全监控体系"><span
class="toc-section-number">1.2.17</span> 安全监控体系</a>
<ul>
<li><a href="#安全监控架构" id="toc-安全监控架构"><span
class="toc-section-number">1.2.17.1</span> 安全监控架构</a></li>
<li><a href="#安全事件检测规则" id="toc-安全事件检测规则"><span
class="toc-section-number">1.2.17.2</span> 安全事件检测规则</a></li>
</ul></li>
<li><a href="#漏洞管理" id="toc-漏洞管理"><span
class="toc-section-number">1.2.18</span> 漏洞管理</a>
<ul>
<li><a href="#漏洞扫描策略" id="toc-漏洞扫描策略"><span
class="toc-section-number">1.2.18.1</span> 漏洞扫描策略</a></li>
<li><a href="#补丁管理流程" id="toc-补丁管理流程"><span
class="toc-section-number">1.2.18.2</span> 补丁管理流程</a></li>
</ul></li>
<li><a href="#应急响应预案" id="toc-应急响应预案"><span
class="toc-section-number">1.2.19</span> 应急响应预案</a>
<ul>
<li><a href="#安全事件分级" id="toc-安全事件分级"><span
class="toc-section-number">1.2.19.1</span> 安全事件分级</a></li>
<li><a href="#应急响应流程" id="toc-应急响应流程"><span
class="toc-section-number">1.2.19.2</span> 应急响应流程</a></li>
</ul></li>
<li><a href="#安全组织架构" id="toc-安全组织架构"><span
class="toc-section-number">1.2.20</span> 安全组织架构</a>
<ul>
<li><a href="#安全管理组织" id="toc-安全管理组织"><span
class="toc-section-number">1.2.20.1</span> 安全管理组织</a></li>
</ul></li>
<li><a href="#安全管理制度" id="toc-安全管理制度"><span
class="toc-section-number">1.2.21</span> 安全管理制度</a>
<ul>
<li><a href="#人员安全管理" id="toc-人员安全管理"><span
class="toc-section-number">1.2.21.1</span> 人员安全管理</a></li>
<li><a href="#系统建设安全管理" id="toc-系统建设安全管理"><span
class="toc-section-number">1.2.21.2</span> 系统建设安全管理</a></li>
<li><a href="#系统运维安全管理" id="toc-系统运维安全管理"><span
class="toc-section-number">1.2.21.3</span> 系统运维安全管理</a></li>
</ul></li>
<li><a href="#合规管理" id="toc-合规管理"><span
class="toc-section-number">1.2.22</span> 合规管理</a>
<ul>
<li><a href="#法律法规合规" id="toc-法律法规合规"><span
class="toc-section-number">1.2.22.1</span> 法律法规合规</a></li>
<li><a href="#行业标准合规" id="toc-行业标准合规"><span
class="toc-section-number">1.2.22.2</span> 行业标准合规</a></li>
<li><a href="#合规检查清单" id="toc-合规检查清单"><span
class="toc-section-number">1.2.22.3</span> 合规检查清单</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</nav>
<h1 data-number="1" id="福建水务营收系统安全设计文档"><span
class="header-section-number">1</span> 福建水务营收系统安全设计文档</h1>
<h2 data-number="1.1" id="文档信息"><span
class="header-section-number">1.1</span> 文档信息</h2>
<table>
<thead>
<tr>
<th>项目信息</th>
<th>详情</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>项目名称</strong></td>
<td>福建水务营收系统</td>
</tr>
<tr>
<td><strong>文档类型</strong></td>
<td>安全设计文档</td>
</tr>
<tr>
<td><strong>技术框架</strong></td>
<td>RuoYi-Vue-Pro + 达梦数据库 8.0+</td>
</tr>
<tr>
<td><strong>文档版本</strong></td>
<td>v1.0</td>
</tr>
<tr>
<td><strong>编写日期</strong></td>
<td>2024-12-19</td>
</tr>
<tr>
<td><strong>文档状态</strong></td>
<td>✅ 已完成</td>
</tr>
</tbody>
</table>
<h2 data-number="1.2" id="章节导航精简"><span
class="header-section-number">1.2</span> 章节导航(精简)</h2>
<ul>
<li><a href="#sec-overview">安全设计概述</a></li>
<li><a href="#sec-db-security">达梦数据库安全</a></li>
<li><a href="#sec-application-security">应用系统安全</a></li>
<li><a href="#sec-network-security">网络安全设计</a></li>
<li><a href="#sec-data-security">数据安全设计</a></li>
<li><a href="#sec-ops-security">运维安全设计</a></li>
<li><a href="#sec-governance">安全管理制度</a></li>
<li><a href="#sec-summary">总结</a></li>
</ul>
<p><a id="sec-overview"></a> ## 安全设计概述</p>
<p>福建水务营收系统安全设计结合水务行业特点和国产化要求,构建全方位、多层次的安全防护体系。</p>
<h3 data-number="1.2.1" id="安全目标"><span
class="header-section-number">1.2.1</span> 安全目标</h3>
<ul>
<li><strong>机密性</strong>:确保敏感数据不被未授权访问</li>
<li><strong>完整性</strong>:防止数据被恶意篡改或损坏</li>
<li><strong>可用性</strong>保障系统7×24小时稳定运行</li>
<li><strong>可审计性</strong>:完整记录系统操作审计轨迹</li>
<li><strong>合规性</strong>:满足行业监管要求</li>
</ul>
<h3 data-number="1.2.2" id="安全原则"><span
class="header-section-number">1.2.2</span> 安全原则</h3>
<ul>
<li><strong>纵深防御</strong>:多层安全防护,避免单点故障</li>
<li><strong>最小权限</strong>:用户和应用仅具备必要的最小权限</li>
<li><strong>默认安全</strong>:系统默认采用最严格的安全配置</li>
<li><strong>持续监控</strong>7×24小时安全监控和威胁检测</li>
<li><strong>国产化优先</strong>:优先采用国产安全产品和技术</li>
</ul>
<h3 data-number="1.2.3" id="总体安全架构"><span
class="header-section-number">1.2.3</span> 总体安全架构</h3>
<pre class="mermaid"><code>graph TB
subgraph &quot;外部威胁&quot;
THREAT1[网络攻击]
THREAT2[恶意软件]
THREAT3[数据泄露]
THREAT4[内部威胁]
end
subgraph &quot;安全防护层&quot;
subgraph &quot;边界安全&quot;
WAF[Web应用防火墙]
FW[网络防火墙]
IPS[入侵防护系统]
VPN[VPN网关]
end
subgraph &quot;应用安全&quot;
AUTH[身份认证]
AUTHZ[访问控制]
AUDIT[操作审计]
ENCRYPT[数据加密]
end
subgraph &quot;数据安全&quot;
TDE[透明数据加密]
RLS[行级安全]
MASK[数据脱敏]
BACKUP[安全备份]
end
subgraph &quot;运维安全&quot;
MONITOR[安全监控]
LOG[日志分析]
ALERT[告警响应]
PATCH[安全更新]
end
end
subgraph &quot;核心资产&quot;
APP[水务营收系统]
DB[达梦数据库]
FILE[文件存储]
API[接口服务]
end
THREAT1 --&gt; WAF
THREAT2 --&gt; FW
THREAT3 --&gt; IPS
THREAT4 --&gt; VPN
WAF --&gt; AUTH
FW --&gt; AUTHZ
IPS --&gt; AUDIT
VPN --&gt; ENCRYPT
AUTH --&gt; TDE
AUTHZ --&gt; RLS
AUDIT --&gt; MASK
ENCRYPT --&gt; BACKUP
TDE --&gt; MONITOR
RLS --&gt; LOG
MASK --&gt; ALERT
BACKUP --&gt; PATCH
MONITOR --&gt; APP
LOG --&gt; DB
ALERT --&gt; FILE
PATCH --&gt; API
</code></pre>
<p><a id="sec-db-security"></a> ## 达梦数据库安全</p>
<h3 data-number="1.2.4" id="数据库安全架构"><span
class="header-section-number">1.2.4</span> 数据库安全架构</h3>
<pre class="mermaid"><code>graph TB
subgraph &quot;达梦数据库安全特性&quot;
subgraph &quot;身份认证&quot;
PWD[密码认证]
CERT[证书认证]
LDAP_AUTH[LDAP认证]
KERBEROS[Kerberos认证]
end
subgraph &quot;访问控制&quot;
RBAC_DB[基于角色的访问控制]
RLS_DB[行级安全策略]
CLS_DB[列级访问控制]
SCHEMA[模式权限控制]
end
subgraph &quot;数据加密&quot;
TDE_SM4[TDE透明加密&lt;br/&gt;SM4国密算法]
SSL_SM[SSL传输加密&lt;br/&gt;SM2/SM3/SM4]
FIELD_ENC[字段级加密]
BACKUP_ENC[备份加密]
end
subgraph &quot;审计监控&quot;
AUDIT_LOG[操作审计日志]
LOGIN_LOG[登录审计]
DDL_LOG[DDL操作记录]
SECURITY_LOG[安全事件日志]
end
end
PWD --&gt; RBAC_DB
CERT --&gt; RLS_DB
LDAP_AUTH --&gt; CLS_DB
KERBEROS --&gt; SCHEMA
RBAC_DB --&gt; TDE_SM4
RLS_DB --&gt; SSL_SM
CLS_DB --&gt; FIELD_ENC
SCHEMA --&gt; BACKUP_ENC
TDE_SM4 --&gt; AUDIT_LOG
SSL_SM --&gt; LOGIN_LOG
FIELD_ENC --&gt; DDL_LOG
BACKUP_ENC --&gt; SECURITY_LOG
</code></pre>
<h3 data-number="1.2.5" id="国产密码算法应用"><span
class="header-section-number">1.2.5</span> 国产密码算法应用</h3>
<h4 data-number="1.2.5.1" id="传输加密"><span
class="header-section-number">1.2.5.1</span> 传输加密</h4>
<ul>
<li>配置国密SSL连接使用SM2/SM3/SM4算法套件</li>
<li>支持SM4-GCM-SM3和SM4-CCM-SM3加密套件</li>
<li>配置国产SM2证书和私钥文件</li>
<li>强制要求SSL连接拒绝明文传输</li>
</ul>
<h4 data-number="1.2.5.2" id="透明数据加密"><span
class="header-section-number">1.2.5.2</span> 透明数据加密</h4>
<ul>
<li>启用TDE透明数据加密使用SM4算法</li>
<li>为敏感数据表配置列级加密</li>
<li>支持确定性加密和随机化加密</li>
<li>集成本地密钥管理系统(localkms)</li>
</ul>
<h3 data-number="1.2.6" id="行级安全策略"><span
class="header-section-number">1.2.6</span> 行级安全策略</h3>
<ul>
<li>创建多租户行级安全策略,实现数据隔离</li>
<li>配置基于用户角色的数据访问控制</li>
<li>实现动态数据过滤和权限控制</li>
<li>支持复杂的安全策略表达式</li>
</ul>
<h3 data-number="1.2.7" id="数据脱敏策略"><span
class="header-section-number">1.2.7</span> 数据脱敏策略</h3>
<ul>
<li>创建敏感数据脱敏函数和规则</li>
<li>为不同角色提供不同级别的数据视图</li>
<li>实现手机号、身份证号等敏感信息脱敏</li>
<li>支持动态脱敏和静态脱敏</li>
</ul>
<p><a id="sec-application-security"></a> ## 应用系统安全</p>
<h3 data-number="1.2.8" id="spring-security安全配置"><span
class="header-section-number">1.2.8</span> Spring Security安全配置</h3>
<h4 data-number="1.2.8.1" id="认证配置"><span
class="header-section-number">1.2.8.1</span> 认证配置</h4>
<ul>
<li>使用国密SM3哈希算法进行密码加密</li>
<li>配置JWT身份验证过滤器</li>
<li>设置CSRF防护和HttpOnly Cookie</li>
<li>配置请求授权规则和无状态会话管理</li>
<li>启用方法级安全注解支持</li>
</ul>
<h4 data-number="1.2.8.2" id="多因素认证实现"><span
class="header-section-number">1.2.8.2</span> 多因素认证实现</h4>
<ul>
<li>生成随机验证码并缓存到Redis</li>
<li>设置验证码过期时间防止滥用</li>
<li>集成短信服务提供商发送验证码</li>
<li>实现验证码验证和及时清理机制</li>
</ul>
<h3 data-number="1.2.9" id="数据传输安全"><span
class="header-section-number">1.2.9</span> 数据传输安全</h3>
<h4 data-number="1.2.9.1" id="https配置"><span
class="header-section-number">1.2.9.1</span> HTTPS配置</h4>
<ul>
<li>启用HTTPS协议使用SSL/TLS加密</li>
<li>配置国产密码算法套件支持</li>
<li>使用PKCS12格式的数字证书</li>
<li>支持TLSv1.2和TLSv1.3协议版本</li>
</ul>
<h4 data-number="1.2.9.2" id="银行文件传输安全约束"><span
class="header-section-number">1.2.9.2</span> 银行文件传输安全约束</h4>
<ul>
<li>银行文件交换默认优先使用 <code>SFTP</code><code>FTP</code>
仅作为兼容能力保留,需在风险评估通过后启用。</li>
<li>文件传输凭据以 <code>credentialRef</code>
引用形式由环境配置或配置中心承接,不在正式文档、默认仓库配置样例或测试样本中写入明文密码、私钥、证书。</li>
<li>命中协议缺少 <code>host/port/username/credentialRef</code>
时必须立即阻断当前文件动作,避免以残缺配置尝试连接银行通道。</li>
<li>路径模板仅允许固定变量白名单,禁止自由表达式、脚本化拼装和未声明变量,防止目录逃逸与错误路由。</li>
<li>批次审计只保存最终实际使用的协议、目录、文件路径与文件名,不额外保存完整凭据快照,避免敏感配置在业务表中扩散。</li>
</ul>
<h4 data-number="1.2.9.3" id="敏感数据加密"><span
class="header-section-number">1.2.9.3</span> 敏感数据加密</h4>
<ul>
<li>采用国密SM4对称加密算法</li>
<li>实现统一的数据加密和解密服务</li>
<li>对身份证号、手机号等敏感信息加密存储</li>
<li>提供统一的异常处理和错误提示</li>
</ul>
<h3 data-number="1.2.10" id="接口安全防护"><span
class="header-section-number">1.2.10</span> 接口安全防护</h3>
<h4 data-number="1.2.10.1" id="接口签名验证"><span
class="header-section-number">1.2.10.1</span> 接口签名验证</h4>
<ul>
<li>基于时间戳、随机数和请求体生成签名</li>
<li>使用国密SM3哈希算法计算签名值</li>
<li>检查时间戳有效性防止重放攻击</li>
<li>实现客户端和服务端签名比对验证</li>
</ul>
<h4 data-number="1.2.10.2" id="接口限流防护"><span
class="header-section-number">1.2.10.2</span> 接口限流防护</h4>
<ul>
<li>基于Redis实现分布式限流控制</li>
<li>支持按IP、用户、接口等维度限流</li>
<li>采用滑动窗口算法统计请求频率</li>
<li>超过限制时返回429状态码和错误提示</li>
</ul>
<p><a id="sec-network-security"></a> ## 网络安全设计</p>
<h3 data-number="1.2.11" id="网络拓扑安全"><span
class="header-section-number">1.2.11</span> 网络拓扑安全</h3>
<pre class="mermaid"><code>graph TB
subgraph &quot;外网区域&quot;
INTERNET[互联网]
CDN[CDN加速]
DNS[DNS服务]
end
subgraph &quot;边界防护&quot;
WAF[Web应用防火墙&lt;br/&gt;国产WAF产品]
FW_BORDER[边界防火墙&lt;br/&gt;安全审计]
IPS[入侵防护系统&lt;br/&gt;威胁检测]
DPI[深度包检测&lt;br/&gt;流量分析]
end
subgraph &quot;DMZ区域&quot;
LB[负载均衡器&lt;br/&gt;SSL卸载]
WEB1[Web服务器1]
WEB2[Web服务器2]
PROXY[反向代理]
end
subgraph &quot;内网安全&quot;
FW_INTERNAL[内部防火墙]
VLAN_APP[应用VLAN]
VLAN_DB[数据库VLAN]
VLAN_MGT[管理VLAN]
end
subgraph &quot;应用层&quot;
APP1[应用服务器1]
APP2[应用服务器2]
APP3[应用服务器3]
end
subgraph &quot;数据层&quot;
DB_MASTER[达梦主库]
DB_SLAVE[达梦从库]
REDIS[Redis集群]
end
subgraph &quot;管理层&quot;
JUMP[跳板机]
MONITOR[监控服务器]
LOG[日志服务器]
end
INTERNET --&gt; CDN
CDN --&gt; DNS
DNS --&gt; WAF
WAF --&gt; FW_BORDER
FW_BORDER --&gt; IPS
IPS --&gt; DPI
DPI --&gt; LB
LB --&gt; WEB1
LB --&gt; WEB2
WEB1 --&gt; PROXY
WEB2 --&gt; PROXY
PROXY --&gt; FW_INTERNAL
FW_INTERNAL --&gt; VLAN_APP
FW_INTERNAL --&gt; VLAN_DB
FW_INTERNAL --&gt; VLAN_MGT
VLAN_APP --&gt; APP1
VLAN_APP --&gt; APP2
VLAN_APP --&gt; APP3
VLAN_DB --&gt; DB_MASTER
VLAN_DB --&gt; DB_SLAVE
VLAN_DB --&gt; REDIS
VLAN_MGT --&gt; JUMP
VLAN_MGT --&gt; MONITOR
VLAN_MGT --&gt; LOG
</code></pre>
<h3 data-number="1.2.12" id="防火墙策略配置"><span
class="header-section-number">1.2.12</span> 防火墙策略配置</h3>
<h4 data-number="1.2.12.1" id="边界防火墙策略"><span
class="header-section-number">1.2.12.1</span> 边界防火墙策略</h4>
<ul>
<li>允许HTTPS访问开放443端口</li>
<li>允许HTTP重定向到HTTPS开放80端口</li>
<li>禁止外部直接访问数据库端口</li>
<li>允许内网SSH管理限制管理网段</li>
<li>默认拒绝所有其他入站连接</li>
</ul>
<h4 data-number="1.2.12.2" id="应用层防火墙策略"><span
class="header-section-number">1.2.12.2</span> 应用层防火墙策略</h4>
<ul>
<li>只允许来自DMZ区的应用访问</li>
<li>允许访问数据库服务器的指定端口</li>
<li>允许访问Redis缓存服务</li>
<li>允许DNS查询和时间同步</li>
<li>默认拒绝其他出站连接</li>
</ul>
<h3 data-number="1.2.13" id="入侵检测与防护"><span
class="header-section-number">1.2.13</span> 入侵检测与防护</h3>
<h4 data-number="1.2.13.1" id="idsips规则配置"><span
class="header-section-number">1.2.13.1</span> IDS/IPS规则配置</h4>
<ul>
<li>配置Web应用攻击检测规则</li>
<li>配置数据库直接访问告警规则</li>
<li>配置暴力破解攻击检测规则</li>
<li>设置基于流量特征的异常检测</li>
<li>配置威胁情报实时更新机制</li>
</ul>
<p><a id="sec-data-security"></a> ## 数据安全设计</p>
<h3 data-number="1.2.14" id="数据分类分级"><span
class="header-section-number">1.2.14</span> 数据分类分级</h3>
<h4 data-number="1.2.14.1" id="数据分类标准"><span
class="header-section-number">1.2.14.1</span> 数据分类标准</h4>
<pre class="mermaid"><code>graph TB
subgraph &quot;数据分类&quot;
SECRET[机密级&lt;br/&gt;重要业务数据]
INTERNAL[内部级&lt;br/&gt;一般业务数据]
PUBLIC[公开级&lt;br/&gt;公开业务数据]
end
subgraph &quot;水务业务数据&quot;
CUSTOMER[客户身份信息&lt;br/&gt;机密级]
METER[水表计量数据&lt;br/&gt;内部级]
BILLING[收费账务数据&lt;br/&gt;机密级]
REPORT[统计报表数据&lt;br/&gt;内部级]
CONFIG[系统配置数据&lt;br/&gt;内部级]
LOG[日志审计数据&lt;br/&gt;内部级]
end
subgraph &quot;保护措施&quot;
ENC_HIGH[强加密&lt;br/&gt;SM4+数字签名]
ENC_MID[访问控制&lt;br/&gt;权限管理]
ENC_LOW[公开访问&lt;br/&gt;无特殊保护]
end
SECRET --&gt; ENC_HIGH
INTERNAL --&gt; ENC_MID
PUBLIC --&gt; ENC_LOW
CUSTOMER --&gt; SECRET
BILLING --&gt; SECRET
METER --&gt; INTERNAL
REPORT --&gt; INTERNAL
CONFIG --&gt; INTERNAL
LOG --&gt; INTERNAL
</code></pre>
<h4 data-number="1.2.14.2" id="数据保护策略"><span
class="header-section-number">1.2.14.2</span> 数据保护策略</h4>
<ul>
<li><strong>机密级数据</strong>:强加密存储,严格访问控制</li>
<li><strong>内部级数据</strong>:权限控制,审计日志记录</li>
<li><strong>公开级数据</strong>:无特殊保护要求</li>
<li><strong>敏感字段</strong>:单独加密,支持查询需求</li>
</ul>
<h3 data-number="1.2.15" id="数据备份与恢复安全"><span
class="header-section-number">1.2.15</span> 数据备份与恢复安全</h3>
<h4 data-number="1.2.15.1" id="备份加密策略"><span
class="header-section-number">1.2.15.1</span> 备份加密策略</h4>
<ul>
<li>使用国产密码算法加密备份文件</li>
<li>生成备份文件完整性校验码</li>
<li>实现备份文件的安全传输</li>
<li>定期验证备份文件的完整性</li>
</ul>
<h4 data-number="1.2.15.2" id="数据恢复流程"><span
class="header-section-number">1.2.15.2</span> 数据恢复流程</h4>
<ul>
<li>验证备份文件完整性和真实性</li>
<li>在隔离环境中进行恢复测试</li>
<li>验证恢复数据的完整性和一致性</li>
<li>记录详细的恢复过程和验证结果</li>
</ul>
<h3 data-number="1.2.16" id="数据销毁与清理"><span
class="header-section-number">1.2.16</span> 数据销毁与清理</h3>
<h4 data-number="1.2.16.1" id="安全数据销毁"><span
class="header-section-number">1.2.16.1</span> 安全数据销毁</h4>
<ul>
<li>实现安全的数据删除和物理清除</li>
<li>记录数据销毁的审计日志</li>
<li>定期清理历史数据和临时文件</li>
<li>确保已删除数据无法被恢复</li>
</ul>
<p><a id="sec-ops-security"></a> ## 运维安全设计</p>
<h3 data-number="1.2.17" id="安全监控体系"><span
class="header-section-number">1.2.17</span> 安全监控体系</h3>
<h4 data-number="1.2.17.1" id="安全监控架构"><span
class="header-section-number">1.2.17.1</span> 安全监控架构</h4>
<pre class="mermaid"><code>graph TB
subgraph &quot;数据采集层&quot;
AGENT1[系统日志采集]
AGENT2[应用日志采集]
AGENT3[数据库日志采集]
AGENT4[网络流量采集]
end
subgraph &quot;数据处理层&quot;
KAFKA[消息队列&lt;br/&gt;Kafka集群]
STREAM[流处理&lt;br/&gt;Flink/Storm]
ETL[数据清洗&lt;br/&gt;Logstash]
end
subgraph &quot;存储分析层&quot;
ES[Elasticsearch&lt;br/&gt;日志存储]
SIEM[安全信息事件管理&lt;br/&gt;SIEM平台]
AI[智能分析&lt;br/&gt;机器学习]
end
subgraph &quot;可视化层&quot;
DASHBOARD[监控仪表盘&lt;br/&gt;Grafana]
ALERT[告警系统&lt;br/&gt;AlertManager]
REPORT[安全报告&lt;br/&gt;自动生成]
end
AGENT1 --&gt; KAFKA
AGENT2 --&gt; KAFKA
AGENT3 --&gt; KAFKA
AGENT4 --&gt; KAFKA
KAFKA --&gt; STREAM
STREAM --&gt; ETL
ETL --&gt; ES
ES --&gt; SIEM
SIEM --&gt; AI
AI --&gt; DASHBOARD
DASHBOARD --&gt; ALERT
ALERT --&gt; REPORT
</code></pre>
<h4 data-number="1.2.17.2" id="安全事件检测规则"><span
class="header-section-number">1.2.17.2</span> 安全事件检测规则</h4>
<ul>
<li><strong>暴力破解检测</strong>:失败登录次数阈值告警</li>
<li><strong>异常数据访问</strong>:大量数据查询行为监控</li>
<li><strong>权限提升检测</strong>:管理员权限变更告警</li>
<li><strong>异常时间访问</strong>:非工作时间访问行为监控</li>
</ul>
<h3 data-number="1.2.18" id="漏洞管理"><span
class="header-section-number">1.2.18</span> 漏洞管理</h3>
<h4 data-number="1.2.18.1" id="漏洞扫描策略"><span
class="header-section-number">1.2.18.1</span> 漏洞扫描策略</h4>
<ul>
<li>定期进行系统漏洞扫描</li>
<li>执行Web应用安全测试</li>
<li>进行数据库安全评估</li>
<li>生成漏洞扫描报告和修复建议</li>
</ul>
<h4 data-number="1.2.18.2" id="补丁管理流程"><span
class="header-section-number">1.2.18.2</span> 补丁管理流程</h4>
<pre class="mermaid"><code>graph LR
DISCOVER[漏洞发现] --&gt; ASSESS[风险评估]
ASSESS --&gt; PLAN[补丁计划]
PLAN --&gt; TEST[测试验证]
TEST --&gt; DEPLOY[生产部署]
DEPLOY --&gt; VERIFY[部署验证]
VERIFY --&gt; DOCUMENT[文档记录]
subgraph &quot;评估标准&quot;
HIGH[高危&lt;br/&gt;24小时内]
MEDIUM[中危&lt;br/&gt;7天内]
LOW[低危&lt;br/&gt;30天内]
end
ASSESS --&gt; HIGH
ASSESS --&gt; MEDIUM
ASSESS --&gt; LOW
</code></pre>
<h3 data-number="1.2.19" id="应急响应预案"><span
class="header-section-number">1.2.19</span> 应急响应预案</h3>
<h4 data-number="1.2.19.1" id="安全事件分级"><span
class="header-section-number">1.2.19.1</span> 安全事件分级</h4>
<table>
<colgroup>
<col style="width: 18%" />
<col style="width: 18%" />
<col style="width: 31%" />
<col style="width: 31%" />
</colgroup>
<thead>
<tr>
<th>级别</th>
<th>描述</th>
<th>响应时间</th>
<th>处理措施</th>
</tr>
</thead>
<tbody>
<tr>
<td>P0</td>
<td>系统完全不可用,数据泄露</td>
<td>15分钟</td>
<td>立即启动应急预案,通知管理层</td>
</tr>
<tr>
<td>P1</td>
<td>核心功能受影响,安全风险高</td>
<td>30分钟</td>
<td>启动应急预案,组建应急小组</td>
</tr>
<tr>
<td>P2</td>
<td>部分功能受影响,安全风险中等</td>
<td>2小时</td>
<td>安排专人处理,定期汇报</td>
</tr>
<tr>
<td>P3</td>
<td>轻微影响,安全风险较低</td>
<td>8小时</td>
<td>正常工作时间处理</td>
</tr>
</tbody>
</table>
<h4 data-number="1.2.19.2" id="应急响应流程"><span
class="header-section-number">1.2.19.2</span> 应急响应流程</h4>
<pre class="mermaid"><code>graph TB
INCIDENT[安全事件发生] --&gt; DETECT[事件检测]
DETECT --&gt; REPORT[事件上报]
REPORT --&gt; ASSESS[影响评估]
ASSESS --&gt; RESPONSE[应急响应]
subgraph &quot;应急响应措施&quot;
ISOLATE[系统隔离]
PRESERVE[证据保全]
RECOVER[系统恢复]
INVESTIGATE[调查分析]
end
subgraph &quot;后续处理&quot;
LESSON[经验总结]
IMPROVE[流程改进]
TRAIN[培训加强]
DOC[文档更新]
end
RESPONSE --&gt; ISOLATE
RESPONSE --&gt; PRESERVE
RESPONSE --&gt; RECOVER
RESPONSE --&gt; INVESTIGATE
INVESTIGATE --&gt; LESSON
LESSON --&gt; IMPROVE
IMPROVE --&gt; TRAIN
TRAIN --&gt; DOC
</code></pre>
<p><a id="sec-governance"></a> ## 安全管理制度</p>
<h3 data-number="1.2.20" id="安全组织架构"><span
class="header-section-number">1.2.20</span> 安全组织架构</h3>
<h4 data-number="1.2.20.1" id="安全管理组织"><span
class="header-section-number">1.2.20.1</span> 安全管理组织</h4>
<pre class="mermaid"><code>graph TB
CEO[总经理&lt;br/&gt;安全最高责任人]
CISO[信息安全负责人&lt;br/&gt;CISO]
subgraph &quot;安全管理委员会&quot;
IT_DIR[IT总监]
SECURITY_DIR[安全总监]
COMPLIANCE[合规负责人]
LEGAL[法务负责人]
end
subgraph &quot;安全执行团队&quot;
SEC_ADMIN[安全管理员]
SYS_ADMIN[系统管理员]
DBA[数据库管理员]
NET_ADMIN[网络管理员]
end
subgraph &quot;业务安全责任人&quot;
BUS_OWNER[业务负责人]
DATA_OWNER[数据负责人]
USER_ADMIN[用户管理员]
end
CEO --&gt; CISO
CISO --&gt; IT_DIR
CISO --&gt; SECURITY_DIR
CISO --&gt; COMPLIANCE
CISO --&gt; LEGAL
IT_DIR --&gt; SEC_ADMIN
IT_DIR --&gt; SYS_ADMIN
IT_DIR --&gt; DBA
IT_DIR --&gt; NET_ADMIN
SECURITY_DIR --&gt; BUS_OWNER
SECURITY_DIR --&gt; DATA_OWNER
SECURITY_DIR --&gt; USER_ADMIN
</code></pre>
<h3 data-number="1.2.21" id="安全管理制度"><span
class="header-section-number">1.2.21</span> 安全管理制度</h3>
<h4 data-number="1.2.21.1" id="人员安全管理"><span
class="header-section-number">1.2.21.1</span> 人员安全管理</h4>
<ul>
<li><strong>入职安全审查</strong>:对关键岗位人员进行背景调查</li>
<li><strong>安全培训</strong>:定期进行信息安全意识培训</li>
<li><strong>权限管理</strong>:建立权限申请、审批、回收流程</li>
<li><strong>离职管理</strong>:离职人员权限及时回收,签署保密协议</li>
</ul>
<h4 data-number="1.2.21.2" id="系统建设安全管理"><span
class="header-section-number">1.2.21.2</span> 系统建设安全管理</h4>
<ul>
<li><strong>安全需求分析</strong>:项目立项阶段进行安全需求分析</li>
<li><strong>安全设计评审</strong>:设计阶段进行安全架构评审</li>
<li><strong>安全测试</strong>:上线前进行安全渗透测试</li>
<li><strong>安全验收</strong>:系统上线前进行安全验收</li>
</ul>
<h4 data-number="1.2.21.3" id="系统运维安全管理"><span
class="header-section-number">1.2.21.3</span> 系统运维安全管理</h4>
<ul>
<li><strong>变更管理</strong>:所有系统变更都需要安全评估</li>
<li><strong>备份管理</strong>:定期备份,异地存储,加密保护</li>
<li><strong>监控管理</strong>7×24小时安全监控</li>
<li><strong>应急管理</strong>:建立应急响应机制</li>
</ul>
<h3 data-number="1.2.22" id="合规管理"><span
class="header-section-number">1.2.22</span> 合规管理</h3>
<h4 data-number="1.2.22.1" id="法律法规合规"><span
class="header-section-number">1.2.22.1</span> 法律法规合规</h4>
<ul>
<li>《中华人民共和国网络安全法》</li>
<li>《中华人民共和国数据安全法》</li>
<li>《中华人民共和国个人信息保护法》</li>
<li>《关键信息基础设施安全保护条例》</li>
</ul>
<h4 data-number="1.2.22.2" id="行业标准合规"><span
class="header-section-number">1.2.22.2</span> 行业标准合规</h4>
<ul>
<li>GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》</li>
<li>GB/T 32918《信息安全技术 SM2椭圆曲线公钥密码算法》</li>
<li>GB/T 32905《信息安全技术 SM3密码杂凑算法》</li>
</ul>
<h4 data-number="1.2.22.3" id="合规检查清单"><span
class="header-section-number">1.2.22.3</span> 合规检查清单</h4>
<ul class="task-list">
<li><label><input type="checkbox" />年度安全评估报告</label></li>
<li><label><input type="checkbox" />安全管理制度建立</label></li>
<li><label><input type="checkbox" />安全技术措施落实</label></li>
<li><label><input type="checkbox" />安全培训记录完整</label></li>
<li><label><input type="checkbox" />应急预案演练记录</label></li>
<li><label><input type="checkbox" />安全事件处置记录</label></li>
<li><label><input type="checkbox" />第三方安全服务合同</label></li>
</ul>
<hr />
<p><a id="sec-summary"></a> ## 总结</p>
<p>福建水务营收系统安全设计结合达梦数据库的安全特性,建立了全方位、多层次的安全防护体系。通过技术防护、管理制度、人员培训等多重措施,确保系统安全稳定运行,满足水务行业的安全要求。</p>
<p>本安全设计方案的核心特点: 1.
<strong>国产化安全</strong>:采用达梦数据库和国密算法 2.
<strong>纵深防御</strong>:网络、应用、数据多层安全防护 3.
<strong>持续改进</strong>:建立安全监控和应急响应机制 4.
<strong>管理规范</strong>:完善的安全管理制度和流程</p>
</body>
</html>

Binary file not shown.

View File

@ -0,0 +1,698 @@
---
title: "04_Security_Design"
author: "系统设计团队"
date: "2024年12月19日"
documentclass: article
geometry: margin=1in
fontsize: 11pt
mainfont: "PingFang SC"
CJKmainfont: "PingFang SC"
---
---
doc_id: TC-04-SECURITY
doc_role: master_document
authority: primary
scope: 安全设计
source_of_truth: true
last_reviewed: 2026-03-11
retrieval_priority: P0
---
# 福建水务营收系统安全设计文档
## 文档信息
| 项目信息 | 详情 |
|---------|------|
| **项目名称** | 福建水务营收系统 |
| **文档类型** | 安全设计文档 |
| **技术框架** | RuoYi-Vue-Pro + 达梦数据库 8.0+ |
| **文档版本** | v1.0 |
| **编写日期** | 2024-12-19 |
| **文档状态** | ✅ 已完成 |
## 章节导航(精简)
- [安全设计概述](#sec-overview)
- [达梦数据库安全](#sec-db-security)
- [应用系统安全](#sec-application-security)
- [网络安全设计](#sec-network-security)
- [数据安全设计](#sec-data-security)
- [运维安全设计](#sec-ops-security)
- [安全管理制度](#sec-governance)
- [总结](#sec-summary)
<a id="sec-overview"></a>
## 安全设计概述
福建水务营收系统安全设计结合水务行业特点和国产化要求,构建全方位、多层次的安全防护体系。
### 安全目标
- **机密性**:确保敏感数据不被未授权访问
- **完整性**:防止数据被恶意篡改或损坏
- **可用性**保障系统7×24小时稳定运行
- **可审计性**:完整记录系统操作审计轨迹
- **合规性**:满足行业监管要求
### 安全原则
- **纵深防御**:多层安全防护,避免单点故障
- **最小权限**:用户和应用仅具备必要的最小权限
- **默认安全**:系统默认采用最严格的安全配置
- **持续监控**7×24小时安全监控和威胁检测
- **国产化优先**:优先采用国产安全产品和技术
### 总体安全架构
```mermaid
graph TB
subgraph "外部威胁"
THREAT1[网络攻击]
THREAT2[恶意软件]
THREAT3[数据泄露]
THREAT4[内部威胁]
end
subgraph "安全防护层"
subgraph "边界安全"
WAF[Web应用防火墙]
FW[网络防火墙]
IPS[入侵防护系统]
VPN[VPN网关]
end
subgraph "应用安全"
AUTH[身份认证]
AUTHZ[访问控制]
AUDIT[操作审计]
ENCRYPT[数据加密]
end
subgraph "数据安全"
TDE[透明数据加密]
RLS[行级安全]
MASK[数据脱敏]
BACKUP[安全备份]
end
subgraph "运维安全"
MONITOR[安全监控]
LOG[日志分析]
ALERT[告警响应]
PATCH[安全更新]
end
end
subgraph "核心资产"
APP[水务营收系统]
DB[达梦数据库]
FILE[文件存储]
API[接口服务]
end
THREAT1 --> WAF
THREAT2 --> FW
THREAT3 --> IPS
THREAT4 --> VPN
WAF --> AUTH
FW --> AUTHZ
IPS --> AUDIT
VPN --> ENCRYPT
AUTH --> TDE
AUTHZ --> RLS
AUDIT --> MASK
ENCRYPT --> BACKUP
TDE --> MONITOR
RLS --> LOG
MASK --> ALERT
BACKUP --> PATCH
MONITOR --> APP
LOG --> DB
ALERT --> FILE
PATCH --> API
```
<a id="sec-db-security"></a>
## 达梦数据库安全
### 数据库安全架构
```mermaid
graph TB
subgraph "达梦数据库安全特性"
subgraph "身份认证"
PWD[密码认证]
CERT[证书认证]
LDAP_AUTH[LDAP认证]
KERBEROS[Kerberos认证]
end
subgraph "访问控制"
RBAC_DB[基于角色的访问控制]
RLS_DB[行级安全策略]
CLS_DB[列级访问控制]
SCHEMA[模式权限控制]
end
subgraph "数据加密"
TDE_SM4[TDE透明加密<br/>SM4国密算法]
SSL_SM[SSL传输加密<br/>SM2/SM3/SM4]
FIELD_ENC[字段级加密]
BACKUP_ENC[备份加密]
end
subgraph "审计监控"
AUDIT_LOG[操作审计日志]
LOGIN_LOG[登录审计]
DDL_LOG[DDL操作记录]
SECURITY_LOG[安全事件日志]
end
end
PWD --> RBAC_DB
CERT --> RLS_DB
LDAP_AUTH --> CLS_DB
KERBEROS --> SCHEMA
RBAC_DB --> TDE_SM4
RLS_DB --> SSL_SM
CLS_DB --> FIELD_ENC
SCHEMA --> BACKUP_ENC
TDE_SM4 --> AUDIT_LOG
SSL_SM --> LOGIN_LOG
FIELD_ENC --> DDL_LOG
BACKUP_ENC --> SECURITY_LOG
```
### 国产密码算法应用
#### 传输加密
- 配置国密SSL连接使用SM2/SM3/SM4算法套件
- 支持SM4-GCM-SM3和SM4-CCM-SM3加密套件
- 配置国产SM2证书和私钥文件
- 强制要求SSL连接拒绝明文传输
#### 透明数据加密
- 启用TDE透明数据加密使用SM4算法
- 为敏感数据表配置列级加密
- 支持确定性加密和随机化加密
- 集成本地密钥管理系统(localkms)
### 行级安全策略
- 创建多租户行级安全策略,实现数据隔离
- 配置基于用户角色的数据访问控制
- 实现动态数据过滤和权限控制
- 支持复杂的安全策略表达式
### 数据脱敏策略
- 创建敏感数据脱敏函数和规则
- 为不同角色提供不同级别的数据视图
- 实现手机号、身份证号等敏感信息脱敏
- 支持动态脱敏和静态脱敏
<a id="sec-application-security"></a>
## 应用系统安全
### Spring Security安全配置
#### 认证配置
- 使用国密SM3哈希算法进行密码加密
- 配置JWT身份验证过滤器
- 设置CSRF防护和HttpOnly Cookie
- 配置请求授权规则和无状态会话管理
- 启用方法级安全注解支持
#### 多因素认证实现
- 生成随机验证码并缓存到Redis
- 设置验证码过期时间防止滥用
- 集成短信服务提供商发送验证码
- 实现验证码验证和及时清理机制
### 数据传输安全
#### HTTPS配置
- 启用HTTPS协议使用SSL/TLS加密
- 配置国产密码算法套件支持
- 使用PKCS12格式的数字证书
- 支持TLSv1.2和TLSv1.3协议版本
#### 银行文件传输安全约束
- 银行文件交换默认优先使用 `SFTP``FTP` 仅作为兼容能力保留,需在风险评估通过后启用。
- 文件传输凭据以 `credentialRef` 引用形式由环境配置或配置中心承接,不在正式文档、默认仓库配置样例或测试样本中写入明文密码、私钥、证书。
- 命中协议缺少 `host/port/username/credentialRef` 时必须立即阻断当前文件动作,避免以残缺配置尝试连接银行通道。
- 路径模板仅允许固定变量白名单,禁止自由表达式、脚本化拼装和未声明变量,防止目录逃逸与错误路由。
- 批次审计只保存最终实际使用的协议、目录、文件路径与文件名,不额外保存完整凭据快照,避免敏感配置在业务表中扩散。
#### 敏感数据加密
- 采用国密SM4对称加密算法
- 实现统一的数据加密和解密服务
- 对身份证号、手机号等敏感信息加密存储
- 提供统一的异常处理和错误提示
### 接口安全防护
#### 接口签名验证
- 基于时间戳、随机数和请求体生成签名
- 使用国密SM3哈希算法计算签名值
- 检查时间戳有效性防止重放攻击
- 实现客户端和服务端签名比对验证
#### 接口限流防护
- 基于Redis实现分布式限流控制
- 支持按IP、用户、接口等维度限流
- 采用滑动窗口算法统计请求频率
- 超过限制时返回429状态码和错误提示
<a id="sec-network-security"></a>
## 网络安全设计
### 网络拓扑安全
```mermaid
graph TB
subgraph "外网区域"
INTERNET[互联网]
CDN[CDN加速]
DNS[DNS服务]
end
subgraph "边界防护"
WAF[Web应用防火墙<br/>国产WAF产品]
FW_BORDER[边界防火墙<br/>安全审计]
IPS[入侵防护系统<br/>威胁检测]
DPI[深度包检测<br/>流量分析]
end
subgraph "DMZ区域"
LB[负载均衡器<br/>SSL卸载]
WEB1[Web服务器1]
WEB2[Web服务器2]
PROXY[反向代理]
end
subgraph "内网安全"
FW_INTERNAL[内部防火墙]
VLAN_APP[应用VLAN]
VLAN_DB[数据库VLAN]
VLAN_MGT[管理VLAN]
end
subgraph "应用层"
APP1[应用服务器1]
APP2[应用服务器2]
APP3[应用服务器3]
end
subgraph "数据层"
DB_MASTER[达梦主库]
DB_SLAVE[达梦从库]
REDIS[Redis集群]
end
subgraph "管理层"
JUMP[跳板机]
MONITOR[监控服务器]
LOG[日志服务器]
end
INTERNET --> CDN
CDN --> DNS
DNS --> WAF
WAF --> FW_BORDER
FW_BORDER --> IPS
IPS --> DPI
DPI --> LB
LB --> WEB1
LB --> WEB2
WEB1 --> PROXY
WEB2 --> PROXY
PROXY --> FW_INTERNAL
FW_INTERNAL --> VLAN_APP
FW_INTERNAL --> VLAN_DB
FW_INTERNAL --> VLAN_MGT
VLAN_APP --> APP1
VLAN_APP --> APP2
VLAN_APP --> APP3
VLAN_DB --> DB_MASTER
VLAN_DB --> DB_SLAVE
VLAN_DB --> REDIS
VLAN_MGT --> JUMP
VLAN_MGT --> MONITOR
VLAN_MGT --> LOG
```
### 防火墙策略配置
#### 边界防火墙策略
- 允许HTTPS访问开放443端口
- 允许HTTP重定向到HTTPS开放80端口
- 禁止外部直接访问数据库端口
- 允许内网SSH管理限制管理网段
- 默认拒绝所有其他入站连接
#### 应用层防火墙策略
- 只允许来自DMZ区的应用访问
- 允许访问数据库服务器的指定端口
- 允许访问Redis缓存服务
- 允许DNS查询和时间同步
- 默认拒绝其他出站连接
### 入侵检测与防护
#### IDS/IPS规则配置
- 配置Web应用攻击检测规则
- 配置数据库直接访问告警规则
- 配置暴力破解攻击检测规则
- 设置基于流量特征的异常检测
- 配置威胁情报实时更新机制
<a id="sec-data-security"></a>
## 数据安全设计
### 数据分类分级
#### 数据分类标准
```mermaid
graph TB
subgraph "数据分类"
SECRET[机密级<br/>重要业务数据]
INTERNAL[内部级<br/>一般业务数据]
PUBLIC[公开级<br/>公开业务数据]
end
subgraph "水务业务数据"
CUSTOMER[客户身份信息<br/>机密级]
METER[水表计量数据<br/>内部级]
BILLING[收费账务数据<br/>机密级]
REPORT[统计报表数据<br/>内部级]
CONFIG[系统配置数据<br/>内部级]
LOG[日志审计数据<br/>内部级]
end
subgraph "保护措施"
ENC_HIGH[强加密<br/>SM4+数字签名]
ENC_MID[访问控制<br/>权限管理]
ENC_LOW[公开访问<br/>无特殊保护]
end
SECRET --> ENC_HIGH
INTERNAL --> ENC_MID
PUBLIC --> ENC_LOW
CUSTOMER --> SECRET
BILLING --> SECRET
METER --> INTERNAL
REPORT --> INTERNAL
CONFIG --> INTERNAL
LOG --> INTERNAL
```
#### 数据保护策略
- **机密级数据**:强加密存储,严格访问控制
- **内部级数据**:权限控制,审计日志记录
- **公开级数据**:无特殊保护要求
- **敏感字段**:单独加密,支持查询需求
### 数据备份与恢复安全
#### 备份加密策略
- 使用国产密码算法加密备份文件
- 生成备份文件完整性校验码
- 实现备份文件的安全传输
- 定期验证备份文件的完整性
#### 数据恢复流程
- 验证备份文件完整性和真实性
- 在隔离环境中进行恢复测试
- 验证恢复数据的完整性和一致性
- 记录详细的恢复过程和验证结果
### 数据销毁与清理
#### 安全数据销毁
- 实现安全的数据删除和物理清除
- 记录数据销毁的审计日志
- 定期清理历史数据和临时文件
- 确保已删除数据无法被恢复
<a id="sec-ops-security"></a>
## 运维安全设计
### 安全监控体系
#### 安全监控架构
```mermaid
graph TB
subgraph "数据采集层"
AGENT1[系统日志采集]
AGENT2[应用日志采集]
AGENT3[数据库日志采集]
AGENT4[网络流量采集]
end
subgraph "数据处理层"
KAFKA[消息队列<br/>Kafka集群]
STREAM[流处理<br/>Flink/Storm]
ETL[数据清洗<br/>Logstash]
end
subgraph "存储分析层"
ES[Elasticsearch<br/>日志存储]
SIEM[安全信息事件管理<br/>SIEM平台]
AI[智能分析<br/>机器学习]
end
subgraph "可视化层"
DASHBOARD[监控仪表盘<br/>Grafana]
ALERT[告警系统<br/>AlertManager]
REPORT[安全报告<br/>自动生成]
end
AGENT1 --> KAFKA
AGENT2 --> KAFKA
AGENT3 --> KAFKA
AGENT4 --> KAFKA
KAFKA --> STREAM
STREAM --> ETL
ETL --> ES
ES --> SIEM
SIEM --> AI
AI --> DASHBOARD
DASHBOARD --> ALERT
ALERT --> REPORT
```
#### 安全事件检测规则
- **暴力破解检测**:失败登录次数阈值告警
- **异常数据访问**:大量数据查询行为监控
- **权限提升检测**:管理员权限变更告警
- **异常时间访问**:非工作时间访问行为监控
### 漏洞管理
#### 漏洞扫描策略
- 定期进行系统漏洞扫描
- 执行Web应用安全测试
- 进行数据库安全评估
- 生成漏洞扫描报告和修复建议
#### 补丁管理流程
```mermaid
graph LR
DISCOVER[漏洞发现] --> ASSESS[风险评估]
ASSESS --> PLAN[补丁计划]
PLAN --> TEST[测试验证]
TEST --> DEPLOY[生产部署]
DEPLOY --> VERIFY[部署验证]
VERIFY --> DOCUMENT[文档记录]
subgraph "评估标准"
HIGH[高危<br/>24小时内]
MEDIUM[中危<br/>7天内]
LOW[低危<br/>30天内]
end
ASSESS --> HIGH
ASSESS --> MEDIUM
ASSESS --> LOW
```
### 应急响应预案
#### 安全事件分级
| 级别 | 描述 | 响应时间 | 处理措施 |
|------|------|----------|----------|
| P0 | 系统完全不可用,数据泄露 | 15分钟 | 立即启动应急预案,通知管理层 |
| P1 | 核心功能受影响,安全风险高 | 30分钟 | 启动应急预案,组建应急小组 |
| P2 | 部分功能受影响,安全风险中等 | 2小时 | 安排专人处理,定期汇报 |
| P3 | 轻微影响,安全风险较低 | 8小时 | 正常工作时间处理 |
#### 应急响应流程
```mermaid
graph TB
INCIDENT[安全事件发生] --> DETECT[事件检测]
DETECT --> REPORT[事件上报]
REPORT --> ASSESS[影响评估]
ASSESS --> RESPONSE[应急响应]
subgraph "应急响应措施"
ISOLATE[系统隔离]
PRESERVE[证据保全]
RECOVER[系统恢复]
INVESTIGATE[调查分析]
end
subgraph "后续处理"
LESSON[经验总结]
IMPROVE[流程改进]
TRAIN[培训加强]
DOC[文档更新]
end
RESPONSE --> ISOLATE
RESPONSE --> PRESERVE
RESPONSE --> RECOVER
RESPONSE --> INVESTIGATE
INVESTIGATE --> LESSON
LESSON --> IMPROVE
IMPROVE --> TRAIN
TRAIN --> DOC
```
<a id="sec-governance"></a>
## 安全管理制度
### 安全组织架构
#### 安全管理组织
```mermaid
graph TB
CEO[总经理<br/>安全最高责任人]
CISO[信息安全负责人<br/>CISO]
subgraph "安全管理委员会"
IT_DIR[IT总监]
SECURITY_DIR[安全总监]
COMPLIANCE[合规负责人]
LEGAL[法务负责人]
end
subgraph "安全执行团队"
SEC_ADMIN[安全管理员]
SYS_ADMIN[系统管理员]
DBA[数据库管理员]
NET_ADMIN[网络管理员]
end
subgraph "业务安全责任人"
BUS_OWNER[业务负责人]
DATA_OWNER[数据负责人]
USER_ADMIN[用户管理员]
end
CEO --> CISO
CISO --> IT_DIR
CISO --> SECURITY_DIR
CISO --> COMPLIANCE
CISO --> LEGAL
IT_DIR --> SEC_ADMIN
IT_DIR --> SYS_ADMIN
IT_DIR --> DBA
IT_DIR --> NET_ADMIN
SECURITY_DIR --> BUS_OWNER
SECURITY_DIR --> DATA_OWNER
SECURITY_DIR --> USER_ADMIN
```
### 安全管理制度
#### 人员安全管理
- **入职安全审查**:对关键岗位人员进行背景调查
- **安全培训**:定期进行信息安全意识培训
- **权限管理**:建立权限申请、审批、回收流程
- **离职管理**:离职人员权限及时回收,签署保密协议
#### 系统建设安全管理
- **安全需求分析**:项目立项阶段进行安全需求分析
- **安全设计评审**:设计阶段进行安全架构评审
- **安全测试**:上线前进行安全渗透测试
- **安全验收**:系统上线前进行安全验收
#### 系统运维安全管理
- **变更管理**:所有系统变更都需要安全评估
- **备份管理**:定期备份,异地存储,加密保护
- **监控管理**7×24小时安全监控
- **应急管理**:建立应急响应机制
### 合规管理
#### 法律法规合规
- 《中华人民共和国网络安全法》
- 《中华人民共和国数据安全法》
- 《中华人民共和国个人信息保护法》
- 《关键信息基础设施安全保护条例》
#### 行业标准合规
- GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》
- GB/T 32918《信息安全技术 SM2椭圆曲线公钥密码算法》
- GB/T 32905《信息安全技术 SM3密码杂凑算法》
#### 合规检查清单
- [ ] 年度安全评估报告
- [ ] 安全管理制度建立
- [ ] 安全技术措施落实
- [ ] 安全培训记录完整
- [ ] 应急预案演练记录
- [ ] 安全事件处置记录
- [ ] 第三方安全服务合同
---
<a id="sec-summary"></a>
## 总结
福建水务营收系统安全设计结合达梦数据库的安全特性,建立了全方位、多层次的安全防护体系。通过技术防护、管理制度、人员培训等多重措施,确保系统安全稳定运行,满足水务行业的安全要求。
本安全设计方案的核心特点:
1. **国产化安全**:采用达梦数据库和国密算法
2. **纵深防御**:网络、应用、数据多层安全防护
3. **持续改进**:建立安全监控和应急响应机制
4. **管理规范**:完善的安全管理制度和流程

Binary file not shown.

View File

@ -0,0 +1,581 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="系统设计团队" />
<title>福建水务营收系统-部署设计</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<link rel="stylesheet" href="output/document_style.css" />
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<header id="title-block-header">
<h1 class="title">福建水务营收系统-部署设计</h1>
<p class="author">系统设计团队</p>
<p class="date">2024年12月19日</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#福建水务营收系统部署设计文档"
id="toc-福建水务营收系统部署设计文档"><span
class="toc-section-number">1</span> 福建水务营收系统部署设计文档</a>
<ul>
<li><a href="#文档信息" id="toc-文档信息"><span
class="toc-section-number">1.1</span> 文档信息</a></li>
<li><a href="#章节导航精简" id="toc-章节导航精简"><span
class="toc-section-number">1.2</span> 章节导航(精简)</a>
<ul>
<li><a href="#部署目标" id="toc-部署目标"><span
class="toc-section-number">1.2.1</span> 部署目标</a></li>
<li><a href="#部署原则" id="toc-部署原则"><span
class="toc-section-number">1.2.2</span> 部署原则</a></li>
<li><a href="#银行文件传输配置部署约束"
id="toc-银行文件传输配置部署约束"><span
class="toc-section-number">1.2.3</span>
银行文件传输配置部署约束</a></li>
<li><a href="#总体部署架构" id="toc-总体部署架构"><span
class="toc-section-number">1.2.4</span> 总体部署架构</a></li>
<li><a href="#环境架构设计" id="toc-环境架构设计"><span
class="toc-section-number">1.2.5</span> 环境架构设计</a>
<ul>
<li><a href="#生产环境架构" id="toc-生产环境架构"><span
class="toc-section-number">1.2.5.1</span> 生产环境架构</a></li>
<li><a href="#灾备环境架构" id="toc-灾备环境架构"><span
class="toc-section-number">1.2.5.2</span> 灾备环境架构</a></li>
</ul></li>
<li><a href="#硬件配置要求" id="toc-硬件配置要求"><span
class="toc-section-number">1.2.6</span> 硬件配置要求</a>
<ul>
<li><a href="#负载均衡服务器" id="toc-负载均衡服务器"><span
class="toc-section-number">1.2.6.1</span> 负载均衡服务器</a></li>
<li><a href="#web服务器" id="toc-web服务器"><span
class="toc-section-number">1.2.6.2</span> Web服务器</a></li>
<li><a href="#应用服务器" id="toc-应用服务器"><span
class="toc-section-number">1.2.6.3</span> 应用服务器</a></li>
<li><a href="#数据库服务器" id="toc-数据库服务器"><span
class="toc-section-number">1.2.6.4</span> 数据库服务器</a></li>
</ul></li>
<li><a href="#软件配置要求" id="toc-软件配置要求"><span
class="toc-section-number">1.2.7</span> 软件配置要求</a>
<ul>
<li><a href="#操作系统" id="toc-操作系统"><span
class="toc-section-number">1.2.7.1</span> 操作系统</a></li>
<li><a href="#应用环境" id="toc-应用环境"><span
class="toc-section-number">1.2.7.2</span> 应用环境</a></li>
<li><a href="#中间件配置" id="toc-中间件配置"><span
class="toc-section-number">1.2.7.3</span> 中间件配置</a></li>
</ul></li>
<li><a href="#容器化部署方案" id="toc-容器化部署方案"><span
class="toc-section-number">1.2.8</span> 容器化部署方案</a>
<ul>
<li><a href="#核心服务组件" id="toc-核心服务组件"><span
class="toc-section-number">1.2.8.1</span> 核心服务组件</a></li>
<li><a href="#部署配置说明" id="toc-部署配置说明"><span
class="toc-section-number">1.2.8.2</span> 部署配置说明</a></li>
</ul></li>
<li><a href="#部署流程" id="toc-部署流程"><span
class="toc-section-number">1.2.9</span> 部署流程</a>
<ul>
<li><a href="#环境准备阶段" id="toc-环境准备阶段"><span
class="toc-section-number">1.2.9.1</span> 环境准备阶段</a></li>
<li><a href="#应用部署阶段" id="toc-应用部署阶段"><span
class="toc-section-number">1.2.9.2</span> 应用部署阶段</a></li>
<li><a href="#测试验证阶段" id="toc-测试验证阶段"><span
class="toc-section-number">1.2.9.3</span> 测试验证阶段</a></li>
</ul></li>
<li><a href="#版本管理和发布" id="toc-版本管理和发布"><span
class="toc-section-number">1.2.10</span> 版本管理和发布</a>
<ul>
<li><a href="#版本管理策略" id="toc-版本管理策略"><span
class="toc-section-number">1.2.10.1</span> 版本管理策略</a></li>
<li><a href="#发布流程" id="toc-发布流程"><span
class="toc-section-number">1.2.10.2</span> 发布流程</a></li>
</ul></li>
<li><a href="#网络架构安全" id="toc-网络架构安全"><span
class="toc-section-number">1.2.11</span> 网络架构安全</a>
<ul>
<li><a href="#网络分区设计" id="toc-网络分区设计"><span
class="toc-section-number">1.2.11.1</span> 网络分区设计</a></li>
<li><a href="#访问控制策略" id="toc-访问控制策略"><span
class="toc-section-number">1.2.11.2</span> 访问控制策略</a></li>
</ul></li>
<li><a href="#应用安全" id="toc-应用安全"><span
class="toc-section-number">1.2.12</span> 应用安全</a>
<ul>
<li><a href="#身份认证安全" id="toc-身份认证安全"><span
class="toc-section-number">1.2.12.1</span> 身份认证安全</a></li>
<li><a href="#数据传输安全" id="toc-数据传输安全"><span
class="toc-section-number">1.2.12.2</span> 数据传输安全</a></li>
</ul></li>
<li><a href="#数据安全" id="toc-数据安全"><span
class="toc-section-number">1.2.13</span> 数据安全</a>
<ul>
<li><a href="#数据备份策略" id="toc-数据备份策略"><span
class="toc-section-number">1.2.13.1</span> 数据备份策略</a></li>
<li><a href="#数据恢复方案" id="toc-数据恢复方案"><span
class="toc-section-number">1.2.13.2</span> 数据恢复方案</a></li>
</ul></li>
<li><a href="#系统监控" id="toc-系统监控"><span
class="toc-section-number">1.2.14</span> 系统监控</a>
<ul>
<li><a href="#基础设施监控" id="toc-基础设施监控"><span
class="toc-section-number">1.2.14.1</span> 基础设施监控</a></li>
<li><a href="#应用监控" id="toc-应用监控"><span
class="toc-section-number">1.2.14.2</span> 应用监控</a></li>
<li><a href="#数据库监控" id="toc-数据库监控"><span
class="toc-section-number">1.2.14.3</span> 数据库监控</a></li>
</ul></li>
<li><a href="#运维管理" id="toc-运维管理"><span
class="toc-section-number">1.2.15</span> 运维管理</a>
<ul>
<li><a href="#日常运维" id="toc-日常运维"><span
class="toc-section-number">1.2.15.1</span> 日常运维</a></li>
<li><a href="#故障处理" id="toc-故障处理"><span
class="toc-section-number">1.2.15.2</span> 故障处理</a></li>
<li><a href="#变更管理" id="toc-变更管理"><span
class="toc-section-number">1.2.15.3</span> 变更管理</a></li>
</ul></li>
<li><a href="#运维工具" id="toc-运维工具"><span
class="toc-section-number">1.2.16</span> 运维工具</a>
<ul>
<li><a href="#自动化运维" id="toc-自动化运维"><span
class="toc-section-number">1.2.16.1</span> 自动化运维</a></li>
<li><a href="#运维平台" id="toc-运维平台"><span
class="toc-section-number">1.2.16.2</span> 运维平台</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</nav>
<h1 data-number="1" id="福建水务营收系统部署设计文档"><span
class="header-section-number">1</span> 福建水务营收系统部署设计文档</h1>
<h2 data-number="1.1" id="文档信息"><span
class="header-section-number">1.1</span> 文档信息</h2>
<table>
<thead>
<tr>
<th>项目信息</th>
<th>详情</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>项目名称</strong></td>
<td>福建水务营收系统</td>
</tr>
<tr>
<td><strong>文档类型</strong></td>
<td>概要设计文档</td>
</tr>
<tr>
<td><strong>技术框架</strong></td>
<td>RuoYi-Vue-Pro + yudao-ui-admin-vue3</td>
</tr>
<tr>
<td><strong>文档版本</strong></td>
<td>v1.0</td>
</tr>
<tr>
<td><strong>编写日期</strong></td>
<td>2024-12-19</td>
</tr>
<tr>
<td><strong>文档状态</strong></td>
<td>✅ 已完成</td>
</tr>
</tbody>
</table>
<h2 data-number="1.2" id="章节导航精简"><span
class="header-section-number">1.2</span> 章节导航(精简)</h2>
<ul>
<li><a href="#sec-overview">部署概述</a></li>
<li><a href="#sec-architecture">部署架构</a></li>
<li><a href="#sec-environment">环境配置</a></li>
<li><a href="#sec-solution">部署方案</a></li>
<li><a href="#sec-network-security">网络安全</a></li>
<li><a href="#sec-operations">监控运维</a></li>
<li><a href="#sec-summary">总结</a></li>
</ul>
<p><a id="sec-overview"></a> ## 部署概述</p>
<p>福建水务营收系统采用集中化部署模式,基于集团私有云环境进行部署,构建高可用、可扩展的系统架构,满足集团及下属各水务公司的业务需求。</p>
<h3 data-number="1.2.1" id="部署目标"><span
class="header-section-number">1.2.1</span> 部署目标</h3>
<ul>
<li>实现系统的集中部署和统一管理</li>
<li>确保系统高可用性和可靠性</li>
<li>支持业务动态扩展和弹性伸缩</li>
<li>保障数据安全和业务连续性</li>
<li>降低运维成本,提高管理效率</li>
</ul>
<h3 data-number="1.2.2" id="部署原则"><span
class="header-section-number">1.2.2</span> 部署原则</h3>
<ul>
<li><strong>集中部署</strong>:核心业务系统集中部署在集团数据中心,统一管理和维护</li>
<li><strong>多级架构</strong>:采用多级架构设计,实现前端负载分担和后端高可用</li>
<li><strong>灾备设计</strong>:重要系统和数据实现灾备,确保业务连续性</li>
<li><strong>安全防护</strong>:多层次安全防护体系,确保系统和数据安全</li>
<li><strong>弹性扩展</strong>:支持系统横向和纵向扩展,适应业务增长需求</li>
</ul>
<h3 data-number="1.2.3" id="银行文件传输配置部署约束"><span
class="header-section-number">1.2.3</span> 银行文件传输配置部署约束</h3>
<ul>
<li><code>sw-business-bank</code> 继续沿用
<code>application-{profile}.yaml + Nacos</code>
加载环境默认文件传输规则,不在代码中硬编码送盘、回盘、对账目录。</li>
<li>环境默认规则承接
<code>protocol/host/port/username/credentialRef/sendDir/backDir/reconcileDir/archiveDir/localTempDir</code>;银行通道、租户、租户-通道覆盖通过
<code>bk_channel_api_config</code><code>FILE_TRANSFER_CONFIG</code>
记录补充。</li>
<li>配置切换只影响新发起文件动作;已落库批次继续沿用已固化的协议、目录和文件路径审计结果,不要求重算旧批次。</li>
</ul>
<p><a id="sec-architecture"></a> ## 部署架构</p>
<h3 data-number="1.2.4" id="总体部署架构"><span
class="header-section-number">1.2.4</span> 总体部署架构</h3>
<pre class="mermaid"><code>graph
subgraph EXTERNAL[&quot;外部用户访问&quot;]
direction TB
A[移动端用户]
B[PC端用户]
C[第三方系统]
end
subgraph LOADBALANCER[&quot;负载均衡层&quot;]
direction TB
D[主负载均衡器]
E[备负载均衡器]
end
subgraph WEBSERVICE[&quot;Web服务层&quot;]
direction TB
F[Web服务器1]
G[Web服务器2]
H[Web服务器3]
end
subgraph APPSERVICE[&quot;应用服务层&quot;]
direction TB
I[应用服务器1]
J[应用服务器2]
K[应用服务器3]
L[应用服务器4]
end
subgraph DATASERVICE[&quot;数据服务层&quot;]
direction TB
M[(主数据库&lt;br/&gt;达梦数据库 8.0+)]
N[(备数据库&lt;br/&gt;达梦数据库 8.0+)]
O[缓存服务器&lt;br/&gt;Redis]
P[文件服务器&lt;br/&gt;MinIO]
M -.-&gt;|数据同步| N
end
%% 层级间调用关系
EXTERNAL -.-&gt;|用户请求&lt;br/&gt;接口调用| LOADBALANCER
LOADBALANCER -.-&gt;|负载分发&lt;br/&gt;故障切换| WEBSERVICE
WEBSERVICE -.-&gt;|业务请求&lt;br/&gt;服务调用| APPSERVICE
APPSERVICE -.-&gt;|数据访问&lt;br/&gt;缓存读写&lt;br/&gt;文件操作| DATASERVICE
</code></pre>
<h3 data-number="1.2.5" id="环境架构设计"><span
class="header-section-number">1.2.5</span> 环境架构设计</h3>
<p>系统部署分为四个环境:开发环境、测试环境、预生产环境和生产环境。</p>
<h4 data-number="1.2.5.1" id="生产环境架构"><span
class="header-section-number">1.2.5.1</span> 生产环境架构</h4>
<ul>
<li><strong>负载均衡</strong>:双机热备,支持故障自动切换</li>
<li><strong>Web服务器</strong>3台服务器提供前端页面服务</li>
<li><strong>应用服务器</strong>4台服务器集群处理业务逻辑</li>
<li><strong>达梦数据库</strong>:主备架构,数据实时同步</li>
<li><strong>Redis缓存</strong>:主从架构,提高系统响应速度</li>
<li><strong>MinIO文件存储</strong>:分布式文件存储,支持高并发访问</li>
</ul>
<h4 data-number="1.2.5.2" id="灾备环境架构"><span
class="header-section-number">1.2.5.2</span> 灾备环境架构</h4>
<ul>
<li><strong>异地部署</strong>:在备用数据中心部署完整的系统环境</li>
<li><strong>数据同步</strong>:定时同步生产环境数据</li>
<li><strong>切换机制</strong>:支持快速切换到灾备环境</li>
</ul>
<p><a id="sec-environment"></a> ## 环境配置</p>
<h3 data-number="1.2.6" id="硬件配置要求"><span
class="header-section-number">1.2.6</span> 硬件配置要求</h3>
<h4 data-number="1.2.6.1" id="负载均衡服务器"><span
class="header-section-number">1.2.6.1</span> 负载均衡服务器</h4>
<ul>
<li><strong>CPU</strong>8核 2.4GHz</li>
<li><strong>内存</strong>16GB</li>
<li><strong>存储</strong>100GB SSD</li>
<li><strong>网络</strong>:双千兆网卡</li>
</ul>
<h4 data-number="1.2.6.2" id="web服务器"><span
class="header-section-number">1.2.6.2</span> Web服务器</h4>
<ul>
<li><strong>CPU</strong>8核 2.4GHz</li>
<li><strong>内存</strong>16GB</li>
<li><strong>存储</strong>200GB SSD</li>
<li><strong>网络</strong>:双千兆网卡</li>
</ul>
<h4 data-number="1.2.6.3" id="应用服务器"><span
class="header-section-number">1.2.6.3</span> 应用服务器</h4>
<ul>
<li><strong>CPU</strong>16核 2.4GHz</li>
<li><strong>内存</strong>32GB</li>
<li><strong>存储</strong>300GB SSD</li>
<li><strong>网络</strong>:双千兆网卡</li>
</ul>
<h4 data-number="1.2.6.4" id="数据库服务器"><span
class="header-section-number">1.2.6.4</span> 数据库服务器</h4>
<ul>
<li><strong>CPU</strong>24核 2.4GHz</li>
<li><strong>内存</strong>64GB</li>
<li><strong>存储</strong>2TB SSD (RAID 10)</li>
<li><strong>网络</strong>:双万兆网卡</li>
</ul>
<h3 data-number="1.2.7" id="软件配置要求"><span
class="header-section-number">1.2.7</span> 软件配置要求</h3>
<h4 data-number="1.2.7.1" id="操作系统"><span
class="header-section-number">1.2.7.1</span> 操作系统</h4>
<ul>
<li><strong>服务端</strong>CentOS 7.9+ 或 openEuler 20.03+</li>
<li><strong>数据库</strong>:达梦数据库 8.0+ 企业版</li>
</ul>
<h4 data-number="1.2.7.2" id="应用环境"><span
class="header-section-number">1.2.7.2</span> 应用环境</h4>
<ul>
<li><strong>Java运行环境</strong>JDK 17</li>
<li><strong>应用服务器</strong>内置Tomcat 9.0</li>
<li><strong>Web服务器</strong>Nginx 1.20+</li>
<li><strong>缓存服务器</strong>Redis 6.2+</li>
</ul>
<h4 data-number="1.2.7.3" id="中间件配置"><span
class="header-section-number">1.2.7.3</span> 中间件配置</h4>
<ul>
<li><strong>消息队列</strong>基于Redis的轻量级队列</li>
<li><strong>任务调度</strong>Quartz集群模式</li>
<li><strong>工作流引擎</strong>Flowable 6.8.0</li>
<li><strong>文件存储</strong>MinIO 分布式存储</li>
<li><strong>配置中心</strong>Nacos承接 profile
对应的银行文件传输默认规则</li>
</ul>
<p><a id="sec-solution"></a> ## 部署方案</p>
<h3 data-number="1.2.8" id="容器化部署方案"><span
class="header-section-number">1.2.8</span> 容器化部署方案</h3>
<p>系统采用Docker容器化部署使用Docker Compose进行服务编排。</p>
<h4 data-number="1.2.8.1" id="核心服务组件"><span
class="header-section-number">1.2.8.1</span> 核心服务组件</h4>
<pre class="mermaid"><code>graph
direction TB
subgraph FRONTEND[&quot;前端服务层&quot;]
A[前端容器&lt;br/&gt;Nginx + Vue3]
end
subgraph BACKEND[&quot;后端服务层&quot;]
B[后端容器&lt;br/&gt;Spring Boot]
end
subgraph DATASTORAGE[&quot;数据存储层&quot;]
direction TB
C[数据库容器&lt;br/&gt;达梦数据库 8.0+]
D[缓存容器&lt;br/&gt;Redis]
E[文件存储容器&lt;br/&gt;MinIO]
end
%% 容器服务调用关系
FRONTEND -.-&gt;|API请求&lt;br/&gt;静态资源| BACKEND
BACKEND -.-&gt;|数据操作&lt;br/&gt;缓存访问&lt;br/&gt;文件存储| DATASTORAGE
</code></pre>
<h4 data-number="1.2.8.2" id="部署配置说明"><span
class="header-section-number">1.2.8.2</span> 部署配置说明</h4>
<ul>
<li><strong>前端容器</strong>包含Vue3应用和Nginx反向代理</li>
<li><strong>后端容器</strong>Spring Boot应用连接数据库和缓存</li>
<li><strong>数据库容器</strong>:达梦数据库,数据持久化存储</li>
<li><strong>缓存容器</strong>Redis缓存服务提升系统性能</li>
<li><strong>文件存储容器</strong>MinIO对象存储管理系统文件</li>
<li><strong>银行文件交换目录</strong>:应用节点需具备本地临时目录与归档目录访问权限;外部银行
<code>SFTP/FTP</code> 白名单、账户与凭据由环境运维统一开通</li>
</ul>
<h3 data-number="1.2.9" id="部署流程"><span
class="header-section-number">1.2.9</span> 部署流程</h3>
<h4 data-number="1.2.9.1" id="环境准备阶段"><span
class="header-section-number">1.2.9.1</span> 环境准备阶段</h4>
<ol type="1">
<li><strong>服务器准备</strong>:配置服务器硬件和网络环境</li>
<li><strong>操作系统安装</strong>:安装和配置操作系统</li>
<li><strong>Docker环境部署</strong>安装Docker和Docker Compose</li>
<li><strong>网络配置</strong>:配置服务器网络和防火墙规则</li>
</ol>
<h4 data-number="1.2.9.2" id="应用部署阶段"><span
class="header-section-number">1.2.9.2</span> 应用部署阶段</h4>
<ol type="1">
<li><strong>镜像构建</strong>构建应用Docker镜像</li>
<li><strong>服务编排</strong>配置Docker Compose服务编排</li>
<li><strong>数据初始化</strong>:初始化数据库表结构和基础数据</li>
<li><strong>服务启动</strong>:启动所有容器化服务</li>
</ol>
<h4 data-number="1.2.9.3" id="测试验证阶段"><span
class="header-section-number">1.2.9.3</span> 测试验证阶段</h4>
<ol type="1">
<li><strong>功能测试</strong>:验证系统各功能模块正常运行</li>
<li><strong>性能测试</strong>:测试系统并发处理能力</li>
<li><strong>安全测试</strong>:验证系统安全防护措施</li>
<li><strong>集成测试</strong>:测试与外部系统的接口集成</li>
</ol>
<h3 data-number="1.2.10" id="版本管理和发布"><span
class="header-section-number">1.2.10</span> 版本管理和发布</h3>
<h4 data-number="1.2.10.1" id="版本管理策略"><span
class="header-section-number">1.2.10.1</span> 版本管理策略</h4>
<ul>
<li><strong>Git版本控制</strong>使用Git管理代码版本</li>
<li><strong>分支管理</strong>采用GitFlow分支管理模型</li>
<li><strong>标签管理</strong>:为每个发布版本打标签</li>
</ul>
<h4 data-number="1.2.10.2" id="发布流程"><span
class="header-section-number">1.2.10.2</span> 发布流程</h4>
<ol type="1">
<li><strong>代码合并</strong>:将开发分支合并到主分支</li>
<li><strong>构建镜像</strong>自动构建Docker镜像</li>
<li><strong>环境部署</strong>:自动部署到目标环境</li>
<li><strong>健康检查</strong>:验证服务健康状态</li>
</ol>
<p><a id="sec-network-security"></a> ## 网络安全</p>
<h3 data-number="1.2.11" id="网络架构安全"><span
class="header-section-number">1.2.11</span> 网络架构安全</h3>
<h4 data-number="1.2.11.1" id="网络分区设计"><span
class="header-section-number">1.2.11.1</span> 网络分区设计</h4>
<ul>
<li><strong>DMZ区</strong>部署面向外部的Web服务与内网隔离</li>
<li><strong>应用区</strong>:部署业务应用服务,限制网络访问</li>
<li><strong>数据区</strong>:部署数据库和文件服务,严格访问控制</li>
<li><strong>管理区</strong>:部署运维管理工具,独立网络环境</li>
</ul>
<h4 data-number="1.2.11.2" id="访问控制策略"><span
class="header-section-number">1.2.11.2</span> 访问控制策略</h4>
<ul>
<li><strong>防火墙规则</strong>:配置严格的防火墙访问规则</li>
<li><strong>端口管理</strong>:只开放必要的服务端口</li>
<li><strong>IP白名单</strong>对敏感服务配置IP访问白名单</li>
</ul>
<h3 data-number="1.2.12" id="应用安全"><span
class="header-section-number">1.2.12</span> 应用安全</h3>
<h4 data-number="1.2.12.1" id="身份认证安全"><span
class="header-section-number">1.2.12.1</span> 身份认证安全</h4>
<ul>
<li><strong>多因子认证</strong>:支持密码+短信验证码双因子认证</li>
<li><strong>会话管理</strong>:安全的会话创建、维护和销毁机制</li>
<li><strong>密码策略</strong>:强密码策略和定期密码更换</li>
</ul>
<h4 data-number="1.2.12.2" id="数据传输安全"><span
class="header-section-number">1.2.12.2</span> 数据传输安全</h4>
<ul>
<li><strong>HTTPS通信</strong>所有外部通信使用HTTPS加密</li>
<li><strong>API安全</strong>API接口使用JWT令牌认证</li>
<li><strong>数据加密</strong>:敏感数据传输和存储加密</li>
</ul>
<h3 data-number="1.2.13" id="数据安全"><span
class="header-section-number">1.2.13</span> 数据安全</h3>
<h4 data-number="1.2.13.1" id="数据备份策略"><span
class="header-section-number">1.2.13.1</span> 数据备份策略</h4>
<ul>
<li><strong>自动备份</strong>:每日自动增量备份,每周全量备份</li>
<li><strong>异地存储</strong>:备份数据异地存储,防止灾难性损失</li>
<li><strong>备份验证</strong>:定期验证备份数据的完整性和可用性</li>
</ul>
<h4 data-number="1.2.13.2" id="数据恢复方案"><span
class="header-section-number">1.2.13.2</span> 数据恢复方案</h4>
<ul>
<li><strong>快速恢复</strong>:提供数据快速恢复机制</li>
<li><strong>恢复演练</strong>:定期进行数据恢复演练</li>
<li><strong>灾难恢复</strong>:制定完整的灾难恢复预案</li>
</ul>
<p><a id="sec-operations"></a> ## 监控运维</p>
<h3 data-number="1.2.14" id="系统监控"><span
class="header-section-number">1.2.14</span> 系统监控</h3>
<h4 data-number="1.2.14.1" id="基础设施监控"><span
class="header-section-number">1.2.14.1</span> 基础设施监控</h4>
<ul>
<li><strong>服务器监控</strong>CPU、内存、磁盘、网络等资源监控</li>
<li><strong>网络监控</strong>:网络连通性和带宽使用情况监控</li>
<li><strong>存储监控</strong>磁盘空间和IO性能监控</li>
</ul>
<h4 data-number="1.2.14.2" id="应用监控"><span
class="header-section-number">1.2.14.2</span> 应用监控</h4>
<ul>
<li><strong>服务状态监控</strong>:监控各服务的运行状态</li>
<li><strong>性能监控</strong>:监控应用响应时间和吞吐量</li>
<li><strong>业务监控</strong>:监控关键业务指标和异常情况</li>
<li><strong>日志监控</strong>:实时监控应用日志和错误信息</li>
</ul>
<h4 data-number="1.2.14.3" id="数据库监控"><span
class="header-section-number">1.2.14.3</span> 数据库监控</h4>
<ul>
<li><strong>数据库性能监控</strong>监控SQL执行效率和资源使用</li>
<li><strong>连接监控</strong>:监控数据库连接数和连接状态</li>
<li><strong>存储监控</strong>:监控数据库存储空间和增长趋势</li>
</ul>
<h3 data-number="1.2.15" id="运维管理"><span
class="header-section-number">1.2.15</span> 运维管理</h3>
<h4 data-number="1.2.15.1" id="日常运维"><span
class="header-section-number">1.2.15.1</span> 日常运维</h4>
<ul>
<li><strong>系统巡检</strong>:定期检查系统运行状态</li>
<li><strong>性能优化</strong>:根据监控数据优化系统性能</li>
<li><strong>容量规划</strong>:预测资源需求,提前进行容量规划</li>
<li><strong>安全检查</strong>:定期进行安全风险评估和加固</li>
</ul>
<h4 data-number="1.2.15.2" id="故障处理"><span
class="header-section-number">1.2.15.2</span> 故障处理</h4>
<ul>
<li><strong>故障监控</strong>7×24小时故障监控和告警</li>
<li><strong>应急响应</strong>:建立快速响应机制和处理流程</li>
<li><strong>故障分析</strong>:详细记录和分析故障原因</li>
<li><strong>预防措施</strong>:制定故障预防和改进措施</li>
</ul>
<h4 data-number="1.2.15.3" id="变更管理"><span
class="header-section-number">1.2.15.3</span> 变更管理</h4>
<ul>
<li><strong>变更审批</strong>:建立变更申请和审批流程</li>
<li><strong>风险评估</strong>:评估变更对系统的影响和风险</li>
<li><strong>回滚预案</strong>:为每次变更制定回滚预案</li>
<li><strong>变更记录</strong>:详细记录所有系统变更操作</li>
</ul>
<h3 data-number="1.2.16" id="运维工具"><span
class="header-section-number">1.2.16</span> 运维工具</h3>
<h4 data-number="1.2.16.1" id="自动化运维"><span
class="header-section-number">1.2.16.1</span> 自动化运维</h4>
<ul>
<li><strong>部署自动化</strong>:自动化应用部署和配置管理</li>
<li><strong>监控自动化</strong>:自动化监控配置和告警处理</li>
<li><strong>备份自动化</strong>:自动化数据备份和验证</li>
<li><strong>巡检自动化</strong>:自动化系统健康检查</li>
</ul>
<h4 data-number="1.2.16.2" id="运维平台"><span
class="header-section-number">1.2.16.2</span> 运维平台</h4>
<ul>
<li><strong>统一运维平台</strong>:提供统一的系统管理界面</li>
<li><strong>监控大屏</strong>:实时展示系统运行状态</li>
<li><strong>告警中心</strong>:集中管理和处理系统告警</li>
<li><strong>知识库</strong>:建立运维知识库和操作手册</li>
</ul>
<p><a id="sec-summary"></a> ## 总结</p>
<p>部署设计以“集中部署、分层防护、可观测运维”为主线,覆盖了环境规划、架构设计、部署实施与运维治理。后续若进入实施细节阶段,建议将脚本、参数模板和操作手册沉淀到附录或运维手册,不在本主文档中重复维护。</p>
</body>
</html>

Binary file not shown.

View File

@ -0,0 +1,361 @@
---
title: "05_Deployment_Design"
author: "系统设计团队"
date: "2024年12月19日"
documentclass: article
geometry: margin=1in
fontsize: 11pt
mainfont: "PingFang SC"
CJKmainfont: "PingFang SC"
---
---
doc_id: TC-05-DEPLOYMENT
doc_role: master_document
authority: primary
scope: 部署设计
source_of_truth: true
last_reviewed: 2026-03-11
retrieval_priority: P0
---
# 福建水务营收系统部署设计文档
## 文档信息
| 项目信息 | 详情 |
|---------|------|
| **项目名称** | 福建水务营收系统 |
| **文档类型** | 概要设计文档 |
| **技术框架** | RuoYi-Vue-Pro + yudao-ui-admin-vue3 |
| **文档版本** | v1.0 |
| **编写日期** | 2024-12-19 |
| **文档状态** | ✅ 已完成 |
## 章节导航(精简)
- [部署概述](#sec-overview)
- [部署架构](#sec-architecture)
- [环境配置](#sec-environment)
- [部署方案](#sec-solution)
- [网络安全](#sec-network-security)
- [监控运维](#sec-operations)
- [总结](#sec-summary)
<a id="sec-overview"></a>
## 部署概述
福建水务营收系统采用集中化部署模式,基于集团私有云环境进行部署,构建高可用、可扩展的系统架构,满足集团及下属各水务公司的业务需求。
### 部署目标
- 实现系统的集中部署和统一管理
- 确保系统高可用性和可靠性
- 支持业务动态扩展和弹性伸缩
- 保障数据安全和业务连续性
- 降低运维成本,提高管理效率
### 部署原则
- **集中部署**:核心业务系统集中部署在集团数据中心,统一管理和维护
- **多级架构**:采用多级架构设计,实现前端负载分担和后端高可用
- **灾备设计**:重要系统和数据实现灾备,确保业务连续性
- **安全防护**:多层次安全防护体系,确保系统和数据安全
- **弹性扩展**:支持系统横向和纵向扩展,适应业务增长需求
### 银行文件传输配置部署约束
- `sw-business-bank` 继续沿用 `application-{profile}.yaml + Nacos` 加载环境默认文件传输规则,不在代码中硬编码送盘、回盘、对账目录。
- 环境默认规则承接 `protocol/host/port/username/credentialRef/sendDir/backDir/reconcileDir/archiveDir/localTempDir`;银行通道、租户、租户-通道覆盖通过 `bk_channel_api_config``FILE_TRANSFER_CONFIG` 记录补充。
- 配置切换只影响新发起文件动作;已落库批次继续沿用已固化的协议、目录和文件路径审计结果,不要求重算旧批次。
<a id="sec-architecture"></a>
## 部署架构
### 总体部署架构
```mermaid
graph
subgraph EXTERNAL["外部用户访问"]
direction TB
A[移动端用户]
B[PC端用户]
C[第三方系统]
end
subgraph LOADBALANCER["负载均衡层"]
direction TB
D[主负载均衡器]
E[备负载均衡器]
end
subgraph WEBSERVICE["Web服务层"]
direction TB
F[Web服务器1]
G[Web服务器2]
H[Web服务器3]
end
subgraph APPSERVICE["应用服务层"]
direction TB
I[应用服务器1]
J[应用服务器2]
K[应用服务器3]
L[应用服务器4]
end
subgraph DATASERVICE["数据服务层"]
direction TB
M[(主数据库<br/>达梦数据库 8.0+)]
N[(备数据库<br/>达梦数据库 8.0+)]
O[缓存服务器<br/>Redis]
P[文件服务器<br/>MinIO]
M -.->|数据同步| N
end
%% 层级间调用关系
EXTERNAL -.->|用户请求<br/>接口调用| LOADBALANCER
LOADBALANCER -.->|负载分发<br/>故障切换| WEBSERVICE
WEBSERVICE -.->|业务请求<br/>服务调用| APPSERVICE
APPSERVICE -.->|数据访问<br/>缓存读写<br/>文件操作| DATASERVICE
```
### 环境架构设计
系统部署分为四个环境:开发环境、测试环境、预生产环境和生产环境。
#### 生产环境架构
- **负载均衡**:双机热备,支持故障自动切换
- **Web服务器**3台服务器提供前端页面服务
- **应用服务器**4台服务器集群处理业务逻辑
- **达梦数据库**:主备架构,数据实时同步
- **Redis缓存**:主从架构,提高系统响应速度
- **MinIO文件存储**:分布式文件存储,支持高并发访问
#### 灾备环境架构
- **异地部署**:在备用数据中心部署完整的系统环境
- **数据同步**:定时同步生产环境数据
- **切换机制**:支持快速切换到灾备环境
<a id="sec-environment"></a>
## 环境配置
### 硬件配置要求
#### 负载均衡服务器
- **CPU**8核 2.4GHz
- **内存**16GB
- **存储**100GB SSD
- **网络**:双千兆网卡
#### Web服务器
- **CPU**8核 2.4GHz
- **内存**16GB
- **存储**200GB SSD
- **网络**:双千兆网卡
#### 应用服务器
- **CPU**16核 2.4GHz
- **内存**32GB
- **存储**300GB SSD
- **网络**:双千兆网卡
#### 数据库服务器
- **CPU**24核 2.4GHz
- **内存**64GB
- **存储**2TB SSD (RAID 10)
- **网络**:双万兆网卡
### 软件配置要求
#### 操作系统
- **服务端**CentOS 7.9+ 或 openEuler 20.03+
- **数据库**:达梦数据库 8.0+ 企业版
#### 应用环境
- **Java运行环境**JDK 17
- **应用服务器**内置Tomcat 9.0
- **Web服务器**Nginx 1.20+
- **缓存服务器**Redis 6.2+
#### 中间件配置
- **消息队列**基于Redis的轻量级队列
- **任务调度**Quartz集群模式
- **工作流引擎**Flowable 6.8.0
- **文件存储**MinIO 分布式存储
- **配置中心**Nacos承接 profile 对应的银行文件传输默认规则
<a id="sec-solution"></a>
## 部署方案
### 容器化部署方案
系统采用Docker容器化部署使用Docker Compose进行服务编排。
#### 核心服务组件
```mermaid
graph
direction TB
subgraph FRONTEND["前端服务层"]
A[前端容器<br/>Nginx + Vue3]
end
subgraph BACKEND["后端服务层"]
B[后端容器<br/>Spring Boot]
end
subgraph DATASTORAGE["数据存储层"]
direction TB
C[数据库容器<br/>达梦数据库 8.0+]
D[缓存容器<br/>Redis]
E[文件存储容器<br/>MinIO]
end
%% 容器服务调用关系
FRONTEND -.->|API请求<br/>静态资源| BACKEND
BACKEND -.->|数据操作<br/>缓存访问<br/>文件存储| DATASTORAGE
```
#### 部署配置说明
- **前端容器**包含Vue3应用和Nginx反向代理
- **后端容器**Spring Boot应用连接数据库和缓存
- **数据库容器**:达梦数据库,数据持久化存储
- **缓存容器**Redis缓存服务提升系统性能
- **文件存储容器**MinIO对象存储管理系统文件
- **银行文件交换目录**:应用节点需具备本地临时目录与归档目录访问权限;外部银行 `SFTP/FTP` 白名单、账户与凭据由环境运维统一开通
### 部署流程
#### 环境准备阶段
1. **服务器准备**:配置服务器硬件和网络环境
2. **操作系统安装**:安装和配置操作系统
3. **Docker环境部署**安装Docker和Docker Compose
4. **网络配置**:配置服务器网络和防火墙规则
#### 应用部署阶段
1. **镜像构建**构建应用Docker镜像
2. **服务编排**配置Docker Compose服务编排
3. **数据初始化**:初始化数据库表结构和基础数据
4. **服务启动**:启动所有容器化服务
#### 测试验证阶段
1. **功能测试**:验证系统各功能模块正常运行
2. **性能测试**:测试系统并发处理能力
3. **安全测试**:验证系统安全防护措施
4. **集成测试**:测试与外部系统的接口集成
### 版本管理和发布
#### 版本管理策略
- **Git版本控制**使用Git管理代码版本
- **分支管理**采用GitFlow分支管理模型
- **标签管理**:为每个发布版本打标签
#### 发布流程
1. **代码合并**:将开发分支合并到主分支
2. **构建镜像**自动构建Docker镜像
3. **环境部署**:自动部署到目标环境
4. **健康检查**:验证服务健康状态
<a id="sec-network-security"></a>
## 网络安全
### 网络架构安全
#### 网络分区设计
- **DMZ区**部署面向外部的Web服务与内网隔离
- **应用区**:部署业务应用服务,限制网络访问
- **数据区**:部署数据库和文件服务,严格访问控制
- **管理区**:部署运维管理工具,独立网络环境
#### 访问控制策略
- **防火墙规则**:配置严格的防火墙访问规则
- **端口管理**:只开放必要的服务端口
- **IP白名单**对敏感服务配置IP访问白名单
### 应用安全
#### 身份认证安全
- **多因子认证**:支持密码+短信验证码双因子认证
- **会话管理**:安全的会话创建、维护和销毁机制
- **密码策略**:强密码策略和定期密码更换
#### 数据传输安全
- **HTTPS通信**所有外部通信使用HTTPS加密
- **API安全**API接口使用JWT令牌认证
- **数据加密**:敏感数据传输和存储加密
### 数据安全
#### 数据备份策略
- **自动备份**:每日自动增量备份,每周全量备份
- **异地存储**:备份数据异地存储,防止灾难性损失
- **备份验证**:定期验证备份数据的完整性和可用性
#### 数据恢复方案
- **快速恢复**:提供数据快速恢复机制
- **恢复演练**:定期进行数据恢复演练
- **灾难恢复**:制定完整的灾难恢复预案
<a id="sec-operations"></a>
## 监控运维
### 系统监控
#### 基础设施监控
- **服务器监控**CPU、内存、磁盘、网络等资源监控
- **网络监控**:网络连通性和带宽使用情况监控
- **存储监控**磁盘空间和IO性能监控
#### 应用监控
- **服务状态监控**:监控各服务的运行状态
- **性能监控**:监控应用响应时间和吞吐量
- **业务监控**:监控关键业务指标和异常情况
- **日志监控**:实时监控应用日志和错误信息
#### 数据库监控
- **数据库性能监控**监控SQL执行效率和资源使用
- **连接监控**:监控数据库连接数和连接状态
- **存储监控**:监控数据库存储空间和增长趋势
### 运维管理
#### 日常运维
- **系统巡检**:定期检查系统运行状态
- **性能优化**:根据监控数据优化系统性能
- **容量规划**:预测资源需求,提前进行容量规划
- **安全检查**:定期进行安全风险评估和加固
#### 故障处理
- **故障监控**7×24小时故障监控和告警
- **应急响应**:建立快速响应机制和处理流程
- **故障分析**:详细记录和分析故障原因
- **预防措施**:制定故障预防和改进措施
#### 变更管理
- **变更审批**:建立变更申请和审批流程
- **风险评估**:评估变更对系统的影响和风险
- **回滚预案**:为每次变更制定回滚预案
- **变更记录**:详细记录所有系统变更操作
### 运维工具
#### 自动化运维
- **部署自动化**:自动化应用部署和配置管理
- **监控自动化**:自动化监控配置和告警处理
- **备份自动化**:自动化数据备份和验证
- **巡检自动化**:自动化系统健康检查
#### 运维平台
- **统一运维平台**:提供统一的系统管理界面
- **监控大屏**:实时展示系统运行状态
- **告警中心**:集中管理和处理系统告警
- **知识库**:建立运维知识库和操作手册
<a id="sec-summary"></a>
## 总结
部署设计以“集中部署、分层防护、可观测运维”为主线,覆盖了环境规划、架构设计、部署实施与运维治理。后续若进入实施细节阶段,建议将脚本、参数模板和操作手册沉淀到附录或运维手册,不在本主文档中重复维护。

Binary file not shown.

View File

@ -0,0 +1,707 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="系统设计团队" />
<title>福建水务营收系统-敏感数据加密方案</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<link rel="stylesheet" href="output/document_style.css" />
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<header id="title-block-header">
<h1 class="title">福建水务营收系统-敏感数据加密方案</h1>
<p class="author">系统设计团队</p>
<p class="date">2024年12月19日</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#用户敏感数据加密存储技术方案"
id="toc-用户敏感数据加密存储技术方案"><span
class="toc-section-number">1</span> 用户敏感数据加密存储技术方案</a>
<ul>
<li><a href="#文档信息" id="toc-文档信息"><span
class="toc-section-number">1.1</span> 文档信息</a></li>
<li><a href="#一方案背景" id="toc-一方案背景"><span
class="toc-section-number">1.2</span> 一、方案背景</a>
<ul>
<li><a href="#为什么要做加密" id="toc-为什么要做加密"><span
class="toc-section-number">1.2.1</span> 为什么要做加密?</a></li>
<li><a href="#涉及哪些数据" id="toc-涉及哪些数据"><span
class="toc-section-number">1.2.2</span> 涉及哪些数据?</a></li>
</ul></li>
<li><a href="#二技术方案概述" id="toc-二技术方案概述"><span
class="toc-section-number">1.3</span> 二、技术方案概述</a>
<ul>
<li><a href="#核心思路" id="toc-核心思路"><span
class="toc-section-number">1.3.1</span> 核心思路</a></li>
<li><a href="#采用的技术" id="toc-采用的技术"><span
class="toc-section-number">1.3.2</span> 采用的技术</a></li>
</ul></li>
<li><a href="#三加密存储方案" id="toc-三加密存储方案"><span
class="toc-section-number">1.4</span> 三、加密存储方案</a>
<ul>
<li><a href="#加密前后对比" id="toc-加密前后对比"><span
class="toc-section-number">1.4.1</span> 加密前后对比</a></li>
<li><a href="#mybatis-plus-加密插件原理"
id="toc-mybatis-plus-加密插件原理"><span
class="toc-section-number">1.4.2</span> MyBatis-Plus
加密插件原理</a></li>
</ul></li>
<li><a href="#四搜索功能方案" id="toc-四搜索功能方案"><span
class="toc-section-number">1.5</span> 四、搜索功能方案</a>
<ul>
<li><a href="#为什么加密后还能搜索" id="toc-为什么加密后还能搜索"><span
class="toc-section-number">1.5.1</span> 为什么加密后还能搜索?</a></li>
<li><a href="#支持的查询类型" id="toc-支持的查询类型"><span
class="toc-section-number">1.5.2</span> 支持的查询类型</a></li>
<li><a href="#查询流程示例" id="toc-查询流程示例"><span
class="toc-section-number">1.5.3</span> 查询流程示例</a></li>
</ul></li>
<li><a href="#五数据库表设计" id="toc-五数据库表设计"><span
class="toc-section-number">1.6</span> 五、数据库表设计</a>
<ul>
<li><a href="#表结构说明" id="toc-表结构说明"><span
class="toc-section-number">1.6.1</span> 表结构说明</a></li>
<li><a href="#字段对照表" id="toc-字段对照表"><span
class="toc-section-number">1.6.2</span> 字段对照表</a></li>
</ul></li>
<li><a href="#六等保符合性说明" id="toc-六等保符合性说明"><span
class="toc-section-number">1.7</span> 六、等保符合性说明</a>
<ul>
<li><a href="#安全控制措施对照" id="toc-安全控制措施对照"><span
class="toc-section-number">1.7.1</span> 安全控制措施对照</a></li>
<li><a href="#安全架构" id="toc-安全架构"><span
class="toc-section-number">1.7.2</span> 安全架构</a></li>
</ul></li>
<li><a href="#七实施计划" id="toc-七实施计划"><span
class="toc-section-number">1.8</span> 七、实施计划</a>
<ul>
<li><a href="#实施时间表" id="toc-实施时间表"><span
class="toc-section-number">1.8.1</span> 实施时间表</a></li>
<li><a href="#实施步骤" id="toc-实施步骤"><span
class="toc-section-number">1.8.2</span> 实施步骤</a></li>
</ul></li>
<li><a href="#八风险控制" id="toc-八风险控制"><span
class="toc-section-number">1.9</span> 八、风险控制</a>
<ul>
<li><a href="#风险识别与应对" id="toc-风险识别与应对"><span
class="toc-section-number">1.9.1</span> 风险识别与应对</a></li>
<li><a href="#应急预案" id="toc-应急预案"><span
class="toc-section-number">1.9.2</span> 应急预案</a></li>
</ul></li>
<li><a href="#九方案优势总结" id="toc-九方案优势总结"><span
class="toc-section-number">1.10</span> 九、方案优势总结</a>
<ul>
<li><a href="#核心优势" id="toc-核心优势"><span
class="toc-section-number">1.10.1</span> 核心优势</a></li>
<li><a href="#投入产出分析" id="toc-投入产出分析"><span
class="toc-section-number">1.10.2</span> 投入产出分析</a></li>
</ul></li>
<li><a href="#十结论与建议" id="toc-十结论与建议"><span
class="toc-section-number">1.11</span> 十、结论与建议</a>
<ul>
<li><a href="#方案结论" id="toc-方案结论"><span
class="toc-section-number">1.11.1</span> 方案结论</a></li>
<li><a href="#建议" id="toc-建议"><span
class="toc-section-number">1.11.2</span> 建议</a></li>
</ul></li>
</ul></li>
</ul>
</nav>
<h1 data-number="1" id="用户敏感数据加密存储技术方案"><span
class="header-section-number">1</span> 用户敏感数据加密存储技术方案</h1>
<h2 data-number="1.1" id="文档信息"><span
class="header-section-number">1.1</span> 文档信息</h2>
<table>
<thead>
<tr>
<th>项目信息</th>
<th>详情</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>项目名称</strong></td>
<td>福建水务营收系统</td>
</tr>
<tr>
<td><strong>文档类型</strong></td>
<td>技术方案汇报</td>
</tr>
<tr>
<td><strong>适用范围</strong></td>
<td>用户个人信息加密存储与搜索</td>
</tr>
<tr>
<td><strong>编写日期</strong></td>
<td>2025年12月</td>
</tr>
<tr>
<td><strong>文档版本</strong></td>
<td>V1.0</td>
</tr>
</tbody>
</table>
<hr />
<h2 data-number="1.2" id="一方案背景"><span
class="header-section-number">1.2</span> 一、方案背景</h2>
<h3 data-number="1.2.1" id="为什么要做加密"><span
class="header-section-number">1.2.1</span> 为什么要做加密?</h3>
<p>根据<strong>等保测评要求</strong>,用户的敏感个人信息(身份证、手机号、银行卡等)必须<strong>加密存储</strong>,否则无法通过安全检查。</p>
<pre class="text"><code> ┌─────────────────────────────────────┐
│ 等保测评要求 │
└─────────────────────────────────────┘
┌──────────────────────────────┼──────────────────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ 存储加密 │ │ 传输加密 │ │ 访问控制 │
│ ✓ 必须做 │ │ ✓ 已完成 │ │ ✓ 已完成 │
└───────────────┘ └───────────────┘ └───────────────┘</code></pre>
<h3 data-number="1.2.2" id="涉及哪些数据"><span
class="header-section-number">1.2.2</span> 涉及哪些数据?</h3>
<table>
<thead>
<tr>
<th>敏感数据类型</th>
<th>示例</th>
<th>加密要求</th>
</tr>
</thead>
<tbody>
<tr>
<td>身份证号</td>
<td>350xxx19900101xxxx</td>
<td>✅ 必须加密</td>
</tr>
<tr>
<td>手机号</td>
<td>138xxxx8888</td>
<td>✅ 必须加密</td>
</tr>
<tr>
<td>银行卡号</td>
<td>6222xxxxxxxx1234</td>
<td>✅ 必须加密</td>
</tr>
<tr>
<td>邮箱地址</td>
<td>xxx@xxx.com</td>
<td>✅ 必须加密</td>
</tr>
<tr>
<td>真实姓名</td>
<td>张xx</td>
<td>✅ 必须加密</td>
</tr>
</tbody>
</table>
<hr />
<h2 data-number="1.3" id="二技术方案概述"><span
class="header-section-number">1.3</span> 二、技术方案概述</h2>
<h3 data-number="1.3.1" id="核心思路"><span
class="header-section-number">1.3.1</span> 核心思路</h3>
<p><strong>“先加密存储,再建立索引”</strong> ——
既保证安全,又保证能搜索</p>
<pre class="text"><code>┌─────────────────────────────────────────────────────────────────────┐
│ 技术方案整体架构 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 应用层 │ ──────► │ 加密插件 │ ──────► │ 数据库 │ │
│ │ (业务代码) │ │(MyBatis-Plus)│ │ (加密存储) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 搜索索引 │ │
│ │ (支持查询) │ │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘</code></pre>
<h3 data-number="1.3.2" id="采用的技术"><span
class="header-section-number">1.3.2</span> 采用的技术</h3>
<table>
<colgroup>
<col style="width: 37%" />
<col style="width: 25%" />
<col style="width: 37%" />
</colgroup>
<thead>
<tr>
<th>技术组件</th>
<th>说明</th>
<th>选择理由</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>MyBatis-Plus 加密插件</strong></td>
<td>自动对数据进行加密和解密</td>
<td>框架自带功能,改造成本低</td>
</tr>
<tr>
<td><strong>SM4 加密算法</strong></td>
<td>国产加密算法,符合等保要求</td>
<td>安全等级高,符合等保要求</td>
</tr>
<tr>
<td><strong>搜索索引技术</strong></td>
<td>支持加密后的数据查询</td>
<td>保证业务搜索功能正常使用</td>
</tr>
</tbody>
</table>
<hr />
<h2 data-number="1.4" id="三加密存储方案"><span
class="header-section-number">1.4</span> 三、加密存储方案</h2>
<h3 data-number="1.4.1" id="加密前后对比"><span
class="header-section-number">1.4.1</span> 加密前后对比</h3>
<p><strong>加密前(明文存储,不安全):</strong> | id | real_name |
id_card | phone | |—-|———–|———|——-| | 1 | 张三 | 350102199001011234 |
13812345678 |</p>
<p><strong>加密后(密文存储,安全):</strong> | id | real_name |
id_card | phone | |—-|———–|———|——-| | 1 | aGF4ZmRz… | YmVydGlu… |
c2VjdXJl… |</p>
<h3 data-number="1.4.2" id="mybatis-plus-加密插件原理"><span
class="header-section-number">1.4.2</span> MyBatis-Plus
加密插件原理</h3>
<pre class="text"><code> 【自动加密/解密流程】
┌──────────┐ ┌──────────┐
│ 保存数据 │ │ 查询数据 │
└────┬─────┘ └────┬─────┘
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ 明文数据 │ │ 密文数据 │
│ 张三 │ │ aGF4ZmRz │
└────┬─────┘ └────┬─────┘
│ │
│ 【加密插件自动处理】 │ 【加密插件自动处理】
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ 密文数据 │ │ 明文数据 │
│ aGF4ZmRz │ │ 张三 │
└────┬─────┘ └────┬─────┘
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ 数据库 │ ◄────────────────────────── │ 数据库 │
└──────────┘ └──────────┘</code></pre>
<p><strong>优势说明:</strong> - ✅ <strong>对业务代码透明</strong> ——
开发人员无需修改业务逻辑 - ✅ <strong>自动加密解密</strong> ——
框架自动处理,不易出错 - ✅ <strong>改造成本低</strong> ——
只需添加配置和注解</p>
<hr />
<h2 data-number="1.5" id="四搜索功能方案"><span
class="header-section-number">1.5</span> 四、搜索功能方案</h2>
<h3 data-number="1.5.1" id="为什么加密后还能搜索"><span
class="header-section-number">1.5.1</span> 为什么加密后还能搜索?</h3>
<p>加密后的数据是乱码无法直接用SQL的 <code>LIKE</code>
查询。我们的解决方案是:<strong>建立搜索索引</strong></p>
<pre class="text"><code>┌───────────────────────────────────────────────────────────────────┐
│ 搜索索引设计思路 │
├───────────────────────────────────────────────────────────────────┤
│ │
│ 原始数据 索引数据 用途 │
│ ────── ────── ──── │
│ 身份证350102199001011234 ➜ 哈希值a1b2c3... 精确查询 │
│ 手机号13812345678 ➜ 前7位1381234 前缀查询 │
│ 姓名:张三 ➜ 拼音zhangsan 模糊查询 │
│ │
└───────────────────────────────────────────────────────────────────┘</code></pre>
<h3 data-number="1.5.2" id="支持的查询类型"><span
class="header-section-number">1.5.2</span> 支持的查询类型</h3>
<table>
<thead>
<tr>
<th>查询类型</th>
<th>适用场景</th>
<th>实现方式</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>精确查询</strong></td>
<td>身份证查用户</td>
<td>哈希索引(完全匹配)</td>
</tr>
<tr>
<td><strong>前缀查询</strong></td>
<td>手机号前几位</td>
<td>前缀索引(部分匹配)</td>
</tr>
<tr>
<td><strong>模糊查询</strong></td>
<td>姓名搜索</td>
<td>拼音索引(支持模糊)</td>
</tr>
</tbody>
</table>
<h3 data-number="1.5.3" id="查询流程示例"><span
class="header-section-number">1.5.3</span> 查询流程示例</h3>
<p><strong>场景:根据身份证号查询用户</strong></p>
<pre class="text"><code>用户输入身份证号
┌──────────────┐
│ 计算哈希索引 │ ──────► a1b2c3d4e5...
└──────────────┘
┌──────────────┐
│ 查询索引字段 │ ──────► SELECT * FROM user WHERE id_card_hash = &#39;a1b2c3d4e5...&#39;
└──────────────┘
┌──────────────┐
│ 返回匹配记录 │ ──────► 找到用户张三
└──────────────┘</code></pre>
<hr />
<h2 data-number="1.6" id="五数据库表设计"><span
class="header-section-number">1.6</span> 五、数据库表设计</h2>
<h3 data-number="1.6.1" id="表结构说明"><span
class="header-section-number">1.6.1</span> 表结构说明</h3>
<pre class="text"><code>┌─────────────────────────────────────────────────────────────────────┐
│ 用户信息表 (user_info) │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 【加密存储的字段】 【搜索索引字段】 │
│ ──────────────── ──────────────── │
│ • real_name真实姓名 • id_card_hash身份证哈希
│ • id_card身份证号 • phone_prefix手机号前缀
│ • phone手机号 • name_pinyin姓名拼音
│ • email邮箱 • bank_card_prefix银行卡前缀
│ • bank_card银行卡号
│ │
└─────────────────────────────────────────────────────────────────────┘</code></pre>
<h3 data-number="1.6.2" id="字段对照表"><span
class="header-section-number">1.6.2</span> 字段对照表</h3>
<table>
<thead>
<tr>
<th>敏感字段</th>
<th>存储方式</th>
<th>对应索引字段</th>
<th>索引用途</th>
</tr>
</thead>
<tbody>
<tr>
<td>id_card</td>
<td>SM4加密</td>
<td>id_card_hash</td>
<td>精确匹配</td>
</tr>
<tr>
<td>phone</td>
<td>SM4加密</td>
<td>phone_prefix</td>
<td>前缀查询</td>
</tr>
<tr>
<td>real_name</td>
<td>SM4加密</td>
<td>name_pinyin</td>
<td>模糊搜索</td>
</tr>
<tr>
<td>bank_card</td>
<td>SM4加密</td>
<td>bank_card_prefix</td>
<td>前缀查询</td>
</tr>
<tr>
<td>email</td>
<td>SM4加密</td>
<td></td>
<td>不支持搜索</td>
</tr>
</tbody>
</table>
<hr />
<h2 data-number="1.7" id="六等保符合性说明"><span
class="header-section-number">1.7</span> 六、等保符合性说明</h2>
<h3 data-number="1.7.1" id="安全控制措施对照"><span
class="header-section-number">1.7.1</span> 安全控制措施对照</h3>
<table>
<thead>
<tr>
<th>等保要求</th>
<th>我们的方案</th>
<th>符合性</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>个人信息加密存储</strong></td>
<td>SM4算法加密</td>
<td>✅ 完全符合</td>
</tr>
<tr>
<td><strong>数据传输安全</strong></td>
<td>HTTPS + 加密字段</td>
<td>✅ 完全符合</td>
</tr>
<tr>
<td><strong>访问权限控制</strong></td>
<td>数据库权限 + 应用权限</td>
<td>✅ 完全符合</td>
</tr>
<tr>
<td><strong>安全审计</strong></td>
<td>操作日志 + 加解密审计</td>
<td>✅ 完全符合</td>
</tr>
<tr>
<td><strong>密钥安全管理</strong></td>
<td>配置加密 + 独立存储</td>
<td>✅ 完全符合</td>
</tr>
</tbody>
</table>
<h3 data-number="1.7.2" id="安全架构"><span
class="header-section-number">1.7.2</span> 安全架构</h3>
<pre class="text"><code> ┌─────────────────────────────────────┐
│ 密钥管理中心 │
│ (独立安全存储) │
└─────────────────────────────────────┘
│ 获取密钥
┌─────────────┐ HTTPS ┌─────────────────┐ 加密写入 ┌─────────────┐
│ 前端应用 │ ────────► │ 应用服务器 │ ────────────► │ 数据库 │
│ │ ◄──────── │ (加密/解密) │ ◄──────────── │ (密文存储) │
└─────────────┘ 脱敏显示 └─────────────────┘ 解密读取 └─────────────┘
┌─────────────────────────────────────┐
│ 审计日志系统 │
│ (记录所有操作) │
└─────────────────────────────────────┘</code></pre>
<hr />
<h2 data-number="1.8" id="七实施计划"><span
class="header-section-number">1.8</span> 七、实施计划</h2>
<h3 data-number="1.8.1" id="实施时间表"><span
class="header-section-number">1.8.1</span> 实施时间表</h3>
<table>
<thead>
<tr>
<th>阶段</th>
<th>工作内容</th>
<th>时间</th>
<th>负责人</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>第一阶段</strong></td>
<td>基础加密功能开发</td>
<td>1-2天</td>
<td>开发团队</td>
</tr>
<tr>
<td><strong>第二阶段</strong></td>
<td>搜索索引功能开发</td>
<td>2-3天</td>
<td>开发团队</td>
</tr>
<tr>
<td><strong>第三阶段</strong></td>
<td>历史数据迁移加密</td>
<td>1天</td>
<td>运维 + 开发</td>
</tr>
<tr>
<td><strong>第四阶段</strong></td>
<td>测试与验收</td>
<td>1天</td>
<td>测试团队</td>
</tr>
<tr>
<td><strong>合计</strong></td>
<td></td>
<td><strong>5-7个工作日</strong></td>
<td></td>
</tr>
</tbody>
</table>
<h3 data-number="1.8.2" id="实施步骤"><span
class="header-section-number">1.8.2</span> 实施步骤</h3>
<pre class="text"><code> 第1-2天 第3-5天 第6天 第7天
│ │ │ │
▼ ▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ 加密功能 │ ────► │ 搜索功能 │ ────► │ 数据迁移 │ ────► │ 测试验收 │
│ 开发 │ │ 开发 │ │ 执行 │ │ 上线 │
└─────────┘ └─────────┘ └─────────┘ └─────────┘
│ │ │ │
▼ ▼ ▼ ▼
配置加密器 精确搜索 备份数据 功能测试
添加注解 前缀搜索 执行迁移 性能测试
测试验证 模糊搜索 验证完整 安全测试</code></pre>
<hr />
<h2 data-number="1.9" id="八风险控制"><span
class="header-section-number">1.9</span> 八、风险控制</h2>
<h3 data-number="1.9.1" id="风险识别与应对"><span
class="header-section-number">1.9.1</span> 风险识别与应对</h3>
<table>
<thead>
<tr>
<th>风险类型</th>
<th>风险描述</th>
<th>应对措施</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>密钥泄露风险</strong></td>
<td>加密密钥被窃取</td>
<td>密钥独立存储,定期轮换</td>
</tr>
<tr>
<td><strong>数据迁移风险</strong></td>
<td>迁移过程数据丢失</td>
<td>先备份后迁移,分批执行</td>
</tr>
<tr>
<td><strong>性能影响风险</strong></td>
<td>加解密影响系统性能</td>
<td>添加索引,使用缓存优化</td>
</tr>
<tr>
<td><strong>功能影响风险</strong></td>
<td>现有功能受影响</td>
<td>充分测试,灰度发布</td>
</tr>
</tbody>
</table>
<h3 data-number="1.9.2" id="应急预案"><span
class="header-section-number">1.9.2</span> 应急预案</h3>
<pre class="text"><code>┌───────────────────────────────────────────────────────────────────┐
│ 应急处理流程 │
├───────────────────────────────────────────────────────────────────┤
│ │
│ 发现问题 ────► 评估影响 ────► 启动回滚 ────► 恢复服务 │
│ │
│ · 监控告警 · 影响范围 · 数据回滚 · 验证功能 │
│ · 用户反馈 · 业务影响 · 代码回滚 · 恢复上线 │
│ │
└───────────────────────────────────────────────────────────────────┘</code></pre>
<hr />
<h2 data-number="1.10" id="九方案优势总结"><span
class="header-section-number">1.10</span> 九、方案优势总结</h2>
<h3 data-number="1.10.1" id="核心优势"><span
class="header-section-number">1.10.1</span> 核心优势</h3>
<table>
<thead>
<tr>
<th>优势</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>安全性高</strong></td>
<td>采用SM4国产加密算法符合等保要求</td>
</tr>
<tr>
<td><strong>搜索能力强</strong></td>
<td>加密后仍支持精确、前缀、模糊多种搜索</td>
</tr>
<tr>
<td><strong>改造成本低</strong></td>
<td>使用MyBatis-Plus插件对业务代码侵入小</td>
</tr>
<tr>
<td><strong>实施周期短</strong></td>
<td>5-7个工作日可完成全部改造</td>
</tr>
<tr>
<td><strong>运维友好</strong></td>
<td>自动加解密,无需人工干预</td>
</tr>
</tbody>
</table>
<h3 data-number="1.10.2" id="投入产出分析"><span
class="header-section-number">1.10.2</span> 投入产出分析</h3>
<pre class="text"><code>┌───────────────────────────────────────────────────────────────────┐
│ 投入产出分析 │
├───────────────────────────────────────────────────────────────────┤
│ │
│ 【投入】 【产出】 │
│ ──── ──── │
│ · 开发工时5-7个工作日 · 通过等保测评检查 │
│ · 测试工时1-2个工作日 · 符合数据安全法规要求 │
│ · 运维工时1个工作日 · 降低数据泄露风险 │
│ · 提升用户数据安全保障 │
│ │
│ 【总计约7-10个工作日】 【价值:等保合规 + 安全保障】│
│ │
└───────────────────────────────────────────────────────────────────┘</code></pre>
<hr />
<h2 data-number="1.11" id="十结论与建议"><span
class="header-section-number">1.11</span> 十、结论与建议</h2>
<h3 data-number="1.11.1" id="方案结论"><span
class="header-section-number">1.11.1</span> 方案结论</h3>
<p>本方案采用<strong>MyBatis-Plus加密插件 +
搜索索引</strong>的技术路线,能够:</p>
<ol type="1">
<li><strong>满足等保要求</strong> —— 敏感数据全部加密存储</li>
<li><strong>保持业务功能</strong> —— 加密后仍可正常搜索查询</li>
<li><strong>低成本实施</strong> —— 对现有系统改动小,周期短</li>
<li><strong>安全可控</strong> —— 密钥独立管理,审计可追溯</li>
</ol>
<h3 data-number="1.11.2" id="建议"><span
class="header-section-number">1.11.2</span> 建议</h3>
<table>
<thead>
<tr>
<th>建议事项</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>1. 尽快启动</strong></td>
<td>等保测评时间紧迫,建议尽快安排实施</td>
</tr>
<tr>
<td><strong>2. 分阶段实施</strong></td>
<td>先完成核心功能,再优化性能</td>
</tr>
<tr>
<td><strong>3. 充分测试</strong></td>
<td>上线前做好功能和性能测试</td>
</tr>
<tr>
<td><strong>4. 保留回滚方案</strong></td>
<td>确保出现问题可快速回滚</td>
</tr>
</tbody>
</table>
<hr />
<p><strong>如有疑问,请随时沟通!</strong></p>
</body>
</html>

Binary file not shown.

View File

@ -0,0 +1,377 @@
---
title: "06_Sensitive_Data_Encryption"
author: "系统设计团队"
date: "2024年12月19日"
documentclass: article
geometry: margin=1in
fontsize: 11pt
mainfont: "PingFang SC"
CJKmainfont: "PingFang SC"
---
# 用户敏感数据加密存储技术方案
## 文档信息
| 项目信息 | 详情 |
|---------|------|
| **项目名称** | 福建水务营收系统 |
| **文档类型** | 技术方案汇报 |
| **适用范围** | 用户个人信息加密存储与搜索 |
| **编写日期** | 2025年12月 |
| **文档版本** | V1.0 |
---
## 一、方案背景
### 为什么要做加密?
根据**等保测评要求**,用户的敏感个人信息(身份证、手机号、银行卡等)必须**加密存储**,否则无法通过安全检查。
```text
┌─────────────────────────────────────┐
│ 等保测评要求 │
└─────────────────────────────────────┘
┌──────────────────────────────┼──────────────────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ 存储加密 │ │ 传输加密 │ │ 访问控制 │
│ ✓ 必须做 │ │ ✓ 已完成 │ │ ✓ 已完成 │
└───────────────┘ └───────────────┘ └───────────────┘
```
### 涉及哪些数据?
| 敏感数据类型 | 示例 | 加密要求 |
|-------------|------|----------|
| 身份证号 | 350xxx19900101xxxx | ✅ 必须加密 |
| 手机号 | 138xxxx8888 | ✅ 必须加密 |
| 银行卡号 | 6222xxxxxxxx1234 | ✅ 必须加密 |
| 邮箱地址 | xxx@xxx.com | ✅ 必须加密 |
| 真实姓名 | 张xx | ✅ 必须加密 |
---
## 二、技术方案概述
### 核心思路
**"先加密存储,再建立索引"** —— 既保证安全,又保证能搜索
```text
┌─────────────────────────────────────────────────────────────────────┐
│ 技术方案整体架构 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 应用层 │ ──────► │ 加密插件 │ ──────► │ 数据库 │ │
│ │ (业务代码) │ │(MyBatis-Plus)│ │ (加密存储) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 搜索索引 │ │
│ │ (支持查询) │ │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
```
### 采用的技术
| 技术组件 | 说明 | 选择理由 |
|---------|------|---------|
| **MyBatis-Plus 加密插件** | 自动对数据进行加密和解密 | 框架自带功能,改造成本低 |
| **SM4 加密算法** | 国产加密算法,符合等保要求 | 安全等级高,符合等保要求 |
| **搜索索引技术** | 支持加密后的数据查询 | 保证业务搜索功能正常使用 |
---
## 三、加密存储方案
### 加密前后对比
**加密前(明文存储,不安全):**
| id | real_name | id_card | phone |
|----|-----------|---------|-------|
| 1 | 张三 | 350102199001011234 | 13812345678 |
**加密后(密文存储,安全):**
| id | real_name | id_card | phone |
|----|-----------|---------|-------|
| 1 | aGF4ZmRz... | YmVydGlu... | c2VjdXJl... |
### MyBatis-Plus 加密插件原理
```text
【自动加密/解密流程】
┌──────────┐ ┌──────────┐
│ 保存数据 │ │ 查询数据 │
└────┬─────┘ └────┬─────┘
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ 明文数据 │ │ 密文数据 │
│ 张三 │ │ aGF4ZmRz │
└────┬─────┘ └────┬─────┘
│ │
│ 【加密插件自动处理】 │ 【加密插件自动处理】
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ 密文数据 │ │ 明文数据 │
│ aGF4ZmRz │ │ 张三 │
└────┬─────┘ └────┬─────┘
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ 数据库 │ ◄────────────────────────── │ 数据库 │
└──────────┘ └──────────┘
```
**优势说明:**
- ✅ **对业务代码透明** —— 开发人员无需修改业务逻辑
- ✅ **自动加密解密** —— 框架自动处理,不易出错
- ✅ **改造成本低** —— 只需添加配置和注解
---
## 四、搜索功能方案
### 为什么加密后还能搜索?
加密后的数据是乱码无法直接用SQL的 `LIKE` 查询。我们的解决方案是:**建立搜索索引**。
```text
┌───────────────────────────────────────────────────────────────────┐
│ 搜索索引设计思路 │
├───────────────────────────────────────────────────────────────────┤
│ │
│ 原始数据 索引数据 用途 │
│ ────── ────── ──── │
│ 身份证350102199001011234 ➜ 哈希值a1b2c3... 精确查询 │
│ 手机号13812345678 ➜ 前7位1381234 前缀查询 │
│ 姓名:张三 ➜ 拼音zhangsan 模糊查询 │
│ │
└───────────────────────────────────────────────────────────────────┘
```
### 支持的查询类型
| 查询类型 | 适用场景 | 实现方式 |
|---------|---------|---------|
| **精确查询** | 身份证查用户 | 哈希索引(完全匹配) |
| **前缀查询** | 手机号前几位 | 前缀索引(部分匹配) |
| **模糊查询** | 姓名搜索 | 拼音索引(支持模糊) |
### 查询流程示例
**场景:根据身份证号查询用户**
```text
用户输入身份证号
┌──────────────┐
│ 计算哈希索引 │ ──────► a1b2c3d4e5...
└──────────────┘
┌──────────────┐
│ 查询索引字段 │ ──────► SELECT * FROM user WHERE id_card_hash = 'a1b2c3d4e5...'
└──────────────┘
┌──────────────┐
│ 返回匹配记录 │ ──────► 找到用户张三
└──────────────┘
```
---
## 五、数据库表设计
### 表结构说明
```text
┌─────────────────────────────────────────────────────────────────────┐
│ 用户信息表 (user_info) │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 【加密存储的字段】 【搜索索引字段】 │
│ ──────────────── ──────────────── │
│ • real_name真实姓名 • id_card_hash身份证哈希
│ • id_card身份证号 • phone_prefix手机号前缀
│ • phone手机号 • name_pinyin姓名拼音
│ • email邮箱 • bank_card_prefix银行卡前缀
│ • bank_card银行卡号
│ │
└─────────────────────────────────────────────────────────────────────┘
```
### 字段对照表
| 敏感字段 | 存储方式 | 对应索引字段 | 索引用途 |
|---------|---------|-------------|---------|
| id_card | SM4加密 | id_card_hash | 精确匹配 |
| phone | SM4加密 | phone_prefix | 前缀查询 |
| real_name | SM4加密 | name_pinyin | 模糊搜索 |
| bank_card | SM4加密 | bank_card_prefix | 前缀查询 |
| email | SM4加密 | — | 不支持搜索 |
---
## 六、等保符合性说明
### 安全控制措施对照
| 等保要求 | 我们的方案 | 符合性 |
|---------|-----------|--------|
| **个人信息加密存储** | SM4算法加密 | ✅ 完全符合 |
| **数据传输安全** | HTTPS + 加密字段 | ✅ 完全符合 |
| **访问权限控制** | 数据库权限 + 应用权限 | ✅ 完全符合 |
| **安全审计** | 操作日志 + 加解密审计 | ✅ 完全符合 |
| **密钥安全管理** | 配置加密 + 独立存储 | ✅ 完全符合 |
### 安全架构
```text
┌─────────────────────────────────────┐
│ 密钥管理中心 │
│ (独立安全存储) │
└─────────────────────────────────────┘
│ 获取密钥
┌─────────────┐ HTTPS ┌─────────────────┐ 加密写入 ┌─────────────┐
│ 前端应用 │ ────────► │ 应用服务器 │ ────────────► │ 数据库 │
│ │ ◄──────── │ (加密/解密) │ ◄──────────── │ (密文存储) │
└─────────────┘ 脱敏显示 └─────────────────┘ 解密读取 └─────────────┘
┌─────────────────────────────────────┐
│ 审计日志系统 │
│ (记录所有操作) │
└─────────────────────────────────────┘
```
---
## 七、实施计划
### 实施时间表
| 阶段 | 工作内容 | 时间 | 负责人 |
|------|---------|------|--------|
| **第一阶段** | 基础加密功能开发 | 1-2天 | 开发团队 |
| **第二阶段** | 搜索索引功能开发 | 2-3天 | 开发团队 |
| **第三阶段** | 历史数据迁移加密 | 1天 | 运维 + 开发 |
| **第四阶段** | 测试与验收 | 1天 | 测试团队 |
| **合计** | — | **5-7个工作日** | — |
### 实施步骤
```text
第1-2天 第3-5天 第6天 第7天
│ │ │ │
▼ ▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ 加密功能 │ ────► │ 搜索功能 │ ────► │ 数据迁移 │ ────► │ 测试验收 │
│ 开发 │ │ 开发 │ │ 执行 │ │ 上线 │
└─────────┘ └─────────┘ └─────────┘ └─────────┘
│ │ │ │
▼ ▼ ▼ ▼
配置加密器 精确搜索 备份数据 功能测试
添加注解 前缀搜索 执行迁移 性能测试
测试验证 模糊搜索 验证完整 安全测试
```
---
## 八、风险控制
### 风险识别与应对
| 风险类型 | 风险描述 | 应对措施 |
|---------|---------|---------|
| **密钥泄露风险** | 加密密钥被窃取 | 密钥独立存储,定期轮换 |
| **数据迁移风险** | 迁移过程数据丢失 | 先备份后迁移,分批执行 |
| **性能影响风险** | 加解密影响系统性能 | 添加索引,使用缓存优化 |
| **功能影响风险** | 现有功能受影响 | 充分测试,灰度发布 |
### 应急预案
```text
┌───────────────────────────────────────────────────────────────────┐
│ 应急处理流程 │
├───────────────────────────────────────────────────────────────────┤
│ │
│ 发现问题 ────► 评估影响 ────► 启动回滚 ────► 恢复服务 │
│ │
│ · 监控告警 · 影响范围 · 数据回滚 · 验证功能 │
│ · 用户反馈 · 业务影响 · 代码回滚 · 恢复上线 │
│ │
└───────────────────────────────────────────────────────────────────┘
```
---
## 九、方案优势总结
### 核心优势
| 优势 | 说明 |
|------|------|
| ✅ **安全性高** | 采用SM4国产加密算法符合等保要求 |
| ✅ **搜索能力强** | 加密后仍支持精确、前缀、模糊多种搜索 |
| ✅ **改造成本低** | 使用MyBatis-Plus插件对业务代码侵入小 |
| ✅ **实施周期短** | 5-7个工作日可完成全部改造 |
| ✅ **运维友好** | 自动加解密,无需人工干预 |
### 投入产出分析
```text
┌───────────────────────────────────────────────────────────────────┐
│ 投入产出分析 │
├───────────────────────────────────────────────────────────────────┤
│ │
│ 【投入】 【产出】 │
│ ──── ──── │
│ · 开发工时5-7个工作日 · 通过等保测评检查 │
│ · 测试工时1-2个工作日 · 符合数据安全法规要求 │
│ · 运维工时1个工作日 · 降低数据泄露风险 │
│ · 提升用户数据安全保障 │
│ │
│ 【总计约7-10个工作日】 【价值:等保合规 + 安全保障】│
│ │
└───────────────────────────────────────────────────────────────────┘
```
---
## 十、结论与建议
### 方案结论
本方案采用**MyBatis-Plus加密插件 + 搜索索引**的技术路线,能够:
1. ✅ **满足等保要求** —— 敏感数据全部加密存储
2. ✅ **保持业务功能** —— 加密后仍可正常搜索查询
3. ✅ **低成本实施** —— 对现有系统改动小,周期短
4. ✅ **安全可控** —— 密钥独立管理,审计可追溯
### 建议
| 建议事项 | 说明 |
|---------|------|
| **1. 尽快启动** | 等保测评时间紧迫,建议尽快安排实施 |
| **2. 分阶段实施** | 先完成核心功能,再优化性能 |
| **3. 充分测试** | 上线前做好功能和性能测试 |
| **4. 保留回滚方案** | 确保出现问题可快速回滚 |
---
**如有疑问,请随时沟通!**

Binary file not shown.

View File

@ -0,0 +1,706 @@
---
title: "08_Integrated_Deployment_Design_PlanB"
author: "系统设计团队"
date: "2024年12月19日"
documentclass: article
geometry: margin=1in
fontsize: 11pt
mainfont: "PingFang SC"
CJKmainfont: "PingFang SC"
---
---
doc_id: TC-08-INTEGRATED-DEPLOYMENT
doc_role: supplemental_document
authority: secondary
scope: 方案二整体部署
source_of_truth: false
last_reviewed: 2026-03-26
retrieval_priority: P1
---
# 福建水务营收系统整体部署方案说明书
## 文档信息
| 项目信息 | 详情 |
|---------|------|
| **项目名称** | 福建水务营收系统 |
| **文档类型** | 技术专题说明 |
| **方案定位** | 已采纳 PostgreSQL 16 方案二作为数据库部署方案后的整体部署方案 |
| **文档版本** | v1.0 |
| **编写日期** | 2026-03-26 |
| **文档状态** | ✅ 正式建议稿 |
## 目录
1. 编制目的
2. 方案前提
3. 整体部署原则
4. 软件拓扑图
5. 主机部署图
6. 数据库访问链路图
7. 备份恢复链路图
8. 网络拓扑图
9. 主机角色与部署内容
10. 资源配置建议
11. 资源审批汇总表
12. 基础软件与版本清单
13. 部署方式说明
14. 网络需求
15. 网络开通清单
16. 访问控制与端口建议
17. 实施步骤
18. 验收标准
19. 部署结论
## 编制目的
本文档用于在已采纳 PostgreSQL 16 方案二作为数据库部署方案的前提下,形成覆盖前端、后端、中间件、静态存储及数据库的一体化整体部署方案,作为甲方进行主机、网络、存储与基础软件资源审批的依据。
## 方案前提
本方案以以下前提为基础:
1. 数据库部署方案已采纳 `docs/design/03_Technical_Design/07_PostgreSQL16_DR_Resource_Application.md` 中的方案二,即“同城双可用区主备容灾方案”。
2. 前端继续采用 `Nginx + Vue3` 的静态部署模式。
3. 对外访问经甲方或第三方管理的公网入口进行薄转发,不纳入本方案主机资源范围。
4. `Nginx` 入口单独部署在互联网区 `DMZ`,负责承接办公网、公网入口和外部授权链路转发,并将开放 API 端点负载到两台业务应用节点。
5. 两台业务应用节点部署在互联网区 `DMZ`,节点内均部署 `Spring Boot Gateway`,作为微服务集群统一接入入口,并同时承载业务服务。
6. 中间件集中部署在 1 台主机上。
7. 数据库控制组件与中间件部署在同一台主机上。
8. `RustFS` 作为静态存储与对象存储统一入口,与中间件同机部署。
9. 一期口径下,原“数据与中间件节点”和“文件存储节点”合并为 1 台综合节点。
10. 银行文件交换采用独立 `SFTP/FTP` 文件交换服务器,并部署在互联网区 `DMZ`,作为银行送盘、回盘、对账文件交换专用前置机。
11. 当前已知可用于本方案的业务与基础设施主机资源如下:
- DMZ Nginx 入口节点8 核 CPU / 16 GB 内存 / 300 GB 存储,共 1 台
- 业务应用节点32 核 CPU / 64 GB 内存 / 300 GB 存储,共 2 台
- 数据、中间件与文件存储综合节点16 核 CPU / 32 GB 内存 / 2300 GB 存储,共 1 台
- 银行文件交换服务器2 核 CPU / 8 GB 内存 / 200 GB 存储,共 1 台
- 另行配置 PostgreSQL 主库与热备库各 1 台
## 整体部署原则
整体部署遵循以下原则:
1. 前后端逻辑分层部署,避免数据库节点与业务节点混部。
2. 中间件集中部署,降低主机数量和运维复杂度。
3. 数据库主备分离部署,避免与中间件、应用节点混部。
4. 数据库控制组件集中部署,通过统一代理地址屏蔽主备切换细节。
5. 网络按办公区、公网区域、互联网区 `DMZ`、内网区分层隔离;其中数据库、中间件控制与备份归档均落在内网区。
6. 在现有主机数量约束下优先复用现有业务应用节点、DMZ Nginx 入口节点及综合节点资源。
## 软件拓扑图
**图 4-1 访问与应用软件拓扑图**
```mermaid
flowchart LR
classDef source fill:#ecfeff,stroke:#0891b2,stroke-width:1.2px,color:#083344;
classDef access fill:#fff7ed,stroke:#ea580c,stroke-width:1.4px,color:#7c2d12;
classDef app fill:#eff6ff,stroke:#2563eb,stroke-width:1.4px,color:#1e3a8a;
classDef zone fill:#f8fafc,stroke:#94a3b8,stroke-width:1.2px,color:#0f172a;
subgraph OFFICE[办公区]
direction TB
U1[PC 端用户<br/>办公网段]:::source
end
subgraph PUBLIC[公网区域]
direction TB
U2[移动端用户]:::source
U3[第三方系统]:::source
G1[公网授权入口]:::access
end
subgraph DMZ[互联网区 / DMZ]
direction TB
G2[Nginx 入口]:::access
A1[业务应用节点 1<br/>Spring Boot Gateway + 业务服务]:::app
A2[业务应用节点 2<br/>Spring Boot Gateway + 业务服务]:::app
end
class OFFICE,PUBLIC,DMZ zone;
U1 -->|办公网访问,内网 IP| G2
U2 -->|HTTPS 443| G1
U3 -->|HTTPS / API| G1
G1 -->|授权转发| G2
G2 -->|API 转发| A1
G2 -->|API 转发| A2
```
图说明:
1. 图中已明确区分办公区、公网区域和互联网区 `DMZ`
2. PC 端用户位于办公区,经办公网使用内网 IP 直接访问 `DMZ` 内的 `Nginx` 入口。
3. 移动端用户和第三方系统位于公网区域,先经公网授权入口,再跨边界进入 `DMZ` 内的 `Nginx` 入口。
4. `Nginx` 入口位于互联网区 `DMZ`,负责将开放 API 端点负载到两台业务应用节点。
5. 两台业务应用节点位于互联网区 `DMZ`,节点内均部署 `Spring Boot Gateway`,作为微服务集群统一接入入口。
6. 公网入口后侧涉及的边界路由与 `NAT` 转换属于甲方网络侧能力,本图不展开网络设备细节。
**图 4-2 综合服务软件拓扑图**
```mermaid
flowchart TB
classDef zone fill:#f8fafc,stroke:#94a3b8,stroke-width:1.2px,color:#0f172a;
classDef app fill:#eff6ff,stroke:#2563eb,stroke-width:1.4px,color:#1e3a8a;
classDef service fill:#f5f3ff,stroke:#7c3aed,stroke-width:1.4px,color:#4c1d95;
subgraph DMZ[互联网区 / DMZ]
direction LR
A1[业务应用节点 1<br/>Gateway + Biz]:::app
A2[业务应用节点 2<br/>Gateway + Biz]:::app
end
subgraph INTRA[内网区]
direction TB
subgraph M[综合节点]
direction TB
M2[Redis / Nacos / RustFS]:::service
M3[HAProxy / PgBouncer / Patroni]:::service
end
end
class DMZ,INTRA zone;
A1 -->|缓存 配置 文件访问| M2
A2 -->|缓存 配置 文件访问| M2
A1 -->|数据库代理访问| M3
A2 -->|数据库代理访问| M3
```
图说明:
1. 综合节点位于内网区,承接缓存、配置、对象存储及数据库控制组件。
2. 两台 `DMZ` 业务应用节点统一访问内网区综合节点,不直接连接数据库。
**图 4-3 数据与备份软件拓扑图**
```mermaid
flowchart LR
classDef zone fill:#f8fafc,stroke:#94a3b8,stroke-width:1.2px,color:#0f172a;
classDef service fill:#f5f3ff,stroke:#7c3aed,stroke-width:1.4px,color:#4c1d95;
classDef data fill:#ecfdf5,stroke:#059669,stroke-width:1.4px,color:#064e3b;
classDef backup fill:#fffbeb,stroke:#d97706,stroke-width:1.4px,color:#78350f;
classDef bank fill:#fef2f2,stroke:#dc2626,stroke-width:1.4px,color:#7f1d1d;
subgraph DMZ[互联网区 / DMZ]
F1[SFTP / FTP 文件交换服务器]:::bank
end
subgraph INTRA[内网区]
direction LR
subgraph M[综合节点]
direction TB
M1[数据库管理控件 / 中间件]:::service
M2[对象存储 / RustFS]:::service
end
D1[(PostgreSQL 主库)]:::data
D2[(PostgreSQL 热备)]:::data
B1[备份归档存储]:::backup
end
class DMZ,INTRA zone;
M1 -->|5432 数据库访问| D1
M1 -.->|5432 状态探测| D2
D1 -->|主备同步| D2
D1 -->|备份 / WAL 归档| B1
D2 -->|备份副本| B1
M2 -->|文件归档| B1
F1 -->|银行文件归档| B1
```
图说明:
1. 数据库控制组件经由主库提供数据库访问能力。
2. 主库与热备之间通过同步复制保持一致性。
3. 银行文件交换服务器位于互联网区 `DMZ`,承接送盘、回盘、对账文件交换能力。
4. RustFS 与银行文件交换服务器分别将各自数据归档到备份归档存储。
## 主机部署图
**图 4-4 主机部署总览图**
```mermaid
flowchart LR
classDef gateway fill:#fff7ed,stroke:#ea580c,stroke-width:1.2px,color:#7c2d12;
classDef app fill:#eff6ff,stroke:#2563eb,stroke-width:1.2px,color:#1e3a8a;
classDef middle fill:#f5f3ff,stroke:#7c3aed,stroke-width:1.2px,color:#4c1d95;
classDef data fill:#ecfdf5,stroke:#059669,stroke-width:1.2px,color:#064e3b;
classDef backup fill:#fffbeb,stroke:#d97706,stroke-width:1.2px,color:#78350f;
GW[DMZ Nginx 入口节点]:::gateway
APP1[业务应用节点 1<br/>内含 Gateway]:::app
APP2[业务应用节点 2<br/>内含 Gateway]:::app
FTP[SFTP / FTP 文件交换服务器]:::middle
MID[综合节点]:::middle
DB1[(数据库主库服务器)]:::data
DB2[(数据库热备服务器)]:::data
BK[备份归档存储]:::backup
GW --> APP1
GW --> APP2
APP1 --> MID
APP2 --> MID
APP1 --> FTP
APP2 --> FTP
MID --> DB1
MID --> DB2
DB1 --> DB2
DB1 --> BK
DB2 --> BK
MID --> BK
```
图说明:
1. 本图仅表达主机与主机之间的部署关系,不重复展开办公区、公网区域和跨边界访问链路。
2. `Nginx` 入口节点、业务应用节点和 `SFTP/FTP` 文件交换服务器部署在互联网区 `DMZ`
3. 综合节点、数据库主库服务器、数据库热备服务器和备份归档存储部署在内网区。
4. 业务应用节点经 `DMZ Nginx` 接入,并访问综合节点与 `SFTP/FTP` 文件交换服务器。
5. 综合节点统一访问 PostgreSQL 主库与热备;主库、热备和综合节点均向备份归档存储输出数据。
主机部署细化说明:
1. 互联网区 `DMZ``Nginx` 入口节点部署 `Nginx`,负责开放 API 转发和内部负载均衡。
2. 两台互联网区 `DMZ` 业务应用节点分别部署 `Spring Boot Gateway` 与业务服务实例。
3. 内网区综合节点部署 `Redis``Nacos``RustFS``HAProxy``PgBouncer``Patroni`,并负责访问数据库主库与热备服务器。
4. 互联网区 `DMZ``SFTP/FTP` 文件交换服务器部署银行文件交换服务及送盘、回盘、对账目录,由业务应用节点直接访问。
5. 内网区数据库主库服务器部署 PostgreSQL 主库实例,数据库热备服务器部署 PostgreSQL 热备实例。
## 数据库访问链路图
**图 4-5 数据库访问链路图**
```mermaid
flowchart LR
A1[业务应用节点 1]
A2[业务应用节点 2]
P[PgBouncer]
H[HAProxy]
M[(主库)]
S[(热备)]
T[Patroni]
A1 -->|统一代理地址| P
A2 -->|统一代理地址| P
P -->|连接池复用| H
H -->|写流量| M
H -.热备探测 / 状态访问.-> S
M -->|同步复制| S
T -.主备状态管理.-> H
```
图说明:
1. 业务应用不直接连接数据库主机。
2. PgBouncer 负责连接池。
3. HAProxy 负责数据库入口代理。
4. Patroni 负责主备状态管理与切换控制。
5. 综合节点侧的数据库控制组件会同时访问主库和热备,用于探测、控制和切换。
## 备份恢复链路图
**图 4-6 备份恢复链路图**
```mermaid
flowchart LR
DB1[(PostgreSQL 主库)] --> BK[备份归档存储]
DB2[(PostgreSQL 热备)] --> BK
MID[综合节点 / RustFS] --> BK
BK --> REC[恢复与演练入口]
```
图说明:
1. 主库和热备均向备份归档存储输出备份数据。
2. 综合节点中的 RustFS 文件数据也纳入备份范围。
3. 备份归档存储作为数据库恢复与文件恢复的统一入口。
## 网络拓扑图
> 说明:如需生成正式网络分区图,统一以 `scripts/generate_planb_diagrams.py` 生成的产物为准;其他脚本仅用于布局试验,不作为正式交付依据。
**图 4-7 网络分区图**
```mermaid
flowchart LR
classDef user fill:#ecfeff,stroke:#0891b2,stroke-width:1.2px,color:#083344;
classDef edge fill:#fff7ed,stroke:#ea580c,stroke-width:1.2px,color:#7c2d12;
classDef zone fill:#f8fafc,stroke:#94a3b8,stroke-width:1.2px,color:#0f172a;
classDef svc fill:#f5f3ff,stroke:#7c3aed,stroke-width:1.2px,color:#4c1d95;
classDef data fill:#ecfdf5,stroke:#059669,stroke-width:1.2px,color:#064e3b;
classDef bank fill:#fef2f2,stroke:#dc2626,stroke-width:1.2px,color:#7f1d1d;
classDef backup fill:#fffbeb,stroke:#d97706,stroke-width:1.2px,color:#78350f;
subgraph Z1[办公区]
PC[PC 端用户]
end
subgraph Z2[公网区域]
PUB[移动端用户 / 第三方系统]
EDGE[公网入口 / 边界路由 / NAT]
BANK[银行系统]
end
subgraph Z3[互联网区 / DMZ]
IGW[Nginx 入口]
APP[业务应用集群]
FX[SFTP / FTP 文件交换服务器]
end
subgraph Z4[内网区]
MID[综合节点]
DBM[(PostgreSQL 主库)]
DBS[(PostgreSQL 热备)]
BK[备份归档存储]
end
class Z1,Z2,Z3,Z4 zone;
class PC,PUB user;
class EDGE,IGW edge;
class APP,MID svc;
class DBM,DBS data;
class FX bank;
class BK backup;
PC --> IGW
PUB --> EDGE
BANK --> IGW
BANK --> FX
EDGE --> IGW
IGW --> APP
APP --> FX
APP --> MID
MID --> DBM
MID -.-> DBS
DBM --> BK
DBS --> BK
MID --> BK
```
图说明:
1. 公网入口、边界路由和 `NAT` 转发不纳入我方主机资源,但作为公网访问进入 `DMZ` 的前置接入层予以保留。
2. 网络分区图按办公区、公网区域、互联网区 `DMZ`、内网区四区模型表达,不展开单机内部软件组件。
3. PC 端用户可直接通过办公网访问 `DMZ` 中的 `Nginx` 入口;移动端和第三方系统经公网入口、边界路由或 `NAT` 转发后进入 `DMZ`
4. `DMZ` 中的 `Nginx` 入口、业务应用集群、银行文件交换服务器与内网区综合节点、数据库、备份归档存储通过授权链路互通。
5. 银行系统除通过 `SFTP/FTP` 目录交换文件外,还可按授权专线或外联链路访问 `DMZ Nginx` 暴露的 API 入口,网络分区图已同步表达这两类授权链路。
## 主机角色与部署内容
| 层级 | 主机角色 | 数量 | 主要部署内容 | 说明 |
|---|---|---:|---|---|
| 接入层 | DMZ Nginx 入口节点 | 1 台 | Nginx、API 转发、内部负载均衡 | 作为我方统一 DMZ 接入入口,承接办公网访问、公网转发与开放 API 转发 |
| 应用层 | 业务应用节点(主) | 2 台 | Spring Boot Gateway、Spring Boot 业务服务 | 承载微服务集群接入与表务、抄表、收费、账务、发票、报表等核心应用服务 |
| 综合支撑层 | 数据、中间件与文件存储综合节点 | 1 台 | Redis、Nacos、RustFS、HAProxy、PgBouncer、Patroni | 中间件、数据库控制与文件存储同机部署 |
| 银行交换层 | SFTP/FTP 文件交换服务器 | 1 台 | SFTP/FTP 服务、送盘目录、回盘目录、对账目录、归档目录 | 作为银行文件交换专用前置机 |
| 数据库层 | PostgreSQL 主库服务器 | 1 台 | PostgreSQL 16 Primary | 部署在可用区 A |
| 数据库层 | PostgreSQL 热备服务器 | 1 台 | PostgreSQL 16 Standby | 部署在可用区 B |
| 备份层 | 备份归档存储 | 1 套 | 基础备份、WAL 归档、恢复副本 | 独立备份空间 |
## 资源配置建议
| 主机角色 | 数量 | 建议配置 | 备注 |
|---|---:|---|---|
| DMZ Nginx 入口节点 | 1 台 | 8 核 CPU / 16 GB 内存 / 300 GB 存储 | 承载 DMZ Nginx、API 转发和内部负载均衡 |
| 业务应用节点(主) | 2 台 | 32 核 CPU / 64 GB 内存 / 300 GB 存储 | 承载 Spring Boot Gateway 及表务、抄表、收费、账务、发票、报表等核心应用服务 |
| 数据、中间件与文件存储综合节点 | 1 台 | 16 核 CPU / 32 GB 内存 / 2300 GB 存储 | 承载缓存、配置治理、数据库控制、图片、附件等非结构化数据 |
| SFTP/FTP 文件交换服务器 | 1 台 | 2 核 CPU / 8 GB 内存 / 200 GB 存储 | 承载银行送盘、回盘、对账、归档文件交换,建议独立部署 |
| PostgreSQL 主库服务器 | 1 台 | 24 核 CPU / 48 GB 内存 / 1 TB NVMe SSD | 生产写入节点,不计入上述已知 4 类业务主机 |
| PostgreSQL 热备服务器 | 1 台 | 24 核 CPU / 48 GB 内存 / 1 TB NVMe SSD | 正式切换接管节点,不计入上述已知 4 类业务主机 |
| 备份归档存储 | 1 套 | 可用空间 4 TB 至 6 TB | 存放全量备份与 WAL 归档 |
### 银行文件交换服务器容量估算
按 20 万用户、5 年保留期估算,银行文件交换服务器主要承载代扣、托收、对账等批次文件,不承载全量业务明细数据库。
估算依据如下:
1. 银行代扣、托收、对账文件以批次文件为主,不是每位用户每天形成独立文件。
2. 按“仅覆盖银行代扣/托收用户,且按月批次送盘/回盘一次”的业务节奏估算,单个批次文件大小通常在 `10 MB ~ 40 MB` 量级。
3. 按每月送盘、回盘、对账共 `3` 类核心文件估算,月文件量约为:
- `30 MB ~ 120 MB / 月`
4. 按 1 年估算,原始批次文件总量约为:
- `0.36 GB ~ 1.44 GB / 年`
5. 考虑归档副本、异常重传、中间文件和运行日志,按 `10 ~ 15` 倍放大后5 年总量通常约为:
- `20 GB ~ 110 GB`
因此,按最节约的一期规划,银行文件交换服务器可按 `2 核 CPU / 8 GB 内存 / 200 GB 存储` 配置满足送盘、回盘、对账文件交换与 5 年留存需要;如后续银行通道数量增加、并发文件交换增加或保留策略扩大,再扩容至 `4 核 / 8 GB / 500 GB` 即可。建议设置 `70%` 容量预警,并预留扩容机制。
## 资源审批汇总表
以下汇总表用于甲方进行主机、存储、网络及基础软件部署范围审批。
| 序号 | 资源名称 | 数量 | 规格 | 部署内容 | 用途说明 | 建议口径 |
|---|---:|---:|---|---|---|---|
| 1 | DMZ Nginx 入口节点 | 1 台 | 8 核 CPU / 16 GB 内存 / 300 GB 存储 | Nginx、API 转发、内部负载均衡 | 我方统一 DMZ 接入入口 | 可利旧优先 |
| 2 | 业务应用节点(主) | 2 台 | 32 核 CPU / 64 GB 内存 / 300 GB 存储 | Spring Boot Gateway、Spring Boot 核心业务服务 | 承载微服务接入与核心业务服务 | 现有资源纳入正式方案 |
| 3 | 数据、中间件与文件存储综合节点 | 1 台 | 16 核 CPU / 32 GB 内存 / 2300 GB 存储 | Redis、Nacos、RustFS、HAProxy、PgBouncer、Patroni | 承载缓存、配置治理、数据库控制、图片、附件、导出文件等能力 | 现有资源纳入正式方案 |
| 4 | SFTP/FTP 文件交换服务器 | 1 台 | 2 核 CPU / 8 GB 内存 / 200 GB 存储 | SFTP/FTP 服务、送盘/回盘/对账目录、归档目录 | 承载银行文件交换与目录隔离 | 按最节约一期规划建议新增或单独利旧 |
| 5 | PostgreSQL 主库服务器 | 1 台 | 24 核 CPU / 48 GB 内存 / 1 TB NVMe SSD | PostgreSQL 16 Primary | 承载生产写入 | 建议单独配置 |
| 6 | PostgreSQL 热备服务器 | 1 台 | 24 核 CPU / 48 GB 内存 / 1 TB NVMe SSD | PostgreSQL 16 Standby | 承载正式切换接管 | 建议单独配置 |
| 7 | 备份归档存储 | 1 套 | 可用空间 4 TB 至 6 TB | 基础备份、WAL 归档、恢复副本 | 保障恢复与审计追溯 | 可利旧或新增存储空间 |
### 审批建议
1. 业务应用节点、综合节点、DMZ Nginx 入口节点可优先按现有资源纳入实施范围。
2. SFTP/FTP 文件交换服务器建议单独审批,以满足银行文件交换隔离和安全要求。
3. PostgreSQL 主库与热备库建议作为单独审批项,避免与现有业务节点混部。
4. 备份归档存储建议作为单独资源项审批,避免后期因备份空间不足影响正式上线。
## 基础软件与版本清单
| 类别 | 软件名称 | 建议版本 | 部署位置 | 说明 |
|---|---|---|---|---|
| 操作系统 | Linux 发行版 | 银河麒麟Kylin V10X86 | 全部服务器 | 按甲方当前基础环境标准选定 |
| 运行环境 | JDK | 17 | 业务应用节点 | Spring Boot 运行环境 |
| 接入层 | Nginx | 1.20+ | DMZ Nginx 入口节点 | 办公网、公网入口转发与内部负载均衡 |
| 网关服务 | Spring Boot Gateway | 3.x | 业务应用节点 | 微服务集群统一接入 |
| 业务服务 | Spring Boot | 3.x | 业务应用节点 | 核心业务服务框架 |
| 银行文件交换 | SFTP/FTP 服务 | 稳定版 | SFTP/FTP 文件交换服务器 | 银行送盘、回盘、对账文件交换 |
| 数据库 | PostgreSQL | 16 | 主库、热备库 | 主备数据库部署 |
| 缓存 | Redis | 6.2+ | 综合节点 | 缓存、会话、轻量级消息能力 |
| 配置中心 | Nacos | 2.x | 综合节点 | 配置治理与注册管理 |
| 对象存储 | RustFS | 以项目实际版本为准 | 综合节点 | 图片、附件、导出文件存储 |
| 数据库代理 | HAProxy | 2.x | 综合节点 | 数据库读写入口代理 |
| 连接池 | PgBouncer | 1.2x+ | 综合节点 | 统一数据库连接池 |
| 高可用控制 | Patroni | 稳定版 | 综合节点 | 主备状态管理与切换 |
## 部署方式说明
### 总体部署原则
本方案的部署方式遵循以下原则:
1. 入口代理类组件优先采用 `Docker` 部署,并可优先评估 `host` 网络模式。
2. 业务应用优先采用 `Docker` 部署,但不建议使用 `host` 网络模式。
3. 数据库主备优先采用物理机或虚拟机直接部署,不建议容器化承载 PostgreSQL 主备本体。
4. 数据库控制组件如需容器化,应优先选择轻量代理组件容器化,高可用控制组件仍以直接部署为优先。
### 组件部署方式建议
| 组件 | 部署节点 | 建议部署方式 | 是否建议 `host` 模式 | 说明 |
|---|---|---|---|---|
| DMZ Nginx | DMZ Nginx 入口节点 | Docker 部署 | 是,优先建议 | 作为我方统一 DMZ 接入入口,便于端口管理与转发 |
| Spring Boot Gateway | 业务应用节点(主) | Docker 部署 | 否 | 作为微服务统一接入入口,建议与业务服务同节点部署 |
| Spring Boot 应用 | 业务应用节点(主) | Docker 部署 | 否 | 便于发布、回滚、扩容,保留容器网络隔离 |
| SFTP/FTP 服务 | SFTP/FTP 文件交换服务器 | 物理机/虚拟机直接部署 | 否 | 作为银行文件交换专用服务,建议独立部署并做目录隔离 |
| Redis | 综合节点 | Docker 部署 | 可选 | 可采用普通容器网络,必要时可评估 `host` |
| Nacos | 综合节点 | Docker 部署 | 可选 | 默认容器网络即可,便于配置治理 |
| HAProxy | 综合节点 | Docker 部署 | 是,优先建议 | 作为数据库代理入口,适合 `host` 模式 |
| PgBouncer | 综合节点 | Docker 部署 | 是,优先建议 | 作为数据库连接池入口,适合 `host` 模式 |
| Patroni | 综合节点 | 物理机/虚拟机直接部署 | 否 | 建议与系统服务集成,便于运维与切换控制 |
| RustFS | 综合节点 | Docker 部署 | 否 | 更关注数据盘挂载与对象存储目录管理 |
| PostgreSQL 主库 | 主库服务器 | 物理机/虚拟机直接部署 | 否 | 核心数据库本体不建议容器化 |
| PostgreSQL 热备 | 热备服务器 | 物理机/虚拟机直接部署 | 否 | 高可用数据库本体不建议容器化 |
### 优先采用 Docker 且可使用 `host` 模式的组件
结合当前资源结构,建议优先采用 `Docker + host` 模式的组件如下:
1. `DMZ Nginx`
2. `HAProxy`
3. `PgBouncer`
采用 `host` 模式的主要原因如下:
1. 直接监听固定服务端口,减少端口映射复杂度。
2. 更便于与主机防火墙、域名、VIP、健康检查配合。
3. 对于入口类与代理类组件,运维体验更接近直接部署。
### 不建议采用 `host` 模式的组件
以下组件不建议采用 `Docker + host` 模式:
1. `Spring Boot` 业务应用:应保留容器网络隔离,便于扩容和端口治理。
2. `RustFS`:应以存储挂载与数据目录管理为重点,不依赖 `host` 模式。
3. `PostgreSQL 主库 / 热备`:数据库本体优先直接部署,不建议容器化。
4. `Patroni`:建议直接部署,便于与数据库高可用控制链路协同。
## 网络需求
### 1. 网络分区要求
| 网络分区 | 部署对象 | 访问要求 |
|---|---|---|
| 办公区 | PC 端用户办公网段 | 仅允许通过办公网访问 `DMZ Nginx` 入口 |
| 公网区域 | 移动端用户、第三方系统、公网入口薄转发、边界路由 / NAT | 对外提供 HTTPS 访问,不纳入我方主机资源 |
| 互联网区 DMZ | `DMZ Nginx`、业务应用节点、`SFTP/FTP` 文件交换服务器 | 作为对外与跨边界服务区,仅允许按授权链路访问内网区 |
| 内网区 | Redis、Nacos、RustFS、数据库控制组件、PostgreSQL 主库/热备、备份归档存储 | 严格限制,仅允许 `DMZ` 业务应用节点、综合节点控制链路和运维区访问 |
### 2. 带宽与时延要求
| 网络链路 | 建议要求 | 说明 |
|---|---|---|
| 公网入口薄转发到 DMZ Nginx | 千兆网络 | 满足公网入口转发 |
| 办公网到 DMZ Nginx | 千兆网络 | 满足办公网通过内网 IP 访问 |
| DMZ Nginx 到业务应用 | 千兆网络 | 满足开放 API 转发与网关接入 |
| 业务应用到综合节点 | 千兆网络 | 满足缓存、配置治理、文件访问与数据库代理访问 |
| 业务应用到 SFTP/FTP 服务器 | 千兆网络 | 满足送盘、回盘、对账文件交换 |
| 银行链路到 SFTP/FTP 服务器 | 千兆网络或专线 | 满足银行文件交换与目录投递 |
| 综合节点到数据库 | 千兆网络以上 | 满足数据库代理与健康检查 |
| 主备复制链路 | 不低于 10 Gbps | 支撑同步复制 |
| 同城主备时延 | 建议低于 2 ms | 支撑稳定同步复制 |
| 数据库到备份存储 | 千兆网络以上 | 满足基础备份与 WAL 归档传输 |
| 综合节点到备份存储 | 千兆网络以上 | 满足文件数据备份与归档传输 |
### 3. 网络开通要求
| 类别 | 开通要求 | 说明 |
|---|---|---|
| 对外访问 | 开通 443 端口 | 提供统一 HTTPS 入口 |
| 公网入口薄转发访问 DMZ Nginx | 开通公网入口到 DMZ Nginx 的转发端口 | 仅授权链路访问 |
| 办公网访问 DMZ Nginx | 开通办公网到 DMZ Nginx 的内网访问端口 | 仅办公网访问 |
| 银行专线或授权外联链路访问 DMZ Nginx | 开通银行链路到 DMZ Nginx 的 HTTPS/API 端口 | 仅银行授权链路访问 |
| DMZ Nginx 访问应用 | 开通 DMZ Nginx 到业务应用的 API / 网关端口 | 仅 DMZ 内部访问 |
| 应用访问综合节点 | 开通 Redis、Nacos、RustFS9000/9001、PgBouncer 相关端口 | 仅 DMZ 业务应用节点访问 |
| 业务应用访问 SFTP/FTP 服务器 | 开通 SFTP/FTP 相关端口 | 用于银行文件送盘、回盘、对账交换 |
| 银行链路访问 SFTP/FTP 服务器 | 开通 FTP/SFTP 服务端口 | 仅银行授权链路访问 |
| 综合节点访问数据库 | 开通 PostgreSQL 5432 及健康检查相关端口 | 仅综合节点访问 |
| 运维访问 | 开通运维区到各层必要管理端口 | 用于巡检、发布、恢复、切换 |
## 网络开通清单
| 源区域/源主机 | 目标区域/目标主机 | 协议/端口 | 用途 | 开通要求 |
|---|---|---|---|---|
| 外部用户 | 公网入口薄转发 | HTTPS/443 | 页面访问、接口入口 | 对外开放 |
| 公网入口薄转发 | DMZ Nginx 入口节点 | HTTP/HTTPS/转发端口 | 公网访问转入 DMZ 入口 | 授权链路放通 |
| 办公网段 | DMZ Nginx 入口节点 | HTTP/HTTPS/内网访问端口 | 办公网用户访问系统入口 | 仅办公网放通 |
| 银行专线或授权外联链路 | DMZ Nginx 入口节点 | HTTPS/API 端口 | 银行系统访问 DMZ API 入口 | 仅授权链路放通 |
| DMZ Nginx 入口节点 | 业务应用节点(主) | HTTP/HTTPS/网关端口 | DMZ API 转发与微服务接入 | DMZ 内部放通 |
| 业务应用节点(主) | 综合节点 | TCP/6379 | Redis 访问 | 内网放通 |
| 业务应用节点(主) | 综合节点 | TCP/8848 | Nacos 访问 | 内网放通 |
| 业务应用节点(主) | 综合节点 | TCP/6432 | PgBouncer 访问 | 内网放通 |
| 业务应用节点(主) | 综合节点 | TCP/9000、9001 | RustFS 文件访问与控制台访问 | 内网放通 |
| 业务应用节点(主) | SFTP/FTP 文件交换服务器 | TCP/21 或 22 | 银行送盘、回盘、对账文件交换 | 内网放通 |
| 银行专线或授权外联链路 | SFTP/FTP 文件交换服务器 | TCP/21 或 22 | 银行文件目录投递与回收 | 仅授权链路放通 |
| 综合节点 | PostgreSQL 主库服务器 | TCP/5432 | 数据库代理与控制访问 | 内网放通 |
| 综合节点 | PostgreSQL 热备服务器 | TCP/5432 | 数据库代理、状态探测与控制访问 | 内网放通 |
| PostgreSQL 主库服务器 | PostgreSQL 热备服务器 | TCP/5432 | 主备同步复制 | 高带宽、低时延专用链路 |
| PostgreSQL 主库/热备库 | 备份归档存储 | TCP/存储协议端口 | 基础备份与 WAL 归档 | 内网放通 |
| 综合节点 | 备份归档存储 | TCP/存储协议端口 | 文件归档与备份 | 内网放通 |
| 运维管理终端 | 各节点 | SSH/22 及必要管理端口 | 运维、巡检、发布、恢复 | 仅运维区放通 |
## 访问控制与端口建议
| 服务 | 典型端口 | 访问范围 |
|---|---|---|
| Nginx/HTTPS | 443 | 对外开放、办公网授权访问及银行授权链路访问 |
| Spring Boot Gateway / 业务应用端口 | 项目自定义端口 | 仅 DMZ Nginx 与 DMZ/内网授权调用 |
| Redis | 6379 | 仅业务应用与运维可访问 |
| Nacos | 8848 | 仅业务应用与运维可访问 |
| RustFS | 9000S3 API、9001Console | 仅业务应用与运维可访问 |
| SFTP/FTP 服务 | 21 或 22 | 仅业务应用节点、运维和银行授权链路可访问 |
| PgBouncer | 6432 | 仅业务应用可访问 |
| HAProxy | 5000 或项目定义端口 | 仅 PgBouncer 与运维可访问 |
| PostgreSQL | 5432 | 仅数据库控制主机与运维可访问 |
## 实施步骤
### 1. 基础资源准备
1. 确认 `DMZ Nginx` 入口节点、业务应用节点、综合节点是否为利旧资源。
2. 完成 SFTP/FTP 文件交换服务器、PostgreSQL 主库服务器、热备服务器及备份归档存储审批。
3. 完成各网络分区、IP、域名、SSL 证书、路由及防火墙策略准备。
### 2. 基础软件安装
1. 安装操作系统并完成安全基线加固。
2. 在业务应用节点安装 JDK、部署业务运行环境。
3. 在 `DMZ Nginx` 入口节点安装 Nginx。
4. 在综合节点安装 Redis、Nacos、RustFS、HAProxy、PgBouncer、Patroni。
5. 在 SFTP/FTP 文件交换服务器安装 SFTP/FTP 服务并配置目录结构。
6. 在数据库主备节点安装 PostgreSQL 16。
### 3. 数据库主备部署
1. 初始化 PostgreSQL 主库。
2. 初始化 PostgreSQL 热备库并建立同步复制。
3. 配置 Patroni、HAProxy、PgBouncer 联动。
4. 配置基础备份与 WAL 归档。
5. 配置业务应用节点到 SFTP/FTP 文件交换服务器的文件交换目录映射。
### 4. 应用与存储部署
1. 在业务应用节点部署 Spring Boot Gateway 和业务应用服务。
2. 在 `DMZ Nginx` 入口节点配置 API 转发和内部负载均衡规则。
3. 在综合节点初始化 RustFS 存储桶和访问策略。
4. 在 SFTP/FTP 文件交换服务器配置送盘、回盘、对账、归档目录。
5. 配置业务应用到 Redis、Nacos、RustFS、PgBouncer 的连接参数。
### 5. 联调与演练
1. 完成前后端联调。
2. 完成中间件访问验证。
3. 完成数据库主备同步验证。
4. 完成文件上传、下载、归档验证。
5. 完成主备切换演练与回切演练。
### 6. 上线准备与正式投产
1. 完成上线前巡检与问题清零。
2. 确认监控、日志、备份、告警正常。
3. 完成上线窗口审批。
4. 按上线顺序切换生产流量。
## 验收标准
| 验收项 | 验收标准 | 说明 |
|---|---|---|
| 对外访问 | 用户可通过统一域名正常访问系统 | 公网入口薄转发与 DMZ Nginx 链路正常 |
| 业务应用可用性 | 表务、抄表、收费、账务、发票、报表等核心服务正常 | 业务主流程可执行 |
| Redis 可用性 | 缓存读写正常 | 中间件能力正常 |
| Nacos 可用性 | 配置下发正常 | 配置治理能力正常 |
| RustFS 可用性 | 图片、附件上传下载正常 | 文件存储能力正常 |
| SFTP/FTP 文件交换 | 送盘、回盘、对账目录读写正常 | 银行文件交换能力正常 |
| 数据库连接能力 | 业务应用可通过 PgBouncer 正常连接数据库 | 代理接入正常 |
| PostgreSQL 主备同步 | 主备复制正常,无严重延迟 | 高可用基础正常 |
| 数据库切换演练 | 主备切换成功,业务恢复正常 | 高可用能力可验证 |
| 备份归档 | 基础备份与 WAL 归档正常 | 恢复能力可验证 |
| 运维监控 | 关键节点监控、日志、告警正常 | 运维可观测性正常 |
## 部署结论
在已采纳 PostgreSQL 16 方案二作为数据库部署方案的前提下,建议福建水务营收系统采用“前后端分层部署 + 中间件集中部署 + 数据库主备分离部署”的整体部署模式。
本方案的最终结论如下:
1. 公网入口薄转发、边界路由和 `NAT` 不纳入我方主机资源;我方实际部署的统一接入入口为互联网区 `DMZ``Nginx` 入口节点。
2. 2 台业务应用节点部署在互联网区 `DMZ`,节点内同时部署 `Spring Boot Gateway` 和业务服务,承接微服务统一接入与核心业务处理。
3. 综合节点集中承载 `Redis``Nacos``RustFS` 及数据库控制组件,并部署在内网区,进一步压缩一期主机数量并降低部署复杂度。
## RustFS 产品介绍与选型说明
RustFS 是一款支持私有化部署的 S3 兼容对象存储方案可用于承接图片、附件、导出文件和归档文件等非结构化数据场景。结合本项目当前整体部署方案RustFS 作为综合节点上的对象存储组件,可替代 MinIO 承接对象存储能力。
本项目采用 RustFS 的原因如下:
1. RustFS 具备对象存储能力,适合图片、附件、导出文件和归档文件统一存储。
2. RustFS 支持私有化部署,适合甲方对自主可控和本地化部署的要求。
3. RustFS 可作为独立对象存储组件部署在综合节点中,与缓存、配置治理和数据库控制能力协同运行。
4. 当前方案中,银行文件交换仍由独立的 SFTP/FTP 文件交换服务器承接RustFS 不承担银行送盘、回盘和对账文件交换职责。
5. 新增 1 台 SFTP/FTP 文件交换服务器,作为银行送盘、回盘、对账文件交换专用前置机。
6. PostgreSQL 16 采用同城双可用区 1 主 1 热备部署,满足高可用要求。
7. 网络采用办公区、公网区域、互联网区 `DMZ`、内网区分层隔离模式,以满足安全性、可维护性和资源审批要求。

View File

@ -0,0 +1,262 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>08 PlanB Canvas Diagrams</title>
<style>
:root {
--bg: #f8fafc;
--ink: #0f172a;
--muted: #475569;
--outer: #fff7ed;
--outer-border: #ea580c;
--inner: #eff6ff;
--inner-border: #2563eb;
--svc: #f5f3ff;
--svc-border: #7c3aed;
--data: #ecfdf5;
--data-border: #059669;
--bank: #fef2f2;
--bank-border: #dc2626;
--backup: #fffbeb;
--backup-border: #d97706;
}
body {
margin: 0;
padding: 24px;
background: var(--bg);
color: var(--ink);
font: 14px/1.5 -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif;
}
h1 {
margin: 0 0 16px;
font-size: 22px;
}
h2 {
margin: 24px 0 8px;
font-size: 18px;
}
p {
margin: 0 0 12px;
color: var(--muted);
}
.card {
background: white;
border: 1px solid #e2e8f0;
border-radius: 16px;
padding: 16px;
margin-bottom: 20px;
box-shadow: 0 8px 24px rgba(15, 23, 42, 0.06);
}
canvas {
width: 100%;
height: auto;
display: block;
background: #ffffff;
border-radius: 12px;
}
.tip {
margin-top: 8px;
color: var(--muted);
font-size: 13px;
}
</style>
</head>
<body>
<h1>福建水务营收系统 Canvas 图示</h1>
<p>该文件用于替代当前 Mermaid 版本,便于你审阅更接近正式交付效果的网络图与访问图。</p>
<div class="card">
<h2>图 A 访问与应用软件拓扑图</h2>
<canvas id="access" width="1500" height="720"></canvas>
<div class="tip">公网域与内部网络域已明确拆分PC 端走内网,移动端与第三方走公网接入代理。</div>
</div>
<div class="card">
<h2>图 B 网络连接图</h2>
<canvas id="network" width="1600" height="980"></canvas>
<div class="tip">该图更偏网络工程师评审视角,强调边界、链路和跨域访问关系。</div>
</div>
<script>
const COLORS = {
ink: "#0f172a",
muted: "#475569",
outer: "#fff7ed",
outerBorder: "#ea580c",
inner: "#eff6ff",
innerBorder: "#2563eb",
svc: "#f5f3ff",
svcBorder: "#7c3aed",
data: "#ecfdf5",
dataBorder: "#059669",
bank: "#fef2f2",
bankBorder: "#dc2626",
backup: "#fffbeb",
backupBorder: "#d97706",
line: "#334155"
};
function roundRect(ctx, x, y, w, h, r, fill, stroke, lw = 2) {
ctx.beginPath();
ctx.moveTo(x + r, y);
ctx.arcTo(x + w, y, x + w, y + h, r);
ctx.arcTo(x + w, y + h, x, y + h, r);
ctx.arcTo(x, y + h, x, y, r);
ctx.arcTo(x, y, x + w, y, r);
ctx.closePath();
ctx.fillStyle = fill;
ctx.fill();
ctx.lineWidth = lw;
ctx.strokeStyle = stroke;
ctx.stroke();
}
function text(ctx, str, x, y, opts = {}) {
const { size = 18, color = COLORS.ink, align = "center", weight = "600" } = opts;
ctx.fillStyle = color;
ctx.font = `${weight} ${size}px -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif`;
ctx.textAlign = align;
ctx.textBaseline = "middle";
const lines = Array.isArray(str) ? str : [str];
lines.forEach((line, i) => ctx.fillText(line, x, y + i * (size + 6)));
}
function arrow(ctx, x1, y1, x2, y2, label = "") {
ctx.strokeStyle = COLORS.line;
ctx.fillStyle = COLORS.line;
ctx.lineWidth = 2;
ctx.beginPath();
ctx.moveTo(x1, y1);
ctx.lineTo(x2, y2);
ctx.stroke();
const angle = Math.atan2(y2 - y1, x2 - x1);
const len = 10;
ctx.beginPath();
ctx.moveTo(x2, y2);
ctx.lineTo(x2 - len * Math.cos(angle - Math.PI / 6), y2 - len * Math.sin(angle - Math.PI / 6));
ctx.lineTo(x2 - len * Math.cos(angle + Math.PI / 6), y2 - len * Math.sin(angle + Math.PI / 6));
ctx.closePath();
ctx.fill();
if (label) {
const mx = (x1 + x2) / 2;
const my = (y1 + y2) / 2 - 10;
roundRect(ctx, mx - 72, my - 16, 144, 28, 8, "#ffffff", "#cbd5e1", 1);
text(ctx, label, mx, my - 1, { size: 12, weight: "500", color: COLORS.muted });
}
}
function drawAccess() {
const c = document.getElementById("access");
const ctx = c.getContext("2d");
ctx.clearRect(0, 0, c.width, c.height);
roundRect(ctx, 40, 50, 500, 210, 20, COLORS.outer, COLORS.outerBorder);
text(ctx, "公网域", 290, 80, { size: 22 });
roundRect(ctx, 80, 115, 160, 60, 14, "#ffffff", COLORS.outerBorder);
roundRect(ctx, 290, 115, 160, 60, 14, "#ffffff", COLORS.outerBorder);
roundRect(ctx, 170, 190, 220, 60, 14, "#ffffff", COLORS.outerBorder);
text(ctx, "移动端用户", 160, 145);
text(ctx, "第三方系统", 370, 145);
text(ctx, "公网接入代理", 280, 220);
roundRect(ctx, 600, 50, 280, 210, 20, COLORS.inner, COLORS.innerBorder);
text(ctx, "内部网络域", 740, 80, { size: 22 });
roundRect(ctx, 645, 115, 190, 60, 14, "#ffffff", COLORS.innerBorder);
roundRect(ctx, 645, 190, 190, 60, 14, "#ffffff", COLORS.innerBorder);
text(ctx, "PC 端用户", 740, 145);
text(ctx, "内网 Nginx", 740, 220);
roundRect(ctx, 930, 80, 240, 220, 20, COLORS.inner, COLORS.innerBorder);
roundRect(ctx, 1220, 80, 240, 220, 20, COLORS.inner, COLORS.innerBorder);
text(ctx, "业务应用节点 1", 1050, 110, { size: 20 });
text(ctx, "业务应用节点 2", 1340, 110, { size: 20 });
roundRect(ctx, 980, 145, 140, 54, 12, "#ffffff", COLORS.innerBorder);
roundRect(ctx, 1270, 145, 140, 54, 12, "#ffffff", COLORS.innerBorder);
roundRect(ctx, 980, 220, 140, 54, 12, "#ffffff", COLORS.innerBorder);
roundRect(ctx, 1270, 220, 140, 54, 12, "#ffffff", COLORS.innerBorder);
text(ctx, "Gateway", 1050, 172);
text(ctx, "Gateway", 1340, 172);
text(ctx, "业务服务", 1050, 247);
text(ctx, "业务服务", 1340, 247);
arrow(ctx, 390, 220, 645, 220, "跨公网/内网边界转发");
arrow(ctx, 740, 220, 980, 172, "负载到节点 1");
arrow(ctx, 740, 220, 1270, 172, "负载到节点 2");
arrow(ctx, 1050, 199, 1050, 220, "");
arrow(ctx, 1340, 199, 1340, 220, "");
}
function drawNetwork() {
const c = document.getElementById("network");
const ctx = c.getContext("2d");
ctx.clearRect(0, 0, c.width, c.height);
roundRect(ctx, 40, 40, 440, 180, 18, COLORS.outer, COLORS.outerBorder);
text(ctx, "公网域", 260, 72, { size: 22 });
roundRect(ctx, 70, 105, 120, 54, 12, "#fff", COLORS.outerBorder);
roundRect(ctx, 215, 105, 120, 54, 12, "#fff", COLORS.outerBorder);
roundRect(ctx, 125, 170, 180, 54, 12, "#fff", COLORS.outerBorder);
text(ctx, "移动端用户", 130, 132, { size: 15 });
text(ctx, "第三方系统", 275, 132, { size: 15 });
text(ctx, "公网接入代理", 215, 197, { size: 15 });
roundRect(ctx, 540, 40, 230, 180, 18, COLORS.inner, COLORS.innerBorder);
text(ctx, "内网接入区", 655, 72, { size: 22 });
roundRect(ctx, 575, 130, 160, 60, 12, "#fff", COLORS.innerBorder);
text(ctx, "内网 Nginx", 655, 160);
roundRect(ctx, 830, 40, 360, 220, 18, COLORS.inner, COLORS.innerBorder);
text(ctx, "应用区", 1010, 72, { size: 22 });
roundRect(ctx, 865, 115, 140, 95, 12, "#fff", COLORS.innerBorder);
roundRect(ctx, 1015, 115, 140, 95, 12, "#fff", COLORS.innerBorder);
text(ctx, ["应用节点 1", "Gateway + Biz"], 935, 145, { size: 15 });
text(ctx, ["应用节点 2", "Gateway + Biz"], 1085, 145, { size: 15 });
roundRect(ctx, 1240, 40, 300, 220, 18, COLORS.svc, COLORS.svcBorder);
text(ctx, "综合服务区", 1390, 72, { size: 22 });
roundRect(ctx, 1275, 115, 110, 54, 12, "#fff", COLORS.svcBorder);
roundRect(ctx, 1395, 115, 110, 54, 12, "#fff", COLORS.svcBorder);
roundRect(ctx, 1335, 185, 110, 54, 12, "#fff", COLORS.svcBorder);
text(ctx, "缓存服务", 1330, 142, { size: 14 });
text(ctx, "文件服务", 1450, 142, { size: 14 });
text(ctx, "数据库控制", 1390, 212, { size: 14 });
roundRect(ctx, 40, 310, 300, 180, 18, COLORS.bank, COLORS.bankBorder);
text(ctx, "银行文件交换区", 190, 342, { size: 22 });
roundRect(ctx, 90, 390, 200, 60, 12, "#fff", COLORS.bankBorder);
text(ctx, "SFTP / FTP 文件交换服务器", 190, 420, { size: 15 });
roundRect(ctx, 430, 310, 360, 180, 18, COLORS.data, COLORS.dataBorder);
text(ctx, "数据区", 610, 342, { size: 22 });
roundRect(ctx, 470, 390, 120, 60, 12, "#fff", COLORS.dataBorder);
roundRect(ctx, 630, 390, 120, 60, 12, "#fff", COLORS.dataBorder);
text(ctx, "主库", 530, 420);
text(ctx, "热备", 690, 420);
roundRect(ctx, 860, 310, 260, 180, 18, COLORS.backup, COLORS.backupBorder);
text(ctx, "备份归档区", 990, 342, { size: 22 });
roundRect(ctx, 900, 390, 180, 60, 12, "#fff", COLORS.backupBorder);
text(ctx, "备份归档存储", 990, 420);
arrow(ctx, 305, 197, 575, 160, "公网转内网");
arrow(ctx, 655, 190, 935, 115, "API / 网关端口");
arrow(ctx, 655, 190, 1085, 115, "API / 网关端口");
arrow(ctx, 935, 210, 1330, 142, "6379 / 8848 / 9000");
arrow(ctx, 1085, 210, 1390, 212, "6432 / 5000");
arrow(ctx, 935, 210, 190, 390, "21 或 22");
arrow(ctx, 1390, 239, 530, 390, "5432");
arrow(ctx, 1390, 239, 690, 390, "5432 状态探测");
arrow(ctx, 590, 420, 630, 420, "主备同步");
arrow(ctx, 1390, 239, 990, 390, "归档");
arrow(ctx, 690, 450, 990, 450, "备份副本");
}
drawAccess();
drawNetwork();
</script>
</body>
</html>

BIN
output/11_UP_Detailed.docx Normal file

Binary file not shown.

240
output/11_UP_Detailed.html Normal file
View File

@ -0,0 +1,240 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="系统设计团队" />
<title>福建水务营收系统-统一平台模块正文</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<link rel="stylesheet" href="output/document_style.css" />
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<header id="title-block-header">
<h1 class="title">福建水务营收系统-统一平台模块正文</h1>
<p class="author">系统设计团队</p>
<p class="date">2024年12月19日</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#福建水务营收系统详细设计-统一平台模块正文"
id="toc-福建水务营收系统详细设计-统一平台模块正文"><span
class="toc-section-number">1</span>
福建水务营收系统详细设计-统一平台模块正文</a>
<ul>
<li><a href="#章节导航精简" id="toc-章节导航精简"><span
class="toc-section-number">1.1</span> 章节导航(精简)</a></li>
<li><a href="#文档定位" id="toc-文档定位"><span
class="toc-section-number">1.2</span> 文档定位</a></li>
</ul></li>
<li><a href="#统一平台详细设计" id="toc-统一平台详细设计"><span
class="toc-section-number">2</span> 统一平台详细设计</a>
<ul>
<li><a href="#up-001-统一认证与单点登录"
id="toc-up-001-统一认证与单点登录"><span
class="toc-section-number">2.1</span> UP-001 统一认证与单点登录</a>
<ul>
<li><a href="#功能说明" id="toc-功能说明"><span
class="toc-section-number">2.1.1</span> 功能说明</a></li>
<li><a href="#关键设计" id="toc-关键设计"><span
class="toc-section-number">2.1.2</span> 关键设计</a></li>
<li><a href="#业务流程" id="toc-业务流程"><span
class="toc-section-number">2.1.3</span> 业务流程</a></li>
<li><a href="#核心数据" id="toc-核心数据"><span
class="toc-section-number">2.1.4</span> 核心数据</a></li>
</ul></li>
<li><a href="#up-002-组织用户与权限管理"
id="toc-up-002-组织用户与权限管理"><span
class="toc-section-number">2.2</span> UP-002 组织用户与权限管理</a>
<ul>
<li><a href="#功能说明-1" id="toc-功能说明-1"><span
class="toc-section-number">2.2.1</span> 功能说明</a></li>
<li><a href="#关键设计-1" id="toc-关键设计-1"><span
class="toc-section-number">2.2.2</span> 关键设计</a></li>
<li><a href="#主要规则" id="toc-主要规则"><span
class="toc-section-number">2.2.3</span> 主要规则</a></li>
</ul></li>
<li><a href="#up-003-参数字典与基础配置"
id="toc-up-003-参数字典与基础配置"><span
class="toc-section-number">2.3</span> UP-003 参数字典与基础配置</a>
<ul>
<li><a href="#功能说明-2" id="toc-功能说明-2"><span
class="toc-section-number">2.3.1</span> 功能说明</a></li>
<li><a href="#关键设计-2" id="toc-关键设计-2"><span
class="toc-section-number">2.3.2</span> 关键设计</a></li>
</ul></li>
<li><a href="#up-004-审计监控与运维支撑"
id="toc-up-004-审计监控与运维支撑"><span
class="toc-section-number">2.4</span> UP-004 审计监控与运维支撑</a>
<ul>
<li><a href="#功能说明-3" id="toc-功能说明-3"><span
class="toc-section-number">2.4.1</span> 功能说明</a></li>
<li><a href="#关键设计-3" id="toc-关键设计-3"><span
class="toc-section-number">2.4.2</span> 关键设计</a></li>
</ul></li>
</ul></li>
</ul>
</nav>
<h1 data-number="1" id="福建水务营收系统详细设计-统一平台模块正文"><span
class="header-section-number">1</span>
福建水务营收系统详细设计-统一平台模块正文</h1>
<h2 data-number="1.1" id="章节导航精简"><span
class="header-section-number">1.1</span> 章节导航(精简)</h2>
<ul>
<li><a href="#sec-position">文档定位</a></li>
<li><a href="#sec-content">统一平台详细设计正文</a>
<ul>
<li><a href="#mod-up-001">UP-001 统一认证与单点登录</a></li>
<li><a href="#mod-up-002">UP-002 组织用户与权限管理</a></li>
<li><a href="#mod-up-003">UP-003 参数字典与基础配置</a></li>
<li><a href="#mod-up-004">UP-004 审计监控与运维支撑</a></li>
</ul></li>
</ul>
<p><a id="sec-position"></a></p>
<h2 data-number="1.2" id="文档定位"><span
class="header-section-number">1.2</span> 文档定位</h2>
<p>本文档为 <code>01_Detailed_Design.md</code>
中“统一平台详细设计”章节的模块正文拆分稿,便于按模块独立维护。正式交付口径以主详设为准。</p>
<p><a id="sec-content"></a></p>
<h1 data-number="2" id="统一平台详细设计"><span
class="header-section-number">2</span> 统一平台详细设计</h1>
<p><a id="mod-up-001"></a></p>
<h2 data-number="2.1" id="up-001-统一认证与单点登录"><span
class="header-section-number">2.1</span> UP-001 统一认证与单点登录</h2>
<h3 data-number="2.1.1" id="功能说明"><span
class="header-section-number">2.1.1</span> 功能说明</h3>
<p>UP-001 为全系统提供统一身份认证与单点登录能力,支撑 PC
管理端、移动作业端、客户渠道及外部集成应用的统一接入。</p>
<h3 data-number="2.1.2" id="关键设计"><span
class="header-section-number">2.1.2</span> 关键设计</h3>
<ol type="1">
<li>支持用户名密码登录、短信验证码登录、第三方授权登录。</li>
<li>采用 OAuth2.0 + JWT 实现访问令牌签发与会话管理。</li>
<li>对外部系统开放标准认证接口,支持令牌续期与退出失效。</li>
<li>对高敏感操作支持 MFA 二次校验。</li>
</ol>
<h3 data-number="2.1.3" id="业务流程"><span
class="header-section-number">2.1.3</span> 业务流程</h3>
<pre class="mermaid"><code>sequenceDiagram
participant 用户
participant 接入端
participant 认证中心
participant 用户中心
用户-&gt;&gt;接入端: 提交登录信息
接入端-&gt;&gt;认证中心: 发起认证请求
认证中心-&gt;&gt;用户中心: 校验用户/角色/状态
用户中心--&gt;&gt;认证中心: 返回校验结果
认证中心--&gt;&gt;接入端: 返回Token/权限上下文
接入端--&gt;&gt;用户: 登录成功并进入目标系统
</code></pre>
<h3 data-number="2.1.4" id="核心数据"><span
class="header-section-number">2.1.4</span> 核心数据</h3>
<ul>
<li><code>system_users</code>:用户基本信息。</li>
<li><code>system_oauth2_client</code>:客户端信息。</li>
<li><code>system_oauth2_access_token</code>:访问令牌。</li>
<li><code>system_oauth2_refresh_token</code>:刷新令牌。</li>
<li><code>system_login_log</code>:登录审计日志。</li>
</ul>
<p><a id="mod-up-002"></a></p>
<h2 data-number="2.2" id="up-002-组织用户与权限管理"><span
class="header-section-number">2.2</span> UP-002 组织用户与权限管理</h2>
<h3 data-number="2.2.1" id="功能说明-1"><span
class="header-section-number">2.2.1</span> 功能说明</h3>
<p>UP-002
管理组织机构、岗位、角色、菜单、数据权限和用户授权关系,是业务系统权限控制与数据隔离的基础。</p>
<h3 data-number="2.2.2" id="关键设计-1"><span
class="header-section-number">2.2.2</span> 关键设计</h3>
<ol type="1">
<li>支持集团—区域公司—营业所三级及以上组织结构。</li>
<li>基于 RBAC 实现菜单权限、按钮权限、数据权限。</li>
<li>支持多租户/多单位数据隔离与用户归属控制。</li>
<li>敏感操作如账务调整、退款、作废、签章回退必须经过权限校验。</li>
</ol>
<h3 data-number="2.2.3" id="主要规则"><span
class="header-section-number">2.2.3</span> 主要规则</h3>
<ul>
<li>角色权限与组织权限叠加生效。</li>
<li>业务数据默认按所属单位、片区、岗位范围过滤。</li>
<li>超权限查询、批量导出、敏感字段查看需单独授权。</li>
</ul>
<p><a id="mod-up-003"></a></p>
<h2 data-number="2.3" id="up-003-参数字典与基础配置"><span
class="header-section-number">2.3</span> UP-003 参数字典与基础配置</h2>
<h3 data-number="2.3.1" id="功能说明-2"><span
class="header-section-number">2.3.1</span> 功能说明</h3>
<p>UP-003
用于统一维护业务参数、地址参数、水价规则、短信模板、打印模板、字典数据与定时任务参数。</p>
<h3 data-number="2.3.2" id="关键设计-2"><span
class="header-section-number">2.3.2</span> 关键设计</h3>
<table>
<thead>
<tr>
<th>配置类别</th>
<th>典型内容</th>
<th>用途</th>
</tr>
</thead>
<tbody>
<tr>
<td>业务字典</td>
<td>客户类型、抄表方式、工单状态</td>
<td>统一编码与展示</td>
</tr>
<tr>
<td>地址参数</td>
<td>行政区划、片区、册本归属</td>
<td>客户与表务归属管理</td>
</tr>
<tr>
<td>价格体系</td>
<td>用水性质、阶梯水价、污水费规则</td>
<td>开账与账务计算</td>
</tr>
<tr>
<td>渠道参数</td>
<td>支付渠道、短信模板、税控配置</td>
<td>外部接口集成</td>
</tr>
<tr>
<td>任务参数</td>
<td>自动开账、对账、备份周期</td>
<td>运维调度</td>
</tr>
</tbody>
</table>
<p><a id="mod-up-004"></a></p>
<h2 data-number="2.4" id="up-004-审计监控与运维支撑"><span
class="header-section-number">2.4</span> UP-004 审计监控与运维支撑</h2>
<h3 data-number="2.4.1" id="功能说明-3"><span
class="header-section-number">2.4.1</span> 功能说明</h3>
<p>UP-004
提供操作日志、登录日志、接口日志、异常监控、在线用户、任务监控、性能监控等能力。</p>
<h3 data-number="2.4.2" id="关键设计-3"><span
class="header-section-number">2.4.2</span> 关键设计</h3>
<ol type="1">
<li>所有核心业务操作写入统一审计日志。</li>
<li>接口调用成功率、响应时长、异常码进入监控平台。</li>
<li>定时任务执行结果、失败重试与人工补偿过程可追踪。</li>
<li>监控与告警支持短信、邮件、站内信等通知方式。</li>
</ol>
</body>
</html>

BIN
output/11_UP_Detailed.pdf Normal file

Binary file not shown.

View File

@ -0,0 +1,139 @@
---
title: "11_UP_Detailed"
author: "系统设计团队"
date: "2024年12月19日"
documentclass: article
geometry: margin=1in
fontsize: 11pt
mainfont: "PingFang SC"
CJKmainfont: "PingFang SC"
---
---
doc_id: DT-11-UP
doc_role: module_body
authority: secondary
scope: 详细设计-统一平台
source_of_truth: false
last_reviewed: 2026-03-11
retrieval_priority: P1
---
# 福建水务营收系统详细设计-统一平台模块正文
## 章节导航(精简)
- [文档定位](#sec-position)
- [统一平台详细设计正文](#sec-content)
- [UP-001 统一认证与单点登录](#mod-up-001)
- [UP-002 组织用户与权限管理](#mod-up-002)
- [UP-003 参数字典与基础配置](#mod-up-003)
- [UP-004 审计监控与运维支撑](#mod-up-004)
<a id="sec-position"></a>
## 文档定位
本文档为 `01_Detailed_Design.md` 中“统一平台详细设计”章节的模块正文拆分稿,便于按模块独立维护。正式交付口径以主详设为准。
<a id="sec-content"></a>
# 统一平台详细设计
<a id="mod-up-001"></a>
## UP-001 统一认证与单点登录
### 功能说明
UP-001 为全系统提供统一身份认证与单点登录能力,支撑 PC 管理端、移动作业端、客户渠道及外部集成应用的统一接入。
### 关键设计
1. 支持用户名密码登录、短信验证码登录、第三方授权登录。
2. 采用 OAuth2.0 + JWT 实现访问令牌签发与会话管理。
3. 对外部系统开放标准认证接口,支持令牌续期与退出失效。
4. 对高敏感操作支持 MFA 二次校验。
### 业务流程
```mermaid
sequenceDiagram
participant 用户
participant 接入端
participant 认证中心
participant 用户中心
用户->>接入端: 提交登录信息
接入端->>认证中心: 发起认证请求
认证中心->>用户中心: 校验用户/角色/状态
用户中心-->>认证中心: 返回校验结果
认证中心-->>接入端: 返回Token/权限上下文
接入端-->>用户: 登录成功并进入目标系统
```
### 核心数据
- `system_users`:用户基本信息。
- `system_oauth2_client`:客户端信息。
- `system_oauth2_access_token`:访问令牌。
- `system_oauth2_refresh_token`:刷新令牌。
- `system_login_log`:登录审计日志。
<a id="mod-up-002"></a>
## UP-002 组织用户与权限管理
### 功能说明
UP-002 管理组织机构、岗位、角色、菜单、数据权限和用户授权关系,是业务系统权限控制与数据隔离的基础。
### 关键设计
1. 支持集团—区域公司—营业所三级及以上组织结构。
2. 基于 RBAC 实现菜单权限、按钮权限、数据权限。
3. 支持多租户/多单位数据隔离与用户归属控制。
4. 敏感操作如账务调整、退款、作废、签章回退必须经过权限校验。
### 主要规则
- 角色权限与组织权限叠加生效。
- 业务数据默认按所属单位、片区、岗位范围过滤。
- 超权限查询、批量导出、敏感字段查看需单独授权。
<a id="mod-up-003"></a>
## UP-003 参数字典与基础配置
### 功能说明
UP-003 用于统一维护业务参数、地址参数、水价规则、短信模板、打印模板、字典数据与定时任务参数。
### 关键设计
| 配置类别 | 典型内容 | 用途 |
|---|---|---|
| 业务字典 | 客户类型、抄表方式、工单状态 | 统一编码与展示 |
| 地址参数 | 行政区划、片区、册本归属 | 客户与表务归属管理 |
| 价格体系 | 用水性质、阶梯水价、污水费规则 | 开账与账务计算 |
| 渠道参数 | 支付渠道、短信模板、税控配置 | 外部接口集成 |
| 任务参数 | 自动开账、对账、备份周期 | 运维调度 |
<a id="mod-up-004"></a>
## UP-004 审计监控与运维支撑
### 功能说明
UP-004 提供操作日志、登录日志、接口日志、异常监控、在线用户、任务监控、性能监控等能力。
### 关键设计
1. 所有核心业务操作写入统一审计日志。
2. 接口调用成功率、响应时长、异常码进入监控平台。
3. 定时任务执行结果、失败重试与人工补偿过程可追踪。
4. 监控与告警支持短信、邮件、站内信等通知方式。

BIN
output/12_REV_Detailed.docx Normal file

Binary file not shown.

1299
output/12_REV_Detailed.html Normal file

File diff suppressed because it is too large Load Diff

BIN
output/12_REV_Detailed.pdf Normal file

Binary file not shown.

View File

@ -0,0 +1,750 @@
---
title: "12_REV_Detailed"
author: "系统设计团队"
date: "2024年12月19日"
documentclass: article
geometry: margin=1in
fontsize: 11pt
mainfont: "PingFang SC"
CJKmainfont: "PingFang SC"
---
---
doc_id: DT-12-REV
doc_role: module_body
authority: secondary
scope: 详细设计-营收业务
source_of_truth: false
last_reviewed: 2026-03-11
retrieval_priority: P1
---
# 福建水务营收系统详细设计-营收业务模块正文
## 章节导航(精简)
- [文档定位](#sec-position)
- [营收业务详细设计正文](#sec-content)
- [营收模块统一约束](#sec-rev-rules)
- [接口与数据追溯矩阵](#sec-rev-trace)
- [REV-001 客户资料管理](#mod-rev-001)
- [REV-002 抄表开账](#mod-rev-002)
- [REV-003 营业收费](#mod-rev-003)
- [REV-004 账务处理](#mod-rev-004)
- [REV-005 发票与税务处理](#mod-rev-005)
- [REV-006 催缴与通知](#mod-rev-006)
- [REV-007 统计分析](#mod-rev-007)
- [REV-008 代收与银行业务](#mod-rev-008)
- [REV-009 业务参数配置](#mod-rev-009)
<a id="sec-position"></a>
## 文档定位
本文档为 `01_Detailed_Design.md` 中“营收业务详细设计”章节的模块正文拆分稿,便于按模块独立维护。正式交付口径以主详设为准。
<a id="sec-content"></a>
# 营收业务详细设计
<a id="sec-rev-rules"></a>
## 营收模块统一约束
1. `SYS-002` 负责营收主流程,发票、支付结算、消息触达分别通过 `SYS-008``SYS-009``SYS-010` 协同完成,外部系统仅回写结果状态。
2. 账单、收费、发票、代扣等关键状态变更必须通过业务流程驱动,不允许绕过业务校验直接改写主业务对象。
3. 幂等控制遵循接口主键约束:支付以业务订单号为主,发票以申请单号或账单组合为主,代扣以批次号为主,消息以业务事件号为主。
4. 账务调整、发票申请、催缴触达、银行批次下发等关键动作必须写入操作留痕,满足审计与问题追踪要求。
5. 数据口径统一采用 `biz_*``bk_*` 命名体系,历史命名仅用于追溯,不作为本章节正式设计口径。
<a id="sec-rev-trace"></a>
## 接口与数据追溯矩阵
> 说明:详细字段与报文以 `../03_Technical_Design/03_Interface_Design.md` 为准,数据库字段口径以 `../03_Technical_Design/01_Database_Design.md` 为准。
| REV 模块 | 关键接口 | 核心数据域(摘要) | 主要协同对象 |
|---|---|---|---|
| REV-001 客户资料管理 | `IF-REV-001` | `biz_cust``biz_account``biz_cust_*` | 客户服务模块、报装模块 |
| REV-002 抄表开账 | `IF-REV-004``IF-REV-005` | `biz_meter_book``biz_meter_read``biz_reading_*``biz_charge*` | 抄表APP、物联网集抄 |
| REV-003 营业收费 | `IF-REV-006` | `biz_charge*``biz_collection``bk_transaction*` | `SYS-009` |
| REV-004 账务处理 | `IF-REV-007` | `biz_charge*``biz_operat_log*` | 财务与营业人员 |
| REV-005 发票与税务处理 | `IF-REV-008` | `biz_invoice*``biz_cust_invoice` | `SYS-008` |
| REV-006 催缴与通知 | `IF-REV-013` | `biz_charge*`、催缴结果留痕 | `SYS-010` |
| REV-007 统计分析 | `IF-REV-010` | 客户、抄表、收费、渠道聚合对象 | 统计分析端 |
| REV-008 代收与银行业务 | `IF-REV-011` | `bk_withholding_*``bk_reconcile_*``bk_settlement_*` | `SYS-009`、银行 |
| REV-009 业务参数配置 | `IF-REV-012` | `biz_parameter_settings``biz_page_settings*``biz_price_*` | 统一平台、营收模块 |
<a id="mod-rev-001"></a>
## REV-001 客户资料管理
### 功能说明
负责客户主档、账户主档、联系人、客户分组、客户与水表关系、客户开票信息、客户渠道绑定及托收/代扣关系维护,是抄表、收费、发票、代扣等后续业务的主数据基础。
### 关键设计
1. 客户建档覆盖立户、变更、更名、过户、销户、报停等全生命周期处理。
2. 客户资料支持按客户类型、用水性质、片区、集团客户、重点客户等维度管理。
3. 客户与水表、开票主体、托收/代扣签约关系按关联表维护,避免在主表中堆叠多类属性。
4. 客户编号、集收标记、计划用水方案等规则类数据由统一配置与客户关系表共同支撑。
### 核心数据
- `biz_cust`:客户主档。
- `biz_account`:客户账户与账户状态。
- `biz_cust_contact`:联系人及联系方式。
- `biz_cust_group`:客户分组。
- `biz_cust_meter`:客户与水表绑定关系。
- `biz_cust_invoice`:客户开票信息。
- `biz_cust_app_binds`:渠道绑定关系。
- `biz_cust_collection_rel`:客户托收关系。
- `biz_cust_withholding_rel`:客户代扣关系。
- `biz_cust_water_use_scheme``biz_cust_water_scheme_rel`:客户计划用水方案关系。
- `biz_cust_no_rule`:客户编号规则。
- `biz_cust_hub_marks`:集收号/集收标记关系。
### 迁移补充(旧系统承接)
#### 定额共享
- 旧系统在“客户资料”下提供定额主客户、子客户绑定与共享清单管理能力。
- 当前正式设计不新增并行主模型,统一归入客户与计划用水方案关系对象承接。
- 迁移时必须至少保留主客户、子客户、绑定状态、生效时间、解除时间、备注与操作留痕,确保共享清单可查询、可解绑、可追溯。
#### 定额核定
- 旧系统支持对已建立共享关系的客户执行定额核定、撤销核定和共享清单联查。
- 当前建议以客户关系对象和计划用水方案关系为主承接核定结果,不额外发明独立账务主表。
- 核定结果迁移后应支持按客户、站点、核定状态、核定时间查询,并保留核定依据、操作人和变更留痕。
#### 批量修改
- 旧系统已形成“手工修改 + 模板导入修改”的双模式客户资料维护能力。
- 当前正式设计应将其视为客户主数据治理能力的一部分,而不是临时导入工具。
- 迁移时需明确三类口径:可批量修改字段范围、导入模板校验规则、批量修改审计留痕;历史批量修改结果至少需保留任务来源、修改字段、执行结果和失败原因。
### 接口映射
- `IF-REV-001`:客户档案、账户状态、联系人与水表绑定关系查询。
- `IF-CS-001``IF-CS-002`:客户服务侧账户绑定与信息查询场景复用客户域数据。
### 落地边界
- **已落地**:客户主档、账户、联系人、分组、绑定、开票、托收/代扣关系。
- **部分落地**:客户扩展关系、集收与规则类对象已见明确关系表,但具体业务场景仍需结合流程进一步细化。
- **文档先行**:主副卡、部分复杂客户关系对象在当前 backend 中未见完全独立表族,文档中仅保留业务对象表述。
<a id="mod-rev-002"></a>
## REV-002 抄表开账
### 功能说明
负责抄表计划、册本管理、抄表录入、抄表状态跟踪、异常复核、计费计算与账单生成,是营收核心处理链路的起点。
### 业务流程
```mermaid
flowchart TD
A[制定抄表计划] --> B[生成抄表册本]
B --> C[分配抄表任务]
C --> D[人工/远传/自报抄表]
D --> E[数据校验]
E --> F{是否异常}
F -->|是| G[异常复核处理]
F -->|否| H[生成开账数据]
G --> H
H --> I[按价格模板与费用组成计费]
I --> J[生成营业账与明细]
J --> K[账单审核确认]
K --> L[进入收费/催缴/开票]
```
### 关键规则
1. 抄表数据同时校验本次读数、上次读数、用量波动和抄表状态,只有通过校验或完成异常复核的数据才能进入开账。
2. 异常抄表支持估抄、补抄、重录、人工复核;异常处理的目标是形成可继续开账或明确阻断的统一结论,而不是绕开开账规则单独落账。
3. `IF-REV-005` 的正式边界是“抄表校验完成后的账单生成”,不负责收费核销、发票开具、催缴执行和统计分析。
4. 开账计费按价格归属、价格模板、费用组成、阶梯规则、计划用水方案综合计算;价格配置缺失、费用组成不完整或规则冲突时,必须阻断生成并返回失败原因。
5. 账单生成结果统一由 `biz_charge``biz_charge_detail` 承接:主表表达客户、账期、应收日期、账单总金额和主状态,明细表表达费用组成、用量、单价和明细金额。
6. 特殊开账、无码客户开账、罚款类开账等非标准来源,仍纳入同一营业账主明细模型承接,通过来源类型、业务类型、依据说明和操作留痕区分,不单独扩展平行账表。
7. 审核通过后的营业账方可进入收费、催缴和发票流程;后续链路只能消费已生成账单结果,不反向改变本接口的生成边界。
8. 远传抄表数据可由 `SYS-006` / IoT 能力提供采集支撑,但账单生成仍归属 SYS-002。
### 开账触发与结果表达
- 触发前提:正式口径下可按抄表批次、指定客户范围或指定抄表任务范围组织生成;当前 backend 已落地的入口为按 `readingDataIds` 批量复核并开账,对应 `ChargeController.generateCheckChargeBatch``ChargeServiceImpl.generateCheckChargeBatch``ReadingDataServiceImpl.batchReCheckReadingData`
- 规则来源:价格归属决定客户适用的价格口径;价格模板、阶梯规则、费用组成和计划用水方案共同决定营业账主表金额与明细拆分方式。
- 当前承接证据:`ChargeServiceImpl.generateSingleChargeWithCache` 成功路径会写入 `biz_charge` 主表、循环写入 `biz_charge_detail` 明细,并回写抄表数据开账状态,说明现有实现已具备“按抄表数据 ID 生成营业账主明细”的 backend 基础。
- 结果表达:正式 `IF-REV-005` 应返回成功清单、失败清单、生成汇总及主明细级结果;当前 backend 返回仍为“本次复核成功X条 / 本次开账成功Y条”的字符串拼接尚未形成结构化成功/失败结果对象。
- 阻断与限制:价格模板不存在、费用调整配置缺失、结算方式非 `ACTUAL_USAGE` 等场景当前会直接阻断单条生成;其中固定水量、按人口数、最低消费等非实际水量结算方式仍未纳入当前实现。
- 下游边界:`REV-002` 只负责生成营业账结果并交由后续审核/收费链路消费,不在本章节扩展收费核销、发票申请或催缴执行细节。
### 核心数据
- `biz_meter_book`:册本与抄表计划。
- `biz_meter_read`:抄表任务状态/执行状态。
- `biz_reading_data`:抄表数据。
- `biz_last_reading`:上次抄表结果。
- `biz_reading_logs`:抄表日志与过程留痕。
- `biz_meter`:计量水表主档引用。
- `biz_charge`:营业账主表。
- `biz_charge_detail`:营业账明细。
- `biz_price_category`:价格归属。
- `biz_price_template`:价格模板。
- `biz_price_adjustment_snap`:调价快照。
- `biz_price_tier_adjustment`:阶梯规则。
- `biz_cost_component`:费用组成。
- `biz_water_use_scheme``biz_water_use_scheme_tier`:计划用水方案与阶梯。
### 迁移补充(旧系统承接)
#### 特殊开账
- 旧系统支持在非标准客户、无码客户或罚款类场景下直接开账。
- 新系统仍以 `biz_charge``biz_charge_detail` 作为开账结果承载对象,不建议额外平行建设“特殊开账账表”。
- 迁移与新建场景均需保留特殊开账来源、业务类型、经办人、依据说明、打印状态与后续收费关联,避免与普通抄表开账混淆。
#### 开账记录迁移
- 旧系统“开账记录”是历史查询与账务核对的核心入口,必须纳入迁移最小保留集。
- 迁移后的开账记录应至少支持按站点、账务年月、册本、客户、抄表员、欠费状态查询,并支持统计水量、总金额及费用构成。
- 对已收费、已作废、销户拆表、特殊开账等旧状态,不要求照搬旧表结构,但必须保留可对照的新状态映射关系。
### 接口映射
- `IF-REV-004`:抄表数据提交与异常标记。
- `IF-REV-005`:账单生成与开账结果返回。
- `IF-METER-004`:远传抄表数据接收后进入开账流程。
### 落地边界
- **已落地**:册本、抄表数据、上次抄表、抄表日志、营业账主明细、价格模板与阶梯规则。
- **部分落地**:部分异常场景对象可能仍通过状态字段和日志表承载,而非全部拆成独立业务表。
- **文档先行**:个别精细稽查、轨迹、下载同步对象当前未在本轮映射中确认为独立表。
<a id="mod-rev-003"></a>
## REV-003 营业收费
### 功能说明
支持柜台收费、预存款/余额抵扣、线上缴费回写、柜面扫码、营业网点收费及收费凭证管理,统一承接营收账单的核销处理。
### 业务流程
```mermaid
flowchart TD
A[查询客户及待缴账单] --> B[选择账单与核销方式]
B --> C[选择支付渠道]
C --> D{支付方式}
D -->|柜台现金/POS/扫码| E[现场收费]
D -->|微信/支付宝/聚合支付| F[渠道下单]
D -->|预存款/余额抵扣| G[账户余额核销]
E --> H[更新营业账状态]
F --> I[等待异步回调确认]
G --> H
I --> H
H --> J[生成收费记录与凭证]
J --> K[进入发票/对账流程]
```
### 关键规则
1. 一次缴费可对应多个账单或账单明细的组合核销。
2. 收费记录必须保留渠道、流水号、网点、操作员、终端信息。
3. 线上支付必须以回调或查询确认结果为准,不得以发起状态直接记账。
4. 支付能力由 `SYS-009` 提供SYS-002 负责账单核销与业务状态回写。
5. 当前实现侧已确认 `PayCeb` 的欠费查询、缴费处理基础闭环可用,但代理收费对账仍为预留能力;正式文档不得将实时收费对账写成已闭环能力。
### 核心数据
- `biz_charge``biz_charge_detail`:待缴与已缴账单主明细。
- `biz_collection`:托收/代收主表。
- `biz_withholding`:代扣/托收主表。
- `bk_transaction`:渠道交易流水。
- `bk_transaction_callback`:支付回调记录。
- `bk_transaction_exception`:支付异常记录。
### 迁移补充(旧系统承接)
#### 柜台结账
- 旧系统将“柜台收费”和“柜台结账”拆分为两个菜单,结账阶段包含未结/已结查询、结账红冲、追加抄表和打印动作。
- 当前设计可继续采用统一收费核销模型,但必须补出“收费记录 → 班结结果 → 打印/红冲/查询”的业务闭环,避免柜面日终处理缺口。
- 迁移时需保留结账时间、结账人、网点、收费汇总口径和结账后红冲痕迹,保证财务对账与审计连续。
#### 账单打印服务
- 旧系统存在账单打印、补打、打印次数控制与打印记录查询能力。
- 新系统不要求单独建立打印主模块,但必须明确打印模板、补打权限、打印状态与打印留痕的承接关系。
- 对历史账单迁移,应允许基于账单主明细和打印配置恢复打印视图,避免割接后只能查账不能补打。
#### 红冲记录
- 旧系统支持红冲记录查询、导出与明细展开,是收费差错追溯的重要入口。
- 当前设计可将红冲视为收费核销后的修正场景,不强制要求独立实体表,但必须提供历史只读查询口径。
- 红冲迁移最小保留信息应包括原收费记录、红冲时间、红冲金额、原因、经办人、关联账单和后续账务状态。
### 接口映射
- `IF-REV-006`:创建收费记录、执行账单核销并回写状态。
- `IF-CS-003``IF-CS-007`:客户渠道与柜面扫码支付场景复用收费核销链路。
### 落地边界
- **已落地**:营业账主明细、交易流水、回调、异常、托收/代扣主对象。
- **部分落地**:柜台班结、部分收费汇总类对象可能通过业务流程与报表实现,不一定存在独立表。
- **文档先行**:部分红冲、实时收费汇总类台账暂不表述为已确认独立实体表。
<a id="mod-rev-004"></a>
## REV-004 账务处理
### 功能说明
REV-004 一期仅覆盖水量调整、金额调整、退款、冲正、坏账申请五类场景,统一挂靠 `IF-REV-007` 作为账务处理入口,目标是在既有正式文档体系内先收敛范围、承接口径、留痕要求与审批边界。
本阶段按“共性能力先统一、场景能力再分批”组织:先统一账单承接、原交易校验、结果表达、操作留痕与审批边界,再分别展开五类场景。违约金减免、分账调整、价差调整、跨周期水量、预存退款细表等内容仅作为旧系统迁移语义或后续扩展参考,不作为一期新增独立范围。
### 业务流程
```mermaid
flowchart TD
A[发起账务调整申请] --> B[校验账单状态与权限]
B --> C{是否通过}
C -->|否| D[驳回并记录原因]
C -->|是| E[执行重算或退款冲正]
E --> F[更新账单与明细状态]
F --> G[写入操作日志与审批留痕]
G --> H[返回处理结果]
```
### 关键规则
1. 一期场景严格限定为水量调整、金额调整、退款、冲正、坏账申请,不扩展到其他接口族或独立账务台账重构。
2. 所有场景均以 `biz_charge` / `biz_charge_detail` 为主承接对象,并通过 `biz_operat_log` / `biz_operat_log_detail` 记录处理依据、前后变化和责任归属。
3. 退款、冲正必须联动 `bk_transaction``bk_transaction_callback``bk_transaction_exception` 等原支付流水及渠道状态校验,不允许仅依据账单状态直接处理。
4. 接口结果统一返回 `resultStatus``writeBackStatus`,其中 `resultStatus` 表示处理结论,`writeBackStatus` 表示账单状态回写结论,两者不得混用。
5. 审批相关内容一期仅保留 `approvalRequired``PENDING_APPROVAL` 与审批边界说明,不展开完整 BPM 流程、节点、流转规则或审批回写实现细节。
6. 对于当前未见明确独立实体表的特账、跨周期水量、退款账等对象,文档以“业务处理场景”表述,不强行落为已实现表。
### 核心数据
- `biz_charge``biz_charge_detail`:账务调整的核心对象,承接调整前后账单主明细状态。
- `bk_transaction``bk_transaction_callback``bk_transaction_exception`:退款、冲正场景的原交易校验与异常追溯对象。
- 价格调整/优惠相关表:用于重算账单或差额追溯。
- `biz_operat_log``biz_operat_log_detail`:操作与变更留痕,记录字段差异、处理说明、附件依据与责任归属。
### 主要场景
| 场景 | 说明 | 控制要点 |
|---|---|---|
| 水量调整 | 更正异常水量 | 需复核原因、附件和原抄表依据 |
| 金额调整 | 更正账单金额 | 需记录依据、差异金额和审批边界 |
| 退款 | 退回客户支付资金或预存款 | 需校验原交易、退款余额与幂等性 |
| 冲正 | 修正误收/误核销记录 | 需关联原交易与账单状态 |
| 坏账申请 | 对长期欠费进行分类处理 | 需结合账龄、客户状态与审批边界 |
### 迁移补充(旧系统承接)
| 旧账务对象 | 当前承接方式 | 迁移口径 |
|---|---|---|
| 预存退款 / 预存退款详情 | 作为账务处理场景承接 | 保留申请单、原支付引用、退款结果与审批留痕 |
| 已销调整汇总 / 明细 | 作为已收费后修正场景承接 | 保留原账单、调整原因、前后差异、处理结果 |
| 价差调整汇总 / 明细 | 作为重算与差额修正场景承接 | 保留原价格口径、新价格口径、差额和生效时间 |
| 分账调整汇总 / 明细 | 作为费用组成重分摊场景承接 | 保留原分摊结果、调整后结果、责任人和审批链 |
| 账单-违约金减免 | 作为滞纳金修正场景承接 | 保留减免原因、减免金额、审批结果和生效时间 |
| 账单-呆坏账 | 作为坏账申请与生效场景承接 | 保留账龄、申请原因、审批结果、核销状态 |
1. P0 阶段不要求为每一类旧账务台账都新增独立实体表,但必须在业务对象和历史查询层形成可追溯闭环。
2. 旧系统精细台账迁移后至少保留:原单据标识、原账单标识、处理类型、处理原因、处理前后金额/水量、申请/审批/生效时间、经办人与附件依据。
3. 与支付、发票、渠道回调强关联的处理场景,必须保留与原交易、原发票、原收费记录的关联关系,避免后续对账和审计断链。
### 接口映射
- `IF-REV-007`:账务调整、退款、冲正、坏账等处理入口。
- `IF-REV-006`:与收费核销状态联动,确保调账后账单状态一致。
### 落地边界
- **已落地**:营业账主明细、操作日志、价格/方案相关重算支撑。
- **部分落地**:精细化账务对象更多表现为流程与场景,并未在 backend 中全部体现为独立表族。
- **文档先行**:特账、退款账、跨周期水量等对象保留业务语义,不宣称为已实现独立表。
<a id="mod-rev-005"></a>
## REV-005 发票与税务处理
### 功能说明
负责发票业务闭环的业务接入与状态落账,覆盖后台发票申请、开票校验、`SYS-008` 异步协同、查询兜底、结果回写、账单关联、客户侧已开票电子发票查询/下载/推送,以及后台作废与红冲处理。
### 业务流程
```mermaid
flowchart TD
A[后台提交发票申请] --> B[校验账单、客户开票信息、税率与限额]
B --> C{是否满足开票条件}
C -->|否| D[返回不可开票原因]
C -->|是| E[生成申请单号并写入SUBMITTED]
E --> F[调用SYS-008发起异步开票]
F --> G[记录受理号并转为PENDING]
G --> H[系统轮询或后台查询兜底]
H --> I{开票结果}
I -->|成功| J[回写SUCCESS并更新账单-发票关联]
I -->|失败| K[回写FAIL并记录失败原因]
J --> L[客户侧查询/下载/推送电子发票]
```
### 状态说明
- `SUBMITTED`:后台申请已受理,已完成本地校验并生成申请单。
- `PENDING`:已提交 `SYS-008`,等待异步结果或查询补偿结果。
- `SUCCESS`:已取得有效发票代码、号码或电子票地址,且账单关联已完成更新。
- `FAIL`:开票失败,需保留失败原因、最近查询结果与后续人工核查依据。
- `INVALID`:发票已作废,作为后续能力预留状态。
- `RED_INK`:发票已红冲,作为后续能力预留状态。
### 关键规则
1. 一期采用“后台申请开票 + 客户侧查询下载推送”的入口模式,客户侧不直接发起开票申请。
2. 发票申请以客户信息、已收费未开票账单、税率配置和开票限额为基础;原始单账单不支持直接任意部分金额开票。
3. 个人与企业开票均通过客户开票信息与税率表完成合法性校验;如需多张发票,沿用拆账/分账后的账单分别开票口径。
4. `SYS-008` 采用“异步申请 + 查询兜底”模式,成功状态不得被后续失败查询结果覆盖。
5. 电子发票仅在 `SUCCESS` 且存在票据文件地址时允许客户侧下载或推送。
6. 发票作废、红冲仍由 `SYS-008` 统一承接税控侧处理,`SYS-002` 负责后台触发入口、状态校验、查询补偿、结果落账与日志留痕;当前轮次按二期范围补齐 backend 实现入口。
### 后台申请入口与校验补充
- 后台支持营业收费员、财务人员按单笔或批量已收费账单发起开票申请。
- 申请时至少校验:账单收费状态、开票状态、客户开票信息完整性、票种适配性、开票限额、账单集合是否属于同一客户。
- 企业抬头场景重点校验纳税人识别号;电子发票场景重点校验邮箱/手机号;不满足条件时直接返回不可开票原因。
- 申请成功后生成申请单号并进入 `SUBMITTED/PENDING` 状态流转,失败校验场景不进入外部协同。
- 幂等控制以 `applicationNo``custId + chargeIds` 为主,避免相同账单组合重复申请。
### SYS-008 异步协同与查询补偿
- 本地申请校验通过后,`SYS-002` 先写入 `biz_invoice` 申请记录,再向 `SYS-008` 发起异步开票请求,并记录 `sysRequestNo` 作为后续查询与回写的协同主键。
- `SYS-008` 返回“已受理”后,发票状态转为 `PENDING`;若仅完成本地受理但尚未拿到受理号,则保留 `SUBMITTED` 并进入待补偿查询状态。
- 查询补偿采用“回写优先、主动查询兜底”原则:`IF-EXT-007` 回写为首选结果来源,后台人工查询与系统定时补偿查询共用同一结果落账逻辑。
- 系统补偿查询至少保留最近查询时间、下次计划查询时间、累计查询次数、最近一次返回结果摘要与异常原因,便于问题追踪和人工核查。
- 后台按申请单号或受理号触发查询时,应同步刷新查询上下文;查询仍未取得终态时,仅更新补偿上下文,不得伪造成功或失败结论。
### 终态保护与异常核查
- `SUCCESS` 属于正常开票闭环终态,一旦已取得有效发票代码、发票号码或电子票据地址,后续失败查询结果不得覆盖成功状态。
- `FAIL` 仅在 `SYS-008` 明确返回失败结论或多次补偿查询确认失败时写入,并同步保留失败原因、最近查询结果与人工核查依据。
- 当后台人工查询、系统补偿查询与外部回写结果不一致时,应以最新有效外部凭据为准,并记录差异说明,不允许直接覆盖既有成功票据关键信息。
- 每次提交协同、主动查询、状态变更和异常分支均应写入操作留痕,确保能够追溯责任人、触发来源、状态前后值与异常说明。
### 结果回写、账单关联与客户侧消费
- `IF-EXT-007` 回写成功结果时,除更新 `biz_invoice.invoice_status``invoice_code``invoice_number``file_url` 外,还应同步刷新账单快照、账单关联状态与推送状态初值。
- 账单关联以 `biz_invoice.charge_id` + `charge_ids_snapshot` 记录本次开票覆盖账单集合,并同步把对应 `biz_charge.invoice_state` 更新为“开票完成”,保留失败原因与开票时间,便于账单明细、收费记录和客户侧结果统一展示。
- 客户侧查询仅允许按本人 `custId` 访问已存在的发票记录;可通过 `invoiceId``applicationNo``sysRequestNo` 定位,但都必须命中同一客户名下记录。
- 客户侧下载与推送前必须校验发票状态为 `SUCCESS``fileUrl` 非空;不满足条件时仅返回不可下载/推送原因,不得伪造文件地址。
- 推送动作应记录推送渠道、目标邮箱/手机号与结果状态;成功后更新 `pushStatus=PUSHED`,失败则写入 `FAIL` 并保留失败原因供人工处理。
### 核心数据
- `biz_invoice`:发票主记录。
- `biz_invoice_taxrate`:税率配置。
- `biz_cust_invoice`:客户开票信息。
### 迁移补充(旧系统承接)
- 旧系统数据字典中存在“发票明细表、营业账开票表、开票配置表”等更细粒度对象。
- 当前正式设计已明确主承接对象为 `biz_invoice``biz_invoice_taxrate``biz_cust_invoice`,但迁移时不能忽略旧开票明细和账单关联关系。
- P0 阶段建议先补三类迁移口径:账单与发票的关联关系、发票申请与结果回写记录、开票配置与税率的有效期;未确认已落地的细表对象仍按“历史只读或辅助映射”处理。
### 接口映射
- `IF-REV-008`:后台发票申请接口,负责单笔/批量申请、幂等控制与受理号生成。
- `IF-REV-009`:发票结果查询接口,负责后台按申请单号/受理号查询以及系统补偿查询。
- `IF-CS-004`:客户侧电子发票消费接口,负责已开票结果查看、下载、推送。
- `IF-EXT-007`:发票结果回写协同接口(由发票服务侧回传)。
### 落地边界
- **已落地**:发票主记录、税率配置、客户开票信息,以及一期正常开票闭环所需的后台申请、查询兜底、结果回写、账单关联与客户侧电子发票消费能力。
- **部分落地**:发票修改、开票过程留痕在后端中已有相关对象,但整套发票明细/批次类对象尚未全部确认。
- **二期补齐**:发票作废、红冲及其查询补偿仍由 `SYS-008` 统一承接,但当前轮次补齐后台触发入口、状态流转、结果回写与日志留痕,不再仅停留于文档预留。
- **文档先行**:发票明细、营业账开票关系等对象仍按设计能力描述,不表述为本轮已确认独立表。
<a id="mod-rev-006"></a>
## REV-006 催缴与通知
### 功能说明
针对欠费账单按账龄、金额、客户类别等规则生成催缴任务,通过短信、微信、站内通知等方式触达客户,并回写催缴结果;本模块同时定义催缴与停复水/工单处置之间的联动边界与追溯关系,但不展开停复水内部处置流程。
### 业务流程
```mermaid
flowchart TD
A[生成欠费客户清单] --> B[按策略分组催缴任务]
B --> C[触发IF-REV-013生成催缴任务]
C --> D[调用IF-EXT-008协同SYS-010]
D --> E[接收发送结果回写]
E --> F[更新催缴状态与后续策略]
F --> G[按联动边界挂接停复水/工单处置]
```
### 关键规则
1. 催缴策略以营业账状态、欠费金额、账龄分布、客户类别和渠道偏好为基础,支持按策略编码进行任务分组与频控。
2. 自动催缴与人工催缴可并行;自动任务用于常规批量催缴,人工任务用于补发、核查或例外处置。
3. `SYS-002` 负责催缴对象筛选、任务生成、业务事件编号、结果承接与历史查询;`SYS-010` 负责短信、微信公众号、站内信等触达执行与结果回传。
4. `REV-006` 正式结果状态固定为 `PENDING``SUCCESS``FAIL``MANUAL_VERIFIED` 四态,其中 `MANUAL_VERIFIED` 仅用于外部结果未定或需人工核查补记的场景。
5. 停复水在本模块中仅定义联动触发条件、处置引用与追溯关系,不展开停复水内部审批、派工或现场执行流程。
6. 当前后端中部分催缴汇总、停水明细对象未确认独立落表,文档中保持保守描述,不误写为已确认在线主表。
#### 催缴对象筛选、排除与频控边界
- `IF-REV-013` 任务生成前必须完成候选筛选,筛选最小维度为:欠费状态、欠费金额、账龄分组、客户类别、渠道偏好和策略编码。
- 候选对象必须以有效欠费账单为前提;以下场景不得进入正式催缴任务:已收费核销、已作废、已进入不允许催缴的处置流程、策略规则未命中。
- 触发类型按 `triggerType` 区分自动与人工;自动用于批量触发,人工用于补发、核查和例外补记,不改变正式接口编号与状态语义。
- 频控以“同客户/同策略/同渠道/同账期窗口”为最小拦截单元;命中频控时允许部分阻断,并返回被跳过对象及原因摘要。
### 核心数据
- `biz_charge``biz_charge_detail`:催缴对象来源。
- 催缴结果与通知日志:通过业务状态与消息结果联动留痕。
#### 催缴对象与规则摘要
- `Reminder Candidate`:由欠费账单、客户类别、账龄分组、欠费金额、联系方式集合和命中策略编码组成,是催缴任务的输入对象。
- `Reminder Strategy`:定义账龄规则、金额规则、客户类别规则、渠道优先级、重复触达拦截窗口和是否触发后续处置关注。
- `Reminder Task`:一次正式催缴执行单元,至少包含 `taskNo``eventNo``strategyCode``channelType``triggerType``status` 和关联账单信息;正式业务接口编号固定为 `IF-REV-013`
- `Reminder Result`:承接 `IF-EXT-008` 回传结果后由业务侧映射的正式四态结果,最少记录 `status``lastCallbackTime``failReason` 与回传摘要。
- `Disposal Link`:用于记录催缴结果与停水、复水、工单或人工跟进之间的关联引用,只承担追溯职责,不替代下游业务对象。
#### 四态与人工核查边界
- `PENDING`:已生成任务并完成外部受理或等待外部终态回传,尚未形成业务终态。
- `SUCCESS`:外部触达结果明确成功,且业务侧已完成结果承接。
- `FAIL`:外部返回明确失败或业务判定失败,必须记录失败原因。
- `MANUAL_VERIFIED`:仅用于外部结果长期未定、人工核查补记或例外核销说明场景;必须留存核查说明与核查人。
- 人工核查是状态收口手段,不得用于绕过候选筛选、排除条件或频控约束。
### 迁移补充(旧系统承接)
#### 催缴记录
- 旧系统支持催缴记录查询、导出和明细展开,记录中包含推送内容、号码、方式、结果等信息。
- 新系统可继续以消息协同结果和账单状态联动承接,但必须明确催缴记录查询口径,而不能仅保留“已发送/未发送”状态。
- 历史查询最少保留客户号、账期、催缴方式、发送对象、发送时间、执行结果、关联账单、关联处置引用等字段,并兼容四态结果或其历史映射值。
- 历史催缴记录按只读口径承接,作为查询与追溯来源,不反推为已确认在线主表。
#### 停水记录
- 停水记录不是孤立账务对象,应由催缴结果、业务处置和现场执行工单共同形成闭环。
- 迁移后需支持按客户、站点、停水原因、停水时间、复水状态查询,并能追溯到对应欠费账单和工单执行结果。
- 正式设计只定义“何时建立联动、如何保存处置引用、如何追溯关联结果”,不在 `REV-006` 中展开停复水内部流程设计。
- 停复水关联以 `Disposal Link` 的处置引用承接,最少包含任务号、处置类型、处置引用号和建联时间。
#### 预存短信
- 旧系统对预存款余额不足客户提供短信推送和发送记录查询。
- 新系统建议将其纳入催缴与通知统一策略,不再单建平行模型,但必须保留触发条件、发送内容、发送结果和补发记录。
- 该类记录与催缴记录一样,按历史只读口径承接,不表述为新增同名在线主表。
### 接口映射
- `IF-REV-013`:催缴任务生成、任务查询与结果承接接口,负责业务侧任务生成、四态状态维护和历史查询挂接。
- `IF-EXT-008`:消息协同结果回写接口(由 `SYS-010` 协同)。
### 落地边界
- **已落地**:以营业账为基础的欠费识别前提数据、催缴对象来源字段和消息协同边界约束。
- **部分落地**:催缴登记汇总、停水汇总等对象暂未在 backend 中确认独立表,当前以业务事件、操作留痕和历史查询口径承接。
- **文档先行**:复杂催缴台账、停复水统计和人工核查界面仅作为业务场景保留,不表述为 backend 已完成能力。
<a id="mod-rev-007"></a>
## REV-007 统计分析
### 功能说明
提供营收、抄表、收费、欠费、渠道、客户等多维度统计查询能力,为经营分析、业务监管和迁移核查提供统一的数据口径支撑;本模块以经营查询为主,不扩展到预测分析、专题大屏或独立 BI 平台实现。
### 关键设计
1. 统计查询按“主题 + 维度 + 指标”三层口径组织,避免仅以报表名称堆砌需求。
2. 主题范围至少包括营收汇总、收费与实收统计、欠费规模与账龄统计、客户结构统计、渠道交易统计、抄表完成率统计以及营收相关业务概览类摘要。
3. 查询维度至少包括时间区间、账期、营业所/片区、客户类别、渠道、客户/账户、状态等,并支持必要的分组汇总。
4. 指标口径需明确区分应收金额、实收金额、欠费余额、账单数、客户数、交易笔数、渠道占比、抄表完成率等相近但不等价的统计概念。
5. 导出与查询结果受数据权限控制;导出属于查询扩展能力,但不在本轮展开具体导出实现细节。
6. 重点查询可按聚合视图、汇总口径或预聚合结果承接,但不将未确认存在的统计表、专题分析表或离线数仓对象写成已实现事实。
### 核心数据
- 客户维度:`biz_cust``biz_account`
- 抄表维度:`biz_meter_book``biz_reading_data``biz_last_reading`
- 账务与收费维度:`biz_charge``biz_charge_detail`
- 收费与交易维度:`biz_collection``bk_transaction`
- 渠道维度:`bk_transaction``bk_payment_channel`
- 组织与权限维度:`system_dept`、数据权限控制结果。
#### 统计主题与口径摘要
- `Statistics Theme`:按经营主题组织查询,至少覆盖营收、收费、欠费、客户、渠道、抄表完成率和必要的业务概览。
- `Statistics Dimension`:按时间、账期、营业所/片区、客户类别、渠道、客户/账户、状态等条件筛选或分组。
- `Statistics Indicator`:至少明确应收金额、实收金额、欠费余额、账单数、客户数、交易笔数、渠道占比、完成率等指标含义和单位。
- `Aggregation Source`:统计结果以现有在线主数据聚合、视图或汇总口径承接,不反推为已存在独立统计表族。
### 接口映射
- `IF-REV-010`:营收、收费、欠费、渠道、客户等统计查询接口,承接主题查询、维度筛选、指标汇总和权限/导出边界。
### 落地边界
- **已落地**:主要统计源数据在客户、抄表、账单、收费、交易和渠道等领域均已具备,足以支撑经营统计口径设计。
- **部分落地**:部分统计结果可能依赖聚合视图、汇总查询或报表层实现,当前未见明确的 backend 统计控制器或独立统计模型入口。
- **文档先行**预测类、专题分析类深度模型、BI 大屏和独立数仓能力暂不写成后端已实现能力。
<a id="mod-rev-008"></a>
## REV-008 代收与银行业务
### 功能说明
支持银行代收、银行代扣、实时收费、夜间批量扣款、对账与结算处理,是 SYS-002 面向 `SYS-009` 支付与银行结算能力的业务承接模块。
### 业务流程
```mermaid
flowchart TD
A[生成代扣批次] --> B[校验签约与待扣账单]
B --> C[调用IF-REV-011下发批次]
C --> D[SYS-009对接银行处理]
D --> E[回写扣款结果]
E --> F[执行对账与差异识别]
F --> G{差异是否已处理}
G -->|否| H[进入人工补偿]
G -->|是| I[确认结算并更新状态]
```
### 关键规则
1. 渠道、路由、接口配置、签约、交易、回调、异常、对账、结算形成完整银行业务链条。
2. 实时收费场景由渠道交易流水驱动账单核销,批量代扣场景由签约关系与批次处理驱动。
3. 对账结果区分一致、长款、短款、失败待处理等状态,支持差异追踪与人工补偿。
4. 国密报文、批量文件、标准 API 等技术细节由 `SYS-009` 承载SYS-002 保留业务规则与状态协同。
5. 当前 backend 已确认 `BankWithholding` 六条银行入口(客户状态查询、送盘、送盘状态查询、取消送盘、回盘、回盘状态查询)已形成最小实现态闭环;`BankCollection` 平行链路、对账与结算协同仍以“部分实现或文档先行”表述,不得统一写成已闭环能力。
6. 银行代扣文件传输配置按“默认规则 + 银行通道覆盖 + 租户覆盖 + 租户-银行通道覆盖”建模,命中优先级固定为 `TENANT_CHANNEL > TENANT > CHANNEL > DEFAULT`
7. 目录字段至少区分 `send/back/reconcile/archive/localTemp` 五类阶段;上层覆盖未完整定义时按字段级回退,不允许生成空路径。
8. 路径模板仅允许 `{tenantId}``{companyId}``{channelCode}``{yyyyMMdd}``{yyyyMM}``{batchNo}``{fileName}` 七个固定变量;命中未声明变量或缺少变量取值时立即阻断文件动作。
9. `BankWithholding` 在送盘创建时固化 `sendProtocol/sendDir/sendFilePath``backProtocol/backDir`,配置切换仅影响新发起文件动作,已落库批次继续沿用原解析结果。
### 核心数据
- `bk_payment_channel`:支付渠道。
- `bk_channel_api_config`:渠道接口配置。
- `bk_channel_route_rule`:渠道路由规则。
- `bk_withholding_agreement`:代扣签约。
- `bk_withholding_batch``bk_withholding_item`:代扣批次与明细。
- `bk_reconcile_batch``bk_reconcile_diff`:对账批次与差异。
- `bk_settlement_batch`:结算批次。
- `bk_transaction``bk_transaction_callback``bk_transaction_exception`:交易、回调、异常。
- `biz_collection``biz_withholding`:代收/代扣业务主对象。
#### 文件传输配置与审计补充
- 环境默认规则通过 Spring profile + Nacos 承接,不在仓库样例中写入真实密码、私钥或证书。
- `bk_channel_api_config` 使用专用 `apiType=FILE_TRANSFER_CONFIG` 承接文件传输覆盖配置,`extParams` 记录作用域、业务类型、协议、连接引用和五类目录字段。
- `bk_withholding_batch` 固化送盘/回盘目录与协议,`bk_reconcile_batch` 固化对账阶段最终 `protocol/dir/filePath/fileName`,用于审计与问题回放。
### 迁移补充(旧系统承接)
#### 银行托收
- 旧系统“银行托收”菜单重点承接托收送盘、托收信息查询和托收结果回看。
- 当前设计已形成 `biz_collection` + `bk_*` 渠道模型,迁移时应补出“旧托收菜单 → 托收批次/交易/回盘结果”的映射,而不是按旧菜单名平移建模。
- 旧托收历史记录应至少保留送盘批次、客户范围、送盘结果、回盘结果和账单核销结果。
#### 实时收费查询与对账
- 旧系统“实时收费”更偏运营查询和渠道对账入口,不只是支付成功回写。
- 当前建议以 `bk_transaction*` 作为主承接对象,并补充按结算日期、银行/渠道、收费结果、差异状态查询和导出能力说明。
- 对旧“实时收费汇总/日志/明细”对象P0 阶段先按历史只读查询口径保留,不误写为当前已落地的独立主模型。
#### 当前实现对齐说明
- `PayCeb` 路径已具备欠费查询、缴费处理、流水唯一性校验和交易日志留痕,可作为实时收费基础闭环的实现证据。
- `BankWithholding` 路径已具备签约、解约、客户状态查询、送盘、送盘状态查询、取消送盘、回盘、回盘状态查询及对应交易留痕的实现证据,可作为代扣最小实现态闭环依据。
- `BankCollection` 路径当前仍仅能确认签约、解约与协议/交易日志处理具备实现证据。
- 对账、结算、真实银行文件解析、SFTP/文件通道联调和运行态样本补证当前仍未闭环,正式文档应继续保留为后续完善项。
### 接口映射
- `IF-REV-011`:代扣批次、对账与结算协同入口。
- `IF-EXT-001`:银行代扣批次下发与回盘协同。
- `IF-EXT-003`:银行实时收费查询、缴费与结果确认协同。
### 落地边界
- **已落地**:渠道、路由、交易、回调、异常、代扣/托收签约、解约,以及 `BankWithholding` 的客户状态查询、送盘、送盘状态查询、取消送盘、回盘、回盘状态查询和对应日志留痕等主对象已具备明确实现证据。
- **部分落地**`BankCollection` 批次、明细、送盘、回盘、状态查询、差异台账和后台资源管理入口已具备对象或骨架,但不等同于银行协同闭环全部完成;`BankWithholding` 的真实文件解析、异常补偿和运行态联调证据仍待补齐。
- **文档先行**:夜间批量代扣调度、完整对账处理、结算确认、扩展银行台账等内容不得在当前阶段写成已完成能力。
<a id="mod-rev-009"></a>
## REV-009 业务参数配置
### 功能说明
负责营收域的价格参数、客户编号规则、页面配置、打印与渠道相关业务参数配置,为客户、开账、收费、发票、催缴等模块提供统一配置支撑。
### 关键设计
1. 业务参数按租户、单位、片区、业务类别分层管理。
2. 价格体系、客户编号规则、页面字段配置、打印与通知参数统一归口维护。
3. 配置变更应具备版本化、操作留痕与生效范围控制。
### 核心数据
- `biz_parameter_settings`:业务参数配置。
- `biz_page_settings``biz_page_settings_detail`:页面配置。
- `biz_price_category``biz_price_template``biz_template_dept_rel`:价格归属与模板站点关系。
- `biz_cust_no_rule`:客户编号规则。
- `sys_wechat_app_settings`:微信/微网厅基础配置。
### 迁移补充(旧系统承接)
- 旧系统后台存在“页面配置、业务字段、微信参数、打印维护”等运营配置入口。
- 当前建议统一按业务参数、页面配置、渠道参数与打印参数归口承接,不新增“微客服后台配置”并行主文档。
- 迁移时需明确三类配置映射:客户/业务办理字段展示与校验规则、微信/微网厅基础参数、打印模板与补打策略;未确认已实现的高级灰度能力继续按“文档先行”处理。
### 接口映射
- `IF-REV-012`:查询与维护价格模板、业务参数、页面参数配置。
- `IF-UP-004`:统一平台参数字典能力协同,为营收域参数提供基础字典支撑。
### 落地边界
- **已落地**:业务参数、页面配置、价格归属与模板站点关系、客户编号规则等核心配置对象。
- **部分落地**:部分打印模板、通知策略等参数由统一平台或外部渠道参数共同承载,营收域仅保留业务侧映射。
- **文档先行**:参数灰度发布、多版本并行生效等高级治理能力当前仅保留设计语义,不宣称为独立实现模块。

BIN
output/13_CS_Detailed.docx Normal file

Binary file not shown.

616
output/13_CS_Detailed.html Normal file
View File

@ -0,0 +1,616 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="系统设计团队" />
<title>福建水务营收系统-客户服务模块正文</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<link rel="stylesheet" href="output/document_style.css" />
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<header id="title-block-header">
<h1 class="title">福建水务营收系统-客户服务模块正文</h1>
<p class="author">系统设计团队</p>
<p class="date">2024年12月19日</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#福建水务营收系统详细设计-客户服务模块正文"
id="toc-福建水务营收系统详细设计-客户服务模块正文"><span
class="toc-section-number">1</span>
福建水务营收系统详细设计-客户服务模块正文</a>
<ul>
<li><a href="#章节导航精简" id="toc-章节导航精简"><span
class="toc-section-number">1.1</span> 章节导航(精简)</a></li>
<li><a href="#文档定位" id="toc-文档定位"><span
class="toc-section-number">1.2</span> 文档定位</a></li>
<li><a href="#架构图模块对齐说明" id="toc-架构图模块对齐说明"><span
class="toc-section-number">1.3</span> 架构图模块对齐说明</a></li>
</ul></li>
<li><a href="#客户服务模块详细设计" id="toc-客户服务模块详细设计"><span
class="toc-section-number">2</span> 客户服务模块详细设计</a>
<ul>
<li><a href="#客户服务模块统一约束" id="toc-客户服务模块统一约束"><span
class="toc-section-number">2.1</span> 客户服务模块统一约束</a></li>
<li><a href="#接口与数据追溯矩阵" id="toc-接口与数据追溯矩阵"><span
class="toc-section-number">2.2</span> 接口与数据追溯矩阵</a></li>
<li><a href="#cs-001-账户绑定管理对齐-wechat-001-wechat-008"
id="toc-cs-001-账户绑定管理对齐-wechat-001-wechat-008"><span
class="toc-section-number">2.3</span> CS-001 账户绑定管理(对齐
WECHAT-001 / WECHAT-008</a>
<ul>
<li><a href="#功能说明" id="toc-功能说明"><span
class="toc-section-number">2.3.1</span> 功能说明</a></li>
<li><a href="#关键规则" id="toc-关键规则"><span
class="toc-section-number">2.3.2</span> 关键规则</a></li>
<li><a href="#核心数据" id="toc-核心数据"><span
class="toc-section-number">2.3.3</span> 核心数据</a></li>
<li><a href="#接口映射" id="toc-接口映射"><span
class="toc-section-number">2.3.4</span> 接口映射</a></li>
<li><a href="#落地边界" id="toc-落地边界"><span
class="toc-section-number">2.3.5</span> 落地边界</a></li>
</ul></li>
<li><a href="#cs-002-信息查询服务对齐-wechat-002-wechat-007"
id="toc-cs-002-信息查询服务对齐-wechat-002-wechat-007"><span
class="toc-section-number">2.4</span> CS-002 信息查询服务(对齐
WECHAT-002 / WECHAT-007</a>
<ul>
<li><a href="#功能说明-1" id="toc-功能说明-1"><span
class="toc-section-number">2.4.1</span> 功能说明</a></li>
<li><a href="#关键设计" id="toc-关键设计"><span
class="toc-section-number">2.4.2</span> 关键设计</a></li>
<li><a href="#核心数据-1" id="toc-核心数据-1"><span
class="toc-section-number">2.4.3</span> 核心数据</a></li>
<li><a href="#接口映射-1" id="toc-接口映射-1"><span
class="toc-section-number">2.4.4</span> 接口映射</a></li>
<li><a href="#落地边界-1" id="toc-落地边界-1"><span
class="toc-section-number">2.4.5</span> 落地边界</a></li>
</ul></li>
<li><a href="#cs-003-在线缴费服务对齐-wechat-003"
id="toc-cs-003-在线缴费服务对齐-wechat-003"><span
class="toc-section-number">2.5</span> CS-003 在线缴费服务(对齐
WECHAT-003</a>
<ul>
<li><a href="#功能说明-2" id="toc-功能说明-2"><span
class="toc-section-number">2.5.1</span> 功能说明</a></li>
<li><a href="#业务流程" id="toc-业务流程"><span
class="toc-section-number">2.5.2</span> 业务流程</a></li>
<li><a href="#关键规则-1" id="toc-关键规则-1"><span
class="toc-section-number">2.5.3</span> 关键规则</a></li>
<li><a href="#核心数据-2" id="toc-核心数据-2"><span
class="toc-section-number">2.5.4</span> 核心数据</a></li>
<li><a href="#接口映射-2" id="toc-接口映射-2"><span
class="toc-section-number">2.5.5</span> 接口映射</a></li>
<li><a href="#落地边界-2" id="toc-落地边界-2"><span
class="toc-section-number">2.5.6</span> 落地边界</a></li>
</ul></li>
<li><a href="#cs-004-电子发票服务对齐-wechat-004"
id="toc-cs-004-电子发票服务对齐-wechat-004"><span
class="toc-section-number">2.6</span> CS-004 电子发票服务(对齐
WECHAT-004</a>
<ul>
<li><a href="#功能说明-3" id="toc-功能说明-3"><span
class="toc-section-number">2.6.1</span> 功能说明</a></li>
<li><a href="#关键设计-1" id="toc-关键设计-1"><span
class="toc-section-number">2.6.2</span> 关键设计</a></li>
<li><a href="#核心数据-3" id="toc-核心数据-3"><span
class="toc-section-number">2.6.3</span> 核心数据</a></li>
<li><a href="#接口映射-3" id="toc-接口映射-3"><span
class="toc-section-number">2.6.4</span> 接口映射</a></li>
<li><a href="#落地边界-3" id="toc-落地边界-3"><span
class="toc-section-number">2.6.5</span> 落地边界</a></li>
</ul></li>
<li><a href="#cs-005-营业网点服务对齐-wechat-005"
id="toc-cs-005-营业网点服务对齐-wechat-005"><span
class="toc-section-number">2.7</span> CS-005 营业网点服务(对齐
WECHAT-005</a>
<ul>
<li><a href="#功能说明-4" id="toc-功能说明-4"><span
class="toc-section-number">2.7.1</span> 功能说明</a></li>
<li><a href="#关键设计-2" id="toc-关键设计-2"><span
class="toc-section-number">2.7.2</span> 关键设计</a></li>
<li><a href="#核心数据-4" id="toc-核心数据-4"><span
class="toc-section-number">2.7.3</span> 核心数据</a></li>
<li><a href="#接口映射-4" id="toc-接口映射-4"><span
class="toc-section-number">2.7.4</span> 接口映射</a></li>
<li><a href="#落地边界-4" id="toc-落地边界-4"><span
class="toc-section-number">2.7.5</span> 落地边界</a></li>
</ul></li>
<li><a href="#cs-006-业务办理服务对齐-wechat-006"
id="toc-cs-006-业务办理服务对齐-wechat-006"><span
class="toc-section-number">2.8</span> CS-006 业务办理服务(对齐
WECHAT-006</a>
<ul>
<li><a href="#功能说明-5" id="toc-功能说明-5"><span
class="toc-section-number">2.8.1</span> 功能说明</a></li>
<li><a href="#关键设计-3" id="toc-关键设计-3"><span
class="toc-section-number">2.8.2</span> 关键设计</a></li>
<li><a href="#核心数据-5" id="toc-核心数据-5"><span
class="toc-section-number">2.8.3</span> 核心数据</a></li>
<li><a href="#接口映射-5" id="toc-接口映射-5"><span
class="toc-section-number">2.8.4</span> 接口映射</a></li>
<li><a href="#落地边界-5" id="toc-落地边界-5"><span
class="toc-section-number">2.8.5</span> 落地边界</a></li>
</ul></li>
<li><a href="#cs-007-柜面扫码支付" id="toc-cs-007-柜面扫码支付"><span
class="toc-section-number">2.9</span> CS-007 柜面扫码支付</a>
<ul>
<li><a href="#功能说明-6" id="toc-功能说明-6"><span
class="toc-section-number">2.9.1</span> 功能说明</a></li>
<li><a href="#业务流程-1" id="toc-业务流程-1"><span
class="toc-section-number">2.9.2</span> 业务流程</a></li>
<li><a href="#关键设计-4" id="toc-关键设计-4"><span
class="toc-section-number">2.9.3</span> 关键设计</a></li>
<li><a href="#核心数据-6" id="toc-核心数据-6"><span
class="toc-section-number">2.9.4</span> 核心数据</a></li>
<li><a href="#接口映射-6" id="toc-接口映射-6"><span
class="toc-section-number">2.9.5</span> 接口映射</a></li>
<li><a href="#落地边界-6" id="toc-落地边界-6"><span
class="toc-section-number">2.9.6</span> 落地边界</a></li>
</ul></li>
</ul></li>
</ul>
</nav>
<h1 data-number="1" id="福建水务营收系统详细设计-客户服务模块正文"><span
class="header-section-number">1</span>
福建水务营收系统详细设计-客户服务模块正文</h1>
<h2 data-number="1.1" id="章节导航精简"><span
class="header-section-number">1.1</span> 章节导航(精简)</h2>
<ul>
<li><a href="#sec-position">文档定位</a></li>
<li><a href="#sec-cs-alignment">架构图模块对齐说明</a></li>
<li><a href="#sec-content">客户服务详细设计正文</a>
<ul>
<li><a href="#sec-cs-rules">客户服务模块统一约束</a></li>
<li><a href="#sec-cs-trace">接口与数据追溯矩阵</a></li>
<li><a href="#mod-cs-001">CS-001 账户绑定管理</a></li>
<li><a href="#mod-cs-002">CS-002 信息查询服务</a></li>
<li><a href="#mod-cs-003">CS-003 在线缴费服务</a></li>
<li><a href="#mod-cs-004">CS-004 电子发票服务</a></li>
<li><a href="#mod-cs-005">CS-005 营业网点服务</a></li>
<li><a href="#mod-cs-006">CS-006 业务办理服务</a></li>
<li><a href="#mod-cs-007">CS-007 柜面扫码支付</a></li>
</ul></li>
</ul>
<p><a id="sec-position"></a></p>
<h2 data-number="1.2" id="文档定位"><span
class="header-section-number">1.2</span> 文档定位</h2>
<p>本文档为 <code>01_Detailed_Design.md</code>
中“客户服务模块详细设计”章节的模块正文拆分稿,便于按模块独立维护。正式交付口径以主详设为准。</p>
<p><a id="sec-cs-alignment"></a></p>
<h2 data-number="1.3" id="架构图模块对齐说明"><span
class="header-section-number">1.3</span> 架构图模块对齐说明</h2>
<p>整体架构图中,客户渠道相关模块同时使用了 <code>CS-*</code>
<code>WECHAT-*</code> 两套编号:</p>
<ul>
<li><code>CS-*</code> 用于 <code>SYS-002</code>
营收业务子系统中的客户服务模块群表达;</li>
<li><code>WECHAT-*</code> 用于 <code>SYS-004</code>
微网厅子系统中的渠道形态表达。</li>
</ul>
<p>当前详细设计采用“能力域优先”的承接方式,即以 <code>CS-*</code>
作为正式详细设计编号,将 <code>WECHAT-*</code>
视为渠道侧同源能力映射,不另建平行正式主稿。</p>
<table>
<colgroup>
<col style="width: 33%" />
<col style="width: 33%" />
<col style="width: 33%" />
</colgroup>
<thead>
<tr>
<th>架构图模块</th>
<th>当前详设承接章节</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>WECHAT-001</code> 账户绑定管理</td>
<td><code>CS-001</code></td>
<td>微网厅渠道形态映射到统一账户绑定能力</td>
</tr>
<tr>
<td><code>WECHAT-002</code> 信息查询服务</td>
<td><code>CS-002</code></td>
<td>微网厅账单、发票、流水查询能力映射</td>
</tr>
<tr>
<td><code>WECHAT-003</code> 在线缴费服务</td>
<td><code>CS-003</code></td>
<td>微网厅渠道缴费入口映射</td>
</tr>
<tr>
<td><code>WECHAT-004</code> 电子发票服务</td>
<td><code>CS-004</code></td>
<td>微网厅电子发票查看/推送/下载映射</td>
</tr>
<tr>
<td><code>WECHAT-005</code> 营业网点服务</td>
<td><code>CS-005</code></td>
<td>微网厅网点查询与预约引导映射</td>
</tr>
<tr>
<td><code>WECHAT-006</code> 业务办理服务</td>
<td><code>CS-006</code></td>
<td>微网厅线上办理入口映射</td>
</tr>
<tr>
<td><code>WECHAT-007</code> 账户流水</td>
<td><code>CS-002</code></td>
<td>当前并入信息查询服务,不单列平行正文</td>
</tr>
<tr>
<td><code>WECHAT-008</code> 账号与机构管理</td>
<td><code>CS-001</code></td>
<td>当前并入账户绑定与账户切换能力</td>
</tr>
</tbody>
</table>
<p><a id="sec-content"></a></p>
<h1 data-number="2" id="客户服务模块详细设计"><span
class="header-section-number">2</span> 客户服务模块详细设计</h1>
<p><a id="sec-cs-rules"></a></p>
<h2 data-number="2.1" id="客户服务模块统一约束"><span
class="header-section-number">2.1</span> 客户服务模块统一约束</h2>
<ol type="1">
<li>客户服务模块负责渠道侧受理与展示,核心账务、发票、通知结果均由
<code>SYS-002</code> 统一落账与回写。</li>
<li>支付、发票、消息分别通过
<code>SYS-009</code><code>SYS-008</code><code>SYS-010</code>
协同完成,客户服务模块不直接承载外部平台业务规则。</li>
<li>账户绑定、在线支付、发票申请、业务办理等关键动作必须进行身份校验与权限校验,禁止匿名高风险操作。</li>
<li>支付与发票场景必须具备幂等控制,避免重复下单、重复开票、重复回写导致业务状态不一致。</li>
<li>渠道请求、结果回写、人工补偿动作应保留可追溯日志,满足审计与争议处理要求。</li>
</ol>
<p><a id="sec-cs-trace"></a></p>
<h2 data-number="2.2" id="接口与数据追溯矩阵"><span
class="header-section-number">2.2</span> 接口与数据追溯矩阵</h2>
<blockquote>
<p>说明:详细接口字段与报文以
<code>../03_Technical_Design/03_Interface_Design.md</code> 为准。</p>
</blockquote>
<table>
<colgroup>
<col style="width: 25%" />
<col style="width: 25%" />
<col style="width: 25%" />
<col style="width: 25%" />
</colgroup>
<thead>
<tr>
<th>CS 模块</th>
<th>关键接口</th>
<th>核心数据域(摘要)</th>
<th>主要协同对象</th>
</tr>
</thead>
<tbody>
<tr>
<td>CS-001 账户绑定管理</td>
<td><code>IF-CS-001</code></td>
<td><code>biz_cust_app_binds</code><code>biz_cust</code><code>biz_account</code></td>
<td>微信、支付宝、微网厅</td>
</tr>
<tr>
<td>CS-002 信息查询服务</td>
<td><code>IF-CS-002</code></td>
<td><code>biz_charge*</code><code>biz_reading_data</code><code>biz_invoice</code></td>
<td>客户渠道、<code>SYS-002</code></td>
</tr>
<tr>
<td>CS-003 在线缴费服务</td>
<td><code>IF-CS-003</code></td>
<td><code>biz_charge*</code><code>biz_collection</code><code>bk_transaction*</code></td>
<td><code>SYS-009</code></td>
</tr>
<tr>
<td>CS-004 电子发票服务</td>
<td><code>IF-CS-004</code></td>
<td><code>biz_invoice*</code><code>biz_cust_invoice</code></td>
<td><code>SYS-008</code></td>
</tr>
<tr>
<td>CS-005 营业网点服务</td>
<td><code>IF-CS-005</code></td>
<td><code>biz_outlets</code><code>biz_business_types</code></td>
<td>客户渠道</td>
</tr>
<tr>
<td>CS-006 业务办理服务</td>
<td><code>IF-CS-006</code></td>
<td><code>biz_process*</code><code>biz_content_attach</code></td>
<td>工单系统、<code>SYS-010</code></td>
</tr>
<tr>
<td>CS-007 柜面扫码支付</td>
<td><code>IF-CS-007</code></td>
<td><code>biz_collection</code><code>bk_transaction*</code><code>biz_charge</code></td>
<td>营业厅、<code>SYS-009</code></td>
</tr>
</tbody>
</table>
<p><a id="mod-cs-001"></a></p>
<h2 data-number="2.3"
id="cs-001-账户绑定管理对齐-wechat-001-wechat-008"><span
class="header-section-number">2.3</span> CS-001 账户绑定管理(对齐
WECHAT-001 / WECHAT-008</h2>
<h3 data-number="2.3.1" id="功能说明"><span
class="header-section-number">2.3.1</span> 功能说明</h3>
<p>面向微信、支付宝、微网厅等渠道实现客户账户绑定、解绑、默认账户设置、多账户切换与身份校验。</p>
<h3 data-number="2.3.2" id="关键规则"><span
class="header-section-number">2.3.2</span> 关键规则</h3>
<ol type="1">
<li>一个渠道账户可绑定多个用水账户。</li>
<li>绑定、解绑、默认账户变更等敏感操作需进行身份校验。</li>
<li>已销户、冻结或限制服务的账户不得新增绑定。</li>
</ol>
<h3 data-number="2.3.3" id="核心数据"><span
class="header-section-number">2.3.3</span> 核心数据</h3>
<ul>
<li><code>biz_cust_app_binds</code></li>
<li><code>biz_cust</code></li>
<li><code>biz_account</code></li>
</ul>
<h3 data-number="2.3.4" id="接口映射"><span
class="header-section-number">2.3.4</span> 接口映射</h3>
<ul>
<li><code>IF-CS-001</code>:渠道账户绑定、解绑、默认账户切换。</li>
<li><code>IF-REV-001</code>:客户与账户信息查询,校验绑定对象合法性。</li>
</ul>
<h3 data-number="2.3.5" id="落地边界"><span
class="header-section-number">2.3.5</span> 落地边界</h3>
<ul>
<li><strong>已落地</strong>:渠道绑定关系、客户与账户主数据引用。</li>
<li><strong>部分落地</strong>:多渠道同账号合并策略依赖业务规则与运营配置共同控制。</li>
<li><strong>文档先行</strong>:跨渠道统一身份画像与复杂合并规则仅保留设计语义。</li>
</ul>
<p><a id="mod-cs-002"></a></p>
<h2 data-number="2.4"
id="cs-002-信息查询服务对齐-wechat-002-wechat-007"><span
class="header-section-number">2.4</span> CS-002 信息查询服务(对齐
WECHAT-002 / WECHAT-007</h2>
<h3 data-number="2.4.1" id="功能说明-1"><span
class="header-section-number">2.4.1</span> 功能说明</h3>
<p>提供账单查询、缴费记录查询、用水分析、欠费查询、账户流水、历史账单等服务。</p>
<h3 data-number="2.4.2" id="关键设计"><span
class="header-section-number">2.4.2</span> 关键设计</h3>
<ol type="1">
<li>查询范围严格限制在已绑定客户与账户范围内。</li>
<li>账单、缴费、发票、办理进度等数据通过 SYS-002 标准接口聚合展示。</li>
<li>常用历史数据支持按最近周期快速查询。</li>
</ol>
<h3 data-number="2.4.3" id="核心数据-1"><span
class="header-section-number">2.4.3</span> 核心数据</h3>
<ul>
<li><code>biz_cust</code></li>
<li><code>biz_account</code></li>
<li><code>biz_charge</code></li>
<li><code>biz_charge_detail</code></li>
<li><code>biz_invoice</code></li>
</ul>
<h3 data-number="2.4.4" id="接口映射-1"><span
class="header-section-number">2.4.4</span> 接口映射</h3>
<ul>
<li><code>IF-CS-002</code>:账单、欠费、缴费、用水、发票等聚合查询。</li>
<li><code>IF-REV-001</code>:客户基础信息查询与状态校验。</li>
<li><code>IF-REV-010</code>:统计类查询场景复用营收统计接口能力。</li>
</ul>
<h3 data-number="2.4.5" id="落地边界-1"><span
class="header-section-number">2.4.5</span> 落地边界</h3>
<ul>
<li><strong>已落地</strong>:账单、缴费、发票、客户信息等基础查询链路。</li>
<li><strong>部分落地</strong>:部分专题分析更多依赖报表端,不在渠道侧单独建模。</li>
<li><strong>文档先行</strong>:个性化推荐与预测分析不作为当前已实现能力表述。</li>
</ul>
<p><a id="mod-cs-003"></a></p>
<h2 data-number="2.5" id="cs-003-在线缴费服务对齐-wechat-003"><span
class="header-section-number">2.5</span> CS-003 在线缴费服务(对齐
WECHAT-003</h2>
<h3 data-number="2.5.1" id="功能说明-2"><span
class="header-section-number">2.5.1</span> 功能说明</h3>
<p>提供微信支付、支付宝支付、银行卡支付、预存款支付等在线缴费能力。</p>
<h3 data-number="2.5.2" id="业务流程"><span
class="header-section-number">2.5.2</span> 业务流程</h3>
<pre class="mermaid"><code>flowchart TD
A[提交缴费请求] --&gt; B[校验账单与应缴金额]
B --&gt; C[创建业务订单]
C --&gt; D[调用SYS-009下单]
D --&gt; E[接收支付回调/查询结果]
E --&gt; F[更新核销状态]
F --&gt; G[返回缴费结果]
</code></pre>
<h3 data-number="2.5.3" id="关键规则-1"><span
class="header-section-number">2.5.3</span> 关键规则</h3>
<ol type="1">
<li>下单前再次校验账单未缴状态和应缴金额。</li>
<li>支付结果以 <code>SYS-009</code> 回调/查询确认为准。</li>
<li>对失败订单支持补单、查询与结果回写。</li>
</ol>
<h3 data-number="2.5.4" id="核心数据-2"><span
class="header-section-number">2.5.4</span> 核心数据</h3>
<ul>
<li><code>biz_charge</code></li>
<li><code>biz_charge_detail</code></li>
<li><code>bk_transaction</code></li>
<li><code>bk_transaction_callback</code></li>
</ul>
<h3 data-number="2.5.5" id="接口映射-2"><span
class="header-section-number">2.5.5</span> 接口映射</h3>
<ul>
<li><code>IF-CS-003</code>:客户渠道支付下单入口。</li>
<li><code>IF-EXT-004</code><code>IF-EXT-005</code>:支付下单协同与结果回写。</li>
<li><code>IF-REV-006</code>:账单核销与收费状态更新。</li>
</ul>
<h3 data-number="2.5.6" id="落地边界-2"><span
class="header-section-number">2.5.6</span> 落地边界</h3>
<ul>
<li><strong>已落地</strong>:渠道下单、支付回调、账单核销主链路。</li>
<li><strong>部分落地</strong>:失败补偿策略部分由支付平台与人工复核协同处理。</li>
<li><strong>文档先行</strong>:复杂营销组合支付与分账能力暂不宣称为已实现。</li>
</ul>
<p><a id="mod-cs-004"></a></p>
<h2 data-number="2.6" id="cs-004-电子发票服务对齐-wechat-004"><span
class="header-section-number">2.6</span> CS-004 电子发票服务(对齐
WECHAT-004</h2>
<h3 data-number="2.6.1" id="功能说明-3"><span
class="header-section-number">2.6.1</span> 功能说明</h3>
<p>在客户渠道中提供电子发票申请、查询、下载以及缴费后发票推送能力。</p>
<h3 data-number="2.6.2" id="关键设计-1"><span
class="header-section-number">2.6.2</span> 关键设计</h3>
<ol type="1">
<li>电子发票开具能力经 <code>SYS-008</code> 统一提供。</li>
<li>发票申请与客户开票信息、缴费记录和账单状态联动校验。</li>
<li>发票结果支持下载、查看和渠道推送。</li>
</ol>
<h3 data-number="2.6.3" id="核心数据-3"><span
class="header-section-number">2.6.3</span> 核心数据</h3>
<ul>
<li><code>biz_invoice</code></li>
<li><code>biz_cust_invoice</code></li>
<li><code>biz_invoice_taxrate</code></li>
</ul>
<h3 data-number="2.6.4" id="接口映射-3"><span
class="header-section-number">2.6.4</span> 接口映射</h3>
<ul>
<li><code>IF-CS-004</code>:客户侧发票申请与状态查询。</li>
<li><code>IF-EXT-006</code><code>IF-EXT-007</code>:发票开具协同与结果回写。</li>
<li><code>IF-REV-008</code>:营收侧发票主流程协同。</li>
</ul>
<h3 data-number="2.6.5" id="落地边界-3"><span
class="header-section-number">2.6.5</span> 落地边界</h3>
<ul>
<li><strong>已落地</strong>:发票申请、开票信息校验、开票结果回写。</li>
<li><strong>部分落地</strong>:红冲、补开等复杂票据后处理以发票服务能力为主。</li>
<li><strong>文档先行</strong>:多税率拆票、批量异步重试等高级策略仅保留设计语义。</li>
</ul>
<p><a id="mod-cs-005"></a></p>
<h2 data-number="2.7" id="cs-005-营业网点服务对齐-wechat-005"><span
class="header-section-number">2.7</span> CS-005 营业网点服务(对齐
WECHAT-005</h2>
<h3 data-number="2.7.1" id="功能说明-4"><span
class="header-section-number">2.7.1</span> 功能说明</h3>
<p>提供营业网点查询、服务范围查看、办事指引与营业时间展示能力。</p>
<h3 data-number="2.7.2" id="关键设计-2"><span
class="header-section-number">2.7.2</span> 关键设计</h3>
<ol type="1">
<li>网点信息展示地址、联系电话、营业时间与可办理业务范围。</li>
<li>网点服务以查询与引导为主,不在本模块中虚构额外业务实体表。</li>
<li>与 CS-006 业务办理服务协同,支持从网点查询跳转到线上办理。</li>
</ol>
<h3 data-number="2.7.3" id="核心数据-4"><span
class="header-section-number">2.7.3</span> 核心数据</h3>
<ul>
<li><code>biz_outlets</code></li>
<li><code>biz_business_types</code></li>
</ul>
<h3 data-number="2.7.4" id="接口映射-4"><span
class="header-section-number">2.7.4</span> 接口映射</h3>
<ul>
<li><code>IF-CS-005</code>:网点信息、可办事项、预约入口查询。</li>
</ul>
<h3 data-number="2.7.5" id="落地边界-4"><span
class="header-section-number">2.7.5</span> 落地边界</h3>
<ul>
<li><strong>已落地</strong>:网点查询与办事引导能力。</li>
<li><strong>部分落地</strong>:预约排队等能力可能由外部排队系统承载。</li>
<li><strong>文档先行</strong>:导航路线规划与实时客流预测仅保留扩展方向。</li>
</ul>
<p><a id="mod-cs-006"></a></p>
<h2 data-number="2.8" id="cs-006-业务办理服务对齐-wechat-006"><span
class="header-section-number">2.8</span> CS-006 业务办理服务(对齐
WECHAT-006</h2>
<h3 data-number="2.8.1" id="功能说明-5"><span
class="header-section-number">2.8.1</span> 功能说明</h3>
<p>提供更名、过户、联系方式变更、开票方式变更、一户多人口、自主抄表、换表申请等线上业务办理入口。</p>
<h3 data-number="2.8.2" id="关键设计-3"><span
class="header-section-number">2.8.2</span> 关键设计</h3>
<ol type="1">
<li>业务办理统一调用工单/流程能力,不与后台流程表重复建模。</li>
<li>办理结果与客户资料、工单状态、报装或表务流程联动更新。</li>
<li>触达通知通过 <code>SYS-010</code> 完成结果通知。</li>
</ol>
<h3 data-number="2.8.3" id="核心数据-5"><span
class="header-section-number">2.8.3</span> 核心数据</h3>
<ul>
<li><code>biz_process</code></li>
<li><code>biz_process_transfer</code></li>
<li><code>biz_content_attach</code></li>
</ul>
<h3 data-number="2.8.4" id="接口映射-5"><span
class="header-section-number">2.8.4</span> 接口映射</h3>
<ul>
<li><code>IF-CS-006</code>:办理申请提交、进度查询、补件上传。</li>
<li><code>IF-EXT-008</code>:办理结果通知协同。</li>
</ul>
<h3 data-number="2.8.5" id="落地边界-5"><span
class="header-section-number">2.8.5</span> 落地边界</h3>
<ul>
<li><strong>已落地</strong>:办理申请、进度查询、补件与状态联动。</li>
<li><strong>部分落地</strong>:复杂跨部门并行审批流程依赖后端流程引擎配置。</li>
<li><strong>文档先行</strong>:智能预审与自动分单规则暂不表述为已实现能力。</li>
</ul>
<p><a id="mod-cs-007"></a></p>
<h2 data-number="2.9" id="cs-007-柜面扫码支付"><span
class="header-section-number">2.9</span> CS-007 柜面扫码支付</h2>
<h3 data-number="2.9.1" id="功能说明-6"><span
class="header-section-number">2.9.1</span> 功能说明</h3>
<p>支持营业厅柜台二维码收款、票据关联、结果回传,是柜台收费场景对线上支付能力的补充入口。</p>
<h3 data-number="2.9.2" id="业务流程-1"><span
class="header-section-number">2.9.2</span> 业务流程</h3>
<pre class="mermaid"><code>flowchart TD
A[柜面发起扫码收款] --&gt; B[生成支付订单]
B --&gt; C[客户扫码支付]
C --&gt; D[接收支付结果回写]
D --&gt; E[更新账单核销状态]
E --&gt; F[打印或展示收费凭证]
</code></pre>
<h3 data-number="2.9.3" id="关键设计-4"><span
class="header-section-number">2.9.3</span> 关键设计</h3>
<ol type="1">
<li>柜面扫码支付与 REV-003 营业收费统一核销口径。</li>
<li>支付结果与交易流水经 <code>SYS-009</code> 回传后更新收费状态。</li>
<li>支持支付凭证、发票申请与收费记录联动。</li>
</ol>
<h3 data-number="2.9.4" id="核心数据-6"><span
class="header-section-number">2.9.4</span> 核心数据</h3>
<ul>
<li><code>biz_charge</code></li>
<li><code>bk_transaction</code></li>
<li><code>bk_transaction_callback</code></li>
</ul>
<h3 data-number="2.9.5" id="接口映射-6"><span
class="header-section-number">2.9.5</span> 接口映射</h3>
<ul>
<li><code>IF-CS-007</code>:柜面扫码支付订单创建与结果回写。</li>
<li><code>IF-EXT-004</code><code>IF-EXT-005</code>:支付渠道协同。</li>
<li><code>IF-REV-006</code>:收费核销与账单状态更新。</li>
</ul>
<h3 data-number="2.9.6" id="落地边界-6"><span
class="header-section-number">2.9.6</span> 落地边界</h3>
<ul>
<li><strong>已落地</strong>:柜面扫码收款、支付回写、账单核销协同。</li>
<li><strong>部分落地</strong>:柜台班结与对账汇总由营收后台统一统计。</li>
<li><strong>文档先行</strong>:多终端并发收款冲突治理保留为后续优化方向。</li>
</ul>
</body>
</html>

BIN
output/13_CS_Detailed.pdf Normal file

Binary file not shown.

View File

@ -0,0 +1,346 @@
---
title: "13_CS_Detailed"
author: "系统设计团队"
date: "2024年12月19日"
documentclass: article
geometry: margin=1in
fontsize: 11pt
mainfont: "PingFang SC"
CJKmainfont: "PingFang SC"
---
---
doc_id: DT-13-CS
doc_role: module_body
authority: secondary
scope: 详细设计-客户服务
source_of_truth: false
last_reviewed: 2026-03-18
retrieval_priority: P1
---
# 福建水务营收系统详细设计-客户服务模块正文
## 章节导航(精简)
- [文档定位](#sec-position)
- [架构图模块对齐说明](#sec-cs-alignment)
- [客户服务详细设计正文](#sec-content)
- [客户服务模块统一约束](#sec-cs-rules)
- [接口与数据追溯矩阵](#sec-cs-trace)
- [CS-001 账户绑定管理](#mod-cs-001)
- [CS-002 信息查询服务](#mod-cs-002)
- [CS-003 在线缴费服务](#mod-cs-003)
- [CS-004 电子发票服务](#mod-cs-004)
- [CS-005 营业网点服务](#mod-cs-005)
- [CS-006 业务办理服务](#mod-cs-006)
- [CS-007 柜面扫码支付](#mod-cs-007)
<a id="sec-position"></a>
## 文档定位
本文档为 `01_Detailed_Design.md` 中“客户服务模块详细设计”章节的模块正文拆分稿,便于按模块独立维护。正式交付口径以主详设为准。
<a id="sec-cs-alignment"></a>
## 架构图模块对齐说明
整体架构图中,客户渠道相关模块同时使用了 `CS-*``WECHAT-*` 两套编号:
- `CS-*` 用于 `SYS-002` 营收业务子系统中的客户服务模块群表达;
- `WECHAT-*` 用于 `SYS-004` 微网厅子系统中的渠道形态表达。
当前详细设计采用“能力域优先”的承接方式,即以 `CS-*` 作为正式详细设计编号,将 `WECHAT-*` 视为渠道侧同源能力映射,不另建平行正式主稿。
| 架构图模块 | 当前详设承接章节 | 说明 |
| --- | --- | --- |
| `WECHAT-001` 账户绑定管理 | `CS-001` | 微网厅渠道形态映射到统一账户绑定能力 |
| `WECHAT-002` 信息查询服务 | `CS-002` | 微网厅账单、发票、流水查询能力映射 |
| `WECHAT-003` 在线缴费服务 | `CS-003` | 微网厅渠道缴费入口映射 |
| `WECHAT-004` 电子发票服务 | `CS-004` | 微网厅电子发票查看/推送/下载映射 |
| `WECHAT-005` 营业网点服务 | `CS-005` | 微网厅网点查询与预约引导映射 |
| `WECHAT-006` 业务办理服务 | `CS-006` | 微网厅线上办理入口映射 |
| `WECHAT-007` 账户流水 | `CS-002` | 当前并入信息查询服务,不单列平行正文 |
| `WECHAT-008` 账号与机构管理 | `CS-001` | 当前并入账户绑定与账户切换能力 |
<a id="sec-content"></a>
# 客户服务模块详细设计
<a id="sec-cs-rules"></a>
## 客户服务模块统一约束
1. 客户服务模块负责渠道侧受理与展示,核心账务、发票、通知结果均由 `SYS-002` 统一落账与回写。
2. 支付、发票、消息分别通过 `SYS-009``SYS-008``SYS-010` 协同完成,客户服务模块不直接承载外部平台业务规则。
3. 账户绑定、在线支付、发票申请、业务办理等关键动作必须进行身份校验与权限校验,禁止匿名高风险操作。
4. 支付与发票场景必须具备幂等控制,避免重复下单、重复开票、重复回写导致业务状态不一致。
5. 渠道请求、结果回写、人工补偿动作应保留可追溯日志,满足审计与争议处理要求。
<a id="sec-cs-trace"></a>
## 接口与数据追溯矩阵
> 说明:详细接口字段与报文以 `../03_Technical_Design/03_Interface_Design.md` 为准。
| CS 模块 | 关键接口 | 核心数据域(摘要) | 主要协同对象 |
|---|---|---|---|
| CS-001 账户绑定管理 | `IF-CS-001` | `biz_cust_app_binds``biz_cust``biz_account` | 微信、支付宝、微网厅 |
| CS-002 信息查询服务 | `IF-CS-002` | `biz_charge*``biz_reading_data``biz_invoice` | 客户渠道、`SYS-002` |
| CS-003 在线缴费服务 | `IF-CS-003` | `biz_charge*``biz_collection``bk_transaction*` | `SYS-009` |
| CS-004 电子发票服务 | `IF-CS-004` | `biz_invoice*``biz_cust_invoice` | `SYS-008` |
| CS-005 营业网点服务 | `IF-CS-005` | `biz_outlets``biz_business_types` | 客户渠道 |
| CS-006 业务办理服务 | `IF-CS-006` | `biz_process*``biz_content_attach` | 工单系统、`SYS-010` |
| CS-007 柜面扫码支付 | `IF-CS-007` | `biz_collection``bk_transaction*``biz_charge` | 营业厅、`SYS-009` |
<a id="mod-cs-001"></a>
## CS-001 账户绑定管理(对齐 WECHAT-001 / WECHAT-008
### 功能说明
面向微信、支付宝、微网厅等渠道实现客户账户绑定、解绑、默认账户设置、多账户切换与身份校验。
### 关键规则
1. 一个渠道账户可绑定多个用水账户。
2. 绑定、解绑、默认账户变更等敏感操作需进行身份校验。
3. 已销户、冻结或限制服务的账户不得新增绑定。
### 核心数据
- `biz_cust_app_binds`
- `biz_cust`
- `biz_account`
### 接口映射
- `IF-CS-001`:渠道账户绑定、解绑、默认账户切换。
- `IF-REV-001`:客户与账户信息查询,校验绑定对象合法性。
### 落地边界
- **已落地**:渠道绑定关系、客户与账户主数据引用。
- **部分落地**:多渠道同账号合并策略依赖业务规则与运营配置共同控制。
- **文档先行**:跨渠道统一身份画像与复杂合并规则仅保留设计语义。
<a id="mod-cs-002"></a>
## CS-002 信息查询服务(对齐 WECHAT-002 / WECHAT-007
### 功能说明
提供账单查询、缴费记录查询、用水分析、欠费查询、账户流水、历史账单等服务。
### 关键设计
1. 查询范围严格限制在已绑定客户与账户范围内。
2. 账单、缴费、发票、办理进度等数据通过 SYS-002 标准接口聚合展示。
3. 常用历史数据支持按最近周期快速查询。
### 核心数据
- `biz_cust`
- `biz_account`
- `biz_charge`
- `biz_charge_detail`
- `biz_invoice`
### 接口映射
- `IF-CS-002`:账单、欠费、缴费、用水、发票等聚合查询。
- `IF-REV-001`:客户基础信息查询与状态校验。
- `IF-REV-010`:统计类查询场景复用营收统计接口能力。
### 落地边界
- **已落地**:账单、缴费、发票、客户信息等基础查询链路。
- **部分落地**:部分专题分析更多依赖报表端,不在渠道侧单独建模。
- **文档先行**:个性化推荐与预测分析不作为当前已实现能力表述。
<a id="mod-cs-003"></a>
## CS-003 在线缴费服务(对齐 WECHAT-003
### 功能说明
提供微信支付、支付宝支付、银行卡支付、预存款支付等在线缴费能力。
### 业务流程
```mermaid
flowchart TD
A[提交缴费请求] --> B[校验账单与应缴金额]
B --> C[创建业务订单]
C --> D[调用SYS-009下单]
D --> E[接收支付回调/查询结果]
E --> F[更新核销状态]
F --> G[返回缴费结果]
```
### 关键规则
1. 下单前再次校验账单未缴状态和应缴金额。
2. 支付结果以 `SYS-009` 回调/查询确认为准。
3. 对失败订单支持补单、查询与结果回写。
### 核心数据
- `biz_charge`
- `biz_charge_detail`
- `bk_transaction`
- `bk_transaction_callback`
### 接口映射
- `IF-CS-003`:客户渠道支付下单入口。
- `IF-EXT-004``IF-EXT-005`:支付下单协同与结果回写。
- `IF-REV-006`:账单核销与收费状态更新。
### 落地边界
- **已落地**:渠道下单、支付回调、账单核销主链路。
- **部分落地**:失败补偿策略部分由支付平台与人工复核协同处理。
- **文档先行**:复杂营销组合支付与分账能力暂不宣称为已实现。
<a id="mod-cs-004"></a>
## CS-004 电子发票服务(对齐 WECHAT-004
### 功能说明
在客户渠道中提供电子发票申请、查询、下载以及缴费后发票推送能力。
### 关键设计
1. 电子发票开具能力经 `SYS-008` 统一提供。
2. 发票申请与客户开票信息、缴费记录和账单状态联动校验。
3. 发票结果支持下载、查看和渠道推送。
### 核心数据
- `biz_invoice`
- `biz_cust_invoice`
- `biz_invoice_taxrate`
### 接口映射
- `IF-CS-004`:客户侧发票申请与状态查询。
- `IF-EXT-006``IF-EXT-007`:发票开具协同与结果回写。
- `IF-REV-008`:营收侧发票主流程协同。
### 落地边界
- **已落地**:发票申请、开票信息校验、开票结果回写。
- **部分落地**:红冲、补开等复杂票据后处理以发票服务能力为主。
- **文档先行**:多税率拆票、批量异步重试等高级策略仅保留设计语义。
<a id="mod-cs-005"></a>
## CS-005 营业网点服务(对齐 WECHAT-005
### 功能说明
提供营业网点查询、服务范围查看、办事指引与营业时间展示能力。
### 关键设计
1. 网点信息展示地址、联系电话、营业时间与可办理业务范围。
2. 网点服务以查询与引导为主,不在本模块中虚构额外业务实体表。
3. 与 CS-006 业务办理服务协同,支持从网点查询跳转到线上办理。
### 核心数据
- `biz_outlets`
- `biz_business_types`
### 接口映射
- `IF-CS-005`:网点信息、可办事项、预约入口查询。
### 落地边界
- **已落地**:网点查询与办事引导能力。
- **部分落地**:预约排队等能力可能由外部排队系统承载。
- **文档先行**:导航路线规划与实时客流预测仅保留扩展方向。
<a id="mod-cs-006"></a>
## CS-006 业务办理服务(对齐 WECHAT-006
### 功能说明
提供更名、过户、联系方式变更、开票方式变更、一户多人口、自主抄表、换表申请等线上业务办理入口。
### 关键设计
1. 业务办理统一调用工单/流程能力,不与后台流程表重复建模。
2. 办理结果与客户资料、工单状态、报装或表务流程联动更新。
3. 触达通知通过 `SYS-010` 完成结果通知。
### 核心数据
- `biz_process`
- `biz_process_transfer`
- `biz_content_attach`
### 接口映射
- `IF-CS-006`:办理申请提交、进度查询、补件上传。
- `IF-EXT-008`:办理结果通知协同。
### 落地边界
- **已落地**:办理申请、进度查询、补件与状态联动。
- **部分落地**:复杂跨部门并行审批流程依赖后端流程引擎配置。
- **文档先行**:智能预审与自动分单规则暂不表述为已实现能力。
<a id="mod-cs-007"></a>
## CS-007 柜面扫码支付
### 功能说明
支持营业厅柜台二维码收款、票据关联、结果回传,是柜台收费场景对线上支付能力的补充入口。
### 业务流程
```mermaid
flowchart TD
A[柜面发起扫码收款] --> B[生成支付订单]
B --> C[客户扫码支付]
C --> D[接收支付结果回写]
D --> E[更新账单核销状态]
E --> F[打印或展示收费凭证]
```
### 关键设计
1. 柜面扫码支付与 REV-003 营业收费统一核销口径。
2. 支付结果与交易流水经 `SYS-009` 回传后更新收费状态。
3. 支持支付凭证、发票申请与收费记录联动。
### 核心数据
- `biz_charge`
- `bk_transaction`
- `bk_transaction_callback`
### 接口映射
- `IF-CS-007`:柜面扫码支付订单创建与结果回写。
- `IF-EXT-004``IF-EXT-005`:支付渠道协同。
- `IF-REV-006`:收费核销与账单状态更新。
### 落地边界
- **已落地**:柜面扫码收款、支付回写、账单核销协同。
- **部分落地**:柜台班结与对账汇总由营收后台统一统计。
- **文档先行**:多终端并发收款冲突治理保留为后续优化方向。

Binary file not shown.

View File

@ -0,0 +1,381 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="系统设计团队" />
<title>福建水务营收系统-表务模块正文</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<link rel="stylesheet" href="output/document_style.css" />
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<header id="title-block-header">
<h1 class="title">福建水务营收系统-表务模块正文</h1>
<p class="author">系统设计团队</p>
<p class="date">2024年12月19日</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#福建水务营收系统详细设计-表务模块正文"
id="toc-福建水务营收系统详细设计-表务模块正文"><span
class="toc-section-number">1</span>
福建水务营收系统详细设计-表务模块正文</a>
<ul>
<li><a href="#章节导航精简" id="toc-章节导航精简"><span
class="toc-section-number">1.1</span> 章节导航(精简)</a></li>
<li><a href="#文档定位" id="toc-文档定位"><span
class="toc-section-number">1.2</span> 文档定位</a></li>
</ul></li>
<li><a href="#表务详细设计" id="toc-表务详细设计"><span
class="toc-section-number">2</span> 表务详细设计</a>
<ul>
<li><a href="#表务模块统一约束" id="toc-表务模块统一约束"><span
class="toc-section-number">2.1</span> 表务模块统一约束</a></li>
<li><a href="#接口与数据追溯矩阵" id="toc-接口与数据追溯矩阵"><span
class="toc-section-number">2.2</span> 接口与数据追溯矩阵</a></li>
<li><a href="#meter-001-表务基础管理"
id="toc-meter-001-表务基础管理"><span
class="toc-section-number">2.3</span> METER-001 表务基础管理</a>
<ul>
<li><a href="#功能说明" id="toc-功能说明"><span
class="toc-section-number">2.3.1</span> 功能说明</a></li>
<li><a href="#关键设计" id="toc-关键设计"><span
class="toc-section-number">2.3.2</span> 关键设计</a></li>
<li><a href="#核心数据" id="toc-核心数据"><span
class="toc-section-number">2.3.3</span> 核心数据</a></li>
<li><a href="#接口映射" id="toc-接口映射"><span
class="toc-section-number">2.3.4</span> 接口映射</a></li>
<li><a href="#落地边界" id="toc-落地边界"><span
class="toc-section-number">2.3.5</span> 落地边界</a></li>
</ul></li>
<li><a href="#meter-002-仓库与库存管理"
id="toc-meter-002-仓库与库存管理"><span
class="toc-section-number">2.4</span> METER-002 仓库与库存管理</a>
<ul>
<li><a href="#功能说明-1" id="toc-功能说明-1"><span
class="toc-section-number">2.4.1</span> 功能说明</a></li>
<li><a href="#关键设计-1" id="toc-关键设计-1"><span
class="toc-section-number">2.4.2</span> 关键设计</a></li>
<li><a href="#核心数据-1" id="toc-核心数据-1"><span
class="toc-section-number">2.4.3</span> 核心数据</a></li>
<li><a href="#接口映射-1" id="toc-接口映射-1"><span
class="toc-section-number">2.4.4</span> 接口映射</a></li>
<li><a href="#落地边界-1" id="toc-落地边界-1"><span
class="toc-section-number">2.4.5</span> 落地边界</a></li>
</ul></li>
<li><a href="#meter-003-设备档案管理"
id="toc-meter-003-设备档案管理"><span
class="toc-section-number">2.5</span> METER-003 设备档案管理</a>
<ul>
<li><a href="#功能说明-2" id="toc-功能说明-2"><span
class="toc-section-number">2.5.1</span> 功能说明</a></li>
<li><a href="#关键设计-2" id="toc-关键设计-2"><span
class="toc-section-number">2.5.2</span> 关键设计</a></li>
<li><a href="#核心数据-2" id="toc-核心数据-2"><span
class="toc-section-number">2.5.3</span> 核心数据</a></li>
<li><a href="#接口映射-2" id="toc-接口映射-2"><span
class="toc-section-number">2.5.4</span> 接口映射</a></li>
<li><a href="#落地边界-2" id="toc-落地边界-2"><span
class="toc-section-number">2.5.5</span> 落地边界</a></li>
<li><a href="#物联网接入与数据同步能力"
id="toc-物联网接入与数据同步能力"><span
class="toc-section-number">2.5.6</span>
物联网接入与数据同步能力</a></li>
<li><a href="#功能说明-3" id="toc-功能说明-3"><span
class="toc-section-number">2.5.7</span> 功能说明</a></li>
<li><a href="#业务流程" id="toc-业务流程"><span
class="toc-section-number">2.5.8</span> 业务流程</a></li>
<li><a href="#关键规则" id="toc-关键规则"><span
class="toc-section-number">2.5.9</span> 关键规则</a></li>
<li><a href="#核心数据-3" id="toc-核心数据-3"><span
class="toc-section-number">2.5.10</span> 核心数据</a></li>
<li><a href="#接口映射-3" id="toc-接口映射-3"><span
class="toc-section-number">2.5.11</span> 接口映射</a></li>
<li><a href="#落地边界-3" id="toc-落地边界-3"><span
class="toc-section-number">2.5.12</span> 落地边界</a></li>
<li><a href="#表务工单协同能力" id="toc-表务工单协同能力"><span
class="toc-section-number">2.5.13</span> 表务工单协同能力</a>
<ul>
<li><a href="#业务流程-1" id="toc-业务流程-1"><span
class="toc-section-number">2.5.13.1</span> 业务流程</a></li>
<li><a href="#关键规则-1" id="toc-关键规则-1"><span
class="toc-section-number">2.5.13.2</span> 关键规则</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</nav>
<h1 data-number="1" id="福建水务营收系统详细设计-表务模块正文"><span
class="header-section-number">1</span>
福建水务营收系统详细设计-表务模块正文</h1>
<h2 data-number="1.1" id="章节导航精简"><span
class="header-section-number">1.1</span> 章节导航(精简)</h2>
<ul>
<li><a href="#sec-position">文档定位</a></li>
<li><a href="#sec-content">表务详细设计正文</a>
<ul>
<li><a href="#sec-meter-rules">表务模块统一约束</a></li>
<li><a href="#sec-meter-trace">接口与数据追溯矩阵</a></li>
<li><a href="#mod-meter-001">METER-001 表务基础管理</a></li>
<li><a href="#mod-meter-002">METER-002 仓库与库存管理</a></li>
<li><a href="#mod-meter-003">METER-003 设备档案管理</a></li>
</ul></li>
</ul>
<p><a id="sec-position"></a></p>
<h2 data-number="1.2" id="文档定位"><span
class="header-section-number">1.2</span> 文档定位</h2>
<p>本文档为 <code>01_Detailed_Design.md</code>
中“表务详细设计”章节的模块正文拆分稿,便于按模块独立维护。正式交付口径以主详设为准。</p>
<p><a id="sec-content"></a></p>
<h1 data-number="2" id="表务详细设计"><span
class="header-section-number">2</span> 表务详细设计</h1>
<p><a id="sec-meter-rules"></a></p>
<h2 data-number="2.1" id="表务模块统一约束"><span
class="header-section-number">2.1</span> 表务模块统一约束</h2>
<ol type="1">
<li>表务模块负责水表档案、状态、库存、工单与物联网接入,账单生成仍归属
<code>SYS-002</code> 营收主流程。</li>
<li>水表状态变更必须通过表务工单、出入库动作或报装装表流程驱动,不允许绕过业务过程直接改写生命周期状态。</li>
<li>换表、移表、拆表、复装完成后,必须同步客户绑定关系、安装位置和最新表计状态,避免档案与现场状态不一致。</li>
<li>库存、出入库、报废等动作必须具备批次追溯与操作留痕,满足审计与责任界定要求。</li>
<li>远传抄表与设备告警数据进入 <code>SYS-002</code>
后,必须先完成校验和异常判断,再进入抄表开账链路。</li>
</ol>
<p><a id="sec-meter-trace"></a></p>
<h2 data-number="2.2" id="接口与数据追溯矩阵"><span
class="header-section-number">2.2</span> 接口与数据追溯矩阵</h2>
<blockquote>
<p>说明:接口字段以
<code>../03_Technical_Design/03_Interface_Design.md</code>
为准,数据库口径以
<code>../03_Technical_Design/01_Database_Design.md</code> 为准。</p>
</blockquote>
<table>
<colgroup>
<col style="width: 25%" />
<col style="width: 25%" />
<col style="width: 25%" />
<col style="width: 25%" />
</colgroup>
<thead>
<tr>
<th>METER 模块</th>
<th>关键接口</th>
<th>核心数据域(摘要)</th>
<th>主要协同对象</th>
</tr>
</thead>
<tbody>
<tr>
<td>METER-001 表务基础管理</td>
<td><code>IF-METER-001</code></td>
<td><code>biz_meter</code><code>biz_meter_model</code><code>biz_meter_caliber</code><code>biz_meter_range</code></td>
<td>营收、报装</td>
</tr>
<tr>
<td>METER-002 仓库与库存管理</td>
<td><code>IF-METER-003</code></td>
<td><code>biz_meter_in_out</code><code>biz_meter_in_out_rel</code><code>biz_meter</code></td>
<td>仓储管理端</td>
</tr>
<tr>
<td>METER-003 设备档案管理</td>
<td><code>IF-METER-001</code><code>IF-METER-002</code><code>IF-METER-004</code></td>
<td><code>biz_meter</code><code>biz_meter_log</code><code>biz_process*</code><code>biz_meter_read</code><code>biz_reading_data</code><code>biz_last_reading</code></td>
<td>工单系统、移动作业、IoT 平台、营收开账</td>
</tr>
</tbody>
</table>
<p><a id="mod-meter-001"></a></p>
<h2 data-number="2.3" id="meter-001-表务基础管理"><span
class="header-section-number">2.3</span> METER-001 表务基础管理</h2>
<h3 data-number="2.3.1" id="功能说明"><span
class="header-section-number">2.3.1</span> 功能说明</h3>
<p>管理水表档案、厂家、型号、口径、量程、检定证书、安装位置、当前状态等基础信息。</p>
<h3 data-number="2.3.2" id="关键设计"><span
class="header-section-number">2.3.2</span> 关键设计</h3>
<ul>
<li>一块水表对应唯一档案主记录。</li>
<li>设备状态覆盖在库、在用、待检、故障、报废等。</li>
<li>与客户、水表工单、抄表记录形成关联闭环。</li>
</ul>
<h3 data-number="2.3.3" id="核心数据"><span
class="header-section-number">2.3.3</span> 核心数据</h3>
<ul>
<li><code>biz_meter</code>:水表主档。</li>
<li><code>biz_meter_model</code>:水表型号。</li>
<li><code>biz_meter_caliber</code>:水表口径。</li>
<li><code>biz_meter_range</code>:水表量程。</li>
<li><code>biz_last_reading</code>:最近有效读数状态。</li>
</ul>
<h3 data-number="2.3.4" id="接口映射"><span
class="header-section-number">2.3.4</span> 接口映射</h3>
<ul>
<li><code>IF-METER-001</code>:查询水表档案、状态与生命周期信息。</li>
<li><code>IF-REV-001</code>:客户侧查询场景复用表计关联信息。</li>
</ul>
<h3 data-number="2.3.5" id="落地边界"><span
class="header-section-number">2.3.5</span> 落地边界</h3>
<ul>
<li><strong>已落地</strong>:水表主档、型号、口径、量程、状态等基础档案对象。</li>
<li><strong>部分落地</strong>:证书、检定批次、厂家深度评价等附属对象可能由扩展字段或附件承载。</li>
<li><strong>文档先行</strong>:复杂设备健康评分与预测性维护不作为当前已实现能力表述。</li>
</ul>
<p><a id="mod-meter-002"></a></p>
<h2 data-number="2.4" id="meter-002-仓库与库存管理"><span
class="header-section-number">2.4</span> METER-002 仓库与库存管理</h2>
<h3 data-number="2.4.1" id="功能说明-1"><span
class="header-section-number">2.4.1</span> 功能说明</h3>
<p>管理新表入库、领用、出库、退库、报废及库存预警,是架构图中“仓库与库存管理”模块的正式承接章节。</p>
<h3 data-number="2.4.2" id="关键设计-1"><span
class="header-section-number">2.4.2</span> 关键设计</h3>
<ol type="1">
<li>库存动作以批次和明细双层结构记录,支持领用、退库、报废等全过程追溯。</li>
<li>库存状态与设备生命周期联动更新,避免“账上在库、现场在用”不一致。</li>
<li>报废、退库等高风险动作需保留审批或责任人留痕。</li>
</ol>
<h3 data-number="2.4.3" id="核心数据-1"><span
class="header-section-number">2.4.3</span> 核心数据</h3>
<ul>
<li><code>biz_meter_in_out</code>:出入库主表。</li>
<li><code>biz_meter_in_out_rel</code>:出入库明细关系。</li>
<li><code>biz_meter_log</code>:库存与生命周期动作留痕。</li>
<li><code>biz_meter</code>:生命周期状态主对象。</li>
</ul>
<h3 data-number="2.4.4" id="接口映射-1"><span
class="header-section-number">2.4.4</span> 接口映射</h3>
<ul>
<li><code>IF-METER-003</code>:领用、退库、报废等库存动作处理。</li>
</ul>
<h3 data-number="2.4.5" id="落地边界-1"><span
class="header-section-number">2.4.5</span> 落地边界</h3>
<ul>
<li><strong>已落地</strong>:出入库主明细、库存状态回写、动作留痕。</li>
<li><strong>部分落地</strong>:仓位优化、库龄分析等能力可能通过报表层实现,而非独立业务对象。</li>
<li><strong>文档先行</strong>:自动补货策略与仓网优化仅保留设计方向。</li>
</ul>
<p><a id="mod-meter-003"></a></p>
<h2 data-number="2.5" id="meter-003-设备档案管理"><span
class="header-section-number">2.5</span> METER-003 设备档案管理</h2>
<h3 data-number="2.5.1" id="功能说明-2"><span
class="header-section-number">2.5.1</span> 功能说明</h3>
<p>管理水表唯一电子档案、状态流转、安装历史、质检追溯,并统一承接表务工单和物联网同步相关能力。</p>
<h3 data-number="2.5.2" id="关键设计-2"><span
class="header-section-number">2.5.2</span> 关键设计</h3>
<ol type="1">
<li>一块水表对应唯一档案主记录,覆盖在库、在用、待检、故障、报废等状态。</li>
<li>设备档案同时关联安装历史、维修记录、库存动作与最近有效读数,形成全生命周期追溯闭环。</li>
<li>表务工单和远传同步能力属于设备档案管理下的实施态支撑能力,不再作为独立模块编号表达。</li>
</ol>
<h3 data-number="2.5.3" id="核心数据-2"><span
class="header-section-number">2.5.3</span> 核心数据</h3>
<ul>
<li><code>biz_meter</code>:水表主档与状态主对象。</li>
<li><code>biz_meter_log</code>:设备过程留痕与工单回写对象。</li>
<li><code>biz_process</code><code>biz_process_transfer</code>:表务工单流程主线。</li>
<li><code>biz_meter_read</code><code>biz_reading_data</code><code>biz_last_reading</code>:读数、状态与同步对象。</li>
</ul>
<h3 data-number="2.5.4" id="接口映射-2"><span
class="header-section-number">2.5.4</span> 接口映射</h3>
<ul>
<li><code>IF-METER-001</code>:查询水表档案、状态与生命周期信息。</li>
<li><code>IF-METER-002</code>:换表、移表、校表、维修等处理结果提交。</li>
<li><code>IF-METER-004</code>:远传抄表、告警与状态同步接收。</li>
</ul>
<h3 data-number="2.5.5" id="落地边界-2"><span
class="header-section-number">2.5.5</span> 落地边界</h3>
<ul>
<li><strong>已落地</strong>:设备主档、状态流转、工单留痕、远传同步与异常标记能力。</li>
<li><strong>部分落地</strong>:质检批次、厂家评价、复杂设备健康评分等附属对象可能由扩展字段、附件或报表层承接。</li>
<li><strong>文档先行</strong>:预测性维护和实时控制指令不作为当前正式实现口径。</li>
</ul>
<p><a id="mod-meter-004"></a></p>
<h3 data-number="2.5.6" id="物联网接入与数据同步能力"><span
class="header-section-number">2.5.6</span> 物联网接入与数据同步能力</h3>
<h3 data-number="2.5.7" id="功能说明-3"><span
class="header-section-number">2.5.7</span> 功能说明</h3>
<p>接入集抄系统、智能表平台及厂家物联网平台,实现远程抄表、状态查询、设备参数同步与异常告警。</p>
<h3 data-number="2.5.8" id="业务流程"><span
class="header-section-number">2.5.8</span> 业务流程</h3>
<pre class="mermaid"><code>flowchart TD
A[定时采集任务] --&gt; B[发送采集请求]
B --&gt; C[物联网平台返回数据]
C --&gt; D[数据校验]
D --&gt; E{是否有效}
E --&gt;|有效| F[写入抄表记录]
E --&gt;|无效| G[异常标记并告警]
F --&gt; H[参与开账]
G --&gt; I[人工复核处理]
</code></pre>
<h3 data-number="2.5.9" id="关键规则"><span
class="header-section-number">2.5.9</span> 关键规则</h3>
<ol type="1">
<li>远传抄表结果必须校验设备标识、采集时间、读数合法性和重复上送情况。</li>
<li>异常读数、离线状态、设备告警需区分业务异常与设备异常两类处理。</li>
<li>校验通过的有效读数进入抄表开账链路,异常结果需保留人工复核入口。</li>
</ol>
<h3 data-number="2.5.10" id="核心数据-3"><span
class="header-section-number">2.5.10</span> 核心数据</h3>
<ul>
<li><code>biz_meter_read</code>:抄表任务或状态承接对象。</li>
<li><code>biz_reading_data</code>:远传读数数据。</li>
<li><code>biz_last_reading</code>:最新有效读数。</li>
<li><code>biz_meter</code>:设备状态与参数关联对象。</li>
</ul>
<h3 data-number="2.5.11" id="接口映射-3"><span
class="header-section-number">2.5.11</span> 接口映射</h3>
<ul>
<li><code>IF-METER-004</code>:远传抄表、告警与状态同步接收。</li>
<li><code>IF-EXT-009</code>IoT/集抄平台数据接入协同。</li>
<li><code>IF-REV-004</code><code>IF-REV-005</code>:校验通过后进入抄表提交与开账流程。</li>
</ul>
<h3 data-number="2.5.12" id="落地边界-3"><span
class="header-section-number">2.5.12</span> 落地边界</h3>
<ul>
<li><strong>已落地</strong>:远传数据接入、基础校验、异常标记与读数同步。</li>
<li><strong>部分落地</strong>:复杂设备诊断与厂家私有协议适配更多由外部
IoT 平台承载。</li>
<li><strong>文档先行</strong>:边缘计算、实时控制指令等能力不作为当前正式实现口径。</li>
</ul>
<p><a id="mod-meter-002-workflow"></a></p>
<h3 data-number="2.5.13" id="表务工单协同能力"><span
class="header-section-number">2.5.13</span> 表务工单协同能力</h3>
<p>处理换表、移表、拆表、复装、校表、稽查、维修等表务工单,是
<code>METER-003</code> 设备档案管理的实施态过程能力。</p>
<h4 data-number="2.5.13.1" id="业务流程-1"><span
class="header-section-number">2.5.13.1</span> 业务流程</h4>
<pre class="mermaid"><code>flowchart TD
A[创建表务工单] --&gt; B[派发现场任务]
B --&gt; C[现场处理并采集结果]
C --&gt; D[回写旧表/新表信息]
D --&gt; E[更新水表状态与客户绑定]
E --&gt; F[写入过程日志与附件]
F --&gt; G[工单办结]
</code></pre>
<h4 data-number="2.5.13.2" id="关键规则-1"><span
class="header-section-number">2.5.13.2</span> 关键规则</h4>
<ol type="1">
<li>工单类型决定必填字段、处理流程和附件要求。</li>
<li>换表工单需同时记录旧表拆除信息与新表安装信息。</li>
<li>工单完成后同步更新设备档案、客户绑定关系与安装历史。</li>
</ol>
</body>
</html>

Binary file not shown.

View File

@ -0,0 +1,238 @@
---
title: "14_METER_Detailed"
author: "系统设计团队"
date: "2024年12月19日"
documentclass: article
geometry: margin=1in
fontsize: 11pt
mainfont: "PingFang SC"
CJKmainfont: "PingFang SC"
---
---
doc_id: DT-14-METER
doc_role: module_body
authority: secondary
scope: 详细设计-表务管理
source_of_truth: false
last_reviewed: 2026-03-18
retrieval_priority: P1
---
# 福建水务营收系统详细设计-表务模块正文
## 章节导航(精简)
- [文档定位](#sec-position)
- [表务详细设计正文](#sec-content)
- [表务模块统一约束](#sec-meter-rules)
- [接口与数据追溯矩阵](#sec-meter-trace)
- [METER-001 表务基础管理](#mod-meter-001)
- [METER-002 仓库与库存管理](#mod-meter-002)
- [METER-003 设备档案管理](#mod-meter-003)
<a id="sec-position"></a>
## 文档定位
本文档为 `01_Detailed_Design.md` 中“表务详细设计”章节的模块正文拆分稿,便于按模块独立维护。正式交付口径以主详设为准。
<a id="sec-content"></a>
# 表务详细设计
<a id="sec-meter-rules"></a>
## 表务模块统一约束
1. 表务模块负责水表档案、状态、库存、工单与物联网接入,账单生成仍归属 `SYS-002` 营收主流程。
2. 水表状态变更必须通过表务工单、出入库动作或报装装表流程驱动,不允许绕过业务过程直接改写生命周期状态。
3. 换表、移表、拆表、复装完成后,必须同步客户绑定关系、安装位置和最新表计状态,避免档案与现场状态不一致。
4. 库存、出入库、报废等动作必须具备批次追溯与操作留痕,满足审计与责任界定要求。
5. 远传抄表与设备告警数据进入 `SYS-002` 后,必须先完成校验和异常判断,再进入抄表开账链路。
<a id="sec-meter-trace"></a>
## 接口与数据追溯矩阵
> 说明:接口字段以 `../03_Technical_Design/03_Interface_Design.md` 为准,数据库口径以 `../03_Technical_Design/01_Database_Design.md` 为准。
| METER 模块 | 关键接口 | 核心数据域(摘要) | 主要协同对象 |
|---|---|---|---|
| METER-001 表务基础管理 | `IF-METER-001` | `biz_meter``biz_meter_model``biz_meter_caliber``biz_meter_range` | 营收、报装 |
| METER-002 仓库与库存管理 | `IF-METER-003` | `biz_meter_in_out``biz_meter_in_out_rel``biz_meter` | 仓储管理端 |
| METER-003 设备档案管理 | `IF-METER-001``IF-METER-002``IF-METER-004` | `biz_meter``biz_meter_log``biz_process*``biz_meter_read``biz_reading_data``biz_last_reading` | 工单系统、移动作业、IoT 平台、营收开账 |
<a id="mod-meter-001"></a>
## METER-001 表务基础管理
### 功能说明
管理水表档案、厂家、型号、口径、量程、检定证书、安装位置、当前状态等基础信息。
### 关键设计
- 一块水表对应唯一档案主记录。
- 设备状态覆盖在库、在用、待检、故障、报废等。
- 与客户、水表工单、抄表记录形成关联闭环。
### 核心数据
- `biz_meter`:水表主档。
- `biz_meter_model`:水表型号。
- `biz_meter_caliber`:水表口径。
- `biz_meter_range`:水表量程。
- `biz_last_reading`:最近有效读数状态。
### 接口映射
- `IF-METER-001`:查询水表档案、状态与生命周期信息。
- `IF-REV-001`:客户侧查询场景复用表计关联信息。
### 落地边界
- **已落地**:水表主档、型号、口径、量程、状态等基础档案对象。
- **部分落地**:证书、检定批次、厂家深度评价等附属对象可能由扩展字段或附件承载。
- **文档先行**:复杂设备健康评分与预测性维护不作为当前已实现能力表述。
<a id="mod-meter-002"></a>
## METER-002 仓库与库存管理
### 功能说明
管理新表入库、领用、出库、退库、报废及库存预警,是架构图中“仓库与库存管理”模块的正式承接章节。
### 关键设计
1. 库存动作以批次和明细双层结构记录,支持领用、退库、报废等全过程追溯。
2. 库存状态与设备生命周期联动更新,避免“账上在库、现场在用”不一致。
3. 报废、退库等高风险动作需保留审批或责任人留痕。
### 核心数据
- `biz_meter_in_out`:出入库主表。
- `biz_meter_in_out_rel`:出入库明细关系。
- `biz_meter_log`:库存与生命周期动作留痕。
- `biz_meter`:生命周期状态主对象。
### 接口映射
- `IF-METER-003`:领用、退库、报废等库存动作处理。
### 落地边界
- **已落地**:出入库主明细、库存状态回写、动作留痕。
- **部分落地**:仓位优化、库龄分析等能力可能通过报表层实现,而非独立业务对象。
- **文档先行**:自动补货策略与仓网优化仅保留设计方向。
<a id="mod-meter-003"></a>
## METER-003 设备档案管理
### 功能说明
管理水表唯一电子档案、状态流转、安装历史、质检追溯,并统一承接表务工单和物联网同步相关能力。
### 关键设计
1. 一块水表对应唯一档案主记录,覆盖在库、在用、待检、故障、报废等状态。
2. 设备档案同时关联安装历史、维修记录、库存动作与最近有效读数,形成全生命周期追溯闭环。
3. 表务工单和远传同步能力属于设备档案管理下的实施态支撑能力,不再作为独立模块编号表达。
### 核心数据
- `biz_meter`:水表主档与状态主对象。
- `biz_meter_log`:设备过程留痕与工单回写对象。
- `biz_process``biz_process_transfer`:表务工单流程主线。
- `biz_meter_read``biz_reading_data``biz_last_reading`:读数、状态与同步对象。
### 接口映射
- `IF-METER-001`:查询水表档案、状态与生命周期信息。
- `IF-METER-002`:换表、移表、校表、维修等处理结果提交。
- `IF-METER-004`:远传抄表、告警与状态同步接收。
### 落地边界
- **已落地**:设备主档、状态流转、工单留痕、远传同步与异常标记能力。
- **部分落地**:质检批次、厂家评价、复杂设备健康评分等附属对象可能由扩展字段、附件或报表层承接。
- **文档先行**:预测性维护和实时控制指令不作为当前正式实现口径。
<a id="mod-meter-004"></a>
### 物联网接入与数据同步能力
### 功能说明
接入集抄系统、智能表平台及厂家物联网平台,实现远程抄表、状态查询、设备参数同步与异常告警。
### 业务流程
```mermaid
flowchart TD
A[定时采集任务] --> B[发送采集请求]
B --> C[物联网平台返回数据]
C --> D[数据校验]
D --> E{是否有效}
E -->|有效| F[写入抄表记录]
E -->|无效| G[异常标记并告警]
F --> H[参与开账]
G --> I[人工复核处理]
```
### 关键规则
1. 远传抄表结果必须校验设备标识、采集时间、读数合法性和重复上送情况。
2. 异常读数、离线状态、设备告警需区分业务异常与设备异常两类处理。
3. 校验通过的有效读数进入抄表开账链路,异常结果需保留人工复核入口。
### 核心数据
- `biz_meter_read`:抄表任务或状态承接对象。
- `biz_reading_data`:远传读数数据。
- `biz_last_reading`:最新有效读数。
- `biz_meter`:设备状态与参数关联对象。
### 接口映射
- `IF-METER-004`:远传抄表、告警与状态同步接收。
- `IF-EXT-009`IoT/集抄平台数据接入协同。
- `IF-REV-004``IF-REV-005`:校验通过后进入抄表提交与开账流程。
### 落地边界
- **已落地**:远传数据接入、基础校验、异常标记与读数同步。
- **部分落地**:复杂设备诊断与厂家私有协议适配更多由外部 IoT 平台承载。
- **文档先行**:边缘计算、实时控制指令等能力不作为当前正式实现口径。
<a id="mod-meter-002-workflow"></a>
### 表务工单协同能力
处理换表、移表、拆表、复装、校表、稽查、维修等表务工单,是 `METER-003` 设备档案管理的实施态过程能力。
#### 业务流程
```mermaid
flowchart TD
A[创建表务工单] --> B[派发现场任务]
B --> C[现场处理并采集结果]
C --> D[回写旧表/新表信息]
D --> E[更新水表状态与客户绑定]
E --> F[写入过程日志与附件]
F --> G[工单办结]
```
#### 关键规则
1. 工单类型决定必填字段、处理流程和附件要求。
2. 换表工单需同时记录旧表拆除信息与新表安装信息。
3. 工单完成后同步更新设备档案、客户绑定关系与安装历史。

Binary file not shown.

View File

@ -0,0 +1,495 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="系统设计团队" />
<title>福建水务营收系统-报装与签章模块正文</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<link rel="stylesheet" href="output/document_style.css" />
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<header id="title-block-header">
<h1 class="title">福建水务营收系统-报装与签章模块正文</h1>
<p class="author">系统设计团队</p>
<p class="date">2024年12月19日</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#福建水务营收系统详细设计-报装与签章模块正文"
id="toc-福建水务营收系统详细设计-报装与签章模块正文"><span
class="toc-section-number">1</span>
福建水务营收系统详细设计-报装与签章模块正文</a>
<ul>
<li><a href="#章节导航精简" id="toc-章节导航精简"><span
class="toc-section-number">1.1</span> 章节导航(精简)</a></li>
<li><a href="#文档定位" id="toc-文档定位"><span
class="toc-section-number">1.2</span> 文档定位</a></li>
</ul></li>
<li><a href="#报装与签章详细设计" id="toc-报装与签章详细设计"><span
class="toc-section-number">2</span> 报装与签章详细设计</a>
<ul>
<li><a href="#报装模块统一约束" id="toc-报装模块统一约束"><span
class="toc-section-number">2.1</span> 报装模块统一约束</a></li>
<li><a href="#接口与数据追溯矩阵" id="toc-接口与数据追溯矩阵"><span
class="toc-section-number">2.2</span> 接口与数据追溯矩阵</a></li>
<li><a href="#inst-001-报装流程管理"
id="toc-inst-001-报装流程管理"><span
class="toc-section-number">2.3</span> INST-001 报装流程管理</a>
<ul>
<li><a href="#功能说明" id="toc-功能说明"><span
class="toc-section-number">2.3.1</span> 功能说明</a></li>
<li><a href="#业务流程" id="toc-业务流程"><span
class="toc-section-number">2.3.2</span> 业务流程</a></li>
<li><a href="#关键设计" id="toc-关键设计"><span
class="toc-section-number">2.3.3</span> 关键设计</a></li>
<li><a href="#核心数据" id="toc-核心数据"><span
class="toc-section-number">2.3.4</span> 核心数据</a></li>
<li><a href="#接口映射" id="toc-接口映射"><span
class="toc-section-number">2.3.5</span> 接口映射</a></li>
<li><a href="#落地边界" id="toc-落地边界"><span
class="toc-section-number">2.3.6</span> 落地边界</a></li>
<li><a href="#踏勘与方案设计能力" id="toc-踏勘与方案设计能力"><span
class="toc-section-number">2.3.7</span> 踏勘与方案设计能力</a></li>
<li><a href="#功能说明-1" id="toc-功能说明-1"><span
class="toc-section-number">2.3.8</span> 功能说明</a></li>
<li><a href="#业务流程-1" id="toc-业务流程-1"><span
class="toc-section-number">2.3.9</span> 业务流程</a></li>
<li><a href="#关键设计-1" id="toc-关键设计-1"><span
class="toc-section-number">2.3.10</span> 关键设计</a></li>
<li><a href="#核心数据-1" id="toc-核心数据-1"><span
class="toc-section-number">2.3.11</span> 核心数据</a></li>
<li><a href="#接口映射-1" id="toc-接口映射-1"><span
class="toc-section-number">2.3.12</span> 接口映射</a></li>
<li><a href="#落地边界-1" id="toc-落地边界-1"><span
class="toc-section-number">2.3.13</span> 落地边界</a></li>
</ul></li>
<li><a href="#inst-002-工程管理" id="toc-inst-002-工程管理"><span
class="toc-section-number">2.4</span> INST-002 工程管理</a>
<ul>
<li><a href="#功能说明-2" id="toc-功能说明-2"><span
class="toc-section-number">2.4.1</span> 功能说明</a></li>
<li><a href="#业务流程-2" id="toc-业务流程-2"><span
class="toc-section-number">2.4.2</span> 业务流程</a></li>
<li><a href="#关键设计-2" id="toc-关键设计-2"><span
class="toc-section-number">2.4.3</span> 关键设计</a></li>
<li><a href="#核心数据-2" id="toc-核心数据-2"><span
class="toc-section-number">2.4.4</span> 核心数据</a></li>
<li><a href="#接口映射-2" id="toc-接口映射-2"><span
class="toc-section-number">2.4.5</span> 接口映射</a></li>
<li><a href="#落地边界-2" id="toc-落地边界-2"><span
class="toc-section-number">2.4.6</span> 落地边界</a></li>
<li><a href="#合同签署与电子签章能力"
id="toc-合同签署与电子签章能力"><span
class="toc-section-number">2.4.7</span> 合同签署与电子签章能力</a></li>
<li><a href="#功能说明-3" id="toc-功能说明-3"><span
class="toc-section-number">2.4.8</span> 功能说明</a></li>
<li><a href="#集成架构" id="toc-集成架构"><span
class="toc-section-number">2.4.9</span> 集成架构</a></li>
<li><a href="#合同签署流程" id="toc-合同签署流程"><span
class="toc-section-number">2.4.10</span> 合同签署流程</a></li>
<li><a href="#核心数据-3" id="toc-核心数据-3"><span
class="toc-section-number">2.4.11</span> 核心数据</a></li>
<li><a href="#关键规则" id="toc-关键规则"><span
class="toc-section-number">2.4.12</span> 关键规则</a></li>
<li><a href="#接口映射-3" id="toc-接口映射-3"><span
class="toc-section-number">2.4.13</span> 接口映射</a></li>
<li><a href="#落地边界-3" id="toc-落地边界-3"><span
class="toc-section-number">2.4.14</span> 落地边界</a></li>
</ul></li>
<li><a href="#inst-003-档案管理" id="toc-inst-003-档案管理"><span
class="toc-section-number">2.5</span> INST-003 档案管理</a>
<ul>
<li><a href="#功能说明-4" id="toc-功能说明-4"><span
class="toc-section-number">2.5.1</span> 功能说明</a></li>
<li><a href="#关键设计-3" id="toc-关键设计-3"><span
class="toc-section-number">2.5.2</span> 关键设计</a></li>
<li><a href="#核心数据-4" id="toc-核心数据-4"><span
class="toc-section-number">2.5.3</span> 核心数据</a></li>
<li><a href="#接口映射-4" id="toc-接口映射-4"><span
class="toc-section-number">2.5.4</span> 接口映射</a></li>
<li><a href="#落地边界-4" id="toc-落地边界-4"><span
class="toc-section-number">2.5.5</span> 落地边界</a></li>
</ul></li>
</ul></li>
</ul>
</nav>
<h1 data-number="1"
id="福建水务营收系统详细设计-报装与签章模块正文"><span
class="header-section-number">1</span>
福建水务营收系统详细设计-报装与签章模块正文</h1>
<h2 data-number="1.1" id="章节导航精简"><span
class="header-section-number">1.1</span> 章节导航(精简)</h2>
<ul>
<li><a href="#sec-position">文档定位</a></li>
<li><a href="#sec-content">报装与签章详细设计正文</a>
<ul>
<li><a href="#sec-inst-rules">报装模块统一约束</a></li>
<li><a href="#sec-inst-trace">接口与数据追溯矩阵</a></li>
<li><a href="#mod-inst-001">INST-001 报装流程管理</a></li>
<li><a href="#mod-inst-002">INST-002 工程管理</a></li>
<li><a href="#mod-inst-003">INST-003 档案管理</a></li>
</ul></li>
</ul>
<p><a id="sec-position"></a></p>
<h2 data-number="1.2" id="文档定位"><span
class="header-section-number">1.2</span> 文档定位</h2>
<p>本文档为 <code>01_Detailed_Design.md</code>
中“报装与签章详细设计”章节的模块正文拆分稿,便于按模块独立维护。正式交付口径以主详设为准。</p>
<p><a id="sec-content"></a></p>
<h1 data-number="2" id="报装与签章详细设计"><span
class="header-section-number">2</span> 报装与签章详细设计</h1>
<p><a id="sec-inst-rules"></a></p>
<h2 data-number="2.1" id="报装模块统一约束"><span
class="header-section-number">2.1</span> 报装模块统一约束</h2>
<ol type="1">
<li>报装模块承担 <code>SYS-002</code>
中“申请受理、踏勘方案、施工验收、立户通水、合同签章、档案归档”的完整主流程,流程主线以
<code>biz_process*</code><code>biz_content*</code>
为当前实现态口径。</li>
<li>报装申请、踏勘结果、验收结果、签章回执、归档动作均必须通过流程节点驱动,不允许直接绕过业务过程修改主状态。</li>
<li>施工验收通过后,方可进入客户建档、水表绑定、账户初始化与通水确认,避免前后置业务状态错位。</li>
<li>电子签章专题表 <code>installation_*</code>
当前为“专题扩展口径”,若实施库结构与专题设计不一致,以实施库与主详设联合评审结果为准。</li>
<li>报装过程中的申请材料、验收附件、签章文件、存证回执必须统一归档并具备可检索、可追溯能力。</li>
</ol>
<p><a id="sec-inst-trace"></a></p>
<h2 data-number="2.2" id="接口与数据追溯矩阵"><span
class="header-section-number">2.2</span> 接口与数据追溯矩阵</h2>
<blockquote>
<p>说明:接口字段以
<code>../03_Technical_Design/03_Interface_Design.md</code>
为准,数据库口径以
<code>../03_Technical_Design/01_Database_Design.md</code> 为准。</p>
</blockquote>
<table>
<colgroup>
<col style="width: 25%" />
<col style="width: 25%" />
<col style="width: 25%" />
<col style="width: 25%" />
</colgroup>
<thead>
<tr>
<th>INST 模块</th>
<th>关键接口</th>
<th>核心数据域(摘要)</th>
<th>主要协同对象</th>
</tr>
</thead>
<tbody>
<tr>
<td>INST-001 报装流程管理</td>
<td><code>IF-INST-001</code><code>IF-INST-002</code></td>
<td><code>biz_process</code><code>biz_content</code><code>biz_content_attach</code><code>biz_process_transfer</code><code>biz_business_datas</code></td>
<td>柜台、微网厅、政务平台、报装人员</td>
</tr>
<tr>
<td>INST-002 工程管理</td>
<td><code>IF-INST-003</code><code>IF-INST-004</code><code>IF-INST-005</code></td>
<td><code>biz_process_meter_install</code><code>biz_process</code><code>biz_meter</code><code>installation_contract</code><code>installation_signature</code><code>installation_evidence</code></td>
<td>表务、客户建档、泛微 CA</td>
</tr>
<tr>
<td>INST-003 档案管理</td>
<td><code>IF-INST-005</code></td>
<td><code>biz_content_attach</code><code>installation_evidence</code>、过程日志</td>
<td>报装、档案管理</td>
</tr>
</tbody>
</table>
<p><a id="mod-inst-001"></a></p>
<h2 data-number="2.3" id="inst-001-报装流程管理"><span
class="header-section-number">2.3</span> INST-001 报装流程管理</h2>
<h3 data-number="2.3.1" id="功能说明"><span
class="header-section-number">2.3.1</span> 功能说明</h3>
<p>承接新装、改造、一户一表等业务从申请受理到现场踏勘、方案编制的前半段主流程,是架构图中“报装流程管理”模块的正式承接章节。</p>
<h3 data-number="2.3.2" id="业务流程"><span
class="header-section-number">2.3.2</span> 业务流程</h3>
<pre class="mermaid"><code>flowchart TD
A[提交报装申请] --&gt; B[采集申请信息与附件]
B --&gt; C[受理校验]
C --&gt; D{是否通过}
D --&gt;|否| E[退回补充资料]
D --&gt;|是| F[生成报装编号]
F --&gt; G[创建流程实例]
G --&gt; H[进入踏勘环节]
</code></pre>
<h3 data-number="2.3.3" id="关键设计"><span
class="header-section-number">2.3.3</span> 关键设计</h3>
<ul>
<li>统一采集申请人、地址、产权、用水性质、附件材料等信息。</li>
<li>支持政务平台、柜台、微网厅等多入口申请。</li>
<li>受理后自动生成报装编号并进入踏勘流程。</li>
</ul>
<h3 data-number="2.3.4" id="核心数据"><span
class="header-section-number">2.3.4</span> 核心数据</h3>
<ul>
<li><code>biz_process</code>:报装流程主表。</li>
<li><code>biz_content</code>:申请资料主对象。</li>
<li><code>biz_content_attach</code>:申请附件。</li>
<li><code>installation_application</code>:报装申请映射对象(设计态)。</li>
</ul>
<h3 data-number="2.3.5" id="接口映射"><span
class="header-section-number">2.3.5</span> 接口映射</h3>
<ul>
<li><code>IF-INST-001</code>:提交报装申请、申请资料与附件。</li>
<li><code>IF-INST-002</code>:回填踏勘结果、方案、审核结果。</li>
<li><code>IF-CS-006</code>:客户渠道办理入口可复用报装申请主线。</li>
</ul>
<h3 data-number="2.3.6" id="落地边界"><span
class="header-section-number">2.3.6</span> 落地边界</h3>
<ul>
<li><strong>已落地</strong>:申请受理主流程、资料与附件采集、流程实例创建。</li>
<li><strong>部分落地</strong>:不同报装类型的细化受理规则、踏勘方案差异更多依赖流程和参数配置。</li>
<li><strong>文档先行</strong><code>installation_application</code>
当前按设计态保留,不宣称为实施库既有事实表。</li>
</ul>
<p><a id="mod-inst-002"></a></p>
<h3 data-number="2.3.7" id="踏勘与方案设计能力"><span
class="header-section-number">2.3.7</span> 踏勘与方案设计能力</h3>
<h3 data-number="2.3.8" id="功能说明-1"><span
class="header-section-number">2.3.8</span> 功能说明</h3>
<p>组织现场勘查、工程条件确认、材料测算、施工方案与费用方案编制。</p>
<h3 data-number="2.3.9" id="业务流程-1"><span
class="header-section-number">2.3.9</span> 业务流程</h3>
<pre class="mermaid"><code>flowchart TD
A[接收踏勘任务] --&gt; B[现场勘查与拍照]
B --&gt; C[记录供水条件与施工约束]
C --&gt; D[编制方案与费用]
D --&gt; E[提交审核]
E --&gt; F{审核是否通过}
F --&gt;|否| G[退回修改]
F --&gt;|是| H[进入施工或合同环节]
</code></pre>
<h3 data-number="2.3.10" id="关键设计-1"><span
class="header-section-number">2.3.10</span> 关键设计</h3>
<ol type="1">
<li>踏勘记录包括现场照片、供水接入条件、施工难点、估算费用。</li>
<li>方案版本化管理,支持设计审核与退回修改。</li>
<li>勘查结果直接驱动合同金额与施工计划。</li>
</ol>
<h3 data-number="2.3.11" id="核心数据-1"><span
class="header-section-number">2.3.11</span> 核心数据</h3>
<ul>
<li><code>biz_process_transfer</code>:节点流转与处理记录。</li>
<li><code>biz_business_datas</code>:踏勘与方案扩展数据。</li>
<li><code>biz_content_attach</code>:现场照片与附件资料。</li>
</ul>
<h3 data-number="2.3.12" id="接口映射-1"><span
class="header-section-number">2.3.12</span> 接口映射</h3>
<ul>
<li><code>IF-INST-002</code>:回填踏勘结果、方案、审核结果。</li>
</ul>
<h3 data-number="2.3.13" id="落地边界-1"><span
class="header-section-number">2.3.13</span> 落地边界</h3>
<ul>
<li><strong>已落地</strong>:踏勘流转、扩展数据回填、现场资料挂接。</li>
<li><strong>部分落地</strong>:材料测算、工程造价等可能在扩展数据或外部附件中承载。</li>
<li><strong>文档先行</strong>:复杂
BIM/预算系统联动不作为当前正式实现口径。</li>
</ul>
<p><a id="mod-inst-003"></a></p>
<h2 data-number="2.4" id="inst-002-工程管理"><span
class="header-section-number">2.4</span> INST-002 工程管理</h2>
<h3 data-number="2.4.1" id="功能说明-2"><span
class="header-section-number">2.4.1</span> 功能说明</h3>
<p>承接施工派工、安装实施、竣工验收、立户通水以及合同签章协同,是架构图中“工程管理”模块的正式承接章节。</p>
<h3 data-number="2.4.2" id="业务流程-2"><span
class="header-section-number">2.4.2</span> 业务流程</h3>
<pre class="mermaid"><code>flowchart TD
A[下发施工任务] --&gt; B[现场安装实施]
B --&gt; C[录入装表与施工结果]
C --&gt; D[提交竣工验收]
D --&gt; E{验收是否通过}
E --&gt;|否| F[整改后复验]
E --&gt;|是| G[触发客户建档与水表绑定]
G --&gt; H[初始化账户并确认通水]
</code></pre>
<h3 data-number="2.4.3" id="关键设计-2"><span
class="header-section-number">2.4.3</span> 关键设计</h3>
<ul>
<li>施工节点按派工、实施、验收、归档逐步留痕。</li>
<li>验收通过后自动触发客户建档、水表绑定和账户初始化。</li>
<li>与表务系统共享水表安装与换表数据。</li>
</ul>
<h3 data-number="2.4.4" id="核心数据-2"><span
class="header-section-number">2.4.4</span> 核心数据</h3>
<ul>
<li><code>biz_process</code>:施工与验收流程主线。</li>
<li><code>biz_process_meter_install</code>:装表落地信息。</li>
<li><code>biz_meter</code>:水表安装与状态回写对象。</li>
<li><code>biz_cust</code><code>biz_account</code>:立户后续创建对象。</li>
</ul>
<h3 data-number="2.4.5" id="接口映射-2"><span
class="header-section-number">2.4.5</span> 接口映射</h3>
<ul>
<li><code>IF-INST-005</code>:归档验收资料并提交最终办结信息。</li>
<li><code>IF-INST-003</code>:发起电子签章任务并传输合同信息。</li>
<li><code>IF-INST-004</code>:回写签章结果、时间戳和存证信息。</li>
<li><code>IF-METER-001</code><code>IF-METER-002</code>:装表与表务状态协同。</li>
<li><code>IF-REV-001</code>:立户后客户主档进入营收主数据域。</li>
</ul>
<h3 data-number="2.4.6" id="落地边界-2"><span
class="header-section-number">2.4.6</span> 落地边界</h3>
<ul>
<li><strong>已落地</strong>:施工验收主线、装表结果留痕、客户建档与水表绑定协同。</li>
<li><strong>部分落地</strong>:施工派工计划与现场资源调度可能由外部施工管理工具承载。</li>
<li><strong>文档先行</strong>:复杂工程项目管理和材料成本结转不作为当前正式开发边界。</li>
</ul>
<p><a id="mod-inst-004"></a></p>
<h3 data-number="2.4.7" id="合同签署与电子签章能力"><span
class="header-section-number">2.4.7</span> 合同签署与电子签章能力</h3>
<h3 data-number="2.4.8" id="功能说明-3"><span
class="header-section-number">2.4.8</span> 功能说明</h3>
<p>通过集成泛微 CA
电子签章系统,实现报装合同、用水协议等文件的电子签署、时间戳和电子存证。</p>
<h3 data-number="2.4.9" id="集成架构"><span
class="header-section-number">2.4.9</span> 集成架构</h3>
<pre class="mermaid"><code>graph TD
subgraph INST[报装业务系统]
A[申请受理]
B[合同管理]
C[电子签章模块]
D[档案归档]
end
subgraph CA[泛微CA电子签章系统]
E[身份认证服务]
F[电子签章服务]
G[时间戳服务]
H[电子存证服务]
end
A --&gt; B
B --&gt; C
C --&gt; E
C --&gt; F
C --&gt; G
C --&gt; H
C --&gt; D
</code></pre>
<h3 data-number="2.4.10" id="合同签署流程"><span
class="header-section-number">2.4.10</span> 合同签署流程</h3>
<pre class="mermaid"><code>sequenceDiagram
participant 客户
participant 报装系统
participant 电子签章模块
participant 泛微CA系统
客户-&gt;&gt;报装系统: 提交签署申请
报装系统-&gt;&gt;电子签章模块: 生成签署任务
电子签章模块-&gt;&gt;泛微CA系统: 发起身份认证
泛微CA系统--&gt;&gt;电子签章模块: 返回认证结果
电子签章模块-&gt;&gt;泛微CA系统: 发起电子签章
泛微CA系统--&gt;&gt;电子签章模块: 返回签章结果
电子签章模块-&gt;&gt;泛微CA系统: 申请时间戳与存证
泛微CA系统--&gt;&gt;电子签章模块: 返回凭证
电子签章模块--&gt;&gt;报装系统: 返回签署结果
报装系统--&gt;&gt;客户: 通知合同签署完成
</code></pre>
<h3 data-number="2.4.11" id="核心数据-3"><span
class="header-section-number">2.4.11</span> 核心数据</h3>
<table>
<thead>
<tr>
<th>数据对象</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>installation_contract</code></td>
<td>报装合同主表(设计态专题扩展)</td>
</tr>
<tr>
<td><code>installation_signature</code></td>
<td>电子签章记录表(设计态专题扩展)</td>
</tr>
<tr>
<td><code>installation_evidence</code></td>
<td>电子存证记录表(设计态专题扩展)</td>
</tr>
<tr>
<td><code>installation_signature_template</code></td>
<td>签章模板与签署位置配置</td>
</tr>
</tbody>
</table>
<h3 data-number="2.4.12" id="关键规则"><span
class="header-section-number">2.4.12</span> 关键规则</h3>
<ol type="1">
<li>合同签署前必须完成身份认证。</li>
<li>合同正文、签署位置、签署人、签署时间必须完整留痕。</li>
<li>签署完成文件必须归档并生成可验证凭证。</li>
<li>外部 CA 接口异常时应支持重试与人工补偿处理。</li>
</ol>
<h3 data-number="2.4.13" id="接口映射-3"><span
class="header-section-number">2.4.13</span> 接口映射</h3>
<ul>
<li><code>IF-INST-003</code>:发起合同签署任务并传递合同信息。</li>
<li><code>IF-INST-004</code>:回写签章结果、时间戳和存证信息。</li>
</ul>
<h3 data-number="2.4.14" id="落地边界-3"><span
class="header-section-number">2.4.14</span> 落地边界</h3>
<ul>
<li><strong>已落地</strong>:签章流程、签章回执、时间戳与存证协同设计口径已明确。</li>
<li><strong>部分落地</strong><code>installation_*</code>
当前在数据库主文档中按专题扩展纳管,实施库需联合评审确认最终落表。</li>
<li><strong>文档先行</strong>:多 CA
厂商切换、批量签署编排等高级能力暂不表述为当前既有实现。</li>
</ul>
<p><a id="mod-inst-005"></a></p>
<h2 data-number="2.5" id="inst-003-档案管理"><span
class="header-section-number">2.5</span> INST-003 档案管理</h2>
<h3 data-number="2.5.1" id="功能说明-4"><span
class="header-section-number">2.5.1</span> 功能说明</h3>
<p>归集申请材料、设计方案、合同文件、验收资料、签章回执和过程日志,形成完整报装档案。</p>
<h3 data-number="2.5.2" id="关键设计-3"><span
class="header-section-number">2.5.2</span> 关键设计</h3>
<ul>
<li>档案按申请单维度统一归档。</li>
<li>电子签章合同、验收附件、影像资料统一存储。</li>
<li>档案查询支持按申请编号、客户、地址、时间、状态检索。</li>
</ul>
<h3 data-number="2.5.3" id="核心数据-4"><span
class="header-section-number">2.5.3</span> 核心数据</h3>
<ul>
<li><code>biz_content_attach</code>:报装材料、验收附件、影像资料。</li>
<li><code>installation_evidence</code>:签章存证与回执资料。</li>
<li><code>biz_process</code><code>biz_process_transfer</code>:过程留痕主线。</li>
</ul>
<h3 data-number="2.5.4" id="接口映射-4"><span
class="header-section-number">2.5.4</span> 接口映射</h3>
<ul>
<li><code>IF-INST-005</code>:归档申请、合同、验收资料与签章回执。</li>
<li><code>IF-INST-004</code>:签章回执结果进入归档链路。</li>
</ul>
<h3 data-number="2.5.5" id="落地边界-4"><span
class="header-section-number">2.5.5</span> 落地边界</h3>
<ul>
<li><strong>已落地</strong>:资料归档、过程日志留存、按申请维度检索的设计边界明确。</li>
<li><strong>部分落地</strong>:全文检索、影像
OCR、外部档案系统联动可能由专项系统承载。</li>
<li><strong>文档先行</strong>:长期电子档案治理和归档分层存储策略不作为当前应用开发首批范围。</li>
</ul>
</body>
</html>

BIN
output/15_INST_Detailed.pdf Normal file

Binary file not shown.

View File

@ -0,0 +1,330 @@
---
title: "15_INST_Detailed"
author: "系统设计团队"
date: "2024年12月19日"
documentclass: article
geometry: margin=1in
fontsize: 11pt
mainfont: "PingFang SC"
CJKmainfont: "PingFang SC"
---
---
doc_id: DT-15-INST
doc_role: module_body
authority: secondary
scope: 详细设计-报装与签章
source_of_truth: false
last_reviewed: 2026-03-18
retrieval_priority: P1
---
# 福建水务营收系统详细设计-报装与签章模块正文
## 章节导航(精简)
- [文档定位](#sec-position)
- [报装与签章详细设计正文](#sec-content)
- [报装模块统一约束](#sec-inst-rules)
- [接口与数据追溯矩阵](#sec-inst-trace)
- [INST-001 报装流程管理](#mod-inst-001)
- [INST-002 工程管理](#mod-inst-002)
- [INST-003 档案管理](#mod-inst-003)
<a id="sec-position"></a>
## 文档定位
本文档为 `01_Detailed_Design.md` 中“报装与签章详细设计”章节的模块正文拆分稿,便于按模块独立维护。正式交付口径以主详设为准。
<a id="sec-content"></a>
# 报装与签章详细设计
<a id="sec-inst-rules"></a>
## 报装模块统一约束
1. 报装模块承担 `SYS-002` 中“申请受理、踏勘方案、施工验收、立户通水、合同签章、档案归档”的完整主流程,流程主线以 `biz_process*``biz_content*` 为当前实现态口径。
2. 报装申请、踏勘结果、验收结果、签章回执、归档动作均必须通过流程节点驱动,不允许直接绕过业务过程修改主状态。
3. 施工验收通过后,方可进入客户建档、水表绑定、账户初始化与通水确认,避免前后置业务状态错位。
4. 电子签章专题表 `installation_*` 当前为“专题扩展口径”,若实施库结构与专题设计不一致,以实施库与主详设联合评审结果为准。
5. 报装过程中的申请材料、验收附件、签章文件、存证回执必须统一归档并具备可检索、可追溯能力。
<a id="sec-inst-trace"></a>
## 接口与数据追溯矩阵
> 说明:接口字段以 `../03_Technical_Design/03_Interface_Design.md` 为准,数据库口径以 `../03_Technical_Design/01_Database_Design.md` 为准。
| INST 模块 | 关键接口 | 核心数据域(摘要) | 主要协同对象 |
|---|---|---|---|
| INST-001 报装流程管理 | `IF-INST-001``IF-INST-002` | `biz_process``biz_content``biz_content_attach``biz_process_transfer``biz_business_datas` | 柜台、微网厅、政务平台、报装人员 |
| INST-002 工程管理 | `IF-INST-003``IF-INST-004``IF-INST-005` | `biz_process_meter_install``biz_process``biz_meter``installation_contract``installation_signature``installation_evidence` | 表务、客户建档、泛微 CA |
| INST-003 档案管理 | `IF-INST-005` | `biz_content_attach``installation_evidence`、过程日志 | 报装、档案管理 |
<a id="mod-inst-001"></a>
## INST-001 报装流程管理
### 功能说明
承接新装、改造、一户一表等业务从申请受理到现场踏勘、方案编制的前半段主流程,是架构图中“报装流程管理”模块的正式承接章节。
### 业务流程
```mermaid
flowchart TD
A[提交报装申请] --> B[采集申请信息与附件]
B --> C[受理校验]
C --> D{是否通过}
D -->|否| E[退回补充资料]
D -->|是| F[生成报装编号]
F --> G[创建流程实例]
G --> H[进入踏勘环节]
```
### 关键设计
- 统一采集申请人、地址、产权、用水性质、附件材料等信息。
- 支持政务平台、柜台、微网厅等多入口申请。
- 受理后自动生成报装编号并进入踏勘流程。
### 核心数据
- `biz_process`:报装流程主表。
- `biz_content`:申请资料主对象。
- `biz_content_attach`:申请附件。
- `installation_application`:报装申请映射对象(设计态)。
### 接口映射
- `IF-INST-001`:提交报装申请、申请资料与附件。
- `IF-INST-002`:回填踏勘结果、方案、审核结果。
- `IF-CS-006`:客户渠道办理入口可复用报装申请主线。
### 落地边界
- **已落地**:申请受理主流程、资料与附件采集、流程实例创建。
- **部分落地**:不同报装类型的细化受理规则、踏勘方案差异更多依赖流程和参数配置。
- **文档先行**`installation_application` 当前按设计态保留,不宣称为实施库既有事实表。
<a id="mod-inst-002"></a>
### 踏勘与方案设计能力
### 功能说明
组织现场勘查、工程条件确认、材料测算、施工方案与费用方案编制。
### 业务流程
```mermaid
flowchart TD
A[接收踏勘任务] --> B[现场勘查与拍照]
B --> C[记录供水条件与施工约束]
C --> D[编制方案与费用]
D --> E[提交审核]
E --> F{审核是否通过}
F -->|否| G[退回修改]
F -->|是| H[进入施工或合同环节]
```
### 关键设计
1. 踏勘记录包括现场照片、供水接入条件、施工难点、估算费用。
2. 方案版本化管理,支持设计审核与退回修改。
3. 勘查结果直接驱动合同金额与施工计划。
### 核心数据
- `biz_process_transfer`:节点流转与处理记录。
- `biz_business_datas`:踏勘与方案扩展数据。
- `biz_content_attach`:现场照片与附件资料。
### 接口映射
- `IF-INST-002`:回填踏勘结果、方案、审核结果。
### 落地边界
- **已落地**:踏勘流转、扩展数据回填、现场资料挂接。
- **部分落地**:材料测算、工程造价等可能在扩展数据或外部附件中承载。
- **文档先行**:复杂 BIM/预算系统联动不作为当前正式实现口径。
<a id="mod-inst-003"></a>
## INST-002 工程管理
### 功能说明
承接施工派工、安装实施、竣工验收、立户通水以及合同签章协同,是架构图中“工程管理”模块的正式承接章节。
### 业务流程
```mermaid
flowchart TD
A[下发施工任务] --> B[现场安装实施]
B --> C[录入装表与施工结果]
C --> D[提交竣工验收]
D --> E{验收是否通过}
E -->|否| F[整改后复验]
E -->|是| G[触发客户建档与水表绑定]
G --> H[初始化账户并确认通水]
```
### 关键设计
- 施工节点按派工、实施、验收、归档逐步留痕。
- 验收通过后自动触发客户建档、水表绑定和账户初始化。
- 与表务系统共享水表安装与换表数据。
### 核心数据
- `biz_process`:施工与验收流程主线。
- `biz_process_meter_install`:装表落地信息。
- `biz_meter`:水表安装与状态回写对象。
- `biz_cust``biz_account`:立户后续创建对象。
### 接口映射
- `IF-INST-005`:归档验收资料并提交最终办结信息。
- `IF-INST-003`:发起电子签章任务并传输合同信息。
- `IF-INST-004`:回写签章结果、时间戳和存证信息。
- `IF-METER-001``IF-METER-002`:装表与表务状态协同。
- `IF-REV-001`:立户后客户主档进入营收主数据域。
### 落地边界
- **已落地**:施工验收主线、装表结果留痕、客户建档与水表绑定协同。
- **部分落地**:施工派工计划与现场资源调度可能由外部施工管理工具承载。
- **文档先行**:复杂工程项目管理和材料成本结转不作为当前正式开发边界。
<a id="mod-inst-004"></a>
### 合同签署与电子签章能力
### 功能说明
通过集成泛微 CA 电子签章系统,实现报装合同、用水协议等文件的电子签署、时间戳和电子存证。
### 集成架构
```mermaid
graph TD
subgraph INST[报装业务系统]
A[申请受理]
B[合同管理]
C[电子签章模块]
D[档案归档]
end
subgraph CA[泛微CA电子签章系统]
E[身份认证服务]
F[电子签章服务]
G[时间戳服务]
H[电子存证服务]
end
A --> B
B --> C
C --> E
C --> F
C --> G
C --> H
C --> D
```
### 合同签署流程
```mermaid
sequenceDiagram
participant 客户
participant 报装系统
participant 电子签章模块
participant 泛微CA系统
客户->>报装系统: 提交签署申请
报装系统->>电子签章模块: 生成签署任务
电子签章模块->>泛微CA系统: 发起身份认证
泛微CA系统-->>电子签章模块: 返回认证结果
电子签章模块->>泛微CA系统: 发起电子签章
泛微CA系统-->>电子签章模块: 返回签章结果
电子签章模块->>泛微CA系统: 申请时间戳与存证
泛微CA系统-->>电子签章模块: 返回凭证
电子签章模块-->>报装系统: 返回签署结果
报装系统-->>客户: 通知合同签署完成
```
### 核心数据
| 数据对象 | 说明 |
|---|---|
| `installation_contract` | 报装合同主表(设计态专题扩展) |
| `installation_signature` | 电子签章记录表(设计态专题扩展) |
| `installation_evidence` | 电子存证记录表(设计态专题扩展) |
| `installation_signature_template` | 签章模板与签署位置配置 |
### 关键规则
1. 合同签署前必须完成身份认证。
2. 合同正文、签署位置、签署人、签署时间必须完整留痕。
3. 签署完成文件必须归档并生成可验证凭证。
4. 外部 CA 接口异常时应支持重试与人工补偿处理。
### 接口映射
- `IF-INST-003`:发起合同签署任务并传递合同信息。
- `IF-INST-004`:回写签章结果、时间戳和存证信息。
### 落地边界
- **已落地**:签章流程、签章回执、时间戳与存证协同设计口径已明确。
- **部分落地**`installation_*` 当前在数据库主文档中按专题扩展纳管,实施库需联合评审确认最终落表。
- **文档先行**:多 CA 厂商切换、批量签署编排等高级能力暂不表述为当前既有实现。
<a id="mod-inst-005"></a>
## INST-003 档案管理
### 功能说明
归集申请材料、设计方案、合同文件、验收资料、签章回执和过程日志,形成完整报装档案。
### 关键设计
- 档案按申请单维度统一归档。
- 电子签章合同、验收附件、影像资料统一存储。
- 档案查询支持按申请编号、客户、地址、时间、状态检索。
### 核心数据
- `biz_content_attach`:报装材料、验收附件、影像资料。
- `installation_evidence`:签章存证与回执资料。
- `biz_process``biz_process_transfer`:过程留痕主线。
### 接口映射
- `IF-INST-005`:归档申请、合同、验收资料与签章回执。
- `IF-INST-004`:签章回执结果进入归档链路。
### 落地边界
- **已落地**:资料归档、过程日志留存、按申请维度检索的设计边界明确。
- **部分落地**:全文检索、影像 OCR、外部档案系统联动可能由专项系统承载。
- **文档先行**:长期电子档案治理和归档分层存储策略不作为当前应用开发首批范围。

Binary file not shown.

259
output/document_style.css Normal file
View File

@ -0,0 +1,259 @@
/* 福建水务营收系统文档样式 */
@page {
margin: 2cm;
size: A4;
}
body {
font-family: "PingFang SC", "Microsoft YaHei", "SimSun", sans-serif;
font-size: 11pt;
line-height: 1.6;
color: #333;
max-width: none;
margin: 0;
padding: 0;
}
/* 标题样式 */
h1 {
font-size: 18pt;
font-weight: bold;
color: #1f4e79;
margin-top: 24pt;
margin-bottom: 12pt;
border-bottom: 2pt solid #1f4e79;
padding-bottom: 6pt;
page-break-after: avoid;
}
h2 {
font-size: 16pt;
font-weight: bold;
color: #2f5597;
margin-top: 18pt;
margin-bottom: 10pt;
border-bottom: 1pt solid #2f5597;
padding-bottom: 4pt;
page-break-after: avoid;
}
h3 {
font-size: 14pt;
font-weight: bold;
color: #365f91;
margin-top: 14pt;
margin-bottom: 8pt;
page-break-after: avoid;
}
h4 {
font-size: 12pt;
font-weight: bold;
color: #4472c4;
margin-top: 12pt;
margin-bottom: 6pt;
page-break-after: avoid;
}
h5 {
font-size: 11pt;
font-weight: bold;
color: #5b9bd5;
margin-top: 10pt;
margin-bottom: 5pt;
page-break-after: avoid;
}
h6 {
font-size: 10pt;
font-weight: bold;
color: #70ad47;
margin-top: 8pt;
margin-bottom: 4pt;
page-break-after: avoid;
}
/* 段落样式 */
p {
margin-top: 0;
margin-bottom: 8pt;
text-align: justify;
text-justify: inter-ideograph;
}
/* 表格样式(黑色边框) */
table {
border-collapse: collapse;
width: 100%;
margin: 12pt 0;
font-size: 10pt;
page-break-inside: avoid;
border: 1pt solid #000; /* 外边框黑色 */
}
th {
background-color: #4472c4;
color: white;
font-weight: bold;
padding: 8pt;
border: 1pt solid #000; /* 表头黑线 */
text-align: center;
}
td {
padding: 6pt 8pt;
border: 1pt solid #000; /* 单元格黑线 */
vertical-align: top;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
/* 代码样式 */
code {
font-family: "Courier New", "Monaco", monospace;
font-size: 9pt;
background-color: #f5f5f5;
padding: 2pt 4pt;
border-radius: 2pt;
border: 1pt solid #e1e1e1;
}
pre {
font-family: "Courier New", "Monaco", monospace;
font-size: 9pt;
background-color: #f8f8f8;
padding: 12pt;
border: 1pt solid #e1e1e1;
border-radius: 4pt;
overflow-x: auto;
margin: 12pt 0;
page-break-inside: avoid;
}
pre code {
background: none;
padding: 0;
border: none;
}
/* 列表样式 */
ul, ol {
margin: 8pt 0;
padding-left: 24pt;
}
li {
margin: 4pt 0;
}
/* 图片样式 */
img {
max-width: 100%;
height: auto;
display: block;
margin: 12pt auto;
border: 1pt solid #e1e1e1;
border-radius: 4pt;
page-break-inside: avoid;
}
/* 图表标题 */
img + p, p + img {
text-align: center;
font-weight: bold;
color: #4472c4;
font-size: 10pt;
margin: 6pt 0;
}
/* 分页符 */
.page-break {
page-break-before: always;
}
/* 避免孤行和寡行 */
p, li, dt, dd {
orphans: 2;
widows: 2;
}
/* 链接样式 */
a {
color: #0563c1;
text-decoration: underline;
}
a:visited {
color: #954f72;
}
/* 引用样式 */
blockquote {
margin: 12pt 0;
padding: 12pt;
background-color: #f9f9f9;
border-left: 4pt solid #4472c4;
font-style: italic;
}
/* 水平分隔线 */
hr {
border: none;
border-top: 1pt solid #d1d1d1;
margin: 18pt 0;
}
/* Details/Summary 样式 */
details {
margin: 8pt 0;
border: 1pt solid #e1e1e1;
border-radius: 4pt;
padding: 8pt;
}
summary {
font-weight: bold;
cursor: pointer;
color: #4472c4;
margin-bottom: 8pt;
}
/* 强调样式 */
strong, b {
font-weight: bold;
color: #1f4e79;
}
em, i {
font-style: italic;
color: #365f91;
}
/* 印刷样式优化 */
@media print {
body {
font-size: 10pt;
line-height: 1.4;
}
h1 { font-size: 16pt; }
h2 { font-size: 14pt; }
h3 { font-size: 12pt; }
h4 { font-size: 11pt; }
h5 { font-size: 10pt; }
h6 { font-size: 9pt; }
table { font-size: 9pt; }
code, pre { font-size: 8pt; }
/* 避免在不适当的地方分页 */
h1, h2, h3, h4, h5, h6 {
page-break-after: avoid;
}
table, pre, img {
page-break-inside: avoid;
}
}

View File

@ -0,0 +1,587 @@
---
doc_id: TC-07-PGSQL-DR
doc_role: supplemental_document
authority: secondary
scope: PostgreSQL 16 容灾资源申请
source_of_truth: false
last_reviewed: 2026-03-24
retrieval_priority: P1
---
# 福建水务营收系统 PostgreSQL 16 容灾与资源申请说明
## 文档信息
| 项目信息 | 详情 |
|---------|------|
| **项目名称** | 福建水务营收系统 |
| **文档类型** | 技术专题说明 |
| **专题用途** | 向甲方申请 PostgreSQL 16 容灾部署资源 |
| **文档版本** | v1.0 |
| **编写日期** | 2026-03-24 |
| **文档状态** | ✅ 正式建议稿 |
## 目录
1. 编制目的
2. 适用范围与说明
3. 容灾建设目标
4. 容灾形态说明
5. 资源配比原则
6. 推荐部署方案
7. 甲方审批汇总表
8. 详细资源申请清单
9. 网络与存储要求
10. 数据库代理与连接接入方案
11. 部署实施说明
12. 切换与恢复说明
13. 切换实施细则
14. 申请结论
## 编制目的
本文档用于说明福建水务营收系统采用 PostgreSQL 16 建设数据库高可用与灾难恢复能力时,所需的资源规模、部署形态、主备配比及实施要求,作为甲方进行服务器、存储、网络及运行环境审批的依据。
## 适用范围与说明
1. 本文档面向 PostgreSQL 16 数据库部署专题,重点说明容灾与资源申请口径。
2. 本文档用于资源论证与部署申请,不替代数据库主文档和总体部署主文档。
3. 文中关于备库资源比例、网络带宽、存储冗余和部署组合的建议,属于结合 PostgreSQL 16 流复制、热备与时间点恢复机制形成的工程实施建议。
## 容灾建设目标
PostgreSQL 16 容灾建设目标如下:
1. 在主库节点故障时,保障数据库能够快速切换并恢复服务。
2. 在误操作、逻辑损坏、批量异常更新等场景下,保障系统具备时间点恢复能力。
3. 在核心收费、账务、对账等业务场景中,尽量降低故障切换时的数据丢失风险。
4. 在资源投入可控的前提下,为甲方提供可分阶段实施的多种建设形态。
## 容灾形态说明
结合 PostgreSQL 16 能力及甲方常见基础设施条件,建议按以下四种形态进行资源申请与部署评估。
### 形态一:单中心主备容灾
适用于预算有限、优先满足基础高可用能力的场景。
部署关系图:
![图1](images/diagram_1.png)
1. 主库与备库部署在同一机房或同一可用区。
2. 备库可采用 `Warm Standby``Hot Standby`
3. 推荐采用异步复制;如网络稳定且事务一致性要求较高,也可采用同步复制。
4. 该形态可解决单机故障问题,但不能覆盖机房级灾难。
### 形态二:同城双可用区主备容灾
适用于生产系统正式上线场景,兼顾高可用与较高的数据安全要求。
部署关系图:
![图2](images/diagram_2.png)
说明:
1. 主库与备库部署在同城不同机房或不同可用区。
2. 推荐备库采用 `Hot Standby`,可承担只读查询与切换接管职责。
3. 对收费、账务、实收确认等核心业务,宜优先评估同步复制。
4. 该形态可覆盖单节点故障和单可用区故障,是生产环境优先推荐的基础方案。
### 形态三:同城双中心 + 异地灾备
适用于对连续运行能力要求较高,且需要同时覆盖机房级与区域级风险的场景。
部署关系图:
![图3](images/diagram_3.png)
说明:
1. 同城备库承担高可用切换职责。
2. 异地灾备库承担区域级灾难恢复职责。
3. 异地灾备一般采用异步复制,避免远距离链路对主业务写入性能造成明显影响。
4. 该形态可满足高可用与灾备双重要求,适合作为甲方正式建设目标方案。
### 形态四:主备高可用 + 备份恢复型灾备
适用于暂不具备异地第三节点条件,但需要形成完整灾难恢复能力的场景。
部署关系图:
![图4](images/diagram_4.png)
说明:
1. 在线层保持主备双节点高可用。
2. 异地侧不部署实时在线数据库实例,主要承载基础备份和 WAL 归档。
3. 该形态投入低于三节点实时灾备,但恢复时间长于在线异地灾备库方案。
4. 适用于二期或预算受限情况下的过渡方案。
## 资源配比原则
### 主备资源总体原则
1. 主库负责生产写入CPU、内存、I/O、网络压力最大。
2. 备库必须保存完整数据副本,因此备库存储容量原则上不得低于主库。
3. 如备库承担实时切换接管职责,其 CPU 与内存不宜明显低于主库。
4. 如备库仅承担异步灾备且不承载查询压力,可适当降低 CPU 与内存,但不应压缩存储容量和网络链路质量。
### 主备资源比例建议
| 备库角色 | 复制方式 | 是否承担读请求 | CPU 建议 | 内存建议 | 存储建议 | 适用说明 |
|---|---|---|---|---|---|---|
| 同步热备库 | 同步复制 | 是 | 不低于主库 100% | 不低于主库 100% | 不低于主库 100%,建议 120% | 生产正式切换节点,要求切换后立即承载全部业务 |
| 同步温备库 | 同步复制 | 否 | 主库的 70% 至 100% | 主库的 70% 至 100% | 不低于主库 100%,建议 120% | 不承载查询,但需要较快接管生产流量 |
| 异步热备库 | 异步复制 | 是 | 主库的 70% 至 100% | 主库的 70% 至 100% | 不低于主库 100%,建议 120% | 可承担报表查询或只读分析 |
| 异步温备库 | 异步复制 | 否 | 主库的 50% 至 70% | 主库的 50% 至 70% | 不低于主库 100%,建议 120% | 仅承担容灾接管,不参与日常查询 |
| 异地灾备库 | 异步复制 | 否 | 主库的 50% 左右 | 主库的 50% 至 70% | 不低于主库 100%,建议 120% | 主要用于区域级容灾恢复 |
| 备份恢复节点 | PITR | 否 | 可不单独配置在线节点 | 可不单独配置在线节点 | 备份空间建议为主库有效数据量的 2 至 3 倍 | 用于误操作恢复和灾难后重建 |
### 资源配比说明
1. 备库存储不能按 CPU、内存比例缩减原因是 PostgreSQL 备库需要保存完整数据文件、索引文件及 WAL 回放空间。
2. 当备库承担 `Hot Standby` 查询或要求快速晋升为主库时,推荐按主库同规格申请。
3. 当备库仅作为冷备或异步灾备节点时,可降低计算资源,但仍需预留恢复、回放和切换后的运行余量。
## 推荐部署方案
结合福建水务营收系统收费、账务、对账等核心业务连续性要求,建议分为三档申请方案。
### 方案 A基础上线方案
1. 架构形态:单中心主备容灾。
2. 节点组成1 主库 + 1 备库 + 1 套备份归档存储。
3. 复制方式:异步复制。
4. 适用场景:预算受限、优先满足基本高可用要求。
### 方案 B正式生产推荐方案
1. 架构形态:同城双可用区主备容灾。
2. 节点组成1 主库 + 1 同城热备库 + 1 套备份归档存储。
3. 复制方式:核心业务优先评估同步复制。
4. 适用场景:正式生产环境,要求故障切换后快速恢复业务。
### 方案 C正式生产增强方案
1. 架构形态:同城双中心 + 异地灾备。
2. 节点组成1 主库 + 1 同城同步热备库 + 1 异地异步灾备库 + 1 套集中备份归档存储。
3. 复制方式:同城同步复制,异地异步复制。
4. 适用场景:甲方对连续运行、审计留痕、灾难恢复要求较高的正式建设项目。
本项目建议优先向甲方申请方案 B如甲方同时要求区域级灾难恢复能力建议直接申请方案 C。
## 甲方审批汇总表
以下汇总表用于甲方进行资源审批、预算评估和实施范围确认。建议优先按“方案 B正式生产推荐方案”审批如甲方同时要求区域级灾难恢复能力可按“方案 C正式生产增强方案”审批。
### 方案 A基础上线方案审批汇总表
| 类别 | 资源项 | 数量 | 单项建议规格 | 审批说明 |
|---|---|---:|---|---|
| 服务器 | 主库服务器 | 1 台 | 16 核 CPU / 64 GB 内存 / 2 TB NVMe SSD | 承担全部生产写入 |
| 服务器 | 备库服务器 | 1 台 | 12 至 16 核 CPU / 48 至 64 GB 内存 / 2 TB NVMe SSD | 承担主库故障接管 |
| 服务器 | 管理与监控节点 | 1 台 | 8 核 CPU / 16 GB 内存 / 500 GB SSD | 部署监控、备份调度、巡检工具 |
| 存储 | 备份归档存储 | 1 套 | 可用空间 4 TB 起 | 存放全量备份与 WAL 归档 |
| 网络 | 主备复制链路 | 1 组 | 不低于 10 Gbps | 建议与业务访问链路隔离 |
| 网络 | 业务接入地址 | 1 组 | 统一数据库代理地址 | 应用统一接入,不直连数据库 IP |
| 软件 | PostgreSQL 16 | 2 套实例 | 主库 1 套,备库 1 套 | 构建基础主备容灾 |
| 软件 | PgBouncer | 1 套 | 连接池代理 | 统一控制连接数 |
| 软件 | HAProxy | 1 套 | 数据库入口代理 | 提供统一切换入口 |
| 软件 | Patroni | 1 套 | 高可用管理组件 | 管理主备选举与切换 |
### 方案 B正式生产推荐方案审批汇总表
| 类别 | 资源项 | 数量 | 单项建议规格 | 审批说明 |
|---|---|---:|---|---|
| 服务器 | 主库服务器 | 1 台 | 16 核 CPU / 64 GB 内存 / 2 TB NVMe SSD | 部署在生产可用区 |
| 服务器 | 同城热备服务器 | 1 台 | 16 核 CPU / 64 GB 内存 / 2 TB NVMe SSD | 与主库同规格,承担正式接管 |
| 服务器 | 管理与监控节点 | 1 台 | 8 核 CPU / 16 GB 内存 / 500 GB SSD | 部署监控、备份、巡检、告警 |
| 存储 | 备份归档存储 | 1 套 | 可用空间 4 TB 至 6 TB | 存放备份、WAL、恢复校验副本 |
| 网络 | 主备复制链路 | 1 组 | 不低于 10 Gbps | 同城低时延链路,适合同步复制 |
| 网络 | 主备时延要求 | 1 项 | 建议低于 2 ms | 支撑主备同步与快速切换 |
| 网络 | 业务接入地址 | 1 组 | 统一数据库代理地址 | 应用系统通过代理地址访问 |
| 软件 | PostgreSQL 16 | 2 套实例 | 主库 1 套,热备库 1 套 | 构建正式生产主备体系 |
| 软件 | PgBouncer | 1 套 | 连接池代理 | 控制连接数并稳定应用连接 |
| 软件 | HAProxy | 1 套 | 数据库入口代理 | 承担统一读写入口切换 |
| 软件 | Patroni | 1 套 | 高可用管理组件 | 管理主备状态、提升与故障切换 |
### 方案 C正式生产增强方案审批汇总表
| 类别 | 资源项 | 数量 | 单项建议规格 | 审批说明 |
|---|---|---:|---|---|
| 服务器 | 主库服务器 | 1 台 | 16 核 CPU / 64 GB 内存 / 2 TB NVMe SSD | 部署在生产中心 |
| 服务器 | 同城同步热备服务器 | 1 台 | 16 核 CPU / 64 GB 内存 / 2 TB NVMe SSD | 承担正式主备切换 |
| 服务器 | 异地灾备服务器 | 1 台 | 8 至 12 核 CPU / 32 至 48 GB 内存 / 2 TB NVMe SSD | 承担区域级灾难恢复 |
| 服务器 | 管理与监控节点 | 1 台 | 8 核 CPU / 16 GB 内存 / 500 GB SSD | 部署监控、备份、审计工具 |
| 存储 | 集中备份归档存储 | 1 套 | 可用空间 6 TB 起 | 保存全量备份、WAL、演练副本 |
| 网络 | 同城复制链路 | 1 组 | 不低于 10 Gbps | 保障同步复制稳定性 |
| 网络 | 异地复制链路 | 1 组 | 专线或稳定 VPN | 保障异步复制与备份回传 |
| 网络 | 业务接入地址 | 1 组 | 统一数据库代理地址 | 应用不直接访问数据库节点 |
| 软件 | PostgreSQL 16 | 3 套实例 | 主库 1 套,同城热备 1 套,异地灾备 1 套 | 构建高可用与灾备双层体系 |
| 软件 | PgBouncer | 1 套 | 连接池代理 | 稳定应用接入层 |
| 软件 | HAProxy | 1 套 | 数据库入口代理 | 承担统一流量入口与切换 |
| 软件 | Patroni | 1 套 | 高可用管理组件 | 管理主备状态与故障切换 |
### 审批建议结论
| 审批项 | 建议结论 | 说明 |
|---|---|---|
| 首选审批方案 | 方案 B | 兼顾资源投入、主备切换能力和正式生产可用性 |
| 最低建设标准 | 不低于方案 A | 至少满足双节点主备与独立备份归档 |
| 增强建设目标 | 方案 C | 适用于要求区域级灾难恢复的正式项目 |
| 备库资源口径 | 存储不低于主库,热备计算资源宜等同主库 | 避免切换后承载不足 |
| 接入方式 | 统一数据库代理地址 | 禁止应用直连数据库物理 IP |
## 详细资源申请清单
以下清单以单套生产系统为口径,作为资源申请参考基线。实际规模可根据并发量、数据量和保留周期进一步调整。
### 方案 A 资源申请清单
| 资源类型 | 数量 | 单节点建议配置 | 说明 |
|---|---:|---|---|
| 主库服务器 | 1 台 | 16 核 CPU / 64 GB 内存 / 2 TB NVMe SSD | 承担生产写入 |
| 备库服务器 | 1 台 | 12 至 16 核 CPU / 48 至 64 GB 内存 / 2 TB NVMe SSD | 温备或热备均可 |
| 备份存储 | 1 套 | 可用空间 4 TB 起 | 存放基础备份与 WAL 归档 |
| 管理与监控节点 | 1 台 | 8 核 CPU / 16 GB 内存 / 500 GB SSD | 部署监控、备份调度、巡检工具 |
### 方案 B 资源申请清单
| 资源类型 | 数量 | 单节点建议配置 | 说明 |
|---|---:|---|---|
| 主库服务器 | 1 台 | 16 核 CPU / 64 GB 内存 / 2 TB NVMe SSD | 部署在生产可用区 |
| 同城热备服务器 | 1 台 | 16 核 CPU / 64 GB 内存 / 2 TB NVMe SSD | 与主库同规格,承担热备与切换 |
| 备份归档存储 | 1 套 | 可用空间 4 TB 至 6 TB | 存放基础备份、WAL、恢复校验副本 |
| 管理与监控节点 | 1 台 | 8 核 CPU / 16 GB 内存 / 500 GB SSD | 部署监控、备份、连接代理等工具 |
### 方案 C 资源申请清单
| 资源类型 | 数量 | 单节点建议配置 | 说明 |
|---|---:|---|---|
| 主库服务器 | 1 台 | 16 核 CPU / 64 GB 内存 / 2 TB NVMe SSD | 部署在生产中心 |
| 同城同步热备服务器 | 1 台 | 16 核 CPU / 64 GB 内存 / 2 TB NVMe SSD | 作为正式切换节点 |
| 异地灾备服务器 | 1 台 | 8 至 12 核 CPU / 32 至 48 GB 内存 / 2 TB NVMe SSD | 用于区域级灾备恢复 |
| 集中备份归档存储 | 1 套 | 可用空间 6 TB 起 | 统一保存全量备份与 WAL 归档 |
| 管理与监控节点 | 1 台 | 8 核 CPU / 16 GB 内存 / 500 GB SSD | 部署监控、备份、审计工具 |
### 资源申请补充说明
1. 如甲方要求备库长期承担报表、统计或只读查询负载,备库应按主库同规格申请。
2. 如数据库数据量预估超过 1 TB建议主库与备库磁盘统一提升至 4 TB 起步。
3. 如需要保留 30 日以上 WAL 归档或多周期全量备份,备份存储应按“在线数据量的 2 至 3 倍”进行规划。
## 网络与存储要求
### 网络要求
| 项目 | 建议要求 | 说明 |
|---|---|---|
| 主备网络带宽 | 不低于 10 Gbps | 保障流复制稳定性与切换效率 |
| 同城主备时延 | 建议低于 2 ms | 适合同步复制 |
| 异地主备链路 | 建议专线或稳定 VPN | 适合异步复制与备份回传 |
| 复制链路隔离 | 建议与业务访问链路分离 | 降低复制抖动风险 |
### 存储要求
| 项目 | 建议要求 | 说明 |
|---|---|---|
| 主库存储 | NVMe SSD 或企业级 SSD | 保障 WAL 与随机 I/O 性能 |
| 备库存储 | 不低于主库存储规格 | 保障回放与切换性能 |
| 磁盘阵列 | RAID 10 优先 | 平衡可靠性与性能 |
| 备份存储 | 独立于数据库数据盘 | 避免单点故障导致备份不可用 |
## 数据库代理与连接接入方案
### 建设目标
为避免应用系统直接连接数据库物理节点并降低主备切换时应用侧配置变更成本PostgreSQL 16 容灾体系宜配套建设数据库代理与连接接入层。
数据库代理层建设目标如下:
1. 为应用系统提供统一数据库访问地址。
2. 在主备切换时避免逐台修改应用节点连接配置。
3. 控制应用连接数,降低数据库连接管理压力。
4. 为后续读写分离和只读查询扩展预留接入能力。
### 推荐组件组合
结合当前项目应用规模与运维复杂度控制要求,推荐采用以下组件组合:
1. `Patroni`:负责 PostgreSQL 主备状态管理、主库选举与故障切换。
2. `HAProxy`:负责数据库访问入口转发,将写请求路由到当前主库。
3. `PgBouncer`:负责连接池管理,降低应用对 PostgreSQL 后端连接数的直接冲击。
本项目不建议以 `pgpool-II` 作为首选统一方案。原因在于 `pgpool-II` 功能较重、配置复杂、运维成本较高,不利于当前项目在甲方环境中的快速落地与稳定运维。
### 推荐接入拓扑
#### 模式一:统一读写入口
适用于一期先满足高可用与连接池要求,暂不启用读写分离的场景。
接入关系图:
![图5](images/diagram_5.png)
说明:
1. 应用系统统一连接 `PgBouncer` 暴露的数据库接入地址。
2. `PgBouncer` 后端连接到 `HAProxy` 的读写入口。
3. `HAProxy` 根据 `Patroni` 暴露的主备状态,将流量转发到当前主库。
4. 主备切换时,应用端数据库 URL 不变。
#### 模式二:读写分离入口
适用于二期或存在报表、统计、查询分流需求的场景。
接入关系图:
![图6](images/diagram_6.png)
说明:
1. 写请求通过 `RW` 入口访问当前主库。
2. 只读查询通过 `RO` 入口访问热备库。
3. 如备库不可用,`RO` 入口可根据策略降级转发到主库或暂时关闭。
4. 应用需在代码或配置层明确区分读写连接场景。
### 推荐选型结论
对于福建水务营收系统当前阶段,建议优先采用“`Patroni + HAProxy + PgBouncer`”组合,并采用“统一读写入口”模式上线。待系统稳定运行后,再根据报表与统计查询压力评估是否扩展为“读写分离入口”模式。
### HAProxy 示例配置
以下配置仅用于说明读写入口代理思路,实际参数应由项目环境统一配置并纳入变更管理。
```haproxy
global
log 127.0.0.1 local0
maxconn 20000
defaults
log global
mode tcp
timeout connect 5s
timeout client 1m
timeout server 1m
frontend pg_rw
bind *:5000
default_backend pg_primary
backend pg_primary
option tcp-check
default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
server pg01 10.0.0.11:5432 check
server pg02 10.0.0.12:5432 check backup
```
配置说明:
1. 应用不直接连接 PostgreSQL 5432而是连接 `HAProxy` 暴露的 5000 端口。
2. `pg01` 为当前主库,`pg02` 为备库。
3. 主库不可用时,代理层将连接切换至备用节点。
4. 正式环境建议结合 `Patroni` REST 状态接口配置更准确的主备健康检查,而非仅做普通 TCP 存活检查。
### PgBouncer 示例配置
以下配置仅用于说明连接池配置思路,实际参数应由项目环境统一配置并纳入变更管理。
```ini
[databases]
waterdb = host=10.0.0.20 port=5000 dbname=waterdb
[pgbouncer]
listen_addr = 0.0.0.0
listen_port = 6432
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
pool_mode = transaction
max_client_conn = 5000
default_pool_size = 100
reserve_pool_size = 20
server_reset_query = DISCARD ALL
ignore_startup_parameters = extra_float_digits
```
配置说明:
1. 应用系统统一连接 `PgBouncer` 的 6432 端口。
2. `PgBouncer` 后端目标不是数据库主机,而是 `HAProxy` 的读写入口地址。
3. 推荐优先采用 `transaction` 池化模式,以提升连接复用效率。
4. 如存在依赖会话级状态的特殊业务,应专项评估是否改用 `session` 模式。
### 应用接入建议
对于当前项目的 4 台应用服务器集群,不建议在每台应用服务器上分别配置数据库主机地址切换逻辑。推荐做法如下:
1. 应用配置文件统一写入数据库代理地址,不写数据库物理主机 IP。
2. 生产环境统一维护一个数据库接入地址,例如 `db-rw.xxx.local:6432`
3. 所有应用节点使用同一连接地址接入,由代理层完成后端数据库节点切换。
4. 如后续启用读写分离,再增加只读接入地址,例如 `db-ro.xxx.local:6432`
### 切换时的接入逻辑
当主库发生故障或进行计划切换时,推荐接入逻辑如下:
1. `Patroni` 判定新的主库节点。
2. `HAProxy` 将读写入口转发目标切换至新主库。
3. `PgBouncer` 清理失效后端连接并重建到新主库的连接。
4. 应用系统通过连接池重试机制继续访问统一代理地址。
在该机制下,应用系统通常无需修改数据库配置,仅在切换瞬间可能出现极短暂连接重试或少量请求失败,恢复后可继续正常提供服务。
### 正式文档建议表述
为保障福建水务营收系统数据库主备切换时应用系统的连续接入能力数据库访问层宜采用“Patroni 负责主备选举、HAProxy 负责访问转发、PgBouncer 负责连接池管理”的组合架构。应用系统统一通过数据库代理地址访问数据库,不直接连接数据库物理节点;当主库故障或发生计划切换时,由代理层自动将访问流量切换至新的主库节点,从而实现应用侧最小感知切换。
## 部署实施说明
### 部署原则
1. 主库与同城备库不得部署在同一物理主机。
2. 同城备库宜部署在独立机柜、独立电源域或独立可用区。
3. 异地灾备节点宜部署在独立数据中心,避免与生产中心共用故障域。
4. 备份归档存储应与数据库节点分离部署。
### 组件部署说明
1. 主库节点:部署 PostgreSQL 16 主实例,承担生产写入。
2. 备库节点:部署 PostgreSQL 16 备用实例,通过流复制接收主库 WAL。
3. 备份节点或备份存储保存基础备份、WAL 归档和恢复校验文件。
4. 管理与监控节点:部署 PostgreSQL 监控、备份调度、告警和巡检组件。
### 软件部署建议
1. 操作系统宜采用稳定版 Linux 发行版。
2. 数据目录、WAL 目录、备份目录建议分盘或分卷部署。
3. 主备切换宜配套连接路由、VIP 或代理层能力,避免应用侧频繁修改连接地址。
4. 生产环境应启用备份校验、归档校验和恢复演练机制。
## 切换与恢复说明
### 故障切换
1. 主库故障时,由同城备库提升为新主库。
2. 应用连接通过统一连接地址或代理切换到新主库。
3. 原主库恢复后,应重新以备库身份加入复制体系。
### 数据恢复
1. 误删除、误更新或逻辑损坏场景,通过基础备份与 WAL 归档执行 `PITR` 时间点恢复。
2. 区域级灾难场景下,可优先启用异地灾备库;如未建设异地在线库,则从异地备份存储重建数据库。
### 运维要求
1. 每季度至少开展 1 次主备切换演练。
2. 每季度至少开展 1 次 `PITR` 恢复演练。
3. 每日检查复制延迟、归档状态、备份成功率和磁盘余量。
## 切换实施细则
### 总体原则
福建水务营收系统数据库切换应遵循“统一入口切换、先判定后切换、先验证后恢复流量、禁止双主”的实施原则。
1. 应用系统统一通过数据库代理地址访问数据库,不直接连接数据库物理节点。
2. 切换分为计划切换、故障切换和回切三类场景。
3. 任一切换过程中,必须避免原主库与新主库同时对外提供写服务。
4. 切换完成后,必须执行收费、开账、账务、发票、银行代扣等关键业务链路验证。
### 计划切换流程
计划切换适用于数据库补丁升级、主机维护、操作系统维护、机房迁移演练等场景。
执行顺序:
发起计划切换申请 → 确认切换窗口与影响范围 → 检查主备复制状态 → 暂停高风险写入操作 → 确认备库追平主库 → 提升备库为新主库 → 切换代理入口到新主库 → 验证关键业务链路 → 恢复应用写入流量 → 原主库修复并重建为备库。
实施要点如下:
1. 切换前至少确认主备复制无明显延迟。
2. 切换窗口内应暂停批量开账、批量代扣、批量票据处理等高风险写入任务。
3. 备库提升后,应优先切换代理层入口,不建议逐台修改应用配置。
4. 切换成功后,原主库应以备库身份重新加入复制体系,不得直接恢复为独立写节点。
### 故障切换流程
故障切换适用于主库主机宕机、数据库实例不可用、主库存储异常、主库不可恢复等场景。
执行顺序:
监控发现主库异常 → 确认主库不可服务 → 隔离原主库写入能力 → 确认备库状态可提升 → 提升备库为新主库 → 代理入口切换到新主库 → 应用重连并恢复服务 → 验证关键业务 → 故障主机修复 → 重建为新备库。
实施要点如下:
1. 故障切换的前提不是“主库变慢”,而是“主库已无法稳定提供写服务”。
2. 在故障未完全确认前,不得贸然提升多个备库。
3. 如主库网络隔离但实例未真正关闭,应先执行隔离措施,避免形成双主风险。
4. 故障切换后应优先恢复核心业务可用性,再执行历史备库链路重建。
### 回切流程
回切是指原主库修复完成后,在合适窗口下恢复为生产主库或重新调整主备角色。
执行顺序:
原主库修复完成 → 作为备库追平现主库 → 评估是否需要回切。
如不需要回切,则保持现状运行。
如需要回切,则执行以下步骤:发起计划回切窗口 → 暂停高风险写入 → 确认复制追平 → 切换代理入口 → 恢复原主库为主库 → 验证关键业务 → 现主库调整为备库。
实施要点如下:
1. 故障切换后并不要求立即回切,应以稳定运行为优先。
2. 仅当原主机重新具备稳定承载能力,且运维窗口允许时,才建议执行回切。
3. 回切本质上属于一次计划切换,应按计划切换流程执行。
### 切换前检查表
| 检查项 | 检查要求 | 说明 |
|---|---|---|
| 主备复制状态 | 无严重延迟或异常中断 | 确认备库具备接管条件 |
| WAL 归档状态 | 最近归档成功 | 避免切换与恢复证据缺口 |
| 备库只读可用性 | 可正常连接与查询 | 确认备库实例健康 |
| 代理状态 | `HAProxy``PgBouncer` 正常 | 确保切换入口可用 |
| 应用连接配置 | 使用统一代理地址 | 禁止应用直连数据库 IP |
| 定时任务状态 | 高风险写任务可暂停 | 包括批量收费、批量代扣等 |
| 业务通知 | 已通知相关业务与运维人员 | 降低切换窗口影响 |
### 切换后验证表
| 验证项 | 验证要求 | 适用说明 |
|---|---|---|
| 数据库连接 | 应用可正常连接新主库 | 基础可用性验证 |
| 登录与鉴权 | 后台登录、令牌校验正常 | 确认统一平台链路正常 |
| 收费业务 | 单笔收费、销账可执行 | 核心写业务验证 |
| 开账业务 | 账单查询、开账写入正常 | 核心账务链路验证 |
| 发票业务 | 发票申请、查询可用 | 核心票据链路验证 |
| 银行代扣 | 查询和批次处理链路正常 | 涉及外联时至少完成内部链路检查 |
| 日志与监控 | 新主库监控、慢日志、告警恢复正常 | 运维可观测性验证 |
| 备份与归档 | 新主库 WAL 归档恢复正常 | 确认恢复能力未中断 |
### 当前项目建议切换策略
结合当前项目部署口径,建议采用以下策略:
1. 数据库切换统一由数据库代理层完成,不在 4 台应用服务器上分别切换配置。
2. 一期建议采用统一读写入口模式,减少应用改造复杂度。
3. 切换窗口内应重点管控收费、账务、发票、银行代扣等核心写入场景。
4. 生产切换完成后,应同步检查 `Quartz` 定时任务、银行文件处理任务及发票异步任务是否恢复正常。
### 正式文档建议表述
福建水务营收系统数据库切换采用“主备切换 + 代理入口切换”的实施模式。计划切换和故障切换均由数据库高可用组件完成主备角色调整,由数据库代理层完成统一接入地址切换,应用系统不直接感知数据库物理节点变化。切换实施前应完成复制状态、归档状态、代理状态和高风险任务状态检查,切换实施后应完成收费、开账、账务、发票、银行代扣等关键业务链路验证,并将原主库按备库角色重新纳入复制体系。
## 申请结论
为满足福建水务营收系统生产环境对数据库连续运行和灾难恢复的要求,建议甲方按以下原则审批 PostgreSQL 16 容灾资源:
1. 至少配置 1 台主库服务器、1 台备库服务器和 1 套独立备份归档存储。
2. 如备库承担正式接管职责CPU 与内存宜按主库 100% 配置,存储不得低于主库。
3. 如需形成正式生产级容灾体系,建议采用“同城双可用区主备 + 备份归档”方案。
4. 如需形成区域级灾难恢复体系,建议进一步增配 1 台异地灾备服务器。
综上PostgreSQL 16 容灾资源申请可分阶段实施,但正式生产环境不宜低于“双节点主备 + 独立备份归档”的最低建设标准。

View File

@ -0,0 +1,5 @@
flowchart TD
APP[应用集群] --> PG1[(主库 Primary)]
PG1 -->|流复制| PG2[(备库 Standby)]
PG1 --> BK[备份归档存储]
PG2 --> BK

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -0,0 +1,12 @@
flowchart LR
subgraph AZ1[生产可用区 A]
APP1[应用节点]
PG1[(主库 Primary)]
end
subgraph AZ2[同城可用区 B]
PG2[(同步备库 Standby)]
end
APP1 --> PG1
PG1 -->|同步复制| PG2
PG1 --> BK[备份归档存储]
PG2 --> BK

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -0,0 +1,15 @@
flowchart LR
subgraph IDC1[生产中心]
PG1[(主库 Primary)]
end
subgraph IDC2[同城灾备中心]
PG2[(同步备库 Standby)]
end
subgraph IDC3[异地灾备中心]
PG3[(异步灾备库 DR)]
end
PG1 -->|同步复制| PG2
PG1 -->|异步复制| PG3
PG1 --> BK[备份归档存储]
PG2 --> BK
PG3 --> BK

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -0,0 +1,5 @@
flowchart TD
APP[应用集群] --> PG1[(主库 Primary)]
PG1 -->|同步/异步复制| PG2[(同城备库 Standby)]
PG1 -->|基础备份 + WAL 归档| OBJ[异地对象存储/异地备份库]
PG2 -->|基础备份 + WAL 归档| OBJ

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -0,0 +1,5 @@
flowchart TD
APP[应用集群] --> PGB[PgBouncer]
PGB --> HAP[HAProxy RW 入口]
HAP --> PG1[(当前主库 Primary)]
PAT[Patroni] -.主备状态.-> HAP

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -0,0 +1,9 @@
flowchart LR
APP[应用集群] --> PGBRW[PgBouncer RW]
APP --> PGBRO[PgBouncer RO]
PGBRW --> HAPRW[HAProxy RW]
PGBRO --> HAPRO[HAProxy RO]
HAPRW --> PG1[(当前主库 Primary)]
HAPRO --> PG2[(热备库 Standby)]
PAT[Patroni] -.主备状态.-> HAPRW
PAT -.主备状态.-> HAPRO

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -0,0 +1,456 @@
---
doc_id: TC-08-INTEGRATED-DEPLOYMENT
doc_role: supplemental_document
authority: secondary
scope: 方案二整体部署
source_of_truth: false
last_reviewed: 2026-03-26
retrieval_priority: P1
---
# 福建水务营收系统整体部署方案说明书
## 文档信息
| 项目信息 | 详情 |
|---------|------|
| **项目名称** | 福建水务营收系统 |
| **文档类型** | 技术专题说明 |
| **方案定位** | 已采纳 PostgreSQL 16 方案二作为数据库部署方案后的整体部署方案 |
| **文档版本** | v1.0 |
| **编写日期** | 2026-03-26 |
| **文档状态** | ✅ 正式建议稿 |
## 目录
1. 编制目的
2. 方案前提
3. 整体部署原则
4. 软件拓扑图
5. 主机部署图
6. 数据库访问链路图
7. 备份恢复链路图
8. 网络拓扑图
9. 主机角色与部署内容
10. 资源配置建议
11. 资源审批汇总表
12. 基础软件与版本清单
13. 部署方式说明
14. 网络需求
15. 网络开通清单
16. 访问控制与端口建议
17. 实施步骤
18. 验收标准
19. 部署结论
## 编制目的
本文档用于在已采纳 PostgreSQL 16 方案二作为数据库部署方案的前提下,形成覆盖前端、后端、中间件、静态存储及数据库的一体化整体部署方案,作为甲方进行主机、网络、存储与基础软件资源审批的依据。
## 方案前提
本方案以以下前提为基础:
1. 数据库部署方案已采纳 `docs/design/03_Technical_Design/07_PostgreSQL16_DR_Resource_Application.md` 中的方案二,即“同城双可用区主备容灾方案”。
2. 前端继续采用 `Nginx + Vue3` 的静态部署模式。
3. 对外访问经甲方或第三方管理的公网入口进行薄转发,不纳入本方案主机资源范围。
4. 内网 `Nginx` 单独部署,负责将开放 API 端点负载到两台业务应用节点。
5. 两台业务应用节点内均部署 `Spring Boot Gateway`,作为微服务集群统一接入入口,并同时承载业务服务。
6. 中间件集中部署在 1 台主机上。
7. 数据库控制组件与中间件部署在同一台主机上。
8. `MinIO` 作为静态存储与对象存储统一入口,与中间件同机部署。
9. 一期口径下,原“数据与中间件节点”和“文件存储节点”合并为 1 台综合节点。
10. 银行文件交换采用独立 `SFTP/FTP` 文件交换服务器,作为银行送盘、回盘、对账文件交换专用前置机。
11. 当前已知可用于本方案的业务与基础设施主机资源如下:
- 内网 Nginx 入口节点8 核 CPU / 16 GB 内存 / 300 GB 存储,共 1 台
- 业务应用节点32 核 CPU / 64 GB 内存 / 300 GB 存储,共 2 台
- 数据、中间件与文件存储综合节点16 核 CPU / 32 GB 内存 / 2300 GB 存储,共 1 台
- 银行文件交换服务器2 核 CPU / 8 GB 内存 / 200 GB 存储,共 1 台
- 另行配置 PostgreSQL 主库与热备库各 1 台
## 整体部署原则
整体部署遵循以下原则:
1. 前后端逻辑分层部署,避免数据库节点与业务节点混部。
2. 中间件集中部署,降低主机数量和运维复杂度。
3. 数据库主备分离部署,避免与中间件、应用节点混部。
4. 数据库控制组件集中部署,通过统一代理地址屏蔽主备切换细节。
5. 网络按公网接入区、内网接入区、应用区、中间件与文件存储区、银行文件交换区、数据区分层隔离。
6. 在现有主机数量约束下,优先复用现有业务应用节点、内网入口节点及综合节点资源。
## 软件拓扑图
**图 4-1 访问与应用软件拓扑图**
![图1](images/diagram_1.png)
图说明:
1. PC 端用户通过内网直接访问内网 Nginx。
2. 移动端用户和第三方系统先经公网入口薄转发,再由公网入口转发到内网 Nginx。
3. 内网 Nginx 将开放 API 端点负载到两台业务应用节点。
4. 两台业务应用节点内均部署 Spring Boot Gateway作为微服务集群统一接入入口。
5. 每台业务应用节点内的 Gateway 再向本节点业务服务转发请求。
**图 4-2 综合服务软件拓扑图**
![图2](images/diagram_2.png)
图说明:
1. 综合节点承接缓存、配置、对象存储及数据库控制组件。
2. 两台业务应用节点统一访问综合节点,不直接连接数据库。
**图 4-3 数据与备份软件拓扑图**
![图3](images/diagram_3.png)
图说明:
1. 数据库控制组件经由主库提供数据库访问能力。
2. 主库与热备之间通过同步复制保持一致性。
3. 银行文件交换服务器承接送盘、回盘、对账文件交换能力。
4. MinIO 与银行文件交换服务器分别将各自数据归档到备份归档存储。
## 主机部署图
**图 4-4 主机部署总览图**
![图4](images/diagram_4.png)
图说明:
1. 内网 Nginx 入口节点作为我方统一接入入口,承接 API 转发与内部负载均衡能力。
2. 业务应用节点 1 和业务应用节点 2 组成应用主机集群,节点内同时部署 Spring Boot Gateway 与核心业务服务。
3. 综合节点集中承载 Redis、Nacos、MinIO、HAProxy、PgBouncer、Patroni并同时访问数据库主库与热备服务器。
4. 独立的 SFTP/FTP 文件交换服务器承接银行送盘、回盘、对账文件交换,并由业务应用节点直接访问。
5. 数据库主库服务器与数据库热备服务器独立部署,满足数据库高可用要求。
主机部署细化说明:
1. 内网 Nginx 入口节点部署 `Nginx`,负责开放 API 转发和内部负载均衡。
2. 两台业务应用节点分别部署 `Spring Boot Gateway` 与业务服务实例。
3. 综合节点部署 `Redis``Nacos``MinIO``HAProxy``PgBouncer``Patroni`,并负责访问数据库主库与热备服务器。
4. SFTP/FTP 文件交换服务器部署银行文件交换服务及送盘、回盘、对账目录,由业务应用节点直接访问。
5. 数据库主库服务器部署 PostgreSQL 主库实例,数据库热备服务器部署 PostgreSQL 热备实例。
## 数据库访问链路图
**图 4-5 数据库访问链路图**
![图5](images/diagram_5.png)
图说明:
1. 业务应用不直接连接数据库主机。
2. PgBouncer 负责连接池。
3. HAProxy 负责数据库入口代理。
4. Patroni 负责主备状态管理与切换控制。
5. 综合节点侧的数据库控制组件会同时访问主库和热备,用于探测、控制和切换。
## 备份恢复链路图
**图 4-6 备份恢复链路图**
![图6](images/diagram_6.png)
图说明:
1. 主库和热备均向备份归档存储输出备份数据。
2. 综合节点中的 MinIO 文件数据也纳入备份范围。
3. 备份归档存储作为数据库恢复与文件恢复的统一入口。
## 网络拓扑图
**图 4-7 网络拓扑图**
![图7](images/diagram_7.png)
图说明:
1. PC 端用户通过内网直接访问内网 Nginx移动端用户和第三方系统通过公网入口薄转发再转发至内网 Nginx。
2. 内网 Nginx 统一负载到两台业务应用节点,两台节点内部均部署 Spring Boot Gateway。
3. 业务应用节点一方面直接访问 SFTP/FTP 文件交换服务器,另一方面访问综合节点获取缓存、配置、文件和数据库代理能力。
4. 综合节点访问 PostgreSQL 主库与热备,数据库主备及综合节点均接入备份归档存储。
## 主机角色与部署内容
| 层级 | 主机角色 | 数量 | 主要部署内容 | 说明 |
|---|---|---:|---|---|
| 接入层 | 内网 Nginx 入口节点 | 1 台 | Nginx、API 转发、内部负载均衡 | 作为我方统一内网接入入口,承接开放 API 转发 |
| 应用层 | 业务应用节点(主) | 2 台 | Spring Boot Gateway、Spring Boot 业务服务 | 承载微服务集群接入与表务、抄表、收费、账务、发票、报表等核心应用服务 |
| 综合支撑层 | 数据、中间件与文件存储综合节点 | 1 台 | Redis、Nacos、MinIO、HAProxy、PgBouncer、Patroni | 中间件、数据库控制与文件存储同机部署 |
| 银行交换层 | SFTP/FTP 文件交换服务器 | 1 台 | SFTP/FTP 服务、送盘目录、回盘目录、对账目录、归档目录 | 作为银行文件交换专用前置机 |
| 数据库层 | PostgreSQL 主库服务器 | 1 台 | PostgreSQL 16 Primary | 部署在可用区 A |
| 数据库层 | PostgreSQL 热备服务器 | 1 台 | PostgreSQL 16 Standby | 部署在可用区 B |
| 备份层 | 备份归档存储 | 1 套 | 基础备份、WAL 归档、恢复副本 | 独立备份空间 |
## 资源配置建议
| 主机角色 | 数量 | 建议配置 | 备注 |
|---|---:|---|---|
| 内网 Nginx 入口节点 | 1 台 | 8 核 CPU / 16 GB 内存 / 300 GB 存储 | 承载内网 Nginx、API 转发和内部负载均衡 |
| 业务应用节点(主) | 2 台 | 32 核 CPU / 64 GB 内存 / 300 GB 存储 | 承载 Spring Boot Gateway 及表务、抄表、收费、账务、发票、报表等核心应用服务 |
| 数据、中间件与文件存储综合节点 | 1 台 | 16 核 CPU / 32 GB 内存 / 2300 GB 存储 | 承载缓存、配置治理、数据库控制、图片、附件等非结构化数据 |
| SFTP/FTP 文件交换服务器 | 1 台 | 2 核 CPU / 8 GB 内存 / 200 GB 存储 | 承载银行送盘、回盘、对账、归档文件交换,建议独立部署 |
| PostgreSQL 主库服务器 | 1 台 | 24 核 CPU / 48 GB 内存 / 1 TB NVMe SSD | 生产写入节点,不计入上述已知 4 类业务主机 |
| PostgreSQL 热备服务器 | 1 台 | 24 核 CPU / 48 GB 内存 / 1 TB NVMe SSD | 正式切换接管节点,不计入上述已知 4 类业务主机 |
| 备份归档存储 | 1 套 | 可用空间 4 TB 至 6 TB | 存放全量备份与 WAL 归档 |
### 银行文件交换服务器容量估算
按 20 万用户、5 年保留期估算,银行文件交换服务器主要承载代扣、托收、对账等批次文件,不承载全量业务明细数据库。
估算依据如下:
1. 银行代扣、托收、对账文件以批次文件为主,不是每位用户每天形成独立文件。
2. 按“仅覆盖银行代扣/托收用户,且按月批次送盘/回盘一次”的业务节奏估算,单个批次文件大小通常在 `10 MB ~ 40 MB` 量级。
3. 按每月送盘、回盘、对账共 `3` 类核心文件估算,月文件量约为:
- `30 MB ~ 120 MB / 月`
4. 按 1 年估算,原始批次文件总量约为:
- `0.36 GB ~ 1.44 GB / 年`
5. 考虑归档副本、异常重传、中间文件和运行日志,按 `10 ~ 15` 倍放大后5 年总量通常约为:
- `20 GB ~ 110 GB`
因此,按最节约的一期规划,银行文件交换服务器可按 `2 核 CPU / 8 GB 内存 / 200 GB 存储` 配置满足送盘、回盘、对账文件交换与 5 年留存需要;如后续银行通道数量增加、并发文件交换增加或保留策略扩大,再扩容至 `4 核 / 8 GB / 500 GB` 即可。建议设置 `70%` 容量预警,并预留扩容机制。
## 资源审批汇总表
以下汇总表用于甲方进行主机、存储、网络及基础软件部署范围审批。
| 序号 | 资源名称 | 数量 | 规格 | 部署内容 | 用途说明 | 建议口径 |
|---|---:|---:|---|---|---|---|
| 1 | 内网 Nginx 入口节点 | 1 台 | 8 核 CPU / 16 GB 内存 / 300 GB 存储 | Nginx、API 转发、内部负载均衡 | 我方统一内网接入入口 | 可利旧优先 |
| 2 | 业务应用节点(主) | 2 台 | 32 核 CPU / 64 GB 内存 / 300 GB 存储 | Spring Boot Gateway、Spring Boot 核心业务服务 | 承载微服务接入与核心业务服务 | 现有资源纳入正式方案 |
| 3 | 数据、中间件与文件存储综合节点 | 1 台 | 16 核 CPU / 32 GB 内存 / 2300 GB 存储 | Redis、Nacos、MinIO、HAProxy、PgBouncer、Patroni | 承载缓存、配置治理、数据库控制、图片、附件、导出文件等能力 | 现有资源纳入正式方案 |
| 4 | SFTP/FTP 文件交换服务器 | 1 台 | 2 核 CPU / 8 GB 内存 / 200 GB 存储 | SFTP/FTP 服务、送盘/回盘/对账目录、归档目录 | 承载银行文件交换与目录隔离 | 按最节约一期规划建议新增或单独利旧 |
| 5 | PostgreSQL 主库服务器 | 1 台 | 24 核 CPU / 48 GB 内存 / 1 TB NVMe SSD | PostgreSQL 16 Primary | 承载生产写入 | 建议单独配置 |
| 6 | PostgreSQL 热备服务器 | 1 台 | 24 核 CPU / 48 GB 内存 / 1 TB NVMe SSD | PostgreSQL 16 Standby | 承载正式切换接管 | 建议单独配置 |
| 7 | 备份归档存储 | 1 套 | 可用空间 4 TB 至 6 TB | 基础备份、WAL 归档、恢复副本 | 保障恢复与审计追溯 | 可利旧或新增存储空间 |
### 审批建议
1. 业务应用节点、综合节点、内网 Nginx 入口节点可优先按现有资源纳入实施范围。
2. SFTP/FTP 文件交换服务器建议单独审批,以满足银行文件交换隔离和安全要求。
3. PostgreSQL 主库与热备库建议作为单独审批项,避免与现有业务节点混部。
4. 备份归档存储建议作为单独资源项审批,避免后期因备份空间不足影响正式上线。
## 基础软件与版本清单
| 类别 | 软件名称 | 建议版本 | 部署位置 | 说明 |
|---|---|---|---|---|
| 操作系统 | Linux 发行版 | openEuler 20.03+ / CentOS 7.9+ | 全部服务器 | 按甲方基础环境标准选定 |
| 运行环境 | JDK | 17 | 业务应用节点 | Spring Boot 运行环境 |
| 接入层 | Nginx | 1.20+ | 内网 Nginx 入口节点 | 内网 API 转发、内部负载均衡 |
| 网关服务 | Spring Boot Gateway | 3.x | 业务应用节点 | 微服务集群统一接入 |
| 业务服务 | Spring Boot | 3.x | 业务应用节点 | 核心业务服务框架 |
| 银行文件交换 | SFTP/FTP 服务 | 稳定版 | SFTP/FTP 文件交换服务器 | 银行送盘、回盘、对账文件交换 |
| 数据库 | PostgreSQL | 16 | 主库、热备库 | 主备数据库部署 |
| 缓存 | Redis | 6.2+ | 综合节点 | 缓存、会话、轻量级消息能力 |
| 配置中心 | Nacos | 2.x | 综合节点 | 配置治理与注册管理 |
| 对象存储 | MinIO | RELEASE 稳定版 | 综合节点 | 图片、附件、导出文件存储 |
| 数据库代理 | HAProxy | 2.x | 综合节点 | 数据库读写入口代理 |
| 连接池 | PgBouncer | 1.2x+ | 综合节点 | 统一数据库连接池 |
| 高可用控制 | Patroni | 稳定版 | 综合节点 | 主备状态管理与切换 |
## 部署方式说明
### 总体部署原则
本方案的部署方式遵循以下原则:
1. 入口代理类组件优先采用 `Docker` 部署,并可优先评估 `host` 网络模式。
2. 业务应用优先采用 `Docker` 部署,但不建议使用 `host` 网络模式。
3. 数据库主备优先采用物理机或虚拟机直接部署,不建议容器化承载 PostgreSQL 主备本体。
4. 数据库控制组件如需容器化,应优先选择轻量代理组件容器化,高可用控制组件仍以直接部署为优先。
### 组件部署方式建议
| 组件 | 部署节点 | 建议部署方式 | 是否建议 `host` 模式 | 说明 |
|---|---|---|---|---|
| 内网 Nginx | 内网 Nginx 入口节点 | Docker 部署 | 是,优先建议 | 作为我方统一接入入口,便于端口管理与转发 |
| Spring Boot Gateway | 业务应用节点(主) | Docker 部署 | 否 | 作为微服务统一接入入口,建议与业务服务同节点部署 |
| Spring Boot 应用 | 业务应用节点(主) | Docker 部署 | 否 | 便于发布、回滚、扩容,保留容器网络隔离 |
| SFTP/FTP 服务 | SFTP/FTP 文件交换服务器 | 物理机/虚拟机直接部署 | 否 | 作为银行文件交换专用服务,建议独立部署并做目录隔离 |
| Redis | 综合节点 | Docker 部署 | 可选 | 可采用普通容器网络,必要时可评估 `host` |
| Nacos | 综合节点 | Docker 部署 | 可选 | 默认容器网络即可,便于配置治理 |
| HAProxy | 综合节点 | Docker 部署 | 是,优先建议 | 作为数据库代理入口,适合 `host` 模式 |
| PgBouncer | 综合节点 | Docker 部署 | 是,优先建议 | 作为数据库连接池入口,适合 `host` 模式 |
| Patroni | 综合节点 | 物理机/虚拟机直接部署 | 否 | 建议与系统服务集成,便于运维与切换控制 |
| MinIO | 综合节点 | Docker 部署 | 否 | 更关注数据盘挂载与对象存储目录管理 |
| PostgreSQL 主库 | 主库服务器 | 物理机/虚拟机直接部署 | 否 | 核心数据库本体不建议容器化 |
| PostgreSQL 热备 | 热备服务器 | 物理机/虚拟机直接部署 | 否 | 高可用数据库本体不建议容器化 |
### 优先采用 Docker 且可使用 `host` 模式的组件
结合当前资源结构,建议优先采用 `Docker + host` 模式的组件如下:
1. `内网 Nginx`
2. `HAProxy`
3. `PgBouncer`
采用 `host` 模式的主要原因如下:
1. 直接监听固定服务端口,减少端口映射复杂度。
2. 更便于与主机防火墙、域名、VIP、健康检查配合。
3. 对于入口类与代理类组件,运维体验更接近直接部署。
### 不建议采用 `host` 模式的组件
以下组件不建议采用 `Docker + host` 模式:
1. `Spring Boot` 业务应用:应保留容器网络隔离,便于扩容和端口治理。
2. `MinIO`:应以存储挂载与数据目录管理为重点,不依赖 `host` 模式。
3. `PostgreSQL 主库 / 热备`:数据库本体优先直接部署,不建议容器化。
4. `Patroni`:建议直接部署,便于与数据库高可用控制链路协同。
## 网络需求
### 1. 网络分区要求
| 网络分区 | 部署对象 | 访问要求 |
|---|---|---|
| 公网接入区 | 公网入口薄转发 | 对外提供 HTTPS 访问,不纳入我方主机资源 |
| 应用区 | 业务应用节点 | 仅允许内网接入区与运维区访问 |
| 中间件与文件存储区 | Redis、Nacos、MinIO、数据库控制组件 | 仅允许业务应用节点与运维区访问 |
| 银行文件交换区 | SFTP/FTP 文件交换服务器 | 仅允许业务应用节点、银行专线或授权外联链路访问 |
| 数据区 | PostgreSQL 主库、热备库、备份存储 | 严格限制,仅允许中间件控制主机和运维区访问 |
### 2. 带宽与时延要求
| 网络链路 | 建议要求 | 说明 |
|---|---|---|
| 公网入口薄转发到内网 Nginx | 千兆网络 | 满足公网入口转发 |
| 内网 Nginx 到业务应用 | 千兆网络 | 满足开放 API 转发与网关接入 |
| 业务应用到综合节点 | 千兆网络 | 满足缓存、配置治理、文件访问与数据库代理访问 |
| 业务应用到 SFTP/FTP 服务器 | 千兆网络 | 满足送盘、回盘、对账文件交换 |
| 银行链路到 SFTP/FTP 服务器 | 千兆网络或专线 | 满足银行文件交换与目录投递 |
| 综合节点到数据库 | 千兆网络以上 | 满足数据库代理与健康检查 |
| 主备复制链路 | 不低于 10 Gbps | 支撑同步复制 |
| 同城主备时延 | 建议低于 2 ms | 支撑稳定同步复制 |
| 数据库到备份存储 | 千兆网络以上 | 满足基础备份与 WAL 归档传输 |
| 综合节点到备份存储 | 千兆网络以上 | 满足文件数据备份与归档传输 |
### 3. 网络开通要求
| 类别 | 开通要求 | 说明 |
|---|---|---|
| 对外访问 | 开通 443 端口 | 提供统一 HTTPS 入口 |
| 公网入口薄转发访问内网 Nginx | 开通公网入口到内网 Nginx 的转发端口 | 仅授权链路访问 |
| 内网 Nginx 访问应用 | 开通内网 Nginx 到业务应用的 API / 网关端口 | 仅内网访问 |
| 应用访问综合节点 | 开通 Redis、Nacos、MinIO、PgBouncer 相关端口 | 仅应用区访问 |
| 业务应用访问 SFTP/FTP 服务器 | 开通 SFTP/FTP 相关端口 | 用于银行文件送盘、回盘、对账交换 |
| 银行链路访问 SFTP/FTP 服务器 | 开通 FTP/SFTP 服务端口 | 仅银行授权链路访问 |
| 综合节点访问数据库 | 开通 PostgreSQL 5432 及健康检查相关端口 | 仅综合节点访问 |
| 运维访问 | 开通运维区到各层必要管理端口 | 用于巡检、发布、恢复、切换 |
## 网络开通清单
| 源区域/源主机 | 目标区域/目标主机 | 协议/端口 | 用途 | 开通要求 |
|---|---|---|---|---|
| 外部用户 | 公网入口薄转发 | HTTPS/443 | 页面访问、接口入口 | 对外开放 |
| 公网入口薄转发 | 内网 Nginx 入口节点 | HTTP/HTTPS/转发端口 | 公网访问转入内网入口 | 授权链路放通 |
| 内网 Nginx 入口节点 | 业务应用节点(主) | HTTP/HTTPS/网关端口 | 内网 API 转发与微服务接入 | 内网放通 |
| 业务应用节点(主) | 综合节点 | TCP/6379 | Redis 访问 | 内网放通 |
| 业务应用节点(主) | 综合节点 | TCP/8848 | Nacos 访问 | 内网放通 |
| 业务应用节点(主) | 综合节点 | TCP/6432 | PgBouncer 访问 | 内网放通 |
| 业务应用节点(主) | 综合节点 | TCP/9000,9001 | MinIO 文件访问 | 内网放通 |
| 业务应用节点(主) | SFTP/FTP 文件交换服务器 | TCP/21 或 22 | 银行送盘、回盘、对账文件交换 | 内网放通 |
| 银行专线或授权外联链路 | SFTP/FTP 文件交换服务器 | TCP/21 或 22 | 银行文件目录投递与回收 | 仅授权链路放通 |
| 综合节点 | PostgreSQL 主库服务器 | TCP/5432 | 数据库代理与控制访问 | 内网放通 |
| 综合节点 | PostgreSQL 热备服务器 | TCP/5432 | 数据库代理、状态探测与控制访问 | 内网放通 |
| PostgreSQL 主库服务器 | PostgreSQL 热备服务器 | TCP/5432 | 主备同步复制 | 高带宽、低时延专用链路 |
| PostgreSQL 主库/热备库 | 备份归档存储 | TCP/存储协议端口 | 基础备份与 WAL 归档 | 内网放通 |
| 综合节点 | 备份归档存储 | TCP/存储协议端口 | 文件归档与备份 | 内网放通 |
| 运维管理终端 | 各节点 | SSH/22 及必要管理端口 | 运维、巡检、发布、恢复 | 仅运维区放通 |
## 访问控制与端口建议
| 服务 | 典型端口 | 访问范围 |
|---|---|---|
| Nginx/HTTPS | 443 | 对外开放 |
| Spring Boot Gateway / 业务应用端口 | 项目自定义端口 | 仅内网 Nginx 与内网调用 |
| Redis | 6379 | 仅业务应用与运维可访问 |
| Nacos | 8848 | 仅业务应用与运维可访问 |
| MinIO | 9000/9001 | 仅业务应用与运维可访问 |
| SFTP/FTP 服务 | 21 或 22 | 仅业务应用节点、运维和银行授权链路可访问 |
| PgBouncer | 6432 | 仅业务应用可访问 |
| HAProxy | 5000 或项目定义端口 | 仅 PgBouncer 与运维可访问 |
| PostgreSQL | 5432 | 仅数据库控制主机与运维可访问 |
## 实施步骤
### 1. 基础资源准备
1. 确认内网 Nginx 入口节点、业务应用节点、综合节点是否为利旧资源。
2. 完成 SFTP/FTP 文件交换服务器、PostgreSQL 主库服务器、热备服务器及备份归档存储审批。
3. 完成各网络分区、IP、域名、SSL 证书、路由及防火墙策略准备。
### 2. 基础软件安装
1. 安装操作系统并完成安全基线加固。
2. 在业务应用节点安装 JDK、部署业务运行环境。
3. 在内网 Nginx 入口节点安装 Nginx。
4. 在综合节点安装 Redis、Nacos、HAProxy、PgBouncer、Patroni、MinIO。
5. 在 SFTP/FTP 文件交换服务器安装 SFTP/FTP 服务并配置目录结构。
6. 在数据库主备节点安装 PostgreSQL 16。
### 3. 数据库主备部署
1. 初始化 PostgreSQL 主库。
2. 初始化 PostgreSQL 热备库并建立同步复制。
3. 配置 Patroni、HAProxy、PgBouncer 联动。
4. 配置基础备份与 WAL 归档。
5. 配置业务应用节点到 SFTP/FTP 文件交换服务器的文件交换目录映射。
### 4. 应用与存储部署
1. 在业务应用节点部署 Spring Boot Gateway 和业务应用服务。
2. 在内网 Nginx 入口节点配置 API 转发和内部负载均衡规则。
3. 在综合节点初始化 MinIO 存储桶和访问策略。
4. 在 SFTP/FTP 文件交换服务器配置送盘、回盘、对账、归档目录。
5. 配置业务应用到 Redis、Nacos、PgBouncer、MinIO 的连接参数。
### 5. 联调与演练
1. 完成前后端联调。
2. 完成中间件访问验证。
3. 完成数据库主备同步验证。
4. 完成文件上传、下载、归档验证。
5. 完成主备切换演练与回切演练。
### 6. 上线准备与正式投产
1. 完成上线前巡检与问题清零。
2. 确认监控、日志、备份、告警正常。
3. 完成上线窗口审批。
4. 按上线顺序切换生产流量。
## 验收标准
| 验收项 | 验收标准 | 说明 |
|---|---|---|
| 对外访问 | 用户可通过统一域名正常访问系统 | 公网入口薄转发与内网 Nginx 链路正常 |
| 业务应用可用性 | 表务、抄表、收费、账务、发票、报表等核心服务正常 | 业务主流程可执行 |
| Redis 可用性 | 缓存读写正常 | 中间件能力正常 |
| Nacos 可用性 | 配置下发正常 | 配置治理能力正常 |
| MinIO 可用性 | 图片、附件上传下载正常 | 文件存储能力正常 |
| SFTP/FTP 文件交换 | 送盘、回盘、对账目录读写正常 | 银行文件交换能力正常 |
| 数据库连接能力 | 业务应用可通过 PgBouncer 正常连接数据库 | 代理接入正常 |
| PostgreSQL 主备同步 | 主备复制正常,无严重延迟 | 高可用基础正常 |
| 数据库切换演练 | 主备切换成功,业务恢复正常 | 高可用能力可验证 |
| 备份归档 | 基础备份与 WAL 归档正常 | 恢复能力可验证 |
| 运维监控 | 关键节点监控、日志、告警正常 | 运维可观测性正常 |
## 部署结论
在已采纳 PostgreSQL 16 方案二作为数据库部署方案的前提下,建议福建水务营收系统采用“前后端分层部署 + 中间件集中部署 + 数据库主备分离部署”的整体部署模式。
本方案的最终结论如下:
1. 公网入口薄转发不纳入我方主机资源;我方实际部署的统一接入入口为内网 Nginx 入口节点。
2. 2 台业务应用节点作为核心业务集群,节点内同时部署 Spring Boot Gateway 和业务服务,承接微服务统一接入与核心业务处理。
3. 综合节点集中承载 Redis、Nacos、MinIO 及数据库控制组件,进一步压缩一期主机数量并降低部署复杂度。
4. 新增 1 台 SFTP/FTP 文件交换服务器,作为银行送盘、回盘、对账文件交换专用前置机。
5. PostgreSQL 16 采用同城双可用区 1 主 1 热备部署,满足高可用要求。
6. 网络采用公网接入区、内网接入区、应用区、中间件与文件存储区、银行文件交换区、数据区分层隔离模式,以满足安全性、可维护性和资源审批要求。

View File

@ -0,0 +1,31 @@
flowchart LR
classDef source fill:#ecfeff,stroke:#0891b2,stroke-width:1.2px,color:#083344;
classDef access fill:#fff7ed,stroke:#ea580c,stroke-width:1.4px,color:#7c2d12;
classDef app fill:#eff6ff,stroke:#2563eb,stroke-width:1.4px,color:#1e3a8a;
U1[PC 端用户]:::source
U2[移动端用户]:::source
U3[第三方系统]:::source
G1[公网入口薄转发]:::access
G2[内网 Nginx]:::access
subgraph APP1[业务应用节点 1]
direction TB
A1G[Spring Boot Gateway]:::app
A1B[业务服务]:::app
end
subgraph APP2[业务应用节点 2]
direction TB
A2G[Spring Boot Gateway]:::app
A2B[业务服务]:::app
end
U1 -->|内网访问| G2
U2 -->|HTTPS 443| G1
U3 -->|接口访问| G1
G1 -->|开放 API 转发| G2
G2 -->|负载到节点 1| A1G
G2 -->|负载到节点 2| A2G
A1G --> A1B
A2G --> A2B

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View File

@ -0,0 +1,17 @@
flowchart TB
classDef app fill:#eff6ff,stroke:#2563eb,stroke-width:1.4px,color:#1e3a8a;
classDef service fill:#f5f3ff,stroke:#7c3aed,stroke-width:1.4px,color:#4c1d95;
A1[业务应用节点 1<br/>Gateway + Biz]:::app
A2[业务应用节点 2<br/>Gateway + Biz]:::app
subgraph M[综合节点]
direction TB
M2[Redis / Nacos / MinIO]:::service
M3[HAProxy / PgBouncer / Patroni]:::service
end
A1 -->|缓存 配置 文件访问| M2
A2 -->|缓存 配置 文件访问| M2
A1 -->|数据库代理访问| M3
A2 -->|数据库代理访问| M3

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -0,0 +1,20 @@
flowchart LR
classDef service fill:#f5f3ff,stroke:#7c3aed,stroke-width:1.4px,color:#4c1d95;
classDef data fill:#ecfdf5,stroke:#059669,stroke-width:1.4px,color:#064e3b;
classDef backup fill:#fffbeb,stroke:#d97706,stroke-width:1.4px,color:#78350f;
classDef bank fill:#fef2f2,stroke:#dc2626,stroke-width:1.4px,color:#7f1d1d;
M2[MinIO / 附件文件]:::service
M3[HAProxy / PgBouncer / Patroni]:::service
F1[SFTP / FTP 文件交换服务器]:::bank
D1[(PostgreSQL 主库)]:::data
D2[(PostgreSQL 热备)]:::data
B1[备份归档存储]:::backup
M3 -->|数据库访问| D1
M3 -->|状态感知| D2
D1 -->|同步复制| D2
D1 -->|基础备份 WAL 归档| B1
D2 -->|备份副本| B1
M2 -->|对象存储归档| B1
F1 -->|银行文件归档| B1

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

View File

@ -0,0 +1,23 @@
flowchart LR
classDef gateway fill:#fff7ed,stroke:#ea580c,stroke-width:1.2px,color:#7c2d12;
classDef app fill:#eff6ff,stroke:#2563eb,stroke-width:1.2px,color:#1e3a8a;
classDef middle fill:#f5f3ff,stroke:#7c3aed,stroke-width:1.2px,color:#4c1d95;
classDef data fill:#ecfdf5,stroke:#059669,stroke-width:1.2px,color:#064e3b;
GW[内网 Nginx 入口节点]:::gateway
APP1[业务应用节点 1<br/>内含 Gateway]:::app
APP2[业务应用节点 2<br/>内含 Gateway]:::app
MID[综合节点]:::middle
FTP[SFTP / FTP 文件交换服务器]:::middle
DB1[(数据库主库服务器)]:::data
DB2[(数据库热备服务器)]:::data
GW --> APP1
GW --> APP2
APP1 --> MID
APP2 --> MID
APP1 --> FTP
APP2 --> FTP
MID --> DB1
MID --> DB2
DB1 --> DB2

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@ -0,0 +1,16 @@
flowchart LR
A1[业务应用节点 1]
A2[业务应用节点 2]
P[PgBouncer]
H[HAProxy]
M[(主库)]
S[(热备)]
T[Patroni]
A1 -->|统一代理地址| P
A2 -->|统一代理地址| P
P -->|连接池复用| H
H -->|写流量| M
H -.热备探测 / 状态访问.-> S
M -->|同步复制| S
T -.主备状态管理.-> H

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -0,0 +1,5 @@
flowchart LR
DB1[(PostgreSQL 主库)] --> BK[备份归档存储]
DB2[(PostgreSQL 热备)] --> BK
MID[综合节点 / MinIO] --> BK
BK --> REC[恢复与演练入口]

Some files were not shown because too many files have changed in this diff Show More