EmasEventAction.java
package com.mycim.webapp.actions;
import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.jdbc.Page;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.time.DateUtils;
import com.mycim.utils.ChartNamingRule;
import com.mycim.utils.EmasUtil;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.SystemConstant;
import com.mycim.valueobject.bas.NamedObject;
import com.mycim.valueobject.bas.Relation;
import com.mycim.valueobject.consts.ReferenceDetailNames;
import com.mycim.valueobject.consts.SystemConstants;
import com.mycim.valueobject.emas.dto.EmasEventModifyDTO;
import com.mycim.valueobject.emas.dto.EmasEventQueryDTO;
import com.mycim.valueobject.security.UserGroup;
import com.mycim.valueobject.sys.ReferenceFileDetail;
import org.apache.commons.collections.MapUtils;
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.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author kangzhang
* @version 1.0.0
* @date 2021/6/23
**/
public class EmasEventAction extends EmasAction {
@Override
public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
List<Relation> userGroups = securityService.getUserGroups(LocalContext.getUserRrn());
String userGroup = userGroups.stream().map(NamedObject::getInstanceId).collect(Collectors.joining(","));
request.setAttribute("userGroup", userGroup);
request.setAttribute("superPermission", StringUtils.contains(userGroup, SystemConstants.ADMIN_USER_GROUP)?
SystemConstant.Str.ONE : SystemConstant.Str.ZERO);
return mapping.getInputForward();
}
/**
* Action 方法
*/
public List<Map<String, Object>> queryEmasEventHistInfo(EmasEventQueryDTO queryDTO) {
return emasService.getEmasEventHistory(queryDTO.getEmno());
}
/**
* Action 方法
*/
public Map<String, Object> queryEmasEventInfo(EmasEventQueryDTO queryDTO, Map map) {
int pageSize = MapUtils.getIntValue(map, "limit");
int pageNo = MapUtils.getIntValue(map, "page");
Page page = new Page(pageNo, pageSize);
queryDTO.setPage(page);
checkTime(queryDTO);
page = emasService.getEmasEventInfoByPage(queryDTO);
Map<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("results", page.getResults());
resultMap.put("totalCount", page.getTotalItems());
return resultMap;
}
/**
* Action 方法
*/
public void specialCloseEmasEvent(EmasEventModifyDTO modifyDTO) {
Assert.isFalse(StringUtils.isBlank(modifyDTO.getUserComment()),
Errors.create().key(MessageIdList.NEWEMAS_OBJECT_EMPTY).content("The {} can not be empty!")
.args("Comment").build());
Assert.isFalse(modifyDTO.getUserComment().length()>1000, Errors.create().key(MessageIdList.NEWEMAS_FIELD_MORE_DB_LENGTH)
.content("comments length cannot more than 1000!").build());
Assert.isFalse(StringUtils.equalsIgnoreCase(modifyDTO.getStatus(), "Close"),
Errors.create().key(MessageIdList.NEWEMAS_EVENT_INVALID_STATUS).content("The event status: {} is invalid!")
.args("Close").build());
//check Chart Permission and user userGroup
checkChartIdPermission(modifyDTO);
emasService.closeEmasEvent(modifyDTO.getEmno(), modifyDTO.getUserComment(), EmasUtil.Status.SPECIAL_CLOSE);
}
/**
* Action 方法
*/
public void delay(EmasEventModifyDTO modifyDTO) {
Assert.isFalse(StringUtils.equalsIgnoreCase(modifyDTO.getStatus(), "Close"),
Errors.create().key(MessageIdList.NEWEMAS_EVENT_INVALID_STATUS).content("The event status: {} is invalid!")
.args("Close").build());
//check Chart Permission and user userGroup
checkChartIdPermission(modifyDTO);
emasService.delayEmasEvent(modifyDTO.getEmno(), modifyDTO.getDelayTimeHour());
}
private void checkChartIdPermission(EmasEventModifyDTO modifyDTO) {
String[] chartIdArr = StringUtils.split(modifyDTO.getChartId(), ";");
List<Relation> userGroups = securityService.getUserGroups(LocalContext.getUserRrn());
String userGroup = userGroups.stream().map(NamedObject::getInstanceId).collect(Collectors.joining(","));
Map<String, String> referenceFileMap = getReferenceFileDetails(ReferenceDetailNames.SPC_CHART_OWNER).stream().collect(Collectors.toMap(
ReferenceFileDetail::getKey1Value, ReferenceFileDetail::getData1Value, (key1, key2) -> key2));
if (!StringUtils.contains(userGroup, SystemConstants.ADMIN_USER_GROUP)){
for (String str:chartIdArr){
String chartIdUserGroup = referenceFileMap.getOrDefault(ChartNamingRule.getCodeRepresentedAsPermissionUserGroup(str), StringUtils.EMPTY);
Assert.isFalse(StringUtils.isNotBlank(chartIdUserGroup) && !StringUtils.contains(userGroup, chartIdUserGroup),
Errors.create().key("").content("没有此Chart:{}的权限").args(str).build());
}
}
}
private void checkTime(EmasEventQueryDTO queryDTO) {
String startTime = queryDTO.getStartTime();
if (StringUtils.isNotBlank(startTime)) {
Assert.isTrue(startTime.matches(REGEX_OF_DATE),
Errors.create().key(MessageIdList.NEWEMAS_TIME_INVALID_FORMAT).content("Time format is wrong (example:{})!")
.args(DateUtils.DATE_FORMAT4DATE).build());
}
String endTime = queryDTO.getEndTime();
if (StringUtils.isNotBlank(endTime)) {
Assert.isTrue(endTime.matches(REGEX_OF_DATE),
Errors.create().key(MessageIdList.NEWEMAS_TIME_INVALID_FORMAT).content("Time format is wrong (example:{})!")
.args(DateUtils.DATE_FORMAT4DATE).build());
}
}
}