package cn.ksource.web.facade.message; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import cn.ksource.web.service.message.MessageRunable; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import cn.ksource.beans.GG_MESSAGE; import cn.ksource.core.dao.BaseDao; import cn.ksource.core.dao.SqlParameter; import cn.ksource.core.page.PageInfo; import cn.ksource.core.util.ConvertUtil; import cn.ksource.core.util.DateUtil; import cn.ksource.core.util.FileUtil; import cn.ksource.core.util.MyFileUploadException; import cn.ksource.core.util.ParamsMapUtil; import cn.ksource.core.util.StringUtil; import cn.ksource.core.util.ZipUtil; import cn.ksource.core.web.LoginUser; import cn.ksource.core.web.WebUtil; import cn.ksource.web.entity.message.CmsNews; import cn.ksource.web.service.colunm.ColunmService; import cn.ksource.web.service.file.FileService; import cn.ksource.web.service.message.MessageService; @Service("messageFacade") @SuppressWarnings("unchecked") public class MessageFacadeImpl implements MessageFacade { @Resource(name="messageService") private MessageService messageService; @Resource(name="colunmService") private ColunmService colunmService; @Resource(name="fileService") private FileService fileService; @Autowired private BaseDao baseDao; @Override public List queryMeunListById() { return messageService.queryMeunListById(); } @Override public boolean isShowAddButton(String categoryId) { //判断是否需要展示添加按钮 //如果此分类是列表展示,则显示添加按钮,如果此分类是单信息,则查询该分类下有无数据,如果有一条数据,则不显示添加按钮,如果无数据,则显示添加按钮 //通过分类id查询分类详情 Map colunmMap = colunmService.queryColunmById(categoryId); //判断该分类的类型 String type = ConvertUtil.obj2StrBlank(colunmMap.get("SHOW_TYPE")); boolean b = false; if(type.equals("1")) { b = true; } else if(type.equals("2")) { //查询该分类下有无信息 int count = messageService.queryMessageCountByCategoryId(categoryId); if(count==0) { b = true; } } return b; } /** * 保存信息内容 */ @Override public boolean save(CmsNews cmsNews, HttpServletRequest request) { String[] allowType = new String[]{"gif","jpg","jpeg","png"}; int categoryId = cmsNews.getCategoryId(); Map colunm = colunmService.queryColunmById(ConvertUtil.obj2StrBlank(categoryId)); cmsNews.setShenpiStatus(1); //判断是否需要标题图片 int titleimage = ConvertUtil.obj2Int(colunm.get("TITLEIMAGE")); String uploadUrl = new String(); if(titleimage==1) { try { uploadUrl = FileUtil.uploadFile4SpringMVC(request, "titleimage" ,"/upload/classify"+categoryId,allowType); //判断是否需要生成缩略图 int thumbnail = ConvertUtil.obj2Int(colunm.get("THUMBNAIL")); if(thumbnail!=1){ //获得生成的缩略图的等比或者强制宽和高 String widthStr = ConvertUtil.obj2StrBlank(colunm.get("TITLEIMAGE_WIDTH")); String heightStr = ConvertUtil.obj2StrBlank(colunm.get("TITLEIMAGE_HEIGHT")); if(!widthStr.equals("") && !heightStr.equals("") && !widthStr.equals("0") && !heightStr.equals("0")) { int width = ConvertUtil.obj2Int(widthStr); int height = ConvertUtil.obj2Int(heightStr); String pathPix = request.getSession().getServletContext().getRealPath("/"); boolean b = false; if(thumbnail==3) { b = true; } String newName = FileUtil.resizeForEqualImg(new File(pathPix+uploadUrl), width, height, b); uploadUrl = uploadUrl.replace(uploadUrl.substring(uploadUrl.lastIndexOf("/")+1), newName); } } cmsNews.setTitleimageurl(uploadUrl); } catch (MyFileUploadException e) { return false; } } messageService.saveMessage(cmsNews,request); return true; } // private CmsNews dealUploadFiles(HttpServletRequest request,CmsNews cmsNews) throws MyFileUploadException { // // List infos =FileUtil.uploadFiles(request, "/upload/attachment/", null); // List attachMentList = new ArrayList(); // for(FileUtil.FileInfo fileInfo:infos){ // if(fileInfo.getFilePath()==null){ // continue; // } // if(fileInfo.getFieldName().equals("infoFile")) { // SqlParameter map = new SqlParameter(); // map.put("FILENAME", fileInfo.getOriginalFilename()); // map.put("FILEPATH", fileInfo.getFilePath()); // map.put("FILETYPE", fileInfo.getExtName()); // map.put("FILESIZE", fileInfo.getFileSize()); // attachMentList.add(map); // } // } // cmsNews.setListAttachMents(attachMentList); // // return cmsNews; // } // /** * 查询指定分类下的所有信息列表 */ @Override public Map queryMessageListJson(String categoryId, int page, int pageSize) { return messageService.queryMessageListJson(categoryId,page,pageSize); } /** * 删除指定id的信息 */ @Override public void deleteMessage(String id) { messageService.deleteMessage(id); } /** * 通过信息id查询信息详情 */ @Override public Map queryMessageById(String messageId) { return messageService.queryMessageById(messageId); } /** * 修改信息 */ @Override public boolean updateMessage(CmsNews cmsNews, HttpServletRequest request) { String[] allowType = new String[]{"gif","jpg","jpeg","png"}; int categoryId = cmsNews.getCategoryId(); Map colunm = colunmService.queryColunmById(ConvertUtil.obj2StrBlank(categoryId)); //判断是否需要标题图片 int titleimage = ConvertUtil.obj2Int(colunm.get("TITLEIMAGE")); String uploadUrl = new String(); if(titleimage==1) { try { uploadUrl = FileUtil.uploadFile4SpringMVC(request, "titleimage" ,"/upload/classify"+categoryId,allowType); if(null!=uploadUrl) { //判断是否需要生成缩略图 int thumbnail = ConvertUtil.obj2Int(colunm.get("THUMBNAIL")); if(thumbnail!=1){ //获得生成的缩略图的等比或者强制宽和高 String widthStr = ConvertUtil.obj2StrBlank(colunm.get("TITLEIMAGE_WIDTH")); String heightStr = ConvertUtil.obj2StrBlank(colunm.get("TITLEIMAGE_HEIGHT")); if(!widthStr.equals("") && !heightStr.equals("") && !widthStr.equals("0") && !heightStr.equals("0")) { int width = ConvertUtil.obj2Int(widthStr); int height = ConvertUtil.obj2Int(heightStr); String pathPix = request.getSession().getServletContext().getRealPath("/"); boolean b = false; if(thumbnail==3) { b = true; } String newName = FileUtil.resizeForEqualImg(new File(pathPix+uploadUrl), width, height, b); uploadUrl = uploadUrl.replace(uploadUrl.substring(uploadUrl.lastIndexOf("/")+1), newName); } } cmsNews.setTitleimageurl(uploadUrl); } } catch (MyFileUploadException e) { return false; } } //上传附件 // try { // cmsNews = dealUploadFiles(request, cmsNews); // } catch (MyFileUploadException e) { // return false; // } messageService.updateMessage(cmsNews); //上传附件 LoginUser loginUser = WebUtil.getLoginUser(request); String createUserId = String.valueOf(loginUser.getLoginUser().get("ID")); String createUserName = String.valueOf(loginUser.getLoginUser().get("LOGINNAME")); Map params = ParamsMapUtil.getParameterMap(request); params.put("business_id", ConvertUtil.obj2Str(cmsNews.getId())); params.put("userId", createUserId); params.put("userName", createUserName); fileService.uploadFile(params); return true; } /** * 查询附件信息 */ @Override public List queryAttachment(String messageId) { return messageService.queryAttachment(messageId); } @Override public String saveZip(HttpServletRequest request) { String uploadUrl = new String(); String indexPath = new String(); //定义zip路径 /*String zipPackage = "/upload/zippackage"; try { uploadUrl = FileUtil.uploadFile4SpringMVC(request, "zippackage" ,zipPackage,new String[]{"zip"}); String pathPix = request.getSession().getServletContext().getRealPath("/"); try { //ZipUtil.decompress(pathPix+zipPackage,pathPix+uploadUrl); String unzipPath = ZipUtil.unzip(pathPix+uploadUrl,pathPix+zipPackage,"index.html"); String pathSuf = uploadUrl.substring(uploadUrl.lastIndexOf("/"),uploadUrl.lastIndexOf(".")); indexPath = zipPackage+pathSuf+"/"+unzipPath; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (MyFileUploadException e) { return ""; }*/ //fileService.uploadFile(request, "12345689789"); return indexPath; } @Override public void saveNum(List list) { String sql = "UPDATE CMS_NEWS SET SHOW_NUM = :SHOW_NUM WHERE ID = :ID"; baseDao.executeBatch(sql, list); } @Override public int querymessageCount(String categoryId) { StringBuilder builder = new StringBuilder("SELECT COUNT(ID) FROM CMS_NEWS WHERE CATEGORY_ID = :categoryId "); Map paramMap = new HashMap(); paramMap.put("categoryId", categoryId); int count = baseDao.queryForInteger(builder.toString(), paramMap); return count; } @Override public PageInfo querymessageData(PageInfo pageInfo,String categoryId) { StringBuilder builder = new StringBuilder("SELECT * FROM CMS_NEWS WHERE CATEGORY_ID = :categoryId "); Map paramMap = new HashMap(); paramMap.put("categoryId", categoryId); builder.append(" ORDER BY THETOP ASC,SHOW_NUM ASC "); PageInfo info = baseDao.queryforSplitPageInfo(pageInfo, builder.toString(), paramMap); return info; } @Override public List getMyMessageTitle(String messageType,String userId) { StringBuilder sql = new StringBuilder(); sql.append(" select m.title,m.WEB_URL url,r.id receiveId from gg_message m inner join gg_message_receiver r "); sql.append(" on m.id = r.message_Id where r.receiver_id = :userId and state = 1 "); SqlParameter param = new SqlParameter(); if(StringUtil.isNotBlank(messageType)){ sql.append(" and m.type = :messageType"); param.addValue("messageType", messageType); } param.addValue("userId", userId); sql.append(" order by m.send_time desc LIMIT 3 "); return baseDao.queryForList(sql.toString(), param); } @Override public void doSendMessage(GG_MESSAGE message, List receiverList) { if(message!=null){ message.insertOrUpdate(); if(receiverList!=null&&receiverList.size()>0){ String sql = "insert into gg_message_receiver " + " (id,receiver_id,receiver_name,message_id,state) values " + " (:id,:USER_ID,:USER_NAME,:messageId,:state)"; List list = new ArrayList(); String messageId = message.getId(); for(Map map:receiverList){ SqlParameter param = new SqlParameter(); map.put("id", StringUtil.getUUID()); map.put("state",1); map.put("messageId", messageId); param.setSource(map); list.add(param); } baseDao.executeBatch(sql,list); // messageService.sendMessage(message); } List msgs=getRoleLinkEmails(message); if(msgs!=null && msgs.size()>0) { Thread thread = new Thread(new MessageRunable(message,msgs)); thread.start(); } } } public List getRoleLinkEmails(GG_MESSAGE message) { String msgId = message.getId(); String selectSql = "SELECT B.ISWECHAT,B.ISPHONE,B.ISEMAIL,B.SJHM,B.EMAIL,B.OPEN_ID,B.REMIND_TYPE,B.ID AS USER_ID FROM GG_MESSAGE_RECEIVER A,GG_USER B WHERE A.RECEIVER_ID = B.ID AND B.ZT = 1 AND A.MESSAGE_ID = :msgId "; List msgs = baseDao.queryForList(selectSql,new SqlParameter("msgId",msgId)); return msgs; } @Override public void sendMessage(GG_MESSAGE message, List receiverList) { if(message!=null){ message.insertOrUpdate(); if(receiverList!=null&&receiverList.size()>0){ String sql = "INSERT INTO GG_MESSAGE_RECEIVER " + " (ID,RECEIVER_ID,RECEIVER_NAME,MESSAGE_ID,STATE,WX_URL) values " + " (:id,:USER_ID,:USER_NAME,:messageId,:state,:wx_url)"; List list = new ArrayList(); String messageId = message.getId(); for(Map map:receiverList){ SqlParameter param = new SqlParameter(); map.put("id", StringUtil.getUUID()); map.put("state",1); map.put("messageId", messageId); param.setSource(map); list.add(param); } baseDao.executeBatch(sql,list); messageService.sendNoticeMessage(message); } } } @Override public List getMyMessage(HttpServletRequest request,GG_MESSAGE message,String userId,String state) { StringBuilder sql = new StringBuilder(); SqlParameter param = new SqlParameter(); param.addValue("userId", userId); sql.append(" select m.*,r.state,r.id receiveId from gg_message m inner join gg_message_receiver r "); sql.append(" on m.id = r.message_Id where r.receiver_id = :userId "); //根据标题查找标题 if(StringUtil.isNotBlank(message.getTitle())){ sql.append(" and m.title like :title "); param.addValue("title","%"+ message.getTitle() +"%"); } //根据内容查找标题 if(StringUtil.isNotBlank(message.getContent())){ sql.append(" and m.content like :content "); param.addValue("content","%"+ message.getContent() +"%"); } //根据类型查找 if(message.getType()!=null){ sql.append(" and type = :type "); param.addValue("type",message.getType()); } //根据状态查找 if(StringUtil.isNotBlank(state)){ sql.append(" and r.state = :state "); param.addValue("state",state); } sql.append(" order by m.send_time desc "); return baseDao.queryforSplitPage(request,sql.toString(),param); } @Override public Integer getMyMessageCount(GG_MESSAGE message,String userId,String state) { StringBuilder sql = new StringBuilder(); SqlParameter param = new SqlParameter(); param.addValue("userId", userId); sql.append(" select count(m.id) from gg_message m inner join gg_message_receiver r "); sql.append(" on m.id = r.message_Id where r.receiver_id = :userId "); //根据标题查找标题 if(StringUtil.isNotBlank(message.getTitle())){ sql.append(" and m.title like :title "); param.addValue("title","%"+ message.getTitle() +"%"); } //根据内容查找标题 if(StringUtil.isNotBlank(message.getContent())){ sql.append(" and m.content like :content "); param.addValue("content","%"+ message.getContent() +"%"); } //根据类型查找 if(message.getType()!=null){ sql.append(" and m.type = :type "); param.addValue("type",message.getType()); } //根据状态查找 if(StringUtil.isNotBlank(state)){ sql.append(" and r.state = :state "); param.addValue("state",state); } return baseDao.queryForInteger(sql.toString(),param); } @Override public void doReadMessage(String businessId, String receiverId) { String sql = "update gg_message m inner join gg_message_receiver r on m.id = r.message_id set state=2, READ_TIME=:curDate where "+ " m.BUSINESS_ID=:businessId and r.RECEIVER_ID=:receviceId"; Long curDate = DateUtil.getCurrentDate14(); SqlParameter param = new SqlParameter(); param.addValue("businessId", businessId) .addValue("receviceId", receiverId) .addValue("curDate", curDate); baseDao.execute(sql, param); } @Override public int getMyMessageCount(String messageType, String userId) { StringBuilder sql = new StringBuilder(); sql.append(" select count(m.id) from gg_message m inner join gg_message_receiver r "); sql.append(" on m.id = r.message_Id where r.receiver_id = :userId and state = 1 "); SqlParameter param = new SqlParameter(); if(StringUtil.isNotBlank(messageType)){ sql.append(" and m.type = :messageType"); param.addValue("messageType", messageType); } param.addValue("userId", userId); sql.append(" order by m.send_time asc LIMIT 5 "); return baseDao.queryForInteger(sql.toString(), param); } }