ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTaskController.java
@@ -170,7 +170,7 @@ @Log(title = "审核任务", businessType = BusinessType.UPDATE) @ApiOperation(value = "审核任务") @PostMapping(value = "/audit") public R<Boolean> audit(@RequestBody @Valid TTaskAuditDTO dto) { public R<Boolean> audit(@RequestBody TTaskAuditDTO dto) { dto.setAuditTime(LocalDateTime.now()); TTask byId = taskCleanerService.getById(dto.getTaskId()); if (dto.getAuditStatus()==2){ ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java
@@ -181,8 +181,19 @@ List<TTask> tasks = taskCleanerService.list(tTaskLambdaQueryWrapper); HashMap<String, Integer> taskMap = new HashMap<>(); HashMap<String, Integer> statusMap = new HashMap<>(); statusMap.put("未执行", 0); statusMap.put("超时", 0); statusMap.put("待确认", 0); statusMap.put("已驳回", 0); statusMap.put("已完成", 0); HashMap<String, Integer> clearMap = new HashMap<>(); clearMap.put("合格", 0); clearMap.put("不合格", 0); HashMap<String, Integer> unqualifiedMap = new HashMap<>(); List<TDictData> dictData = dataList.stream().filter(e -> e.getDataType() == 2).collect(Collectors.toList()); for (TDictData dictDatum : dictData) { unqualifiedMap.put(dictDatum.getDataContent(), 0); } for (TTask task : tasks) { TProjectDept tProjectDept = projectDepts.stream().filter(e -> e.getId().equals(task.getProjectId())).findFirst().orElse(null); if (tProjectDept == null) continue; @@ -221,7 +232,7 @@ temp1.append("不合格"); TDictData tDictData = dataList.stream().filter(e -> e.getId().equals(tTaskDetail.getUnqualified())).findFirst().orElse(null); if (tDictData != null){ unqualifiedMap.put(tTaskDetail.getUnqualifiedName(), unqualifiedMap.getOrDefault(tDictData.getDataContent(), 0) + 1); unqualifiedMap.put(tDictData.getDataContent(), unqualifiedMap.getOrDefault(tDictData.getDataContent(), 0) + 1); } break; } ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TTaskDetailController.java
@@ -5,6 +5,7 @@ import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.system.applet.dto.AppealDTO; import com.ruoyi.system.dto.TTaskAuditBatchDTO; import com.ruoyi.system.dto.TaskDetailDto; import com.ruoyi.system.model.TAppeal; @@ -58,7 +59,7 @@ @ApiOperation(value = "申诉") @PostMapping(value = "/appeal") public R<Boolean> appeal(@RequestBody TAppeal dto) { public R<Boolean> appeal(@RequestBody AppealDTO dto) { appealService.save(dto); // 添加任务详情 TTaskDetail taskDetail = new TTaskDetail(); ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TUserController.java
@@ -14,10 +14,7 @@ import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.applet.dto.*; import com.ruoyi.system.applet.query.AppealListQuery; import com.ruoyi.system.applet.query.KnowledgeListUserQuery; import com.ruoyi.system.applet.query.LeaveListUserQuery; import com.ruoyi.system.applet.query.TaskUserListQuery; import com.ruoyi.system.applet.query.*; import com.ruoyi.system.applet.vo.*; import com.ruoyi.system.dto.KnowledgeDTO; import com.ruoyi.system.dto.TTaskAuditBatchDTO; @@ -99,7 +96,15 @@ private TFeedbackService feedbackService; @Resource private TProblemEscalationService problemEscalationService; @Resource private TNoticeService noticeService; @ApiOperation(value = "消息通知列表") @PostMapping(value = "/noticeList") public R<PageInfo<NoticeListVO>> noticeList(@RequestBody NoticeListQuery query) { Long userId = tokenService.getLoginUserApplet().getUserId(); query.setUserId(userId+""); return R.ok(noticeService.noticeList(query)); } /** * 生成数据 * @param id @@ -109,58 +114,58 @@ @GetMapping(value = "/testData") public R<AppealDetailVO> testData(@RequestParam String id) { List<TAppeal> tAppeals = new ArrayList<>(); for (int i = 0; i < 25; i++) { TAppeal tAppeal = new TAppeal(); tAppeal.setTaskId("1938536771253641217"); tAppeal.setAppealPerson("152"); tAppeal.setStatus(1); tAppeal.setAppealContent("申诉"); tAppeal.setPictures("https://bjxj.oss-cn-guangzhou.aliyuncs.com/bjxj/88d2d5614fe6492bba5666a7ab01e76b.png"); tAppeals.add(tAppeal); } appealService.saveBatch(tAppeals); List<TAppeal> tAppeals1 = new ArrayList<>(); for (int i = 0; i < 25; i++) { TAppeal tAppeal = new TAppeal(); tAppeal.setTaskId("1938536771253641217"); tAppeal.setAppealPerson("152"); tAppeal.setStatus(2); tAppeal.setAppealContent("申诉"); tAppeal.setPictures("https://bjxj.oss-cn-guangzhou.aliyuncs.com/bjxj/88d2d5614fe6492bba5666a7ab01e76b.png"); tAppeal.setAuditPerson("162"); tAppeal.setAuditRemark("备注"); tAppeal.setAuditTime(LocalDateTime.now()); tAppeals1.add(tAppeal); } appealService.saveBatch(tAppeals1); List<TAppeal> tAppeals2 = new ArrayList<>(); for (int i = 0; i < 25; i++) { TAppeal tAppeal = new TAppeal(); tAppeal.setTaskId("1938536771253641217"); tAppeal.setAppealPerson("152"); tAppeal.setStatus(3); tAppeal.setAppealContent("申诉"); tAppeal.setPictures("https://bjxj.oss-cn-guangzhou.aliyuncs.com/bjxj/88d2d5614fe6492bba5666a7ab01e76b.png"); tAppeal.setAuditPerson("162"); tAppeal.setAuditRemark("备注"); tAppeal.setAuditTime(LocalDateTime.now()); tAppeals2.add(tAppeal); } appealService.saveBatch(tAppeals2); List<TAppeal> tAppeals3 = new ArrayList<>(); for (int i = 0; i < 25; i++) { TAppeal tAppeal = new TAppeal(); tAppeal.setTaskId("1938536771253641217"); tAppeal.setAppealPerson("152"); tAppeal.setStatus(4); tAppeal.setAppealContent("申诉"); tAppeal.setPictures("https://bjxj.oss-cn-guangzhou.aliyuncs.com/bjxj/88d2d5614fe6492bba5666a7ab01e76b.png"); tAppeals3.add(tAppeal); } appealService.saveBatch(tAppeals3); // List<TAppeal> tAppeals = new ArrayList<>(); // for (int i = 0; i < 25; i++) { // TAppeal tAppeal = new TAppeal(); // tAppeal.setTaskId("1938536771253641217"); // tAppeal.setAppealPerson("152"); // tAppeal.setStatus(1); // tAppeal.setAppealContent("申诉"); // tAppeal.setPictures("https://bjxj.oss-cn-guangzhou.aliyuncs.com/bjxj/88d2d5614fe6492bba5666a7ab01e76b.png"); // tAppeals.add(tAppeal); // } // appealService.saveBatch(tAppeals); // List<TAppeal> tAppeals1 = new ArrayList<>(); // for (int i = 0; i < 25; i++) { // TAppeal tAppeal = new TAppeal(); // tAppeal.setTaskId("1938536771253641217"); // tAppeal.setAppealPerson("152"); // tAppeal.setStatus(2); // tAppeal.setAppealContent("申诉"); // tAppeal.setPictures("https://bjxj.oss-cn-guangzhou.aliyuncs.com/bjxj/88d2d5614fe6492bba5666a7ab01e76b.png"); // tAppeal.setAuditPerson("162"); // tAppeal.setAuditRemark("备注"); // tAppeal.setAuditTime(LocalDateTime.now()); // tAppeals1.add(tAppeal); // } // appealService.saveBatch(tAppeals1); // List<TAppeal> tAppeals2 = new ArrayList<>(); // for (int i = 0; i < 25; i++) { // TAppeal tAppeal = new TAppeal(); // tAppeal.setTaskId("1938536771253641217"); // tAppeal.setAppealPerson("152"); // tAppeal.setStatus(3); // tAppeal.setAppealContent("申诉"); // tAppeal.setPictures("https://bjxj.oss-cn-guangzhou.aliyuncs.com/bjxj/88d2d5614fe6492bba5666a7ab01e76b.png"); // tAppeal.setAuditPerson("162"); // tAppeal.setAuditRemark("备注"); // tAppeal.setAuditTime(LocalDateTime.now()); // tAppeals2.add(tAppeal); // } // appealService.saveBatch(tAppeals2); // List<TAppeal> tAppeals3 = new ArrayList<>(); // for (int i = 0; i < 25; i++) { // TAppeal tAppeal = new TAppeal(); // tAppeal.setTaskId("1938536771253641217"); // tAppeal.setAppealPerson("152"); // tAppeal.setStatus(4); // tAppeal.setAppealContent("申诉"); // tAppeal.setPictures("https://bjxj.oss-cn-guangzhou.aliyuncs.com/bjxj/88d2d5614fe6492bba5666a7ab01e76b.png"); // // tAppeals3.add(tAppeal); // // } // appealService.saveBatch(tAppeals3); return R.ok(); } @@ -259,11 +264,15 @@ taskDetailVO.setLocationIcon(byId2.getLocationIcon()); taskDetailVO.setLocationName(byId2.getLocationName()); TTaskDetail tTaskDetail = list.stream().filter(e -> e.getHandleType() == 1).findFirst().orElse(null); TTaskDetail tTaskDetailFinish = list.stream().filter(e -> e.getHandleType() == 2).findFirst().orElse(null); if (tTaskDetail!=null && tTaskDetail.getUnqualified()!=null){ TDictData byId3 = dictDataService.getById(tTaskDetail.getUnqualified()); if (byId3!=null){ tTaskDetail.setUnqualifiedName(byId3.getDataContent()); } } if (tTaskDetailFinish!=null){ tTaskDetailFinish.setFinishTime(tTaskDetailFinish.getCreateTime()); } taskDetailVO.setTaskDetail(tTaskDetail); taskDetailVO.setRecords(list); @@ -415,7 +424,7 @@ Long userRole = sysUserService.getUserRole(userId); SysRole sysRole = roleService.selectRoleById(userRole); List<SysUser> sysUsers = sysUserService.selectAllList(); sysRole.setRoleName("项目负责人"); SysUser auditPerson = sysUserService.selectUserById(999L); //项目负责人、部门负责人、公司成员提交由最终审批人审批; if (user.getDeptType()==2 ||sysRole.getRoleName().contains("项目负责人")||sysRole.getRoleName().contains("部门负责人")){ @@ -503,6 +512,7 @@ leaveDTO.setTemplateId(user.getTemplateId()); leaveDTO.setLeavePerson(userId+""); leaveService.save(leaveDTO); sysRole.setRoleName("项目负责人"); //项目负责人、部门负责人、公司成员提交由最终审批人审批; if (user.getDeptType()==2 ||sysRole.getRoleName().contains("项目负责人")||sysRole.getRoleName().contains("部门负责人")){ TLeaveAudit tLeaveAudit1 = new TLeaveAudit(); @@ -577,6 +587,7 @@ SysUser sysUser = sysUserService.selectUserById(Long.parseLong(leave.getLeavePerson())); Long userRole = sysUserService.getUserRole(sysUser.getUserId()); SysRole sysRole = roleService.selectRoleById(userRole); sysRole.setRoleName("项目负责人"); if (sysRole.getRoleName().contains("现场负责人")||sysRole.getRoleName().equals("组长")){ if (sysUser.getDeptType() == 1){ TProjectDept tProjectDept = projectDeptService.getById(sysUser.getDeptId()); @@ -601,7 +612,7 @@ leaveUserDetailVO.setLeavePersonName(sysUser.getNickName()); LeaveAuditListVO leaveAuditListVO = new LeaveAuditListVO(); List<TLeaveAudit> list = leaveAuditService.list(new LambdaQueryWrapper<TLeaveAudit>() .eq(TLeaveAudit::getAuditId, leave.getId())); .eq(TLeaveAudit::getLeaveId, leave.getId())); for (TLeaveAudit tLeaveAudit : list) { if (tLeaveAudit.getAuditType()==1){ LeaveAuditVO leaveAuditVO = new LeaveAuditVO(); ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -68,7 +68,7 @@ ajax.put(Constants.TOKEN, tokenService.createTokenApplet(loginUser)); ajax.put("userInfo",loginUser); ajax.put("roleName",loginUser.getRoleName()); ajax.put("deptType",loginUser.getRoleName()); ajax.put("deptType",loginUser.getDeptType()); return ajax; } /** ruoyi-system/src/main/java/com/ruoyi/system/applet/dto/AppealDTO.java
New file @@ -0,0 +1,13 @@ package com.ruoyi.system.applet.dto; import com.ruoyi.common.core.domain.BasePage; import com.ruoyi.system.model.TAppeal; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "任务申诉DTO") public class AppealDTO extends TAppeal { } ruoyi-system/src/main/java/com/ruoyi/system/applet/query/NoticeListQuery.java
New file @@ -0,0 +1,15 @@ package com.ruoyi.system.applet.query; import com.ruoyi.common.core.domain.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "消息通知分页列表query") public class NoticeListQuery extends BasePage { @ApiModelProperty(value = "用户id 前端忽略") private String userId; } ruoyi-system/src/main/java/com/ruoyi/system/applet/vo/NoticeListVO.java
New file @@ -0,0 +1,17 @@ package com.ruoyi.system.applet.vo; import com.ruoyi.system.model.TNotice; import com.ruoyi.system.model.TTask; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data @ApiModel(value = "消息通知列表分页VO") public class NoticeListVO extends TNotice { } ruoyi-system/src/main/java/com/ruoyi/system/applet/vo/TaskUserListVO.java
@@ -13,6 +13,10 @@ @ApiModelProperty(value = "点位名称") private String locationName; @ApiModelProperty(value = "点位地址开始") private String locationAddress; @ApiModelProperty(value = "点位地址结束") private String locationAddressEnd; @ApiModelProperty(value = "点位类型名称") private String locationTypeName; @ApiModelProperty(value = "点位类型图标") ruoyi-system/src/main/java/com/ruoyi/system/applet/vo/UserIndexVO.java
@@ -8,7 +8,7 @@ import java.math.BigDecimal; @Data @ApiModel(value = "个人中心-任务记录列表分页VO") @ApiModel(value = "个人中心-首页顶部VO") public class UserIndexVO { @ApiModelProperty(value = "头像") ruoyi-system/src/main/java/com/ruoyi/system/mapper/TNoticeMapper.java
New file @@ -0,0 +1,23 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.applet.query.NoticeListQuery; import com.ruoyi.system.applet.vo.NoticeListVO; import com.ruoyi.system.model.TNotice; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> * 项目组组员 Mapper 接口 * </p> * * @author 无关风月 * @since 2025-04-12 */ public interface TNoticeMapper extends BaseMapper<TNotice> { List<NoticeListVO> noticeList(@Param("query")NoticeListQuery query, @Param("pageInfo")PageInfo<NoticeListVO> pageInfo); } ruoyi-system/src/main/java/com/ruoyi/system/model/TNotice.java
New file @@ -0,0 +1,101 @@ package com.ruoyi.system.model; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.ruoyi.common.core.domain.BaseModel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; import java.time.LocalDateTime; /** * <p> * 菌种报告库 * </p> * * @author 无关风月 * @since 2025-04-12 */ @Data @EqualsAndHashCode(callSuper = false) @TableName("t_notice") @ApiModel(value="TNotice对象", description="消息通知") public class TNotice implements Serializable { private static final long serialVersionUID = 2553749188490103197L; @ApiModelProperty(value = "主键id") @TableId("id") private String id; @ApiModelProperty(value = "消息所属人员id") @TableField("user_id") private String userId; @ApiModelProperty(value = "消息内容") @TableField("notice_content") private String noticeContent; @ApiModelProperty(value = "状态 1=未读2=已读") @TableField("status") private Integer status; @ApiModelProperty(value = "对应内容id") @TableField("data_id") private String dataId; @ApiModelProperty(value = "消息类型\n" + "1任务驳回通知\n" + "2任务审核通过通知\n" + "3超时任务通知\n" + "4任务申诉驳回通知\n" + "5任务申诉通过通知\n" + "6待审核通知\n" + "7抄送通知\n" + "8督察任务整改通知") @TableField("notice_type") private Integer noticeType; @ApiModelProperty(value = "消息通知类型 1短信 2邮件 3微信订阅消息") @TableField("notice_set_type") private Integer noticeSetType; public static final String ID = "id"; public static final String CREATE_TIME = "create_time"; public static final String LAST_TIME = "last_time"; /** * 新增执行 */ @ApiModelProperty(value = "记录创建人,前端忽略") @TableField(value = "create_by", fill = FieldFill.INSERT) private String createBy; /** * 新增和更新执行 */ @ApiModelProperty(value = "记录修改人,前端忽略") @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) private String updateBy; /** * 删除 未删除 */ @JsonIgnore @TableField("`disabled`") @TableLogic private Boolean disabled; @ApiModelProperty(value = "记录创建时间,前端忽略") @TableField("create_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8") private LocalDateTime createTime; /** * 最后修改时间 */ @ApiModelProperty(value = "记录修改时间,前端忽略") @TableField("update_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8") private LocalDateTime updateTime; } ruoyi-system/src/main/java/com/ruoyi/system/model/TTaskDetail.java
@@ -70,6 +70,10 @@ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @TableField("audit_time") private LocalDateTime auditTime; @ApiModelProperty(value = "完成时间") @TableField(exist = false) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime finishTime; @ApiModelProperty(value = "审核状态1通过2驳回") @TableField("audit_status") ruoyi-system/src/main/java/com/ruoyi/system/service/TNoticeService.java
New file @@ -0,0 +1,20 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.applet.query.NoticeListQuery; import com.ruoyi.system.applet.vo.NoticeListVO; import com.ruoyi.system.model.TNotice; /** * <p> * 项目组组员 服务类 * </p> * * @author 无关风月 * @since 2025-04-12 */ public interface TNoticeService extends IService<TNotice> { PageInfo<NoticeListVO> noticeList(NoticeListQuery query); } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TNoticeServiceImpl.java
New file @@ -0,0 +1,33 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.applet.query.NoticeListQuery; import com.ruoyi.system.applet.vo.NoticeListVO; import com.ruoyi.system.mapper.TNoticeMapper; import com.ruoyi.system.model.TNotice; import com.ruoyi.system.service.TNoticeService; import com.ruoyi.system.vo.system.ProjectDeptListVO; import org.springframework.stereotype.Service; import java.util.List; /** * <p> * 项目组组员 服务实现类 * </p> * * @author 无关风月 * @since 2025-04-12 */ @Service public class TNoticeServiceImpl extends ServiceImpl<TNoticeMapper, TNotice> implements TNoticeService { @Override public PageInfo<NoticeListVO> noticeList(NoticeListQuery query) { PageInfo<NoticeListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<NoticeListVO> list = this.baseMapper.noticeList(query,pageInfo); pageInfo.setRecords(list); return pageInfo; } } ruoyi-system/src/main/resources/mapper/system/TNoticeMapper.xml
New file @@ -0,0 +1,13 @@ <?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="com.ruoyi.system.mapper.TNoticeMapper"> <select id="noticeList" resultType="com.ruoyi.system.applet.vo.NoticeListVO"> select t1.* from t_notice t1 where t1.user_id = #{query.userId} and t1.`disabled` = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} </select> </mapper> ruoyi-system/src/main/resources/mapper/system/TTaskMapper.xml
@@ -62,10 +62,13 @@ </select> <select id="pageListUser" resultType="com.ruoyi.system.applet.vo.TaskUserListVO"> select t1.*,t2.location_name as locationName,t3.location_name as locationTypeName, t2.location_address as locationAddress, t2.location_address_end as locationAddressEnd, t3.location_icon as locatioTypeIcon, t5.clear_status as clearStatus, t4.nick_name as patrolInspectorName, t4.phonenumber as phonenumber, ROUND( 6378.138 * 2 * ASIN( SQRT( @@ -91,23 +94,24 @@ left join t_location t2 on t1.location_id = t2.id left join t_location_type t3 on t2.location_type = t3.id left join sys_user t4 on t1.patrol_inspector = t4.user_id LEFT JOIN (SELECT t1.* LEFT JOIN ( SELECT t1.* FROM t_task_detail t1 JOIN ( SELECT task_id, MAX(create_time) AS max_time JOIN (SELECT task_id, MAX(create_time) AS max_time FROM t_task_detail GROUP BY task_id ) AS t2 ON t1.task_id = t2.task_id AND t1.create_time = t2.max_time GROUP BY task_id) AS t2 ON t1.task_id = t2.task_id AND t1.create_time = t2.max_time where 1=1 <if test="query.clearStatus != null"> and t1.clear_status = #{query.clearStatus} </if> ) t5 on t1.id = t5.task_id where 1=1 and t1.`disabled` = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} <if test="query.clearStatus != null"> and t2.status = #{query.clearStatus} </if> <if test="query.userId != null and query.userId != ''"> and t1.patrol_inspector = #{query.userId} </if> <if test="query.startTime != null and startTime != ''"> <if test="query.startTime != null and query.startTime != ''"> and (t1.implement_time between #{query.startTime} and #{query.endTime}) </if> </select>