代码片段-后端发起流程、流程更新建模数据

发布时间 2023-09-07 17:10:37作者: 小赵同学爱编码

通过接口发起流程

// WorkflowService  接口
package com.weavernorth.ebu4.service;

import java.util.Map;

/**
 * @author Bonbons
 * @date 2023 08 22 14:11
 */
public interface WorkflowService {
    /**
     * 发起费用报销流程
     * @param params
     * @return
     */
    String createWorkFlow(Map<String, Object> params);

//    Map<String, Object> getDataFromJSON(Map<String, Object> params);
}
// WorkflowService 接口实现类
package com.weavernorth.ebu4.service.impl;

import com.weavernorth.ebu4.service.WorkflowService;
import lombok.extern.slf4j.Slf4j;
import weaver.workflow.webservices.*;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * @author Bonbons
 * @date 2023 08 22 14:11
 */
@Slf4j
public class WorkflowServiceImpl implements WorkflowService {
    /**
     * 发起流程
     * @param params 请求中携带的 json
     * @return 流程创建成功会返回流程 id
     */
    @Override
    public String createWorkFlow(Map<String, Object> params) {
        // 获取数据
        List<LinkedHashMap<String, Object>> list = (List<LinkedHashMap<String, Object>>)params.get("list");

        /****************流程创建*************/
        WorkflowBaseInfo workflowBaseInfo = new WorkflowBaseInfo();//工作流信息
        workflowBaseInfo.setWorkflowId("47");//流程ID >> 流程类型id(固定)
        workflowBaseInfo.setWorkflowName("通过后端请求发起费用报销流程");//流程名称

        WorkflowRequestInfo workflowRequestInfo = new WorkflowRequestInfo();//工作流程请求信息
        workflowRequestInfo.setCanView(true);//显示
        workflowRequestInfo.setCanEdit(true);//可编辑
        workflowRequestInfo.setRequestName(workflowBaseInfo.getWorkflowName());//请求标题
        workflowRequestInfo.setRequestLevel("0");//紧急程度 0:正常 1:重要 2:紧急
        workflowRequestInfo.setCreatorId("1");//创建者ID 创建流程时为必输项 >> 指定为1(系统管理员)
        workflowRequestInfo.setWorkflowBaseInfo(workflowBaseInfo);//工作流信息
        workflowRequestInfo.setIsnextflow("0"); //为1表示流转到下个节点(默认),0表示停留在创建节点

        /****************main table start*************/
        WorkflowMainTableInfo workflowMainTableInfo = new WorkflowMainTableInfo();//主表
        WorkflowRequestTableRecord[] workflowRequestTableRecord = new WorkflowRequestTableRecord[1];//主表字段只有一条记录
        WorkflowRequestTableField[] WorkflowRequestTableField = new WorkflowRequestTableField[4];//主表的3个字段

        WorkflowRequestTableField[0] = new WorkflowRequestTableField();
        WorkflowRequestTableField[0].setFieldName("sqr");//申请人
        WorkflowRequestTableField[0].setFieldValue(params.get("sqr").toString());//userId
        WorkflowRequestTableField[0].setView(true); //必须为true
        WorkflowRequestTableField[0].setEdit(true); //必须为true

        WorkflowRequestTableField[1] = new WorkflowRequestTableField();
        WorkflowRequestTableField[1].setFieldName("grjklc");//个人借款流程
        WorkflowRequestTableField[1].setFieldValue(params.get("grjklc").toString());
        WorkflowRequestTableField[1].setView(true);
        WorkflowRequestTableField[1].setEdit(true);

        WorkflowRequestTableField[2] = new WorkflowRequestTableField();
        WorkflowRequestTableField[2].setFieldName("jkje");//借款金额
        WorkflowRequestTableField[2].setFieldValue(params.get("bxje").toString());
        WorkflowRequestTableField[2].setView(true);
        WorkflowRequestTableField[2].setEdit(true);

        // 补充冲销金额合计
        Double sum = 0.0;
        for(int i = 0; i < list.size(); i++){
            sum += Double.parseDouble(list.get(i).get("cxje").toString());
        }
        WorkflowRequestTableField[3] = new WorkflowRequestTableField();
        WorkflowRequestTableField[3].setFieldName("cxjehj");//借款金额
        WorkflowRequestTableField[3].setFieldValue(String.valueOf(sum));
        WorkflowRequestTableField[3].setView(true);
        WorkflowRequestTableField[3].setEdit(true);


        workflowRequestTableRecord[0] = new WorkflowRequestTableRecord();
        workflowRequestTableRecord[0].setWorkflowRequestTableFields(WorkflowRequestTableField);
        workflowMainTableInfo.setRequestRecords(workflowRequestTableRecord);

        workflowRequestInfo.setWorkflowMainTableInfo(workflowMainTableInfo);
        /****************main table end*************/

        /****************detail table start*************/
        WorkflowDetailTableInfo[] workflowDetailTableInfo = new WorkflowDetailTableInfo[1];//一个明细表
        /**********第一张明细表开始**********/
        int N = list.size(); // 实际明细表的记录条数根据请求参数确定
        workflowRequestTableRecord = new WorkflowRequestTableRecord[N];//两行数据(两条记录)

        //每行2个字段
        // 通过循环对每一条记录进行赋值
        for(int i = 0; i < N; i++){
            WorkflowRequestTableField = new WorkflowRequestTableField[2]; //两个字段
            /****第i + 1行开始****/
            WorkflowRequestTableField[0] = new WorkflowRequestTableField();
            WorkflowRequestTableField[0].setFieldName("fysm");
            WorkflowRequestTableField[0].setFieldValue(list.get(i).get("fysm").toString());
            WorkflowRequestTableField[0].setView(true);
            WorkflowRequestTableField[0].setEdit(true);

            WorkflowRequestTableField[1] = new WorkflowRequestTableField();
            WorkflowRequestTableField[1].setFieldName("cxje");
            WorkflowRequestTableField[1].setFieldValue(list.get(i).get("cxje").toString());
            WorkflowRequestTableField[1].setView(true);
            WorkflowRequestTableField[1].setEdit(true);

            workflowRequestTableRecord[i] = new WorkflowRequestTableRecord();
            workflowRequestTableRecord[i].setWorkflowRequestTableFields(WorkflowRequestTableField);

            /****第i + 1行结束****/
        }

        workflowDetailTableInfo[0] = new WorkflowDetailTableInfo();
        workflowDetailTableInfo[0].setWorkflowRequestTableRecords(workflowRequestTableRecord);

        workflowRequestInfo.setWorkflowDetailTableInfos(workflowDetailTableInfo);
        /**********第一张明细表结束**********/
        Double money = Double.parseDouble(params.get("bxje").toString());
        if(money < sum){
            return "冲销金额不可大于对应“借款流程”的借款金额";
        }

        return new weaver.workflow.webservices.WorkflowServiceImpl().doCreateWorkflowRequest(workflowRequestInfo, Integer.parseInt("1"));
    }


