|
|
|
|
@ -8,7 +8,11 @@ import org.dromara.common.core.utils.DateUtils;
|
|
|
|
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
|
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
|
|
|
|
import cn.hutool.core.convert.Convert;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
|
|
import com.fasterxml.jackson.core.type.TypeReference;
|
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
|
import com.github.yulichang.toolkit.JoinWrappers;
|
|
|
|
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
@ -32,11 +36,14 @@ import org.dromara.oa.erp.domain.vo.ErpTempTaskVo;
|
|
|
|
|
import org.dromara.oa.erp.domain.ErpTempTask;
|
|
|
|
|
import org.dromara.oa.erp.mapper.ErpTempTaskMapper;
|
|
|
|
|
import org.dromara.oa.erp.service.IErpTempTaskService;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.Collection;
|
|
|
|
|
import java.util.Collections;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
|
|
|
|
|
@ -58,6 +65,9 @@ public class ErpTempTaskServiceImpl implements IErpTempTaskService {
|
|
|
|
|
private static final String STATUS_FINISHED = "3";
|
|
|
|
|
private static final String STATUS_INVALID = "4";
|
|
|
|
|
private static final BigDecimal MIN_WORKLOAD_STEP = new BigDecimal("0.5");
|
|
|
|
|
private static final ObjectMapper CHANGE_CONTENT_OBJECT_MAPPER = new ObjectMapper();
|
|
|
|
|
private static final TypeReference<Map<String, Object>> CHANGE_CONTENT_TYPE = new TypeReference<>() {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
private final ErpTempTaskMapper baseMapper;
|
|
|
|
|
private final ErpTempTaskChangeMapper changeMapper;
|
|
|
|
|
@ -108,48 +118,36 @@ public class ErpTempTaskServiceImpl implements IErpTempTaskService {
|
|
|
|
|
private MPJLambdaWrapper<ErpTempTask> buildQueryWrapper(ErpTempTaskBo bo) {
|
|
|
|
|
Map<String, Object> params = bo.getParams();
|
|
|
|
|
MPJLambdaWrapper<ErpTempTask> lqw = JoinWrappers.lambda(ErpTempTask.class)
|
|
|
|
|
.selectAll(ErpTempTask.class)
|
|
|
|
|
.eq(ErpTempTask::getDelFlag, "0")
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getTempTaskCode()), ErpTempTask::getTempTaskCode, bo.getTempTaskCode())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getTaskTitle()), ErpTempTask::getTaskTitle, bo.getTaskTitle())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getTaskDesc()), ErpTempTask::getTaskDesc, bo.getTaskDesc())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getPriority()), ErpTempTask::getPriority, bo.getPriority())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getUrgentReason()), ErpTempTask::getUrgentReason, bo.getUrgentReason())
|
|
|
|
|
.eq(bo.getRequireTime() != null, ErpTempTask::getRequireTime, bo.getRequireTime())
|
|
|
|
|
.eq(bo.getConfirmFinishTime() != null, ErpTempTask::getConfirmFinishTime, bo.getConfirmFinishTime())
|
|
|
|
|
.eq(bo.getActualStartTime() != null, ErpTempTask::getActualStartTime, bo.getActualStartTime())
|
|
|
|
|
.eq(bo.getActualFinishTime() != null, ErpTempTask::getActualFinishTime, bo.getActualFinishTime())
|
|
|
|
|
.eq(bo.getProjectId() != null, ErpTempTask::getProjectId, bo.getProjectId())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getProjectCode()), ErpTempTask::getProjectCode, bo.getProjectCode())
|
|
|
|
|
.like(StringUtils.isNotBlank(bo.getProjectName()), ErpTempTask::getProjectName, bo.getProjectName())
|
|
|
|
|
.eq(bo.getPmId() != null, ErpTempTask::getPmId, bo.getPmId())
|
|
|
|
|
.like(StringUtils.isNotBlank(bo.getPmName()), ErpTempTask::getPmName, bo.getPmName())
|
|
|
|
|
.eq(bo.getContractId() != null, ErpTempTask::getContractId, bo.getContractId())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getContractCode()), ErpTempTask::getContractCode, bo.getContractCode())
|
|
|
|
|
.eq(bo.getRequesterId() != null, ErpTempTask::getRequesterId, bo.getRequesterId())
|
|
|
|
|
.like(StringUtils.isNotBlank(bo.getRequesterName()), ErpTempTask::getRequesterName, bo.getRequesterName())
|
|
|
|
|
.eq(bo.getRequestDeptId() != null, ErpTempTask::getRequestDeptId, bo.getRequestDeptId())
|
|
|
|
|
.like(StringUtils.isNotBlank(bo.getRequestDeptName()), ErpTempTask::getRequestDeptName, bo.getRequestDeptName())
|
|
|
|
|
.eq(bo.getDispatcherId() != null, ErpTempTask::getDispatcherId, bo.getDispatcherId())
|
|
|
|
|
.like(StringUtils.isNotBlank(bo.getDispatcherName()), ErpTempTask::getDispatcherName, bo.getDispatcherName())
|
|
|
|
|
.eq(bo.getSoftwareLeaderId() != null, ErpTempTask::getSoftwareLeaderId, bo.getSoftwareLeaderId())
|
|
|
|
|
.like(StringUtils.isNotBlank(bo.getSoftwareLeaderName()), ErpTempTask::getSoftwareLeaderName, bo.getSoftwareLeaderName())
|
|
|
|
|
.eq(bo.getAssigneeId() != null, ErpTempTask::getAssigneeId, bo.getAssigneeId())
|
|
|
|
|
.like(StringUtils.isNotBlank(bo.getAssigneeName()), ErpTempTask::getAssigneeName, bo.getAssigneeName())
|
|
|
|
|
.eq(bo.getEstimateWorkload() != null, ErpTempTask::getEstimateWorkload, bo.getEstimateWorkload())
|
|
|
|
|
.eq(bo.getActualWorkload() != null, ErpTempTask::getActualWorkload, bo.getActualWorkload())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getFinishResult()), ErpTempTask::getFinishResult, bo.getFinishResult())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getTerminateReason()), ErpTempTask::getTerminateReason, bo.getTerminateReason())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getFinishRemark()), ErpTempTask::getFinishRemark, bo.getFinishRemark())
|
|
|
|
|
.eq(bo.getRelatedTaskId() != null, ErpTempTask::getRelatedTaskId, bo.getRelatedTaskId())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getRelatedTaskCode()), ErpTempTask::getRelatedTaskCode, bo.getRelatedTaskCode())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getRelateReason()), ErpTempTask::getRelateReason, bo.getRelateReason())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getRelateRemark()), ErpTempTask::getRelateRemark, bo.getRelateRemark())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getTaskStatus()), ErpTempTask::getTaskStatus, bo.getTaskStatus())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpTempTask::getFlowStatus, bo.getFlowStatus())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getCcUserIds()), ErpTempTask::getCcUserIds, bo.getCcUserIds())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getOssId()), ErpTempTask::getOssId, bo.getOssId())
|
|
|
|
|
;
|
|
|
|
|
.selectAll(ErpTempTask.class)
|
|
|
|
|
.eq(ErpTempTask::getDelFlag, "0")
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getTempTaskCode()), ErpTempTask::getTempTaskCode, bo.getTempTaskCode())
|
|
|
|
|
.like(StringUtils.isNotBlank(bo.getTaskTitle()), ErpTempTask::getTaskTitle, bo.getTaskTitle())
|
|
|
|
|
.like(StringUtils.isNotBlank(bo.getTaskDesc()), ErpTempTask::getTaskDesc, bo.getTaskDesc())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getPriority()), ErpTempTask::getPriority, bo.getPriority())
|
|
|
|
|
.eq(bo.getProjectId() != null, ErpTempTask::getProjectId, bo.getProjectId())
|
|
|
|
|
.like(StringUtils.isNotBlank(bo.getProjectName()), ErpTempTask::getProjectName, bo.getProjectName())
|
|
|
|
|
.eq(bo.getRequesterId() != null, ErpTempTask::getRequesterId, bo.getRequesterId())
|
|
|
|
|
.like(StringUtils.isNotBlank(bo.getRequesterName()), ErpTempTask::getRequesterName, bo.getRequesterName())
|
|
|
|
|
.eq(bo.getRequestDeptId() != null, ErpTempTask::getRequestDeptId, bo.getRequestDeptId())
|
|
|
|
|
.like(StringUtils.isNotBlank(bo.getRequestDeptName()), ErpTempTask::getRequestDeptName, bo.getRequestDeptName())
|
|
|
|
|
.eq(bo.getDispatcherId() != null, ErpTempTask::getDispatcherId, bo.getDispatcherId())
|
|
|
|
|
.like(StringUtils.isNotBlank(bo.getDispatcherName()), ErpTempTask::getDispatcherName, bo.getDispatcherName())
|
|
|
|
|
.eq(bo.getAssigneeId() != null, ErpTempTask::getAssigneeId, bo.getAssigneeId())
|
|
|
|
|
.like(StringUtils.isNotBlank(bo.getAssigneeName()), ErpTempTask::getAssigneeName, bo.getAssigneeName())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getFinishResult()), ErpTempTask::getFinishResult, bo.getFinishResult())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getTerminateReason()), ErpTempTask::getTerminateReason, bo.getTerminateReason())
|
|
|
|
|
.eq(bo.getRelatedTaskId() != null, ErpTempTask::getRelatedTaskId, bo.getRelatedTaskId())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getRelatedTaskCode()), ErpTempTask::getRelatedTaskCode, bo.getRelatedTaskCode())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getRelateReason()), ErpTempTask::getRelateReason, bo.getRelateReason())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getTaskStatus()), ErpTempTask::getTaskStatus, bo.getTaskStatus())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpTempTask::getFlowStatus, bo.getFlowStatus())
|
|
|
|
|
.orderByDesc(ErpTempTask::getCreateTime);
|
|
|
|
|
if (params != null) {
|
|
|
|
|
String beginActualFinishTime = Convert.toStr(params.get("beginActualFinishTime"));
|
|
|
|
|
String endActualFinishTime = Convert.toStr(params.get("endActualFinishTime"));
|
|
|
|
|
lqw.ge(StringUtils.isNotBlank(beginActualFinishTime), ErpTempTask::getActualFinishTime, beginActualFinishTime)
|
|
|
|
|
.le(StringUtils.isNotBlank(endActualFinishTime), ErpTempTask::getActualFinishTime, endActualFinishTime);
|
|
|
|
|
}
|
|
|
|
|
return lqw;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -249,6 +247,7 @@ public class ErpTempTaskServiceImpl implements IErpTempTaskService {
|
|
|
|
|
|
|
|
|
|
ErpTempTask update = new ErpTempTask();
|
|
|
|
|
update.setTempTaskId(task.getTempTaskId());
|
|
|
|
|
update.setActualStartTime(bo.getActualStartTime());
|
|
|
|
|
update.setActualWorkload(bo.getActualWorkload());
|
|
|
|
|
update.setFinishResult(bo.getFinishResult());
|
|
|
|
|
update.setTerminateReason(bo.getTerminateReason());
|
|
|
|
|
@ -365,6 +364,7 @@ public class ErpTempTaskServiceImpl implements IErpTempTaskService {
|
|
|
|
|
* @return 是否删除成功
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
|
|
|
|
if(isValid){
|
|
|
|
|
for (Long id : ids) {
|
|
|
|
|
@ -384,7 +384,12 @@ public class ErpTempTaskServiceImpl implements IErpTempTaskService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return baseMapper.deleteByIds(ids) > 0;
|
|
|
|
|
boolean deleted = baseMapper.deleteByIds(ids) > 0;
|
|
|
|
|
if (deleted) {
|
|
|
|
|
changeMapper.delete(new LambdaQueryWrapper<ErpTempTaskChange>()
|
|
|
|
|
.in(ErpTempTaskChange::getTempTaskId, ids));
|
|
|
|
|
}
|
|
|
|
|
return deleted;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@ -463,32 +468,21 @@ public class ErpTempTaskServiceImpl implements IErpTempTaskService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Map<String, Object> buildWorkflowVariables(ErpTempTaskBo bo) {
|
|
|
|
|
Map<String, Object> variables = bo.getVariables();
|
|
|
|
|
Map<String, Object> sourceVariables = bo.getVariables();
|
|
|
|
|
Map<String, Object> variables = new HashMap<>();
|
|
|
|
|
variables.put("ignore", true);
|
|
|
|
|
variables.put("has_dispatcher", bo.getDispatcherId() == null ? "0" : "1");
|
|
|
|
|
variables.putIfAbsent("extra_approval_required", "0");
|
|
|
|
|
variables.putIfAbsent("has_change", "0");
|
|
|
|
|
variables.put("extra_approval_required", sourceVariables.getOrDefault("extra_approval_required", "0"));
|
|
|
|
|
variables.put("has_change", sourceVariables.getOrDefault("has_change", "0"));
|
|
|
|
|
variables.put("dispatcherId", bo.getDispatcherId());
|
|
|
|
|
variables.put("requesterId", bo.getRequesterId());
|
|
|
|
|
variables.put("requestDeptId", bo.getRequestDeptId());
|
|
|
|
|
variables.put("softwareLeaderId", bo.getSoftwareLeaderId());
|
|
|
|
|
variables.put("assigneeId", bo.getAssigneeId());
|
|
|
|
|
variables.put("ccUserIds", bo.getCcUserIds());
|
|
|
|
|
variables.put("taskTitle", bo.getTaskTitle());
|
|
|
|
|
variables.put("taskDesc", bo.getTaskDesc());
|
|
|
|
|
variables.put("priority", bo.getPriority());
|
|
|
|
|
variables.put("urgentReason", bo.getUrgentReason());
|
|
|
|
|
variables.put("requireTime", bo.getRequireTime());
|
|
|
|
|
variables.put("confirmFinishTime", bo.getConfirmFinishTime());
|
|
|
|
|
variables.put("projectId", bo.getProjectId());
|
|
|
|
|
variables.put("contractId", bo.getContractId());
|
|
|
|
|
variables.put("estimateWorkload", bo.getEstimateWorkload());
|
|
|
|
|
variables.put("actualWorkload", bo.getActualWorkload());
|
|
|
|
|
variables.put("finishResult", bo.getFinishResult());
|
|
|
|
|
variables.put("terminateReason", bo.getTerminateReason());
|
|
|
|
|
variables.put("finishRemark", bo.getFinishRemark());
|
|
|
|
|
variables.put("relatedTaskId", bo.getRelatedTaskId());
|
|
|
|
|
variables.put("relateReason", bo.getRelateReason());
|
|
|
|
|
variables.put("confirmFinishTime", bo.getConfirmFinishTime());
|
|
|
|
|
variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue()));
|
|
|
|
|
return variables;
|
|
|
|
|
}
|
|
|
|
|
@ -590,6 +584,9 @@ public class ErpTempTaskServiceImpl implements IErpTempTaskService {
|
|
|
|
|
if (StringUtils.isBlank(bo.getBeforeContent()) && StringUtils.isBlank(bo.getAfterContent())) {
|
|
|
|
|
throw new ServiceException("变更前内容和变更后内容不能同时为空");
|
|
|
|
|
}
|
|
|
|
|
if (List.of("1", "2", "3", "4", "5").contains(bo.getChangeType()) && StringUtils.isBlank(bo.getAfterContent())) {
|
|
|
|
|
throw new ServiceException("当前变更类型必须填写变更后内容");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void applyApprovedChange(ErpTempTask task, ErpTempTaskChange change) {
|
|
|
|
|
@ -602,18 +599,89 @@ public class ErpTempTaskServiceImpl implements IErpTempTaskService {
|
|
|
|
|
} else if ("3".equals(change.getChangeType()) && StringUtils.isNotBlank(change.getAfterContent())) {
|
|
|
|
|
update.setConfirmFinishTime(parseDate(change.getAfterContent()));
|
|
|
|
|
} else if ("4".equals(change.getChangeType()) && StringUtils.isNotBlank(change.getAfterContent())) {
|
|
|
|
|
update.setAssigneeId(Convert.toLong(change.getAfterContent()));
|
|
|
|
|
Map<String, Object> afterContent = parseChangeContent(change.getAfterContent());
|
|
|
|
|
Long assigneeId = readLong(afterContent, "assigneeId", "userId", "id", "value");
|
|
|
|
|
if (assigneeId == null) {
|
|
|
|
|
throw new ServiceException("变更后的主执行人不能为空");
|
|
|
|
|
}
|
|
|
|
|
update.setAssigneeId(assigneeId);
|
|
|
|
|
String assigneeName = readString(afterContent, "assigneeName", "nickName", "userName", "name", "label");
|
|
|
|
|
if (StringUtils.isBlank(assigneeName) && Objects.equals(task.getAssigneeId(), assigneeId)) {
|
|
|
|
|
assigneeName = task.getAssigneeName();
|
|
|
|
|
}
|
|
|
|
|
if (StringUtils.isNotBlank(assigneeName)) {
|
|
|
|
|
update.setAssigneeName(assigneeName);
|
|
|
|
|
}
|
|
|
|
|
} else if ("5".equals(change.getChangeType()) && StringUtils.isNotBlank(change.getAfterContent())) {
|
|
|
|
|
update.setProjectId(Convert.toLong(change.getAfterContent()));
|
|
|
|
|
} else if ("7".equals(change.getChangeType())) {
|
|
|
|
|
update.setFinishResult("2");
|
|
|
|
|
update.setTerminateReason(StringUtils.isNotBlank(change.getAfterContent()) ? change.getAfterContent() : "7");
|
|
|
|
|
Map<String, Object> afterContent = parseChangeContent(change.getAfterContent());
|
|
|
|
|
Long projectId = readLong(afterContent, "projectId", "id", "value");
|
|
|
|
|
if (projectId == null) {
|
|
|
|
|
throw new ServiceException("变更后的主报工项目不能为空");
|
|
|
|
|
}
|
|
|
|
|
update.setProjectId(projectId);
|
|
|
|
|
String projectCode = readString(afterContent, "projectCode", "code");
|
|
|
|
|
String projectName = readString(afterContent, "projectName", "name", "label");
|
|
|
|
|
Long pmId = readLong(afterContent, "pmId", "managerId");
|
|
|
|
|
String pmName = readString(afterContent, "pmName", "managerName");
|
|
|
|
|
if (Objects.equals(task.getProjectId(), projectId)) {
|
|
|
|
|
projectCode = StringUtils.blankToDefault(projectCode, task.getProjectCode());
|
|
|
|
|
projectName = StringUtils.blankToDefault(projectName, task.getProjectName());
|
|
|
|
|
pmId = pmId == null ? task.getPmId() : pmId;
|
|
|
|
|
pmName = StringUtils.blankToDefault(pmName, task.getPmName());
|
|
|
|
|
}
|
|
|
|
|
if (StringUtils.isNotBlank(projectCode)) {
|
|
|
|
|
update.setProjectCode(projectCode);
|
|
|
|
|
}
|
|
|
|
|
if (StringUtils.isNotBlank(projectName)) {
|
|
|
|
|
update.setProjectName(projectName);
|
|
|
|
|
}
|
|
|
|
|
if (pmId != null) {
|
|
|
|
|
update.setPmId(pmId);
|
|
|
|
|
}
|
|
|
|
|
if (StringUtils.isNotBlank(pmName)) {
|
|
|
|
|
update.setPmName(pmName);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
baseMapper.updateById(update);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Map<String, Object> parseChangeContent(String content) {
|
|
|
|
|
if (StringUtils.isBlank(content)) {
|
|
|
|
|
return Collections.emptyMap();
|
|
|
|
|
}
|
|
|
|
|
String trimmed = content.trim();
|
|
|
|
|
if (!trimmed.startsWith("{")) {
|
|
|
|
|
return Collections.singletonMap("value", trimmed);
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
return CHANGE_CONTENT_OBJECT_MAPPER.readValue(trimmed, CHANGE_CONTENT_TYPE);
|
|
|
|
|
} catch (JsonProcessingException e) {
|
|
|
|
|
throw new ServiceException("变更后的内容格式不正确");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Long readLong(Map<String, Object> content, String... keys) {
|
|
|
|
|
for (String key : keys) {
|
|
|
|
|
Object value = content.get(key);
|
|
|
|
|
if (value != null && StringUtils.isNotBlank(Convert.toStr(value))) {
|
|
|
|
|
return Convert.toLong(value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String readString(Map<String, Object> content, String... keys) {
|
|
|
|
|
for (String key : keys) {
|
|
|
|
|
Object value = content.get(key);
|
|
|
|
|
if (value != null && StringUtils.isNotBlank(Convert.toStr(value))) {
|
|
|
|
|
return Convert.toStr(value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private BigDecimal parseWorkload(String value) {
|
|
|
|
|
try {
|
|
|
|
|
return new BigDecimal(value);
|
|
|
|
|
|