前言
/**
* 解析工单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元移动话费券等多重好礼!
点击阅读原文查看详情。