Przeglądaj źródła

新增行短稽核消息页面

wuzd 4 lat temu
rodzic
commit
e865f83a6d

+ 96 - 4
tnc-system/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java

@@ -22,6 +22,7 @@ import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.message.websocket.WebSocket;
 import org.jeecg.modules.message.websocket.WebSocket;
 import org.jeecg.modules.system.entity.SysAnnouncement;
 import org.jeecg.modules.system.entity.SysAnnouncement;
 import org.jeecg.modules.system.entity.SysAnnouncementSend;
 import org.jeecg.modules.system.entity.SysAnnouncementSend;
+import org.jeecg.modules.system.entity.vo.SysAnnouncementVO;
 import org.jeecg.modules.system.service.ISysAnnouncementSendService;
 import org.jeecg.modules.system.service.ISysAnnouncementSendService;
 import org.jeecg.modules.system.service.ISysAnnouncementService;
 import org.jeecg.modules.system.service.ISysAnnouncementService;
 import org.jeecg.modules.system.service.impl.SysBaseApiImpl;
 import org.jeecg.modules.system.service.impl.SysBaseApiImpl;
@@ -45,10 +46,8 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.IOException;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.lang.reflect.Field;
+import java.util.*;
 
 
 import static org.jeecg.common.constant.CommonConstant.ANNOUNCEMENT_SEND_STATUS_1;
 import static org.jeecg.common.constant.CommonConstant.ANNOUNCEMENT_SEND_STATUS_1;
 
 
@@ -115,6 +114,27 @@ public class SysAnnouncementController {
 		return result;
 		return result;
 	}
 	}
 
 
