# Conflicts:
#	com.actionsoft.apps.coe.pal/lib/com.actionsoft.apps.coe.pal.jar
This commit is contained in:
shangguochao 2022-07-06 20:03:51 +08:00
commit ee65540361
11 changed files with 967 additions and 231 deletions

View File

@ -3,7 +3,7 @@
<app xmlns="http://www.actionsoft.com.cn/app">
<name>PAL数据迁移</name>
<version>1.0</version>
<buildNo>21</buildNo>
<buildNo>12</buildNo>
<developer id="776cca9a287c8b4d63b9cad216aa3859" tablePrefix="ACT" url="http://www.actionsoft.com.cn">北京炎黄盈动科技发展有限责任公司</developer>
<categoryVisible>false</categoryVisible>
<description><![CDATA[数据迁移]]></description>

View File

@ -3,7 +3,7 @@
<app xmlns="http://www.actionsoft.com.cn/app">
<name>CoE PAL流程资产库</name>
<version>6.5</version>
<buildNo>81</buildNo>
<buildNo>69</buildNo>
<developer id="776cca9a287c8b4d63b9cad216aa3859" url="http://www.actionsoft.com.cn" tablePrefix="ACT">北京炎黄盈动科技发展有限责任公司</developer>
<productId/>
<categoryVisible>false</categoryVisible>

View File

@ -3297,4 +3297,30 @@ public class CoEPALController {
return web.checkFilePermissionBatch(uuids,isSub).toString();
}
/**
* 设计器页面右侧版本差异窗口接口
* @param me
* @param id 当前资产库文件ID
* @return
*/
@Mapping("com.actionsoft.apps.coe.pal_repository_model_version_diff_query")
public String getRepositoryModelVersionDiff(UserContext me,String id){
CoeProcessLevelWeb web = new CoeProcessLevelWeb(me);
return web.getRepositoryModelVersionDiff(id);
}
/**
* 校验形状属性
* @param me
* @param uuid
* @param define 若为空字符串则获取系统当前保存的define进行校验
* @return
*/
@Mapping("com.actionsoft.apps.coe.pal_repository_define_shape_attr_valid")
public String validRepositoryShapeAttr(UserContext me, String uuid, String define) {
CoeDesignerWeb web = new CoeDesignerWeb(me);
return web.validRepositoryShapeAttr(uuid, define);
}
}

View File

@ -505,8 +505,8 @@ public class CoeCooperationAPIManager {
// 获取用户权限判断是否已存在
List<String> rolePermList = new CoeCooperationRolePermDao().getRolePermListByRole(teamId, hideRole.getId());
if (!rolePermList.contains(palVersionId)) {
// 添加角色权限
CoeCooperationRolePermModel rolePerm = new CoeCooperationRolePermModel(UUIDGener.getUUID(), teamId, hideRole.getId(), palVersionId);
// 添加角色权限, 当前用户新建默认给全部的操作权限
CoeCooperationRolePermModel rolePerm = new CoeCooperationRolePermModel(UUIDGener.getUUID(), teamId, hideRole.getId(), palVersionId,"w,d,v");
new CoeCooperationRolePermDao().insert(rolePerm);
}
}

View File

