修改了巡检明细bug

This commit is contained in:
2025-09-03 09:35:28 +08:00
parent ddf00d23d6
commit 06bf8220d8
21 changed files with 663 additions and 83 deletions

View File

@@ -0,0 +1,37 @@
package org.dromara.property.controller.mobile;
import lombok.RequiredArgsConstructor;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.property.domain.bo.InspectionTaskBo;
import org.dromara.property.domain.vo.InspectionTaskVo;
import org.dromara.property.domain.vo.mobile.MInspectionTaskVo;
import org.dromara.property.service.IInspectionTaskService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author yuyongle
* @version 1.0
* @description: 移动端巡检任务
* @date 2025/9/1 11:18
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/mobile/inspectionTask")
public class MInspectionTaskController extends BaseController {
private final IInspectionTaskService inspectionTaskService;
/**
* 移动端查询巡检任务列表
*/
@GetMapping("/list")
public TableDataInfo<MInspectionTaskVo> list(InspectionTaskBo bo, PageQuery pageQuery) {
return inspectionTaskService.mQueryPageList(bo, pageQuery);
}
}

View File

@@ -0,0 +1,36 @@
package org.dromara.property.controller.mobile;
import lombok.RequiredArgsConstructor;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.property.domain.bo.InspectionTaskDetailBo;
import org.dromara.property.domain.vo.mobile.MInspectionPointVo;
import org.dromara.property.service.IInspectionPointService;
import org.dromara.property.service.IInspectionTaskDetailService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author yuyongle
* @version 1.0
* @description: TODO
* @date 2025/9/1 17:13
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/mobile/taskDetail")
public class MInspectionTaskDetailController extends BaseController {
private final IInspectionTaskDetailService inspectionTaskDetailService;
/**
* 查询巡检点列表
*/
@GetMapping("/list")
public TableDataInfo<MInspectionPointVo> list(InspectionTaskDetailBo bo, PageQuery pageQuery) {
return inspectionTaskDetailService.mQueryPageList(bo,pageQuery);
}
}

View File

