Merge remote-tracking branch 'origin/apps_dev' into apps_dev
@ -67,6 +67,7 @@ public class GraphRender {
|
||||
public void handleShapeNodeRender(double[][] position) {
|
||||
JSONObject defineJsonObj = JSONObject.parseObject(this.baseModel.getDefinition());
|
||||
JSONObject elements = defineJsonObj.getJSONObject("elements");
|
||||
List<PALMethodAttributeModel> attributes = CoeDesignerShapeAPIManager.getInstance().getValidAndUseAttributeModels(repositoryModel.getWsId(), SubProcessConst.SUB_PROCESS_METHOD_ID, "subProcess", SubProcessConst.SUB_PROCESS_METHOD_ID);
|
||||
for (int i = 0; i < nodeList.size(); i++) {
|
||||
PALRepositoryModel relationRepositoryModel = PALRepositoryCache.getCache().get(nodeList.get(i).getId());
|
||||
JSONObject subProcessNode = ShapeUtil.getProcessShapeDefinition(SubProcessConst.SUB_PROCESS_METHOD_ID, "子流程");
|
||||
@ -94,7 +95,6 @@ public class GraphRender {
|
||||
JSONObject dataAttr = (JSONObject) o;
|
||||
if (dataAttr.containsKey("attributesJsonArray")){
|
||||
JSONArray attributesJsonArr = dataAttr.getJSONArray("attributesJsonArray");
|
||||
List<PALMethodAttributeModel> attributes = PALMethodCache.getPALMethodModelById(SubProcessConst.SUB_PROCESS_METHOD_ID).getAttributes();
|
||||
for (PALMethodAttributeModel attribute : attributes) {
|
||||
JSONObject data = new JSONObject();
|
||||
data.put("isRequired", attribute.getIsRequired());
|
||||
|
||||
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 249 B |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 570 B |
|
After Width: | Height: | Size: 242 B |
|
After Width: | Height: | Size: 256 B |
|
After Width: | Height: | Size: 178 B |
|
After Width: | Height: | Size: 156 B |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 4.5 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 5.4 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 264 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 156 B |
|
After Width: | Height: | Size: 178 B |
|
After Width: | Height: | Size: 44 KiB |
@ -2849,6 +2849,13 @@ function changeArributeByShape() {
|
||||
} else {
|
||||
// 属性弹出层显示的内容
|
||||
var shape = Utils.getSelected()[0];
|
||||
if (methodId == 'process.subprocess'){ // 端到端建模 虚线框被选中的话 优先展示虚线框数据属性
|
||||
let selectShapes = Utils.getSelected();
|
||||
let index = selectShapes.findIndex(shape => shape.elementType == 'SCOPE_NODE');
|
||||
if (index != -1){
|
||||
shape = Utils.getSelected()[index];
|
||||
}
|
||||
}
|
||||
if (shape.name === "linker") {
|
||||
$(".clearfix").hide();
|
||||
} else {
|
||||
|
||||
@ -371,6 +371,8 @@ var Designer = {
|
||||
}
|
||||
}
|
||||
b.attr("class", "shape_box");
|
||||
Designer.events.push("created", g);
|
||||
Model.add(g);
|
||||
if (methodId == "process.subprocess") {
|
||||
// 如果当前拖拽到画布的图形是子流程 则渲染节点展开图标
|
||||
if (g.name == 'subProcess'){
|
||||
@ -386,8 +388,6 @@ var Designer = {
|
||||
window.subProcess.addScopeShapeInnerEles(scopeShapeKey, g.id);
|
||||
}
|
||||
}
|
||||
Designer.events.push("created", g);
|
||||
Model.add(g);
|
||||
var S = Utils.getShapeContext(g.id);
|
||||
var Q = b.position();
|
||||
var K = 7;
|
||||
@ -1900,23 +1900,8 @@ var Designer = {
|
||||
var k = Utils.getSelectedIds();
|
||||
Utils.mergeArray(e, k)
|
||||
}
|
||||
let flag = false;
|
||||
if (methodId == "process.subprocess" && e.length > 0){
|
||||
let scopeIndex = e.findIndex(shapeId => Model.getShapeById(shapeId).elementType == "SCOPE_NODE");
|
||||
let innerNodeIndex = e.findIndex(shapeId => Model.getShapeById(shapeId).elementType == "INNER_NODE");
|
||||
let innerLinkerIndex = e.findIndex(shapeId => Model.getShapeById(shapeId).elementType == "INNER_LINKER");
|
||||
let outerNodeIndex = e.findIndex(shapeId => Model.getShapeById(shapeId).elementType == "OUTER_NODE");
|
||||
let outerLinkerIndex = e.findIndex(shapeId => Model.getShapeById(shapeId).elementType == "OUTER_LINKER");
|
||||
// 选中的元素中 同时出现范围框或者其内部元素以及外部元素
|
||||
if ((scopeIndex != -1 || innerNodeIndex != -1 || innerLinkerIndex != -1) && (outerNodeIndex != -1 || outerLinkerIndex != -1)){
|
||||
flag = true;
|
||||
$.simpleAlert("范围框以及其内部元素不能与范围框外部元素同时被选中!");
|
||||
}
|
||||
}
|
||||
Utils.unselect();
|
||||
if (!flag){
|
||||
Utils.selectShape(e);
|
||||
}
|
||||
Utils.selectShape(e);
|
||||
b.remove()
|
||||
}
|
||||
Designer.op.resetState();
|
||||
|
||||
@ -47,7 +47,7 @@ class SubProcess {
|
||||
if (shape.name == 'subProcess' || shape.name == 'scopeLimitation') {
|
||||
let expandIcon = "<span id='icon_"+shapeId+"' class='iconfont icon-lianjietiaozhuan' style='position: absolute;cursor: pointer;'></span>";
|
||||
$('#'+shapeId).append(expandIcon);
|
||||
$('#icon_'+shapeId).on('click', '', {uuid: shape.extendAttr.id, sid: this.sid}, this.subProcessNodeLink);
|
||||
$('#icon_'+shapeId).on('click', '', {shape: shape, sid: this.sid}, this.subProcessNodeLink);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -59,19 +59,21 @@ class SubProcess {
|
||||
return;
|
||||
}
|
||||
let shapeId = ele.id;
|
||||
let expandIcon = "<span id='icon_"+shapeId+"' class='iconfont icon-zhankaishousuo' style='position: absolute;cursor: pointer;'></span>";
|
||||
let shape = this.Model.getShapeById(shapeId);
|
||||
let expandIcon = "<span id='icon_"+shapeId+"' class='iconfont icon-lianjietiaozhuan' style='position: absolute;cursor: pointer;'></span>";
|
||||
$('#'+shapeId).append(expandIcon);
|
||||
$('#icon_'+shapeId).on('click', '', {shapeId: shapeId, Model: this.Model, repositoryId: this.repositoryId, sid: this.sid}, this.shapeExpand);
|
||||
$('#icon_'+shapeId).on('click', '', {shape: shape, sid: this.sid}, this.subProcessNodeLink);
|
||||
}
|
||||
|
||||
// 范围选择框的事件绑定处理
|
||||
handleScopeShapeEvent(){
|
||||
let c = $("#designer_canvas");
|
||||
c.off("mousemove").on("mousemove",function (a) {
|
||||
c.off("mousemove.scope").on("mousemove.scope",function (a) {
|
||||
let b = Utils.getRelativePos(a.pageX, a.pageY, c); // 实时获取鼠标移动的坐标
|
||||
let j = Utils.getShapeByPosition(b.x, b.y); // 根据鼠标当前移动的位置获取当前图形 如果有的话
|
||||
// console.log("当前图形", j);
|
||||
if (j != null) {
|
||||
let tempSelectArr = [];
|
||||
if (j.shape.name == 'scopeLimitation'){
|
||||
let range = {
|
||||
x: j.shape.props.x,
|
||||
@ -83,17 +85,25 @@ class SubProcess {
|
||||
e = e.filter(id => Model.getShapeById(id).elementType !== "OUTER_NODE").filter(id => Model.getShapeById(id).elementType !== "OUTER_LINKER"); // 因为范围框人工改变大小后 可能包含外部元素
|
||||
// 将当前范围选择框元素以及范围内的元素 存储到subProcess中 方便后续 范围框内的元素移动时做范围框限制
|
||||
window.subProcess.scopeEle[j.shape.id] = e;
|
||||
$('#'+j.shape.id).off("mousedown").on("mousedown", function (f) {
|
||||
Utils.unselect();
|
||||
Utils.selectShape(e);
|
||||
});
|
||||
}else if (j.shape.elementType == 'INNER_NODE') {
|
||||
// $('#'+j.shape.id).off("mousedown.scope").on("mousedown.scope", function (f) {
|
||||
// Utils.unselect();
|
||||
// if ((range.x < b.x && b.x < range.x + 20 && range.y < b.y && b.y < range.y + 20)
|
||||
// || (range.x + range.w - 20 < b.x && b.x < range.x + range.w && range.y < b.y && b.y < range.y + 20)
|
||||
// || (range.x < b.x && b.x < range.x + 20 && range.y + range.h - 20 < b.y && b.y < range.y + range.h)
|
||||
// || (range.x + range.w - 20 < b.x && b.x < range.x + range.w && range.y + range.h - 20 < b.y && b.y < range.y + range.h)){
|
||||
//
|
||||
// Utils.selectShape(e);
|
||||
// Designer.op.shapeDraggable();
|
||||
//
|
||||
// }
|
||||
// });
|
||||
tempSelectArr = e;
|
||||
}else if (j.shape.elementType == 'INNER_NODE' || j.shape.elementType == 'INNER_LINKER') {
|
||||
// console.log('范围标注框的图形是否存了下来', window.subProcess.scopeEle);
|
||||
let scopeEle = window.subProcess.scopeEle;
|
||||
for (const scopeShapeId in scopeEle) {
|
||||
let inRangeEles = scopeEle[scopeShapeId];
|
||||
if (inRangeEles.indexOf(j.shape.id) != -1){ // 当前鼠标所在位置为范围选择框范围内
|
||||
Utils.unselect();
|
||||
let currentScopeEle = Model.getShapeById(scopeShapeId); // 获取当前范围选择框
|
||||
let bound = {
|
||||
x: currentScopeEle.props.x,
|
||||
@ -110,12 +120,25 @@ class SubProcess {
|
||||
|
||||
window.subProcess.scopeRang = rang;
|
||||
window.subProcess.movingEle = Model.getShapeById(j.shape.id);
|
||||
// Utils.selectShape(j.shape.id);
|
||||
tempSelectArr = [];
|
||||
tempSelectArr.push(j.shape.id);
|
||||
}
|
||||
}
|
||||
}else {
|
||||
window.subProcess.movingEle = null;
|
||||
window.subProcess.scopeRang = null;
|
||||
}
|
||||
if (tempSelectArr.length){
|
||||
$('#'+j.shape.id).off("mousedown.scope").on("mousedown.scope", function (f) {
|
||||
Utils.unselect();
|
||||
Utils.selectShape(tempSelectArr);
|
||||
|
||||
$(document).bind("mouseup.select",function () {
|
||||
tempSelectArr = [];
|
||||
});
|
||||
});
|
||||
}
|
||||
}else {
|
||||
window.subProcess.movingEle = null;
|
||||
window.subProcess.scopeRang = null;
|
||||
@ -478,7 +501,12 @@ class SubProcess {
|
||||
|
||||
subProcessNodeLink(event) {
|
||||
let param = event.data;
|
||||
let url="./w?uuid=" + param.uuid +"&teamId=" + teamId
|
||||
let shape = param.shape;
|
||||
if (shape.extendAttr == undefined){
|
||||
$.simpleAlert('请先绑定子流程模型,在进行跳转操作');
|
||||
}
|
||||
let uuid = shape.extendAttr.id;
|
||||
let url="./w?uuid=" + uuid +"&teamId=" + teamId
|
||||
+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer&sid=" + encodeURIComponent($('#sid').val());
|
||||
window.open(url);
|
||||
}
|
||||
|
||||
@ -133,15 +133,27 @@ public class TaskController {
|
||||
DBSql.update(sql);*/
|
||||
|
||||
|
||||
String sqly = "SELECT PROCESSID,USER_ID,USERDEP,READTIMES,DATAID,RESULT,TITLE,SENDTYPE,READSTATE,READCOUNT,TYPE,USER FROM BO_ACT_DATAID WHERE PROCESSID = '" + processInstId + "' AND USER_ID='"+userid+"' ";
|
||||
RowMap mapsy = DBSql.getMap(sqly);
|
||||
|
||||
ProcessInstance boProcessInstance = SDK.getProcessAPI()
|
||||
.createBOProcessInstance("obj_1a2207bf57eb4ed982ed24b9ed80e260", "admin", "OA已阅日志");
|
||||
|
||||
BO bo=new BO();
|
||||
bo.set("PROCESSID",mapsy.getString("PROCESSID"));
|
||||
bo.set("USER_ID",mapsy.getString("USER_ID"));
|
||||
bo.set("USERDEP",mapsy.getString("USERDEP"));
|
||||
bo.set("READTIMES",mapsy.getString("READTIMES"));
|
||||
bo.set("DATAID",mapsy.getString("DATAID"));
|
||||
bo.set("RESULT",mapsy.getString("RESULT"));
|
||||
bo.set("TITLE",mapsy.getString("TITLE"));
|
||||
bo.set("SENDTYPE",mapsy.getString("SENDTYPE"));
|
||||
bo.set("READSTATE",mapsy.getString("READSTATE"));
|
||||
bo.set("READCOUNT",mapsy.getString("READCOUNT"));
|
||||
bo.set("TYPE",mapsy.getString("TYPE"));
|
||||
bo.set("USER",mapsy.getString("USER"));
|
||||
SDK.getBOAPI().create("BO_ACT_ALREADY_DATAID", bo, boProcessInstance.getId(), boProcessInstance.getCreateUser());
|
||||
|
||||
// 示例代码
|
||||
BOQueryAPI query = SDK.getBOAPI().query("BO_ACT_DATAID").addQuery("PROCESSID=", processInstId).addQuery("USER_ID=",userid);
|
||||
// 指定将要复制到新的bo表以及流程实例ID
|
||||
BOCopyAPI copyAPI = query.copyTo("BO_ACT_ALREADY_DATAID", processInstId);
|
||||
// 如果新表需要新的值,请添加新数据
|
||||
copyAPI.addNewData("USER", "");
|
||||
// 执行复制操作
|
||||
copyAPI.exec();
|
||||
|
||||
|
||||
String sql1 = "DELETE FROM BO_ACT_DATAID WHERE READSTATE='已读' AND PROCESSID = '" + processInstId + "' AND USER_ID = '" + userid + "'";
|
||||
|
||||