EqpMonitorProcessAction.java
package com.mycim.webapp.actions.dmmprocess;
import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.i18n.I18nUtils;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.beans.PropertyUtils;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.bas.NamedObject;
import com.mycim.valueobject.bas.Relation;
import com.mycim.valueobject.consts.LinkTypeList;
import com.mycim.valueobject.consts.SessionNames;
import com.mycim.valueobject.prp.ProcessPlanning;
import com.mycim.valueobject.prp.ProcessVersion;
import com.mycim.valueobject.prp.Route;
import com.mycim.valueobject.security.UserGroup;
import com.mycim.webapp.Constants;
import com.mycim.webapp.WebUtils;
import com.mycim.webapp.actions.NpwSetupAction;
import com.mycim.webapp.forms.TechnologyVersionInfoForm;
import com.mycim.webapp.secutiry.jwt.JwtUtils;
import com.mycim.webapp.secutiry.jwt.token.JwtToken;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
/**
* DMM 流程定义
*
* @author shijie.deng
* @version 6.0.0
* @date 2019/11/8
**/
public class EqpMonitorProcessAction extends NpwSetupAction {
@Override
public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
TechnologyVersionInfoForm theform = (TechnologyVersionInfoForm) form;
String instanceId = theform.getInstanceId();
instanceId = StringUtils.trimToUpperCase(instanceId);
theform.setInstanceId(instanceId);
ProcessPlanning processPlanning = new ProcessPlanning(instanceId, getNamedSpace(ObjectList.WFL_KEY,
LocalContext.getFacilityRrn()),
ObjectList.WFL_KEY);
ProcessPlanning processPlanningData = prpService.getProcessPlanning(processPlanning);
processPlanning = processPlanningData == null ? processPlanning : processPlanningData;
PropertyUtils.copyProperties(theform, processPlanning);
if (processPlanning == null || processPlanning.getInstanceRrn() == 0) {
theform.setTransId(Constants.CREATE_KEY);
} else {
NamedObject object = baseService.getNamedObject(processPlanning.getInstanceRrn());
theform.setTransId(Constants.MODIFY_KEY);
Assert.isTrue(StringUtils.equalsIgnoreCase(MONITOR, object.getFlagType()),
Errors.create().key(MessageIdList.DMM_NOT_DMM_PROCESS).content("Not a dmm process!").build());
//检查是否有权限查看该process
checkProcessPermission(processPlanning.getInstanceId());
List<Relation> fullRelations = baseService
.getFullRelations(LinkTypeList.PROCESS_TO_PERMISSIONS_GROUP, processPlanning.getInstanceRrn(), 0L);
StringBuilder processPermissionsGroupRrns = new StringBuilder();
StringBuilder processPermissionsGroupIds = new StringBuilder();
int i = 0;
for (Relation relation : fullRelations) {
processPermissionsGroupRrns.append(relation.getToRrn());
processPermissionsGroupIds.append(baseService.getNamedObjectId(relation.getToRrn()));
i++;
if (i < fullRelations.size()) {
processPermissionsGroupRrns.append(",");
processPermissionsGroupIds.append(",");
}
}
theform.setProcessPermissionsGroupRrns(processPermissionsGroupRrns.toString());
theform.setProcessPermissionsGroupIds(processPermissionsGroupIds.toString());
request.setAttribute("permissionsGroup", processPermissionsGroupRrns.toString());
}
List<ProcessVersion> processVersions = prpService.getProcessVersions(processPlanning);
theform.setVersionEditEnable(String.valueOf(checkVersionEditEnable(processVersions)));
theform.setObjectDeleteEnable(checkObjectDeleteEnable(processVersions));
theform.setDisableFlag(baseService.getNamedObjectDisableFlag(processPlanning.getInstanceRrn()));
theform.setFlagType(processPlanning.getFlagType());
request.setAttribute(SessionNames.PROCESSPLANNING_KEY, processPlanning);
request.setAttribute("versionForm", theform);
return mapping.getInputForward();
}
public ActionForward create(ActionMapping mapping, TechnologyVersionInfoForm theform, HttpServletRequest request,
HttpServletResponse response) throws Exception {
ProcessPlanning processPlanning = new ProcessPlanning(theform.getInstanceId(), getNamedSpace(ObjectList.WFL_KEY,
LocalContext
.getFacilityRrn()),
ObjectList.WFL_KEY);
Assert.isFalse(StringUtils.isEmpty(theform.getInstanceId()),
Errors.create().key(MessageIdList.PROCESS_EMPTY_ID).content("process id is empty!").build());
Assert.isFalse(getInstanceRrn(theform.getInstanceId(), LocalContext.getFacilityRrn(), ObjectList.WFL_KEY) > 0,
Errors.create().key(MessageIdList.PROCESS_INVALID_SAME).content("流程号已经存在,不能重复添加!").build());
theform.setInstanceId(StringUtils.trimToUpperCase(theform.getInstanceId()));
PropertyUtils.copyProperties(processPlanning, theform);
processPlanning.setTransPerformedby(LocalContext.getUserId());
processPlanning.setDisableFlag(theform.getDisableFlag());
processPlanning.setTransId(Constants.CREATE_KEY);
processPlanning.setObjectType(ObjectList.ROUTE_KEY);
processPlanning.setObjectSubtype(ObjectList.PROCESS_KEY);
processPlanning.setFlagType(theform.getFlagType());
String processPermissionsGroupRrns = theform.getProcessPermissionsGroupRrns();
String[] groupRrnArray = StringUtils.split(processPermissionsGroupRrns, ',');
StringBuilder processPermissionsGroupIds = new StringBuilder();
int i = 0;
for (String groupRrn : groupRrnArray) {
i++;
processPermissionsGroupIds.append(getInstanceId(new Long(groupRrn)));
if (i < groupRrnArray.length) {
processPermissionsGroupIds.append(",");
}
}
//用于回显下拉框的值
theform.setProcessPermissionsGroupIds(processPermissionsGroupIds.toString());
String processPermissionsGroup = theform.getProcessPermissionsGroupRrns();
String[] groups = StringUtils.split(processPermissionsGroup, ',');
boolean hasUserFlag = false;
for (String group : groups) {
List<Map> userGroupGrantUserList = securityService
.getHasGrantUserAll(new Long(group), LocalContext.getUserId());
for (Map map : userGroupGrantUserList) {
String instanceId = MapUtils.getString(map, "instanceId");
if (StringUtils.isEqual(instanceId, LocalContext.getUserId())) {
hasUserFlag = true;
}
}
}
//如果所选用户组中都不包含当前用户,则不允许添加该流程
Assert.isTrue(hasUserFlag, Errors.create().key(MessageIdList.PROCESS_USERGROUP_NO_USER).content(
"Please select at least one User Group containing the current " + "user!").build());
prpService.insertProcessPlanning(processPlanning, groups);
updateLocalContext(response);
//重定向刷新LocalContext
response.sendRedirect("dmmprocess.do?instanceId=" + processPlanning.getInstanceId());
return null;
}
public ActionForward update(ActionMapping mapping, TechnologyVersionInfoForm theform, HttpServletRequest request,
HttpServletResponse response) throws Exception {
ProcessPlanning processPlanning = new ProcessPlanning(theform.getInstanceId(), getNamedSpace(ObjectList.WFL_KEY,
LocalContext
.getFacilityRrn()),
ObjectList.WFL_KEY);
processPlanning = (ProcessPlanning) getInstance(processPlanning);
checkPermissionForOperateProcess(processPlanning.getInstanceRrn());
PropertyUtils.copyProperties(processPlanning, theform);
processPlanning.setObjectType(ObjectList.ROUTE_KEY);
processPlanning.setObjectSubtype(ObjectList.PROCESS_KEY);
processPlanning.setFlagType(theform.getFlagType());
processPlanning.setTransPerformedby(LocalContext.getUserId());
processPlanning.setDisableFlag(theform.getDisableFlag());
prpService.updateProcessPlanning(processPlanning, theform.getProcessPermissionsGroupRrns());
updateLocalContext(response);
//重新请求刷新LocalContext
request.getRequestDispatcher("dmmprocess.do?action=init").forward(request, response);
return WebUtils.NULLActionForward;
}
public ActionForward delete(ActionMapping mapping, TechnologyVersionInfoForm theform, HttpServletRequest request,
HttpServletResponse response) throws Exception {
ProcessPlanning processPlanning = new ProcessPlanning(theform.getInstanceId(), getNamedSpace(ObjectList.WFL_KEY,
LocalContext
.getFacilityRrn()),
ObjectList.WFL_KEY);
long processPlanningRrn = baseService.getNamedObjectRrn(processPlanning);
checkPermissionForOperateProcess(processPlanningRrn);
prpService.deleteProcessPlanning(processPlanningRrn);
updateLocalContext(response);
theform.setInstanceId(null);
return init(mapping, theform, request, response);
}
public ActionForward useInfo(ActionMapping mapping, TechnologyVersionInfoForm theform, HttpServletRequest request) {
String processId = theform.getInstanceId();
ProcessPlanning processPlanning = new ProcessPlanning(processId, getNamedSpace(ObjectList.WFL_KEY,
LocalContext.getFacilityRrn()),
ObjectList.WFL_KEY);
processPlanning = prpService.getProcessPlanning(processPlanning);
if ((processId == null || "".equalsIgnoreCase(processId.trim())) && processPlanning != null) {
processId = processPlanning.getInstanceId();
theform.setInstanceId(processId);
theform.setNamedSpace(processPlanning.getNamedSpace());
theform.setInstanceDesc(processPlanning.getInstanceDesc());
}
Assert.isFalse(processId == null || processId.equals(""),
Errors.create().key(MessageIdList.PROCESS_EMPTY_ID).content("流程号不能为空!").build());
processId = processId.trim().toUpperCase();
Route route = new Route(getDMMRouteId(processId),
getNamedSpace(ObjectList.WFL_KEY, LocalContext.getFacilityRrn()), ObjectList.WFL_KEY);
long routeRrn = getInstanceRrn(route.getInstanceId(), LocalContext.getFacilityRrn(), ObjectList.WFL_KEY);
route.setInstanceRrn(routeRrn);
route = (Route) getInstance(route);
Collection<Map<String, String>> eqptList = dmmService.getDMMUsedEqptId(routeRrn, null);
request.setAttribute("eqptList", eqptList);
return mapping.findForward("processwheretouse");
}
/**
* 更新LocalContext中的processRrns
*
* @param response response对象
*/
private void updateLocalContext(HttpServletResponse response) {
String dataPermissionFlag = sysService.getDataPermissionFlag(LocalContext.getFacilityRrn());
String processRrns = getProcessRrns(LocalContext.getUserRrn());
JwtToken jwtToken = new JwtToken(LocalContext.getFacilityRrn(), LocalContext.getUserRrn(),
LocalContext.getUserId(), I18nUtils.getCurrentLanguage().toString(),
processRrns, dataPermissionFlag);
JwtUtils.setTokenToCookie(response, JwtUtils.sign(jwtToken));
}
private String getProcessRrns(long userRrn) {
Set<Long> processRrns = new HashSet<>();
List<UserGroup> userGroups = securityService.getUserGroupByUserRrn(userRrn);
for (UserGroup userGroup : userGroups) {
List<Relation> relations = baseService
.getRelationsUseToRrn(userGroup.getInstanceRrn(), LinkTypeList.PROCESS_TO_PERMISSIONS_GROUP);
for (Relation relation : relations) {
processRrns.add(relation.getFromRrn());
}
}
return StringUtils.join(processRrns, ",");
}
}