package com.yc.open.controller; import com.alibaba.fastjson.JSON; import com.yc.action.BaseAction; import com.yc.action.build.FormidVersion; import com.yc.api.utils.SQLUtils; import com.yc.exception.CallBackMessage; import com.yc.factory.FactoryBean; import com.yc.multiData.MultiDataSource; import com.yc.multiData.SpObserver; import com.yc.open.utils.ApiUtils; import com.yc.open.utils.CallBackMessageToObject; import com.yc.sdk.WebSocketMessage.action.WebSocketMessageServer; import com.yc.service.BaseService; import com.yc.utils.SessionKey; import net.coobird.thumbnailator.Thumbnails; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.LobRetrievalFailureException; import org.springframework.jdbc.core.support.AbstractLobStreamingResultSetExtractor; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.sql.ResultSet; import java.sql.SQLException; import java.util.*; /** * 测试用例 */ @RestController public class EchoController extends BaseAction { @RequestMapping(value = "/open/echoget.do",method = RequestMethod.GET) public @ResponseBody Object echo(HttpServletRequest request){ //验证已在filter里面做,这里只需要处理业务逻辑 CallBackMessageToObject callBackMessage=new CallBackMessageToObject(); return callBackMessage.sendSuccessMessage(request.getParameter("echo")); } @RequestMapping(value = "/open/echopost.do",method = RequestMethod.POST) public @ResponseBody Object echoPost(HttpServletRequest request){ //验证已在filter里面做,这里只需要处理业务逻辑 CallBackMessageToObject callBackMessage=new CallBackMessageToObject(); try { Map map = (Map) request.getAttribute(ApiUtils.MAP_OBJECT); if(map==null){ return callBackMessage.sendSuccessMessage(request.getParameter("data")); }else { return callBackMessage.setData(request.getParameter("data")).sendSuccessMessage("成功"); } }catch (Exception e){ return callBackMessage.sendErrorMessage(e.getMessage()); } } /** * 模拟提交到第三方系统 * @param request * @return */ @RequestMapping(value = "/test.do") public @ResponseBody void testCall(HttpServletRequest request){ try { // TokenUtils.getToken(); } catch (Exception e) { e.printStackTrace(); } } /** * 模拟提交到第三方系统 * @param request * @return */ @RequestMapping(value = "/open/postData.do",method = RequestMethod.POST) public @ResponseBody Object dataPost(HttpServletRequest request){ //验证已在filter里面做,这里只需要处理业务逻辑 CallBackMessageToObject callBackMessage=new CallBackMessageToObject(); try { Map map = (Map) request.getAttribute(ApiUtils.MAP_OBJECT); Random random=new Random(); boolean flg=false;//random.nextBoolean(); if(flg) { if (map == null) { return callBackMessage.setData("http://www.163.com").sendSuccessMessage("成功"); } else { return callBackMessage.setData("http://www.163.com").sendSuccessMessage("成功"); } }else{ throw new Exception("更新出错"); } }catch (Exception e){ return callBackMessage.sendErrorMessage(e.getMessage()); } } /** * 查看内存里对应数据源的版本号信息 * @param dbid * @param request * @return */ @RequestMapping(value = "/version/getv.do",method = RequestMethod.GET) public @ResponseBody Object getVersion(String dbid,String formid,HttpServletRequest request){ FormidVersion formidVersion=(FormidVersion)FactoryBean.getBean("FormidVersion"); CallBackMessageToObject callBackMessage=new CallBackMessageToObject(); return callBackMessage.setData(formidVersion.getFormVersion(dbid,formid)).sendSuccessMessage("ID:"+formidVersion); } /** * 查看内存里数据源信息 * @return */ @RequestMapping(value = "/db/dbInfo.do",method = RequestMethod.GET) public @ResponseBody Object getdbInfo(){ CallBackMessageToObject callBackMessage=new CallBackMessageToObject(); final List id=new ArrayList<>(); MultiDataSource.getcomm().forEach((key,value)->{ id.add(key); }); return callBackMessage.sendSuccessMessage(this+"=>"+id); } /** * 查看内存里webSocket用户信息 * @return */ @RequestMapping(value = "/db/wsInfo.do",method = RequestMethod.GET) public @ResponseBody Object wsInfo(){ CallBackMessageToObject callBackMessage=new CallBackMessageToObject(); final List id=new ArrayList<>(); WebSocketMessageServer.getOnlineUserList().forEach((key, value)->{ id.add(key); }); return callBackMessage.sendSuccessMessage(this+"=>"+id); } /** * 重新把附件表的缩略图更新一次,因为有很多缩略图旧数据是有问题 * @return */ @RequestMapping(value = "/attachn/refreshAttachments.do",method = RequestMethod.GET) public @ResponseBody Object refreshAttachmentFromOriginalPictureToSmallPicture(HttpServletRequest request){ CallBackMessage callBackMessage = new CallBackMessage(); try { SpObserver.setDBtoInstance("_" + request.getSession().getAttribute(SessionKey.DATA_BASE_ID)); BaseService baseService = (BaseService) FactoryBean.getBean("BaseService"); Map result= new HashMap(); long start=System.currentTimeMillis(); List> list = baseService.getSimpleJdbcTemplate().queryForList("select unid,seq from _sys_Attachment9 where filetype in('jpg','png','JPG','PNG') \n" + "union \n" + "select unid,seq from _sys_Attachment where filetype in('jpg','png','JPG','PNG')\n"); if(list!=null&&list.size()>0) { List>> lists = SQLUtils.splitList(list, 50);//分页处理,一次处理20条 lists.stream().forEach(subList->{ final StringBuilder sql=new StringBuilder(""); subList.stream().forEach(x -> { String unid = x.get("unid") + ""; String seq = x.get("seq") + ""; baseService.getJdbcTemplate().query(" declare @unid varchar(100)='" + unid + "',@seq int=" + seq + " \n declare @table table(fileType varchar(10),OriginalPicture image,ctype varchar(10))\n" + " insert into @table select filetype,OriginalPicture,'9' as ctype from _sys_Attachment9\n" + " where unid=@unid and seq=@seq\n" + " if @@ROWCOUNT=0 \n" + " insert into @table select filetype,OriginalPicture,'' as ctype from _sys_Attachment\n" + " where unid=@unid and seq=@seq\n" + "select * from @table", new AbstractLobStreamingResultSetExtractor() { @Override protected void handleNoRowFound() throws LobRetrievalFailureException { System.out.println(unid + ";" + seq + "-没数据"); } @Override protected void streamData(ResultSet resultSet) throws SQLException, IOException, DataAccessException { ByteArrayOutputStream outputStream = null; ByteArrayInputStream bais =null; try { do { byte[] byteData = resultSet.getBytes("OriginalPicture");//原图 String fileType = resultSet.getString("filetype");//图片类型 String type=resultSet.getString("ctype");//9还是19类型 bais = new ByteArrayInputStream(byteData); BufferedImage image = ImageIO.read(bais); outputStream = new ByteArrayOutputStream(); Thumbnails.of(image).scale(0.25).outputQuality(1).outputFormat(fileType).toOutputStream(outputStream); byte[] outData = outputStream.toByteArray(); // 将二进制数据转换为十六进制字符串 StringBuilder hexString = new StringBuilder(); for (byte b : outData) { hexString.append(String.format("%02x", b)); } sql.append("\n update a set SmallPicture =0x"+hexString.toString()+" from _sys_Attachment"+type+" a where unid='" + unid + "' and seq=" + seq); } while (resultSet.next()); } catch (Exception e) { e.printStackTrace(); }finally { if(outputStream!=null) outputStream.close(); if(bais!=null) bais.close(); } } }); }); try { SpObserver.setDBtoInstance("_" + request.getSession().getAttribute(SessionKey.DATA_BASE_ID)); baseService.getJdbcTemplate().update(sql.toString()); log.warn("批量更新50条成功"); } catch (Exception e) { e.printStackTrace(); } finally { SpObserver.setDBtoInstance(); } }); } long end=System.currentTimeMillis(); result.put("time",(end-start)/(3600000)); result.put("count",list==null?0:list.size()); log.warn(JSON.toJSONString(result)); callBackMessage.setInfo(result).sendSuccessMessageByDefault(); return callBackMessage.toJSONObject(); } catch (Exception e) { callBackMessage.sendErrorMessage(e.getMessage()); return callBackMessage.toJSONObject(); } finally { SpObserver.setDBtoInstance(); } } }