@ -5,6 +5,7 @@ import java.util.*;
import com.actionsoft.apps.AppsConst;
import com.actionsoft.apps.coe.pal.constant.CoEConstant;
import com.actionsoft.apps.coe.pal.cooperation.CoeCooperationAPIManager;
import com.actionsoft.apps.coe.pal.cooperation.cache.CooperationCache;
import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache;
import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel;
import com.actionsoft.apps.lifecycle.api.AppsAPIManager;
@ -169,7 +170,8 @@ public class PALMethodCache {
List<String> methodList = PALMethodCache.getPALMethodList(sort);
if (UtilString.isNotEmpty(teamId)) {
List<String> permMethodList = new ArrayList<>();
List<String> versionIds = CoeCooperationAPIManager.getInstance().queryCooperationRoleDataPermByTeamUser(teamId, userId);
// List<String> versionIds = CoeCooperationAPIManager.getInstance().queryCooperationRoleDataPermByTeamUser(teamId, userId);
Set<String> versionIds = CooperationCache.getUserDataVisitablePermission(teamId, userId, false);
for (String verId : versionIds) {
List<PALRepositoryModel> verModels = PALRepositoryCache.getByVersionId(verId);
if (verModels != null && verModels.size() > 0 && !permMethodList.contains(verModels.get(0).getMethodCategory())) {

View File

@ -3401,6 +3401,80 @@ public class CoeDesignerWeb extends ActionWeb {
return ro.toString();
}
/**
* 校验形状属性
* @param uuid
* @param define 若为空字符串则获取系统当前保存的define进行校验
* @return
*/
public String validRepositoryShapeAttr(String uuid, String define) {
PALRepositoryModel model = PALRepositoryCache.getCache().get(uuid);
if (model == null) {
return ResponseObject.newErrResponse("模型不存在").toString();
}
if (UtilString.isEmpty(define) || "null".equals(define) || "undefined".equals(define)) {
define = PALRepositoryQueryAPIManager.getInstance().getProcessDefinition(_uc, uuid);
}
Map<String, PALMethodAttributeModel> methodAttributeModelMap = new HashMap<>();
// 校验形状
List<JSONObject> elements = ShapeUtil.getShapeJsonToJsonObject(define);
List<JSONObject> resultList = new ArrayList<>();
for (JSONObject o : elements) {
String shapeId = o.getString("id");
String shapeName = o.getString("name");
String text = UtilString.isEmpty(o.getString("text")) ? o.getString("title") : o.getString("text");
String shapeCategory = o.getString("category");
JSONObject dataAttributes = o.getJSONObject("dataAttributes");
JSONArray attributesJsonArray = dataAttributes.getJSONArray("attributesJsonArray");
for (int i = 0; i < attributesJsonArray.size(); i++) {
JSONObject attr = attributesJsonArray.getJSONObject(i);
String attrId = attr.getString("id");
String value = attr.getString("value");
if (!methodAttributeModelMap.containsKey(shapeName + "-" + attrId)) {
List<PALMethodAttributeModel> methodAttributeModels = CoeDesignerShapeAPIManager.getInstance().getValidAndUseAttributeModels(model.getWsId(), shapeCategory.replace("_", "."), shapeName, model.getMethodId());
for (PALMethodAttributeModel attributeModel : methodAttributeModels) {
if (!methodAttributeModelMap.containsKey(shapeName + "-" + attributeModel.getKey())) {
methodAttributeModelMap.put(shapeName + "-" + attributeModel.getKey(), attributeModel);
}
}
}
if (!methodAttributeModelMap.containsKey(shapeName + "-" + attrId)) {
continue;// 没有配置到形状的属性不处理
}
PALMethodAttributeModel attrModel = methodAttributeModelMap.get(shapeName + "-" + attrId);
if (attrModel.getIsRequired()) {// 筛选必填
String attrType = attrModel.getType();
boolean flag = true;
if ("relation".equals(attrType) || "awsorg".equals(attrType)) {
List<DesignerShapeRelationModel> list = DesignerShapeRelationCache.getListByAttrId(model.getId(), shapeId, attrId);
if (list == null || list.isEmpty()) {
flag = false;
}
} else {
flag = UtilString.isNotEmpty(value);
}
if (!flag) {
JSONObject tmp = new JSONObject();
tmp.put("shapeId", shapeId);
tmp.put("shapeName", text);
tmp.put("attrName", attrModel.getNewTitle());
tmp.put("attrId", attrId);
resultList.add(tmp);
}
}
}
}
ResponseObject ro = ResponseObject.newOkResponse();
if (!resultList.isEmpty()) {
ro.setData(resultList);
ro.err("校验未通过");
return ro.toString();
}
return ResponseObject.newOkResponse().toString();
}
/******************************************新版门户流程详情end********************************************************/
//获取excel数据的内部类

View File

@ -1727,4 +1727,11 @@
<param name="desc"/>
<param name="methodId"/>
</cmd-bean>
<cmd-bean name="com.actionsoft.apps.coe.pal_repository_model_version_diff_query">
<param name="id"/>
</cmd-bean>
<cmd-bean name="com.actionsoft.apps.coe.pal_repository_define_shape_attr_valid">
<param name="uuid"/>
<param name="define"/>
</cmd-bean>
</aws-actions>

View File

@ -22,8 +22,8 @@ $(function() {
},
error: function (jqXHR, textStatus, errorThrown) {
$.simpleAlert(errorThrown, 'err');
console.log(jqXHR)
console.log(textStatus)
console.log(jqXHR);
console.log(textStatus);
console.log(errorThrown)
}
});
@ -90,75 +90,89 @@ $(function() {
tempMessageArr[messageId] = messageArrayForSave[messageId];
}
var messageArray = JSON.stringify(tempMessageArr);
var elements = obj.elements
for(let i in elements) {
for(let a = 0; a < elements[i].dataAttributes.length; a ++ ) {
if(elements[i].dataAttributes[a].attributesJsonArray !== undefined) {
for(let b = 0; b < elements[i].dataAttributes[a].attributesJsonArray.length; b ++) {
if(elements[i].dataAttributes[a].attributesJsonArray[b].isRequired && elements[i].dataAttributes[a].attributesJsonArray[b].value == '') {
$.simpleAlert("close");
$.simpleAlert("必填项不能为空", 'error');
return;
}
}
}
}
}
$.ajax({
type: "POST",
url: "./jd",
data: {
$.ajax({
type: "POST",
url: "./jd",
data: {
sid: CLB.sid,
cmd: "com.actionsoft.apps.coe.pal_repository_process_define_save",
cmd: "com.actionsoft.apps.coe.pal_repository_define_shape_attr_valid",
uuid: ruuid,
define: awsui.encode(obj),
teamId: $("#teamId").val(),
BPMInstanceName: BPMInstanceName,
messages: messageArray
},
success: function (msg, textStatus, jqXHR) {
debugger;
if(msg.result == "ok") {
$.simpleAlert("close");
messageArrayForSave = {};
$("#saving_tip").css("color", "rgb(26, 164, 125)");
$("#saving_tip").text("保存成功");
recordShapeText();// 记录最新的节点及其文本text
//更多属性的处理,当节点处理完成后再处理更多属性
if (saveAttributesJson.length > 0 || removeAttributeJson.length > 0){
$.ajax({
type : "POST",
url : "./jd",
data : {
sid : encodeURI(CLB.sid),
cmd : "com.actionsoft.apps.coe.pal_pl_repository_more_attribute_save",
wsId : $("#wsId").val(),
uuid : ruuid,
attributesJson : JSON.stringify(saveAttributesJson),
removeAttributeJson : JSON.stringify(removeAttributeJson)
},
success:function(r) {
saveAttributesJson = [];
removeAttributeJson = [];
},
error:function(r) {
$.ajax({
type: "POST",
url: "./jd",
data: {
sid: CLB.sid,
cmd: "com.actionsoft.apps.coe.pal_repository_process_define_save",
uuid: ruuid,
define: awsui.encode(obj),
teamId: $("#teamId").val(),
BPMInstanceName: BPMInstanceName,
messages: messageArray
},
success: function (msg, textStatus, jqXHR) {
if(msg.result == "ok") {
$.simpleAlert("close");
messageArrayForSave = {};
$("#saving_tip").css("color", "rgb(26, 164, 125)");
$("#saving_tip").text("保存成功");
recordShapeText();// 记录最新的节点及其文本text
//更多属性的处理,当节点处理完成后再处理更多属性
if (saveAttributesJson.length > 0 || removeAttributeJson.length > 0){
$.ajax({
type : "POST",
url : "./jd",
data : {
sid : encodeURI(CLB.sid),
cmd : "com.actionsoft.apps.coe.pal_pl_repository_more_attribute_save",
wsId : $("#wsId").val(),
uuid : ruuid,
attributesJson : JSON.stringify(saveAttributesJson),
removeAttributeJson : JSON.stringify(removeAttributeJson)
},
success:function(r) {
saveAttributesJson = [];
removeAttributeJson = [];
},
error:function(r) {
}
});
}
$.simpleAlert("保存成功", "ok");
//保存结束时间戳
//var saveEndTime = new Date().getTime();
//console.log("流程保存时间:", (saveEndTime - saveStartTime) + "毫秒");
} else {
$.simpleAlert("close");
$.simpleAlert(msg.data.desc, 'error', 2000);
}
});
}
$.simpleAlert("保存成功", "ok");
//保存结束时间戳
//var saveEndTime = new Date().getTime();
//console.log("流程保存时间:", (saveEndTime - saveStartTime) + "毫秒");
},
error: function (jqXHR, textStatus, errorThrown) {
$.simpleAlert("close");
$.simpleAlert('保存失败', 'error', 1500);
}
});
} else {
$.simpleAlert("close");
$.simpleAlert(msg.data.desc, 'error', 2000);
var result = msg.data;
var resultMsg = [];
for (var i = 0; i < result.length; i++) {
var o = result[i];
resultMsg.push('[' + o.shapeName + ']的[' + o.attrName + ']不能为空' );
}
$.simpleAlert(resultMsg.join('<br>'), 'error');
// $.simpleAlert(ro.msg, 'error');
}
},
error: function (jqXHR, textStatus, errorThrown) {
$.simpleAlert("close");
$.simpleAlert('保存失败', 'error', 1500);
$.simpleAlert('校验失败', 'error', 1500);
}
});
})
}
}
}
@ -181,7 +195,7 @@ $(function() {
}
});
}
}
};
//在弹出“是否离开”的提示框后选择离开则触发onunload事件
window.onunload = function(){
@ -197,7 +211,7 @@ $(function() {
uuid: ruuid
}
});
}
};
// saveTimer();
intervalRefresh();
}
@ -238,7 +252,7 @@ $(function() {
$('#bar_sort').off("click").on("click",function (){
if ($("#saving_tip").text() != "已保存成功" && $("#saving_tip").text() != "保存成功" && $("#saving_tip").text() != "您的文件已经成功保存") {
$.simpleAlert('页面未保存,请先保存', 'error', 1500);
return;
} else {
// $.simpleAlert("正在编号", "loading");
// $.ajax({
@ -268,11 +282,11 @@ $(function() {
{ shapeId: 'obj_c9e1cdab200000014a2eade016e8170d',order: 5},
{ shapeId: 'obj_c9e1cdb266f0000159a7c8afa7701a68',order: 6},
]
}
let obj = Model.define
console.log(obj)
let elements = obj.elements
let orderList = numObj.orderList
};
let obj = Model.define;
console.log(obj);
let elements = obj.elements;
let orderList = numObj.orderList;
for (let j = 0; j < orderList.length; j++) {
for(let i in elements) {
if (orderList[j].shapeId == i) {
@ -303,7 +317,7 @@ $(function() {
$("#saving_tip").text("文件已修改,未保存");
}
})
})
});
/**定时保存**/
@ -321,7 +335,7 @@ function saveTimer() {
alertmsg(count, msg);
}
}})
}
};
alertmsg(count, msg);
// $.simpleAlert("5秒之后自动进行保存", "info", 5000, {callback:function(){$("#bar_save").click();}});
}, 300000);
@ -343,7 +357,7 @@ function intervalRefresh() {
alert : false,
ok: function(msg){
if (msg.data.isLocked) {
var m = '当前流程被 ' + msg.data.currentUserName + ' 强行获取编辑权或锁定'
var m = '当前流程被 ' + msg.data.currentUserName + ' 强行获取编辑权或锁定';
$.simpleAlert(m,"info",4000,{mode:true,callback:function() {
if ($("#saving_tip").text() != "已保存成功" && $("#saving_tip").text() != "保存成功" && $("#saving_tip").text() != "您的文件已经成功保存" && $("#saving_tip").text() != "") {
$("#saving_tip").text('');// 防止reload时出现浏览器自带提示
@ -389,7 +403,7 @@ var CommonLock = {
window.location.reload();
}
}
}
};
// 记录所有节点及节点名称,保存时对比
var shapeTextRecord = {};

View File

@ -3045,78 +3045,51 @@ var Dock = {
else if(this.currentView == 'diff') {
// var html = "<div style=\"font-size: 16px; color: #aaa; text-align: center; vertical-align: middle; line-height: 200px;\">暂无版本差异</div>";
var html = ''
var diffContent = [
{
versionName: 'Ver 2.0',
updateTime: '5月19日 16:00',
updateContent: [
{
title: '文件修改:',
detail: ['[内容]增加了111111111111111111','[责任部门]增加了11111111111111111']
},
{
title: '节点修改:',
detail: ['删除[开始事件]节点','删除[开始]节点','删除[人工]节点']
},
{
title: '[文件]删除11111111111',
detail: []
$.ajax({
url: "./jd?sid=" + $("#sid").val()
+ "&cmd=com.actionsoft.apps.coe.pal_repository_model_version_diff_query&wsId=" + $("#wsId").val()
+ "&id=" + ruuid,
success: function (ro) {
// console.log("历史差异结果: " + JSON.stringify(ro))
if (ro.result == "ok") {
var diffContent = ro.data;
for (var i = 0; i < diffContent.length; i++) {
var diffCount = 0
var content = diffContent[i].updateContent
var diffListHtml = ''
for (var j = 0; j < content.length; j++) {
var diffDetailHtml = ''
var listDetail = content[j].detail
if (listDetail.length == 0) {
diffCount += 1
}
for (var k = 0; k < listDetail.length; k++) {
diffCount += 1
diffDetailHtml += '<div style="margin-left: 10px">' + '·' + listDetail[k] + '</div>'
}
diffListHtml += '<div>' + content[j].title + '</div>'
+ '<div>' + diffDetailHtml + '</div>'
}
html += '<tr>'
+ '<td style="width:50px;">' + diffContent[i].versionName + '</td>'
+ '<td style="width:250px">' + diffContent[i].updateTime + '<span style="padding-left: 10px">' + '(' + diffCount + '处修改)' + '</span>' + '</td>'
+ '</tr>'
+ '<tr>'
+ '<td style="width:50px"></td>'
+ '<td style="width:250px">' + diffListHtml + '</td>'
+ '</tr>'
}
]
},
{
versionName: 'Ver 1.0',
updateTime: '5月14日 15:00',
updateContent: [
{
title: '文件修改',
detail: ['[内容]增加了111111111111 ',]
},
{
title: '节点修改',
detail: ['删除[开始事件]节点','删除[开始]节点','删除[人工]节点','删除[结束]节点']
},
{
title: '[制度]增加了11111111111111',
detail: []
},
{
title: '[文件]删除了11111111111',
detail: []
}
]
}
]
for (var i = 0; i < diffContent.length; i++) {
var diffCount = 0
var content = diffContent[i].updateContent
var diffListHtml = ''
for (var j = 0; j < content.length; j++) {
var diffDetailHtml = ''
var listDetail = content[j].detail
if (listDetail.length == 0) {
diffCount +=1
$("#diffTable").empty().html(html)
} else {
html = '<tr>'
+ ro.msg
+ '</tr>'
$("#diffTable").empty().html(html)
}
for (var k = 0; k < listDetail.length; k++) {
diffCount +=1
diffDetailHtml += '<div style="margin-left: 10px">' + '·' +listDetail[k]+'</div>'
}
diffListHtml += '<div>' + content[j].title +'</div>'
+ '<div>'+diffDetailHtml+'</div>'
}
html += '<tr>'
+ '<td style="width:50px;">' + diffContent[i].versionName + '</td>'
+ '<td style="width:250px">' + diffContent[i].updateTime + '<span style="padding-left: 10px">' + '(' + diffCount + '处修改)' + '</span>' + '</td>'
+ '</tr>'
+ '<tr>'
+ '<td style="width:50px"></td>'
+ '<td style="width:250px">' + diffListHtml + '</td>'
+ '</tr>'
}
$("#diffTable").empty().html(html)
});
}
if (this.currentView == "history") {
if (drawNav && Dock.historyVersions == null) {