package cn.ksource.web.facade.wechat.ewyw; 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 com.lowagie.tools.handout_pdf; import cn.ksource.beans.SC_WORKFLOW_CI_HEALTH; import cn.ksource.beans.WORKFLOW_BASE; import cn.ksource.beans.WORKFLOW_NODE; import cn.ksource.core.dao.BaseDao; import cn.ksource.core.dao.SqlParameter; import cn.ksource.core.util.ConvertUtil; import cn.ksource.core.util.DateUtil; import cn.ksource.core.util.JsonUtil; import cn.ksource.core.util.StringUtil; import cn.ksource.core.web.SysInfoMsg; import cn.ksource.core.web.WebUtil; import cn.ksource.core.workflow.NodeAnswerEntity; import cn.ksource.core.workflow.NodeFinishEntity; import cn.ksource.core.workflow.WorkflowCoreService; import cn.ksource.web.Constants; import cn.ksource.web.entity.WorkFlowSupportEntity; import cn.ksource.web.facade.health.HealthFacade; import cn.ksource.web.service.workFlowSupport.WorkFlowSupportService; @Service public class EwHealthFacadeImpl implements EwHealthFacade { @Autowired private BaseDao baseDao; @Autowired private WorkflowCoreService workflowCoreService; @Autowired private HealthFacade healthFacade; @Autowired private WorkFlowSupportService workFlowSupportService; @Override public int ewMyHealthCount(HttpServletRequest request) { Map supportMap = getMyHealthListSql(request); String sql = "select count(*) from ( " + supportMap.get("sql").toString() + " ) t"; return baseDao.queryForInteger(sql,(Map)supportMap.get("param")); } @Override public List ewMyHealthData(HttpServletRequest request) { Map supportMap = getMyHealthListSql(request); List list = baseDao.queryforSplitPage(request, supportMap.get("sql").toString(), (Map)supportMap.get("param")); return list; } /** * 我的工单列表 * @param request * @return */ private Map getMyHealthListSql(HttpServletRequest request){ String userId = WebUtil.getEngineerUserId(request); String flowState = request.getParameter("status"); String nodeState = request.getParameter("flowstate"); String customerId = request.getParameter("customerId"); String subCustomerId = request.getParameter("subCustomerId"); String begintime = request.getParameter("begintime"); String endtime = request.getParameter("endtime"); Map paramMap = new HashMap(); paramMap.put("userId", userId); paramMap.put("nodeState", nodeState); paramMap.put("flowState", flowState); paramMap.put("businessType", Constants.WORKFLOW_BASE_BUSINESS_TYPE_CI_HEALTH); paramMap.put("customerId", customerId); paramMap.put("subCustomerId", subCustomerId); StringBuilder builder = new StringBuilder(); builder.append(" select n.NODESTATE FLOWSTATE,b.BUSINESS_ID,n.*,b.WFNAME,b.CREATERNAME,b.CREATETIME,b.CURRENT_NODE_NAME, "); builder.append(" b.BUSINESSTYPE,b.CUSTOMER_NAME,b.SUB_CUSTOMER_NAME,B.WFSTATE, "); builder.append(" t.PLAN_EXE_DATE,r.PLAN_TIME,r.ORDER_CODE,r.ID ORDERID,r.CI_RUN_NOTE "); builder.append(" from SC_WORKFLOW_CI_HEALTH r "); builder.append(" inner join WORKFLOW_BASE B on r.FLOW_ID = b.ID "); builder.append(" inner join CI_HEALTH_PLAN_TIMER t on r.ID = t.FLOW_ID "); builder.append(" inner join "); builder.append(" ( "); builder.append(" select * from ( "); builder.append(" select CREATETIME NODETIME,ID NODEID,FLOWSTATE NODESTATE,FLOWID from WORKFLOW_NODE "); builder.append(" where CURRENT_DEALER_ID = :userId "); //环节状态 if(StringUtil.isNotBlank(nodeState)){ if(!nodeState.equals("end") && !nodeState.equals("close")){ builder.append("and FLOWSTATE =:nodeState "); } } builder.append(" order by FLOWSTATE asc "); builder.append(" ) t group by FLOWID "); builder.append(" ) n "); builder.append(" on b.ID = n.FLOWID "); builder.append(" where 1=1 "); //工单类型 builder.append(" AND b.BUSINESSTYPE = :businessType"); //工单状态 if(StringUtil.isNotBlank(nodeState)){ if(nodeState.equals("end")) { builder.append(" AND (b.WFSTATE = :status1 OR b.WFSTATE = :status2)"); paramMap.put("status1", Constants.WORKFLOW_BASE_WFSTATE_EVALUATE); paramMap.put("status2", Constants.WORKFLOW_BASE_WFSTATE_FINISH); }else if(nodeState.equals("close")){ builder.append(" AND b.WFSTATE = :status "); paramMap.put("status", Constants.WORKFLOW_BASE_WFSTATE_CLOSE); } } //客户 if(StringUtil.isNotBlank(customerId)) { builder.append(" AND b.CUSTOMER_ID = :customerId "); } //下属单位 if(StringUtil.isNotBlank(subCustomerId)) { builder.append(" AND b.SUB_CUSTOMER_ID = :subCustomerId "); } if(StringUtil.notEmpty(begintime)) { builder.append(" AND b.CREATETIME >= :begintime "); paramMap.put("begintime", begintime+"000000"); } if(StringUtil.notEmpty(endtime)) { builder.append(" AND b.CREATETIME <= :endtime "); paramMap.put("endtime", endtime+"240000"); } builder.append(" order by b.CREATETIME desc,t.PLAN_EXE_DATE desc "); Map supportMap = new HashMap(); supportMap.put("sql", builder.toString()); supportMap.put("param", paramMap); return supportMap; } @Override public String doOrderConfirm(HttpServletRequest request) { String flowId = request.getParameter("flowId"); String nodeId = request.getParameter("nodeId"); Map user = WebUtil.getEngineerMsg(request); String userId = ConvertUtil.obj2StrBlank(user.get("ID")); String userName = ConvertUtil.obj2StrBlank(user.get("ZSXM")); NodeAnswerEntity answerEntity = new NodeAnswerEntity(); answerEntity.setUser_id(userId); answerEntity.setUser_name(userName); WORKFLOW_BASE base = new WORKFLOW_BASE(flowId).getInstanceById(); //工单响应 boolean result = workflowCoreService.answerNode(base, new WORKFLOW_NODE(nodeId).getInstanceById(), answerEntity); if(!result) { return "2"; } return "1"; } @Override public Map queryHealthCalandar(HttpServletRequest request) { String year = request.getParameter("year"); String month = request.getParameter("month"); String queryType = request.getParameter("queryType"); if(!StringUtil.notEmpty(year)) { year = DateUtil.getToday("yyyy"); } if(!StringUtil.notEmpty(month)) { month = DateUtil.getToday("MM"); } String time = new String(); long nMonth = DateUtil.getCurrentDate6(); String yearMonth = year+month; if(String.valueOf(nMonth).equals(yearMonth)) { time = DateUtil.getToday("yyyyMMdd"); } else { time = yearMonth+"01"; } //所在周的前一个周日和后一个周六 Long[] sunSat = DateUtil.getSundaySaturday(Long.valueOf(time)); List weekDays = DateUtil.getBetweenTwoDateCycleList(String.valueOf(sunSat[0]), String.valueOf(sunSat[1]), 2, 1, "yyyyMMdd", "yyyyMMdd"); //查询该月的第一天和最后一天 String[] dates = StringUtil.queryFirstLastDate(year,month); //查询第一天属于周几 long firstDay = ConvertUtil.obj2Long(dates[0].replaceAll("-", "")); long endDay = ConvertUtil.obj2Long(dates[1].replaceAll("-", "")); int week = DateUtil.getDayOfWeek(firstDay); List allDate = new ArrayList(); for(int i=week; i>0; i--) { allDate.add(ConvertUtil.obj2StrBlank(DateUtil.getDateAdd(firstDay, -i, 8))); } List list = new ArrayList(); list = DateUtil.getBetweenTwoDateList(ConvertUtil.obj2StrBlank(firstDay), ConvertUtil.obj2StrBlank(endDay), 2, "yyyyMMdd"); for(String str : list) { allDate.add(str.replaceAll("-", "")); } int lastSize = 42-allDate.size(); for(int i=1; i<=lastSize; i++) { allDate.add(ConvertUtil.obj2StrBlank(DateUtil.getDateAdd(endDay, i, 8))); } List orderList = new ArrayList(); List planList = new ArrayList(); Map orderSetMap = new HashMap(); Map planSetMap = new HashMap(); Map params = new HashMap(); String selMonth = year+month; String bustype = "7"; String userId = WebUtil.getEngineerUserId(request); params.put("selMonth", selMonth); if(StringUtil.isNotBlank(queryType)){ params.put("queryType", queryType); } params.put("bustype", bustype); params.put("userId", userId); Map result = healthFacade.queryHealthDate(params); orderList=(List)result.get("orderDatas"); planList=(List)result.get("planDatas"); if(orderList!=null&&orderList.size()>0){ for(Map map : orderList) { orderSetMap.put(ConvertUtil.obj2StrBlank(map.get("m_date")).replace("-", ""), "1"); } } if(planList!=null&&planList.size()>0){ for(Map map : planList) { planSetMap.put(ConvertUtil.obj2StrBlank(map.get("m_date")).replace("-", ""), "1"); } } List resultList = new ArrayList(); List weekList = new ArrayList(); String today = DateUtil.getToday("yyyyMMdd"); for(String dateStr : allDate) { if(orderSetMap.containsKey(dateStr)) { Map map = new HashMap(); //判断当天是否有工单 map.put("hasOrder", true); map.put("dateStr", dateStr); //判断是不是当月,如果不是当月当月颜色不一致 String nowMonth = DateUtil.format("MM", dateStr); if(month.equals(nowMonth)) { map.put("nowMonth", 1); } else { map.put("nowMonth", 2); } //展示的日期(天) map.put("showMonth", DateUtil.format("dd", dateStr)); //查询是否是当天之前 if(dateStr.equals(today)) { map.put("isTody", "1"); } else { if(ConvertUtil.obj2Long(today)>ConvertUtil.obj2Long(dateStr)) { map.put("isTody", "0"); } else { if(planSetMap.containsKey(dateStr)){ map.put("isTody", "2"); } } } if(weekDays.contains(dateStr)) { weekList.add(map); } resultList.add(map); } else { Map map = new HashMap(); map.put("hasOrder", false); String nowMonth = DateUtil.format("MM", dateStr); if(month.equals(nowMonth)) { map.put("nowMonth", 1); } else { map.put("nowMonth", 2); } map.put("showMonth", DateUtil.format("dd", dateStr)); if(dateStr.equals(today)) { map.put("isTody", "1"); }else { if(ConvertUtil.obj2Long(today)>ConvertUtil.obj2Long(dateStr)) { map.put("isTody", "0"); } else { if(planSetMap.containsKey(dateStr)){ map.put("isTody", "2"); } } } resultList.add(map); if(weekDays.contains(dateStr)) { weekList.add(map); } } } Map resultMap = new HashMap(); resultMap.put("monthDays", resultList); resultMap.put("weekDays", weekList); return resultMap; } @Override public int ewHealthCount(HttpServletRequest request) { Map supportMap = getAllHealthSql(request); String sql = "select count(*) from ( " + supportMap.get("sql").toString() + " ) t"; return baseDao.queryForInteger(sql,(Map)supportMap.get("param")); } @Override public List ewHealthData(HttpServletRequest request) { Map supportMap = getAllHealthSql(request); List list = baseDao.queryforSplitPage(request, supportMap.get("sql").toString(), (Map)supportMap.get("param")); return list; } /** * 工单列表 * @param request * @return */ private Map getAllHealthSql(HttpServletRequest request){ String flowState = request.getParameter("flowstate"); String customerId = request.getParameter("customerId"); String subCustomerId = request.getParameter("subCustomerId"); String orderCode = request.getParameter("orderCode"); String nodeTemplateId = request.getParameter("node"); String begintime = request.getParameter("begintime"); String endtime = request.getParameter("endtime"); Map paramMap = new HashMap(); paramMap.put("flowState", flowState); paramMap.put("customerId", customerId); paramMap.put("subCustomerId", subCustomerId); paramMap.put("nodeTemplateId", nodeTemplateId); paramMap.put("orderCode", "%"+orderCode+"%"); paramMap.put("businessType", Constants.WORKFLOW_BASE_BUSINESS_TYPE_CI_HEALTH); StringBuilder builder = new StringBuilder(); builder.append(" select b.PROJECT_NAME,b.BUSINESS_ID,b.ID FLOWID,b.WFNAME,b.CREATERNAME,b.CREATETIME,b.CURRENT_NODE_NAME,b.BUSINESSTYPE, "); builder.append(" t.PLAN_EXE_DATE,r.ORDER_CODE,r.ID ORDERID,r.CI_RUN_NOTE,b.CUSTOMER_NAME,b.SUB_CUSTOMER_NAME,B.WFSTATE "); builder.append(" from SC_WORKFLOW_CI_HEALTH r "); builder.append(" inner join WORKFLOW_BASE b on r.FLOW_ID = b.ID "); builder.append(" inner join CI_HEALTH_PLAN_TIMER t on r.ID = t.FLOW_ID "); if(StringUtil.isNotBlank(flowState)){ if(flowState.equals("11")){ builder.append(" inner join WORKFLOW_NODE N on b.CURRENT_NODE_ID = n.ID "); builder.append(" AND N.FLOWSTATE = 1 AND N.CURRENT_DEALER_ID IS NOT NULL "); } } //工单类型 builder.append(" AND b.BUSINESSTYPE = :businessType"); if(StringUtil.isNotBlank(nodeTemplateId)){ builder.append(" and n.NODE_TEMPLATE_ID IS NOT NULL and n.NODE_TEMPLATE_ID =:nodeTemplateId and b.WFSTATE = 1 "); } //客户 if(StringUtil.isNotBlank(customerId)) { builder.append(" AND b.CUSTOMER_ID = :customerId "); } //下属单位 if(StringUtil.isNotBlank(subCustomerId)) { builder.append(" AND b.SUB_CUSTOMER_ID = :subCustomerId "); } //工单状态 if(StringUtil.isNotBlank(flowState) && !flowState.equals("11")){ builder.append(" AND b.WFSTATE = :flowState "); } if(StringUtil.notEmpty(begintime)) { builder.append(" AND b.CREATETIME >= :begintime "); paramMap.put("begintime", begintime+"000000"); } if(StringUtil.notEmpty(endtime)) { builder.append(" AND b.CREATETIME <= :endtime "); paramMap.put("endtime", endtime+"240000"); } builder.append(" order by b.CREATETIME desc,t.PLAN_EXE_DATE desc "); Map supportMap = new HashMap(); supportMap.put("sql",builder); supportMap.put("param", paramMap); return supportMap; } @Override public List queryDevices(String flowId) { String sqlString="SELECT C.* FROM SC_WORKFLOW_CI_HEALTH A,SC_WORKFLOW_CI_HEALTH_CIDETAIL B,CMDB_CI_BASE C WHERE A.FLOW_ID=:flowId AND B.ORDER_ID=A.ID AND C.ID=B.CI_ID"; return baseDao.queryForList(sqlString, new SqlParameter("flowId",flowId)); } @Override public Map doDispatch(SC_WORKFLOW_CI_HEALTH health,Map param,HttpServletRequest request) { String orderId = param.get("orderId"); String flowId = param.get("flowId"); String nodeId = param.get("nodeId"); String flowNote = param.get("flowNote"); String executorIds = param.get("executorIds"); String executorNames = param.get("executorNames"); String main_executorId = param.get("main_executorId"); Map user = WebUtil.getWywEngineerLoginUser(request); String[] ciIdAry = request.getParameterValues("ciId"); String items = request.getParameter("items"); List itemlist=JsonUtil.json2List(items); //更新基本信息 health.setId(orderId).update(); //添加巡检设备和指标(edit by peikezhan 2016.07.14) //addPatrolCi(orderId,ciIdAry,itemlist); //设定执行人 List userList = new ArrayList(); String[] executorIdAry = executorIds.split(","); String[] executorNameAry = executorNames.split(","); for(int i=0;i0){ ArrayList paramList = new ArrayList(); ArrayList paramList_item = new ArrayList(); for(int i=0;i itemList = baseDao.queryForList(itemSql.toString(),new SqlParameter().addValue("ciId", ciIdAry[i]));*/ if(itemList!=null&&itemList.size()>0){ Map map=(Map)itemList.get(i); String itemString=map.get("itemId"); if(!StringUtil.isEmpty(itemString)){ String items[]=itemString.split("-"); for(int k=0;k commonList = JsonUtil.json2List(commonJsonList); List paramList = new ArrayList(); if(commonList!=null&&commonList.size()>0){ for(Map common:commonList){ SqlParameter param = new SqlParameter(); param.addValue("result", common.get("result")) .addValue("commonId", common.get("commonId")) .addValue("note", common.get("note")); paramList.add(param); } } String sql = " update CI_HEALTH_PATROL_COMMON_RECORD set RESULT_TYPE=:result,NOTE=:note " + " where ID=:commonId "; baseDao.executeBatch(sql,paramList); } @Override public SysInfoMsg doEndHealthFlow(HttpServletRequest request) { String orderId = ConvertUtil.obj2StrBlank(request.getParameter("orderId")); String flowId = ConvertUtil.obj2StrBlank(request.getParameter("flowId")); String nodeId = ConvertUtil.obj2StrBlank(request.getParameter("nodeId")); String note = ConvertUtil.obj2StrBlank(request.getParameter("flowNote")); Map user = WebUtil.getWywEngineerLoginUser(request); String userName = user.get("ZSXM").toString(); String userId = user.get("Id").toString(); //保存概况 StringBuilder sql = getStatisSql(); List list = baseDao.queryForList(sql.toString(),new SqlParameter("orderId",orderId)); if(list!=null&&list.size()>0){ List paramList = new ArrayList(); for(Map map:list){ SqlParameter param = new SqlParameter(); param.addValue("id", StringUtil.getUUID()) .addValue("orderId", orderId) .addValue("thirdid", map.get("thirdid").toString()) .addValue("totalnum", map.get("totalnum").toString()) .addValue("realnum", map.get("realnum").toString()) .addValue("normalnum", map.get("normalnum").toString()) .addValue("warnnum", map.get("warnnum").toString()) .addValue("errornum", map.get("errornum").toString()); paramList.add(param); } sql.setLength(0); sql.append(" insert into SC_WORKFLOW_CI_HEALTH_CATEGORY "); sql.append(" (ID,BUS_ID,LV3_CATE_ID,TOTAL_NUM,TRUE_NUM,NORMAL_NUM,ALERT_NUM,ERROR_NUM) "); sql.append(" values "); sql.append(" (:id,:orderId,:thirdid,:totalnum,:realnum,:normalnum,:warnnum,:errornum) "); baseDao.executeBatch(sql.toString(), paramList); } //环节流转 WorkFlowSupportEntity support = new WorkFlowSupportEntity(); support.setFlowId(flowId); support.setNodeId(nodeId); support.setNote(note); support.setUserName(userName); support.setUserId(userId); support.setWorkFlowType(Constants.WORKFLOW_BASE_BUSINESS_TYPE_CI_HEALTH); support.setFlowEndflag(true); SysInfoMsg msg = workFlowSupportService.doOrderFlow(support); return msg; } /** * 获取统计sql * @return */ private StringBuilder getStatisSql(){ StringBuilder builder = new StringBuilder(); builder.append(" "); builder.append(" select m_total.LV3_ID thirdid,IFNULL(m_total.totalnum,0) totalnum, "); builder.append(" IFNULL(m_real.realnum,0) realnum, "); builder.append(" IFNULL(m_normal.normalnum,0) normalnum, "); builder.append(" IFNULL(m_warn.warnnum,0) warnnum, "); builder.append(" IFNULL(m_error.errornum,0) errornum "); builder.append(" from "); builder.append(" ( "); builder.append(" select count(*) totalnum,b.LV3_ID from SC_WORKFLOW_CI_HEALTH_CIDETAIL d "); builder.append(" inner join cmdb_ci_base b "); builder.append(" on d.CI_ID = b.ID "); builder.append(" where d.ORDER_ID = :orderId "); builder.append(" group by b.LV3_ID "); builder.append(" ) m_total left join "); builder.append(" ( "); builder.append(" select count(*) realnum,b.LV3_ID from SC_WORKFLOW_CI_HEALTH_CIDETAIL d "); builder.append(" inner join cmdb_ci_base b "); builder.append(" on d.CI_ID = b.ID "); builder.append(" where d.ORDER_ID = :orderId "); builder.append(" and d.DEAL_STATE=1 "); builder.append(" group by b.LV3_ID "); builder.append(" ) m_real on m_total.LV3_ID = m_real.LV3_ID "); builder.append(" left join "); builder.append(" ( "); builder.append(" select count(*) normalnum,b.LV3_ID from SC_WORKFLOW_CI_HEALTH_CIDETAIL d "); builder.append(" inner join cmdb_ci_base b "); builder.append(" on d.CI_ID = b.ID "); builder.append(" where d.ORDER_ID = :orderId "); builder.append(" and d.CI_STATE = 1 "); builder.append(" group by b.LV3_ID "); builder.append(" ) m_normal on m_total.LV3_ID = m_normal.LV3_ID "); builder.append(" left JOIN "); builder.append(" ( "); builder.append(" select count(*) warnnum,b.LV3_ID from SC_WORKFLOW_CI_HEALTH_CIDETAIL d "); builder.append(" inner join cmdb_ci_base b "); builder.append(" on d.CI_ID = b.ID "); builder.append(" where d.ORDER_ID = :orderId "); builder.append(" and d.CI_STATE=2 "); builder.append(" group by b.LV3_ID "); builder.append(" ) m_warn on m_total.LV3_ID = m_warn.LV3_ID "); builder.append(" left JOIN "); builder.append(" ( "); builder.append(" select count(*) errornum,b.LV3_ID from SC_WORKFLOW_CI_HEALTH_CIDETAIL d "); builder.append(" inner join cmdb_ci_base b "); builder.append(" on d.CI_ID = b.ID "); builder.append(" where d.ORDER_ID = :orderId "); builder.append(" and d.CI_STATE=3 "); builder.append(" group by b.LV3_ID "); builder.append(" ) m_error on m_total.LV3_ID = m_error.LV3_ID "); return builder; } @Override public Map doSendback(HttpServletRequest request) { String orderId = request.getParameter("orderId"); String nodeId = request.getParameter("nodeId"); String lastNodeTemplateId = request.getParameter("lastNodeTemplateId"); String note = request.getParameter("backNote"); Map user = WebUtil.getWywEngineerLoginUser(request); String userName = ConvertUtil.obj2StrBlank(user.get("ZSXM")); String userId = ConvertUtil.obj2StrBlank(user.get("ID")); String flowId = request.getParameter("flowId"); WorkFlowSupportEntity support = new WorkFlowSupportEntity(); support.setFlowId(flowId); support.setNodeId(nodeId); support.setUserName(userName); support.setUserId(userId); support.setNote(note); support.setEverNodeTemplateId(lastNodeTemplateId); support.setWorkFlowType(Constants.WORKFLOW_BASE_BUSINESS_TYPE_CI_HEALTH); Map resultMap = new HashMap(); resultMap.put("result", "1"); SysInfoMsg msg = workFlowSupportService.doOrderSendback(support); resultMap.put("msg", msg); return resultMap; } }