E9 Un registro de desarrollo integrado de firma de proyecto gubernamental

1. Instrucciones para estampar

a. Obtenga primero el archivo final y luego obtenga el archivo final estampado. Si el archivo final estampado tiene un valor cuando se activa la acción de estampado, el archivo final estampado se pasará a la interfaz de fondo para sellar.

Si el archivo final estampado no tiene valor, se tomará el archivo final para sellar, esta lógica es para adaptarse a la situación en la que varias personas sellan varias veces.

b. La posición del sello está determinada por la palabra clave y las coordenadas de desplazamiento. Si necesita modificar la palabra clave, modifique la información de configuración del modelado [firma electrónica]. Si necesita modificar el desplazamiento, consulte

​ El valor del parámetro de compensación en [2. Acerca de la información de configuración] .

c. Al mantener información de modelado, tenga en cuenta que la información necesaria debe estar disponible. Al firmar, consulte información como el sn correspondiente a la firma única, el nombre del campo de la base de datos del archivo final, el nombre del campo de la base de datos del archivo final estampado y la palabra clave de firma según el ID del proceso (workflowid) y el operador actual.目前建模维护信息只能适配一人一章情况,一人多章暂不支持。

D. El directorio del archivo sellado es consistente con el directorio del documento final. Permisos Ajuste los permisos predeterminados para compartir del directorio de conocimientos según las necesidades reales.

1.1 Información necesaria para la firma para el mantenimiento del modelado

La información necesaria se muestra en la figura:
Insertar descripción de la imagen aquí

**Identificación del proceso:** El código se ha adaptado a la identificación del proceso de múltiples versiones y no se requiere ninguna modificación después de guardar el proceso en la nueva versión.

**Nombre del firmante:** Corresponde al operador que presionó el botón de firma en el proceso.

**Archivo de versión final:** representa el nombre del campo de la base de datos del archivo de versión final en el proceso correspondiente.

**Archivo sellado final:** representa el nombre del campo de la base de datos del archivo sellado final en el proceso correspondiente.

**SN de firma:** Proporcionado por el sistema de firma.

Palabra clave : debe ser coherente con la palabra clave del documento a sellar, por ejemplo, si la palabra clave mantenida es Oficina de Civilización Municipal, entonces la palabra clave en el documento sellado correspondiente también debe ser Oficina de Civilización Municipal. Porque las firmas tendrán una coincidencia aproximada según las palabras clave para evitar confusiones.

2. Instrucciones de configuración e implementación

2.1 Acerca de la información de configuración

El archivo de configuración es: ecology/WEB-INF/prop/wn_casign.properties

desplazamiento : este valor está unificado globalmente. Si el sello no se puede alinear horizontal y verticalmente, debe ajustar la alineación de la línea central horizontal de las palabras clave en el archivo del sello.

#签章服务地址 根据实际填写
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 Bloque de código de formulario

2.2.1 Insertar bloque de código

Ubicación del código del bloque de código del formulario: ecology/weavernorth/ca/mark sección js code block.html. Abra el archivo como un documento de texto, seleccione todos y péguelos en el bloque de código del formulario. Tenga cuidado de no sincronizar los nodos. para evitar problemas innecesarios 需要签章节点.

2.2.2 Configurar el botón de sello

En el diseñador de formularios, haga clic con el botón derecho en la celda donde se debe agregar el botón de sello: Propiedades personalizadas y establezca los valores de identificación y nombre en gz.注意id、name必须是gz
Insertar descripción de la imagen aquí

3. Lógica del código central

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;
    }

}

Supongo que te gusta

Origin blog.csdn.net/u010048119/article/details/133066114
Recomendado
Clasificación