GEOneStationRule.java
8.58 KB
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
package com.sitech.ismp.coll.busi.e2e.rule;
import java.util.Date;
import java.util.List;
import java.util.Map;
import com.sitech.ismp.coll.busi.e2e.E2EConstant;
import com.sitech.ismp.coll.busi.e2e.dao.TbE2eCaOrderDao;
import com.sitech.ismp.coll.busi.e2e.dao.TbE2eIbpOrderDao;
import com.sitech.ismp.coll.busi.e2e.dao.TbE2eKxOrderDao;
import com.sitech.ismp.coll.busi.e2e.dao.TbE2eOneStopCrmOrderDao;
import com.sitech.ismp.coll.busi.e2e.dao.TbE2eOneStopOrderDao;
import com.sitech.ismp.coll.busi.e2e.dao.TbE2eOneStopOrderExceptDao;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eCaOrder;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eFile2dbFinishTag;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eIbpOrder;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eOneStopCrmOrder;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eOneStopKxOrder;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eOneStopOrder;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eOneStopOrderExcept;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eProcessFinishTag;
import com.sitech.util.Formater;
import com.sitech.util.JSONUtil;
/**
* 政企一站式服务监控规则
*
* @author LINXC
*/
public class GEOneStationRule extends AnalysisRule {
private TbE2eOneStopOrderExceptDao exceptDao;
public GEOneStationRule(Map<String, String> params) {
super(params);
exceptDao = new TbE2eOneStopOrderExceptDao(params);
}
/**入口*/
protected void excute() {
//取同一时间内CRM系统侧、IBP系统侧、客保系统侧、客响系统侧已经传送好FTP文件,并且未被分析处理过的标记列表
List<TbE2eFile2dbFinishTag> tagList = fileFinishTagdao
.selectTbE2eFile2dbFinishTagForOneStop(E2EConstant.FILE_TYPE_ONESTOP_CRM_ORDER, ZQYZS);
if(mark(tagList)){
for(TbE2eFile2dbFinishTag tag : tagList){
Date fileTime = tag.getFILE_TIME();
process(fileTime);
}
}
}
/**业务处理*/
private void process(Date fileTime) {
//CRM
TbE2eOneStopCrmOrderDao crmOrderDao = new TbE2eOneStopCrmOrderDao(params);
//客保
TbE2eCaOrderDao caOrderDao = new TbE2eCaOrderDao(params);
//客响
TbE2eKxOrderDao kxOrderDao = new TbE2eKxOrderDao(params);
//IBP
TbE2eIbpOrderDao ibpOrderDao = new TbE2eIbpOrderDao(params);
//
TbE2eOneStopOrderDao orderDao = new TbE2eOneStopOrderDao(params);
//取出本批次要处理的CRM数据
List<TbE2eOneStopCrmOrder> crmOrderList = crmOrderDao.selectTbE2eOneStopCrmOrder(fileTime);
if (crmOrderList == null || crmOrderList.size() == 0) {
return;
}
for(TbE2eOneStopCrmOrder crmOrder : crmOrderList){
String crmId = crmOrder.getCRM_ORDER_ID();
String p6Id = crmOrder.getP6_ID();
TbE2eOneStopOrder order = new TbE2eOneStopOrder();
//封装CRM数据
packingCrmData(order, crmOrder);
//拼接客保数据
List<TbE2eCaOrder> caOrderList = caOrderDao.selectTbE2eCaOrderForOneStop(fileTime, crmId, p6Id);
if (caOrderList != null && caOrderList.size() != 0) {
TbE2eCaOrder caOrder = caOrderList.get(0);
packingCaData(order, caOrder);
}
//拼接客响数据
List<TbE2eOneStopKxOrder> kxOrderList = kxOrderDao.selectTbE2eOneStopKxOrder(fileTime, crmId, p6Id);
if (kxOrderList != null && kxOrderList.size() != 0) {
TbE2eOneStopKxOrder kxOrder = kxOrderList.get(0);
packingKxData(order, kxOrder);
}
//拼接综资数据(从IBP中获取)
List<TbE2eIbpOrder> ibpOrderList = ibpOrderDao.selectTbE2eIbpOrderForOneStop(crmId, p6Id);
if (ibpOrderList != null && ibpOrderList.size() != 0) {
TbE2eIbpOrder ibpOrder = ibpOrderList.get(0);
packingZzData(order, ibpOrder);
}
//处理工单在客响系统是否超时
if (order.getCUST_RESP_IN_DT() != null) {
dealKxTimeOut(order);
}
if (isExit(orderDao, order)) {
//已存在该数据。更新
orderDao.editTbE2eOneStopOrder(order);
} else {
//插入数据
orderDao.addTbE2eOneStopOrder(order);
}
//该条数据已完工的处理
if (isFinished(order)) {
if (order.getITEM_ID() != null && !order.getITEM_ID().equals("")) {
if (isItemFinished(orderDao, order)) {
//所属的项目号下其他数据是否已完工
orderDao.moveTbE2eOneStopOrderToHistoryByItemId(order);
orderDao.delTbE2eOneStopOrderByItemId(order);
}
} else {
orderDao.moveTbE2eOneStopOrderToHistory(order);
orderDao.delTbE2eOneStopOrder(order);
}
}
}
}
/**封装CRM数据*/
private void packingCrmData(TbE2eOneStopOrder order, TbE2eOneStopCrmOrder crmOrder) {
order.setITEM_ID(crmOrder.getITEM_ID());
order.setCONTRACT_ID_MAIN(crmOrder.getCONTRACT_ID_MAIN());
order.setCONTRACT_ID_MINOR(crmOrder.getCONTRACT_ID_MINOR());
order.setORIGINATE_BUREAU(dealOriginateBureau(crmOrder.getCONTRACT_ID_MAIN()));
order.setCRM_ORDER_ID(crmOrder.getCRM_ORDER_ID());
order.setCRM_ROW_NUM(crmOrder.getCRM_ROW_NUM());
order.setDEVICE_NUM(crmOrder.getDEVICE_NUM());
order.setCRM_SUBMIT_DT(crmOrder.getORDER_SUBMIT_TIME());
order.setPAY_DT(crmOrder.getPAY_DT());
order.setCRM_ROW_STATUS(crmOrder.getCRM_ROW_STATUS());
}
/**封装客保数据*/
private void packingCaData(TbE2eOneStopOrder order, TbE2eCaOrder caOrder) {
order.setKB_IN_DT(caOrder.getCA_CREATE_TIME());
order.setKB_OUT_DT(caOrder.getRETURN2IBP_FIN_TIME());
order.setKB_BOOKING_DT(caOrder.getSUBSCRIBE_START_TIME());
order.setKB_DEAL_BUREAU(caOrder.getDISTICT_BUREAU());
order.setKB_REFUSE_REASON(caOrder.getREFUSE_REASON());
order.setKB_IS_TIMEOUT(caOrder.getIS_TIMEOUT());
order.setKB_TIMEOUT_REASON(caOrder.getTIMEOUT_REASON());
order.setKB_END_DT(caOrder.getRETURN2IBP_FIN_TIME());
}
/**封装客响数据*/
private void packingKxData(TbE2eOneStopOrder order, TbE2eOneStopKxOrder kxOrder) {
order.setCUST_RESP_IN_DT(kxOrder.getORDER_RECEIVE_DT());
order.setCUST_RESP_OUT_DT(kxOrder.getORDER_FINISH_DT());
order.setCUST_RESP_IS_HAD_RES(kxOrder.getIS_HAD_RESOURCE());
order.setCUST_RESP_ACCEPT_BUREAU(kxOrder.getACCEPT_BUREAU());
}
/**处理工单在客响是否超时*/
private void dealKxTimeOut(TbE2eOneStopOrder order) {
//UNIT_ID = KBP_CLASS:主合同号-CRM订单号-CRM行项目号-分合同号
String uContractIdMain = Formater.neatenunitid(order.getCONTRACT_ID_MAIN());
String uCrmOrderId = Formater.neatenunitid(order.getCRM_ORDER_ID());
String uCrmRowId = Formater.neatenunitid(order.getCRM_ROW_NUM());
String uContractIdMinor = Formater.neatenunitid(order.getCONTRACT_ID_MINOR());
String unitId = kbpClass + ":" + productType + "-" + uContractIdMain + "-"
+ uCrmOrderId + "-" + uCrmRowId + "-" + uContractIdMinor;
String kpiId = "PM-02-00-000-01";
double beginDt = order.getCUST_RESP_IN_DT().getTime();
double endDt = 0;
if (order.getCUST_RESP_OUT_DT() != null) {
endDt = order.getCUST_RESP_OUT_DT().getTime();
} else {
endDt = new Date().getTime();
}
String kpiValue = Double.toString((endDt - beginDt) / (60 * 60 * 1000));
kpiValue = Formater.formatDecimalKpivalue(kpiValue);
logger.info(unitId + "\t" + kpiId + "\t" + kpiValue);
TbE2eOneStopOrderExcept except = new TbE2eOneStopOrderExcept(order, unitId, kpiId, kpiValue);
String extEventInfo = JSONUtil.toJSON(except);
if(kpiToEvent(unitId, kpiId, kpiValue,1, extEventInfo)){
order.setCUST_RESP_IS_TIMEOUT("1");
exceptDao.addTbE2eOneStopOrderExcept(except);
}
}
/**封装综资数据(从IBP中取)*/
private void packingZzData(TbE2eOneStopOrder order, TbE2eIbpOrder ibpOrder) {
order.setZONGZI_IN_DT(ibpOrder.getIBP_SEND_OUTSYS_TIME());
order.setP6_ID(ibpOrder.getP6_ID());
}
/**处理发起局*/
private String dealOriginateBureau(String contractIdMain) {
if (contractIdMain != null && !contractIdMain.equals("")) {
return contractIdMain.split("-")[1];
}
return "";
}
/**工单是否已完成*/
private boolean isFinished(TbE2eOneStopOrder order) {
String rowStatus = order.getCRM_ROW_STATUS();
return rowStatus != null && rowStatus.equals("完成");
}
private boolean isItemFinished(TbE2eOneStopOrderDao orderDao, TbE2eOneStopOrder order) {
return orderDao.selectTbE2eOneStopOrderToNotFinish(order).size() == 0;
}
/**是否存在同样的工单数据*/
private boolean isExit(TbE2eOneStopOrderDao orderDao, TbE2eOneStopOrder order) {
return orderDao.selectTbE2eOneStopOrder(order).size() > 0;
}
/**
* 为已经分析过的文件打标记
*/
private boolean mark(List<TbE2eFile2dbFinishTag> tagList) {
if (tagList == null || tagList.size() == 0) {
logger.info("没有新的CRM订单,退出.");
return false;
}
for (TbE2eFile2dbFinishTag tag : tagList) {
TbE2eProcessFinishTag processTag = new TbE2eProcessFinishTag(tag, ZQYZS);
processTagDao.insertTbE2eProcessFinishTag(processTag);
}
return true;
}
}