package com.norteksoft.wf.base.utils; import java.io.IOException; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.ResponseHandler; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.BasicResponseHandler; import org.apache.http.impl.client.DefaultHttpClient; import com.norteksoft.acs.entity.organization.User; import com.norteksoft.acs.service.organization.UserManager; import com.norteksoft.product.util.ContextUtils; import com.norteksoft.product.util.PropUtils; import com.norteksoft.product.util.SystemUrls; import com.norteksoft.wf.base.enumeration.CommonStrings; import com.norteksoft.wf.base.enumeration.LogicOperator; import com.norteksoft.wf.engine.core.DefinitionXmlParse; import com.norteksoft.wf.engine.core.impl.UserParseCalculator; import com.norteksoft.wf.engine.service.TaskService; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.config.ClientConfig; import com.sun.jersey.api.client.config.DefaultClientConfig; public class WebUtil { private static Log log = LogFactory.getLog(WebUtil.class); private static final String MEDIA_TYPE = "text/html;charset=UTF-8"; /** * RESTful请求 * @param url * @param companyId */ public static void restful(String url,Long companyId,Long entityId,String systemCode){ ClientConfig config = new DefaultClientConfig(); Client client = Client.create(config); String resultUrl = SystemUrls.getSystemUrl(systemCode); if(PropUtils.isBasicSystem(resultUrl)){ resultUrl = SystemUrls.getSystemUrl("imatrix"); } log.info(" == system url : ["+resultUrl+"] == "); resultUrl = resultUrl + url; log.info(" == restlet url : ["+resultUrl+"] == "); WebResource service = client.resource(resultUrl); ClientResponse cr = service .entity("companyId="+companyId+"&entityId="+entityId, MEDIA_TYPE) .accept(MEDIA_TYPE) .post(ClientResponse.class); if(cr != null) log.info(" =========== RESTful execute result : ["+cr.getEntity(String.class)+"] =========== "); } /** * 普通的http请求 * @param url */ public static void getHttpConnection(String url,Long companyId,Long entityId,String systemCode){ String resultUrl=SystemUrls.getBusinessPath(systemCode); if(PropUtils.isBasicSystem(resultUrl)){ resultUrl = SystemUrls.getSystemUrl("imatrix"); } log.info(" == system url : ["+resultUrl+"] == "); resultUrl = resultUrl + url+"?companyId="+companyId+"&entityId="+entityId; log.info(" == restlet url : ["+resultUrl+"] == "); HttpGet httpget = new HttpGet(resultUrl); HttpClient httpclient = new DefaultHttpClient(); ResponseHandler<String> responseHandler = new BasicResponseHandler(); try { httpclient.execute(httpget, responseHandler); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } httpclient.getConnectionManager().shutdown(); } public static String getSystemCodeByDef(String processId){ Map<String, String> defBasicInfo=DefinitionXmlParse.getWorkFlowBaseInfo(processId); String systemCode=defBasicInfo.get(DefinitionXmlParse.SYSTEM_CODE); String code=ContextUtils.getSystemCode(); if(StringUtils.isNotEmpty(systemCode)){ code=systemCode; } return code; } /* * 解析通知条件获得需要通知用户的邮件地址 */ public static Set<String> getEmailsInformCondition(String userCondition,Long systemId,Long companyId,UserParseCalculator upc){ Set<String> emails = new HashSet<String>(); //获得通知用户的登录名 Set<String> loginNames = getInformUserLoginNames(userCondition,systemId,companyId,upc); UserManager userManager = (UserManager)ContextUtils.getBean("userManager"); List<User> users = userManager.getUsersByLoginNames(loginNames); for(User user:users){ if(StringUtils.isEmpty(user.getEmail())){ log.error(user.getName() + "邮件地址为空。" ); continue; } emails.add(user.getEmail()); } return emails; } private static Set<String> getInformUserLoginNames(String userCondition,Long systemId,Long companyId,UserParseCalculator upc){ Set<String> loginNames = new HashSet<String>(); if(StringUtils.isNotEmpty(userCondition)){ String[] conditionArray = userCondition.split(LogicOperator.OR.getCode()); for(String condition : conditionArray){ if(CommonStrings.DOCUMENT_CREATOR.equals(condition.trim())){ //文档创建人 loginNames.add(upc.getDocumentCreator()); }else if(CommonStrings.PROCESS_ADMIN.equals(condition.trim())){ loginNames.add(upc.getProcessAdmin()); }else if(CommonStrings.PARTICIPANTS_TRANSACTOR.equals(condition.trim())){ loginNames.addAll(upc.getHandledTransactors()); }else{ loginNames.addAll(upc.getUsers(condition,systemId,companyId)); } } } return loginNames; } /* * 解析通知条件获得需要通知用户的登录名 */ public static String getLoginNameInformCondition(String userCondition,Long systemId,Long companyId,UserParseCalculator upc){ String result = ""; //获得通知用户的登录名 Set<String> loginNames = getInformUserLoginNames(userCondition,systemId,companyId,upc); UserManager userManager = (UserManager)ContextUtils.getBean("userManager"); List<User> users = userManager.getUsersByLoginNames(loginNames); for(User user:users){ if(StringUtils.isEmpty(user.getLoginName())){ log.error(user.getName() + "登录名为空。" ); continue; } result=result+user.getLoginName()+","; } result="".equals(result)?"":result.substring(0,result.length()-1); return result; } //获得用户解析需要的信息 public static UserParseCalculator getUserParseInfor(String instanceId,String creator,String processAdmin){ TaskService taskService = (TaskService) ContextUtils.getBean("taskService"); List<String> userList = taskService.getParticipantsTransactor(instanceId); UserParseCalculator upc = new UserParseCalculator(); upc.setDocumentCreator(creator); upc.setHandledTransactors(userList); upc.setProcessAdmin(processAdmin); return upc; } }