fs-danaus
2023-04-07 407785f6e9cd1e4332cc4b1b7dcefbb855174b5e
提交 | 用户 | age
a6a76f 1 package com.yc.action.sysmessage;
F 2
3 import com.google.gson.JsonArray;
4 import com.google.gson.JsonElement;
5 import com.google.gson.JsonObject;
6 import com.yc.action.BaseAction;
7 import com.yc.entity.DataSourceEntity;
8 import com.yc.entity.PopMessageEntity;
9 import com.yc.factory.FactoryBean;
10 import com.yc.multiData.MultiDataSource;
11 import com.yc.multiData.SpObserver;
12 import com.yc.sdk.shopping.util.SettingKey;
13 import com.yc.service.sysmessage.SysMessageInf;
14 import com.yc.utils.SessionKey;
15 import org.slf4j.Logger;
16 import org.slf4j.LoggerFactory;
17 import org.springframework.beans.factory.annotation.Autowired;
18 import org.springframework.dao.DataAccessException;
19 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
20 import org.springframework.stereotype.Controller;
21 import org.springframework.web.bind.annotation.RequestMapping;
22
23 import javax.servlet.http.HttpServletRequest;
24 import javax.servlet.http.HttpServletResponse;
25 import javax.servlet.http.HttpSession;
26 import java.io.IOException;
27 import java.text.ParseException;
28 import java.text.SimpleDateFormat;
29 import java.util.*;
30 import java.util.Map.Entry;
31 import java.util.stream.Collectors;
32
33 @Controller
34 public class MessageTipAction  extends BaseAction {
35     
36     @Autowired
37     private SysMessageInf sysMessageInf;
38     @Autowired
39     ThreadPoolTaskExecutor threadPoolExecutor;
40     //private int cpuCoreNumber;
41     protected final Logger log = LoggerFactory.getLogger(this.getClass());
42     
43     @RequestMapping("/messageTip.do")
44     public void MessageTip(HttpServletRequest request,HttpServletResponse response) throws IOException{
45
46           String result="";
47         String usercode = request.getSession().getAttribute(SessionKey.USERCODE).toString();
48         List<Map<String, Object>> list = sysMessageInf.loadMessage(usercode.toUpperCase(),false);
49         StringBuffer message = new StringBuffer();
50         int colt=0;
51         int zong=1;
52         String Bcolor="";        
53         if(list!=null){
54         for (Map<String, Object> map : list) {
55             String messagetxt="";
56 //            if(map.get("messagetxt").toString().length()>15){
57 //                messagetxt = map.get("messagetxt").toString().substring(0,15)+"...";
58 //            }else{
59 //                messagetxt= map.get("messagetxt").toString();
60 //            }
61             messagetxt= this.replaceBlank(map.get("messagetxt").toString());
62             if (colt%2==0) {
63                 Bcolor="background:#FFFFFF;";
64             }else {
65                 Bcolor="background:#DDDDDD;";
66             }
67             if(!toString(map.get("formid")).equals("")){
68                 message.append("<div style="+Bcolor+"><a id=").append(map.get("messid")).append(" style=line-height:15pt;cursor:pointer;text-decoration:underline; onClick=funcLink('").append(map.get("formid"))
69                 .append("','").append(toString(toString(map.get("formtype")))).append("','").append(toString(map.get("origfields")).replace("'", "")).append("','").append(
70                     toString(map.get("linkfields")).replace("'", "")).append("','").append(toString(map.get("linkmode"))).append("','").append(toString(map.get("self_datafields")))
71                     .append("','").append(toString(map.get("link_datafields"))).append("','").append("")
72                     .append("','").append(toString(map.get("efilter")).replace("'", "\\'"))
73                     .append("','").append("")
74                     .append("','").append("")
75                     .append("','").append("")
76                     .append("','").append("")
77                     .append("','").append("")
78                     .append("','").append(map.get("messid")).append(",message');>").append(zong+":  ").append(messagetxt).append("</a></div>");
79             }else if(!toString(map.get("url")).equals("") ){
80                 String url="";
81                 if(map.get("url").toString().contains("http://")==false){
82                     url="http://"+map.get("url").toString();
83                 }else{
84                     url=map.get("url").toString();
85                 }
86                 message.append("<div style="+Bcolor+"><a style=line-height:15pt;cursor:pointer;text-decoration:underline;  onClick=window.open('")
87                 .append(url).append("')>")
88                 .append(zong+":  ")
89                 .append(messagetxt).append("</a></div>");
90             }else{
91                 message.append("<div style="+Bcolor+"><a id=").append(map.get("messid"))
92                 .append(" style=line-height:15pt;"+Bcolor+"cursor:pointer;>")
93                 .append(zong+":  ")
94                 .append(messagetxt).append("</a></div>");
95             }
96             colt++;
97             zong++;
98             Bcolor="";
99         }
100         }else {
101             //result=list.get(0).toString();
102             result = ""; 
103         }
104
105          result="{\"message\":\""+message.toString()+"\"}";
106
107         print(response, result);
108     }
109     
110     @RequestMapping("/usrReaded.do")
111     public void updateUsrReaded(HttpServletRequest request,HttpServletResponse response){
112         String messid = request.getParameter("messid");
113         HttpSession session = request.getSession();
114         String userCode = null ;
b439be 115         JsonObject json = new JsonObject();
J 116         JsonObject errJson = new JsonObject();
a6a76f 117         if (session.getAttribute(SessionKey.USERCODE) != null) {
F 118             userCode = (String)session.getAttribute(SessionKey.USERCODE) ;
119         }
120         if (userCode == null && session.getAttribute(SessionKey.HRCODE)!=null ) {
121             userCode = (String)session.getAttribute(SessionKey.HRCODE) ;
122         }
123         
b439be 124         try {
J 125             DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ;
126             SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());// 切换数据源
127             sysMessageInf.updateUsrReaded(Integer.parseInt(messid), userCode,false);
128             json.addProperty("state",0  );
129             this.printJson(response, json.toString());
130             return ;
131         }catch(DataAccessException e) {
132             e.printStackTrace();
133             errJson.addProperty("warning",  (e.getCause()!=null ?e.getCause().getMessage():e.getMessage()));
134             json.add("error",errJson);
135             this.printJson(response, json.toString());
136             return ;
137         }catch (Exception e ) {
138             e.printStackTrace();
139             errJson.addProperty("warning", (e.getCause()!=null ?e.getCause().getMessage():e.getMessage()));
140             json.add("error",errJson);
141             this.printJson(response, json.toString());
142             return ;
143         }finally {
144             SpObserver.setDBtoInstance();
145         }
a6a76f 146     }
F 147     
148     @RequestMapping("/savemessage.do")
149     public void saveMessage(HttpServletRequest request,HttpServletResponse response){
150         HttpSession session = request.getSession();
151         
152         String hostUrl = SettingKey.getHostUrl(request) ;
153         String wxQueryString = SettingKey.getQueryStringByWx(request);
154         
155         String userCode = null ;
156         if (session.getAttribute(SessionKey.USERCODE) != null) {
157             userCode = (String)session.getAttribute(SessionKey.USERCODE) ;
158         }
159         if (userCode == null && session.getAttribute(SessionKey.HRCODE)!=null ) {
160             userCode = (String)session.getAttribute(SessionKey.HRCODE) ;
161         }
162         JsonObject json = new JsonObject();
163         JsonObject errJson = new JsonObject();
164         JsonArray array=new JsonArray();
165         
166         Date createtime = new Date() ;
167         SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm",Locale.SIMPLIFIED_CHINESE); 
168         String topic = request.getParameter("topic") ;
169         if (topic == null || "".equals(topic)) {
170             errJson.addProperty("topic", "标题 必须输入!");
171         }
172         String messageTxt = request.getParameter("messagetxt") ;
173         if (messageTxt == null || "".equals(messageTxt)) {
174             errJson.addProperty("messagetxt", "内容 必须输入!");
175         }
176         String unvalidDate = request.getParameter("unvaliddate") ;
177         if (unvalidDate == null || "".equals(unvalidDate)) {
178             errJson.addProperty("unvaliddate", "消息到期时间 必须输入!");
179         }
180         Date calUnvaliddate = null;
181         try {
182             calUnvaliddate = formatter.parse(unvalidDate);
183             if(calUnvaliddate.getTime() < createtime.getTime()) {
184                 errJson.addProperty("unvaliddate", "消息到期时间 必须大于当前时间!");
185             }
186         } catch (ParseException e1) {
187             e1.printStackTrace();
188             errJson.addProperty("unvaliddate", "消息到期时间 格式错误!");
189         }   
190         
191         String tipCount = request.getParameter("tipcount") ;
192         if (tipCount == null || "".equals(tipCount)) {
193             errJson.addProperty("tipcount", "消息弹出次数 必须输入!");
194         }
195         
196         String messageType = request.getParameter("messagetype") ;
197         if (messageType == null || "".equals(messageType)) {
198             errJson.addProperty("messagetype", "消息类型 必须输入!");
199         }
200         String createUserName = request.getParameter("createusername") ;
201         if (createUserName == null || "".equals(createUserName)) {
202             errJson.addProperty("createusername", "发送人 必须输入!");
203         }
204         String dbIds = request.getParameter("dbids") ;   //页面选择要发送的列表 
205         
206         Set<Entry<String, JsonElement>> it = errJson.entrySet();
207         if (!it.isEmpty() && it.size() != 0) {
208             json.add("error", errJson);
209             this.printJson(response, json.toString());
210             return;
211         }
212         //String dbId = Maintaince.getDatabaseId(request);
213         Integer messid = null ;
214         try {
215             DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ;
216             
217             SpObserver.setDBtoDemo();
218             //首先插入 demo 数据库 
219             messid = sysMessageInf.saveMessageToDemoDB( topic , messageTxt ,
220                  unvalidDate , tipCount, messageType ,
221                  userCode, createUserName,createtime,null,dataSourceEntity.getDbId()); 
222         }catch(DataAccessException e) {
223             e.printStackTrace();
224             JsonObject item = new JsonObject();
225             item.addProperty("messagetxt","demo数据库错误:"+ (e.getCause()!=null ?e.getCause().getMessage():e.getMessage()));
226             array.add(item);
227             errJson.addProperty("warning", "demo数据库错误:"+ (e.getCause()!=null ?e.getCause().getMessage():e.getMessage()));
228             json.add("error",errJson);
229             this.printJson(response, json.toString());
230             return ;
231         }catch (Exception e ) {
232             e.printStackTrace();
233             JsonObject item = new JsonObject();
234             item.addProperty("messagetxt","demo数据库错误:"+(e.getCause()!=null ?e.getCause().getMessage():e.getMessage()));
235             array.add(item);
236             errJson.addProperty("warning", "demo数据库错误:"+ (e.getCause()!=null ?e.getCause().getMessage():e.getMessage()));
237             json.add("error",errJson);
238             this.printJson(response, json.toString());
239             return ;
240         }finally {
241             SpObserver.setDBtoInstance();
242         }
243         
244         Map<String, DataSourceEntity> allDataSourceMaps = MultiDataSource.getDataSourceMaps() ;
245         Map<String, DataSourceEntity> dataSourceMaps = null ;
246         if (dbIds != null && !"".equals(dbIds)) {
247             dataSourceMaps = allDataSourceMaps.entrySet().stream()
248                     .filter(x ->{
249                         String dbId[] = dbIds.split(";") ;
250                         for(int k = 0 ;k < dbId.length ; k ++) {
251                             if (dbId[k].equals(allDataSourceMaps.get(x.getKey()).getDbId()+"")) {
252                                 return true;
253                             }
254                         }
255                         return false;
256                         })
257                     .collect(Collectors.toMap(h -> h.getKey(), h -> h.getValue()));
258         }else {
259             dataSourceMaps = allDataSourceMaps; 
260         }
261         
262         int count = (dataSourceMaps != null?dataSourceMaps.size():0) ;
263         int sendCount = 0 ;
407785 264         Map<String,Integer> resultMap=new HashMap<>();
a6a76f 265         if (messid != null && dataSourceMaps != null) {
F 266             for (Map.Entry<String, DataSourceEntity> entry : dataSourceMaps.entrySet()) {
267                 DataSourceEntity dataSourceEntity = entry.getValue() ;
407785 268                 //过滤相同数据库,避免重复生成通知
F 269                 if(resultMap.containsKey(dataSourceEntity.getHost()+"_"+dataSourceEntity.getDb())){
270                     continue;
271                 }else {
272                     resultMap.put(dataSourceEntity.getHost()+"_"+dataSourceEntity.getDb(),1);
273                 }
a6a76f 274                 try {
F 275                     //循环插入 实例 数据库 
276                     PopMessageEntity popMessageEntity = new PopMessageEntity();
277                     popMessageEntity.setTopic(topic);
278                     popMessageEntity.setMessageTxt(messageTxt);
279                     popMessageEntity.setUnValidDate(calUnvaliddate);
280                     popMessageEntity.setTipCount(Integer.parseInt(tipCount));
281                     popMessageEntity.setMessageType(messageType);
282                     popMessageEntity.setReaders("全体员工");
283                     popMessageEntity.setCreateName(createUserName);
284                     popMessageEntity.setCreateUser(userCode);
285                     popMessageEntity.setCreateTime(createtime);
286                     popMessageEntity.setPublicUser(true);
287                     popMessageEntity.setRefMessid(messid);
288                     popMessageEntity.setFromDbId(dataSourceEntity.getDbId());
289                     
290                     // 使用Executor框架的线程池执行系统消息发送任务
291                     //executor.execute(new SendSystemMessageThread(dataSourceEntity,popMessageEntity));
292                     threadPoolExecutor.execute(new SendSystemMessageThread(dataSourceEntity,popMessageEntity));
293                     sendCount ++ ;
294                 }catch(DataAccessException e) {
295                     e.printStackTrace();
296                     JsonObject item = new JsonObject();
297                     item.addProperty("messagetxt",dataSourceEntity.getDb() +"数据库错误:"+(e.getCause()!=null ?e.getCause().getMessage():e.getMessage()));
298                     array.add(item);
299                 }catch (Exception e ) {
300                     e.printStackTrace();
301                     JsonObject item = new JsonObject();
302                     item.addProperty("messagetxt",dataSourceEntity.getDb() +"数据库错误:"+(e.getCause()!=null ?e.getCause().getMessage():e.getMessage()));
303                     array.add(item);
304                 }
305             }
306         }
307         
308         try {
309             SpObserver.setDBtoDemo();
310             //回写 demo 数据库 实际发送情况 
311             messid = sysMessageInf.updateReceivedNum( messid, count); 
312         }catch(DataAccessException e) {
313             e.printStackTrace();
314             JsonObject item = new JsonObject();
315             item.addProperty("messagetxt","demo数据库错误:"+(e.getCause()!=null ?e.getCause().getMessage():e.getMessage()));
316             array.add(item);
317         }catch (Exception e ) {
318             e.printStackTrace();
319             JsonObject item = new JsonObject();
320             item.addProperty("messagetxt","demo数据库错误:"+(e.getCause()!=null ?e.getCause().getMessage():e.getMessage()));
321             array.add(item);
322         }finally {
323             SpObserver.setDBtoInstance();
324         }
325         
326         String success = "正在发送【"+ count+"】条客户消息,实际成功发送情况请刷新页面!" ;
327         if (count != 0 && sendCount != count) {
328             JsonObject item = new JsonObject();
329             item.addProperty("messagetxt",success);
330             array.add(item);
331         }
332         if (!array.isJsonNull()) {
333             json.add("warning", array);
334         }
335         json.addProperty("success",success  );
336         json.addProperty("redirect",hostUrl + "/shopping/maintaince/messagelist.jsp"+(wxQueryString == null||"".equals(wxQueryString)?"":"?" + wxQueryString));
337         this.printJson(response, json.toString());
338         return ;
339     }
340     
341     /**
342      * 发送系统消息线程
343      * @author johnswang
344      *
345      */
346     private class SendSystemMessageThread implements Runnable {
347         final DataSourceEntity dataSourceEntity;
348         final PopMessageEntity popMessageEntity;
349         final SysMessageInf sysMessageInf = (SysMessageInf)FactoryBean.getBean("SysMessageImpl") ;
350
351         public SendSystemMessageThread(DataSourceEntity dataSourceEntity,PopMessageEntity popMessageEntity) {
352             this.dataSourceEntity = dataSourceEntity;
353             this.popMessageEntity = popMessageEntity;
354         }
355
356         @Override
357         public void run() {
358             try {
359                 long currentTime = System.currentTimeMillis();
360                 SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());// 切换数据源
361                 sysMessageInf.saveMessageToInstanceDB( popMessageEntity) ;   //发送系统消息
362                 log.info("发送消息["+popMessageEntity.getRefMessid()+"]数据库:[" + dataSourceEntity.getDb() + "]执行时间:" + (System.currentTimeMillis() - currentTime) + "ms");
363             }catch(DataAccessException e) {
364                 e.printStackTrace();
365                 log.error(e.getCause()!=null?e.getCause().getMessage():e.getMessage());
366                 try {
367                     SpObserver.setDBtoDemo();
368                     //回写 demo 数据库 出错信息 
369                     sysMessageInf.saveSendErrorMessages(popMessageEntity.getRefMessid() , dataSourceEntity.getDbId(),dataSourceEntity.getSystemDescribe(),dataSourceEntity.getDb(), e.getCause()!=null?e.getCause().getMessage():e.getMessage()); 
370                 }finally {
371                     SpObserver.setDBtoInstance();
372                 }
373                 return ;
374             }catch (Exception e ) {
375                 e.printStackTrace();
376                 log.error(e.getCause()!=null?e.getCause().getMessage():e.getMessage());
377                 try {
378                     SpObserver.setDBtoDemo();
379                     //回写 demo 数据库 出错信息 
380                     sysMessageInf.saveSendErrorMessages(popMessageEntity.getRefMessid() , dataSourceEntity.getDbId(),dataSourceEntity.getSystemDescribe(),dataSourceEntity.getDb(),e.getCause()!=null?e.getCause().getMessage():e.getMessage()); 
381                 }finally {
382                     SpObserver.setDBtoInstance();
383                 }
384                 return;
385             }finally {
386                 SpObserver.setDBtoInstance();
387             }
388             
389             try {
390                 SpObserver.setDBtoDemo();
391                 //回写 demo 数据库 实际发送情况 
392                 sysMessageInf.addReceivedNum(popMessageEntity.getRefMessid() ); 
393             }finally {
394                 SpObserver.setDBtoInstance();
395             }
396         }
397     }
398     
399     
400     /**
401      * 获取系统级提示消息
402      * @param request
403      * @param response
404      */
405     @RequestMapping("/messagehint.do")
406     public void messageHint(HttpServletRequest request,HttpServletResponse response) {
407         HttpSession session=request.getSession(true);  
408         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 
409         String userCode = null ;
410         if (session.getAttribute(SessionKey.USERCODE) != null) {
411             userCode = (String)session.getAttribute(SessionKey.USERCODE) ;
412         }
413         if (userCode == null && session.getAttribute(SessionKey.HRCODE)!=null ) {
414             userCode = (String)session.getAttribute(SessionKey.HRCODE) ;
415         }
416         JsonObject json = new JsonObject();
417         JsonObject errJson = new JsonObject();
418         JsonArray array=new JsonArray();
419         //String dbId = Maintaince.getDatabaseId(request);
420         try {
421             DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ;
422             SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());
423             if (userCode != null && !"".equals(userCode)) {
424                 //List<Map<String, Object>> list =  sysMessageInf.loadMessage(userCode+"_publicuser") ;  //必须加  _publicuser 值进去 
425                 List<Map<String, Object>> list =  sysMessageInf.loadMessage(userCode,true) ;  
426                 //String messids = "" ;
427                 for (int i = 0 ;list != null && i < list.size();i++) {
428                     Integer messid = (list.get(i).get("messid")==null ? 0 :(Integer)list.get(i).get("messid") );
429                     //messids +=  (list.get(i).get("messid")==null ? "" :(Integer)list.get(i).get("messid") ) + ";";
430                     String messageTxt = (list.get(i).get("messagetxt") == null?"":(String)list.get(i).get("messagetxt")) ;
431                     String createUserName = (list.get(i).get("createusername") == null?"":(String)list.get(i).get("createusername")) ;
432                     Date unvalidDate = (list.get(i).get("unvaliddate") == null?null:(Date)list.get(i).get("unvaliddate")) ;
433                     Date createTime = (list.get(i).get("createtime") == null?null:(Date)list.get(i).get("createtime")) ;
434                     String topic =  (list.get(i).get("topic") == null?"":(String)list.get(i).get("topic")) ;
435                     String messageType = (list.get(i).get("messagetype") == null?"":(String)list.get(i).get("messagetype")) ;
436                     JsonObject item = new JsonObject();
437                     //item.addProperty("messid",messid);
438                     item.addProperty("messagetxt",messageTxt+"");
439                     item.addProperty("unvaliddate",sdf.format(unvalidDate));
440                     item.addProperty("createtime",sdf.format(createTime));
441                     item.addProperty("createusername",createUserName) ;
442                     item.addProperty("topic",topic) ;
443                     item.addProperty("messagetype",messageType) ;
444                     //items.add("item", item);
445                     array.add(item);
b439be 446                     
J 447                     //此循环不需要更新 tipcount 已读次数字段,因为在调用 p9912 过程时已经更新过一次了
a6a76f 448                 }
F 449             }
450         }catch (DataAccessException e) {
451             errJson.addProperty("warning",(e.getCause()!=null? e.getCause().getMessage():e.getMessage()));
452             json.add("error", errJson);
453             this.printJson(response, json.toString());
454             return;
455         }catch (Exception e) {
456             errJson.addProperty("warning",(e.getCause()!=null? e.getCause().getMessage():e.getMessage()));
457             json.add("error", errJson);
458             this.printJson(response, json.toString());
459             return;
460         }finally {
461             SpObserver.setDBtoInstance();
462         }
463         json.add("warning", array);
464         this.printJson(response, json.toString());
465     }
466     
467     @RequestMapping("/revokemessage.do")
468     public void revokeMessage(HttpServletRequest request,HttpServletResponse response){
469         //HttpSession session = request.getSession();
470         JsonObject json = new JsonObject();
471         JsonObject errJson = new JsonObject();
472         
473         String hostUrl = SettingKey.getHostUrl(request) ;
474         String wxQueryString = SettingKey.getQueryStringByWx(request);
475         
476         String messid = request.getParameter("messid") ;
477         if (messid == null || "".equals(messid)) {
478             errJson.addProperty("warning", "必须传递 messid 参数");
479             json.add("error",errJson);
480             this.printJson(response, json.toString());
481             return ;
482         }
483         Map<String, DataSourceEntity> map = MultiDataSource.getDataSourceMaps() ;
484         int count = (map != null?map.size():0) ;
485         if (messid != null && map != null) {
486             //cpuCoreNumber = Runtime.getRuntime().availableProcessors();
487             //Executor executor = Executors.newFixedThreadPool(cpuCoreNumber);
488             for (Map.Entry<String, DataSourceEntity> entry : map.entrySet()) {
489                 DataSourceEntity dataSourceEntity = entry.getValue() ;
490                 try {
491                     //SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());// 切换数据源
492                     
493                     // 使用Executor框架的线程池执行系统消息发送任务
494                     threadPoolExecutor.execute(new RevokeSystemMessageThread(dataSourceEntity,Integer.valueOf(messid)));
495                 }catch(DataAccessException e) {
496                     e.printStackTrace();
497                     
498                     errJson.addProperty("warning", dataSourceEntity.getDb() +"数据库错误:"+ e.getCause().getMessage());
499                     json.add("error",errJson);
500                     this.printJson(response, json.toString());
501                     return ;
502                 }catch (Exception e ) {
503                     e.printStackTrace();
504                     errJson.addProperty("warning", dataSourceEntity.getDb() +"数据库错误:"+e.getMessage());
505                     json.add("error",errJson);
506                     this.printJson(response, json.toString());
507                     return ;
508                 }finally {
509                     //SpObserver.setDBtoInstance();
510                 }
511             }
512         }
513         
514         try {
515             SpObserver.setDBtoDemo();
516             //更新 demo 数据库 的撤回时间
517             sysMessageInf.updateRevokeTime( Integer.valueOf(messid)); 
518         }catch(DataAccessException e) {
519             e.printStackTrace();
520             errJson.addProperty("warning", "demo数据库错误:"+ e.getCause().getMessage());
521             json.add("error",errJson);
522             this.printJson(response, json.toString());
523             return ;
524         }catch (Exception e ) {
525             e.printStackTrace();
526             errJson.addProperty("warning", "demo数据库错误:"+ e.getMessage());
527             json.add("error",errJson);
528             this.printJson(response, json.toString());
529             return ;
530         }finally {
531             SpObserver.setDBtoInstance();
532         }
533         
534         
535         json.addProperty("success", "正在撤回【" + count  + "】客户消息,请刷新页面查看撤回时否有错误消息!" );
536         json.addProperty("redirect",hostUrl + "/shopping/maintaince/messagelist.jsp"+(wxQueryString == null||"".equals(wxQueryString)?"":"?" + wxQueryString));
537         this.printJson(response, json.toString());
538         return ;
539     }
540     
541     private class RevokeSystemMessageThread implements Runnable {
542         final DataSourceEntity dataSourceEntity;
543         final Integer  messid;
544         final SysMessageInf sysMessageInf = (SysMessageInf)FactoryBean.getBean("SysMessageImpl") ;
545
546         public RevokeSystemMessageThread(DataSourceEntity dataSourceEntity,Integer messid) {
547             this.dataSourceEntity = dataSourceEntity;
548             this.messid = messid;
549         }
550
551         @Override
552         public void run() {
553             try {
554                 long currentTime = System.currentTimeMillis();
555                 SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());// 切换数据源
556                 sysMessageInf.deleteMessageByRevoke(Integer.valueOf(messid)) ;   //撤回客户收到的消息
557                 log.info("撤回消息["+messid+"]数据库:[" + dataSourceEntity.getDb() + "]执行时间:" + (System.currentTimeMillis() - currentTime) + "ms");
558             }catch(DataAccessException e) {
559                 e.printStackTrace();
560                 log.error(e.getCause()!=null?e.getCause().getMessage():e.getMessage());
561                 try {
562                     SpObserver.setDBtoDemo();
563                     //回写 demo 数据库 出错信息 
564                     sysMessageInf.saveSendErrorMessages(messid , dataSourceEntity.getDbId(),dataSourceEntity.getSystemDescribe(),dataSourceEntity.getDb(),"撤回消息:" + (e.getCause()!=null?e.getCause().getMessage():e.getMessage())); 
565                 }finally {
566                     SpObserver.setDBtoInstance();
567                 }
568                 return ;
569             }catch (Exception e ) {
570                 e.printStackTrace();
571                 log.error(e.getCause()!=null?e.getCause().getMessage():e.getMessage());
572                 try {
573                     SpObserver.setDBtoDemo();
574                     //回写 demo 数据库 出错信息 
575                     sysMessageInf.saveSendErrorMessages(messid , dataSourceEntity.getDbId(),dataSourceEntity.getSystemDescribe(),dataSourceEntity.getDb(),"撤回消息:"+ (e.getCause()!=null?e.getCause().getMessage():e.getMessage())); 
576                 }finally {
577                     SpObserver.setDBtoInstance();
578                 }
579                 return;
580             }finally {
581                 SpObserver.setDBtoInstance();
582             }
583         }
584     }
585     
586     
587     
588     @RequestMapping("/deletedemomessage.do")
589     public void deleteDemoMessage(HttpServletRequest request,HttpServletResponse response){
590         //HttpSession session = request.getSession();
591         JsonObject json = new JsonObject();
592         JsonObject errJson = new JsonObject();
593         
594         String hostUrl = SettingKey.getHostUrl(request) ;
595         String wxQueryString = SettingKey.getQueryStringByWx(request);
596         
597         String messid = request.getParameter("messid") ;
598         if (messid == null || "".equals(messid)) {
599             errJson.addProperty("warning", "必须传递 messid 参数");
600             json.add("error",errJson);
601             this.printJson(response, json.toString());
602             return ;
603         }
604
605         Integer ret = null ;
606         try {
607             SpObserver.setDBtoDemo();
608             //更新 demo 数据库 的撤回时间
609             ret = sysMessageInf.deleteDemoMessage(Integer.valueOf(messid)); 
610         }catch(DataAccessException e) {
611             e.printStackTrace();
612             errJson.addProperty("warning", "demo数据库错误:"+ e.getCause().getMessage());
613             json.add("error",errJson);
614             this.printJson(response, json.toString());
615             return ;
616         }catch (Exception e ) {
617             e.printStackTrace();
618             errJson.addProperty("warning", "demo数据库错误:"+ e.getMessage());
619             json.add("error",errJson);
620             this.printJson(response, json.toString());
621             return ;
622         }finally {
623             SpObserver.setDBtoInstance();
624         }
625         
626         
627         json.addProperty("success", "成功删除【" + ret  + "】条消息" );
628         json.addProperty("redirect",hostUrl + "/shopping/maintaince/messagelist.jsp"+(wxQueryString == null||"".equals(wxQueryString)?"":"?" + wxQueryString));
629         this.printJson(response, json.toString());
630         return ;
631     }
632     
633     public static String toString(Object obj){
634         if(obj==null)return "";
635         return obj.toString();
636     }
637 }