前言
/** * 解析工单ACTION数据中的【完结原因】 * @param caseId 工单ID * @return */private String queryResolveAction(Long caseId) { ActionQueryBizDTO actionQueryBizDTO = new ActionQueryBizDTO(); actionQueryBizDTO.setBizId(caseId); //工单id actionQueryBizDTO.setDataSource(1); ActionQueryDTO actionQueryDTO = new ActionQueryDTO(); actionQueryDTO.setBizDTOs(Lists.newArrayList(actionQueryBizDTO)); Result<PageWithData<ActionDTO>> result = ltppActionQueryService.queryActions(actionQueryDTO); log.info("query action results:{}", JSON.toJSONString(result)); if (result.isSuccess() && result.getData() != null) { if (CollectionUtils.isNotEmpty(result.getData().getData())) { for (ActionDTO actionDTO : result.getData().getData()) { if (ACTION_COMPLETE_CODE.equals(actionDTO.getActionCode())) { JSONObject memoObject = JSON.parseObject(actionDTO.getMemo()); JSONArray actionKeyMemoArray = memoObject.getJSONArray("actionKeyMemo"); for (Object actionKey : actionKeyMemoArray) { Map<String, Object> actionKeyMap = (Map<String, Object>)actionKey; if (MapUtils.isNotEmpty(actionKeyMap) && COMPLETE_REASON.equals(actionKeyMap.get("key"))) { return String.valueOf(actionKeyMap.get("value")); } } } } } } log.warn("cannot find action given case id {}, the result is {}", caseId, JSON.toJSONString(result)); return null;}
public static String getCaseQuestionTitle(CaseTaskRelatedDO caseTask){ Map<String, Object> extAttrs = caseTask.getExtAttrs(); if(extAttrs == null || extAttrs.isEmpty()){ return null; } JSONObject xform = JSON.parseObject(String.valueOf(extAttrs.get("xform"))); if(xform == null){ return null; } JSONObject body = xform.getJSONObject("body"); if(body == null){ return null; } return body.getString("question_title");}
/** * 查询工单Action信息 * K,V -> ACTION_CODE,ACTION * @param caseId * @return */private Map<Integer, ActionDTO> queryCaseActionMap(Long caseId){ ActionQueryBizDTO actionQueryBizDTO = new ActionQueryBizDTO(); actionQueryBizDTO.setBizId(caseId); ActionQueryDTO actionQueryDTO = new ActionQueryDTO(); actionQueryDTO.setBizDTOs(Lists.newArrayList(actionQueryBizDTO)); Result<PageWithData<ActionDTO>> result = ltppActionQueryService.queryActions(actionQueryDTO); log.info("query action results:{}", JSON.toJSONString(result)); if(noActionResult(result)){ return null; } List<ActionDTO> actionList = result.getData().getData(); return actionList.stream().collect(Collectors.toMap(ActionDTO::getActionCode, action -> action));}
Programs are meant to be ready by humans and only icidentally for computers to execute.
-- Donald Ervin Knuth 人工智能之父
译:代码是用来让人读的,只是顺便让机器执行而已。
/** * 工单无ACTION数据 * @param result * @return */private boolean noActionResult(Result<PageWithData<ActionDTO>> result){ if(result == null){ return true; } if(!result.isSuccess()){ return true; } if(result.getData() == null){ return true; } if(CollectionUtils.isEmpty(result.getData().getData())){ return true; } return false;}
/** * 工单解析工具类 * @author niexiaolong * @date 2022/8/24 */public class CaseParser {
/** * 解析工单「完结」状态结论 * @param actionDTO 工单状态集 * @return 「完结」结论 */ private static String parseCompleteConsequence(ActionDTO actionDTO){ JSONObject action = JSON.parseObject(actionDTO.getMemo()); if(action == null){ return null; } JSONArray actionKeyArray = action.getJSONArray(ACTION_KEY_MEMO); if(actionKeyArray == null || actionKeyArray.isEmpty()){ return null; } for (int i=0; i<actionKeyArray.size(); i++){ JSONObject actionKey = actionKeyArray.getJSONObject(i); if(actionKey != null && actionDataKey.equals(actionKey.getString(CaseCodeConstant.COMPLETED_DESC_CODE))) { return actionKey.getString(ACTION_VALUE); } } return null; }}
public List<XSpaceCaseDTO> queryCaseList(String aliId, int currentPage, int pageSize) { // 从xspace获取工单列表信息 List<CaseTaskRelatedDO> caseTaskInfoList = queryCaseListFromXspace(aliId, currentPage, pageSize); // 获取每个工单的状态详情 Map<Long, CaseActionInfo> caseId2ActionInfoMap = queryCaseId2ActionMap(caseTaskRelatedList); // 组装工单数据信息 List<XSpaceCaseDTO> xSpaceCaseList = caseTaskConvertor.convert(caseTaskInfoList, caseId2ActionInfoMap); return xSpaceCaseList;}
private CaseActionInfo queryResolveAction(Long caseId) { // 获取工单状态集合 Map<Integer, ActionDTO> actionMap = queryCaseActionMap(caseId); if(actionMap == null){ return null; } // 优先判断「完结」状态 if(actionMap.containsKey(CaseCodeConstant.COMPLETE_ACTION_CODE)){ ActionDTO completeAction = actionMap.get(CaseCodeConstant.COMPLETE_ACTION_CODE); String completeConsequence = CaseParseUtils.getCompleteConsequence(completeAction); return buildCaseActionInfo(CaseCodeConstant.CASE_COMPLETED, completeAction.getOperatorNick(), completeAction.getGmtModified(), completeConsequence); } // 其次判断「联系中」状态 if(actionMap.containsKey(CaseCodeConstant.CONTACTED_ACTION_CODE)){ ActionDTO contactAction = actionMap.get(CaseCodeConstant.CONTACTED_ACTION_CODE); String contactConsequence = CaseParseUtils.getContactedConsequence(contactAction); return buildCaseActionInfo(CaseCodeConstant.CASE_CONTACTED, contactAction.getOperatorNick(), contactAction.getGmtModified(), contactConsequence); } return CaseActionInfo.emptyAction;}
参考链接:
《开发者评测局》之云效AppStack产品评测征集令
云效AppStack是以应用为中心的云原生应用交付平台,提供对开发者友好的应用编排、环境管理、部署运维、资源管理、应用发布等一站式应用交付能力,帮助企业建立应用持续交付整体解决方案,加速企业云原生与DevOps转型,提升团队研发效能。
免费体验云效AppStack交付平台,撰写评测记录下你与云效AppStack的美好邂逅,就有机会获得cherry机械键盘、云效定制T恤、30元移动话费券等多重好礼!
点击阅读原文查看详情。