@@ -45,7 +45,7 @@ public class InspectionTask extends TenantEntity {
private Long actUserId;
/**
* 巡检方式
*巡检方式(0现场拍照,1现场扫码)
*/
private String taskType;
@@ -55,7 +55,7 @@ public class InspectionTask extends TenantEntity {
private String transferDesc;
/**
* 巡检状态
* 巡检状态(0未开始1巡检中,2巡检完成3已超时)
*/
private String status;

View File

@@ -51,11 +51,6 @@ public class InspectionTaskDetail extends TenantEntity {
*/
private Long pointId;
/**
* 巡检方式
*/
private String patrolType;
/**
* 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码)
*/
@@ -64,12 +59,7 @@ public class InspectionTaskDetail extends TenantEntity {
/**
* 实际巡检时间
*/
private Date actualInspectionTime;
/**
* 实际签到状态(1已签到2.未签到)
*/
private String actualSignState;
private Date inspectionTime;
/**
* 巡检状态(0未完成,1已完成)
@@ -91,10 +81,6 @@ public class InspectionTaskDetail extends TenantEntity {
*/
private String actualInspectionPerson;
/**
* 任务状态
*/
private String taskStatus;
/**
* 巡检结果
@@ -111,11 +97,6 @@ public class InspectionTaskDetail extends TenantEntity {
*/
private String inspectionLocation;
/**
* 实际巡检时间
*/
private Date inspectionTime;
/**
* 备注
*/

View File

@@ -40,6 +40,10 @@ public class ResidentPerson extends TenantEntity {
* 联系电话
*/
private String phone;
/**
* 密码
*/
private String password;
/**
* 人员类型
*/
@@ -84,6 +88,14 @@ public class ResidentPerson extends TenantEntity {
* 状态
*/
private Long state;
/**
* 用户角色(1管理员2普通用户)
*/
private String userRoles;
/**
* 是否审核通过(1通过2不通过)
*/
private String isAudit;
/**
* 备注
*/

View File

@@ -52,11 +52,6 @@ public class InspectionTaskDetailBo extends BaseEntity {
*/
private Long pointId;
/**
* 巡检方式
*/
private String patrolType;
/**
* 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码)
*/
@@ -92,10 +87,6 @@ public class InspectionTaskDetailBo extends BaseEntity {
*/
private String actualInspectionPerson;
/**
* 任务状态
*/
private String taskStatus;
/**
* 巡检结果

View File

@@ -48,7 +48,7 @@ public class ResidentPersonBo extends BaseEntity {
* 性别
*/
@NotNull(message = "性别不能为空", groups = {AddGroup.class, EditGroup.class})
private Long gender;
private Integer gender;
/**
* 证件号
@@ -126,5 +126,12 @@ public class ResidentPersonBo extends BaseEntity {
*/
private Integer rosterType = 2;
/**
* 用户角色(1管理员2普通用户)
*/
private String userRoles;
/**
* 是否审核通过(1通过2不通过)
*/
private String isAudit;
}

View File

@@ -62,12 +62,6 @@ public class InspectionTaskDetailVo implements Serializable {
@ExcelProperty(value = "巡检点id")
private Long pointId;
/**
* 巡检方式
*/
@ExcelProperty(value = "巡检方式")
private String patrolType;
/**
* 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码)
*/
@@ -114,13 +108,6 @@ public class InspectionTaskDetailVo implements Serializable {
*/
@ExcelProperty(value = "实际巡检人")
private String actualInspectionPerson;
/**
* 任务状态
*/
@ExcelProperty(value = "任务状态")
private String taskStatus;
/**
* 巡检结果
*/

View File

@@ -63,7 +63,7 @@ public class InspectionTaskVo implements Serializable {
* 巡检人名称
*/
@ExcelProperty(value = "巡检人名称")
private Long actUserName;
private String actUserName;
/**
* 巡检方式

View File

@@ -0,0 +1,67 @@
package org.dromara.property.domain.vo.mobile;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.property.domain.InspectionTaskDetail;
import java.io.Serial;
import java.util.Date;
/**
* @author yuyongle
* @version 1.0
* @description: TODO
* @date 2025/9/1 16:24
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = InspectionTaskDetail.class)
public class MInspectionPointVo {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@ExcelProperty(value = "主键id")
private Long id;
/**
* 巡检点id
*/
@ExcelProperty(value = "巡检点id")
private Long pointId;
/**
* 巡检点名称
*/
@ExcelProperty(value = "巡检点名称")
private String pointName;
/**
* 巡检状态(0未完成,1已完成)
*/
@ExcelProperty(value = "巡检状态(0未完成,1已完成)")
private String inspectionState;
/**
* 巡检结果
*/
@ExcelProperty(value = "巡检结果")
private String inspectionResults;
/**
* 点开始时间
*/
@ExcelProperty(value = "点开始时间")
private Date pointStartTime;
/**
* 点结束时间
*/
@ExcelProperty(value = "点结束时间")
private Date pointEndTime;
}

View File

@@ -0,0 +1,107 @@
package org.dromara.property.domain.vo.mobile;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.property.domain.InspectionTask;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* @author yuyongle
* @version 1.0
* @description: 巡检任务
* @date 2025/9/1 14:01
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = InspectionTask.class)
public class MInspectionTaskVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@ExcelProperty(value = "主键id")
private Long id;
/**
* 巡检计划id
*/
@ExcelProperty(value = "巡检计划id")
private Long inspectionPlanId;
/**
* 巡检计划名称
*/
private String planName;
/**
* 实际巡检时间
*/
@ExcelProperty(value = "实际巡检时间")
private Date actInsTime;
/**
* 当前巡检人
*/
@ExcelProperty(value = "当前巡检人")
private Long actUserId;
/**
* 巡检人名称
*/
@ExcelProperty(value = "巡检人名称")
private String actUserName;
/**
* 巡检方式
*/
@ExcelProperty(value = "巡检方式")
private String taskType;
/**
* 转移描述
*/
@ExcelProperty(value = "转移描述")
private String transferDesc;
/**
* 巡检状态
*/
@ExcelProperty(value = "巡检状态")
private String status;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 计划巡检时间范围
*/
private String planInsTime;
/**
* 巡检进度
*/
private String inspectionProgress;
/**
* 计划巡检人id
*/
private String planUserId;
/**
* 计划巡检人姓名
*/
private String planUserName;
/**
* 搜索值
*/
@ExcelProperty(value = "搜索值")
private String searchValue;
}

View File

@@ -3,6 +3,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.property.domain.bo.InspectionPointBo;
import org.dromara.property.domain.vo.InspectionPointVo;
import org.dromara.property.domain.vo.mobile.MInspectionPointVo;
import java.util.Collection;
import java.util.List;
@@ -64,4 +65,5 @@ public interface IInspectionPointService {
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@@ -1,10 +1,10 @@
package org.dromara.property.service;
import org.dromara.property.domain.InspectionTaskDetail;
import org.dromara.property.domain.vo.InspectionTaskDetailVo;
import org.dromara.property.domain.bo.InspectionTaskDetailBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.property.domain.vo.mobile.MInspectionPointVo;
import java.util.Collection;
import java.util.List;
@@ -66,4 +66,14 @@ public interface IInspectionTaskDetailService {
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
//移动端
/**
* APP端查询巡检明细列表
*
* @param bo
* @param pageQuery
* @return
*/
TableDataInfo<MInspectionPointVo> mQueryPageList(InspectionTaskDetailBo bo, PageQuery pageQuery);
}

View File

@@ -4,6 +4,7 @@ import org.dromara.property.domain.vo.InspectionTaskVo;
import org.dromara.property.domain.bo.InspectionTaskBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.property.domain.vo.mobile.MInspectionTaskVo;
import java.util.Collection;
import java.util.List;
@@ -65,4 +66,16 @@ public interface IInspectionTaskService {
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* app端查询列表
*/
/**
* 分页查询巡检任务列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 巡检任务分页列表
*/
TableDataInfo<MInspectionTaskVo> mQueryPageList(InspectionTaskBo bo, PageQuery pageQuery);
}

View File

@@ -3,8 +3,12 @@ package org.dromara.property.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -22,23 +26,18 @@ import org.dromara.property.domain.bo.InspectionPlanBo;
import org.dromara.property.domain.bo.InspectionPlanStaffBo;
import org.dromara.property.domain.bo.MachineMaintainPlanBo;
import org.dromara.property.domain.bo.MachineMaintainPlanStaffBo;
import org.dromara.property.domain.vo.InspectionPlanDetailVo;
import org.dromara.property.domain.vo.InspectionPlanStaffVo;
import org.dromara.property.domain.vo.InspectionPlanVo;
import org.dromara.property.domain.vo.ResidentPersonVo;
import org.dromara.property.mapper.InspectionPlanMapper;
import org.dromara.property.mapper.InspectionPlanStaffMapper;
import org.dromara.property.mapper.InspectionRouteMapper;
import org.dromara.property.mapper.ResidentPersonMapper;
import org.dromara.property.domain.vo.*;
import org.dromara.property.mapper.*;
import org.dromara.property.service.IInspectionPlanService;
import org.dromara.system.api.RemoteUserService;
import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -56,6 +55,8 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService {
private final ResidentPersonMapper residentPersonMapper;
private final InspectionPlanStaffMapper inspectionPlanStaffMapper;
private final InspectionRouteMapper inspectionRouteMapper;
private final InspectionRoutePointMapper inspectionRoutePointMapper;
private final InspectionTaskMapper inspectionTaskMapper;
@DubboReference
private RemoteUserService remoteUserService;
@@ -159,10 +160,170 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService {
inspectionPlanStaffMapper.insert(convert);
}
}
doInspectionPianTask(add);
}
return flag;
}
/**
* 根据计划生成任务
*
* @param inspectionPlan
*/
public void doInspectionPianTask(InspectionPlan inspectionPlan) {
// 如果没有有效计划,直接返回
if (ObjectUtil.isEmpty(inspectionPlan)) {
return;
}
// 处理每个巡检计划
// 获取今天的起始时间
LocalDateTime todayStart = LocalDateTime.now().with(LocalTime.MIN);
// 获取今天的结束时间
LocalDateTime todayEnd = LocalDateTime.now().with(LocalTime.MAX);
LambdaQueryWrapper<InspectionTask> inspectionTaskWrapper = new LambdaQueryWrapper<>();
inspectionTaskWrapper.eq(InspectionTask::getInspectionPlanId, inspectionPlan.getId());
inspectionTaskWrapper.between(InspectionTask::getCreateTime, Date.from(todayStart.atZone(ZoneId.systemDefault()).toInstant()), Date.from(todayEnd.atZone(ZoneId.systemDefault()).toInstant()));
boolean exists = inspectionTaskMapper.exists(inspectionTaskWrapper);
if (!exists) {
// 根据不同的巡检周期执行相应处理
switch (inspectionPlan.getInspectionPlanPeriod()) {
case "1":
// 处理按月/天的巡检计划
handleMonthlyDailyPlan(inspectionPlan);
break;
case "2":
// 处理按周的巡检计划
handleWeeklyDailyPlan(inspectionPlan);
break;
default:
// 对于未知的巡检周期类型,记录警告日志
log.warn("未知类型");
break;
}
}
}
/**
* 处理按月/天的巡检计划
*
* @param plan 巡检计划信息
*/
private void handleMonthlyDailyPlan(InspectionPlan plan) {
LambdaQueryWrapper<InspectionPlanStaff> staffQueryWrapper = Wrappers.lambdaQuery();
staffQueryWrapper.eq(InspectionPlanStaff::getInspectionPlanId, plan.getId());
//查询该计划巡查人员
List<InspectionPlanStaffVo> inspectionPlanStaffVos = inspectionPlanStaffMapper.selectVoList(staffQueryWrapper);
List<Long> userIdList = inspectionPlanStaffVos.stream().map(vo -> vo.getUserId()).distinct().collect(Collectors.toList());
List<ResidentPersonVo> residentPersonVoList = residentPersonMapper.selectVoByIds(userIdList);
// 使用Optional安全处理可能为null的对象
Optional.ofNullable(plan).ifPresent(p -> {
DateTime today = DateUtil.date();
DateTime startDate = DateUtil.date(plan.getStartDate());
DateTime endDate = DateUtil.date(plan.getEndDate());
String day = DateUtil.today().split("-")[2];
List<String> inspectionDayList = Arrays.asList(p.getInspectionDay().split(","));
if (DateUtil.isIn(today, startDate, endDate) && inspectionDayList.contains(day)) {
InspectionTask task = new InspectionTask();
task.setInspectionPlanId(p.getId());
task.setTaskType(plan.getSignType());
task.setPlanInsTime(startDate + "~" + p.getEndTime());
task.setTenantId(plan.getTenantId());
task.setStatus("0");
if (CollectionUtil.isNotEmpty(inspectionPlanStaffVos)) {
String userIds = residentPersonVoList.stream().map(vo -> vo.getId().toString()).collect(Collectors.joining(","));
String userNames = residentPersonVoList.stream().map(vo -> vo.getUserName()).collect(Collectors.joining(","));
task.setPlanUserId(ObjectUtil.isNotEmpty(userIds) ? userIds : "");
task.setPlanUserName(ObjectUtil.isNotEmpty(userNames) ? userNames : "");
}
boolean b = inspectionTaskMapper.insert(task) > 0;
if (b) {
createTaskDetail(task, plan);
}
}
});
}
/**
* 处理按周的巡检计划
*
* @param plan 巡检计划信息
*/
private void handleWeeklyDailyPlan(InspectionPlan plan) {
LambdaQueryWrapper<InspectionPlanStaff> staffQueryWrapper = Wrappers.lambdaQuery();
staffQueryWrapper.eq(InspectionPlanStaff::getInspectionPlanId, plan.getId());
//查询该计划巡查人员
List<InspectionPlanStaffVo> inspectionPlanStaffVos = inspectionPlanStaffMapper.selectVoList(staffQueryWrapper);
// 使用Optional安全处理可能为null的对象
Optional.ofNullable(plan).ifPresent(p -> {
DateTime today = DateUtil.date();
DateTime startDate = DateUtil.date(plan.getStartDate());
DateTime endDate = DateUtil.date(plan.getEndDate());
String week = String.valueOf(DateUtil.dayOfWeek(DateUtil.date()));
List<String> inspectionWorkdayList = Arrays.asList(p.getInspectionWorkday().split(","));
if (DateUtil.isIn(today, startDate, endDate) && inspectionWorkdayList.contains(week)) {
InspectionTask task = new InspectionTask();
task.setInspectionPlanId(p.getId());
task.setInspectionPlanId(p.getId());
task.setTaskType(plan.getSignType());
task.setPlanInsTime(startDate + "~" + p.getEndTime());
task.setTenantId(plan.getTenantId());
task.setStatus("0");
if (CollectionUtil.isNotEmpty(inspectionPlanStaffVos)) {
String userIds = inspectionPlanStaffVos.stream().map(vo -> vo.getUserId().toString()).collect(Collectors.joining(","));
String userNames = inspectionPlanStaffVos.stream().map(InspectionPlanStaffVo::getUserName).collect(Collectors.joining(","));
task.setPlanUserId(userIds);
task.setPlanUserName(userNames);
} else {
task.setPlanUserId("");
task.setPlanUserName("");
}
boolean b = inspectionTaskMapper.insert(task) > 0;
if (b) {
createTaskDetail(task, plan);
}
}
});
}
/**
* 根据任务生成任务明细
*/
private void createTaskDetail(InspectionTask task, InspectionPlan plan) {
//查询该计划路线关联的巡检点
List<InspectionRoutePointVo> inspectionRoutePointVoList = inspectionRoutePointMapper.selectVoList(
new LambdaQueryWrapper<InspectionRoutePoint>()
.eq(InspectionRoutePoint::getRouteId, plan.getInspectionRouteId()));
Assert.isTrue(CollUtil.isNotEmpty(inspectionRoutePointVoList), "该计划路线没有关联的巡检点");
//收集巡检点id
List<Long> pointIds = inspectionRoutePointVoList.stream().map(vo -> vo.getPointId()).toList();
List<InspectionRoutePointVo> inspectionRoutePointVos = inspectionRoutePointMapper.selectVoByIds(pointIds);
Assert.isTrue(CollUtil.isNotEmpty(inspectionRoutePointVos), "未找到巡检点");
inspectionRoutePointVos.forEach(vo -> {
InspectionTaskDetail taskDetail = new InspectionTaskDetail();
taskDetail.setTaskId(task.getId());
taskDetail.setRouteId(vo.getRouteId());
taskDetail.setPointId(vo.getPointId());
// 分割
String[] parts = StrUtil.splitToArray(task.getPlanInsTime(), '~');
String dateTimeStr1 = parts[0]; // 完整时间
String timeStr2 = parts[1]; // 只有时间部分
// 提取第一个时间的日期部分前10位
String datePart = dateTimeStr1.substring(0, 10);
String dateTimeStr2 = datePart + " " + timeStr2;
// 使用 Hutool 解析为 Date 对象
Date startDate = DateUtil.parse(dateTimeStr1, DatePattern.NORM_DATETIME_FORMAT);
Date endDate = DateUtil.parse(dateTimeStr2, DatePattern.NORM_DATETIME_FORMAT);
taskDetail.setPointStartTime(startDate);
taskDetail.setPointEndTime(endDate);
});
}
/**
* 修改巡检计划
*
@@ -173,20 +334,21 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService {
@Transactional(rollbackFor = Exception.class)
public Boolean updateByBo(InspectionPlanBo bo) {
InspectionPlan update = MapstructUtils.convert(bo, InspectionPlan.class);
validEntityBeforebo(bo.getId(),bo);
validEntityBeforebo(bo.getId(), bo);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforebo(Long id,InspectionPlanBo bo) {
private void validEntityBeforebo(Long id, InspectionPlanBo bo) {
//TODO 做一些数据校验,如唯一约束
if(CollUtil.isNotEmpty(bo.getInspectionPlanStaffBoList())){
if (CollUtil.isNotEmpty(bo.getInspectionPlanStaffBoList())) {
QueryWrapper<InspectionPlanStaff> staffLambdaQueryWrapper = new QueryWrapper<>();
staffLambdaQueryWrapper.eq("inspection_plan_id", id);
inspectionPlanStaffMapper.delete(staffLambdaQueryWrapper);
List<InspectionPlanStaffBo> inspectionPlanStaffBoList = bo.getInspectionPlanStaffBoList();
inspectionPlanStaffBoList.stream().forEach(s->{
inspectionPlanStaffBoList.stream().forEach(s -> {
s.setInspectionPlanId(id);
});
inspectionPlanStaffMapper.insertBatch(BeanUtil.copyToList(inspectionPlanStaffBoList, InspectionPlanStaff.class));

View File

@@ -17,6 +17,7 @@ import org.dromara.property.domain.bo.InspectionPointBo;
import org.dromara.property.domain.vo.InspectionItemVo;
import org.dromara.property.domain.vo.InspectionPlanVo;
import org.dromara.property.domain.vo.InspectionPointVo;
import org.dromara.property.domain.vo.mobile.MInspectionPointVo;
import org.dromara.property.mapper.InspectionItemMapper;
import org.dromara.property.mapper.InspectionPlanMapper;
import org.dromara.property.mapper.InspectionPointMapper;
@@ -52,7 +53,7 @@ public class InspectionPointServiceImpl implements IInspectionPointService {
* @return 巡检点
*/
@Override
public InspectionPointVo queryById(Long id){
public InspectionPointVo queryById(Long id) {
return baseMapper.selectVoById(id);
}
@@ -77,9 +78,9 @@ public class InspectionPointServiceImpl implements IInspectionPointService {
.distinct()
.collect(Collectors.toList());
List<InspectionItemVo> inspectionItemVos = inspectionItemMapper.selectVoByIds(itemIdList);
result.getRecords().stream().forEach(s->{
result.getRecords().stream().forEach(s -> {
InspectionItemVo inspectionItemVo = inspectionItemVos.stream().filter(vo -> vo.getId() != null && vo.getId().equals(s.getItemId())).findFirst().orElse(null);
s.setItemName(ObjectUtil.isNotEmpty(inspectionItemVo)?inspectionItemVo.getItemName():null);
s.setItemName(ObjectUtil.isNotEmpty(inspectionItemVo) ? inspectionItemVo.getItemName() : null);
});
return TableDataInfo.build(result);
}
@@ -144,7 +145,7 @@ public class InspectionPointServiceImpl implements IInspectionPointService {
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(InspectionPoint entity){
private void validEntityBeforeSave(InspectionPoint entity) {
//TODO 做一些数据校验,如唯一约束
}
@@ -158,7 +159,7 @@ public class InspectionPointServiceImpl implements IInspectionPointService {
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;

View File

@@ -1,5 +1,8 @@
package org.dromara.property.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -9,7 +12,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.property.domain.InspectionStaff;
import org.dromara.property.domain.vo.InspectionPointVo;
import org.dromara.property.domain.vo.mobile.MInspectionPointVo;
import org.dromara.property.mapper.InspectionPointMapper;
import org.springframework.stereotype.Service;
import org.dromara.property.domain.bo.InspectionTaskDetailBo;
import org.dromara.property.domain.vo.InspectionTaskDetailVo;
@@ -17,9 +22,11 @@ import org.dromara.property.domain.InspectionTaskDetail;
import org.dromara.property.mapper.InspectionTaskDetailMapper;
import org.dromara.property.service.IInspectionTaskDetailService;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.stream.Collectors;
/**
* 巡检明细Service业务层处理
@@ -33,6 +40,7 @@ import java.util.Collection;
public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailService {
private final InspectionTaskDetailMapper baseMapper;
private final InspectionPointMapper inspectionPointMapper;
/**
* 查询巡检明细
@@ -80,15 +88,11 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer
lqw.eq(bo.getRouteId() != null, InspectionTaskDetail::getRouteId, bo.getRouteId());
lqw.eq(bo.getPlanId() != null, InspectionTaskDetail::getPlanId, bo.getPlanId());
lqw.eq(bo.getPointId() != null, InspectionTaskDetail::getPointId, bo.getPointId());
lqw.eq(StringUtils.isNotBlank(bo.getPatrolType()), InspectionTaskDetail::getPatrolType, bo.getPatrolType());
lqw.eq(StringUtils.isNotBlank(bo.getSignType()), InspectionTaskDetail::getSignType, bo.getSignType());
lqw.eq(bo.getActualInspectionTime() != null, InspectionTaskDetail::getActualInspectionTime, bo.getActualInspectionTime());
lqw.eq(StringUtils.isNotBlank(bo.getActualSignState()), InspectionTaskDetail::getActualSignState, bo.getActualSignState());
lqw.eq(StringUtils.isNotBlank(bo.getInspectionState()), InspectionTaskDetail::getInspectionState, bo.getInspectionState());
lqw.eq(StringUtils.isNotBlank(bo.getInspectionImage()), InspectionTaskDetail::getInspectionImage, bo.getInspectionImage());
lqw.eq(StringUtils.isNotBlank(bo.getPlanInspectionPerson()), InspectionTaskDetail::getPlanInspectionPerson, bo.getPlanInspectionPerson());
lqw.eq(StringUtils.isNotBlank(bo.getActualInspectionPerson()), InspectionTaskDetail::getActualInspectionPerson, bo.getActualInspectionPerson());
lqw.eq(StringUtils.isNotBlank(bo.getTaskStatus()), InspectionTaskDetail::getTaskStatus, bo.getTaskStatus());
lqw.eq(StringUtils.isNotBlank(bo.getInspectionResults()), InspectionTaskDetail::getInspectionResults, bo.getInspectionResults());
lqw.eq(StringUtils.isNotBlank(bo.getInspectionDesc()), InspectionTaskDetail::getInspectionDesc, bo.getInspectionDesc());
lqw.eq(StringUtils.isNotBlank(bo.getInspectionLocation()), InspectionTaskDetail::getInspectionLocation, bo.getInspectionLocation());
@@ -150,4 +154,47 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer
}
return baseMapper.deleteByIds(ids) > 0;
}
//移动端
/**
* APP端查询巡检明细列表
*
* @param bo
* @param pageQuery
* @return
*/
@Override
public TableDataInfo<MInspectionPointVo> mQueryPageList(InspectionTaskDetailBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<InspectionTaskDetail> lqw = buildQueryWrapper(bo);
Page<InspectionTaskDetailVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
// 转换 VO 类型
List<MInspectionPointVo> mInspectionTaskDetailVo=new ArrayList<>();
// 转换并设置 typeName
if(CollUtil.isNotEmpty(result.getRecords())){
//收集巡检点id
List<Long> pointIdList = result.getRecords().stream().map(InspectionTaskDetailVo::getPointId).collect(Collectors.toList());
//查询巡检点转成巡检点名称转成map id->名称
Map<Long, String> pointNameMap = inspectionPointMapper.selectVoByIds(pointIdList).stream().collect(Collectors.toMap(InspectionPointVo::getId, InspectionPointVo::getPointName));
mInspectionTaskDetailVo = result.getRecords().stream().map(vo -> {
MInspectionPointVo mVo = BeanUtil.copyProperties(vo, MInspectionPointVo.class);
dataProcessing(mVo,pointNameMap);
return mVo;
}).collect(Collectors.toList());
}
// 构建分页结果
Page<MInspectionPointVo> pageResult = new Page<>();
pageResult.setRecords(mInspectionTaskDetailVo);
pageResult.setTotal(result.getTotal());
pageResult.setCurrent(result.getCurrent());
pageResult.setSize(result.getSize());
return TableDataInfo.build(pageResult);
}
/**
*
* @param mInspectionTaskDetailVo
* @param pointNameMap
*/
private void dataProcessing(MInspectionPointVo mInspectionTaskDetailVo, Map<Long, String> pointNameMap){
mInspectionTaskDetailVo.setPointName( ObjectUtil.defaultIfNull(pointNameMap.get(mInspectionTaskDetailVo.getPointId()), "未知点位"));
}
}

View File

@@ -1,5 +1,9 @@
package org.dromara.property.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -9,14 +13,14 @@ import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.property.domain.InspectionPlan;
import org.dromara.property.domain.InspectionTask;
import org.dromara.property.domain.InspectionTaskDetail;
import org.dromara.property.domain.*;
import org.dromara.property.domain.bo.InspectionTaskBo;
import org.dromara.property.domain.vo.InspectionItemVo;
import org.dromara.property.domain.vo.InspectionPlanVo;
import org.dromara.property.domain.vo.InspectionPointVo;
import org.dromara.property.domain.vo.InspectionTaskVo;
import org.dromara.property.mapper.InspectionPlanMapper;
import org.dromara.property.mapper.InspectionTaskMapper;
import org.dromara.property.domain.vo.mobile.MInspectionTaskVo;
import org.dromara.property.mapper.*;
import org.dromara.property.service.IInspectionTaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -26,6 +30,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.toMap;
import static java.util.stream.Collectors.toSet;
@@ -42,8 +47,10 @@ import static java.util.stream.Collectors.toSet;
public class InspectionTaskServiceImpl implements IInspectionTaskService {
private final InspectionTaskMapper baseMapper;
@Autowired
private final InspectionTaskDetailMapper inspectionTaskDetailMapper;
private final InspectionPlanMapper inspectionPlanMapper;
private final InspectionItemMapper inspectionItemMapper;
private final InspectionPointMapper inspectionPointMapper;
/**
* 查询巡检任务
@@ -52,7 +59,7 @@ public class InspectionTaskServiceImpl implements IInspectionTaskService {
* @return 巡检任务
*/
@Override
public InspectionTaskVo queryById(Long id){
public InspectionTaskVo queryById(Long id) {
InspectionTaskVo inspectionTaskVo = baseMapper.selectVoById(id);
InspectionPlanVo inspectionPlanVo = inspectionPlanMapper.selectVoById(inspectionTaskVo.getInspectionPlanId());
inspectionTaskVo.setPlanName(inspectionPlanVo.getPlanName());
@@ -75,6 +82,7 @@ public class InspectionTaskServiceImpl implements IInspectionTaskService {
}
return TableDataInfo.build(result);
}
private void addPlanNameInfo(Page<InspectionTaskVo> inspectionTaskVoPage) {
// 提取用户userId方便批量查询
Set<Long> planIds = inspectionTaskVoPage.getRecords().stream().map(InspectionTaskVo::getInspectionPlanId).collect(toSet());
@@ -85,6 +93,7 @@ public class InspectionTaskServiceImpl implements IInspectionTaskService {
// 将查询补充的信息添加到Vo中
inspectionTaskVoPage.getRecords().forEach(e -> e.setPlanName(hashMap.get(e.getInspectionPlanId())));
}
/**
* 查询符合条件的巡检任务列表
*
@@ -147,7 +156,7 @@ public class InspectionTaskServiceImpl implements IInspectionTaskService {
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(InspectionTask entity){
private void validEntityBeforeSave(InspectionTask entity) {
//TODO 做一些数据校验,如唯一约束
}
@@ -162,9 +171,92 @@ public class InspectionTaskServiceImpl implements IInspectionTaskService {
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
/**
* app端查询列表
*/
/**
* 分页查询巡检任务列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 巡检任务分页列表
*/
@Override
public TableDataInfo<MInspectionTaskVo> mQueryPageList(InspectionTaskBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<InspectionTask> lqw = buildQueryWrapper(bo);
// 查询得到 Page<InspectionTaskVo>
Page<InspectionTaskVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
// 手动转换为 Page<MInspectionTaskVo>
Page<MInspectionTaskVo> voPage = new Page<>();
voPage.setCurrent(result.getCurrent());
voPage.setSize(result.getSize());
voPage.setTotal(result.getTotal());
voPage.setPages(result.getPages());
// 转换 records 列表
List<MInspectionTaskVo> voList = result.getRecords().stream()
.map(this::convertToMInspectionTaskVo) // 或使用构造函数、BeanUtils.copyProperties 等
.collect(Collectors.toList());
voPage.setRecords(voList);
return TableDataInfo.build(voPage);
}
// 转换方法:根据需求填充 MInspectionTaskVo 字段
private MInspectionTaskVo convertToMInspectionTaskVo(InspectionTaskVo vo) {
MInspectionTaskVo mVo = BeanUtil.copyProperties(vo, MInspectionTaskVo.class);
Long taskId = vo.getId();
Long inspectionPlanId = vo.getInspectionPlanId();
if (taskId == null || inspectionPlanId == null) {
mVo.setInspectionProgress("0%");
return mVo;
}
// 3. 查询该任务已完成的巡检明细(已完成的点)
List<InspectionTaskDetail> finishedDetails = inspectionTaskDetailMapper.selectList(
new LambdaQueryWrapper<InspectionTaskDetail>()
.eq(InspectionTaskDetail::getTaskId, taskId)
);
if (finishedDetails.size() == 0) {
mVo.setInspectionProgress("0%");
return mVo;
}
//查询巡检项目
InspectionItem inspectionItem = inspectionItemMapper.selectOne(
new LambdaQueryWrapper<InspectionItem>()
.eq(InspectionItem::getId, finishedDetails.get(0).getPointId())
);
if(ObjectUtil.isNotEmpty(inspectionItem)){
// 2. 查询该巡检项下的所有巡检点(总点数)
List<InspectionPoint> allPoints = inspectionPointMapper.selectList(
new LambdaQueryWrapper<InspectionPoint>()
.eq(InspectionPoint::getItemId, inspectionItem)
);
int totalCount = CollUtil.isEmpty(allPoints) ? 0 : allPoints.size();
if (totalCount == 0) {
mVo.setInspectionProgress("0%");
return mVo;
}
int finishedCount = CollUtil.size(finishedDetails);
// 4. 计算进度
String progress = NumberUtil.formatPercent(finishedCount * 1.0 / totalCount, 0); // 如 "60%"
mVo.setInspectionProgress(progress);
}else {
mVo.setInspectionProgress("0");
}
return mVo;
}
}

View File

@@ -123,6 +123,11 @@ public class ResidentPersonServiceImpl implements IResidentPersonService {
// 首次入驻新用户权限组默认使用公司权限
ResidentUnitVo ruVo = residentUnitService.queryById(bo.getUnitId());
add.setPassword("123456");
//查询该单位下是否有管理员
new LambdaQueryWrapper<ResidentPerson>().eq(ResidentPerson::getUnitId, bo.getUnitId())
.eq(ResidentPerson::getUserRoles, "1");
add.setAuthGroupId(ruVo.getAuthGroupId());
add.setAuthBegDate(ruVo.getAuthBegDate());
add.setAuthEndDate(ruVo.getAuthEndDate());

View File

@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.property.domain.ResidentPerson;
import org.dromara.property.mapper.ResidentPersonMapper;
import org.dromara.property.service.IResidentPersonService;
import org.dromara.property.service.ITbRoomService;
import org.springframework.stereotype.Service;
@@ -19,6 +20,7 @@ import org.dromara.property.domain.vo.ResidentUnitVo;
import org.dromara.property.domain.ResidentUnit;
import org.dromara.property.mapper.ResidentUnitMapper;
import org.dromara.property.service.IResidentUnitService;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
@@ -42,6 +44,7 @@ public class ResidentUnitServiceImpl implements IResidentUnitService {
private final ITbRoomService roomService;
private final IResidentPersonService personService;
private final ResidentPersonMapper personMapper;
/**
* 查询入驻单位
@@ -122,16 +125,37 @@ public class ResidentUnitServiceImpl implements IResidentUnitService {
* @return 是否新增成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(ResidentUnitBo bo) {
ResidentUnit add = MapstructUtils.convert(bo, ResidentUnit.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
addResidentPerson(add);
}
return flag;
}
/**
* 新增一个管理员
* @param unit
*/
private void addResidentPerson(ResidentUnit unit) {
ResidentPerson residentPerson = new ResidentPerson();
residentPerson.setUserName(unit.getContactPerson());
residentPerson.setPhone(unit.getPhone().toString());
residentPerson.setGender(1L);
residentPerson.setState(2L);
residentPerson.setUserRoles("1");
residentPerson.setIsAudit("1");
residentPerson.setAuthGroupId(unit.getAuthGroupId());
residentPerson.setAuthBegDate(unit.getAuthBegDate());
residentPerson.setAuthEndDate(unit.getAuthEndDate());
residentPerson.setUnitId(unit.getId());
residentPerson.setUnitName(unit.getName());
personMapper.insert(residentPerson);
}
/**
* 修改入驻单位
*

View File

@@ -9,7 +9,6 @@ import org.apache.rocketmq.spring.core.RocketMQListener;
import org.dromara.sis.rocketmq.RocketMqConstants;
import org.dromara.sis.rocketmq.domain.HighDensity;
import org.dromara.sis.service.IEventAlarmReportService;
import org.dromara.sis.service.IZeroSensationPassageService;
import org.springframework.stereotype.Component;
/**