    /**
     * 转化JSON串为对象字段
     * @param jsonString JSON 字符串
     * @return 封装好的Map集合
     */
//    @Override
//    public Map<String, Object> getDataFromJSON(Map<String, Object> params){
//        try {
//
//            // 创建一个 JSONObject 对象
//            JSONObject json = new JSONObject(params);
//
//            // 从 JSONObject 中获取各个字段的值
//            String sqr = json.getString("sqr");
//            String jkje = json.getString("bxje");
//            String grjklc = json.getString("grjklc");
//            JSONArray list = json.getJSONArray("list");
//            // 封装明细表的数据
//            List<Map<String, Object>> listMap = new ArrayList<>();
//            for (int i = 0; i < list.length(); i++) {
//                JSONObject item = list.getJSONObject(i);
//                String fysm = item.getString("fysm");
//                String cxje = item.getString("cxje");
//                Map<String, Object> temp = new HashMap<>();
//                temp.put("fysm", fysm);
//                temp.put("cxje", cxje);
//                listMap.add(temp);
//            }
//
//            // 拼装数据到对象
//            Map<String, Object> result = new HashedMap();
//            result.put("sqr", sqr);
//            result.put("jkje", jkje);
//            result.put("grjklc", grjklc);
//            result.put("list", listMap);
//
//            return result;
//        }catch (Exception e){
//            e.printStackTrace();
//        }
//        return null;
//    }
}
// 实际处理请求的控制器
package com.api.controller;