+	@RequestMapping(value = "/custom/list", method = RequestMethod.GET)
+	public Result<IPage<SysAnnouncement>> queryPageList_custom(SysAnnouncementVO sysAnnouncement,
+														@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+														@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+														HttpServletRequest req) {
+		Result<IPage<SysAnnouncement>> result = new Result<IPage<SysAnnouncement>>();
+		sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_0.toString());
+		QueryWrapper<SysAnnouncement> queryWrapper = QueryGenerator.initQueryWrapper(sysAnnouncement, req.getParameterMap());
+		Page<SysAnnouncement> page = new Page<SysAnnouncement>(pageNo,pageSize);
+
+		// 查询字段
+		queryWrapper.select("(select GROUP_CONCAT(DISTINCT tu.realname) from sys_announcement_send ts LEFT JOIN sys_user tu on ts.user_id = tu.id where ts.annt_id = sys_announcement.id GROUP BY ts.annt_id) user_ids",
+				"sys_announcement.id","sys_announcement.titile","sys_announcement.msg_content","sys_announcement.start_time","sys_announcement.end_time","sys_announcement.sender","sys_announcement.priority","sys_announcement.msg_category","sys_announcement.msg_type","sys_announcement.send_status","sys_announcement.send_time","sys_announcement.cancel_time","sys_announcement.del_flag","sys_announcement.create_by","sys_announcement.create_time","sys_announcement.update_by","sys_announcement.update_time","sys_announcement.bus_type","sys_announcement.bus_id","sys_announcement.open_type","sys_announcement.open_page","sys_announcement.msg_abstract","sys_announcement.dt_task_id");
+		String sqlSelect = queryWrapper.getSqlSelect();
+
+		IPage<SysAnnouncement> pageList = sysAnnouncementService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
 	/**
 	/**
 	  *   添加
 	  *   添加
 	 * @param sysAnnouncement
 	 * @param sysAnnouncement
@@ -393,12 +413,55 @@ public class SysAnnouncementController {
         //导出文件名称
         //导出文件名称
         mv.addObject(NormalExcelConstants.FILE_NAME, "系统通告列表");
         mv.addObject(NormalExcelConstants.FILE_NAME, "系统通告列表");
         mv.addObject(NormalExcelConstants.CLASS, SysAnnouncement.class);
         mv.addObject(NormalExcelConstants.CLASS, SysAnnouncement.class);
+		String fields = fields_exclude("userIds");
+		mv.addObject(NormalExcelConstants.EXPORT_FIELDS,fields);
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("系统通告列表数据", "导出人:"+user.getRealname(), "导出信息"));
         mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("系统通告列表数据", "导出人:"+user.getRealname(), "导出信息"));
         mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
         mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
         return mv;
         return mv;
     }
     }
 
 
+	@RequestMapping(value = "/custom/exportXls")
+	public ModelAndView exportXls_custom(SysAnnouncement sysAnnouncement,HttpServletRequest req) {
+		Result<IPage<SysAnnouncement>> result = new Result<IPage<SysAnnouncement>>();
+		sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_0.toString());
+		QueryWrapper<SysAnnouncement> queryWrapper = QueryGenerator.initQueryWrapper(sysAnnouncement, req.getParameterMap());
+
+		// 查询字段
+		queryWrapper.select("(select GROUP_CONCAT(DISTINCT tu.realname) from sys_announcement_send ts LEFT JOIN sys_user tu on ts.user_id = tu.id where ts.annt_id = sys_announcement.id GROUP BY ts.annt_id) user_ids",
+				"sys_announcement.id","sys_announcement.titile","sys_announcement.msg_content","sys_announcement.start_time","sys_announcement.end_time","sys_announcement.sender","sys_announcement.priority","sys_announcement.msg_category","sys_announcement.msg_type","sys_announcement.send_status","sys_announcement.send_time","sys_announcement.cancel_time","sys_announcement.del_flag","sys_announcement.create_by","sys_announcement.create_time","sys_announcement.update_by","sys_announcement.update_time","sys_announcement.bus_type","sys_announcement.bus_id","sys_announcement.open_type","sys_announcement.open_page","sys_announcement.msg_abstract","sys_announcement.dt_task_id");
+		String sqlSelect = queryWrapper.getSqlSelect();
+
+		List<SysAnnouncement> pageList = sysAnnouncementService.list(queryWrapper);
+
+		//导出文件名称
+		JeecgEntityExcelView jeecgEntityExcelView = new JeecgEntityExcelView();
+
+		ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+		mv.addObject(NormalExcelConstants.FILE_NAME, "系统通告列表");
+		mv.addObject(NormalExcelConstants.CLASS, SysAnnouncement.class);
+		LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+		mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("系统通告列表数据", "导出人:"+user.getRealname(), "导出信息"));
+		mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+		return mv;
+	}
+
+	private String fields_exclude(String... excFiled){
+		List<Field> excludeList = new ArrayList(Arrays.asList(excFiled));
+
+		List<String> exportFieldsList = new ArrayList<>();
+
+		Field[] fields = SysAnnouncement.class.getDeclaredFields();
+		List<Field> list = new ArrayList(Arrays.asList(fields));
+		for(Field field : list){
+			if(!excludeList.contains(field.getName())){
+				exportFieldsList.add(field.getName());
+			}
+		}
+
+		return exportFieldsList != null && exportFieldsList.size()>0 ? String.join(",", exportFieldsList) : "";
+	}
+
     /**
     /**
      * 通过excel导入数据
      * 通过excel导入数据
      *
      *
@@ -506,4 +569,33 @@ public class SysAnnouncementController {
         return modelAndView;
         return modelAndView;
     }
     }
 
 
+	@GetMapping("/showAnnUser/{id}")
+	public ModelAndView showAnnUserContent(ModelAndView modelAndView, @PathVariable("id") String id, HttpServletRequest request) {
+		SysAnnouncement announcement = sysAnnouncementService.getById(id);
+
+		if (announcement != null) {
+			boolean tokenOK = false;
+			try {
+				// 验证Token有效性
+				tokenOK = TokenUtils.verifyToken(request, sysBaseApi, redisUtil);
+			} catch (Exception ignored) {
+			}
+			// 判断是否传递了Token,并且Token有效,如果传了就不做查看限制,直接返回
+			// 如果Token无效,就做查看限制:只能查看已发布的
+			if (tokenOK || ANNOUNCEMENT_SEND_STATUS_1.equals(announcement.getSendStatus())) {
+				String ann_id = announcement.getId();
+				List<Map<String, Object>> annUsers_list = sysAnnouncementSendService.listAnnUser(ann_id);
+
+				Map<String,Object> result = new HashMap<>();
+				result.put("ann",announcement);
+				result.put("sendUsers",annUsers_list);
+				modelAndView.addObject("data", result);
+				modelAndView.setViewName("announcement/showAnnUserContent");
+				return modelAndView;
+			}
+		}
+		modelAndView.setStatus(HttpStatus.NOT_FOUND);
+		return modelAndView;
+	}
+
 }
 }

+ 1 - 0
tnc-system/src/main/java/org/jeecg/modules/system/entity/SysAnnouncement.java

@@ -122,6 +122,7 @@ public class SysAnnouncement implements Serializable {
     /**
     /**
      * 指定用户
      * 指定用户
      **/
      **/
