Commit 612fc4ead71c67d70559e9c8e094b29acad31824
1 parent
da5f3ae0
养护计划优化提交
Showing
25 changed files
with
142 additions
and
109 deletions
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/inspectionplan/InspectionPlanController.java
| ... | ... | @@ -6,6 +6,7 @@ import com.zteits.urbanops.framework.common.pojo.PageParam; |
| 6 | 6 | import com.zteits.urbanops.framework.common.pojo.PageResult; |
| 7 | 7 | import com.zteits.urbanops.framework.common.util.object.BeanUtils; |
| 8 | 8 | import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; |
| 9 | +import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; | |
| 9 | 10 | import com.zteits.urbanops.module.garden.controller.admin.inspectionplan.vo.InspectionPlanPageReqVO; |
| 10 | 11 | import com.zteits.urbanops.module.garden.controller.admin.inspectionplan.vo.InspectionPlanRespVO; |
| 11 | 12 | import com.zteits.urbanops.module.garden.controller.admin.inspectionplan.vo.InspectionPlanSaveReqVO; |
| ... | ... | @@ -117,6 +118,9 @@ public class InspectionPlanController { |
| 117 | 118 | @Operation(summary = "获得巡检计划汇总分页") |
| 118 | 119 | @PreAuthorize("@ss.hasPermission('garden:inspection-plan:query')") |
| 119 | 120 | public CommonResult<PageResult<InspectionPlanRespVO>> getInspectionPlanPage(@Valid InspectionPlanPageReqVO pageReqVO) { |
| 121 | + if(pageReqVO.getCompanyId() == null){ | |
| 122 | + pageReqVO.setCompanyId(SecurityFrameworkUtils.getCompanyId()); | |
| 123 | + } | |
| 120 | 124 | PageResult<InspectionPlanRespVO> pageResult = inspectionPlanService.getInspectionPlanPage(pageReqVO); |
| 121 | 125 | return success(pageResult); |
| 122 | 126 | } | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/maintainplan/MaintainPlanController.java
| ... | ... | @@ -6,6 +6,7 @@ import com.zteits.urbanops.framework.common.pojo.PageParam; |
| 6 | 6 | import com.zteits.urbanops.framework.common.pojo.PageResult; |
| 7 | 7 | import com.zteits.urbanops.framework.common.util.object.BeanUtils; |
| 8 | 8 | import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; |
| 9 | +import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; | |
| 9 | 10 | import com.zteits.urbanops.module.garden.controller.admin.maintainplan.vo.MaintainPlanPageReqVO; |
| 10 | 11 | import com.zteits.urbanops.module.garden.controller.admin.maintainplan.vo.MaintainPlanRespVO; |
| 11 | 12 | import com.zteits.urbanops.module.garden.controller.admin.maintainplan.vo.MaintainPlanSaveReqVO; |
| ... | ... | @@ -117,6 +118,9 @@ public class MaintainPlanController { |
| 117 | 118 | @Operation(summary = "获得养护计划汇总分页") |
| 118 | 119 | @PreAuthorize("@ss.hasPermission('garden:maintain-plan:query')") |
| 119 | 120 | public CommonResult<PageResult<MaintainPlanRespVO>> getMaintainPlanPage(@Valid MaintainPlanPageReqVO pageReqVO) { |
| 121 | + if(pageReqVO.getCompanyId() == null){ | |
| 122 | + pageReqVO.setCompanyId(SecurityFrameworkUtils.getCompanyId()); | |
| 123 | + } | |
| 120 | 124 | PageResult<MaintainPlanRespVO> pageResult = maintainPlanService.getMaintainPlanPage(pageReqVO); |
| 121 | 125 | return success(pageResult); |
| 122 | 126 | } | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/maintainplan/vo/MaintainPlanCommitDetailRespVO.java
| ... | ... | @@ -41,7 +41,7 @@ public class MaintainPlanCommitDetailRespVO { |
| 41 | 41 | private String remark; |
| 42 | 42 | |
| 43 | 43 | @Schema(description = "总完成百分比", example = "98.00") |
| 44 | - private Integer totalFinishPercent; | |
| 44 | + private Integer totalFinishNum; | |
| 45 | 45 | |
| 46 | 46 | @Schema(description = "本次完成百分比", example = "98.00") |
| 47 | 47 | @ExcelProperty("本次完成百分比") | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/maintainplan/vo/MaintainPlanDetailPageReqVO.java
| ... | ... | @@ -45,8 +45,8 @@ public class MaintainPlanDetailPageReqVO extends PageParam { |
| 45 | 45 | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
| 46 | 46 | private LocalDate[] endTime; |
| 47 | 47 | |
| 48 | - @Schema(description = "完成百分比") | |
| 49 | - private Integer finishPercent; | |
| 48 | + @Schema(description = "完成次数") | |
| 49 | + private Integer planFinishNum; | |
| 50 | 50 | |
| 51 | 51 | @Schema(description = "完成状态 1:未完成;2:进行中;3:已完成") |
| 52 | 52 | private Integer finishState; | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/maintainplan/vo/MaintainPlanDetailRespVO.java
| ... | ... | @@ -55,9 +55,9 @@ public class MaintainPlanDetailRespVO { |
| 55 | 55 | @ExcelProperty("计划次数") |
| 56 | 56 | private Integer planNum; |
| 57 | 57 | |
| 58 | - @Schema(description = "完成百分比", requiredMode = Schema.RequiredMode.REQUIRED) | |
| 59 | - @ExcelProperty("完成百分比") | |
| 60 | - private Integer finishPercent; | |
| 58 | + @Schema(description = "完成次数", requiredMode = Schema.RequiredMode.REQUIRED) | |
| 59 | + @ExcelProperty("完成次数") | |
| 60 | + private Integer planFinishNum; | |
| 61 | 61 | |
| 62 | 62 | @Schema(description = "完成状态 1:未完成;2:进行中;3:已完成", requiredMode = Schema.RequiredMode.REQUIRED) |
| 63 | 63 | @ExcelProperty("完成状态 1:未完成;2:进行中;3:已完成") | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/maintainplan/vo/MaintainPlanDetailSaveReqVO.java
| ... | ... | @@ -47,9 +47,9 @@ public class MaintainPlanDetailSaveReqVO { |
| 47 | 47 | @Schema(description = "执行时间") |
| 48 | 48 | private LocalDate endTime; |
| 49 | 49 | |
| 50 | - @Schema(description = "完成百分比", requiredMode = Schema.RequiredMode.REQUIRED) | |
| 51 | - @NotNull(message = "完成百分比不能为空") | |
| 52 | - private Integer finishPercent; | |
| 50 | + @Schema(description = "完成地址", requiredMode = Schema.RequiredMode.REQUIRED) | |
| 51 | + @NotNull(message = "完成次数不能为空") | |
| 52 | + private Integer planFinishNum; | |
| 53 | 53 | |
| 54 | 54 | @Schema(description = "完成状态 1:未完成;2:进行中;3:已完成", requiredMode = Schema.RequiredMode.REQUIRED) |
| 55 | 55 | @NotNull(message = "完成状态 1:未完成;2:进行中;3:已完成不能为空") | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/road/RoadController.java
| 1 | 1 | package com.zteits.urbanops.module.garden.controller.admin.road; |
| 2 | 2 | |
| 3 | +import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; | |
| 3 | 4 | import org.springframework.web.bind.annotation.*; |
| 4 | 5 | import jakarta.annotation.Resource; |
| 5 | 6 | import org.springframework.validation.annotation.Validated; |
| ... | ... | @@ -82,6 +83,9 @@ public class RoadController { |
| 82 | 83 | @Operation(summary = "获得道路管理分页") |
| 83 | 84 | @PreAuthorize("@ss.hasPermission('garden:road:query')") |
| 84 | 85 | public CommonResult<PageResult<RoadRespVO>> getRoadPage(@Valid RoadPageReqVO pageReqVO) { |
| 86 | + if(pageReqVO.getCompanyId() == null){ | |
| 87 | + pageReqVO.setCompanyId(SecurityFrameworkUtils.getCompanyId()); | |
| 88 | + } | |
| 85 | 89 | PageResult<RoadRespVO> pageResult = roadService.getRoadPage(pageReqVO); |
| 86 | 90 | return success(pageResult); |
| 87 | 91 | } | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/maintainplan/AppMaintainPlanDetailController.java
| ... | ... | @@ -38,7 +38,7 @@ public class AppMaintainPlanDetailController { |
| 38 | 38 | } |
| 39 | 39 | |
| 40 | 40 | @PostMapping("/get/not-finish") |
| 41 | - @Operation(summary = "获取未养护计划明细") | |
| 41 | + @Operation(summary = "获取未完成养护计划明细") | |
| 42 | 42 | @Parameter(name = "plan_no", description = "计划编号", required = true, example = "1024") |
| 43 | 43 | //@PreAuthorize("@ss.hasPermission('app:garden:maintain-plan-commit:query')") |
| 44 | 44 | public CommonResult<List<AppMaintainNotFinishPlanDetailRespVO>> getMaintainNotFinishPlanCommitDetail(@Valid @RequestBody AppMaintainNotFinishPlanDetailReqVO reqVO) { | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/maintainplan/vo/AppMaintainNotFinishPlanDetailRespVO.java
| ... | ... | @@ -34,9 +34,9 @@ public class AppMaintainNotFinishPlanDetailRespVO { |
| 34 | 34 | @ExcelProperty("周期ID: 1:日/次;2:周/次;3:月/次;4:年/次") |
| 35 | 35 | private Integer cycleId; |
| 36 | 36 | |
| 37 | - @Schema(description = "本次完成百分比") | |
| 38 | - @ExcelProperty("本次完成百分比") | |
| 39 | - private Integer finishPercent; | |
| 37 | + @Schema(description = "完成次数") | |
| 38 | + @ExcelProperty("完成次数") | |
| 39 | + private Integer planFinishNum; | |
| 40 | 40 | |
| 41 | 41 | @Schema(description = "提交人用户", example = "19167") |
| 42 | 42 | @ExcelProperty("提交人用户") | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/maintainplan/vo/AppMaintainPlanCommitDetailPageRespVO.java
| ... | ... | @@ -35,6 +35,9 @@ public class AppMaintainPlanCommitDetailPageRespVO { |
| 35 | 35 | @Schema(description = "计划次数") |
| 36 | 36 | private Integer planNum; |
| 37 | 37 | |
| 38 | + @Schema(description = "完成计划次数") | |
| 39 | + private Integer planFinishNum; | |
| 40 | + | |
| 38 | 41 | @Schema(description = "照片host") |
| 39 | 42 | private String imgHost; |
| 40 | 43 | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/maintainplan/vo/AppMaintainPlanDetailRespVO.java
| ... | ... | @@ -37,8 +37,8 @@ public class AppMaintainPlanDetailRespVO { |
| 37 | 37 | @Schema(description = "计划次数") |
| 38 | 38 | private Integer planNum; |
| 39 | 39 | |
| 40 | - @Schema(description = "完成百分比", requiredMode = Schema.RequiredMode.REQUIRED) | |
| 41 | - private Integer finishPercent; | |
| 40 | + @Schema(description = "完成次数", requiredMode = Schema.RequiredMode.REQUIRED) | |
| 41 | + private Integer planFinishNum; | |
| 42 | 42 | |
| 43 | 43 | @Schema(description = "完成状态 1:未完成;2:进行中;3:已完成", requiredMode = Schema.RequiredMode.REQUIRED) |
| 44 | 44 | private Integer finishState; | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/maintainplan/vo/AppMaintainPlanPagePlanTypeReqVO.java
| ... | ... | @@ -23,6 +23,10 @@ public class AppMaintainPlanPagePlanTypeReqVO extends PageParam { |
| 23 | 23 | @Schema(description = "计划名称", example = "王五") |
| 24 | 24 | private String planName; |
| 25 | 25 | |
| 26 | + /** | |
| 27 | + * 完成状态 1:未完成;2:已完成;3:已失效 | |
| 28 | + * @see com.zteits.urbanops.module.garden.enums.FinishStateEnum | |
| 29 | + */ | |
| 26 | 30 | @Schema(description = "完成状态 1:未完成;2:已完成;3:已失效") |
| 27 | 31 | @NotNull(message = "完成状态不能为空") |
| 28 | 32 | @Min(value = 1, message = "状态最小为1") | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/maintainplan/vo/AppMaintainPlanPagePlanTypeRespVO.java
| ... | ... | @@ -42,9 +42,9 @@ public class AppMaintainPlanPagePlanTypeRespVO { |
| 42 | 42 | @ExcelProperty("计划次数") |
| 43 | 43 | private Integer planNum; |
| 44 | 44 | |
| 45 | - @Schema(description = "完成百分比", requiredMode = Schema.RequiredMode.REQUIRED) | |
| 46 | - @ExcelProperty("完成百分比") | |
| 47 | - private Integer finishPercent; | |
| 45 | + @Schema(description = "完成次数", requiredMode = Schema.RequiredMode.REQUIRED) | |
| 46 | + @ExcelProperty("完成次数") | |
| 47 | + private Integer planFinishNum; | |
| 48 | 48 | |
| 49 | 49 | @Schema(description = "完成状态 1:未完成;2:进行中;3:已完成", requiredMode = Schema.RequiredMode.REQUIRED) |
| 50 | 50 | @ExcelProperty("完成状态 1:未完成;2:进行中;3:已完成") | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/maintainplan/vo/AppMaintainPlanPageRoadReqVO.java
| ... | ... | @@ -19,6 +19,10 @@ public class AppMaintainPlanPageRoadReqVO extends PageParam { |
| 19 | 19 | @Schema(description = "道路名称", example = "王五") |
| 20 | 20 | private String roadName; |
| 21 | 21 | |
| 22 | + /** | |
| 23 | + * 完成状态 1:未完成;2:已完成;3:已失效 | |
| 24 | + * @see com.zteits.urbanops.module.garden.enums.FinishStateEnum | |
| 25 | + */ | |
| 22 | 26 | @Schema(description = "完成状态 1:未完成;2:已完成;3:已失效") |
| 23 | 27 | @NotNull(message = "完成状态不能为空") |
| 24 | 28 | @Min(value = 1, message = "状态最小为1") | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/maintainplan/vo/AppMaintainPlanPageRoadRespVO.java
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/maintainplan/MaintainPlanDetailDO.java
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/maintainplan/MaintainPlanCommitMapper.java
| ... | ... | @@ -35,4 +35,11 @@ public interface MaintainPlanCommitMapper extends BaseMapperX<MaintainPlanCommit |
| 35 | 35 | * @return 分页结果 |
| 36 | 36 | */ |
| 37 | 37 | IPage<AppMaintainPlanCommitDetailPageRespVO> appMaintainPlanCommitDetailPage(@Param("page") IPage<AppMaintainPlanCommitDetailPageRespVO> page, @Param("req") AppMaintainPlanCommitPageReqVO pageReqVO); |
| 38 | + | |
| 39 | + /** | |
| 40 | + * 获取所有已完成比例 | |
| 41 | + * | |
| 42 | + * @return | |
| 43 | + */ | |
| 44 | + int selectFinishPercent(@Param("planNo") String planNo, @Param("sortNum") Integer sortNum); | |
| 38 | 45 | } |
| 39 | 46 | \ No newline at end of file | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/maintainplan/MaintainPlanDetailMapper.java
| ... | ... | @@ -35,7 +35,7 @@ public interface MaintainPlanDetailMapper extends BaseMapperX<MaintainPlanDetail |
| 35 | 35 | .eqIfPresent(MaintainPlanDetailDO::getSortNum, reqVO.getSortNum()) |
| 36 | 36 | .betweenIfPresent(MaintainPlanDetailDO::getBeginTime, reqVO.getBeginTime()) |
| 37 | 37 | .betweenIfPresent(MaintainPlanDetailDO::getEndTime, reqVO.getEndTime()) |
| 38 | - .eqIfPresent(MaintainPlanDetailDO::getFinishPercent, reqVO.getFinishPercent()) | |
| 38 | + .eqIfPresent(MaintainPlanDetailDO::getPlanFinishNum, reqVO.getPlanFinishNum()) | |
| 39 | 39 | .eqIfPresent(MaintainPlanDetailDO::getFinishState, reqVO.getFinishState()) |
| 40 | 40 | .likeIfPresent(MaintainPlanDetailDO::getCreatorName, reqVO.getCreatorName()) |
| 41 | 41 | .betweenIfPresent(MaintainPlanDetailDO::getCreateTime, reqVO.getCreateTime()) | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/FinishStateEnum.java
| 1 | 1 | package com.zteits.urbanops.module.garden.enums; |
| 2 | 2 | |
| 3 | +import lombok.Getter; | |
| 4 | +import lombok.Setter; | |
| 3 | 5 | |
| 4 | 6 | public enum FinishStateEnum { |
| 5 | 7 | |
| ... | ... | @@ -15,6 +17,12 @@ public enum FinishStateEnum { |
| 15 | 17 | * 过期 |
| 16 | 18 | */ |
| 17 | 19 | EXPIRED(3), |
| 20 | + | |
| 21 | + /** | |
| 22 | + * 过期 | |
| 23 | + */ | |
| 24 | + STOP(4), | |
| 25 | + | |
| 18 | 26 | ; |
| 19 | 27 | |
| 20 | 28 | FinishStateEnum(Integer status) { | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/inspectionplan/InspectionPlanServiceImpl.java
| ... | ... | @@ -4,6 +4,7 @@ import cn.hutool.core.thread.ThreadUtil; |
| 4 | 4 | import cn.hutool.core.util.RandomUtil; |
| 5 | 5 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| 6 | 6 | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| 7 | +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; | |
| 7 | 8 | import com.baomidou.mybatisplus.core.metadata.IPage; |
| 8 | 9 | import com.zteits.urbanops.framework.common.pojo.CommonResult; |
| 9 | 10 | import com.zteits.urbanops.framework.common.pojo.PageResult; |
| ... | ... | @@ -51,6 +52,7 @@ import java.util.stream.Collectors; |
| 51 | 52 | import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 52 | 53 | import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*; |
| 53 | 54 | import static com.zteits.urbanops.module.garden.enums.PlanConstants.CYCLE_ID_TYPE; |
| 55 | +import static javax.management.Query.eq; | |
| 54 | 56 | |
| 55 | 57 | /** |
| 56 | 58 | * 巡检计划汇总 Service 实现类 |
| ... | ... | @@ -128,6 +130,7 @@ public class InspectionPlanServiceImpl implements InspectionPlanService { |
| 128 | 130 | List<InspectionPlanDetailDO> detailDOList = new ArrayList<>(); |
| 129 | 131 | //按照道路创建计划 |
| 130 | 132 | createReqVO.getRoadListReqVO().forEach(roadReqVO -> { |
| 133 | + ThreadUtil.sleep(1); | |
| 131 | 134 | InspectionPlanDO inspectionPlan = BeanUtils.toBean(createReqVO, InspectionPlanDO.class); |
| 132 | 135 | String batchNo = "BN" + System.currentTimeMillis() + RandomUtil.randomInt(1000, 9999) + roadReqVO.getRoadId(); |
| 133 | 136 | inspectionPlan.setBatchNo(batchNo); |
| ... | ... | @@ -172,7 +175,7 @@ public class InspectionPlanServiceImpl implements InspectionPlanService { |
| 172 | 175 | int index = 1; |
| 173 | 176 | for (PeriodResult periodResult : calculate) { |
| 174 | 177 | InspectionPlanDetailDO entity = getInspectionPlanDetailDO(batchNo, createReqVO, roadReqVO, now); |
| 175 | - ThreadUtil.sleep(2); | |
| 178 | + ThreadUtil.sleep(1); | |
| 176 | 179 | entity.setSortNum(index); |
| 177 | 180 | entity.setPlanNum(periodResult.getCount()); |
| 178 | 181 | entity.setBeginTime(LocalDateTime.parse(periodResult.getStart() + " 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); |
| ... | ... | @@ -281,6 +284,7 @@ public class InspectionPlanServiceImpl implements InspectionPlanService { |
| 281 | 284 | |
| 282 | 285 | @Override |
| 283 | 286 | public PageResult<InspectionPlanRespVO> getInspectionPlanPage(InspectionPlanPageReqVO pageReqVO) { |
| 287 | + | |
| 284 | 288 | PageResult<InspectionPlanDO> pageResult = inspectionPlanInterceptMapper.selectForPage(pageReqVO); |
| 285 | 289 | |
| 286 | 290 | PageResult<InspectionPlanRespVO> result = BeanUtils.toBean(pageResult, InspectionPlanRespVO.class); |
| ... | ... | @@ -341,9 +345,16 @@ public class InspectionPlanServiceImpl implements InspectionPlanService { |
| 341 | 345 | |
| 342 | 346 | @Override |
| 343 | 347 | public void stopPlanInspectionPlan(String batchNo) { |
| 344 | - inspectionPlanMapper.delete(InspectionPlanDO::getBatchNo, batchNo); | |
| 345 | - inspectionPlanDetailMapper.delete(InspectionPlanDetailDO::getBatchNo, batchNo); | |
| 346 | - inspectionPlanRoleMapper.delete(InspectionPlanRoleDO::getBatchNo, batchNo); | |
| 348 | + //停止计划详情 | |
| 349 | + inspectionPlanDetailMapper.update(new UpdateWrapper<InspectionPlanDetailDO>().lambda() | |
| 350 | + .set(InspectionPlanDetailDO::getFinishState, FinishStateEnum.STOP.getStatus()) | |
| 351 | + .eq(InspectionPlanDetailDO::getFinishState, FinishStateEnum.NOT_FINISHED.getStatus()) | |
| 352 | + .eq(InspectionPlanDetailDO::getBatchNo, batchNo)); | |
| 353 | + //停止计划 | |
| 354 | + inspectionPlanMapper.update(new UpdateWrapper<InspectionPlanDO>().lambda() | |
| 355 | + .set(InspectionPlanDO::getFinishState, FinishStateEnum.STOP.getStatus()) | |
| 356 | + .eq(InspectionPlanDO::getFinishState, FinishStateEnum.NOT_FINISHED.getStatus()) | |
| 357 | + .eq(InspectionPlanDO::getBatchNo, batchNo)); | |
| 347 | 358 | } |
| 348 | 359 | |
| 349 | 360 | @Override |
| ... | ... | @@ -418,8 +429,8 @@ public class InspectionPlanServiceImpl implements InspectionPlanService { |
| 418 | 429 | LocalDate yesterday = LocalDate.now(); // 昨天日期 |
| 419 | 430 | LambdaUpdateWrapper<InspectionPlanDO> updateWrapper = new LambdaUpdateWrapper<>(); |
| 420 | 431 | updateWrapper.lt(InspectionPlanDO::getEndTime, yesterday) |
| 421 | - .ne(InspectionPlanDO::getFinishState, FinishStateEnum.FINISHED.getStatus()) // 排除已完成的 | |
| 422 | - .set(InspectionPlanDO::getFinishState, FinishStateEnum.EXPIRED.getStatus()); // 设置为过期状态 | |
| 432 | + .set(InspectionPlanDO::getFinishState, FinishStateEnum.EXPIRED.getStatus()) // 设置为过期状态 | |
| 433 | + .eq(InspectionPlanDO::getFinishState, FinishStateEnum.NOT_FINISHED.getStatus()); | |
| 423 | 434 | inspectionPlanMapper.update(null, updateWrapper); |
| 424 | 435 | } |
| 425 | 436 | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/maintainplan/MaintainPlanCommitServiceImpl.java
| ... | ... | @@ -19,6 +19,7 @@ import com.zteits.urbanops.module.garden.dal.mysql.maintainplan.MaintainPlanComm |
| 19 | 19 | import com.zteits.urbanops.module.garden.dal.mysql.maintainplan.MaintainPlanCommonUserMapper; |
| 20 | 20 | import com.zteits.urbanops.module.garden.dal.mysql.maintainplan.MaintainPlanDetailMapper; |
| 21 | 21 | import com.zteits.urbanops.module.garden.dal.mysql.maintainplan.MaintainPlanMapper; |
| 22 | +import com.zteits.urbanops.module.garden.enums.FinishStateEnum; | |
| 22 | 23 | import com.zteits.urbanops.module.system.api.dept.DeptApi; |
| 23 | 24 | import com.zteits.urbanops.module.system.api.dept.dto.DeptRespDTO; |
| 24 | 25 | import jakarta.annotation.Resource; |
| ... | ... | @@ -93,20 +94,21 @@ public class MaintainPlanCommitServiceImpl implements MaintainPlanCommitService |
| 93 | 94 | throw exception(MAINTAIN_PLAN_NOT_EXISTS); |
| 94 | 95 | } |
| 95 | 96 | |
| 96 | - /*3.查询计划明细最大次数*/ | |
| 97 | - Long countNum = maintainPlanDetailMapper.selectCount(new QueryWrapper<MaintainPlanDetailDO>().lambda() | |
| 98 | - .eq(MaintainPlanDetailDO::getPlanNo, createReqVO.getPlanNo())); | |
| 97 | + int sortNum = maintainPlanDetailDO.getPlanFinishNum() +1; | |
| 98 | + /*3.查询已完成比例*/ | |
| 99 | + int finishPercent = maintainPlanCommitMapper.selectFinishPercent(createReqVO.getPlanNo(), sortNum); | |
| 99 | 100 | |
| 100 | 101 | MaintainPlanCommitDO commitDO = new MaintainPlanCommitDO(); |
| 101 | 102 | commitDO.setBatchNo(maintainPlanDO.getBatchNo()); |
| 102 | 103 | commitDO.setPlanNo(maintainPlanDetailDO.getPlanNo()); |
| 103 | 104 | commitDO.setBusiLine(maintainPlanDO.getBusiLine()); |
| 104 | 105 | commitDO.setPlanTypeId(maintainPlanDO.getPlanTypeId()); |
| 105 | - commitDO.setSortNum(countNum.intValue() +1); | |
| 106 | + //计划明细已完成次数+1 | |
| 107 | + commitDO.setSortNum(sortNum); | |
| 106 | 108 | commitDO.setCompanyId(maintainPlanDO.getCompanyId()); |
| 107 | 109 | commitDO.setDeptId(maintainPlanDO.getDeptId()); |
| 108 | 110 | commitDO.setRoadId(maintainPlanDO.getRoadId()); |
| 109 | - commitDO.setFinishPercent(createReqVO.getTotalFinishPercent() - maintainPlanDetailDO.getFinishPercent()); | |
| 111 | + commitDO.setFinishPercent(createReqVO.getTotalFinishPercent() - finishPercent); | |
| 110 | 112 | commitDO.setImgHost(createReqVO.getImgHost()); |
| 111 | 113 | commitDO.setBeginImg(JSONObject.toJSONString(createReqVO.getBeginImg())); |
| 112 | 114 | commitDO.setProcessImg("[]"); |
| ... | ... | @@ -142,25 +144,31 @@ public class MaintainPlanCommitServiceImpl implements MaintainPlanCommitService |
| 142 | 144 | } |
| 143 | 145 | } |
| 144 | 146 | |
| 145 | - //完成状态 1:未完成;2:已完成 | |
| 146 | - int detailFinishState = 1; | |
| 147 | + | |
| 148 | + int detailFinishNum = maintainPlanDetailDO.getPlanFinishNum(); | |
| 147 | 149 | if(createReqVO.getTotalFinishPercent().equals(100)){ |
| 148 | - detailFinishState = 2; | |
| 150 | + detailFinishNum = detailFinishNum + 1; | |
| 149 | 151 | } |
| 150 | 152 | |
| 151 | - /*5.更新计划明细及计划汇总*/ | |
| 152 | - LambdaUpdateWrapper<MaintainPlanDetailDO> detailUpdateSql = new LambdaUpdateWrapper<MaintainPlanDetailDO>() | |
| 153 | - .set(MaintainPlanDetailDO::getFinishPercent, createReqVO.getTotalFinishPercent()) | |
| 154 | - .set(MaintainPlanDetailDO::getFinishState, detailFinishState) | |
| 155 | - .set(MaintainPlanDetailDO::getUpdateTime, LocalDateTime.now()) | |
| 156 | - .eq(MaintainPlanDetailDO::getPlanNo, createReqVO.getPlanNo()); | |
| 157 | - maintainPlanDetailMapper.update(detailUpdateSql); | |
| 153 | + //完成状态 1:未完成;2:已完成 | |
| 154 | + int detailFinishState = FinishStateEnum.NOT_FINISHED.getStatus(); | |
| 155 | + if(detailFinishNum == maintainPlanDetailDO.getPlanNum()){ | |
| 156 | + detailFinishState = FinishStateEnum.FINISHED.getStatus(); | |
| 157 | + } | |
| 158 | 158 | |
| 159 | 159 | //完成状态 1:未完成;2:已完成 |
| 160 | - if(detailFinishState ==2){ | |
| 161 | - int finishState =1; | |
| 160 | + if(detailFinishState == FinishStateEnum.FINISHED.getStatus()){ | |
| 161 | + //更新明细 | |
| 162 | + LambdaUpdateWrapper<MaintainPlanDetailDO> detailUpdateSql = new LambdaUpdateWrapper<MaintainPlanDetailDO>() | |
| 163 | + .set(MaintainPlanDetailDO::getPlanFinishNum, detailFinishNum) | |
| 164 | + .set(MaintainPlanDetailDO::getFinishState, detailFinishState) | |
| 165 | + .set(MaintainPlanDetailDO::getUpdateTime, LocalDateTime.now()) | |
| 166 | + .eq(MaintainPlanDetailDO::getPlanNo, createReqVO.getPlanNo()); | |
| 167 | + maintainPlanDetailMapper.update(detailUpdateSql); | |
| 168 | + | |
| 169 | + int finishState = FinishStateEnum.NOT_FINISHED.getStatus(); | |
| 162 | 170 | if(maintainPlanDO.getPlanNum().equals(maintainPlanDO.getPlanFinishNum()+1)){ |
| 163 | - finishState =2; | |
| 171 | + finishState = FinishStateEnum.FINISHED.getStatus(); | |
| 164 | 172 | } |
| 165 | 173 | LambdaUpdateWrapper<MaintainPlanDO> maintainPlanDOSql = new LambdaUpdateWrapper<MaintainPlanDO>() |
| 166 | 174 | .set(MaintainPlanDO::getPlanFinishNum, maintainPlanDO.getPlanFinishNum()+1) |
| ... | ... | @@ -234,12 +242,7 @@ public class MaintainPlanCommitServiceImpl implements MaintainPlanCommitService |
| 234 | 242 | } |
| 235 | 243 | /*2.查询明细总完成次数*/ |
| 236 | 244 | MaintainPlanDetailDO maintainPlanDetailDO = maintainPlanDetailMapper.selectOne(MaintainPlanDetailDO::getPlanNo, planNo); |
| 237 | - Integer totalFinishPercent; | |
| 238 | - if (maintainPlanDetailDO != null) { | |
| 239 | - totalFinishPercent = maintainPlanDetailDO.getFinishPercent(); | |
| 240 | - } else { | |
| 241 | - totalFinishPercent = 0; | |
| 242 | - } | |
| 245 | + | |
| 243 | 246 | /*1.查询共同处理人*/ |
| 244 | 247 | list.forEach(e -> { |
| 245 | 248 | MaintainPlanCommitDetailRespVO respVO = new MaintainPlanCommitDetailRespVO(); |
| ... | ... | @@ -247,7 +250,7 @@ public class MaintainPlanCommitServiceImpl implements MaintainPlanCommitService |
| 247 | 250 | respVO.setBeginImgList(StrUtils.imgProcess(e.getBeginImg(), "")); |
| 248 | 251 | respVO.setProcessImgList(StrUtils.imgProcess(e.getProcessImg(), "")); |
| 249 | 252 | respVO.setEndImgList(StrUtils.imgProcess(e.getEndImg(), "")); |
| 250 | - respVO.setTotalFinishPercent(totalFinishPercent); | |
| 253 | + respVO.setTotalFinishNum(maintainPlanDetailDO.getPlanFinishNum()); | |
| 251 | 254 | List<MaintainPlanCommonUserVO> commonUsers = new ArrayList<>(); |
| 252 | 255 | List<MaintainPlanCommonUserDO> maintainPlanCommonUserList = maintainPlanCommonUserMapper.selectList(new QueryWrapper<MaintainPlanCommonUserDO>().lambda() |
| 253 | 256 | .eq(MaintainPlanCommonUserDO::getParentId, maintainPlanDetailDO.getId()) | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/maintainplan/MaintainPlanServiceImpl.java
| ... | ... | @@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil; |
| 4 | 4 | import cn.hutool.core.thread.ThreadUtil; |
| 5 | 5 | import cn.hutool.core.util.RandomUtil; |
| 6 | 6 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| 7 | +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; | |
| 7 | 8 | import com.baomidou.mybatisplus.core.metadata.IPage; |
| 8 | 9 | import com.zteits.urbanops.framework.common.pojo.CommonResult; |
| 9 | 10 | import com.zteits.urbanops.framework.dict.core.DictFrameworkUtils; |
| ... | ... | @@ -140,6 +141,7 @@ public class MaintainPlanServiceImpl implements MaintainPlanService { |
| 140 | 141 | List<MaintainPlanDetailDO> detailDOList = new ArrayList<>(); |
| 141 | 142 | //按照道路创建计划 |
| 142 | 143 | createReqVO.getRoadListReqVO().forEach(roadReqVO -> { |
| 144 | + ThreadUtil.sleep(1); | |
| 143 | 145 | MaintainPlanDO maintainPlan = BeanUtils.toBean(createReqVO, MaintainPlanDO.class); |
| 144 | 146 | String batchNo = "BN" + System.currentTimeMillis() + RandomUtil.randomInt(1000, 9999) + roadReqVO.getRoadId(); |
| 145 | 147 | maintainPlan.setBatchNo(batchNo); |
| ... | ... | @@ -185,7 +187,7 @@ public class MaintainPlanServiceImpl implements MaintainPlanService { |
| 185 | 187 | int index = 1; |
| 186 | 188 | for (PeriodResult periodResult : calculate) { |
| 187 | 189 | MaintainPlanDetailDO entity = getMaintainPlanDetailDO(batchNo, createReqVO, roadReqVO, now); |
| 188 | - ThreadUtil.sleep(2); | |
| 190 | + ThreadUtil.sleep(1); | |
| 189 | 191 | entity.setSortNum(index); |
| 190 | 192 | entity.setPlanNum(periodResult.getCount()); |
| 191 | 193 | entity.setBeginTime(LocalDateTime.parse(periodResult.getStart() + " 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); |
| ... | ... | @@ -354,9 +356,18 @@ public class MaintainPlanServiceImpl implements MaintainPlanService { |
| 354 | 356 | |
| 355 | 357 | @Override |
| 356 | 358 | public void stopPlanInspectionPlan(String batchNo) { |
| 357 | - maintainPlanMapper.delete(MaintainPlanDO::getBatchNo, batchNo); | |
| 358 | - maintainPlanDetailMapper.delete(MaintainPlanDetailDO::getBatchNo, batchNo); | |
| 359 | - maintainPlanRoleMapper.delete(MaintainPlanRoleDO::getBatchNo, batchNo); | |
| 359 | + //停止计划详情 | |
| 360 | + maintainPlanDetailMapper.update(new UpdateWrapper<MaintainPlanDetailDO>().lambda() | |
| 361 | + .set(MaintainPlanDetailDO::getFinishState, FinishStateEnum.STOP.getStatus()) | |
| 362 | + .eq(MaintainPlanDetailDO::getFinishState, FinishStateEnum.NOT_FINISHED.getStatus()) | |
| 363 | + .eq(MaintainPlanDetailDO::getBatchNo, batchNo)); | |
| 364 | + //停止计划 | |
| 365 | + maintainPlanMapper.update(new UpdateWrapper<MaintainPlanDO>().lambda() | |
| 366 | + .set(MaintainPlanDO::getFinishState, FinishStateEnum.STOP.getStatus()) | |
| 367 | + .eq(MaintainPlanDO::getFinishState, FinishStateEnum.NOT_FINISHED.getStatus()) | |
| 368 | + .eq(MaintainPlanDO::getBatchNo, batchNo)); | |
| 369 | + | |
| 370 | + | |
| 360 | 371 | } |
| 361 | 372 | |
| 362 | 373 | @Override |
| ... | ... | @@ -406,7 +417,6 @@ public class MaintainPlanServiceImpl implements MaintainPlanService { |
| 406 | 417 | @Override |
| 407 | 418 | public PageResult<AppMaintainPlanPagePlanTypeRespVO> appMaintainPlanPlanTypePage(AppMaintainPlanPagePlanTypeReqVO pageReqVO) { |
| 408 | 419 | String busiLine = SecurityFrameworkUtils.getBusiLine(); |
| 409 | - Long companyId = SecurityFrameworkUtils.getCompanyId(); | |
| 410 | 420 | if (StringUtils.isNotEmpty(busiLine)) { |
| 411 | 421 | pageReqVO.setBusiLineList(Arrays.asList(busiLine.split(","))); |
| 412 | 422 | } | ... | ... |
urbanops-module-garden/src/main/resources/mapper/maintainplan/MaintainPlanCommitMapper.xml
| ... | ... | @@ -27,7 +27,7 @@ |
| 27 | 27 | a.end_time, |
| 28 | 28 | a.company_id, |
| 29 | 29 | a.dept_id, |
| 30 | - a.finish_percent as finishPercent, | |
| 30 | + a.finish_num, | |
| 31 | 31 | c.finish_time, |
| 32 | 32 | c.user_name |
| 33 | 33 | FROM |
| ... | ... | @@ -95,16 +95,16 @@ |
| 95 | 95 | b.plan_attr, |
| 96 | 96 | b.plan_type_id, |
| 97 | 97 | b.cycle_id, |
| 98 | - b.plan_num, | |
| 98 | + a.plan_num, | |
| 99 | 99 | b.busi_line, |
| 100 | - b.plan_finish_num, | |
| 100 | + a.plan_finish_num, | |
| 101 | 101 | b.rate, |
| 102 | 102 | a.begin_time, |
| 103 | 103 | a.end_time, |
| 104 | 104 | a.company_id, |
| 105 | 105 | a.finish_state, |
| 106 | 106 | a.dept_id, |
| 107 | - a.finish_percent, | |
| 107 | + c.finish_percent, | |
| 108 | 108 | c.begin_img, |
| 109 | 109 | c.img_host, |
| 110 | 110 | c.finish_time, |
| ... | ... | @@ -120,4 +120,14 @@ |
| 120 | 120 | AND a.plan_no = c.plan_no |
| 121 | 121 | AND c.plan_no = #{req.planNo} |
| 122 | 122 | </select> |
| 123 | + | |
| 124 | + <select id="selectFinishPercent" resultType="java.lang.Integer"> | |
| 125 | + SELECT | |
| 126 | + sum(a.finish_percent) as finishPercent, | |
| 127 | + FROM | |
| 128 | + garden_maintain_plan_commit a | |
| 129 | + WHERE | |
| 130 | + a.plan_no = #{planNo} | |
| 131 | + AND a.sort_num = #{sortNum} | |
| 132 | + </select> | |
| 123 | 133 | </mapper> | ... | ... |
urbanops-module-garden/src/main/resources/mapper/maintainplan/MaintainPlanDetailMapper.xml
| ... | ... | @@ -22,7 +22,7 @@ |
| 22 | 22 | a.rate, |
| 23 | 23 | a.cycle_id, |
| 24 | 24 | c.plan_num, |
| 25 | - c.finish_percent, | |
| 25 | + c.plan_finish_num, | |
| 26 | 26 | c.finish_state, |
| 27 | 27 | c.begin_time, |
| 28 | 28 | c.end_time, |
| ... | ... | @@ -33,6 +33,8 @@ |
| 33 | 33 | WHERE a.batch_no=c.batch_no |
| 34 | 34 | AND a.deleted=0 |
| 35 | 35 | AND a.road_id = #{req.roadId} |
| 36 | + <!--状态 1:未完成;2:已完成;3:已失效--> | |
| 37 | + AND a.finish_state = #{req.finishState} | |
| 36 | 38 | <if test="req.planName != null and req.planName !=''"> |
| 37 | 39 | AND a.plan_name LIKE CONCAT('%',#{req.planName},'%') |
| 38 | 40 | </if> |
| ... | ... | @@ -48,20 +50,6 @@ |
| 48 | 50 | #{batchNo} |
| 49 | 51 | </foreach> |
| 50 | 52 | </if> |
| 51 | - <!--状态 1:未完成;2:已完成;3:已失效--> | |
| 52 | - <if test="req.finishState == 3"> | |
| 53 | - and a.finish_state = #{req.finishState} | |
| 54 | - <![CDATA[and c.end_time < #{req.localDateTime}]]> | |
| 55 | - </if> | |
| 56 | - <if test="req.finishState == 2"> | |
| 57 | - and c.finish_state = #{req.finishState} | |
| 58 | - </if> | |
| 59 | - <if test="req.finishState == 1"> | |
| 60 | - and c.finish_state = #{req.finishState} | |
| 61 | - <![CDATA[and c.end_time >= #{req.localDateTime}]]> | |
| 62 | - <![CDATA[and c.begin_time <= #{req.localDateTime}]]> | |
| 63 | - | |
| 64 | - </if> | |
| 65 | 53 | </select> |
| 66 | 54 | |
| 67 | 55 | <select id="getMaintainNotFinishPlanCommitDetail" resultType="com.zteits.urbanops.module.garden.controller.app.maintainplan.vo.AppMaintainNotFinishPlanDetailRespVO"> |
| ... | ... | @@ -73,7 +61,7 @@ |
| 73 | 61 | a.rate, |
| 74 | 62 | a.cycle_id, |
| 75 | 63 | c.plan_num, |
| 76 | - c.finish_percent, | |
| 64 | + c.plan_finish_num, | |
| 77 | 65 | c.finish_state, |
| 78 | 66 | c.begin_time, |
| 79 | 67 | c.end_time, | ... | ... |
urbanops-module-garden/src/main/resources/mapper/maintainplan/MaintainPlanMapper.xml
| ... | ... | @@ -27,10 +27,10 @@ |
| 27 | 27 | FROM |
| 28 | 28 | garden_maintain_plan a |
| 29 | 29 | JOIN -- 建议用显式JOIN代替隐式连接,可读性更高 |
| 30 | - garden_maintain_plan_detail b ON | |
| 31 | - a.batch_no = b.batch_no | |
| 30 | + garden_maintain_plan_detail b ON a.batch_no = b.batch_no | |
| 32 | 31 | AND a.deleted = b.deleted |
| 33 | 32 | WHERE a.deleted = 0 |
| 33 | + and b.finish_state = #{req.finishState} | |
| 34 | 34 | <if test="req.roadName != null and req.roadName !=''"> |
| 35 | 35 | AND a.road_name LIKE CONCAT('%',#{req.roadName},'%') |
| 36 | 36 | </if> |
| ... | ... | @@ -46,20 +46,6 @@ |
| 46 | 46 | #{busiLine} |
| 47 | 47 | </foreach> |
| 48 | 48 | </if> |
| 49 | - <!--状态 1:未完成;2:已完成;3:已失效--> | |
| 50 | - <if test="req.finishState == 3"> | |
| 51 | - and b.finish_state = #{req.finishState} | |
| 52 | - <![CDATA[and a.end_time < #{req.localDate}]]> | |
| 53 | - </if> | |
| 54 | - <if test="req.finishState == 2"> | |
| 55 | - and b.finish_state = #{req.finishState} | |
| 56 | - </if> | |
| 57 | - <if test="req.finishState == 1"> | |
| 58 | - and b.finish_state = #{req.finishState} | |
| 59 | - <![CDATA[and a.end_time >= #{req.localDate}]]> | |
| 60 | - <![CDATA[and b.end_time >= #{req.localDate}]]> | |
| 61 | - <![CDATA[and b.begin_time <= #{req.localDate}]]> | |
| 62 | - </if> | |
| 63 | 49 | </select> |
| 64 | 50 | |
| 65 | 51 | <select id="appMaintainPlanPlanTypePage" resultType="com.zteits.urbanops.module.garden.controller.app.maintainplan.vo.AppMaintainPlanPagePlanTypeRespVO"> |
| ... | ... | @@ -71,7 +57,7 @@ |
| 71 | 57 | a.rate, |
| 72 | 58 | a.cycle_id, |
| 73 | 59 | c.plan_num, |
| 74 | - c.finish_percent, | |
| 60 | + c.plan_finish_num, | |
| 75 | 61 | c.finish_state, |
| 76 | 62 | c.begin_time, |
| 77 | 63 | c.end_time |
| ... | ... | @@ -83,6 +69,8 @@ |
| 83 | 69 | AND a.deleted=c.deleted |
| 84 | 70 | AND a.deleted=0 |
| 85 | 71 | AND a.plan_type_id = #{req.planTypeId} |
| 72 | + <!--状态 1:未完成;2:已完成;3:已失效--> | |
| 73 | + AND c.finish_state = #{req.finishState} | |
| 86 | 74 | <if test="req.planName != null and req.planName !=''"> |
| 87 | 75 | AND a.plan_type_id LIKE CONCAT('%',#{req.planName},'%') |
| 88 | 76 | </if> |
| ... | ... | @@ -98,20 +86,6 @@ |
| 98 | 86 | #{busiLine} |
| 99 | 87 | </foreach> |
| 100 | 88 | </if> |
| 101 | - <!--状态 1:未完成;2:已完成;3:已失效--> | |
| 102 | - <if test="req.finishState == 3"> | |
| 103 | - and c.finish_state = #{req.finishState} | |
| 104 | - <![CDATA[and c.end_time < #{req.localDateTime}]]> | |
| 105 | - </if> | |
| 106 | - <if test="req.finishState == 2"> | |
| 107 | - and c.finish_state = #{req.finishState} | |
| 108 | - </if> | |
| 109 | - <if test="req.finishState == 1"> | |
| 110 | - and c.finish_state = #{req.finishState} | |
| 111 | - <![CDATA[and c.end_time >= #{req.localDateTime}]]> | |
| 112 | - <![CDATA[and c.begin_time <= #{req.localDateTime}]]> | |
| 113 | - | |
| 114 | - </if> | |
| 115 | 89 | </select> |
| 116 | 90 | |
| 117 | 91 | </mapper> | ... | ... |