package com.java110.user.cmd.user; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.java110.core.annotation.Java110Cmd; import com.java110.core.context.ICmdDataFlowContext; import com.java110.core.event.cmd.Cmd; import com.java110.core.event.cmd.CmdEvent; import com.java110.service.context.DataQuery; import com.java110.service.smo.IQueryServiceSMO; import com.java110.utils.constant.ServiceCodeConstant; import com.java110.utils.exception.CmdException; import com.java110.utils.util.Assert; import com.java110.utils.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import java.text.ParseException; @Java110Cmd(serviceCode = "query.staff.byName") public class QueryStaffByNameCmd extends Cmd { @Autowired private IQueryServiceSMO queryServiceSMOImpl; @Override public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException { Assert.hasKeyAndValue(reqJson, "storeId", "请求报文中未包含storeId节点"); Assert.hasKeyAndValue(reqJson, "name", "请求报文中未包含name节点"); } @Override public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException { JSONObject resultJson = JSONObject.parseObject("{\"total:\":10,\"datas\":[]}"); DataQuery dataQuery = new DataQuery(); dataQuery.setServiceCode(ServiceCodeConstant.SERVICE_CODE_QUERY_USER_BY_NAME); dataQuery.setRequestParams(reqJson); queryServiceSMOImpl.commonQueryService(dataQuery); ResponseEntity responseEntity = dataQuery.getResponseEntity(); if (responseEntity.getStatusCode() != HttpStatus.OK) { context.setResponseEntity(responseEntity); return; } String useIds = getUserIds(responseEntity); if (StringUtil.isEmpty(useIds)) { context.setResponseEntity(responseEntity); return; } JSONArray userInfos = getUserInfos(responseEntity); JSONObject paramIn = new JSONObject(); paramIn.put("userIds", useIds); paramIn.put("storeId", reqJson.getString("storeId")); dataQuery = new DataQuery(); dataQuery.setServiceCode(ServiceCodeConstant.SERVICE_CODE_QUERY_STOREUSER_BYUSERIDS); dataQuery.setRequestParams(paramIn); queryServiceSMOImpl.commonQueryService(dataQuery); responseEntity = dataQuery.getResponseEntity(); if (responseEntity.getStatusCode() != HttpStatus.OK) { context.setResponseEntity(responseEntity); return; } resultJson.put("datas", getStaffUsers(userInfos, responseEntity)); responseEntity = new ResponseEntity(resultJson.toJSONString(), HttpStatus.OK); context.setResponseEntity(responseEntity); } /** * 查询商户员工 * * @param userInfos 用户信息 * @param responseEntity 商户返回的用户ID信息 * @return */ private JSONArray getStaffUsers(JSONArray userInfos, ResponseEntity responseEntity) { JSONObject storeUserInfo = null; JSONArray newStaffUsers = new JSONArray(); JSONArray storeUsers = JSONObject.parseObject(responseEntity.getBody().toString()).getJSONArray("storeUsers"); if (storeUsers == null || storeUsers.size() < 1) { return newStaffUsers; } for (int storeUserIndex = 0; storeUserIndex < storeUsers.size(); storeUserIndex++) { storeUserInfo = storeUsers.getJSONObject(storeUserIndex); for (int userIndex = 0; userIndex < userInfos.size(); userIndex++) { if (userInfos.getJSONObject(userIndex).getString("userId").equals(storeUserInfo.getString("userId"))) { newStaffUsers.add(userInfos.getJSONObject(userIndex)); } } } return newStaffUsers; } /** * 获取用ID * 如: * 123,456,567 * * @param responseEntity * @return */ private String getUserIds(ResponseEntity responseEntity) { JSONObject userInfo = null; String userId = ""; JSONArray resultInfo = JSONObject.parseObject(responseEntity.getBody().toString()).getJSONArray("users"); if (resultInfo == null || resultInfo.size() < 1) { return userId; } for (int userIndex = 0; userIndex < resultInfo.size(); userIndex++) { userInfo = resultInfo.getJSONObject(userIndex); userId += (userInfo.getString("userId") + ","); } userId = userId.length() > 0 ? userId.substring(0, userId.lastIndexOf(",")) : userId; return userId; } /** * 获取用户 * * @param responseEntity * @return */ private JSONArray getUserInfos(ResponseEntity responseEntity) { JSONArray resultInfo = JSONObject.parseObject(responseEntity.getBody().toString()).getJSONArray("users"); if (resultInfo == null || resultInfo.size() < 1) { return null; } return resultInfo; } }