E9 某政府项目签章集成开发记录

1、关于盖章的说明

a、先取终版文件,再取盖章终版文件,如果盖章动作触发时,盖章终版文件有值,那么会将盖章终版文件传给后端接口去盖章。

​ 如果盖章终版文件没有值,则会取终版文件去盖章,该逻辑为了适应多人多次盖章情况。

b、盖章位置的确定为关键字和偏移坐标共同确定,如需修改关键字,则修改建模【电子签章】配置信息,如需修改偏移量请参照

​ 【2、关于配置信息】中的offset参数的值。

c、维护建模信息时,注意必要信息必须有。签章时根据流程id(workflowid)、当前操作者去查询对应唯一的签章的sn、终版文件数据库字段名、盖章终版文件数据库字段名、签章关键字这些信息。目前建模维护信息只能适配一人一章情况,一人多章暂不支持。

d、盖章后的文件目录和终版文件的目录是一致的。权限请根据实际需要调整知识目录的默认共享权限。

1.1、建模维护的签章必要信息

必要信息如图:
在这里插入图片描述

**流程id:**代码中已适配多版本流程id,流程存新版后无需修改。

**签章人姓名:**对应流程中点击签章按钮的操作者。

**终版文件:**表示的是对应流程中的终版文件的数据库字段名。

**盖章终版文件:**表示的是对应流程中的盖章终版文件的数据库字段名。

**签章SN:**签章系统提供。

关键字:必须和要盖章的文件中的关键字一致,例如:关键字维护的是市文明办,那么对应盖章文件中的关键字也需要是市文明办。因为签章会根据关键字模糊匹配,避免出现错乱。

2、配置部署说明

2.1、关于配置信息

配置文件为:ecology/WEB-INF/prop/wn_casign.properties

offset:该值为全局统一,如果盖章无法水平垂直对齐,需要调整盖文件中的关键字水平中心线的对齐。

#签章服务地址 根据实际填写
host=
# 签章提供的 client_id
client_id=aGViY2FfdGVzdDpoZWJjYUAyMDIz
# 默认1  1为pdf签章   2为ofd签章
signtype=1
# 需签章或者批注页码,例如1,2,3等,0代表所有页,n代表最后一页,页码从1开始
page=0
#章的偏移坐标  
offset=-50,-50
#0:坐标定位;1:关键字定位
type=1
#如果印章对应的服务端证书,设置了认证,则必须提供。暂时不需要填
authCode=

2.2、表单代码块

2.2.1、插入代码块

表单代码块代码位置:ecology/weavernorth/ca/签章节点js代码块.html,将文件用文本文档打开,全选粘贴到表单需要签章节点的代码块中,注意不要同步节点,避免不必要的问题。

2.2.2、配置盖章按钮

在表单设计器需要加盖章按钮的位置右键单元格-自定义属性,设置id、name的值为gz。注意id、name必须是gz
在这里插入图片描述

3、核心代码逻辑

package engine.casign;

import cn.hutool.json.JSONObject;
import weaver.conn.RecordSet;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import weaver.integration.logging.Logger;
import weaver.integration.logging.LoggerFactory;
import weavernorth.ca.signutil.SignUtil;
import weavernorth.ca.signutil.WorkflowUtil;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;

/**
 * @Classname CASignNatureWebAction
 * @Description 签章后端服务API
 * @Version 1.0.0
 * @Date 2023/9/8 10:24
 * @Created by
 */
public class CASignNatureWebAction {
    private Logger log = LoggerFactory.getLogger(CASignNatureWebAction.class);

    @POST
    @Path("/sign")
    @Produces(MediaType.APPLICATION_JSON)
    public JSONObject caSign(@Context HttpServletRequest request, @Context HttpServletResponse response) {
        JSONObject result = new JSONObject();
        try {
            User user = HrmUserVarify.getUser(request, response);
            if (user == null) {
                result.put("code", "E");
                result.put("msg", "当前用户获取失败!");
                return result;
            }
            String workflowid = request.getParameter("workflowid");
            if ("".equals(workflowid) || workflowid == null) {
                result.put("code", "E");
                result.put("msg", "workflowid未获取到!");
                return result;
            }
            String requestid = request.getParameter("requestid");
            if ("".equals(requestid) || requestid == null) {
                result.put("code", "E");
                result.put("msg", "requestid未获取到!");
                return result;
            }
            String docid = request.getParameter("docid");
            if ("".equals(docid) || docid == null) {
                result.put("code", "E");
                result.put("msg", "盖章文件id未获取到!");
                return result;
            }
            JSONObject signPropObj = SignUtil.getSignProp(workflowid, user.getUID() + "");
            if (signPropObj.size() <= 0) {
                result.put("code", "E");
                result.put("msg", "无法获取对应签章信息,请检查建模相关配置");
                return result;
            }
            String qzsn = signPropObj.getStr("qzsn");
            String qzgjz = signPropObj.getStr("qzgjz");
            JSONObject signResultObj = SignUtil.CASignNature(qzsn, qzgjz, workflowid, Integer.parseInt(docid), user);
            log.info("signResultObj{}:" + signResultObj);
            if ("S".equals(signResultObj.getStr("code"))) {
                String updateDocid = signResultObj.getStr("data");
                String mainTableName = WorkflowUtil.getTableNameByWFid(workflowid);
                //终版盖章文件的数据库字段名
                String gzzbwj_DataBaseFieldName = signPropObj.getStr("gzzbwj");
                RecordSet rs = new RecordSet();
                String sql = "update " + mainTableName + " set " + gzzbwj_DataBaseFieldName + "='" + updateDocid + "' where requestid=?";
                if (rs.executeUpdate(sql, requestid)) {
                    result.put("code", "S");
                    result.put("msg", "签章逻辑处理成功!");
                    return result;
                }
            } else {
                result.put("code", "E");
                result.put("msg", "签章失败,请联系管理员!");
                return result;
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.error("签章动作异常", e);
            result.put("code", "E");
            result.put("msg", "签章异常," + e.getMessage() + ",请联系管理员!");
            return result;
        }
        return result;
    }

}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值