src/main/java/org/springblade/modules/system/controller/DeptController.java
@@ -124,6 +124,17 @@ return R.data(tree); } /** * 懒加载获取部门树形结构(包含用户数据) * @return */ @GetMapping("/lazy-tree-user") public R<List<DeptVO>> lazyTreeUser(String tenantId, Long parentId, BladeUser bladeUser) { List<DeptVO> tree = deptService.lazyTreeUser(Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()), parentId); return R.data(tree); } /** * 懒加载获取部门树形结构,不包含顶级管理员公安局 */ src/main/java/org/springblade/modules/system/mapper/DeptMapper.java
@@ -16,6 +16,7 @@ */ package org.springblade.modules.system.mapper; import com.baomidou.mybatisplus.annotation.SqlParser; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.springblade.modules.system.entity.Dept; import org.springblade.modules.system.vo.DeptVO; @@ -85,4 +86,11 @@ * 懒加载获取部门树形结构,不包含顶级管理员公安局 */ List<DeptVO> securityLazyTree(String tenantId, Long parentId); /** * 懒加载获取部门树形结构(包含用户数据) * @return */ @SqlParser(filter=true) List<DeptVO> lazyTreeUser(String tenantId, Long parentId); } src/main/java/org/springblade/modules/system/mapper/DeptMapper.xml
@@ -128,6 +128,43 @@ ORDER BY dept.sort </select> <!--懒加载获取部门树形结构(包含用户数据)--> <select id="lazyTreeUser" resultMap="treeNodeResultMap" > select DISTINCT * from ( (SELECT dept.id, dept.parent_id, dept.dept_name AS title, dept.id AS "value", dept.id AS "key", ( SELECT CASE WHEN count(1) > 0 THEN 1 ELSE 0 END FROM blade_dept WHERE parent_id = dept.id and is_deleted = 0 ) AS "has_children" FROM blade_dept dept WHERE dept.is_deleted = 0 ) union (select id, dept_id parent_id, real_name AS title, id AS "value", id AS "key", 0 as "has_children" from blade_user ) )c </select> <select id="lazyTrees" resultMap="treeNodeResultMap" > src/main/java/org/springblade/modules/system/mapper/UserMapper.java
@@ -61,4 +61,10 @@ */ List<UserExcel> exportUser(@Param("ew") Wrapper<User> queryWrapper); /** * 通过 身份证号查询用户信息 * @param idCardNo 身份证号 * @return */ User getUserInfoByIdCardNo(String idCardNo); } src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
@@ -109,4 +109,12 @@ SELECT id, tenant_id, user_type, account, name, real_name, email, phone, birthday, role_id, dept_id, post_id FROM blade_user ${ew.customSqlSegment} </select> <!--通过 身份证号查询用户信息--> <select id="getUserInfoByIdCardNo" resultType="org.springblade.modules.system.entity.User"> SELECT id, name, real_name RealName FROM blade_user where cardid = #{param1} </select> </mapper> src/main/java/org/springblade/modules/system/service/IDeptService.java
@@ -131,4 +131,10 @@ */ List<DeptVO> securityLazyTree(String tenantId, Long parentId); List<String> selectIn(); /** * 懒加载获取部门树形结构(包含用户数据) * @return */ List<DeptVO> lazyTreeUser(String tenantId, Long parentId); } src/main/java/org/springblade/modules/system/service/IUserService.java
@@ -206,4 +206,11 @@ * @return */ UserVO platformDetail(User user); /** * 通过 身份证号查询用户信息 * @param idCardNo 身份证号 * @return */ User getUserInfoByIdCardNo(String idCardNo); } src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java
@@ -199,4 +199,16 @@ public List<String> selectIn() { return baseMapper.selectIn(); } /** * 懒加载获取部门树形结构(包含用户数据) * @return */ @Override public List<DeptVO> lazyTreeUser(String tenantId, Long parentId) { if (AuthUtil.isAdministrator()) { tenantId = StringPool.EMPTY; } return ForestNodeMerger.merge(baseMapper.lazyTreeUser(tenantId, parentId)); } } src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
@@ -422,4 +422,13 @@ return userVO; } /** * 通过 身份证号查询用户信息 * @param idCardNo 身份证号 * @return */ @Override public User getUserInfoByIdCardNo(String idCardNo) { return baseMapper.getUserInfoByIdCardNo(idCardNo); } } src/main/java/org/springblade/modules/workreport/controller/WorkReportController.java
New file @@ -0,0 +1,192 @@ package org.springblade.modules.workreport.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.AllArgsConstructor; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.modules.system.entity.Dept; import org.springblade.modules.system.entity.User; import org.springblade.modules.system.service.IDeptService; import org.springblade.modules.system.service.IUserService; import org.springblade.modules.workreport.entity.WorkReport; import org.springblade.modules.workreport.service.WorkReportService; import org.springblade.modules.workreport.vo.WorkReportVo; import org.springframework.web.bind.annotation.*; import java.sql.Wrapper; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * @author zhongrj * @time 2021-07-12 * @desc 工作汇报管理控制层 */ @RestController @AllArgsConstructor @RequestMapping("/workReport") public class WorkReportController { private final WorkReportService workReportService; private final IUserService userService; private final IDeptService deptService; /** * 自定义分页 * @param query page,size * @param workReport 工作汇报信息对象 */ @GetMapping("/page") public R<IPage<WorkReportVo>> page(WorkReportVo workReport, Query query) { IPage<WorkReportVo> pages = workReportService.selectWorkReportPage(Condition.getPage(query), workReport); List<WorkReportVo> records = pages.getRecords(); for (WorkReportVo record : records) { record.setReplyRealName(getReplyRealName(record)); record.setReplyDeptName(getReplyDeptName(record)); } return R.data(pages); } /** * 自定义分页--接收到的汇报信息page * @param query page,size * @param workReport 工作汇报信息对象 */ @GetMapping("/pageReply") public R<IPage<WorkReportVo>> pageReply(WorkReportVo workReport, Query query) { IPage<WorkReportVo> pages = workReportService.selectWorkReplyPage(Condition.getPage(query), workReport); // List<WorkReportVo> records = pages.getRecords(); // for (WorkReportVo record : records) { // record.setReplyRealName(getReplyRealName(record)); // record.setReplyDeptName(getReplyDeptName(record)); // } return R.data(pages); } /** * 新增 * @param workReport 工作汇报信息对象 */ @PostMapping("/save") @ApiOperation(value = "新增", notes = "传入workReport") public R save(@RequestBody WorkReport workReport) { return R.status(workReportService.save(workReport)); } /** * 修改 * @param workReport 工作汇报信息对象 */ @PostMapping("/update") public R update(@RequestBody WorkReport workReport) { return R.status(workReportService.updateById(workReport)); } /** * 新增或修改 * @param workReport 工作汇报信息对象 */ @PostMapping("/submit") public R submit(@RequestBody WorkReport workReport) { if (null!=workReport.getId()){ workReport.setReplyTime(new Date()); workReport.setReplyDeptIds(getReplyDeptIds(workReport.getReceivedIds())); }else { workReport.setReportTime(new Date()); workReport.setReplyDeptIds(getReplyDeptIds(workReport.getReceivedIds())); } return R.status(workReportService.saveOrUpdate(workReport)); } /** * 删除 * @param ids 工作汇报信息ids 数组 */ @PostMapping("/remove") public R remove(@ApiParam(value = "主键集合") @RequestParam String ids) { return R.status(workReportService.removeByIds(Func.toLongList(ids))); } /** * 详情 * @param workReport 工作汇报信息对象 */ @GetMapping("/detail") @ApiOperation(value = "详情", notes = "传入workReport") public R<WorkReportVo> detail(WorkReport workReport) { //查询工作汇报详情 WorkReportVo detail = workReportService.selectWorkReportInfo(workReport); detail.setReplyRealName(getReplyRealName(detail)); detail.setReplyDeptName(getReplyDeptName(detail)); //查询接收人单位(名称)信息 return R.data(detail); } /** * 获取接收人的单位信息 * @param detail 汇报详情 * @return */ private String getReplyDeptName(WorkReportVo detail) { List<String> replyDeptIds = Arrays.asList(detail.getReplyDeptIds().split(",")); StringBuilder replyDeptNameInfo = new StringBuilder(); for (String deptId : replyDeptIds) { //查询接收人单位信息 Dept deptDetail = deptService.getById(Long.parseLong(deptId)); replyDeptNameInfo = replyDeptNameInfo.append(deptDetail.getDeptName()).append(","); } //截取 return replyDeptNameInfo.substring(0, replyDeptNameInfo.length() - 1); } /** * 获取接收人的单位id(dept)信息 * @param * @return */ private String getReplyDeptIds(String detail) { List<String> userIds = Arrays.asList(detail.split(",")); List<String> list = new ArrayList<>(); for (String userId : userIds) { //查询接收人单位信息 User userDetail = userService.getById(userId); list.add(userDetail.getDeptId()); } //去重 List<String> collect = list.stream().distinct().collect(Collectors.toList()); //截取 return String.join(",",collect); } /** * 查询接收人姓名信息 * * @param detail 汇报详情 * @return */ private String getReplyRealName(WorkReportVo detail){ List<String> userIds = Arrays.asList(detail.getReceivedIds().split(",")); StringBuilder replyRealNameInfo = new StringBuilder(); for (String userId : userIds) { //查询接收人姓名信息 // User user = new User(); // user.setCardid(idCardNo); // User userDetail = userService.getOne(Condition.getQueryWrapper(user)); User userDetail = userService.getById(userId); replyRealNameInfo = replyRealNameInfo.append(userDetail.getRealName()).append(","); } //截取 return replyRealNameInfo.substring(0, replyRealNameInfo.length() - 1); } } src/main/java/org/springblade/modules/workreport/entity/WorkReport.java
New file @@ -0,0 +1,107 @@ package org.springblade.modules.workreport.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.util.Date; /** * 工作汇报实体类 * @author zhongrj * @time 2021-07-15 */ @Data @TableName("sys_work_report") public class WorkReport implements Serializable { private static final long serialVersionUID = 1L; /** * 工作汇报主键id */ @TableId(value = "id",type = IdType.AUTO) private Long id; /** * 汇报类别(1:保安向保安,2:保安向民警汇报,3:民警向民警) */ private Integer category; /** * 汇报类型 1:日报 2:周报 3:月报 */ private Integer type; /** * 汇报内容 */ private String content; /** * 备注 */ @TableField("work_desc") private String workDesc; /** * 汇报人身份证号 */ @TableField("id_card_no") private String idCardNo; /** * 接收人id(存身份证号) */ @TableField("received_ids") private String receivedIds; /** * 汇报时间 */ @TableField("report_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date reportTime; /** * 回复时间 */ @TableField("reply_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date replyTime; /** * 回复内容 */ @TableField("reply_content") private String replyContent; /** * 发送人部门id */ @TableField("dept_id") private String deptId; /** * 接收人部门id */ @TableField("reply_dept_ids") private String replyDeptIds; /** * 汇报人 user id */ @TableField("user_id") private Long userId; } src/main/java/org/springblade/modules/workreport/mapper/WorkReportMapper.java
New file @@ -0,0 +1,40 @@ package org.springblade.modules.workreport.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; import org.springblade.modules.workreport.entity.WorkReport; import org.springblade.modules.workreport.vo.WorkReportVo; import java.util.List; /** * 工作汇报Mapper 接口 * @author zhongrj */ public interface WorkReportMapper extends BaseMapper<WorkReport> { /** * 自定义分页 * * @param page 分页 * @param workReport 实体 * @return */ List<WorkReportVo> selectWorkReportPage(IPage page, @Param("workReport") WorkReportVo workReport); /** * 详情 * @param workReport 工作汇报信息对象 */ WorkReportVo selectWorkReportInfo(@Param("workReport") WorkReport workReport); /** * 自定义分页--接收到的汇报信息page * @param page,size * @param workReport 工作汇报信息对象 */ List<WorkReportVo> selectWorkReplyPage(IPage<WorkReportVo> page,@Param("workReport") WorkReportVo workReport); } src/main/java/org/springblade/modules/workreport/mapper/WorkReportMapper.xml
New file @@ -0,0 +1,87 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.springblade.modules.workreport.mapper.WorkReportMapper"> <!--工作汇报分页信息--> <select id="selectWorkReportPage" resultType="org.springblade.modules.workreport.vo.WorkReportVo"> SELECT swr.*,bu.real_name realName,bt.dept_name AS deptName FROM sys_work_report swr left join blade_user bu on bu.id = swr.user_id LEFT JOIN blade_dept bt ON swr.dept_id = bt.id WHERE 1=1 <if test="workReport.realName!=null and workReport.realName!=''"> and bu.real_name like concat('%', #{workReport.realName},'%') </if> <if test="workReport.type!=null"> and swr.type = #{workReport.type} </if> <if test="workReport.userId!=null"> and swr.user_id = #{workReport.userId} </if> <if test="workReport.category!=null"> and swr.category = #{workReport.category} </if> </select> <!--工作汇报分页信息--> <select id="selectWorkReplyPage" resultType="org.springblade.modules.workreport.vo.WorkReportVo"> SELECT swr.*,bu.real_name realName,bt.dept_name AS deptName FROM sys_work_report swr left join blade_user bu on bu.id = swr.user_id LEFT JOIN blade_dept bt ON swr.dept_id = bt.id WHERE 1=1 <if test="workReport.realName!=null and workReport.realName!=''"> and bu.real_name like concat('%', #{workReport.realName},'%') </if> <if test="workReport.type!=null"> and swr.type = #{workReport.type} </if> <if test="workReport.userId!=null"> and swr.received_ids like concat('%', #{workReport.userId},'%') </if> <if test="workReport.category!=null"> and swr.category = #{workReport.category} </if> </select> <!--工作汇报详情信息--> <select id="selectWorkReportInfo" resultType="org.springblade.modules.workreport.vo.WorkReportVo"> SELECT swr.*,bu.real_name realName,bt.dept_name AS deptName FROM sys_work_report swr left join blade_user bu on bu.id = swr.user_id LEFT JOIN blade_dept bt ON swr.dept_id = bt.id WHERE 1=1 <if test="workReport.id!=null"> and swr.id = #{workReport.id} </if> </select> </mapper> src/main/java/org/springblade/modules/workreport/service/WorkReportService.java
New file @@ -0,0 +1,35 @@ package org.springblade.modules.workreport.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import org.springblade.modules.workreport.entity.WorkReport; import org.springblade.modules.workreport.vo.WorkReportVo; /** * 工作汇报服务类 * @author zhongrj */ public interface WorkReportService extends IService<WorkReport> { /** * 自定义分页 * @param page * @param workReport * @return */ IPage<WorkReportVo> selectWorkReportPage(IPage<WorkReportVo> page, WorkReportVo workReport); /** * 详情 * @param workReport 工作汇报信息对象 */ WorkReportVo selectWorkReportInfo(WorkReport workReport); /** * 自定义分页--接收到的汇报信息page * @param page,size * @param workReport 工作汇报信息对象 */ IPage<WorkReportVo> selectWorkReplyPage(IPage<WorkReportVo> page, WorkReportVo workReport); } src/main/java/org/springblade/modules/workreport/service/impl/WorkReportServiceImpl.java
New file @@ -0,0 +1,42 @@ package org.springblade.modules.workreport.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springblade.modules.workreport.entity.WorkReport; import org.springblade.modules.workreport.mapper.WorkReportMapper; import org.springblade.modules.workreport.service.WorkReportService; import org.springblade.modules.workreport.vo.WorkReportVo; import org.springframework.stereotype.Service; /** * 工作汇报服务实现类 * @author zhongrj */ @Service public class WorkReportServiceImpl extends ServiceImpl<WorkReportMapper, WorkReport> implements WorkReportService { @Override public IPage<WorkReportVo> selectWorkReportPage(IPage<WorkReportVo> page, WorkReportVo workReport) { return page.setRecords(baseMapper.selectWorkReportPage(page, workReport)); } /** * 详情 * @param workReport 工作汇报信息对象 */ @Override public WorkReportVo selectWorkReportInfo(WorkReport workReport) { return baseMapper.selectWorkReportInfo(workReport); } /** * 自定义分页--接收到的汇报信息page * @param page,size * @param workReport 工作汇报信息对象 */ @Override public IPage<WorkReportVo> selectWorkReplyPage(IPage<WorkReportVo> page, WorkReportVo workReport) { return page.setRecords(baseMapper.selectWorkReplyPage(page, workReport)); } } src/main/java/org/springblade/modules/workreport/vo/WorkReportVo.java
New file @@ -0,0 +1,35 @@ package org.springblade.modules.workreport.vo; import lombok.Data; import org.springblade.modules.workreport.entity.WorkReport; import java.io.Serializable; /** * @author zhongrj */ @Data public class WorkReportVo extends WorkReport implements Serializable { /** * 发送人姓名 */ private String realName; /** * 汇报人所在单位名称 */ private String deptName; /** * 接收人所在单位名称 */ private String replyDeptName; /** * 接收人姓名 */ private String replyRealName; } src/main/resources/application.yml
@@ -200,6 +200,7 @@ - /car/** - /gun/** - /trainingRegistration/** - /workReport/** #授权认证配置 auth: - method: ALL