diff --git a/shuili-system/src/main/java/com/kms/yxgh/df/controller/DfRecordController.java b/shuili-system/src/main/java/com/kms/yxgh/df/controller/DfRecordController.java index 2fdc2495..6058bfeb 100644 --- a/shuili-system/src/main/java/com/kms/yxgh/df/controller/DfRecordController.java +++ b/shuili-system/src/main/java/com/kms/yxgh/df/controller/DfRecordController.java @@ -3,6 +3,7 @@ package com.kms.yxgh.df.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.kms.yxgh.base.Response; import com.kms.yxgh.df.domain.dto.DfRecordDetailDto; +import com.kms.yxgh.df.domain.dto.DfRecordSearchDto; import com.kms.yxgh.df.domain.dto.StartPlan; import com.kms.yxgh.df.domain.entity.DfRecord; import com.kms.yxgh.df.service.DfRecordService; @@ -41,8 +42,8 @@ public class DfRecordController { */ @PostMapping("/list") @ApiOperation("堤防巡视检查记录列表") - public IPage list(@RequestBody SearchParam sp) { - return dfRecordService.selectPage(sp); + public IPage list(@RequestBody SearchParam sp) { + return dfRecordService.search(sp); } diff --git a/shuili-system/src/main/java/com/kms/yxgh/df/domain/dto/DfRecordDetailDto.java b/shuili-system/src/main/java/com/kms/yxgh/df/domain/dto/DfRecordDetailDto.java index f76d2ae0..a9874cbf 100644 --- a/shuili-system/src/main/java/com/kms/yxgh/df/domain/dto/DfRecordDetailDto.java +++ b/shuili-system/src/main/java/com/kms/yxgh/df/domain/dto/DfRecordDetailDto.java @@ -33,7 +33,6 @@ public class DfRecordDetailDto { private List items; @Data - public static class DfRecordItemDto { @ApiModelProperty("主键") diff --git a/shuili-system/src/main/java/com/kms/yxgh/df/domain/dto/DfRecordSearchDto.java b/shuili-system/src/main/java/com/kms/yxgh/df/domain/dto/DfRecordSearchDto.java new file mode 100644 index 00000000..0f366def --- /dev/null +++ b/shuili-system/src/main/java/com/kms/yxgh/df/domain/dto/DfRecordSearchDto.java @@ -0,0 +1,37 @@ +package com.kms.yxgh.df.domain.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.util.List; +import lombok.Data; + +/** + * @ClassName: DfRecordSearchDto + * @Description: TODO + * @Date: 2023/11/15 下午4:02 * + * @author: hxh + * @version: 1.0 + */ +@Data +@ApiModel("堤防巡视检查记录检索详情") +public class DfRecordSearchDto { + + @ApiModelProperty("巡查记录") + private String id; + + @ApiModelProperty("巡查计划ID") + private String planId; + + @ApiModelProperty("巡查记录名称") + private String name; + + @ApiModelProperty("状态") + private Long status; + + @ApiModelProperty("异常部位") + private List parts; + + @ApiModelProperty("操作者") + private String operatorName; + +} diff --git a/shuili-system/src/main/java/com/kms/yxgh/df/service/DfRecordService.java b/shuili-system/src/main/java/com/kms/yxgh/df/service/DfRecordService.java index b4021b32..3eb74b3c 100644 --- a/shuili-system/src/main/java/com/kms/yxgh/df/service/DfRecordService.java +++ b/shuili-system/src/main/java/com/kms/yxgh/df/service/DfRecordService.java @@ -4,14 +4,18 @@ import static com.kms.yxgh.df.service.DfCheckingService.PART_SEPARATOR; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.kms.common.utils.BaseEntityUtils; +import com.kms.system.service.SysUserService; import com.kms.yxgh.base.enums.CheckingStatus; import com.kms.yxgh.base.enums.RecordStatus; import com.kms.yxgh.df.domain.dto.DfCheckingDetailDto; import com.kms.yxgh.df.domain.dto.DfPlanDetailDto; import com.kms.yxgh.df.domain.dto.DfRecordDetailDto; import com.kms.yxgh.df.domain.dto.DfRecordDetailDto.DfRecordItemDto; +import com.kms.yxgh.df.domain.dto.DfRecordSearchDto; import com.kms.yxgh.df.domain.dto.StartPlan; import com.kms.yxgh.df.domain.entity.DfRecord; import com.kms.yxgh.df.domain.entity.DfRecordItem; @@ -19,13 +23,18 @@ import com.kms.yxgh.df.mapper.DfRecordItemMapper; import com.kms.yxgh.df.mapper.DfRecordMapper; import com.kms.yxgh.util.BeanCopyUtils; import com.kms.yxgh.util.StreamUtils; +import com.shuili.common.core.domain.SearchParam; +import com.shuili.common.core.domain.entity.SysUser; import com.shuili.common.core.service.BaseService; import com.shuili.common.exception.BaseException; import com.shuili.common.utils.DateUtils; import com.shuili.common.utils.StringUtils; import java.util.Arrays; +import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; @@ -44,6 +53,44 @@ public class DfRecordService extends BaseService { private final DfRecordItemMapper dfRecordItemMapper; private final DfCheckingService dfCheckingService; private final DfPlanService dfPlanService; + private final SysUserService userService; + + public IPage search(SearchParam sp) { + IPage page = selectPage(sp); + if (CollectionUtil.isNotEmpty(page.getRecords())) { + List ids = page.getRecords().stream().map(DfRecord::getId) + .collect(Collectors.toList()); + Wrapper wp = Wrappers.lambdaQuery() + .in(DfRecordItem::getRecordId, ids) + .eq(DfRecordItem::getStatus, CheckingStatus.ABNORMAL.getValue()); + Map> items = Optional.ofNullable(dfRecordItemMapper.selectList(wp)) + .map(list -> list.stream().collect( + Collectors.groupingBy(DfRecordItem::getRecordId, Collectors.toList()))) + .orElseGet(Collections::emptyMap); + + List records = page.getRecords().stream().map(r -> { + DfRecordSearchDto dto = BeanCopyUtils.copy(r, DfRecordSearchDto + .class); + if (dto != null) { + dto.setParts(items.getOrDefault(r.getPlanId(), Collections.emptyList()) + .stream().map(item -> { + List parts = Arrays.stream(item.getParts().split(PART_SEPARATOR)) + .sorted(Comparator.comparingInt(String::length)).collect(Collectors.toList()); + return parts.get(parts.size() - 1); + }).collect(Collectors.toList())); + dto.setOperatorName(Optional.ofNullable(userService.getWithRedis(r.getCreateUid())).map( + SysUser::getNickName).orElse("")); + } + return dto; + }).collect(Collectors.toList()); + Page recordSearchDtoPage = new Page<>(page.getCurrent(), page.getSize(), + page.getTotal()); + recordSearchDtoPage.setRecords(records); + return recordSearchDtoPage; + } else { + return new Page<>(page.getCurrent(), page.getSize(), page.getTotal()); + } + } @Transactional(rollbackFor = Exception.class) public DfRecordDetailDto start(StartPlan startPlan) { @@ -100,6 +147,7 @@ public class DfRecordService extends BaseService { return null; } + @Transactional(rollbackFor = Exception.class) public DfRecordDetailDto update(DfRecordDetailDto dfRecord) { if (CollectionUtil.isNotEmpty(dfRecord.getItems())) { dfRecord.getItems().forEach(o -> { @@ -116,6 +164,7 @@ public class DfRecordService extends BaseService { return dfRecord; } + @Transactional(rollbackFor = Exception.class) public Boolean deleteById(String id) { boolean rt = removeById(id); if (rt) { diff --git a/shuili-system/src/main/java/com/kms/yxgh/sz/controller/SzRecordController.java b/shuili-system/src/main/java/com/kms/yxgh/sz/controller/SzRecordController.java index ad34817b..10704ad6 100644 --- a/shuili-system/src/main/java/com/kms/yxgh/sz/controller/SzRecordController.java +++ b/shuili-system/src/main/java/com/kms/yxgh/sz/controller/SzRecordController.java @@ -2,9 +2,10 @@ package com.kms.yxgh.sz.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.kms.yxgh.base.Response; -import com.kms.yxgh.sz.domain.dto.SzRecordDetailDto; import com.kms.yxgh.sz.domain.dto.StartPlan; +import com.kms.yxgh.sz.domain.dto.SzRecordDetailDto; import com.kms.yxgh.sz.domain.entity.SzRecord; +import com.kms.yxgh.sz.domain.dto.SzRecordSearchDto; import com.kms.yxgh.sz.service.SzRecordService; import com.shuili.common.annotation.Log; import com.shuili.common.core.domain.SearchParam; @@ -41,8 +42,8 @@ public class SzRecordController { */ @PostMapping("/list") @ApiOperation("水闸巡视检查记录列表") - public IPage list(@RequestBody SearchParam sp) { - return szRecordService.selectPage(sp); + public IPage list(@RequestBody SearchParam sp) { + return szRecordService.search(sp); } diff --git a/shuili-system/src/main/java/com/kms/yxgh/sz/domain/dto/SzRecordDetailDto.java b/shuili-system/src/main/java/com/kms/yxgh/sz/domain/dto/SzRecordDetailDto.java index 0a2e11cb..578f6767 100644 --- a/shuili-system/src/main/java/com/kms/yxgh/sz/domain/dto/SzRecordDetailDto.java +++ b/shuili-system/src/main/java/com/kms/yxgh/sz/domain/dto/SzRecordDetailDto.java @@ -33,7 +33,6 @@ public class SzRecordDetailDto { private List items; @Data - public static class SzRecordItemDto { @ApiModelProperty("主键") diff --git a/shuili-system/src/main/java/com/kms/yxgh/sz/domain/dto/SzRecordSearchDto.java b/shuili-system/src/main/java/com/kms/yxgh/sz/domain/dto/SzRecordSearchDto.java new file mode 100644 index 00000000..368f9efb --- /dev/null +++ b/shuili-system/src/main/java/com/kms/yxgh/sz/domain/dto/SzRecordSearchDto.java @@ -0,0 +1,37 @@ +package com.kms.yxgh.sz.domain.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.util.List; +import lombok.Data; + +/** + * @ClassName: DfRecordSearchDto + * @Description: TODO + * @Date: 2023/11/15 下午4:02 * + * @author: hxh + * @version: 1.0 + */ +@Data +@ApiModel("水闸巡视检查记录检索详情") +public class SzRecordSearchDto { + + @ApiModelProperty("巡查记录") + private String id; + + @ApiModelProperty("巡查计划ID") + private String planId; + + @ApiModelProperty("巡查记录名称") + private String name; + + @ApiModelProperty("状态") + private Long status; + + @ApiModelProperty("异常部位") + private List parts; + + @ApiModelProperty("操作者") + private String operatorName; + +} diff --git a/shuili-system/src/main/java/com/kms/yxgh/sz/service/SzRecordService.java b/shuili-system/src/main/java/com/kms/yxgh/sz/service/SzRecordService.java index 1b373a2c..aa04b41f 100644 --- a/shuili-system/src/main/java/com/kms/yxgh/sz/service/SzRecordService.java +++ b/shuili-system/src/main/java/com/kms/yxgh/sz/service/SzRecordService.java @@ -4,8 +4,11 @@ import static com.kms.yxgh.sz.service.SzCheckingService.PART_SEPARATOR; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.kms.common.utils.BaseEntityUtils; +import com.kms.system.service.SysUserService; import com.kms.yxgh.base.enums.CheckingStatus; import com.kms.yxgh.base.enums.RecordStatus; import com.kms.yxgh.sz.domain.dto.StartPlan; @@ -15,17 +18,23 @@ import com.kms.yxgh.sz.domain.dto.SzRecordDetailDto; import com.kms.yxgh.sz.domain.dto.SzRecordDetailDto.SzRecordItemDto; import com.kms.yxgh.sz.domain.entity.SzRecord; import com.kms.yxgh.sz.domain.entity.SzRecordItem; +import com.kms.yxgh.sz.domain.dto.SzRecordSearchDto; import com.kms.yxgh.sz.mapper.SzRecordItemMapper; import com.kms.yxgh.sz.mapper.SzRecordMapper; import com.kms.yxgh.util.BeanCopyUtils; import com.kms.yxgh.util.StreamUtils; +import com.shuili.common.core.domain.SearchParam; +import com.shuili.common.core.domain.entity.SysUser; import com.shuili.common.core.service.BaseService; import com.shuili.common.exception.BaseException; import com.shuili.common.utils.DateUtils; import com.shuili.common.utils.StringUtils; import java.util.Arrays; +import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; @@ -41,15 +50,54 @@ import org.springframework.transaction.annotation.Transactional; @AllArgsConstructor public class SzRecordService extends BaseService { - private final SzRecordItemMapper SzRecordItemMapper; - private final SzCheckingService SzCheckingService; - private final SzPlanService SzPlanService; + private final SzRecordItemMapper szRecordItemMapper; + private final SzCheckingService szCheckingService; + private final SzPlanService szPlanService; + private final SysUserService userService; + + public IPage search(SearchParam sp) { + IPage page = selectPage(sp); + if (CollectionUtil.isNotEmpty(page.getRecords())) { + List ids = page.getRecords().stream().map(SzRecord::getId) + .collect(Collectors.toList()); + Wrapper wp = Wrappers.lambdaQuery() + .in(SzRecordItem::getRecordId, ids) + .eq(SzRecordItem::getStatus, CheckingStatus.ABNORMAL.getValue()); + Map> items = Optional.ofNullable(szRecordItemMapper.selectList(wp)) + .map(list -> list.stream().collect( + Collectors.groupingBy(SzRecordItem::getRecordId, Collectors.toList()))) + .orElseGet(Collections::emptyMap); + + List records = page.getRecords().stream().map(r -> { + SzRecordSearchDto dto = BeanCopyUtils.copy(r, SzRecordSearchDto + .class); + if (dto != null) { + dto.setParts(items.getOrDefault(r.getPlanId(), Collections.emptyList()) + .stream().map(item -> { + List parts = Arrays.stream(item.getParts().split( + SzCheckingService.PART_SEPARATOR)) + .sorted(Comparator.comparingInt(String::length)).collect(Collectors.toList()); + return parts.get(parts.size() - 1); + }).collect(Collectors.toList())); + dto.setOperatorName(Optional.ofNullable(userService.getWithRedis(r.getCreateUid())).map( + SysUser::getNickName).orElse("")); + } + return dto; + }).collect(Collectors.toList()); + Page recordSearchDtoPage = new Page<>(page.getCurrent(), page.getSize(), + page.getTotal()); + recordSearchDtoPage.setRecords(records); + return recordSearchDtoPage; + } else { + return new Page<>(page.getCurrent(), page.getSize(), page.getTotal()); + } + } @Transactional(rollbackFor = Exception.class) public SzRecordDetailDto start(StartPlan startPlan) { - SzPlanDetailDto planDetailDto = SzPlanService.getDetailById(startPlan.getPlanId()); + SzPlanDetailDto planDetailDto = szPlanService.getDetailById(startPlan.getPlanId()); if (planDetailDto != null) { - SzCheckingDetailDto checkingDetailDto = SzCheckingService.getDetailById( + SzCheckingDetailDto checkingDetailDto = szCheckingService.getDetailById( planDetailDto.getXcId()); if (checkingDetailDto != null) { SzRecord record = new SzRecord(); @@ -67,7 +115,7 @@ public class SzRecordService extends BaseService { item.setStatus(CheckingStatus.NORMAL.getValue()); item.setRecordId(""); BaseEntityUtils.preInsert(item); - SzRecordItemMapper.insert(item); + szRecordItemMapper.insert(item); }); } return this.getDetailById(id); @@ -84,7 +132,7 @@ public class SzRecordService extends BaseService { SzRecordDetailDto dto = BeanCopyUtils.copy(record, SzRecordDetailDto.class); Wrapper wp = Wrappers.lambdaQuery() .eq(SzRecordItem::getRecordId, id); - List items = SzRecordItemMapper.selectList(wp); + List items = szRecordItemMapper.selectList(wp); if (CollectionUtil.isNotEmpty(items) && dto != null) { dto.setItems(StreamUtils.toList(items, r -> { SzRecordItemDto itemDto = BeanCopyUtils.copy(r, SzRecordItemDto.class); @@ -100,6 +148,7 @@ public class SzRecordService extends BaseService { return null; } + @Transactional(rollbackFor = Exception.class) public SzRecordDetailDto update(SzRecordDetailDto SzRecord) { if (CollectionUtil.isNotEmpty(SzRecord.getItems())) { SzRecord.getItems().forEach(o -> { @@ -110,12 +159,13 @@ public class SzRecordService extends BaseService { item.setStatus(o.getStatus()); item.setProblem(o.getProblem()); BaseEntityUtils.preUpdate(item); - SzRecordItemMapper.updateById(item); + szRecordItemMapper.updateById(item); }); } return SzRecord; } + @Transactional(rollbackFor = Exception.class) public Boolean deleteById(String id) { boolean rt = removeById(id); if (rt) { @@ -127,6 +177,6 @@ public class SzRecordService extends BaseService { private void deleteItems(String id) { Wrapper wp = Wrappers.lambdaQuery() .eq(SzRecordItem::getRecordId, id); - SzRecordItemMapper.delete(wp); + szRecordItemMapper.delete(wp); } }