+    @Excel(name = "通告对象", width = 15)
     private java.lang.String userIds;
     private java.lang.String userIds;
     /**
     /**
      * 业务类型(email:邮件 bpm:流程)
      * 业务类型(email:邮件 bpm:流程)

+ 26 - 0
tnc-system/src/main/java/org/jeecg/modules/system/entity/vo/SysAnnouncementVO.java

@@ -0,0 +1,26 @@
+package org.jeecg.modules.system.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecg.modules.system.entity.SysAnnouncement;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 系统通告表
+ * @Author: jeecg-boot
+ * @Date:  2019-01-02
+ * @Version: V1.0
+ */
+@Data
+@TableName("sys_announcement")
+public class SysAnnouncementVO extends SysAnnouncement {
+    private String search_title;
+    private String[] search_title_arr;
+}

+ 2 - 0
tnc-system/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementMapper.java

@@ -3,10 +3,12 @@ package org.jeecg.modules.system.mapper;
 import java.util.List;
 import java.util.List;
 
 
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.jeecg.modules.system.entity.SysAnnouncement;
 import org.jeecg.modules.system.entity.SysAnnouncement;
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.jeecg.modules.system.entity.vo.SysAnnouncementVO;
 
 
 /**
 /**
  * @Description: 系统通告表
  * @Description: 系统通告表

+ 5 - 0
tnc-system/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementSendMapper.java

@@ -1,8 +1,10 @@
 package org.jeecg.modules.system.mapper;
 package org.jeecg.modules.system.mapper;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.jeecg.modules.system.entity.SysAnnouncementSend;
 import org.jeecg.modules.system.entity.SysAnnouncementSend;
 import org.jeecg.modules.system.model.AnnouncementSendModel;
 import org.jeecg.modules.system.model.AnnouncementSendModel;
 
 
@@ -32,4 +34,7 @@ public interface SysAnnouncementSendMapper extends BaseMapper<SysAnnouncementSen
 	 */
 	 */
 	public List<AnnouncementSendModel> getMyAnnouncementSendList(Page<AnnouncementSendModel> page,@Param("announcementSendModel") AnnouncementSendModel announcementSendModel);
 	public List<AnnouncementSendModel> getMyAnnouncementSendList(Page<AnnouncementSendModel> page,@Param("announcementSendModel") AnnouncementSendModel announcementSendModel);
 
 
+
+	@Select("select any_value(tu.realname) realname,count(1) num from sys_announcement_send t left join sys_user tu on t.user_id=tu.id where t.annt_id = #{anntId} GROUP BY tu.id;")
+	public List<Map<String,Object>> listAnnUser(@Param("anntId") String anntId);
 }
 }

+ 3 - 0
tnc-system/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementSendService.java

@@ -1,7 +1,9 @@
 package org.jeecg.modules.system.service;
 package org.jeecg.modules.system.service;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
+import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.system.entity.SysAnnouncementSend;
 import org.jeecg.modules.system.entity.SysAnnouncementSend;
 import org.jeecg.modules.system.model.AnnouncementSendModel;
 import org.jeecg.modules.system.model.AnnouncementSendModel;
 
 
@@ -31,4 +33,5 @@ public interface ISysAnnouncementSendService extends IService<SysAnnouncementSen
 	 */
 	 */
 	public Page<AnnouncementSendModel> getMyAnnouncementSendPage(Page<AnnouncementSendModel> page,AnnouncementSendModel announcementSendModel);
 	public Page<AnnouncementSendModel> getMyAnnouncementSendPage(Page<AnnouncementSendModel> page,AnnouncementSendModel announcementSendModel);
 
 
+	public List<Map<String,Object>> listAnnUser(String anntId);
 }
 }

+ 6 - 0
tnc-system/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementSendServiceImpl.java

@@ -1,6 +1,7 @@
 package org.jeecg.modules.system.service.impl;
 package org.jeecg.modules.system.service.impl;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 
 
