cy
2022-06-21 129904537f66509f97b285e7eb4f42b3dc349dd0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
package cn.ksource.web.facade.uc.order;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import cn.ksource.core.dao.BaseDao;
import cn.ksource.core.dao.SqlParameter;
import cn.ksource.core.page.PageInfo;
import cn.ksource.core.util.StringUtil;
import cn.ksource.core.util.TreeUtil;
import cn.ksource.core.web.WebUtil;
import cn.ksource.web.Constants;
import cn.ksource.web.facade.incident.IncidentFacade;
import cn.ksource.web.service.file.FileService;
 
@Service("ucHealthFacade")
public class UcHealthFacadeImpl implements UcHealthFacade {
    
    @Autowired
    private BaseDao baseDao;
    
    @Autowired
    private IncidentFacade incidentFacade;
    @Resource
    private FileService fileService;
 
    @Override
    public int queryHealthOrderCount(Map<String, String> params) {
        StringBuilder builder = new StringBuilder();
        
        builder = getAllHealthSql(params);
        String sql = "select count(*) from ( " + builder.toString() + " ) t" ;
        return baseDao.queryForInteger(sql.toString(),params);
    }
 
    @Override
    public PageInfo queryHealthOrderList(PageInfo pageInfo,
            Map<String, String> params) {
        StringBuilder builder = new StringBuilder();
        builder = getAllHealthSql(params);
        return baseDao.queryforSplitPageInfo(pageInfo, builder.toString(), params);
    }
    
    
    /**
     * 服务台工单列表
     * @param request
     * @return
     */
    private StringBuilder getAllHealthSql(Map<String, String> params){
        String flowState = params.get("flowState");
        String subCustomerId = params.get("subCustomerId");
        
        
        StringBuilder builder = new StringBuilder();
        builder.append(" select b.ID FLOWID,b.WFNAME,b.CREATERNAME,b.CREATETIME,b.CURRENT_NODE_NAME,b.BUSINESSTYPE, ");
        builder.append(" 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(" where b.BUSINESSTYPE = :businessType ");
        //工单状态
        if(StringUtil.notEmpty(flowState)) {
            builder.append(" AND b.WFSTATE =:flowState ");
        }
        
        builder.append(" AND  r.CUSTOMER_ID = :customer_Id ");
        //客户
        //下属单位
        if(StringUtil.isNotBlank(subCustomerId)) {
            builder.append(" AND b.SUB_CUSTOMER_ID = :subCustomerId ");
            
        }
        //工单编号
        String orderCode = params.get("orderCode");
        if(StringUtil.notEmpty(orderCode)) {
            builder.append(" AND r.ORDER_CODE LIKE :orderCode");
            params.put("orderCode", "%"+params.get("orderCode")+"%");
        }
        return builder;
    }
 
    @Override
    public List<Map> getCiPatrolItem(String orderId) {
        StringBuilder sql = new StringBuilder();
        SqlParameter param = new SqlParameter("orderId",orderId);
        
        sql.append(" select b.LV3_ID CATEID,b.id CIID,d.id,b.CINAME text,'' as parentId from SC_WORKFLOW_CI_HEALTH_CIDETAIL d ") ;
        sql.append(" inner join cmdb_ci_base b on d.CI_ID = b.ID ");
        sql.append(" where d.CI_ID = b.ID and d.ORDER_ID = :orderId ");
        List<Map> categoryList = baseDao.queryForList(sql.toString(),param);
        
        sql.setLength(0);
        sql.append(" select d.ORDER_CI_ID cateId,d.id,d.DEAL_STATE,d.USER_NAME,d.ITEM_RESULT,i.ITEM_NAME from SC_WORKFLOW_ITEM_HEALTH_CIDETAIL d ");
        sql.append(" inner join CI_HEALTH_ITEM i ");
        sql.append(" on d.ITEM_ID = i.ID ");
        sql.append(" where ORDER_ID = :orderId  ");
        List<Map> dataList = baseDao.queryForList(sql.toString(),param);
        
        TreeUtil treeUtil = new TreeUtil();
        List list = treeUtil.createTreeByCate(categoryList, dataList);
        return list;
    }
 
    @Override
    public Map getPatrolItemInfo(String patrolItemId) {
        String sql = " select * from SC_WORKFLOW_ITEM_HEALTH_CIDETAIL where id = :patrolItemId ";
        return baseDao.queryForMap(sql,new SqlParameter("patrolItemId",patrolItemId));
    }
    
    @Override
    public Map getHealthReportInfo(String orderId, String flowId) {
        Map healthInfo = new HashMap();
        SqlParameter param = new SqlParameter();
        param.addValue("orderId", orderId)
            .addValue("flowId", flowId)
            .addValue("managerNodeId", Constants.HEALTH_APPROVE)
            .addValue("engineerNodeId", Constants.HEALTH_PATROL);
        StringBuilder sql = new StringBuilder();
        //查询基本信息
        sql.append(" select * from SC_WORKFLOW_CI_HEALTH where id=:orderId ");
        Map baseInfo = baseDao.queryForMap(sql.toString(),param);
        //查询设备信息
        sql.setLength(0);
        sql.append(" select c.id,c.name from ( ");
        sql.append("     select c.PID from SC_WORKFLOW_CI_HEALTH_CATEGORY h inner join cmdb_ci_category c ");
        sql.append("     on h.LV3_CATE_ID = c.ID ");
        sql.append("     where  h.BUS_ID =:orderId  ");
        sql.append("     group by c.PID ");
        sql.append(" ) t inner join cmdb_ci_category c on t.pid = c.id ");
        List<Map> categoryList = baseDao.queryForList(sql.toString(),param);
        if(categoryList!=null&&categoryList.size()>0){
            sql.setLength(0);
            sql.append(" select c.PID cateId,c.name,h.TOTAL_NUM totalnum,h.TRUE_NUM realnum,(h.ALERT_NUM+h.ERROR_NUM) warnnum,truncate(((h.ALERT_NUM+h.ERROR_NUM)*100/h.TRUE_NUM),2) warnrate ");
            sql.append(" from SC_WORKFLOW_CI_HEALTH_CATEGORY h inner join cmdb_ci_category c ");
            
            sql.append(" on h.LV3_CATE_ID = c.ID where h.BUS_ID =:orderId ");
            List<Map> dataList =baseDao.queryForList(sql.toString(),param);
            TreeUtil treeUtil = new TreeUtil();
            List<Map> cateList = treeUtil.createTreeByCate(categoryList, dataList);
            healthInfo.put("cateList", cateList);
        }
        List<Map> commonList = this.getCommonPatrolItem(orderId);
        
        //查询告警异常设备
        sql.setLength(0);
        sql.append(" select b.SEARCHCODE,b.CINAME,b.POSITION,h.ORDER_NOTE from SC_WORKFLOW_CI_HEALTH_CIDETAIL h  ");
        sql.append(" inner join cmdb_ci_base b on h.CI_ID = b.ID ");
        sql.append(" where (h.CI_STATE=2 or h.CI_STATE=3) and h.ORDER_ID=:orderId ");
        List<Map> ciList =baseDao.queryForList(sql.toString(),param);
        
        //项目经理环节信息
        sql.setLength(0);
        sql.append(" select DEAL_NOTE,DEALTIME,CURRENT_DEALER_NAME from workflow_node  ");
        sql.append(" where NODE_TEMPLATE_ID=:managerNodeId and FLOWID =:flowId order by CREATETIME desc LIMIT 1 ");
        Map approveNodeInfo = baseDao.queryForMap(sql.toString(),param);
        //工程师执行环节信息
        sql.setLength(0);
        sql.append(" select b.ENDTIME,n.CREATETIME,g.SJHM,n.DEALTIME,n.CURRENT_DEALER_NAME from workflow_node n ");
        sql.append(" inner join gg_user g on n.CURRENT_DEALER_ID = g.ID  ");
        sql.append(" inner join workflow_base b on b.id = n.FLOWID  ");
        sql.append(" where n.IS_ADMIN=1 and n.NODE_TEMPLATE_ID=:engineerNodeId and n.FLOWID =:flowId order by CREATETIME desc LIMIT 1 ");
        Map engineerNodeInfo = baseDao.queryForMap(sql.toString(),param);
                
        //查询关联工单信息
        List linkOrders = incidentFacade.queryOrders(flowId);
        //查询附件信息
        List<Map> fileList = fileService.getFileList(flowId,1);
        
        healthInfo.put("baseInfo", baseInfo);
        healthInfo.put("commonList", commonList);
        healthInfo.put("ciList", ciList);
        healthInfo.put("linkOrders", linkOrders);
        healthInfo.put("fileList", fileList);
        healthInfo.put("approveNodeInfo", approveNodeInfo);
        healthInfo.put("engineerNodeInfo", engineerNodeInfo);
        return healthInfo;
    }
    
    @Override
    public List<Map> getCommonPatrolItem(String orderId) {
        StringBuilder sql = new StringBuilder();
        SqlParameter param = new SqlParameter();
        param.addValue("orderId", orderId);
        //获取通用指标分类
        sql.append(" select CATEGORY_ID,CATEGORY_NAME ");
        sql.append(" from CI_HEALTH_PATROL_COMMON_RECORD ");
        sql.append(" where ORDER_ID = :orderId ");
        sql.append(" group by CATEGORY_ID ");
        List<Map> categoryList = baseDao.queryForList(sql.toString(),param);
        //获取通用指标
        sql.setLength(0);
        sql.append(" select ID,CATEGORY_ID,ITEM_ID,ITEM_NAME,RESULT_TYPE,NOTE ");
        sql.append(" from CI_HEALTH_PATROL_COMMON_RECORD ");
        sql.append(" where ORDER_ID = :orderId ");
        List<Map> dataList = baseDao.queryForList(sql.toString(),param);
        
        Map categoryMap = new HashMap();
        if(categoryList!=null&&categoryList.size()>0){
            for(Map category:categoryList){
                ArrayList<Map> children = new ArrayList<Map>();
                category.put("children", children);
                categoryMap.put(category.get("CATEGORY_ID").toString(), category);
            }
        }
        //组装树
        if(dataList!=null&&dataList.size()>0){
            for(Map data:dataList){
                if(categoryMap.get(data.get("CATEGORY_ID").toString())!=null){
                    ((List<Map>)((Map)categoryMap.get(data.get("CATEGORY_ID").toString())).get("children")).add(data);
                }
            }
        }
        return categoryList;
    }
    
    @Override
    public Map getHealthCiDetail(String flowId) {
        Map infoMap = new HashMap();
        StringBuilder sql = new StringBuilder();
        sql.append("SELECT B.ID AS orderCiID,C.ID AS ciID,C.SEARCHCODE,C.CINAME,C.POSITION,B.ORDER_NOTE ");
        sql.append("FROM SC_WORKFLOW_CI_HEALTH A,SC_WORKFLOW_CI_HEALTH_CIDETAIL B,CMDB_CI_BASE C ");
        sql.append("WHERE A.ID=B.ORDER_ID AND B.CI_ID=C.ID AND A.FLOW_ID=:flowId");
        List<Map> ciList=baseDao.queryForList(sql.toString(),new SqlParameter().addValue("flowId", flowId));
        if(null!=ciList && ciList.size()>0){
            for(Map ciMap:ciList){
                sql.setLength(0);
                sql.append("SELECT B.ITEM_NAME,A.ITEM_RESULT,A.ORDER_NOTE,A.USER_NAME FROM SC_WORKFLOW_ITEM_HEALTH_CIDETAIL A,CI_HEALTH_ITEM B");
                sql.append(" WHERE A.ITEM_ID=B.ID AND A.CI_ID=:ciId AND A.ORDER_CI_ID=:orderCiId ");
                List<Map> itemList=baseDao.queryForList(sql.toString(),new SqlParameter().addValue("ciId", ciMap.get("ciID")).addValue("orderCiId", ciMap.get("orderCiID")));
                if(null!=itemList && itemList.size()>0){
                    for(Map map :itemList){
                        if(map.get("ITEM_RESULT")!=null && StringUtil.notEmpty(map.get("ITEM_RESULT").toString())){
                            map.put("ITEM_RESULT", Constants.getmapCI_HEALTH_PLAN_CI_STATE_Label(Integer.parseInt(map.get("ITEM_RESULT").toString())));
                        }
                    }
                }
                ciMap.put("itemList", itemList);
            }
        }
        //服务工程师
        StringBuilder selSql=new StringBuilder();
        selSql.append("SELECT A.CURRENT_DEALER_NAME FROM workflow_node A,GG_USER B WHERE A.CURRENT_DEALER_ID=B.ID AND A.FLOWID=:flowId AND A.IS_ADMIN=1 AND A.NODE_TEMPLATE_ID=:nodeId");
        Map dealerMap=baseDao.queryForMap(selSql.toString(),new SqlParameter().addValue("flowId", flowId).addValue("nodeId", Constants.HEALTH_PATROL));
        infoMap.put("dealerMap", dealerMap);
        infoMap.put("ciList", ciList);
        return infoMap;
    }
}