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