123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 |
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="content-type" content="text/html;charset=UTF-8">
- <style type="text/css">
- <!--
- @import url(md.css);
- -->
- </style>
-
-
- </head>
- <body>
- <h1>1 上传员工方案的Excel文件</h1>
- <ol>
- <li><p>发送上传文件的请求后, Server端处理文件上传,并通过websocket交互处理进度.</p></li>
- <li><p>上传成功后, 保存上传的用户和文件路径信息.</p></li>
- <li><p>读取Excel文件的内容,检查表关的数据,如果有不合要求的,返回读取文件出错,需要更正后重新上传.</p></li>
- <li><p>继续读取文件内容,按行处理, 检查用户名和身份证号是否有冲突,有冲突则记录此异常.保存此行员工方案到临时表. 通过websocket交互处理进度.</p></li>
- <li><p>数据读取完成后, 返回此次数据的主ID,前端调用此ID<a href="#nav1">读取临时表的数据</a>给页面展示.</p></li>
- </ol>
- <h3>请求上传文件</h3>
- <h5>URI</h5>
- <pre><code>/he/shebao_plan/import/excel POST
- </code></pre>
- <h5>参数</h5>
- <table><thead>
- <tr>
- <th align="left">字段</th>
- <th align="left">类型</th>
- <th align="left">长度</th>
- <th align="left">必须有值</th>
- <th align="left">必传</th>
- <th align="left">描述</th>
- </tr>
- </thead><tbody>
- <tr>
- <td align="left">ws_id</td>
- <td align="left">string</td>
- <td align="left">8</td>
- <td align="left">Y</td>
- <td align="left">Y</td>
- <td align="left">websocket的sessionID</td>
- </tr>
- <tr>
- <td align="left"></td>
- <td align="left">binary</td>
- <td align="left">0 ~ 10M</td>
- <td align="left">Y</td>
- <td align="left">Y</td>
- <td align="left">文件流</td>
- </tr>
- </tbody></table>
- <h3>上传员工方案的响应</h3>
- <h5>WebSocket的进度消息</h5>
- <ol>
- <li>首先要<a href="common.html#ws">连接WebSocket</a> 并取得其会话ID (session ID)</li>
- <li><p>进度消息的结构是Json包. 需要调用JSON.parse转换.基本包含3种协议.</p>
- <pre><code> 1. 成功打开WebSocket的协议(协议号: "WS_ID"), 内容体是会话ID.
- 2. 普通消息协议(协议号: "WS_MSG"),内容体是进度消息.
- 3. WS使用结束,可以关闭的协议(协议号: "WS_DONE"),内容体一般是"DONE".
- </code></pre></li>
- </ol>
- <h5>文件处理结果响应</h5>
- <p>成功处理的话, data字段的值是此次处理的ID. 用此ID获取数据.</p>
- <ul>
- <li><p>有异常</p>
- <pre><code>{
- "data": null,
- "msg": "员工的五险一金方案不存在,已经终止修改。",
- "code": 500
- }
- </code></pre></li>
- <li><p>成功处理</p>
- <pre><code>{
- "data": 60,
- "msg": "",
- "code": 200
- }
- </code></pre></li>
- </ul>
- <hr>
- <h1>2 读取此次上传的数据</h1>
- <p>用上传成功返回的ID值为参数, 请求具体数据列表.</p>
- <h3>请求对应的数据</h3>
- <h5>URI</h5>
- <pre><code>/he/shebao_plan/import/data POST
- </code></pre>
- <h5>参数</h5>
- <table><thead>
- <tr>
- <th align="left">字段</th>
- <th align="left">类型</th>
- <th align="left">长度</th>
- <th align="left">必须有值</th>
- <th align="left">必传</th>
- <th align="left">描述</th>
- </tr>
- </thead><tbody>
- <tr>
- <td align="left">temp_id</td>
- <td align="left">int</td>
- <td align="left">10</td>
- <td align="left">Y</td>
- <td align="left">Y</td>
- <td align="left">数据的主标识</td>
- </tr>
- </tbody></table>
- <h3>响应</h3>
- <p>返回列表数据 和 有数据冲突的列表数据.</p>
- <h5>data字段结构</h5>
- <pre><code>int temp_id; // 主数据ID
- int count; // 数据数量
- List<TWXYJEplanDataTemp> dataList; // 数据列表
- /** */
- int id;
- /** */
- int temp_id;
- /** 城市名称 */
- String city_name;
- /** */
- int city_code;
- /** 姓名 */
- String user_name;
- /** 身份证 */
- String id_card;
- /** 联系方式 */
- String phone;
- /** 户籍性质 */
- String hukou;
- /** 民族 */
- String nation;
- /** 基数方案 */
- String param_name;
- /** 基数方案 */
- String radix_type;
- /** 社保基数 */
- double shebao_radix;
- /** 是否购买公积金 */
- String buy_fund;
- /** 公积金基数 */
- double fund_radix;
- /** 公积金企业比例 */
- double ent_ratio;
- /** 公积金员工比例 */
- double p_ratio;
- int err_count; // 异常数据数量
- List<EPlanErrorVO> ErrorList; // 异常数据列表
- int id; // 异常数据标识
- int data_id; // 对应数据的标识
- String user_name; // 对应数据的姓名
- String id_card; // 对应数据的身份证号
- String err_code; // 冲突类型
- String err_value; // 冲突值(依类型定)
- String desc; // 冲突描述
- </code></pre>
- <hr>
- <h1>3 修改冲突数据</h1>
- <h3>请求</h3>
- <h5>URI</h5>
- <pre><code>/he/shebao_plan/import/edit/error POST
- </code></pre>
- <h5>参数</h5>
- <table><thead>
- <tr>
- <th align="left">字段</th>
- <th align="left">类型</th>
- <th align="left">长度</th>
- <th align="left">必须有值</th>
- <th align="left">必传</th>
- <th align="left">描述</th>
- </tr>
- </thead><tbody>
- <tr>
- <td align="left">id</td>
- <td align="left">int</td>
- <td align="left">10</td>
- <td align="left">Y</td>
- <td align="left">Y</td>
- <td align="left">异常数据的标识</td>
- </tr>
- <tr>
- <td align="left">opt_code</td>
- <td align="left">int</td>
- <td align="left">10</td>
- <td align="left">Y</td>
- <td align="left">Y</td>
- <td align="left">冲突解决代码值</td>
- </tr>
- </tbody></table>
- <ul>
- <li><p>opt_code的值</p>
- <pre><code>int OPT_NEW_USER = 10; // 作为新员工方案
- int OPT_USE_NEW = 11; // 采用新的数据
- int OPT_USE_OLD = 1; // 采用旧有的数据
- </code></pre></li>
- </ul>
- <h3>响应</h3>
- <p>返回修改的成功与否.</p>
- <h5>状态码</h5>
- <pre><code>200 修改成功
- 500 修改出错和异常信息提示
- 600 参数校验不通过
- </code></pre>
- <h5>响应数据示例</h5>
- <ul>
- <li><p>有异常</p>
- <pre><code>{
- "data": null,
- "msg": "操作码无效.",
- "code": 600
- }
- </code></pre></li>
- <li><p>成功处理</p>
- <pre><code>{
- "data": null,
- "msg": "",
- "code": 200
- }
- </code></pre></li>
- </ul>
- <hr>
- <h1>4 导入员工方案数据</h1>
- <p>结合<a href="common.html#ws">Websocket</a>服务操作. 更具体的提示信息通过此服务发布.</p>
- <h3>请求</h3>
- <h5>URI</h5>
- <pre><code>/he/shebao_plan/import POST
- </code></pre>
- <h5>参数</h5>
- <table><thead>
- <tr>
- <th align="left">字段</th>
- <th align="left">类型</th>
- <th align="left">长度</th>
- <th align="left">必须有值</th>
- <th align="left">必传</th>
- <th align="left">描述</th>
- </tr>
- </thead><tbody>
- <tr>
- <td align="left">temp_id</td>
- <td align="left">int</td>
- <td align="left">10</td>
- <td align="left">Y</td>
- <td align="left">Y</td>
- <td align="left">异常数据的标识</td>
- </tr>
- <tr>
- <td align="left">ws_id</td>
- <td align="left">string</td>
- <td align="left">8</td>
- <td align="left">Y</td>
- <td align="left">Y</td>
- <td align="left">websocket的会话ID</td>
- </tr>
- </tbody></table>
- <h3>响应</h3>
- <p>返回导入成功与否.</p>
- <h5>状态码</h5>
- <pre><code>200 导入成功
- 500 导入出错和异常信息提示
- 600 参数校验不通过
- </code></pre>
- <h5>响应数据示例</h5>
- <pre><code>{
- "data": null,
- "msg": "",
- "code": 200
- }
- </code></pre>
- <hr>
- <script src="md.js"></script>
- </body>
- </html>
|