package cn.ksource.web.facade.order; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import cn.ksource.beans.WORKFLOW_BASE; import cn.ksource.beans.WORKFLOW_NODE; import cn.ksource.core.dao.BaseDao; import cn.ksource.core.page.PageInfo; import cn.ksource.core.util.ConvertUtil; import cn.ksource.core.util.StringUtil; import cn.ksource.core.web.WebUtil; import cn.ksource.web.Constants; @Service("orderFacade") public class OrderFacadeImpl implements OrderFacade { @Autowired private BaseDao baseDao; @Override public PageInfo queryMyOrderData(PageInfo pageInfo,Map params) { StringBuilder builder = new StringBuilder(); params.put("ysc", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_WFSTATE_DELETE)); /** * 查询逻辑 * 1.如果节点状态选择为全部,则查询节点表中处理人是我的,(或者处理角色是我的并且没有分配处理人的)--------------我的工单不再查询处理角色问题, * 但查询出来的数据会有重复,因为一个节点我可以处理多次,这样查询出来会有重复的工单,需要过滤,如果同一个工单 有待处理,已处理 或者进行中,已处理,则显示待处理 或进行中,不显示已处理 (待处理和进行中是不会同时存在的) * 2.如果节点状态选择为待处理,则查询节点表中处理人是我的,或者处理角色是我的并且没有分配处理人的 (不需要过滤,因为一个工单待处理节点,只会有一个) * 3.如果节点状态选择为进行中,则查询节点表中处理人是我的 (不需要过滤,因为一个工单进行中节点,只会有一个) * 4.如果节点状态查询未已处理,则查询节点表中处理人是我的,需要过滤(因为一个节点一个人可以处理多次,通过节点表作为主表查询出来的工单会有重复) */ String flowstate = params.get("flowstate"); if(StringUtil.notEmpty(flowstate)) { if(flowstate.equals("1")) { builder.append(" SELECT D.* FROM ( "); //查询处理人是我的 builder.append(" SELECT B.*,A.FLOWSTATE FROM WORKFLOW_NODE A,WORKFLOW_BASE B WHERE A.FLOWID = B.ID AND A.CURRENT_DEALER_ID = :userId "); builder.append(")D"); builder.append(" WHERE D.FLOWSTATE = :jddcl "); params.put("jddcl", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_NODE_FLOWSTATE_UNDISPOSE)); } else if(flowstate.equals("2")) { builder.append(" SELECT D.* FROM ( "); builder.append(" SELECT B.*,A.FLOWSTATE FROM WORKFLOW_NODE A,WORKFLOW_BASE B WHERE A.FLOWID = B.ID AND A.CURRENT_DEALER_ID = :userId AND A.FLOWSTATE = :jdjxz"); builder.append(")D"); builder.append(" WHERE 1 = 1"); params.put("jdjxz", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_NODE_FLOWSTATE_DOING)); }else { builder.append(" SELECT D.* FROM ( "); builder.append(" SELECT DISTINCT B.*,A.FLOWSTATE FROM WORKFLOW_NODE A,WORKFLOW_BASE B WHERE A.FLOWID = B.ID AND A.CURRENT_DEALER_ID = :userId AND A.FLOWSTATE = :jdywc "); builder.append(")D"); builder.append(" WHERE 1 = 1 "); params.put("jdywc", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_NODE_FLOWSTATE_FINISH)); } } else { builder.append(" SELECT D.* FROM ( "); //查询处理人是我的 builder.append(" SELECT B.*,A.FLOWSTATE FROM WORKFLOW_NODE A,WORKFLOW_BASE B WHERE A.FLOWID = B.ID AND A.CURRENT_DEALER_ID = :userId "); builder.append(")D"); builder.append(" WHERE D.WFSTATE != :ysc "); } String status = params.get("status"); if(StringUtil.notEmpty(status)) { builder.append(" AND D.WFSTATE = :status "); } String orderName = params.get("orderName"); if(StringUtil.notEmpty(orderName)) { builder.append(" AND D.WFNAME LIKE :orderName "); params.put("orderName", "%"+orderName+"%"); } String hjName = params.get("hjName"); if(StringUtil.notEmpty(hjName)) { builder.append(" AND D.CURRENT_NODE_NAME LIKE :hjName "); params.put("hjName", "%"+hjName+"%"); } String orderCode = params.get("orderCode"); if(StringUtil.notEmpty(orderCode)) { builder.append(" AND D.ORDER_CODE LIKE :orderCode"); params.put("orderCode", "%"+orderCode+"%"); } String customerName = params.get("customerName"); if(StringUtil.notEmpty(customerName)) { builder.append(" AND D.CUSTOMER_NAME LIKE :customerName "); params.put("customerName", "%"+customerName+"%"); } String customer_id = params.get("customer_id"); if(StringUtil.notEmpty(customer_id)) { builder.append(" AND D.customer_id =:customer_id "); params.put("customer_id", customer_id); } String types = params.get("types"); if(StringUtil.notEmpty(types)) { String[] type = types.split(","); if(type.length==1) { builder.append(" AND D.BUSINESSTYPE = :businessType"); params.put("businessType", type[0]); } else { builder.append(" AND D.BUSINESSTYPE IN ("); for(int i=0; i result = baseDao.queryForList(builder.toString(),params); List resultList = new ArrayList(); List list = new ArrayList(); Map cacheMap = new HashMap(); if(null!=result && result.size()>0) { for(Map m : result) { String flowId = ConvertUtil.obj2StrBlank(m.get("ID")); if(cacheMap.containsKey(flowId)) { String flowState = ConvertUtil.obj2StrBlank(m.get("FLOWSTATE")); if(flowState.equals(Constants.WORKFLOW_NODE_FLOWSTATE_UNDISPOSE.toString()) || flowState.equals(Constants.WORKFLOW_NODE_FLOWSTATE_DOING.toString())) { cacheMap.put(flowId, m); if(!list.contains(flowId)) { list.add(flowId); } } } else { cacheMap.put(flowId, m); list.add(flowId); } } if(cacheMap.size()>0) { for(String str : list) { resultList.add(cacheMap.get(str)); } } } int infoCount = resultList.size(); int bin = (begin-1)* size ; int end = (begin-1)* size + size; if(end>infoCount){ end=infoCount; } PageInfo info = new PageInfo(); info.setDatas(resultList.subList(bin, end)); info.setRowNum(infoCount); return info; } else { builder.append( " ORDER BY D.CREATETIME DESC "); PageInfo info = baseDao.queryforSplitPageInfo(pageInfo, builder.toString(), params); return info; } } @Override public int queryMyOrderCount(Map params) { StringBuilder builder = new StringBuilder(); params.put("ysc", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_WFSTATE_DELETE)); /** * 查询逻辑 * 1.如果节点状态选择为全部,则查询节点表中处理人是我的,或者处理角色是我的并且没有分配处理人的, * 但查询出来的数据会有重复,因为一个节点我可以处理多次,这样查询出来会有重复的工单,需要过滤,如果同一个工单 有待处理,已处理 或者进行中,已处理,则显示待处理 或进行中,不显示已处理 (待处理和进行中是不会同时存在的) * 2.如果节点状态选择为待处理,则查询节点表中处理人是我的,或者处理角色是我的并且没有分配处理人的 (不需要过滤,因为一个工单待处理节点,只会有一个) * 3.如果节点状态选择为进行中,则查询节点表中处理人是我的 (不需要过滤,因为一个工单进行中节点,只会有一个) * 4.如果节点状态查询未已处理,则查询节点表中处理人是我的,需要过滤(因为一个节点一个人可以处理多次,通过节点表作为主表查询出来的工单会有重复) */ String flowstate = params.get("flowstate"); if(StringUtil.notEmpty(flowstate)) { if(flowstate.equals("1")) { builder.append(" SELECT DISTINCT D.* FROM ( "); //查询处理人是我的 builder.append(" SELECT B.ID,B.WFSTATE,B.CUSTOMER_ID,B.CURRENT_NODE_NAME,B.ORDER_CODE,B.CUSTOMER_NAME,B.BUSINESSTYPE,B.WFNAME FROM WORKFLOW_NODE A,WORKFLOW_BASE B WHERE A.FLOWID = B.ID AND A.CURRENT_DEALER_ID = :userId AND A.FLOWSTATE = :jddcl "); builder.append(") D"); builder.append(" WHERE 1 = 1 "); params.put("jddcl", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_NODE_FLOWSTATE_UNDISPOSE)); } else if(flowstate.equals("2")) { builder.append(" SELECT DISTINCT D.* FROM ( "); builder.append(" SELECT B.ID,B.WFSTATE,B.CUSTOMER_ID,B.CURRENT_NODE_NAME,B.ORDER_CODE,B.CUSTOMER_NAME,B.BUSINESSTYPE,B.WFNAME FROM WORKFLOW_NODE A,WORKFLOW_BASE B WHERE A.FLOWID = B.ID AND A.CURRENT_DEALER_ID = :userId AND A.FLOWSTATE = :jdjxz"); builder.append(")D"); builder.append(" WHERE 1 = 1"); params.put("jdjxz", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_NODE_FLOWSTATE_DOING)); }else { builder.append(" SELECT DISTINCT D.* FROM ( "); builder.append(" SELECT B.ID,B.WFSTATE,B.CUSTOMER_ID,B.CURRENT_NODE_NAME,B.ORDER_CODE,B.CUSTOMER_NAME,B.BUSINESSTYPE,B.WFNAME FROM WORKFLOW_NODE A,WORKFLOW_BASE B WHERE A.FLOWID = B.ID AND A.CURRENT_DEALER_ID = :userId AND A.FLOWSTATE = :jdywc "); builder.append(")D"); builder.append(" WHERE 1 = 1"); params.put("jdywc", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_NODE_FLOWSTATE_FINISH)); } } else { builder.append(" SELECT DISTINCT D.* FROM ( "); //查询处理人是我的 builder.append(" SELECT B.ID,B.WFSTATE,B.CUSTOMER_ID,B.CURRENT_NODE_NAME,B.ORDER_CODE,B.CUSTOMER_NAME,B.BUSINESSTYPE,B.WFNAME FROM WORKFLOW_NODE A,WORKFLOW_BASE B WHERE A.FLOWID = B.ID AND A.CURRENT_DEALER_ID = :userId "); builder.append(")D"); builder.append(" WHERE D.WFSTATE != :ysc "); } String status = params.get("status"); if(StringUtil.notEmpty(status)) { builder.append(" AND D.WFSTATE = :status "); params.put("status", status); } String orderName = params.get("orderName"); if(StringUtil.notEmpty(orderName)) { builder.append(" AND D.WFNAME LIKE :orderName "); params.put("orderName", "%"+orderName+"%"); } String customer_id = params.get("customer_id"); if(StringUtil.notEmpty(customer_id)) { builder.append(" AND D.customer_id =:customer_id "); params.put("customer_id", customer_id); } String hjName = params.get("hjName"); if(StringUtil.notEmpty(hjName)) { builder.append(" AND D.CURRENT_NODE_NAME LIKE :hjName "); params.put("hjName", "%"+hjName+"%"); } String orderCode = params.get("orderCode"); if(StringUtil.notEmpty(orderCode)) { builder.append(" AND D.ORDER_CODE LIKE :orderCode"); params.put("orderCode", "%"+orderCode+"%"); } String customerName = params.get("customerName"); if(StringUtil.notEmpty(customerName)) { builder.append(" AND D.CUSTOMER_NAME LIKE :customerName "); params.put("customerName", "%"+customerName+"%"); } String types = params.get("types"); if(StringUtil.notEmpty(types)) { String[] type = types.split(","); if(type.length==1) { builder.append(" AND D.BUSINESSTYPE = :businessType"); params.put("businessType", type[0]); } else { builder.append(" AND D.BUSINESSTYPE IN ("); for(int i=0; i params) { StringBuilder builder = new StringBuilder("SELECT COUNT(A.ID) FROM WORKFLOW_BASE A WHERE WFSTATE != :ysc "); params.put("ysc", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_WFSTATE_DELETE)); String orderName = params.get("orderName"); if(StringUtil.notEmpty(orderName)) { builder.append(" AND A.WFNAME LIKE :orderName "); params.put("orderName", "%"+orderName+"%"); } String create_name = params.get("create_name"); if(StringUtil.notEmpty(create_name)) { builder.append(" AND A.CREATERNAME LIKE :create_name "); params.put("create_name", "%"+create_name+"%"); } String create_time=params.get("create_time"); if(StringUtil.notEmpty(create_time)){ builder.append(" AND A.CREATETIME > :create_time "); params.put("create_time", create_time+"000000"); } String end_time=params.get("end_time"); if(StringUtil.notEmpty(end_time)){ builder.append(" AND A.CREATETIME < :end_time "); params.put("end_time", end_time+"235959"); } String jjr = params.get("jjr"); if(StringUtil.notEmpty(jjr)) { builder.append(" AND A.CURRENT_DEALER_NAME LIKE :jjr "); params.put("jjr", "%"+jjr+"%"); } String types = params.get("types"); if(StringUtil.notEmpty(types)) { String[] type = types.split(","); if(type.length==1) { builder.append(" AND A.BUSINESSTYPE = :businessType"); params.put("businessType", type[0]); } else { builder.append(" AND A.BUSINESSTYPE IN ("); for(int i=0; i= :beginTime "); params.put("beginTime", beginTime+"000000"); } String endTime = params.get("endTime"); if(StringUtil.notEmpty(endTime)) { builder.append(" AND A.CREATETIME <= :endTime "); params.put("endTime", endTime+"240000"); } return baseDao.queryForInteger(builder.toString(),params); } @Override public PageInfo ordersListData(PageInfo pageInfo, Map params) { StringBuilder builder = new StringBuilder("SELECT A.* FROM WORKFLOW_BASE A WHERE WFSTATE != :ysc "); params.put("ysc", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_WFSTATE_DELETE)); String orderName = params.get("orderName"); if(StringUtil.notEmpty(orderName)) { builder.append(" AND A.WFNAME LIKE :orderName "); params.put("orderName", "%"+orderName+"%"); } String create_name = params.get("create_name"); if(StringUtil.notEmpty(create_name)) { builder.append(" AND A.CREATERNAME LIKE :create_name "); params.put("create_name", "%"+create_name+"%"); } String create_time=params.get("create_time"); if(StringUtil.notEmpty(create_time)){ builder.append(" AND A.CREATETIME > :create_time "); params.put("create_time", create_time+"000000"); } String end_time=params.get("end_time"); if(StringUtil.notEmpty(end_time)){ builder.append(" AND A.CREATETIME < :end_time "); params.put("end_time", end_time+"235959"); } String jjr = params.get("jjr"); if(StringUtil.notEmpty(jjr)) { builder.append(" AND A.CURRENT_DEALER_NAME LIKE :jjr "); params.put("jjr", "%"+jjr+"%"); } String types = params.get("types"); if(StringUtil.notEmpty(types)) { String[] type = types.split(","); if(type.length==1) { builder.append(" AND A.BUSINESSTYPE = :businessType"); params.put("businessType", type[0]); } else { builder.append(" AND A.BUSINESSTYPE IN ("); for(int i=0; i= :beginTime "); params.put("beginTime", beginTime+"000000"); } String endTime = params.get("endTime"); if(StringUtil.notEmpty(endTime)) { builder.append(" AND A.CREATETIME <= :endTime "); params.put("endTime", endTime+"240000"); } builder.append(" ORDER BY A.CREATETIME DESC "); return baseDao.queryforSplitPageInfo(pageInfo, builder.toString(), params); } @Override public Map queryOrderCountByCate(HttpServletRequest request, String type) { String userId = WebUtil.getLoginedUserId(request); Map paramMap = new HashMap(); StringBuilder builder = new StringBuilder(); paramMap.put("ysc", Constants.WORKFLOW_BASE_WFSTATE_DELETE); paramMap.put("userId", userId); builder.append(" SELECT DISTINCT D.* FROM ( "); //查询处理人是我的 builder.append(" SELECT B.ID,A.FLOWSTATE,B.WFSTATE FROM WORKFLOW_NODE A,WORKFLOW_BASE B WHERE A.FLOWID = B.ID AND A.CURRENT_DEALER_ID = :userId "); if(StringUtil.notEmpty(type)) { builder.append(" AND B.BUSINESSTYPE = :type "); paramMap.put("type", type); } builder.append(")D"); builder.append(" WHERE D.WFSTATE != :ysc "); StringBuilder newBuild = new StringBuilder(); newBuild.append("SELECT COUNT(*) AS NUM,E.FLOWSTATE FROM ( "); newBuild.append(builder.toString()); newBuild.append(") E GROUP BY E.FLOWSTATE ORDER BY E.FLOWSTATE"); List list = baseDao.queryForList(newBuild.toString(),paramMap); Map resultMap = new HashMap(); for(Map m : list) { resultMap.put("state"+m.get("FLOWSTATE"), m.get("NUM")); } int totalNum = queryAllOrderCount(request,type); paramMap.put("types", type); int orderPool = myorderpoolCount(paramMap); resultMap.put("totalOrder", totalNum); resultMap.put("orderPool", orderPool); return resultMap; } @Override public int queryAllOrderCount(HttpServletRequest request,String type) { String userId = WebUtil.getLoginedUserId(request); Map groupMap = WebUtil.getLoginUser(request).getGroupMap(); Map paramMap = new HashMap(); StringBuilder builder = new StringBuilder(); paramMap.put("ysc", Constants.WORKFLOW_BASE_WFSTATE_DELETE); paramMap.put("userId", userId); builder.append(" SELECT DISTINCT D.* FROM ( "); //查询处理人是我的 builder.append(" SELECT B.ID,B.WFSTATE FROM WORKFLOW_NODE A,WORKFLOW_BASE B WHERE A.FLOWID = B.ID AND A.CURRENT_DEALER_ID = :userId "); if(StringUtil.notEmpty(type)) { builder.append(" AND B.BUSINESSTYPE = :type "); paramMap.put("type", type); } builder.append(")D"); builder.append(" WHERE D.WFSTATE != :ysc "); StringBuilder newBuild = new StringBuilder(); newBuild.append("SELECT COUNT(*) AS NUM FROM ( "); newBuild.append(builder.toString()); newBuild.append(") E"); int count = baseDao.queryForInteger(newBuild.toString(),paramMap); System.out.println(count); return count; } @Override public int myorderpoolCount(Map params) { /** * 查询我的工单池规则 * 如果是一二三线或者驻场工程师桌面,则直接查询工单表中 所属分组是当前工程师所在组的 * 如果是项目服务台,则直接查询工单表中所属分组是当前工程师所在组的 (同上) * 如果是客户服务台,查询我的工单池 则查询工单表中分组是 (查询该客户下所有的项目的服务台分组) * 如果是总服务台,则查询所有客户下(加盟商下所有项目的服务台分组) */ String sql = new String(); params.put("wfstate", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_WFSTATE_DELETE)); sql = "SELECT COUNT(D.ID) FROM WORKFLOW_BASE D,((SELECT DISTINCT B.JSBH FROM AC_USER_REF_ROLE B WHERE B.YHBH = :userId) UNION ALL (SELECT DISTINCT A.GROUP_ID AS JSBH FROM AC_ROLE_GROUP_USER A WHERE A.USER_ID = :userId AND A.STATE = 1) ) C WHERE D.CURRENT_DEAL_ROLEIDA = C.JSBH AND D.WFSTATE != :wfstate AND (D.CURRENT_DEALER_ID IS NULL OR D.CURRENT_DEALER_ID = '' ) "; if(StringUtil.notEmpty(sql)) { StringBuilder builder = new StringBuilder(sql); String status = params.get("status"); if(StringUtil.notEmpty(status)) { builder.append(" AND D.WFSTATE = :status "); } String orderName = params.get("orderName"); if(StringUtil.notEmpty(orderName)) { builder.append(" AND D.WFNAME LIKE :orderName "); params.put("orderName", "%"+orderName+"%"); } String orderCode = params.get("orderCode"); if(StringUtil.notEmpty(orderCode)) { builder.append(" AND D.ORDER_CODE LIKE :orderCode"); params.put("orderCode", "%"+orderCode+"%"); } String customerName = params.get("customerName"); if(StringUtil.notEmpty(customerName)) { builder.append(" AND D.CUSTOMER_NAME LIKE :customerName "); params.put("customerName", "%"+customerName+"%"); } String customer_id = params.get("customer_id"); if(StringUtil.notEmpty(customer_id)) { builder.append(" AND D.customer_id =:customer_id "); params.put("customer_id", customer_id); } String types = params.get("types"); if(StringUtil.notEmpty(types)) { String[] type = types.split(","); if(type.length==1) { builder.append(" AND D.BUSINESSTYPE = :businessType"); params.put("businessType", type[0]); } else { builder.append(" AND D.BUSINESSTYPE IN ("); for(int i=0; i params) { /** * 查询我的工单池规则 * 如果是一二三线或者驻场工程师桌面,则直接查询工单表中 所属分组是当前工程师所在组的 * 如果是项目服务台,则直接查询工单表中所属分组是当前工程师所在组的 (同上) * 如果是客户服务台,查询我的工单池 则查询工单表中分组是 (查询该客户下所有的项目的服务台分组) * 如果是总服务台,则查询所有客户下(加盟商下所有项目的服务台分组) */ String sql = new String(); params.put("wfstate", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_WFSTATE_DELETE)); sql = "SELECT D.* FROM WORKFLOW_BASE D,((SELECT DISTINCT B.JSBH FROM AC_USER_REF_ROLE B WHERE B.YHBH = :userId) UNION ALL (SELECT DISTINCT A.GROUP_ID AS JSBH FROM AC_ROLE_GROUP_USER A WHERE A.USER_ID = :userId AND A.STATE = 1)) C WHERE D.CURRENT_DEAL_ROLEIDA = C.JSBH AND D.WFSTATE != :wfstate AND (D.CURRENT_DEALER_ID IS NULL OR D.CURRENT_DEALER_ID = '' ) "; if(StringUtil.notEmpty(sql)) { StringBuilder builder = new StringBuilder(sql); String status = params.get("status"); if(StringUtil.notEmpty(status)) { builder.append(" AND D.WFSTATE = :status "); } String orderName = params.get("orderName"); if(StringUtil.notEmpty(orderName)) { builder.append(" AND D.WFNAME LIKE :orderName "); params.put("orderName", "%"+orderName+"%"); } String orderCode = params.get("orderCode"); if(StringUtil.notEmpty(orderCode)) { builder.append(" AND D.ORDER_CODE LIKE :orderCode"); params.put("orderCode", "%"+orderCode+"%"); } String customerName = params.get("customerName"); if(StringUtil.notEmpty(customerName)) { builder.append(" AND D.CUSTOMER_NAME LIKE :customerName "); params.put("customerName", "%"+customerName+"%"); } String customer_id = params.get("customer_id"); if(StringUtil.notEmpty(customer_id)) { builder.append(" AND D.customer_id =:customer_id "); params.put("customer_id", customer_id); } String types = params.get("types"); if(StringUtil.notEmpty(types)) { String[] type = types.split(","); if(type.length==1) { builder.append(" AND D.BUSINESSTYPE = :businessType"); params.put("businessType", type[0]); } else { builder.append(" AND D.BUSINESSTYPE IN ("); for(int i=0; i params) { /** * 查询我的工单池规则 * 如果是一二三线或者驻场工程师桌面,则直接查询工单表中 所属分组是当前工程师所在组的 * 如果是项目服务台,则直接查询工单表中所属分组是当前工程师所在组的 (同上) * 如果是客户服务台,查询我的工单池 则查询工单表中分组是 (查询该客户下所有的项目的服务台分组) * 如果是总服务台,则查询所有客户下(加盟商下所有项目的服务台分组) */ StringBuilder sql = new StringBuilder(); params.put("wfstate",ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_WFSTATE_DELETE) ); sql.append("SELECT COUNT(D.ID) FROM WORKFLOW_BASE D,((SELECT B.ID FROM AC_ROLE B WHERE B.STATE =1) UNION ALL (SELECT DISTINCT A.ID FROM AC_ROLE_GROUP A WHERE A.STATE = 1) "); sql.append(" ) C WHERE D.CURRENT_DEAL_ROLEIDA = C.ID AND D.WFSTATE != :wfstate AND (D.CURRENT_DEALER_ID IS NULL OR D.CURRENT_DEALER_ID = '' ) "); StringBuilder builder = new StringBuilder(sql); String status = params.get("status"); if(StringUtil.notEmpty(status)) { builder.append(" AND D.WFSTATE = :status "); } String orderName = params.get("orderName"); if(StringUtil.notEmpty(orderName)) { builder.append(" AND D.WFNAME LIKE :orderName "); params.put("orderName", "%"+orderName+"%"); } String orderCode = params.get("orderCode"); if(StringUtil.notEmpty(orderCode)) { builder.append(" AND D.ORDER_CODE LIKE :orderCode"); params.put("orderCode", "%"+orderCode+"%"); } String customerName = params.get("customerName"); if(StringUtil.notEmpty(customerName)) { builder.append(" AND D.CUSTOMER_NAME LIKE :customerName "); params.put("customerName", "%"+customerName+"%"); } String customer_id = params.get("customer_id"); if(StringUtil.notEmpty(customer_id)) { builder.append(" AND D.customer_id =:customer_id "); params.put("customer_id", customer_id); } String types = params.get("types"); if(StringUtil.notEmpty(types)) { String[] type = types.split(","); if(type.length==1) { builder.append(" AND D.BUSINESSTYPE = :businessType"); params.put("businessType", type[0]); } else { builder.append(" AND D.BUSINESSTYPE IN ("); for(int i=0; i params) { /** * 查询我的工单池规则 * 如果是项目服务台,则直接查询工单表 * 如果是客户服务台,查询我的工单池 则查询工单表中分组是 (查询该客户下所有的项目的分组) * 如果是总服务台,则查询所有客户下(加盟商下所有项目的分组) */ StringBuilder sql = new StringBuilder(); params.put("wfstate", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_WFSTATE_DELETE)); sql.append("SELECT D.* FROM WORKFLOW_BASE D,((SELECT B.ID FROM AC_ROLE B WHERE B.STATE =1) UNION ALL (SELECT DISTINCT A.ID FROM AC_ROLE_GROUP A WHERE A.STATE = 1) "); sql.append(" ) C WHERE D.CURRENT_DEAL_ROLEIDA = C.ID AND D.WFSTATE != :wfstate AND (D.CURRENT_DEALER_ID IS NULL OR D.CURRENT_DEALER_ID = '' ) "); StringBuilder builder = new StringBuilder(sql); String status = params.get("status"); if(StringUtil.notEmpty(status)) { builder.append(" AND D.WFSTATE = :status "); } String orderName = params.get("orderName"); if(StringUtil.notEmpty(orderName)) { builder.append(" AND D.WFNAME LIKE :orderName "); params.put("orderName", "%"+orderName+"%"); } String customerName = params.get("customerName"); if(StringUtil.notEmpty(customerName)) { builder.append(" AND D.CUSTOMER_NAME LIKE :customerName "); params.put("customerName", "%"+customerName+"%"); } String customer_id = params.get("customer_id"); if(StringUtil.notEmpty(customer_id)) { builder.append(" AND D.customer_id =:customer_id "); params.put("customer_id", customer_id); } String orderCode = params.get("orderCode"); if(StringUtil.notEmpty(orderCode)) { builder.append(" AND D.ORDER_CODE LIKE :orderCode"); params.put("orderCode", "%"+orderCode+"%"); } String types = params.get("types"); if(StringUtil.notEmpty(types)) { String[] type = types.split(","); if(type.length==1) { builder.append(" AND D.BUSINESSTYPE = :businessType"); params.put("businessType", type[0]); } else { builder.append(" AND D.BUSINESSTYPE IN ("); for(int i=0; i params){ StringBuilder sql = new StringBuilder(); sql.append(" select count(id) from workflow_base where wfstate<>:defstate and businesstype=:flowtype "); params.put("defstate", Constants.WORKFLOW_BASE_WFSTATE_DELETE.toString()); if(params.get("flag").equals("jxz")){ sql.append(" and wfstate=:fstate "); params.put("fstate",Constants.WORKFLOW_BASE_WFSTATE_DOING.toString()); }else if(params.get("flag").equals("ywc")){ sql.append(" and wfstate=:fstate "); params.put("fstate",Constants.WORKFLOW_BASE_WFSTATE_FINISH.toString()); }else if(params.get("flag").equals("ygb")){ sql.append(" and wfstate=:fstate "); params.put("fstate",Constants.WORKFLOW_BASE_WFSTATE_CLOSE.toString()); }else if(params.get("flag").equals("ypj")){ sql.append(" and wfstate=:fstate "); params.put("fstate",Constants.WORKFLOW_BASE_WFSTATE_EVALUATE.toString()); }else if(params.get("flag").equals("ygq")){ sql.append(" and wfstate=:fstate "); params.put("fstate",Constants.WORKFLOW_BASE_WFSTATE_UP.toString()); } return baseDao.queryForInteger(sql.toString(),params); } @Override public int getDealerIsMy(String flowId, String loginedUserId) { Map params = new HashMap(); params.put("flowId", flowId); params.put("userId", loginedUserId); int count = 0; WORKFLOW_BASE flow = new WORKFLOW_BASE(flowId).getInstanceById(); WORKFLOW_NODE node = new WORKFLOW_NODE(flow.getCurrent_node_id()).getInstanceById(); if(StringUtil.isEmpty(node.getCurrent_dealer_id())&&!StringUtil.isEmpty(node.getCurrent_deal_roleida())){ String sql = "SELECT COUNT(ID) FROM AC_USER_REF_ROLE WHERE YHBH = :userId AND JSBH = :jsbh "; params.put("jsbh", node.getCurrent_deal_roleida()); count = baseDao.queryForInteger(sql, params); if(count == 0){ sql = "SELECT COUNT(ID) FROM AC_ROLE_GROUP_USER WHERE USER_ID = :userId AND GROUP_ID = :jsbh "; count = baseDao.queryForInteger(sql, params); } }else{ if(StringUtil.isEmpty(node.getSame_node_key())){ if(node.getCurrent_dealer_id().equals(loginedUserId)&&node.getFlowstate() != Constants.WORKFLOW_NODE_FLOWSTATE_FINISH){ count = 1; } }else{ String sql = "SELECT COUNT(ID) FROM WORKFLOW_NODE WHERE SAME_NODE_KEY = :same_node_key AND FLOWID = :flowId AND CURRENT_DEALER_ID = :userId AND FLOWSTATE <> :flowstate "; params.put("same_node_key", node.getSame_node_key()); params.put("flowstate", Constants.WORKFLOW_NODE_FLOWSTATE_FINISH); count = baseDao.queryForInteger(sql, params); } } return count; } }