fs-danaus
2023-09-14 31400fffd7b31397d6d8882d3927e7b870924233
提交 | 用户 | age
a6a76f 1 package com.yc.open.controller;
F 2
31400f 3 import com.alibaba.fastjson.JSON;
a6a76f 4 import com.yc.action.BaseAction;
0a03f9 5 import com.yc.action.build.FormidVersion;
31400f 6 import com.yc.api.utils.SQLUtils;
F 7 import com.yc.exception.CallBackMessage;
a6a76f 8 import com.yc.factory.FactoryBean;
2b4227 9 import com.yc.multiData.MultiDataSource;
31400f 10 import com.yc.multiData.SpObserver;
a6a76f 11 import com.yc.open.utils.ApiUtils;
F 12 import com.yc.open.utils.CallBackMessageToObject;
b0744c 13 import com.yc.sdk.WebSocketMessage.action.WebSocketMessageServer;
31400f 14 import com.yc.service.BaseService;
F 15 import com.yc.utils.SessionKey;
16 import net.coobird.thumbnailator.Thumbnails;
17 import org.springframework.dao.DataAccessException;
18 import org.springframework.jdbc.LobRetrievalFailureException;
19 import org.springframework.jdbc.core.support.AbstractLobStreamingResultSetExtractor;
0a03f9 20 import org.springframework.web.bind.annotation.RequestMapping;
F 21 import org.springframework.web.bind.annotation.RequestMethod;
22 import org.springframework.web.bind.annotation.ResponseBody;
23 import org.springframework.web.bind.annotation.RestController;
a6a76f 24
31400f 25 import javax.imageio.ImageIO;
a6a76f 26 import javax.servlet.http.HttpServletRequest;
31400f 27 import java.awt.image.BufferedImage;
F 28 import java.io.ByteArrayInputStream;
29 import java.io.ByteArrayOutputStream;
30 import java.io.IOException;
31 import java.sql.ResultSet;
32 import java.sql.SQLException;
33 import java.util.*;
a6a76f 34
F 35 /**
36  * 测试用例
37  */
38 @RestController
39 public class EchoController extends BaseAction {
40
41     @RequestMapping(value = "/open/echoget.do",method = RequestMethod.GET)
42     public @ResponseBody Object echo(HttpServletRequest request){
43         //验证已在filter里面做,这里只需要处理业务逻辑
44         CallBackMessageToObject callBackMessage=new CallBackMessageToObject();
45         return callBackMessage.sendSuccessMessage(request.getParameter("echo"));
46     }
47     @RequestMapping(value = "/open/echopost.do",method = RequestMethod.POST)
48     public @ResponseBody Object echoPost(HttpServletRequest request){
49         //验证已在filter里面做,这里只需要处理业务逻辑
50         CallBackMessageToObject callBackMessage=new CallBackMessageToObject();
51         try {
52             Map map = (Map) request.getAttribute(ApiUtils.MAP_OBJECT);
53             if(map==null){
fe2b91 54                 return callBackMessage.sendSuccessMessage(request.getParameter("data"));
a6a76f 55             }else {
1f813e 56                 return callBackMessage.setData(request.getParameter("data")).sendSuccessMessage("成功");
a6a76f 57             }
F 58         }catch (Exception e){
59             return callBackMessage.sendErrorMessage(e.getMessage());
60         }
61
62     }
63     /**
64      * 模拟提交到第三方系统
65      * @param request
66      * @return
67      */
1f813e 68     @RequestMapping(value = "/test.do")
a6a76f 69     public @ResponseBody void testCall(HttpServletRequest request){
1f813e 70
a6a76f 71         try {
1f813e 72            // TokenUtils.getToken();
a6a76f 73         } catch (Exception e) {
F 74             e.printStackTrace();
75         }
76     }
77     /**
78      * 模拟提交到第三方系统
79      * @param request
80      * @return
81      */
82     @RequestMapping(value = "/open/postData.do",method = RequestMethod.POST)
83     public @ResponseBody Object dataPost(HttpServletRequest request){
84         //验证已在filter里面做,这里只需要处理业务逻辑
85         CallBackMessageToObject callBackMessage=new CallBackMessageToObject();
86         try {
87             Map map = (Map) request.getAttribute(ApiUtils.MAP_OBJECT);
88             Random random=new Random();
89             boolean flg=false;//random.nextBoolean();
90             if(flg) {
91                 if (map == null) {
92                     return callBackMessage.setData("http://www.163.com").sendSuccessMessage("成功");
93                 } else {
94                     return callBackMessage.setData("http://www.163.com").sendSuccessMessage("成功");
95                 }
96             }else{
97                 throw  new  Exception("更新出错");
98             }
99         }catch (Exception e){
100             return callBackMessage.sendErrorMessage(e.getMessage());
101         }
102
103     }
0a03f9 104
F 105     /**
106      * 查看内存里对应数据源的版本号信息
107      * @param dbid
108      * @param request
109      * @return
110      */
111     @RequestMapping(value = "/version/getv.do",method = RequestMethod.GET)
112     public @ResponseBody Object getVersion(String dbid,String formid,HttpServletRequest request){
113         FormidVersion formidVersion=(FormidVersion)FactoryBean.getBean("FormidVersion");
114         CallBackMessageToObject callBackMessage=new CallBackMessageToObject();
115        return   callBackMessage.setData(formidVersion.getFormVersion(dbid,formid)).sendSuccessMessage("ID:"+formidVersion);
116     }
2b4227 117     /**
F 118      * 查看内存里数据源信息
119      * @return
120      */
121     @RequestMapping(value = "/db/dbInfo.do",method = RequestMethod.GET)
122     public @ResponseBody Object getdbInfo(){
123         CallBackMessageToObject callBackMessage=new CallBackMessageToObject();
124         final List<String> id=new ArrayList<>();
125         MultiDataSource.getcomm().forEach((key,value)->{
126             id.add(key);
127         });
128         return   callBackMessage.sendSuccessMessage(this+"=>"+id);
129     }
b0744c 130     /**
F 131      * 查看内存里webSocket用户信息
132      * @return
133      */
134     @RequestMapping(value = "/db/wsInfo.do",method = RequestMethod.GET)
135     public @ResponseBody Object wsInfo(){
136         CallBackMessageToObject callBackMessage=new CallBackMessageToObject();
137         final List<String> id=new ArrayList<>();
138         WebSocketMessageServer.getOnlineUserList().forEach((key, value)->{
139             id.add(key);
140         });
141         return   callBackMessage.sendSuccessMessage(this+"=>"+id);
142     }
31400f 143     /**
F 144      * 重新把附件表的缩略图更新一次,因为有很多缩略图旧数据是有问题
145      * @return
146      */
147     @RequestMapping(value = "/attachn/refreshAttachments.do",method = RequestMethod.GET)
148     public @ResponseBody Object refreshAttachmentFromOriginalPictureToSmallPicture(HttpServletRequest request){
149         CallBackMessage callBackMessage = new CallBackMessage();
150         try {
151             SpObserver.setDBtoInstance("_" + request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
152             BaseService baseService = (BaseService) FactoryBean.getBean("BaseService");
153             Map result= new HashMap();
154             long start=System.currentTimeMillis();
155             List<Map<String, Object>> list = baseService.getSimpleJdbcTemplate().queryForList("select unid,seq from _sys_Attachment9 where filetype in('jpg','png','JPG','PNG') \n" +
156                     "union \n" +
157                     "select unid,seq from _sys_Attachment where filetype in('jpg','png','JPG','PNG')\n");
158             if(list!=null&&list.size()>0) {
159                 List<List<Map<String, Object>>> lists = SQLUtils.splitList(list, 50);//分页处理,一次处理20条
160                 lists.stream().forEach(subList->{
161                    final StringBuilder sql=new StringBuilder("");
162                     subList.stream().forEach(x -> {
163                         String unid = x.get("unid") + "";
164                         String seq = x.get("seq") + "";
165                         baseService.getJdbcTemplate().query(" declare @unid varchar(100)='" + unid + "',@seq int=" + seq +
166                                 " \n declare @table table(fileType varchar(10),OriginalPicture image,ctype varchar(10))\n" +
167                                 " insert into @table select filetype,OriginalPicture,'9' as ctype from _sys_Attachment9\n" +
168                                 " where unid=@unid and seq=@seq\n" +
169                                 " if @@ROWCOUNT=0 \n" +
170                                 "  insert into @table select filetype,OriginalPicture,'' as ctype from _sys_Attachment\n" +
171                                 "  where unid=@unid and seq=@seq\n" +
172                                 "select * from @table", new AbstractLobStreamingResultSetExtractor() {
173                             @Override
174                             protected void handleNoRowFound() throws LobRetrievalFailureException {
175                                 System.out.println(unid + ";" + seq + "-没数据");
176                             }
177                             @Override
178                             protected void streamData(ResultSet resultSet) throws SQLException, IOException, DataAccessException {
179                                 ByteArrayOutputStream outputStream = null;
180                                 ByteArrayInputStream bais =null;
181                                 try {
182                                     do {
183                                         byte[] byteData = resultSet.getBytes("OriginalPicture");//原图
184                                         String fileType = resultSet.getString("filetype");//图片类型
185                                         String type=resultSet.getString("ctype");//9还是19类型
186                                          bais = new ByteArrayInputStream(byteData);
187                                         BufferedImage image = ImageIO.read(bais);
188                                         outputStream = new ByteArrayOutputStream();
189                                         Thumbnails.of(image).scale(0.25).outputQuality(1).outputFormat(fileType).toOutputStream(outputStream);
190                                         byte[] outData = outputStream.toByteArray();
191                                         // 将二进制数据转换为十六进制字符串
192                                         StringBuilder hexString = new StringBuilder();
193                                         for (byte b : outData) {
194                                             hexString.append(String.format("%02x", b));
195                                         }
196
197                                         sql.append("\n update a set SmallPicture =0x"+hexString.toString()+" from _sys_Attachment"+type+" a where unid='" + unid + "' and seq=" + seq);
198                                     } while (resultSet.next());
199                                 } catch (Exception e) {
200                                     e.printStackTrace();
201                                 }finally {
202                                     if(outputStream!=null) outputStream.close();
203                                     if(bais!=null) bais.close();
204                                 }
205                             }
206                         });
207                     });
208                     try {
209                         SpObserver.setDBtoInstance("_" + request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
210                         baseService.getJdbcTemplate().update(sql.toString());
211                         log.warn("批量更新50条成功");
212                     } catch (Exception e) {
213                         e.printStackTrace();
214                     } finally {
215                         SpObserver.setDBtoInstance();
216                     }
217                 });
218             }
219             long end=System.currentTimeMillis();
220             result.put("time",(end-start)/(3600000));
221             result.put("count",list==null?0:list.size());
222             log.warn(JSON.toJSONString(result));
223             callBackMessage.setInfo(result).sendSuccessMessageByDefault();
224             return callBackMessage.toJSONObject();
225         } catch (Exception e) {
226             callBackMessage.sendErrorMessage(e.getMessage());
227             return callBackMessage.toJSONObject();
228         } finally {
229             SpObserver.setDBtoInstance();
230         }
231     }
232
a6a76f 233 }