前言
/*** 解析工单ACTION数据中的【完结原因】* @param caseId 工单ID* @return*/private String queryResolveAction(Long caseId) {ActionQueryBizDTO actionQueryBizDTO = new ActionQueryBizDTO();actionQueryBizDTO.setBizId(caseId); //工单idactionQueryBizDTO.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元移动话费券等多重好礼!
点击阅读原文查看详情。