import com.fasterxml.jackson.databind.ObjectMapper;
import com.weavernorth.ebu4.service.impl.WorkflowServiceImpl;
import lombok.extern.slf4j.Slf4j;

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;
import java.nio.charset.StandardCharsets;
import java.util.Map;

/**
 * @author Bonbons
 * @date 2023 08 22 14:09
 */
@Path("/exam/workflow")
@Slf4j
public class CreateWorkflowController {
    // 引入业务类对象 >> 没有采用注入的方式会提高程序的耦合度
    WorkflowServiceImpl service = new WorkflowServiceImpl();

    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/create")
    public String test(@Context HttpServletRequest request, @Context HttpServletResponse response){
        // 设置编码方式
        try{
            request.setCharacterEncoding("UTF-8");
        }catch (Exception e){
            e.printStackTrace();
        }
        // 从请求体中拿到 json 字符串
        Map<String, Object> json = null;
        try {
            ObjectMapper mapper = new ObjectMapper();
            json = mapper.readValue(request.getReader(), Map.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return service.createWorkFlow(json);
    }
}

流程更新建模台账数据

// GetMoneyDataController.java 请求控制器
package com.api.controller;

import weaver.conn.RecordSet;

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

/**
 * @author Bonbons
 * @date 2023 08 23 9:53
 */
@Path("/exam/module")
public class GetMoneyDataController {

    @GET
    @Path("/data")
    @Produces(MediaType.APPLICATION_JSON)
    public String getMoney(@Context HttpServletRequest request, @Context HttpServletResponse response){

        // 获取用户id
        String userId = request.getParameter("userId");
        String sql = "";
        if(!"".equals(userId) && userId != null){
            sql = "select kjke, jked from uf_ygjkmkb where jkr = " + userId;
        }
        // 执行 SQL
        RecordSet rs = new RecordSet();
        rs.executeQuery(sql);
        // 保存结果
        Double result = 0.0;
        if(rs.next()){
            result = Double.valueOf(rs.getString("jked")) - Double.valueOf(rs.getString("kjke"));
        }
        return result.toString();
    }
}
// 节点后附加操作 RecoverBalanceAction 
package com.weavernorth.ebu4.action;

import weaver.conn.RecordSet;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.Property;
import weaver.soa.workflow.request.RequestInfo;

/**
 * @author Bonbons
 * @date 2023 08 22 9:58
 */
public class RecoverBalanceAction implements Action {
    @Override
    public String execute(RequestInfo requestInfo) {
        // 获取主表数据
        Property[] properties = requestInfo.getMainTableInfo().getProperty();
        Integer id = 0;
        Double total = 0.0;
        for(Property property : properties){
            if(property.getName().equals("sqr")){
                id = Integer.valueOf(property.getValue());
            }else if(property.getName().equals("cxjehj")){
                total = Double.valueOf(property.getValue());
            }
        }

        String sql = "update uf_ygjkmkb set kjke = kjke + " + total + "where jkr = " + id;
        RecordSet rs = new RecordSet();
        rs.executeUpdate(sql);
        rs.next();

        return SUCCESS;
    }
}
// 节点后附加操作 UpdateBalanceAction 
package com.weavernorth.ebu4.action;

import com.wbi.util.Util;
import lombok.extern.slf4j.Slf4j;
import weaver.conn.RecordSet;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.Property;
import weaver.soa.workflow.request.RequestInfo;

/**
 * @author Bonbons
 * @date 2023 08 21 16:13
 */
@Slf4j
public class UpdateBalanceAction implements Action {
    @Override
    public String execute(RequestInfo requestInfo) {
        // 获取表中数据 [主表]
        Property[] properties = requestInfo.getMainTableInfo().getProperty();
        // 我需要的是可借额度和本次借款金额
        Double money = 0.0;
        Integer id = 0;
        for(Property property : properties){
            String name = property.getName();
            if(name.equals("bcjkje")){
                money = Double.valueOf(Util.null2String(property.getValue()));
            }else if(name.equals("jksqr")){
                id = Integer.valueOf(property.getValue());
            }
        }
        String sql = "update uf_ygjkmkb set kjke = kjke - "+ money +" where jkr = " + id;
        RecordSet rs = new RecordSet();
        rs.executeUpdate(sql);
        rs.next();
        return SUCCESS;
    }
}