package com.ruoyi.web.controller.api;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.WebUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.dto.TInspectorAuditDTO;
import com.ruoyi.system.dto.TTaskAuditDTO;
import com.ruoyi.system.model.*;
import com.ruoyi.system.query.InsepectorListQuery;
import com.ruoyi.system.query.TaskListQuery;
import com.ruoyi.system.service.*;
import com.ruoyi.system.utils.TemplateMessageSendUtil;
import com.ruoyi.system.vo.system.InspectorListVO;
import com.ruoyi.system.vo.system.TaskListVO;
import com.ruoyi.web.controller.tool.EmailUtils;
import com.ruoyi.web.controller.tool.MsgUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 督察记录 前端控制器
*
*
* @author xiaochen
* @since 2025-05-28
*/
@Api(tags = "督察记录")
@RestController
@RequestMapping("/t-inspector")
public class TInspectorController {
@Resource
private TLocationService locationService;
@Resource
private TProjectDeptService projectDeptService;
@Resource
private TTaskDetailService tTaskDetailService;
@Resource
private TokenService tokenService;
@Resource
private TDeptService deptService;
@Resource
private ISysUserService sysUserService;
@Resource
private TInspectorService inspectorService;
@Resource
private TTaskCleanService taskCleanerService;
@ApiOperation(value = "督察记录分页列表")
@PostMapping(value = "/pageList")
public R> pageList(@RequestBody InsepectorListQuery query) {
List sysUsers = sysUserService.selectAllList();
List locationList = locationService.list();
if (StringUtils.hasLength(query.getDeptName())) {
List list = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list();
List projectIds = list
.stream().map(TProjectDept::getId).collect(Collectors.toList());
List deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list()
.stream().map(TDept::getId).collect(Collectors.toList());
for (TProjectDept projectDept : list) {
if (projectDept.getParentId().equals("0")){
List list1 = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, projectDept.getId()).list();
List collect = list1.stream().map(TProjectDept::getId).collect(Collectors.toList());
projectIds.addAll(collect);
}
}
projectIds.addAll(deptIds);
if (projectIds.isEmpty()) {
return R.ok(new PageInfo<>());
}
// 用户ids
List collect = sysUsers.stream().filter(e -> e.getDeptType() == 1 && projectIds.contains(e.getDeptId())).map(SysUser::getUserId)
.collect(Collectors.toList());
List collect1 = sysUsers.stream().filter(e -> e.getDeptType() == 2 && deptIds.contains(e.getDeptId())).map(SysUser::getUserId)
.collect(Collectors.toList());
collect.addAll(collect1);
if (collect.isEmpty()) {
return R.ok(new PageInfo<>());
}
query.setPatrolInspectorIds(collect);
if (StringUtils.hasLength(query.getPhonenumber())) {
List patrolInspectorIds = sysUsers.stream().filter(sysUser ->
sysUser.getPhonenumber().equals(query.getPhonenumber())
&& projectIds.contains(sysUser.getDeptId())
).map(SysUser::getUserId).collect(Collectors.toList());
if (patrolInspectorIds.isEmpty()) {
return R.ok(new PageInfo<>());
} else {
patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList());
query.setPatrolInspectorIds(patrolInspectorIds);
}
}
}
if (StringUtils.hasLength(query.getPhonenumber())){
List patrolInspectorIds = sysUsers.stream().filter(sysUser ->
sysUser.getPhonenumber().contains(query.getPhonenumber())
).map(SysUser::getUserId).collect(Collectors.toList());
if (query.getPatrolInspectorIds()!=null&&!query.getPatrolInspectorIds().isEmpty()){
// 取交集
patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList());
}
if (patrolInspectorIds.isEmpty()){
return R.ok(new PageInfo<>());
}
query.setPatrolInspectorIds(patrolInspectorIds);
}
if (query.getLocationType()!=null){
List collect = locationList.stream().filter(e -> e.getLocationType().equals(query.getLocationType())).map(TLocation::getId)
.collect(Collectors.toList());
if (collect.isEmpty()){
return R.ok(new PageInfo<>());
}
query.setLocationIds(collect);
}
if (StringUtils.hasLength(query.getLocationName())){
List collect = locationList.stream().filter(e -> e.getLocationName().contains(query.getLocationName())).map(TLocation::getId)
.collect(Collectors.toList());
if (collect.isEmpty()){
query.setLocationIds(collect);
return R.ok(new PageInfo<>());
}else{
if (query.getLocationIds()!=null){
collect = collect.stream().filter(query.getLocationIds()::contains).collect(Collectors.toList());
if (collect.isEmpty()){
return R.ok(new PageInfo<>());
}
}
query.setLocationIds(collect);
}
}
if (StringUtils.hasLength(query.getEndTime())){
String replace = query.getEndTime().replace(" 00:00:00", " 23:59:59");
query.setEndTime(replace);
}
return R.ok(inspectorService.pageList(query));
}
@Log(title = "督察记录导出", businessType = BusinessType.OTHER)
@ApiOperation(value = "督察记录导出")
@PostMapping(value = "/exportExcel")
public void exportExcel(@RequestBody InsepectorListQuery query) {
List sysUsers = sysUserService.selectAllList();
List locationList = locationService.list();
if (StringUtils.hasLength(query.getDeptName())){
List projectIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list()
.stream().map(TProjectDept::getId).collect(Collectors.toList());
List deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list()
.stream().map(TDept::getId).collect(Collectors.toList());
projectIds.addAll(deptIds);
if (projectIds.isEmpty()){
projectIds.add("0") ;
}
if (StringUtils.hasLength(query.getPhonenumber())){
List patrolInspectorIds = sysUsers.stream().filter(sysUser ->
sysUser.getPhonenumber().equals(query.getPhonenumber())
&& projectIds.contains(sysUser.getDeptId())
).map(SysUser::getUserId).collect(Collectors.toList());
if (patrolInspectorIds.isEmpty()){
patrolInspectorIds.add(0L) ;
}
query.setPatrolInspectorIds(patrolInspectorIds);
}
}
if (StringUtils.hasLength(query.getPhonenumber())){
List patrolInspectorIds = sysUsers.stream().filter(sysUser ->
sysUser.getPhonenumber().equals(query.getPhonenumber())
).map(SysUser::getUserId).collect(Collectors.toList());
if (!query.getPatrolInspectorIds().isEmpty()){
// 取交集
patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList());
}
if (patrolInspectorIds.isEmpty()){
patrolInspectorIds.add(0L);
}
query.setPatrolInspectorIds(patrolInspectorIds);
}
if (query.getClearStatus()!=null){
List collect = tTaskDetailService.lambdaQuery().eq(TTaskDetail::getClearStatus, query.getClearStatus())
.list().stream().distinct().map(TTaskDetail::getTaskId).collect(Collectors.toList());
if (collect.isEmpty()){
collect.add("-1");
}
query.setTaskIds(collect);
}
if (query.getLocationType()!=null){
List collect = locationList.stream().filter(e -> e.getLocationType().equals(query.getLocationType())).map(TLocation::getId)
.collect(Collectors.toList());
if (collect.isEmpty()){
collect.add("-1");
}
query.setLocationIds(collect);
}
if (StringUtils.hasLength(query.getLocationName())){
List collect = locationList.stream().filter(e -> e.getLocationName().contains(query.getLocationName())).map(TLocation::getId)
.collect(Collectors.toList());
if (collect.isEmpty()){
collect.add("-1");
query.setLocationIds(collect);
}else{
collect = collect.stream().filter(query.getLocationIds()::contains).collect(Collectors.toList());
if (collect.isEmpty()){
collect.add("-1");
}
query.setLocationIds(collect);
}
}
List inspectorListVOS = inspectorService.pageListExport(query);
//1.获取excel模板
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), InspectorListVO.class, inspectorListVOS);
HttpServletResponse response = WebUtils.response();
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
ServletOutputStream outputStream = null;
try {
String fileName = URLEncoder.encode("随机督察记录列表.xls", "utf-8");
response.setHeader("Content-dispodition", "attachment;filename=" + fileName);
outputStream = response.getOutputStream();
workbook.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Log(title = "批量删除督察任务", businessType = BusinessType.DELETE)
@ApiOperation(value = "批量删除督察任务")
@DeleteMapping(value = "/deleteByIds")
public R deleteByIds(@RequestParam String ids) {
String[] split = ids.split(",");
inspectorService.removeBatchByIds(Arrays.asList(split));
return R.ok();
}
@Log(title = "删除督察任务", businessType = BusinessType.DELETE)
@ApiOperation(value = "删除督察任务")
@DeleteMapping(value = "/deleteById")
public R deleteById(@RequestParam String id) {
inspectorService.removeById(id);
return R.ok();
}
@Resource
private TNoticeService noticeService;
@Resource
private TNoticeSetService noticeSetService;
@Resource
private TDictDataService dictDataService;
@Resource
private MsgUtils msgUtils;
@Resource
private TemplateMessageSendUtil templateMessageSendUtil;
@Log(title = "审核任务", businessType = BusinessType.UPDATE)
@ApiOperation(value = "审核任务")
@PostMapping(value = "/audit")
public R audit(@RequestBody TInspectorAuditDTO dto) throws Exception {
TTaskAuditDTO tTaskAuditDTO = new TTaskAuditDTO();
BeanUtils.copyProperties(dto, tTaskAuditDTO);
TTask task = taskCleanerService.getById(dto.getTaskId());
TLocation location = locationService.getById(task.getLocationId());
TNotice tNotice = new TNotice();
TNoticeSet noticeSet = noticeSetService.lambdaQuery().eq(TNoticeSet::getType, 2).last("limit 1")
.one();
tNotice.setUserId(task.getPatrolInspector());
tNotice.setStatus(1);
tNotice.setDataId(task.getId());
tNotice.setNoticeSetType(noticeSet.getNoticeType());
TInspector byId = inspectorService.getById(dto.getId());
SysUser sysUser = sysUserService.selectUserById(Long.valueOf(task.getPatrolInspector()));
// 邮箱
TDictData email = dictDataService.lambdaQuery().eq(TDictData::getDataType,4).one();
// 授权码
TDictData code = dictDataService.lambdaQuery().eq(TDictData::getDataType,5).one();
if (dto.getAuditStatus()==1){
if (byId.getClearStatus()==2){
tTaskAuditDTO.setHandleType(3);
dto.setStatus(2);
// 增加消息
tNotice.setNoticeType(8);
tNotice.setNoticeContent("【"+location.getLocationName()+"】督察任务不合格,请重新上传!");
noticeService.save(tNotice);
switch (noticeSet.getNoticeType()) {
case 1:
msgUtils.sendMsg5(sysUser.getPhonenumber(), location.getLocationName());
break;
case 2:
if (StringUtils.hasLength(email.getDataContent()) && StringUtils.hasLength(code.getDataContent())) {
EmailUtils.sendEmail(sysUser.getEmail(), email.getDataContent(), code.getDataContent(), "【"+location.getLocationName()+"】任务督察不合格,请及时整改!");
}
break;
case 3:
if (StringUtils.hasLength(sysUser.getOpenId())){
templateMessageSendUtil.wxTemplateProblemRectificationRequest(sysUser.getOpenId(),
location.getLocationName(),dto.getAuditRemark());
}
break;
}
}else{
if (dto.getAuditTime()!=null){
dto.setStatus(3);
}else{
dto.setStatus(4);
}
}
}
dto.setAuditTime(LocalDateTime.now());
dto.setAuditPerson(tokenService.getLoginUser().getUserId()+"");
inspectorService.updateById(dto);
return R.ok();
// TInspector byId = inspectorService.getById(dto.getId());
//
// TTaskAuditDTO tTaskAuditDTO = new TTaskAuditDTO();
// BeanUtils.copyProperties(dto, tTaskAuditDTO);
// TLocation location = locationService.getById(byId.getLocationId());
// TNotice tNotice = new TNotice();
// TNoticeSet noticeSet = noticeSetService.lambdaQuery().eq(TNoticeSet::getType, 2).last("limit 1")
// .one();
// tNotice.setUserId(location.getLocationLeader());
// tNotice.setStatus(1);
// tNotice.setDataId(byId.getId());
// tNotice.setNoticeSetType(noticeSet.getNoticeType());
// SysUser sysUser = sysUserService.selectUserById(Long.valueOf(location.getLocationLeader()));
// // 邮箱
// TDictData email = dictDataService.lambdaQuery().eq(TDictData::getDataType,4).one();
// // 授权码
// TDictData code = dictDataService.lambdaQuery().eq(TDictData::getDataType,5).one();
// if (dto.getAuditStatus()==1){
// if (byId.getClearStatus()==2){
// tTaskAuditDTO.setHandleType(3);
// dto.setStatus(2);
// // 增加消息
// tNotice.setNoticeType(8);
// tNotice.setNoticeContent("【"+location.getLocationName()+"】督察任务不合格,请重新上传!");
// noticeService.save(tNotice);
// switch (noticeSet.getNoticeType()) {
// case 1:
// msgUtils.sendMsg5(sysUser.getPhonenumber(), location.getLocationName());
// break;
// case 2:
// if (StringUtils.hasLength(email.getDataContent()) && StringUtils.hasLength(code.getDataContent())) {
// EmailUtils.sendEmail(sysUser.getEmail(), email.getDataContent(), code.getDataContent(), "【"+location.getLocationName()+"】任务督察不合格,请及时整改!");
// }
// break;
// case 3:
// break;
// }
// }else{
// if (dto.getAuditTime()!=null){
// dto.setStatus(3);
// }else{
// dto.setStatus(4);
// }
// }
// }
// dto.setAuditTime(LocalDateTime.now());
// dto.setAuditPerson(tokenService.getLoginUser().getUserId()+"");
// inspectorService.updateById(dto);
// return R.ok();
}
}