通过接口发起流程
// 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;
}
}