@@ -36,4 +37,9 @@ public class SysAnnouncementSendServiceImpl extends ServiceImpl<SysAnnouncementS
 		 return page.setRecords(sysAnnouncementSendMapper.getMyAnnouncementSendList(page, announcementSendModel));
 		 return page.setRecords(sysAnnouncementSendMapper.getMyAnnouncementSendList(page, announcementSendModel));
 	}
 	}
 
 
+	@Override
+	public List<Map<String, Object>> listAnnUser(String anntId) {
+		return sysAnnouncementSendMapper.listAnnUser(anntId);
+	}
+
 }
 }

+ 144 - 0
tnc-system/src/main/resources/templates/announcement/showAnnUserContent.ftl

@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html lang="zh">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
+    <title>通告详情</title>
+    <style>
+
+        body {
+            margin: 0;
+            padding: 20px 16px 12px;
+            background-color: #fafafa;
+        }
+
+        .rich_media_title {
+            font-size: 22px;
+            line-height: 1.4;
+            margin: 0 0 14px;
+        }
+
+        .meta_content {
+            margin-bottom: 22px;
+            line-height: 20px;
+            font-size: 0;
+            word-wrap: break-word;
+            -webkit-hyphens: auto;
+            -ms-hyphens: auto;
+            hyphens: auto;
+        }
+
+        .rich_media_meta {
+            display: inline-block;
+            vertical-align: middle;
+            margin: 0 10px 10px 0;
+            font-size: 15px;
+            -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+        }
+
+        .rich_media_meta.priority {
+            padding: 0 4px;
+            font-size: 12px;
+            line-height: 1.67;
+            border: 1px solid #d9d9d9;
+            border-radius: 4px;
+            -moz-border-radius: 4px;
+            -webkit-border-radius: 4px;
+            width: auto;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            white-space: nowrap;
+            word-wrap: normal;
+            max-width: 70%;
+            font-style: normal;
+            letter-spacing: normal;
+            background: rgba(0, 0, 0, 0.05);
+            color: rgba(0, 0, 0, 0.3);
+            margin-right: 8px;
+        }
+
+        .rich_media_meta.H {
+            color: #f5222d;
+            background: #fff1f0;
+            border-color: #ffcfbf;
+        }
+
+
+        .rich_media_meta.M {
+            color: #fa8c16;
+            background: #fff7e6;
+            border-color: #ffe59a;
+        }
+
+        .rich_media_meta.text {
+            color: rgba(0, 0, 0, 0.3);
+        }
+
+        img {
+            max-width: 100%;
+            height: auto;
+        }
+
+        /* 滚动条优化 start */
+        ::-webkit-scrollbar{
+            width:8px;
+            height:8px;
+        }
+        ::-webkit-scrollbar-track{
+            background: #f6f6f6;
+            border-radius:2px;
+        }
+        ::-webkit-scrollbar-thumb{
+            background: #cdcdcd;
+            border-radius:2px;
+        }
+        ::-webkit-scrollbar-thumb:hover{
+            background: #747474;
+        }
+        ::-webkit-scrollbar-corner {
+            background: #f6f6f6;
+        }
+        /* 滚动条优化 end */
+
+        .send-users-box{
+            margin-top: 20px;
+        }
+    </style>
+</head>
+<body>
+<div>
+    <h2 class="rich_media_title">${data.ann.titile}</h2>
+    <div class="meta_content">
+        <#if data.ann.priority??>
+            <span class="rich_media_meta priority ${data.ann.priority}">
+                <#if data.ann.priority == "H">
+                    高
+                <#elseif data.ann.priority == "M">
+                    中
+                <#elseif data.ann.priority == "L">
+                    低
+                <#else >
+                    ${data.ann.priority}
+                </#if>
+            </span>
+        </#if>
+        <#if data.ann.sender??>
+        <span class="rich_media_meta text">${data.ann.sender}</span>
+        </#if>
+        <#if data.ann.sendTime??>
+        <span class="rich_media_meta text">${data.ann.sendTime?string('yyyy年MM月dd日')}</span>
+        </#if>
+    </div>
+</div>
+<div>
+    ${data.ann.msgContent!''}
+</div>
+<div class="send-users-box">
+    <label>通告对象:</label>
+    <#list data.sendUsers as send>
+        ${send.realname}
+    </#list>
+</div>
+</body>
+</html>